{"version":3,"sources":["jsdelivr-header.js","/npm/@amplitude/experiment-js-client@1.22.0/dist/experiment.umd.js"],"names":[],"mappings":"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","file":"/npm/@amplitude/experiment-js-client@1.22.0/dist/experiment.umd.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.48.0.\n * Original file: /npm/@amplitude/experiment-js-client@1.22.0/dist/experiment.umd.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","/* @amplitude/experiment-js-client v1.22.0 - For license info see https://app.unpkg.com/@amplitude/experiment-js-client@1.22.0/files/LICENSE */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n    typeof define === 'function' && define.amd ? define(['exports'], factory) :\n    (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.Experiment = {}));\n})(this, (function (exports) { 'use strict';\n\n    /**\n     * @deprecated Update your version of the amplitude analytics-js SDK to 8.17.0+ and for seamless\n     * integration with the amplitude analytics SDK.\n     */\n    var AmplitudeUserProvider = /** @class */ (function () {\n        function AmplitudeUserProvider(amplitudeInstance) {\n            this.amplitudeInstance = amplitudeInstance;\n        }\n        AmplitudeUserProvider.prototype.getUser = function () {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n            return {\n                device_id: (_b = (_a = this.amplitudeInstance) === null || _a === void 0 ? void 0 : _a.options) === null || _b === void 0 ? void 0 : _b.deviceId,\n                user_id: (_d = (_c = this.amplitudeInstance) === null || _c === void 0 ? void 0 : _c.options) === null || _d === void 0 ? void 0 : _d.userId,\n                version: (_f = (_e = this.amplitudeInstance) === null || _e === void 0 ? void 0 : _e.options) === null || _f === void 0 ? void 0 : _f.versionName,\n                language: (_h = (_g = this.amplitudeInstance) === null || _g === void 0 ? void 0 : _g.options) === null || _h === void 0 ? void 0 : _h.language,\n                platform: (_k = (_j = this.amplitudeInstance) === null || _j === void 0 ? void 0 : _j.options) === null || _k === void 0 ? void 0 : _k.platform,\n                os: this.getOs(),\n                device_model: this.getDeviceModel(),\n            };\n        };\n        AmplitudeUserProvider.prototype.getOs = function () {\n            var _a, _b, _c, _d, _e, _f;\n            return [\n                (_c = (_b = (_a = this.amplitudeInstance) === null || _a === void 0 ? void 0 : _a._ua) === null || _b === void 0 ? void 0 : _b.browser) === null || _c === void 0 ? void 0 : _c.name,\n                (_f = (_e = (_d = this.amplitudeInstance) === null || _d === void 0 ? void 0 : _d._ua) === null || _e === void 0 ? void 0 : _e.browser) === null || _f === void 0 ? void 0 : _f.major,\n            ]\n                .filter(function (e) { return e !== null && e !== undefined; })\n                .join(' ');\n        };\n        AmplitudeUserProvider.prototype.getDeviceModel = function () {\n            var _a, _b, _c;\n            return (_c = (_b = (_a = this.amplitudeInstance) === null || _a === void 0 ? void 0 : _a._ua) === null || _b === void 0 ? void 0 : _b.os) === null || _c === void 0 ? void 0 : _c.name;\n        };\n        return AmplitudeUserProvider;\n    }());\n    /**\n     * @deprecated Update your version of the amplitude analytics-js SDK to 8.17.0+ and for seamless\n     * integration with the amplitude analytics SDK.\n     */\n    var AmplitudeAnalyticsProvider = /** @class */ (function () {\n        function AmplitudeAnalyticsProvider(amplitudeInstance) {\n            this.amplitudeInstance = amplitudeInstance;\n        }\n        AmplitudeAnalyticsProvider.prototype.track = function (event) {\n            this.amplitudeInstance.logEvent(event.name, event.properties);\n        };\n        AmplitudeAnalyticsProvider.prototype.setUserProperty = function (event) {\n            var _a;\n            var _b;\n            // if the variant has a value, set the user property and log an event\n            this.amplitudeInstance.setUserProperties((_a = {},\n                _a[event.userProperty] = (_b = event.variant) === null || _b === void 0 ? void 0 : _b.value,\n                _a));\n        };\n        AmplitudeAnalyticsProvider.prototype.unsetUserProperty = function (event) {\n            var _a;\n            // if the variant does not have a value, unset the user property\n            this.amplitudeInstance['_logEvent']('$identify', null, null, {\n                $unset: (_a = {}, _a[event.userProperty] = '-', _a),\n            });\n        };\n        return AmplitudeAnalyticsProvider;\n    }());\n\n    /******************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\n    var __assign$2 = function () {\n      __assign$2 = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n      };\n      return __assign$2.apply(this, arguments);\n    };\n    function __awaiter$1(thisArg, _arguments, P, generator) {\n      function adopt(value) {\n        return value instanceof P ? value : new P(function (resolve) {\n          resolve(value);\n        });\n      }\n      return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) {\n          try {\n            step(generator.next(value));\n          } catch (e) {\n            reject(e);\n          }\n        }\n        function rejected(value) {\n          try {\n            step(generator[\"throw\"](value));\n          } catch (e) {\n            reject(e);\n          }\n        }\n        function step(result) {\n          result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n        }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n      });\n    }\n    function __generator$1(thisArg, body) {\n      var _ = {\n          label: 0,\n          sent: function () {\n            if (t[0] & 1) throw t[1];\n            return t[1];\n          },\n          trys: [],\n          ops: []\n        },\n        f,\n        y,\n        t,\n        g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n      return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n        return this;\n      }), g;\n      function verb(n) {\n        return function (v) {\n          return step([n, v]);\n        };\n      }\n      function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n            case 0:\n            case 1:\n              t = op;\n              break;\n            case 4:\n              _.label++;\n              return {\n                value: op[1],\n                done: false\n              };\n            case 5:\n              _.label++;\n              y = op[1];\n              op = [0];\n              continue;\n            case 7:\n              op = _.ops.pop();\n              _.trys.pop();\n              continue;\n            default:\n              if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n                _ = 0;\n                continue;\n              }\n              if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n                _.label = op[1];\n                break;\n              }\n              if (op[0] === 6 && _.label < t[1]) {\n                _.label = t[1];\n                t = op;\n                break;\n              }\n              if (t && _.label < t[2]) {\n                _.label = t[2];\n                _.ops.push(op);\n                break;\n              }\n              if (t[2]) _.ops.pop();\n              _.trys.pop();\n              continue;\n          }\n          op = body.call(thisArg, _);\n        } catch (e) {\n          op = [6, e];\n          y = 0;\n        } finally {\n          f = t = 0;\n        }\n        if (op[0] & 5) throw op[1];\n        return {\n          value: op[0] ? op[1] : void 0,\n          done: true\n        };\n      }\n    }\n    function __values$2(o) {\n      var s = typeof Symbol === \"function\" && Symbol.iterator,\n        m = s && o[s],\n        i = 0;\n      if (m) return m.call(o);\n      if (o && typeof o.length === \"number\") return {\n        next: function () {\n          if (o && i >= o.length) o = void 0;\n          return {\n            value: o && o[i++],\n            done: !o\n          };\n        }\n      };\n      throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n    }\n    function __read$2(o, n) {\n      var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n      if (!m) return o;\n      var i = m.call(o),\n        r,\n        ar = [],\n        e;\n      try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n      } catch (error) {\n        e = {\n          error: error\n        };\n      } finally {\n        try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        } finally {\n          if (e) throw e.error;\n        }\n      }\n      return ar;\n    }\n    function __spreadArray$1(to, from, pack) {\n      if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n        }\n      }\n      return to.concat(ar || Array.prototype.slice.call(from));\n    }\n    typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n      var e = new Error(message);\n      return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n    };\n\n    /******************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\n    /* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\n    var extendStatics = function (d, b) {\n      extendStatics = Object.setPrototypeOf || {\n        __proto__: []\n      } instanceof Array && function (d, b) {\n        d.__proto__ = b;\n      } || function (d, b) {\n        for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p];\n      };\n      return extendStatics(d, b);\n    };\n    function __extends(d, b) {\n      if (typeof b !== \"function\" && b !== null) throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n      extendStatics(d, b);\n      function __() {\n        this.constructor = d;\n      }\n      d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    }\n    var __assign$1 = function () {\n      __assign$1 = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n      };\n      return __assign$1.apply(this, arguments);\n    };\n    function __awaiter(thisArg, _arguments, P, generator) {\n      function adopt(value) {\n        return value instanceof P ? value : new P(function (resolve) {\n          resolve(value);\n        });\n      }\n      return new (P || (P = Promise))(function (resolve, reject) {\n        function fulfilled(value) {\n          try {\n            step(generator.next(value));\n          } catch (e) {\n            reject(e);\n          }\n        }\n        function rejected(value) {\n          try {\n            step(generator[\"throw\"](value));\n          } catch (e) {\n            reject(e);\n          }\n        }\n        function step(result) {\n          result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected);\n        }\n        step((generator = generator.apply(thisArg, _arguments || [])).next());\n      });\n    }\n    function __generator(thisArg, body) {\n      var _ = {\n          label: 0,\n          sent: function () {\n            if (t[0] & 1) throw t[1];\n            return t[1];\n          },\n          trys: [],\n          ops: []\n        },\n        f,\n        y,\n        t,\n        g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n      return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function () {\n        return this;\n      }), g;\n      function verb(n) {\n        return function (v) {\n          return step([n, v]);\n        };\n      }\n      function step(op) {\n        if (f) throw new TypeError(\"Generator is already executing.\");\n        while (g && (g = 0, op[0] && (_ = 0)), _) try {\n          if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n          if (y = 0, t) op = [op[0] & 2, t.value];\n          switch (op[0]) {\n            case 0:\n            case 1:\n              t = op;\n              break;\n            case 4:\n              _.label++;\n              return {\n                value: op[1],\n                done: false\n              };\n            case 5:\n              _.label++;\n              y = op[1];\n              op = [0];\n              continue;\n            case 7:\n              op = _.ops.pop();\n              _.trys.pop();\n              continue;\n            default:\n              if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {\n                _ = 0;\n                continue;\n              }\n              if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {\n                _.label = op[1];\n                break;\n              }\n              if (op[0] === 6 && _.label < t[1]) {\n                _.label = t[1];\n                t = op;\n                break;\n              }\n              if (t && _.label < t[2]) {\n                _.label = t[2];\n                _.ops.push(op);\n                break;\n              }\n              if (t[2]) _.ops.pop();\n              _.trys.pop();\n              continue;\n          }\n          op = body.call(thisArg, _);\n        } catch (e) {\n          op = [6, e];\n          y = 0;\n        } finally {\n          f = t = 0;\n        }\n        if (op[0] & 5) throw op[1];\n        return {\n          value: op[0] ? op[1] : void 0,\n          done: true\n        };\n      }\n    }\n    function __values$1(o) {\n      var s = typeof Symbol === \"function\" && Symbol.iterator,\n        m = s && o[s],\n        i = 0;\n      if (m) return m.call(o);\n      if (o && typeof o.length === \"number\") return {\n        next: function () {\n          if (o && i >= o.length) o = void 0;\n          return {\n            value: o && o[i++],\n            done: !o\n          };\n        }\n      };\n      throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n    }\n    function __read$1(o, n) {\n      var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n      if (!m) return o;\n      var i = m.call(o),\n        r,\n        ar = [],\n        e;\n      try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n      } catch (error) {\n        e = {\n          error: error\n        };\n      } finally {\n        try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        } finally {\n          if (e) throw e.error;\n        }\n      }\n      return ar;\n    }\n    function __spreadArray(to, from, pack) {\n      if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n        if (ar || !(i in from)) {\n          if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n          ar[i] = from[i];\n        }\n      }\n      return to.concat(ar || Array.prototype.slice.call(from));\n    }\n    typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n      var e = new Error(message);\n      return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n    };\n    var EvaluationOperator = {\n      IS: 'is',\n      IS_NOT: 'is not',\n      CONTAINS: 'contains',\n      DOES_NOT_CONTAIN: 'does not contain',\n      LESS_THAN: 'less',\n      LESS_THAN_EQUALS: 'less or equal',\n      GREATER_THAN: 'greater',\n      GREATER_THAN_EQUALS: 'greater or equal',\n      VERSION_LESS_THAN: 'version less',\n      VERSION_LESS_THAN_EQUALS: 'version less or equal',\n      VERSION_GREATER_THAN: 'version greater',\n      VERSION_GREATER_THAN_EQUALS: 'version greater or equal',\n      SET_IS: 'set is',\n      SET_IS_NOT: 'set is not',\n      SET_CONTAINS: 'set contains',\n      SET_DOES_NOT_CONTAIN: 'set does not contain',\n      SET_CONTAINS_ANY: 'set contains any',\n      SET_DOES_NOT_CONTAIN_ANY: 'set does not contain any',\n      REGEX_MATCH: 'regex match',\n      REGEX_DOES_NOT_MATCH: 'regex does not match'\n    };\n    var stringToUtf8ByteArray = function (str) {\n      var out = [];\n      var p = 0;\n      for (var i = 0; i < str.length; i++) {\n        var c = str.charCodeAt(i);\n        if (c < 128) {\n          out[p++] = c;\n        } else if (c < 2048) {\n          out[p++] = c >> 6 | 192;\n          out[p++] = c & 63 | 128;\n        } else if ((c & 0xfc00) == 0xd800 && i + 1 < str.length && (str.charCodeAt(i + 1) & 0xfc00) == 0xdc00) {\n          // Surrogate Pair\n          c = 0x10000 + ((c & 0x03ff) << 10) + (str.charCodeAt(++i) & 0x03ff);\n          out[p++] = c >> 18 | 240;\n          out[p++] = c >> 12 & 63 | 128;\n          out[p++] = c >> 6 & 63 | 128;\n          out[p++] = c & 63 | 128;\n        } else {\n          out[p++] = c >> 12 | 224;\n          out[p++] = c >> 6 & 63 | 128;\n          out[p++] = c & 63 | 128;\n        }\n      }\n      return Uint8Array.from(out);\n    };\n    var C1_32 = -0x3361d2af;\n    var C2_32 = 0x1b873593;\n    var R1_32 = 15;\n    var R2_32 = 13;\n    var M_32 = 5;\n    var N_32 = -0x19ab949c;\n    var hash32x86 = function (input, seed) {\n      if (seed === void 0) {\n        seed = 0;\n      }\n      var data = stringToUtf8ByteArray(input);\n      var length = data.length;\n      var nBlocks = length >> 2;\n      var hash = seed;\n      // body\n      for (var i = 0; i < nBlocks; i++) {\n        var index_1 = i << 2;\n        var k = readIntLe(data, index_1);\n        hash = mix32(k, hash);\n      }\n      // tail\n      var index = nBlocks << 2;\n      var k1 = 0;\n      switch (length - index) {\n        case 3:\n          k1 ^= data[index + 2] << 16;\n          k1 ^= data[index + 1] << 8;\n          k1 ^= data[index];\n          k1 = Math.imul(k1, C1_32);\n          k1 = rotateLeft(k1, R1_32);\n          k1 = Math.imul(k1, C2_32);\n          hash ^= k1;\n          break;\n        case 2:\n          k1 ^= data[index + 1] << 8;\n          k1 ^= data[index];\n          k1 = Math.imul(k1, C1_32);\n          k1 = rotateLeft(k1, R1_32);\n          k1 = Math.imul(k1, C2_32);\n          hash ^= k1;\n          break;\n        case 1:\n          k1 ^= data[index];\n          k1 = Math.imul(k1, C1_32);\n          k1 = rotateLeft(k1, R1_32);\n          k1 = Math.imul(k1, C2_32);\n          hash ^= k1;\n          break;\n      }\n      hash ^= length;\n      return fmix32(hash) >>> 0;\n    };\n    var mix32 = function (k, hash) {\n      var kResult = k;\n      var hashResult = hash;\n      kResult = Math.imul(kResult, C1_32);\n      kResult = rotateLeft(kResult, R1_32);\n      kResult = Math.imul(kResult, C2_32);\n      hashResult ^= kResult;\n      hashResult = rotateLeft(hashResult, R2_32);\n      hashResult = Math.imul(hashResult, M_32);\n      return hashResult + N_32 | 0;\n    };\n    var fmix32 = function (hash) {\n      var hashResult = hash;\n      hashResult ^= hashResult >>> 16;\n      hashResult = Math.imul(hashResult, -0x7a143595);\n      hashResult ^= hashResult >>> 13;\n      hashResult = Math.imul(hashResult, -0x3d4d51cb);\n      hashResult ^= hashResult >>> 16;\n      return hashResult;\n    };\n    var rotateLeft = function (x, n, width) {\n      if (width === void 0) {\n        width = 32;\n      }\n      if (n > width) n = n % width;\n      var mask = 0xffffffff << width - n >>> 0;\n      var r = (x & mask) >>> 0 >>> width - n >>> 0;\n      return (x << n | r) >>> 0;\n    };\n    var readIntLe = function (data, index) {\n      if (index === void 0) {\n        index = 0;\n      }\n      var n = data[index] << 24 | data[index + 1] << 16 | data[index + 2] << 8 | data[index + 3];\n      return reverseBytes(n);\n    };\n    var reverseBytes = function (n) {\n      return (n & -0x1000000) >>> 24 | (n & 0x00ff0000) >>> 8 | (n & 0x0000ff00) << 8 | (n & 0x000000ff) << 24;\n    };\n    var select = function (selectable, selector) {\n      var e_1, _a;\n      if (!selector || selector.length === 0) {\n        return undefined;\n      }\n      try {\n        for (var selector_1 = __values$1(selector), selector_1_1 = selector_1.next(); !selector_1_1.done; selector_1_1 = selector_1.next()) {\n          var selectorElement = selector_1_1.value;\n          if (!selectorElement || !selectable || typeof selectable !== 'object') {\n            return undefined;\n          }\n          selectable = selectable[selectorElement];\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (selector_1_1 && !selector_1_1.done && (_a = selector_1.return)) _a.call(selector_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n      if (selectable === undefined || selectable === null) {\n        return undefined;\n      } else {\n        return selectable;\n      }\n    };\n\n    // major and minor should be non-negative numbers separated by a dot\n    var MAJOR_MINOR_REGEX = '(\\\\d+)\\\\.(\\\\d+)';\n    // patch should be a non-negative number\n    var PATCH_REGEX = '(\\\\d+)';\n    // prerelease is optional. If provided, it should be a hyphen followed by a\n    // series of dot separated identifiers where an identifer can contain anything in [-0-9a-zA-Z]\n    var PRERELEASE_REGEX = '(-(([-\\\\w]+\\\\.?)*))?';\n    // version pattern should be major.minor(.patchAndPreRelease) where .patchAndPreRelease is optional\n    var VERSION_PATTERN = \"^\".concat(MAJOR_MINOR_REGEX, \"(\\\\.\").concat(PATCH_REGEX).concat(PRERELEASE_REGEX, \")?$\");\n    var SemanticVersion = /** @class */function () {\n      function SemanticVersion(major, minor, patch, preRelease) {\n        if (preRelease === void 0) {\n          preRelease = undefined;\n        }\n        this.major = major;\n        this.minor = minor;\n        this.patch = patch;\n        this.preRelease = preRelease;\n      }\n      SemanticVersion.parse = function (version) {\n        if (!version) {\n          return undefined;\n        }\n        var matchGroup = new RegExp(VERSION_PATTERN).exec(version);\n        if (!matchGroup) {\n          return undefined;\n        }\n        var major = Number(matchGroup[1]);\n        var minor = Number(matchGroup[2]);\n        if (isNaN(major) || isNaN(minor)) {\n          return undefined;\n        }\n        var patch = Number(matchGroup[4]) || 0;\n        var preRelease = matchGroup[5] || undefined;\n        return new SemanticVersion(major, minor, patch, preRelease);\n      };\n      SemanticVersion.prototype.compareTo = function (other) {\n        if (this.major > other.major) return 1;\n        if (this.major < other.major) return -1;\n        if (this.minor > other.minor) return 1;\n        if (this.minor < other.minor) return -1;\n        if (this.patch > other.patch) return 1;\n        if (this.patch < other.patch) return -1;\n        if (this.preRelease && !other.preRelease) return -1;\n        if (!this.preRelease && other.preRelease) return 1;\n        if (this.preRelease && other.preRelease) {\n          if (this.preRelease > other.preRelease) return 1;\n          if (this.preRelease < other.preRelease) return -1;\n          return 0;\n        }\n        return 0;\n      };\n      return SemanticVersion;\n    }();\n    var EvaluationEngine = /** @class */function () {\n      function EvaluationEngine() {}\n      EvaluationEngine.prototype.evaluate = function (context, flags) {\n        var e_1, _a;\n        var results = {};\n        var target = {\n          context: context,\n          result: results\n        };\n        try {\n          for (var flags_1 = __values$1(flags), flags_1_1 = flags_1.next(); !flags_1_1.done; flags_1_1 = flags_1.next()) {\n            var flag = flags_1_1.value;\n            // Evaluate flag and update results.\n            var variant = this.evaluateFlag(target, flag);\n            if (variant) {\n              results[flag.key] = variant;\n            }\n          }\n        } catch (e_1_1) {\n          e_1 = {\n            error: e_1_1\n          };\n        } finally {\n          try {\n            if (flags_1_1 && !flags_1_1.done && (_a = flags_1.return)) _a.call(flags_1);\n          } finally {\n            if (e_1) throw e_1.error;\n          }\n        }\n        return results;\n      };\n      /** @alpha */\n      EvaluationEngine.prototype.evaluateWithTraces = function (context, flags) {\n        var e_2, _a;\n        var results = {};\n        var traces = {};\n        var target = {\n          context: context,\n          result: results\n        };\n        try {\n          for (var flags_2 = __values$1(flags), flags_2_1 = flags_2.next(); !flags_2_1.done; flags_2_1 = flags_2.next()) {\n            var flag = flags_2_1.value;\n            var _b = this.evaluateFlagWithTrace(target, flag),\n              variant = _b.variant,\n              trace = _b.trace;\n            if (variant) {\n              results[flag.key] = variant;\n            }\n            traces[flag.key] = trace;\n          }\n        } catch (e_2_1) {\n          e_2 = {\n            error: e_2_1\n          };\n        } finally {\n          try {\n            if (flags_2_1 && !flags_2_1.done && (_a = flags_2.return)) _a.call(flags_2);\n          } finally {\n            if (e_2) throw e_2.error;\n          }\n        }\n        return {\n          results: results,\n          traces: traces\n        };\n      };\n      EvaluationEngine.prototype.evaluateFlag = function (target, flag) {\n        var e_3, _a;\n        var result;\n        try {\n          for (var _b = __values$1(flag.segments), _c = _b.next(); !_c.done; _c = _b.next()) {\n            var segment = _c.value;\n            result = this.evaluateSegment(target, flag, segment);\n            if (result) {\n              // Merge all metadata into the result\n              var metadata = __assign$1(__assign$1(__assign$1({}, flag.metadata), segment.metadata), result.metadata);\n              result = __assign$1(__assign$1({}, result), {\n                metadata: metadata\n              });\n              break;\n            }\n          }\n        } catch (e_3_1) {\n          e_3 = {\n            error: e_3_1\n          };\n        } finally {\n          try {\n            if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n          } finally {\n            if (e_3) throw e_3.error;\n          }\n        }\n        return result;\n      };\n      EvaluationEngine.prototype.evaluateFlagWithTrace = function (target, flag) {\n        var e_4, _a, e_5, _b, e_6, _c;\n        var _d, _e;\n        var steps = [];\n        var winnerVariant;\n        var winnerSegment;\n        var matchedSegmentName;\n        try {\n          for (var _f = __values$1(flag.segments), _g = _f.next(); !_g.done; _g = _f.next()) {\n            var segment = _g.value;\n            if (!segment.conditions) {\n              var variantKey = this.bucket(target, segment);\n              var bucketed_1 = variantKey !== undefined;\n              steps.push({\n                segmentMetadata: segment.metadata,\n                conditionsPassed: true,\n                bucketed: bucketed_1,\n                bucketVariant: variantKey,\n                conditionResult: undefined,\n                matched: bucketed_1\n              });\n              if (!winnerVariant && variantKey !== undefined) {\n                winnerVariant = flag.variants[variantKey];\n                winnerSegment = segment;\n                matchedSegmentName = (_d = segment.metadata) === null || _d === void 0 ? void 0 : _d.segmentName;\n              }\n              continue;\n            }\n            var orConditionResults = [];\n            var segmentMatched = false;\n            try {\n              for (var _h = (e_5 = void 0, __values$1(segment.conditions)), _j = _h.next(); !_j.done; _j = _h.next()) {\n                var innerConditions = _j.value;\n                var match = true;\n                var andConditionResults = [];\n                try {\n                  for (var innerConditions_1 = (e_6 = void 0, __values$1(innerConditions)), innerConditions_1_1 = innerConditions_1.next(); !innerConditions_1_1.done; innerConditions_1_1 = innerConditions_1.next()) {\n                    var condition = innerConditions_1_1.value;\n                    var propValue = select(target, condition.selector);\n                    var conditionMatch = this.matchCondition(target, condition);\n                    andConditionResults.push({\n                      propValue: propValue,\n                      condition: condition,\n                      matched: conditionMatch\n                    });\n                    if (!conditionMatch) {\n                      match = false;\n                      break;\n                    }\n                  }\n                } catch (e_6_1) {\n                  e_6 = {\n                    error: e_6_1\n                  };\n                } finally {\n                  try {\n                    if (innerConditions_1_1 && !innerConditions_1_1.done && (_c = innerConditions_1.return)) _c.call(innerConditions_1);\n                  } finally {\n                    if (e_6) throw e_6.error;\n                  }\n                }\n                orConditionResults.push(andConditionResults);\n                if (match) {\n                  segmentMatched = true;\n                  break;\n                }\n              }\n            } catch (e_5_1) {\n              e_5 = {\n                error: e_5_1\n              };\n            } finally {\n              try {\n                if (_j && !_j.done && (_b = _h.return)) _b.call(_h);\n              } finally {\n                if (e_5) throw e_5.error;\n              }\n            }\n            var bucketed = false;\n            var bucketVariant = void 0;\n            if (segmentMatched) {\n              bucketVariant = this.bucket(target, segment);\n              bucketed = bucketVariant !== undefined;\n            }\n            steps.push({\n              segmentMetadata: segment.metadata,\n              conditionsPassed: segmentMatched,\n              bucketed: bucketed,\n              bucketVariant: bucketVariant,\n              conditionResult: orConditionResults,\n              matched: segmentMatched && bucketed\n            });\n            if (segmentMatched && bucketVariant !== undefined && !winnerVariant) {\n              winnerVariant = flag.variants[bucketVariant];\n              winnerSegment = segment;\n              matchedSegmentName = (_e = segment.metadata) === null || _e === void 0 ? void 0 : _e.segmentName;\n            }\n          }\n        } catch (e_4_1) {\n          e_4 = {\n            error: e_4_1\n          };\n        } finally {\n          try {\n            if (_g && !_g.done && (_a = _f.return)) _a.call(_f);\n          } finally {\n            if (e_4) throw e_4.error;\n          }\n        }\n        if (winnerVariant && winnerSegment) {\n          var metadata = __assign$1(__assign$1(__assign$1({}, flag.metadata), winnerSegment.metadata), winnerVariant.metadata);\n          winnerVariant = __assign$1(__assign$1({}, winnerVariant), {\n            metadata: metadata\n          });\n        }\n        var trace = {\n          flagKey: flag.key,\n          matched: winnerVariant !== undefined,\n          matchedSegment: matchedSegmentName,\n          steps: steps\n        };\n        return {\n          variant: winnerVariant,\n          trace: trace\n        };\n      };\n      EvaluationEngine.prototype.evaluateSegment = function (target, flag, segment) {\n        if (!segment.conditions) {\n          // Null conditions always match\n          var variantKey = this.bucket(target, segment);\n          if (variantKey !== undefined) {\n            return flag.variants[variantKey];\n          } else {\n            return undefined;\n          }\n        }\n        var match = this.evaluateConditions(target, segment.conditions);\n        // On match, bucket the user.\n        if (match) {\n          var variantKey = this.bucket(target, segment);\n          if (variantKey !== undefined) {\n            return flag.variants[variantKey];\n          } else {\n            return undefined;\n          }\n        }\n        return undefined;\n      };\n      EvaluationEngine.prototype.evaluateConditions = function (target, conditions) {\n        var e_7, _a, e_8, _b;\n        try {\n          // Outer list logic is \"or\" (||)\n          for (var conditions_1 = __values$1(conditions), conditions_1_1 = conditions_1.next(); !conditions_1_1.done; conditions_1_1 = conditions_1.next()) {\n            var innerConditions = conditions_1_1.value;\n            var match = true;\n            try {\n              for (var innerConditions_2 = (e_8 = void 0, __values$1(innerConditions)), innerConditions_2_1 = innerConditions_2.next(); !innerConditions_2_1.done; innerConditions_2_1 = innerConditions_2.next()) {\n                var condition = innerConditions_2_1.value;\n                match = this.matchCondition(target, condition);\n                if (!match) {\n                  break;\n                }\n              }\n            } catch (e_8_1) {\n              e_8 = {\n                error: e_8_1\n              };\n            } finally {\n              try {\n                if (innerConditions_2_1 && !innerConditions_2_1.done && (_b = innerConditions_2.return)) _b.call(innerConditions_2);\n              } finally {\n                if (e_8) throw e_8.error;\n              }\n            }\n            if (match) {\n              return true;\n            }\n          }\n        } catch (e_7_1) {\n          e_7 = {\n            error: e_7_1\n          };\n        } finally {\n          try {\n            if (conditions_1_1 && !conditions_1_1.done && (_a = conditions_1.return)) _a.call(conditions_1);\n          } finally {\n            if (e_7) throw e_7.error;\n          }\n        }\n        return false;\n      };\n      EvaluationEngine.prototype.matchCondition = function (target, condition) {\n        var propValue = select(target, condition.selector);\n        if (propValue === undefined || propValue === null) {\n          return this.matchNull(condition.op, condition.values);\n        } else {\n          var propValueStringList = this.coerceStringArray(propValue);\n          if (this.isSetOperator(condition.op)) {\n            if (!propValueStringList) {\n              return false;\n            }\n            return this.matchSet(propValueStringList, condition.op, condition.values);\n          } else if (propValueStringList) {\n            return this.matchStringsNonSet(propValueStringList, condition.op, condition.values);\n          } else {\n            var propValueString = this.coerceString(propValue);\n            if (propValueString !== undefined) {\n              return this.matchString(propValueString, condition.op, condition.values);\n            } else {\n              return false;\n            }\n          }\n        }\n      };\n      EvaluationEngine.prototype.getHash = function (key) {\n        return hash32x86(key);\n      };\n      EvaluationEngine.prototype.bucket = function (target, segment) {\n        var e_9, _a, e_10, _b;\n        if (!segment.bucket) {\n          // A null bucket means the segment is fully rolled out. Select the\n          // default variant.\n          return segment.variant;\n        }\n        // Select the bucketing value.\n        var bucketingValue = this.coerceString(select(target, segment.bucket.selector));\n        if (!bucketingValue || bucketingValue.length === 0) {\n          // A null or empty bucketing value cannot be bucketed. Select the\n          // default variant.\n          return segment.variant;\n        }\n        // Salt and has the value, and compute the allocation and distribution\n        // values.\n        var keyToHash = \"\".concat(segment.bucket.salt, \"/\").concat(bucketingValue);\n        var hash = this.getHash(keyToHash);\n        var allocationValue = hash % 100;\n        var distributionValue = Math.floor(hash / 100);\n        try {\n          for (var _c = __values$1(segment.bucket.allocations), _d = _c.next(); !_d.done; _d = _c.next()) {\n            var allocation = _d.value;\n            var allocationStart = allocation.range[0];\n            var allocationEnd = allocation.range[1];\n            if (allocationValue >= allocationStart && allocationValue < allocationEnd) {\n              try {\n                for (var _e = (e_10 = void 0, __values$1(allocation.distributions)), _f = _e.next(); !_f.done; _f = _e.next()) {\n                  var distribution = _f.value;\n                  var distributionStart = distribution.range[0];\n                  var distributionEnd = distribution.range[1];\n                  if (distributionValue >= distributionStart && distributionValue < distributionEnd) {\n                    return distribution.variant;\n                  }\n                }\n              } catch (e_10_1) {\n                e_10 = {\n                  error: e_10_1\n                };\n              } finally {\n                try {\n                  if (_f && !_f.done && (_b = _e.return)) _b.call(_e);\n                } finally {\n                  if (e_10) throw e_10.error;\n                }\n              }\n            }\n          }\n        } catch (e_9_1) {\n          e_9 = {\n            error: e_9_1\n          };\n        } finally {\n          try {\n            if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n          } finally {\n            if (e_9) throw e_9.error;\n          }\n        }\n        return segment.variant;\n      };\n      EvaluationEngine.prototype.matchNull = function (op, filterValues) {\n        var containsNone = this.containsNone(filterValues);\n        switch (op) {\n          case EvaluationOperator.IS:\n          case EvaluationOperator.CONTAINS:\n          case EvaluationOperator.LESS_THAN:\n          case EvaluationOperator.LESS_THAN_EQUALS:\n          case EvaluationOperator.GREATER_THAN:\n          case EvaluationOperator.GREATER_THAN_EQUALS:\n          case EvaluationOperator.VERSION_LESS_THAN:\n          case EvaluationOperator.VERSION_LESS_THAN_EQUALS:\n          case EvaluationOperator.VERSION_GREATER_THAN:\n          case EvaluationOperator.VERSION_GREATER_THAN_EQUALS:\n          case EvaluationOperator.SET_IS:\n          case EvaluationOperator.SET_CONTAINS:\n          case EvaluationOperator.SET_CONTAINS_ANY:\n            return containsNone;\n          case EvaluationOperator.IS_NOT:\n          case EvaluationOperator.DOES_NOT_CONTAIN:\n          case EvaluationOperator.SET_DOES_NOT_CONTAIN:\n          case EvaluationOperator.SET_DOES_NOT_CONTAIN_ANY:\n            return !containsNone;\n          default:\n            return false;\n        }\n      };\n      EvaluationEngine.prototype.matchSet = function (propValues, op, filterValues) {\n        switch (op) {\n          case EvaluationOperator.SET_IS:\n            return this.setEquals(propValues, filterValues);\n          case EvaluationOperator.SET_IS_NOT:\n            return !this.setEquals(propValues, filterValues);\n          case EvaluationOperator.SET_CONTAINS:\n            return this.matchesSetContainsAll(propValues, filterValues);\n          case EvaluationOperator.SET_DOES_NOT_CONTAIN:\n            return !this.matchesSetContainsAll(propValues, filterValues);\n          case EvaluationOperator.SET_CONTAINS_ANY:\n            return this.matchesSetContainsAny(propValues, filterValues);\n          case EvaluationOperator.SET_DOES_NOT_CONTAIN_ANY:\n            return !this.matchesSetContainsAny(propValues, filterValues);\n          default:\n            return false;\n        }\n      };\n      EvaluationEngine.prototype.matchString = function (propValue, op, filterValues) {\n        var _this = this;\n        switch (op) {\n          case EvaluationOperator.IS:\n            return this.matchesIs(propValue, filterValues);\n          case EvaluationOperator.IS_NOT:\n            return !this.matchesIs(propValue, filterValues);\n          case EvaluationOperator.CONTAINS:\n            return this.matchesContains(propValue, filterValues);\n          case EvaluationOperator.DOES_NOT_CONTAIN:\n            return !this.matchesContains(propValue, filterValues);\n          case EvaluationOperator.LESS_THAN:\n          case EvaluationOperator.LESS_THAN_EQUALS:\n          case EvaluationOperator.GREATER_THAN:\n          case EvaluationOperator.GREATER_THAN_EQUALS:\n            return this.matchesComparable(propValue, op, filterValues, function (value) {\n              return _this.parseNumber(value);\n            }, function (propValue, op, filterValue) {\n              return _this.comparator(propValue, op, filterValue);\n            });\n          case EvaluationOperator.VERSION_LESS_THAN:\n          case EvaluationOperator.VERSION_LESS_THAN_EQUALS:\n          case EvaluationOperator.VERSION_GREATER_THAN:\n          case EvaluationOperator.VERSION_GREATER_THAN_EQUALS:\n            return this.matchesComparable(propValue, op, filterValues, function (value) {\n              return SemanticVersion.parse(value);\n            }, function (propValue, op, filterValue) {\n              return _this.versionComparator(propValue, op, filterValue);\n            });\n          case EvaluationOperator.REGEX_MATCH:\n            return this.matchesRegex(propValue, filterValues);\n          case EvaluationOperator.REGEX_DOES_NOT_MATCH:\n            return !this.matchesRegex(propValue, filterValues);\n          default:\n            return false;\n        }\n      };\n      EvaluationEngine.prototype.matchStringsNonSet = function (propValues, op, filterValues) {\n        var _this = this;\n        return propValues.some(function (element) {\n          return _this.matchString(element, op, filterValues);\n        });\n      };\n      EvaluationEngine.prototype.matchesIs = function (propValue, filterValues) {\n        if (this.containsBooleans(filterValues)) {\n          var lower_1 = propValue.toLowerCase();\n          if (lower_1 === 'true' || lower_1 === 'false') {\n            return filterValues.some(function (value) {\n              return value.toLowerCase() === lower_1;\n            });\n          }\n        }\n        return filterValues.some(function (value) {\n          return propValue === value;\n        });\n      };\n      EvaluationEngine.prototype.matchesContains = function (propValue, filterValues) {\n        var e_11, _a;\n        try {\n          for (var filterValues_1 = __values$1(filterValues), filterValues_1_1 = filterValues_1.next(); !filterValues_1_1.done; filterValues_1_1 = filterValues_1.next()) {\n            var filterValue = filterValues_1_1.value;\n            if (propValue.toLowerCase().includes(filterValue.toLowerCase())) {\n              return true;\n            }\n          }\n        } catch (e_11_1) {\n          e_11 = {\n            error: e_11_1\n          };\n        } finally {\n          try {\n            if (filterValues_1_1 && !filterValues_1_1.done && (_a = filterValues_1.return)) _a.call(filterValues_1);\n          } finally {\n            if (e_11) throw e_11.error;\n          }\n        }\n        return false;\n      };\n      EvaluationEngine.prototype.matchesComparable = function (propValue, op, filterValues, typeTransformer, typeComparator) {\n        var _this = this;\n        var propValueTransformed = typeTransformer(propValue);\n        var filterValuesTransformed = filterValues.map(function (filterValue) {\n          return typeTransformer(filterValue);\n        }).filter(function (filterValue) {\n          return filterValue !== undefined;\n        });\n        if (propValueTransformed === undefined || filterValuesTransformed.length === 0) {\n          return filterValues.some(function (filterValue) {\n            return _this.comparator(propValue, op, filterValue);\n          });\n        } else {\n          return filterValuesTransformed.some(function (filterValueTransformed) {\n            return typeComparator(propValueTransformed, op, filterValueTransformed);\n          });\n        }\n      };\n      EvaluationEngine.prototype.comparator = function (propValue, op, filterValue) {\n        switch (op) {\n          case EvaluationOperator.LESS_THAN:\n          case EvaluationOperator.VERSION_LESS_THAN:\n            return propValue < filterValue;\n          case EvaluationOperator.LESS_THAN_EQUALS:\n          case EvaluationOperator.VERSION_LESS_THAN_EQUALS:\n            return propValue <= filterValue;\n          case EvaluationOperator.GREATER_THAN:\n          case EvaluationOperator.VERSION_GREATER_THAN:\n            return propValue > filterValue;\n          case EvaluationOperator.GREATER_THAN_EQUALS:\n          case EvaluationOperator.VERSION_GREATER_THAN_EQUALS:\n            return propValue >= filterValue;\n          default:\n            return false;\n        }\n      };\n      EvaluationEngine.prototype.versionComparator = function (propValue, op, filterValue) {\n        var compareTo = propValue.compareTo(filterValue);\n        switch (op) {\n          case EvaluationOperator.LESS_THAN:\n          case EvaluationOperator.VERSION_LESS_THAN:\n            return compareTo < 0;\n          case EvaluationOperator.LESS_THAN_EQUALS:\n          case EvaluationOperator.VERSION_LESS_THAN_EQUALS:\n            return compareTo <= 0;\n          case EvaluationOperator.GREATER_THAN:\n          case EvaluationOperator.VERSION_GREATER_THAN:\n            return compareTo > 0;\n          case EvaluationOperator.GREATER_THAN_EQUALS:\n          case EvaluationOperator.VERSION_GREATER_THAN_EQUALS:\n            return compareTo >= 0;\n          default:\n            return false;\n        }\n      };\n      EvaluationEngine.prototype.matchesRegex = function (propValue, filterValues) {\n        return filterValues.some(function (filterValue) {\n          return Boolean(new RegExp(filterValue).exec(propValue));\n        });\n      };\n      EvaluationEngine.prototype.containsNone = function (filterValues) {\n        return filterValues.some(function (filterValue) {\n          return filterValue === '(none)';\n        });\n      };\n      EvaluationEngine.prototype.containsBooleans = function (filterValues) {\n        return filterValues.some(function (filterValue) {\n          switch (filterValue.toLowerCase()) {\n            case 'true':\n            case 'false':\n              return true;\n            default:\n              return false;\n          }\n        });\n      };\n      EvaluationEngine.prototype.parseNumber = function (value) {\n        var _a;\n        return (_a = Number(value)) !== null && _a !== void 0 ? _a : undefined;\n      };\n      EvaluationEngine.prototype.coerceString = function (value) {\n        if (value === undefined || value === null) {\n          return undefined;\n        }\n        if (typeof value === 'object') {\n          return JSON.stringify(value);\n        }\n        return String(value);\n      };\n      EvaluationEngine.prototype.coerceStringArray = function (value) {\n        var _this = this;\n        if (Array.isArray(value)) {\n          var anyArray = value;\n          return anyArray.map(function (e) {\n            return _this.coerceString(e);\n          }).filter(Boolean);\n        }\n        var stringValue = String(value);\n        if (!stringValue.startsWith('[')) {\n          return undefined;\n        }\n        try {\n          var parsedValue = JSON.parse(stringValue);\n          if (Array.isArray(parsedValue)) {\n            return parsedValue.map(function (e) {\n              return _this.coerceString(e);\n            }).filter(Boolean);\n          } else {\n            return undefined;\n          }\n        } catch (_a) {\n          return undefined;\n        }\n      };\n      EvaluationEngine.prototype.isSetOperator = function (op) {\n        switch (op) {\n          case EvaluationOperator.SET_IS:\n          case EvaluationOperator.SET_IS_NOT:\n          case EvaluationOperator.SET_CONTAINS:\n          case EvaluationOperator.SET_DOES_NOT_CONTAIN:\n          case EvaluationOperator.SET_CONTAINS_ANY:\n          case EvaluationOperator.SET_DOES_NOT_CONTAIN_ANY:\n            return true;\n          default:\n            return false;\n        }\n      };\n      EvaluationEngine.prototype.setEquals = function (xa, ya) {\n        var xs = new Set(xa);\n        var ys = new Set(ya);\n        return xs.size === ys.size && __spreadArray([], __read$1(ys), false).every(function (y) {\n          return xs.has(y);\n        });\n      };\n      EvaluationEngine.prototype.matchesSetContainsAll = function (propValues, filterValues) {\n        var e_12, _a;\n        if (propValues.length < filterValues.length) {\n          return false;\n        }\n        try {\n          for (var filterValues_2 = __values$1(filterValues), filterValues_2_1 = filterValues_2.next(); !filterValues_2_1.done; filterValues_2_1 = filterValues_2.next()) {\n            var filterValue = filterValues_2_1.value;\n            if (!this.matchesIs(filterValue, propValues)) {\n              return false;\n            }\n          }\n        } catch (e_12_1) {\n          e_12 = {\n            error: e_12_1\n          };\n        } finally {\n          try {\n            if (filterValues_2_1 && !filterValues_2_1.done && (_a = filterValues_2.return)) _a.call(filterValues_2);\n          } finally {\n            if (e_12) throw e_12.error;\n          }\n        }\n        return true;\n      };\n      EvaluationEngine.prototype.matchesSetContainsAny = function (propValues, filterValues) {\n        var e_13, _a;\n        try {\n          for (var filterValues_3 = __values$1(filterValues), filterValues_3_1 = filterValues_3.next(); !filterValues_3_1.done; filterValues_3_1 = filterValues_3.next()) {\n            var filterValue = filterValues_3_1.value;\n            if (this.matchesIs(filterValue, propValues)) {\n              return true;\n            }\n          }\n        } catch (e_13_1) {\n          e_13 = {\n            error: e_13_1\n          };\n        } finally {\n          try {\n            if (filterValues_3_1 && !filterValues_3_1.done && (_a = filterValues_3.return)) _a.call(filterValues_3);\n          } finally {\n            if (e_13) throw e_13.error;\n          }\n        }\n        return false;\n      };\n      return EvaluationEngine;\n    }();\n    var topologicalSort = function (flags, flagKeys) {\n      var e_1, _a;\n      var available = __assign$1({}, flags);\n      var result = [];\n      var startingKeys = flagKeys || Object.keys(available);\n      try {\n        for (var startingKeys_1 = __values$1(startingKeys), startingKeys_1_1 = startingKeys_1.next(); !startingKeys_1_1.done; startingKeys_1_1 = startingKeys_1.next()) {\n          var flagKey = startingKeys_1_1.value;\n          var traversal = parentTraversal(flagKey, available);\n          if (traversal) {\n            result.push.apply(result, __spreadArray([], __read$1(traversal), false));\n          }\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (startingKeys_1_1 && !startingKeys_1_1.done && (_a = startingKeys_1.return)) _a.call(startingKeys_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n      return result;\n    };\n    var parentTraversal = function (flagKey, available, path) {\n      var e_2, _a;\n      if (path === void 0) {\n        path = [];\n      }\n      var flag = available[flagKey];\n      if (!flag) {\n        return undefined;\n      } else if (!flag.dependencies || flag.dependencies.length === 0) {\n        delete available[flag.key];\n        return [flag];\n      }\n      path.push(flag.key);\n      var result = [];\n      var _loop_1 = function (parentKey) {\n        if (path.some(function (p) {\n          return p === parentKey;\n        })) {\n          throw Error(\"Detected a cycle between flags \".concat(path.join(', ')));\n        }\n        var traversal = parentTraversal(parentKey, available, path);\n        if (traversal) {\n          result.push.apply(result, __spreadArray([], __read$1(traversal), false));\n        }\n      };\n      try {\n        for (var _b = __values$1(flag.dependencies), _c = _b.next(); !_c.done; _c = _b.next()) {\n          var parentKey = _c.value;\n          _loop_1(parentKey);\n        }\n      } catch (e_2_1) {\n        e_2 = {\n          error: e_2_1\n        };\n      } finally {\n        try {\n          if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n        } finally {\n          if (e_2) throw e_2.error;\n        }\n      }\n      result.push(flag);\n      path.pop();\n      delete available[flag.key];\n      return result;\n    };\n\n    /**\n     *  base64.ts\n     *\n     *  Licensed under the BSD 3-Clause License.\n     *    http://opensource.org/licenses/BSD-3-Clause\n     *\n     *  References:\n     *    http://en.wikipedia.org/wiki/Base64\n     *\n     * @author Dan Kogai (https://github.com/dankogai)\n     */\n    const version$1 = '3.7.8';\n    /**\n     * @deprecated use lowercase `version`.\n     */\n    const VERSION = version$1;\n    const _hasBuffer = typeof Buffer === 'function';\n    const _TD = typeof TextDecoder === 'function' ? new TextDecoder() : undefined;\n    const _TE = typeof TextEncoder === 'function' ? new TextEncoder() : undefined;\n    const b64ch = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n    const b64chs = Array.prototype.slice.call(b64ch);\n    const b64tab = (a => {\n      let tab = {};\n      a.forEach((c, i) => tab[c] = i);\n      return tab;\n    })(b64chs);\n    const b64re = /^(?:[A-Za-z\\d+\\/]{4})*?(?:[A-Za-z\\d+\\/]{2}(?:==)?|[A-Za-z\\d+\\/]{3}=?)?$/;\n    const _fromCC = String.fromCharCode.bind(String);\n    const _U8Afrom = typeof Uint8Array.from === 'function' ? Uint8Array.from.bind(Uint8Array) : it => new Uint8Array(Array.prototype.slice.call(it, 0));\n    const _mkUriSafe = src => src.replace(/=/g, '').replace(/[+\\/]/g, m0 => m0 == '+' ? '-' : '_');\n    const _tidyB64 = s => s.replace(/[^A-Za-z0-9\\+\\/]/g, '');\n    /**\n     * polyfill version of `btoa`\n     */\n    const btoaPolyfill = bin => {\n      // console.log('polyfilled');\n      let u32,\n        c0,\n        c1,\n        c2,\n        asc = '';\n      const pad = bin.length % 3;\n      for (let i = 0; i < bin.length;) {\n        if ((c0 = bin.charCodeAt(i++)) > 255 || (c1 = bin.charCodeAt(i++)) > 255 || (c2 = bin.charCodeAt(i++)) > 255) throw new TypeError('invalid character found');\n        u32 = c0 << 16 | c1 << 8 | c2;\n        asc += b64chs[u32 >> 18 & 63] + b64chs[u32 >> 12 & 63] + b64chs[u32 >> 6 & 63] + b64chs[u32 & 63];\n      }\n      return pad ? asc.slice(0, pad - 3) + \"===\".substring(pad) : asc;\n    };\n    /**\n     * does what `window.btoa` of web browsers do.\n     * @param {String} bin binary string\n     * @returns {string} Base64-encoded string\n     */\n    const _btoa = typeof btoa === 'function' ? bin => btoa(bin) : _hasBuffer ? bin => Buffer.from(bin, 'binary').toString('base64') : btoaPolyfill;\n    const _fromUint8Array = _hasBuffer ? u8a => Buffer.from(u8a).toString('base64') : u8a => {\n      // cf. https://stackoverflow.com/questions/12710001/how-to-convert-uint8-array-to-base64-encoded-string/12713326#12713326\n      const maxargs = 0x1000;\n      let strs = [];\n      for (let i = 0, l = u8a.length; i < l; i += maxargs) {\n        strs.push(_fromCC.apply(null, u8a.subarray(i, i + maxargs)));\n      }\n      return _btoa(strs.join(''));\n    };\n    /**\n     * converts a Uint8Array to a Base64 string.\n     * @param {boolean} [urlsafe] URL-and-filename-safe a la RFC4648 §5\n     * @returns {string} Base64 string\n     */\n    const fromUint8Array = (u8a, urlsafe = false) => urlsafe ? _mkUriSafe(_fromUint8Array(u8a)) : _fromUint8Array(u8a);\n    // This trick is found broken https://github.com/dankogai/js-base64/issues/130\n    // const utob = (src: string) => unescape(encodeURIComponent(src));\n    // reverting good old fationed regexp\n    const cb_utob = c => {\n      if (c.length < 2) {\n        var cc = c.charCodeAt(0);\n        return cc < 0x80 ? c : cc < 0x800 ? _fromCC(0xc0 | cc >>> 6) + _fromCC(0x80 | cc & 0x3f) : _fromCC(0xe0 | cc >>> 12 & 0x0f) + _fromCC(0x80 | cc >>> 6 & 0x3f) + _fromCC(0x80 | cc & 0x3f);\n      } else {\n        var cc = 0x10000 + (c.charCodeAt(0) - 0xD800) * 0x400 + (c.charCodeAt(1) - 0xDC00);\n        return _fromCC(0xf0 | cc >>> 18 & 0x07) + _fromCC(0x80 | cc >>> 12 & 0x3f) + _fromCC(0x80 | cc >>> 6 & 0x3f) + _fromCC(0x80 | cc & 0x3f);\n      }\n    };\n    const re_utob = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFFF]|[^\\x00-\\x7F]/g;\n    /**\n     * @deprecated should have been internal use only.\n     * @param {string} src UTF-8 string\n     * @returns {string} UTF-16 string\n     */\n    const utob = u => u.replace(re_utob, cb_utob);\n    //\n    const _encode = _hasBuffer ? s => Buffer.from(s, 'utf8').toString('base64') : _TE ? s => _fromUint8Array(_TE.encode(s)) : s => _btoa(utob(s));\n    /**\n     * converts a UTF-8-encoded string to a Base64 string.\n     * @param {boolean} [urlsafe] if `true` make the result URL-safe\n     * @returns {string} Base64 string\n     */\n    const encode = (src, urlsafe = false) => urlsafe ? _mkUriSafe(_encode(src)) : _encode(src);\n    /**\n     * converts a UTF-8-encoded string to URL-safe Base64 RFC4648 §5.\n     * @returns {string} Base64 string\n     */\n    const encodeURI = src => encode(src, true);\n    // This trick is found broken https://github.com/dankogai/js-base64/issues/130\n    // const btou = (src: string) => decodeURIComponent(escape(src));\n    // reverting good old fationed regexp\n    const re_btou = /[\\xC0-\\xDF][\\x80-\\xBF]|[\\xE0-\\xEF][\\x80-\\xBF]{2}|[\\xF0-\\xF7][\\x80-\\xBF]{3}/g;\n    const cb_btou = cccc => {\n      switch (cccc.length) {\n        case 4:\n          var cp = (0x07 & cccc.charCodeAt(0)) << 18 | (0x3f & cccc.charCodeAt(1)) << 12 | (0x3f & cccc.charCodeAt(2)) << 6 | 0x3f & cccc.charCodeAt(3),\n            offset = cp - 0x10000;\n          return _fromCC((offset >>> 10) + 0xD800) + _fromCC((offset & 0x3FF) + 0xDC00);\n        case 3:\n          return _fromCC((0x0f & cccc.charCodeAt(0)) << 12 | (0x3f & cccc.charCodeAt(1)) << 6 | 0x3f & cccc.charCodeAt(2));\n        default:\n          return _fromCC((0x1f & cccc.charCodeAt(0)) << 6 | 0x3f & cccc.charCodeAt(1));\n      }\n    };\n    /**\n     * @deprecated should have been internal use only.\n     * @param {string} src UTF-16 string\n     * @returns {string} UTF-8 string\n     */\n    const btou = b => b.replace(re_btou, cb_btou);\n    /**\n     * polyfill version of `atob`\n     */\n    const atobPolyfill = asc => {\n      // console.log('polyfilled');\n      asc = asc.replace(/\\s+/g, '');\n      if (!b64re.test(asc)) throw new TypeError('malformed base64.');\n      asc += '=='.slice(2 - (asc.length & 3));\n      let u24, r1, r2;\n      let binArray = []; // use array to avoid minor gc in loop\n      for (let i = 0; i < asc.length;) {\n        u24 = b64tab[asc.charAt(i++)] << 18 | b64tab[asc.charAt(i++)] << 12 | (r1 = b64tab[asc.charAt(i++)]) << 6 | (r2 = b64tab[asc.charAt(i++)]);\n        if (r1 === 64) {\n          binArray.push(_fromCC(u24 >> 16 & 255));\n        } else if (r2 === 64) {\n          binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255));\n        } else {\n          binArray.push(_fromCC(u24 >> 16 & 255, u24 >> 8 & 255, u24 & 255));\n        }\n      }\n      return binArray.join('');\n    };\n    /**\n     * does what `window.atob` of web browsers do.\n     * @param {String} asc Base64-encoded string\n     * @returns {string} binary string\n     */\n    const _atob = typeof atob === 'function' ? asc => atob(_tidyB64(asc)) : _hasBuffer ? asc => Buffer.from(asc, 'base64').toString('binary') : atobPolyfill;\n    //\n    const _toUint8Array = _hasBuffer ? a => _U8Afrom(Buffer.from(a, 'base64')) : a => _U8Afrom(_atob(a).split('').map(c => c.charCodeAt(0)));\n    /**\n     * converts a Base64 string to a Uint8Array.\n     */\n    const toUint8Array = a => _toUint8Array(_unURI(a));\n    //\n    const _decode = _hasBuffer ? a => Buffer.from(a, 'base64').toString('utf8') : _TD ? a => _TD.decode(_toUint8Array(a)) : a => btou(_atob(a));\n    const _unURI = a => _tidyB64(a.replace(/[-_]/g, m0 => m0 == '-' ? '+' : '/'));\n    /**\n     * converts a Base64 string to a UTF-8 string.\n     * @param {String} src Base64 string.  Both normal and URL-safe are supported\n     * @returns {string} UTF-8 string\n     */\n    const decode = src => _decode(_unURI(src));\n    /**\n     * check if a value is a valid Base64 string\n     * @param {String} src a value to check\n      */\n    const isValid = src => {\n      if (typeof src !== 'string') return false;\n      const s = src.replace(/\\s+/g, '').replace(/={0,2}$/, '');\n      return !/[^\\s0-9a-zA-Z\\+/]/.test(s) || !/[^\\s0-9a-zA-Z\\-_]/.test(s);\n    };\n    //\n    const _noEnum = v => {\n      return {\n        value: v,\n        enumerable: false,\n        writable: true,\n        configurable: true\n      };\n    };\n    /**\n     * extend String.prototype with relevant methods\n     */\n    const extendString = function () {\n      const _add = (name, body) => Object.defineProperty(String.prototype, name, _noEnum(body));\n      _add('fromBase64', function () {\n        return decode(this);\n      });\n      _add('toBase64', function (urlsafe) {\n        return encode(this, urlsafe);\n      });\n      _add('toBase64URI', function () {\n        return encode(this, true);\n      });\n      _add('toBase64URL', function () {\n        return encode(this, true);\n      });\n      _add('toUint8Array', function () {\n        return toUint8Array(this);\n      });\n    };\n    /**\n     * extend Uint8Array.prototype with relevant methods\n     */\n    const extendUint8Array = function () {\n      const _add = (name, body) => Object.defineProperty(Uint8Array.prototype, name, _noEnum(body));\n      _add('toBase64', function (urlsafe) {\n        return fromUint8Array(this, urlsafe);\n      });\n      _add('toBase64URI', function () {\n        return fromUint8Array(this, true);\n      });\n      _add('toBase64URL', function () {\n        return fromUint8Array(this, true);\n      });\n    };\n    /**\n     * extend Builtin prototypes with relevant methods\n     */\n    const extendBuiltins = () => {\n      extendString();\n      extendUint8Array();\n    };\n    const gBase64 = {\n      version: version$1,\n      VERSION: VERSION,\n      atob: _atob,\n      atobPolyfill: atobPolyfill,\n      btoa: _btoa,\n      btoaPolyfill: btoaPolyfill,\n      fromBase64: decode,\n      toBase64: encode,\n      encode: encode,\n      encodeURI: encodeURI,\n      encodeURL: encodeURI,\n      utob: utob,\n      btou: btou,\n      decode: decode,\n      isValid: isValid,\n      fromUint8Array: fromUint8Array,\n      toUint8Array: toUint8Array,\n      extendString: extendString,\n      extendUint8Array: extendUint8Array,\n      extendBuiltins: extendBuiltins\n    };\n    var FetchError = /** @class */function (_super) {\n      __extends(FetchError, _super);\n      function FetchError(statusCode, message) {\n        var _this = _super.call(this, message) || this;\n        _this.statusCode = statusCode;\n        Object.setPrototypeOf(_this, FetchError.prototype);\n        return _this;\n      }\n      return FetchError;\n    }(Error);\n    var TimeoutError = /** @class */function (_super) {\n      __extends(TimeoutError, _super);\n      function TimeoutError(message) {\n        var _this = _super.call(this, message) || this;\n        Object.setPrototypeOf(_this, TimeoutError.prototype);\n        return _this;\n      }\n      return TimeoutError;\n    }(Error);\n    var SdkEvaluationApi = /** @class */function () {\n      function SdkEvaluationApi(deploymentKey, serverUrl, httpClient) {\n        this.deploymentKey = deploymentKey;\n        this.serverUrl = serverUrl;\n        this.httpClient = httpClient;\n      }\n      SdkEvaluationApi.prototype.getVariants = function (user, options) {\n        return __awaiter(this, void 0, void 0, function () {\n          var userJsonBase64, headers, url, response;\n          return __generator(this, function (_a) {\n            switch (_a.label) {\n              case 0:\n                userJsonBase64 = gBase64.encodeURL(JSON.stringify(user));\n                headers = {\n                  Authorization: \"Api-Key \".concat(this.deploymentKey),\n                  'X-Amp-Exp-User': userJsonBase64\n                };\n                if (options === null || options === void 0 ? void 0 : options.flagKeys) {\n                  headers['X-Amp-Exp-Flag-Keys'] = gBase64.encodeURL(JSON.stringify(options.flagKeys));\n                }\n                // For tracking assignment events\n                if (options === null || options === void 0 ? void 0 : options.trackingOption) {\n                  headers['X-Amp-Exp-Track'] = options.trackingOption;\n                }\n                // For tracking exposure events\n                if (options === null || options === void 0 ? void 0 : options.exposureTrackingOption) {\n                  headers['X-Amp-Exp-Exposure-Track'] = options.exposureTrackingOption;\n                }\n                url = new URL(\"\".concat(this.serverUrl, \"/sdk/v2/vardata?v=0\"));\n                if (options === null || options === void 0 ? void 0 : options.evaluationMode) {\n                  url.searchParams.append('eval_mode', options === null || options === void 0 ? void 0 : options.evaluationMode);\n                }\n                if (options === null || options === void 0 ? void 0 : options.deliveryMethod) {\n                  url.searchParams.append('delivery_method', options === null || options === void 0 ? void 0 : options.deliveryMethod);\n                }\n                return [4 /*yield*/, this.httpClient.request({\n                  requestUrl: url.toString(),\n                  method: 'GET',\n                  headers: headers,\n                  timeoutMillis: options === null || options === void 0 ? void 0 : options.timeoutMillis\n                })];\n              case 1:\n                response = _a.sent();\n                if (response.status != 200) {\n                  throw new FetchError(response.status, \"Fetch error response: status=\".concat(response.status));\n                }\n                return [2 /*return*/, JSON.parse(response.body)];\n            }\n          });\n        });\n      };\n      return SdkEvaluationApi;\n    }();\n    var SdkFlagApi = /** @class */function () {\n      function SdkFlagApi(deploymentKey, serverUrl, httpClient) {\n        this.deploymentKey = deploymentKey;\n        this.serverUrl = serverUrl;\n        this.httpClient = httpClient;\n      }\n      SdkFlagApi.prototype.getFlags = function (options) {\n        return __awaiter(this, void 0, void 0, function () {\n          var headers, response, flagsArray;\n          return __generator(this, function (_a) {\n            switch (_a.label) {\n              case 0:\n                headers = {\n                  Authorization: \"Api-Key \".concat(this.deploymentKey)\n                };\n                if ((options === null || options === void 0 ? void 0 : options.libraryName) && (options === null || options === void 0 ? void 0 : options.libraryVersion)) {\n                  headers['X-Amp-Exp-Library'] = \"\".concat(options.libraryName, \"/\").concat(options.libraryVersion);\n                }\n                if (options === null || options === void 0 ? void 0 : options.user) {\n                  headers['X-Amp-Exp-User'] = gBase64.encodeURL(JSON.stringify(options.user));\n                }\n                return [4 /*yield*/, this.httpClient.request({\n                  requestUrl: \"\".concat(this.serverUrl, \"/sdk/v2/flags\") + ((options === null || options === void 0 ? void 0 : options.deliveryMethod) ? \"?delivery_method=\".concat(options.deliveryMethod) : ''),\n                  method: 'GET',\n                  headers: headers,\n                  timeoutMillis: options === null || options === void 0 ? void 0 : options.timeoutMillis\n                })];\n              case 1:\n                response = _a.sent();\n                if (response.status != 200) {\n                  throw Error(\"Flags error response: status=\".concat(response.status));\n                }\n                flagsArray = JSON.parse(response.body);\n                return [2 /*return*/, flagsArray.reduce(function (map, flag) {\n                  map[flag.key] = flag;\n                  return map;\n                }, {})];\n            }\n          });\n        });\n      };\n      return SdkFlagApi;\n    }();\n\n    /* eslint-disable no-restricted-globals -- must probe globals to resolve the runtime scope */\n    var getGlobalScope = function () {\n      if (typeof globalThis !== 'undefined' && globalThis !== null) {\n        return globalThis;\n      }\n      if (typeof window !== 'undefined' && window !== null) {\n        return window;\n      }\n      if (typeof self !== 'undefined' && self !== null) {\n        return self;\n      }\n      if (typeof global !== 'undefined' && global !== null) {\n        return global;\n      }\n      return undefined;\n    };\n    var isLocalStorageAvailable = function () {\n      var globalScope = getGlobalScope();\n      if (globalScope) {\n        try {\n          var testKey = 'EXP_test';\n          globalScope.localStorage.setItem(testKey, testKey);\n          globalScope.localStorage.removeItem(testKey);\n          return true;\n        } catch (e) {\n          return false;\n        }\n      }\n      return false;\n    };\n    var getLocalStorage = function () {\n      var _a;\n      return (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.localStorage;\n    };\n    var getSessionStorage = function () {\n      var _a;\n      return (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.sessionStorage;\n    };\n    var getDocument = function () {\n      var _a;\n      return (_a = getGlobalScope()) === null || _a === void 0 ? void 0 : _a.document;\n    };\n    var getFetch = function () {\n      var scope = getGlobalScope();\n      return (scope === null || scope === void 0 ? void 0 : scope.fetch) ? scope.fetch.bind(scope) : undefined;\n    };\n    var getSetTimeout = function () {\n      var scope = getGlobalScope();\n      return (scope === null || scope === void 0 ? void 0 : scope.setTimeout) ? scope.setTimeout.bind(scope) : undefined;\n    };\n    var getClearTimeout = function () {\n      var scope = getGlobalScope();\n      return (scope === null || scope === void 0 ? void 0 : scope.clearTimeout) ? scope.clearTimeout.bind(scope) : undefined;\n    };\n    var getSetInterval = function () {\n      var scope = getGlobalScope();\n      return (scope === null || scope === void 0 ? void 0 : scope.setInterval) ? scope.setInterval.bind(scope) : undefined;\n    };\n    var getClearInterval = function () {\n      var scope = getGlobalScope();\n      return (scope === null || scope === void 0 ? void 0 : scope.clearInterval) ? scope.clearInterval.bind(scope) : undefined;\n    };\n    var Poller = /** @class */function () {\n      function Poller(action, ms) {\n        this.poller = undefined;\n        this.action = action;\n        this.ms = ms;\n      }\n      Poller.prototype.start = function () {\n        var _this = this;\n        if (this.poller) {\n          return;\n        }\n        var setInterval = getSetInterval();\n        if (!setInterval) {\n          return;\n        }\n        this.poller = setInterval(function () {\n          void _this.action();\n        }, this.ms);\n        void this.action();\n      };\n      Poller.prototype.stop = function () {\n        if (!this.poller) {\n          return;\n        }\n        var clearInterval = getClearInterval();\n        if (clearInterval) {\n          // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n          // @ts-ignore\n          clearInterval(this.poller);\n        }\n        this.poller = undefined;\n      };\n      return Poller;\n    }();\n\n    var parseAmplitudeCookie = function (apiKey, newFormat) {\n        var e_1, _a;\n        if (newFormat === void 0) { newFormat = false; }\n        // Get the cookie value\n        var key = generateKey(apiKey, newFormat);\n        var value = undefined;\n        var document = getDocument();\n        if (!document) {\n            return;\n        }\n        var cookies = document.cookie.split('; ');\n        try {\n            for (var cookies_1 = __values$2(cookies), cookies_1_1 = cookies_1.next(); !cookies_1_1.done; cookies_1_1 = cookies_1.next()) {\n                var cookie = cookies_1_1.value;\n                var _b = __read$2(cookie.split('=', 2), 2), cookieKey = _b[0], cookieValue = _b[1];\n                if (cookieKey === key) {\n                    value = decodeURIComponent(cookieValue);\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (cookies_1_1 && !cookies_1_1.done && (_a = cookies_1.return)) _a.call(cookies_1);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        if (!value) {\n            return;\n        }\n        // Parse cookie value depending on format\n        try {\n            // New format\n            if (newFormat) {\n                var decoding = atob(value);\n                return JSON.parse(decodeURIComponent(decoding));\n            }\n            // Old format\n            var values = value.split('.');\n            var userId = undefined;\n            if (values.length >= 2 && values[1]) {\n                userId = atob(values[1]);\n            }\n            return {\n                deviceId: values[0],\n                userId: userId,\n            };\n        }\n        catch (e) {\n            return;\n        }\n    };\n    var parseAmplitudeLocalStorage = function (apiKey) {\n        var key = generateKey(apiKey, true);\n        try {\n            var localStorage_1 = getLocalStorage();\n            if (!localStorage_1)\n                return;\n            var value = localStorage_1.getItem(key);\n            if (!value)\n                return;\n            var state = JSON.parse(value);\n            if (typeof state !== 'object')\n                return;\n            return state;\n        }\n        catch (_a) {\n            return;\n        }\n    };\n    var parseAmplitudeSessionStorage = function (apiKey) {\n        var key = generateKey(apiKey, true);\n        try {\n            var sessionStorage_1 = getSessionStorage();\n            if (!sessionStorage_1)\n                return;\n            var value = sessionStorage_1.getItem(key);\n            if (!value)\n                return;\n            var state = JSON.parse(value);\n            if (typeof state !== 'object')\n                return;\n            return state;\n        }\n        catch (_a) {\n            return;\n        }\n    };\n    var generateKey = function (apiKey, newFormat) {\n        if (newFormat) {\n            if ((apiKey === null || apiKey === void 0 ? void 0 : apiKey.length) < 10) {\n                return;\n            }\n            return \"AMP_\".concat(apiKey.substring(0, 10));\n        }\n        if ((apiKey === null || apiKey === void 0 ? void 0 : apiKey.length) < 6) {\n            return;\n        }\n        return \"amp_\".concat(apiKey.substring(0, 6));\n    };\n\n    /**\n     * Integration plugin for Amplitude Analytics. Uses the analytics connector to\n     * track events and get user identity.\n     *\n     * On initialization, this plugin attempts to read the user identity from all\n     * the storage locations and formats supported by the analytics SDK, then\n     * commits the identity to the connector. The order of locations checks are:\n     *  - Cookie\n     *  - Cookie (Legacy)\n     *  - Local Storage\n     *  - Session Storage\n     *\n     * Events are tracked only if the connector has an event receiver set, otherwise\n     * track returns false, and events are persisted and managed by the\n     * IntegrationManager.\n     */\n    var AmplitudeIntegrationPlugin = /** @class */ (function () {\n        function AmplitudeIntegrationPlugin(apiKey, connector, timeoutMillis) {\n            this.type = 'integration';\n            this.apiKey = apiKey;\n            this.identityStore = connector.identityStore;\n            this.eventBridge = connector.eventBridge;\n            this.contextProvider = connector.applicationContextProvider;\n            this.timeoutMillis = timeoutMillis;\n            this.loadPersistedState();\n            if (timeoutMillis <= 0) {\n                this.setup = undefined;\n            }\n        }\n        AmplitudeIntegrationPlugin.prototype.setup = function (config, client) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    // Setup automatic fetch on amplitude identity change.\n                    if (config === null || config === void 0 ? void 0 : config.automaticFetchOnAmplitudeIdentityChange) {\n                        this.identityStore.addIdentityListener(function () {\n                            void (client === null || client === void 0 ? void 0 : client.fetch());\n                        });\n                    }\n                    return [2 /*return*/, this.waitForConnectorIdentity(this.timeoutMillis)];\n                });\n            });\n        };\n        AmplitudeIntegrationPlugin.prototype.getUser = function () {\n            var identity = this.identityStore.getIdentity();\n            return {\n                user_id: identity.userId,\n                device_id: identity.deviceId,\n                user_properties: identity.userProperties,\n                version: this.contextProvider.versionName,\n            };\n        };\n        AmplitudeIntegrationPlugin.prototype.track = function (event) {\n            // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n            // @ts-ignore\n            if (!this.eventBridge.receiver) {\n                return false;\n            }\n            this.eventBridge.logEvent({\n                eventType: event.eventType,\n                eventProperties: event.eventProperties,\n            });\n            return true;\n        };\n        AmplitudeIntegrationPlugin.prototype.loadPersistedState = function () {\n            // Avoid reading state if the api key is undefined or an experiment\n            // deployment.\n            if (!this.apiKey || this.apiKey.startsWith('client-')) {\n                return false;\n            }\n            // New cookie format\n            var user = parseAmplitudeCookie(this.apiKey, true);\n            if (user) {\n                this.commitIdentityToConnector(user);\n                return true;\n            }\n            // Old cookie format\n            user = parseAmplitudeCookie(this.apiKey, false);\n            if (user) {\n                this.commitIdentityToConnector(user);\n                return true;\n            }\n            // Local storage\n            user = parseAmplitudeLocalStorage(this.apiKey);\n            if (user) {\n                this.commitIdentityToConnector(user);\n                return true;\n            }\n            // Session storage\n            user = parseAmplitudeSessionStorage(this.apiKey);\n            if (user) {\n                this.commitIdentityToConnector(user);\n                return true;\n            }\n            return false;\n        };\n        AmplitudeIntegrationPlugin.prototype.commitIdentityToConnector = function (user) {\n            var editor = this.identityStore.editIdentity();\n            editor.setDeviceId(user.deviceId);\n            if (user.userId) {\n                editor.setUserId(user.userId);\n            }\n            editor.commit();\n        };\n        AmplitudeIntegrationPlugin.prototype.waitForConnectorIdentity = function (ms) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                var identity;\n                var _this = this;\n                return __generator$1(this, function (_a) {\n                    identity = this.identityStore.getIdentity();\n                    if (!identity.userId && !identity.deviceId) {\n                        return [2 /*return*/, Promise.race([\n                                new Promise(function (resolve) {\n                                    var listener = function () {\n                                        resolve();\n                                        _this.identityStore.removeIdentityListener(listener);\n                                    };\n                                    _this.identityStore.addIdentityListener(listener);\n                                }),\n                                new Promise(function (_, reject) {\n                                    var setTimeoutFn = getSetTimeout();\n                                    if (!setTimeoutFn) {\n                                        reject('Timed out waiting for Amplitude Analytics SDK to initialize.');\n                                        return;\n                                    }\n                                    setTimeoutFn(reject, ms, 'Timed out waiting for Amplitude Analytics SDK to initialize.');\n                                }),\n                            ])];\n                    }\n                    return [2 /*return*/];\n                });\n            });\n        };\n        return AmplitudeIntegrationPlugin;\n    }());\n\n    var ApplicationContextProviderImpl = /** @class */function () {\n      function ApplicationContextProviderImpl() {}\n      ApplicationContextProviderImpl.prototype.getApplicationContext = function () {\n        return {\n          versionName: this.versionName,\n          language: getLanguage(),\n          platform: 'Web',\n          os: undefined,\n          deviceModel: undefined\n        };\n      };\n      return ApplicationContextProviderImpl;\n    }();\n    var getLanguage = function () {\n      return typeof navigator !== 'undefined' && (navigator.languages && navigator.languages[0] || navigator.language) || '';\n    };\n    var EventBridgeImpl = /** @class */function () {\n      function EventBridgeImpl() {\n        this.queue = [];\n      }\n      EventBridgeImpl.prototype.logEvent = function (event) {\n        if (!this.receiver) {\n          if (this.queue.length < 512) {\n            this.queue.push(event);\n          }\n        } else {\n          this.receiver(event);\n        }\n      };\n      EventBridgeImpl.prototype.setEventReceiver = function (receiver) {\n        this.receiver = receiver;\n        if (this.queue.length > 0) {\n          this.queue.forEach(function (event) {\n            receiver(event);\n          });\n          this.queue = [];\n        }\n      };\n      return EventBridgeImpl;\n    }();\n\n    /******************************************************************************\r\n    Copyright (c) Microsoft Corporation.\r\n\r\n    Permission to use, copy, modify, and/or distribute this software for any\r\n    purpose with or without fee is hereby granted.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\n    REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\n    AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\n    INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\n    LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\n    OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\n    PERFORMANCE OF THIS SOFTWARE.\r\n    ***************************************************************************** */\n    var __assign = function () {\n      __assign = Object.assign || function __assign(t) {\n        for (var s, i = 1, n = arguments.length; i < n; i++) {\n          s = arguments[i];\n          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n        }\n        return t;\n      };\n      return __assign.apply(this, arguments);\n    };\n    function __values(o) {\n      var s = typeof Symbol === \"function\" && Symbol.iterator,\n        m = s && o[s],\n        i = 0;\n      if (m) return m.call(o);\n      if (o && typeof o.length === \"number\") return {\n        next: function () {\n          if (o && i >= o.length) o = void 0;\n          return {\n            value: o && o[i++],\n            done: !o\n          };\n        }\n      };\n      throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n    }\n    function __read(o, n) {\n      var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n      if (!m) return o;\n      var i = m.call(o),\n        r,\n        ar = [],\n        e;\n      try {\n        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n      } catch (error) {\n        e = {\n          error: error\n        };\n      } finally {\n        try {\n          if (r && !r.done && (m = i[\"return\"])) m.call(i);\n        } finally {\n          if (e) throw e.error;\n        }\n      }\n      return ar;\n    }\n    typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n      var e = new Error(message);\n      return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n    };\n\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    var isEqual = function (obj1, obj2) {\n      var e_1, _a;\n      var primitive = ['string', 'number', 'boolean', 'undefined'];\n      var typeA = typeof obj1;\n      var typeB = typeof obj2;\n      if (typeA !== typeB) {\n        return false;\n      }\n      try {\n        for (var primitive_1 = __values(primitive), primitive_1_1 = primitive_1.next(); !primitive_1_1.done; primitive_1_1 = primitive_1.next()) {\n          var p = primitive_1_1.value;\n          if (p === typeA) {\n            return obj1 === obj2;\n          }\n        }\n      } catch (e_1_1) {\n        e_1 = {\n          error: e_1_1\n        };\n      } finally {\n        try {\n          if (primitive_1_1 && !primitive_1_1.done && (_a = primitive_1.return)) _a.call(primitive_1);\n        } finally {\n          if (e_1) throw e_1.error;\n        }\n      }\n      // check null\n      if (obj1 == null && obj2 == null) {\n        return true;\n      } else if (obj1 == null || obj2 == null) {\n        return false;\n      }\n      // if got here - objects\n      if (obj1.length !== obj2.length) {\n        return false;\n      }\n      //check if arrays\n      var isArrayA = Array.isArray(obj1);\n      var isArrayB = Array.isArray(obj2);\n      if (isArrayA !== isArrayB) {\n        return false;\n      }\n      if (isArrayA && isArrayB) {\n        //arrays\n        for (var i = 0; i < obj1.length; i++) {\n          if (!isEqual(obj1[i], obj2[i])) {\n            return false;\n          }\n        }\n      } else {\n        //objects\n        var sorted1 = Object.keys(obj1).sort();\n        var sorted2 = Object.keys(obj2).sort();\n        if (!isEqual(sorted1, sorted2)) {\n          return false;\n        }\n        //compare object values\n        var result_1 = true;\n        Object.keys(obj1).forEach(function (key) {\n          if (!isEqual(obj1[key], obj2[key])) {\n            result_1 = false;\n          }\n        });\n        return result_1;\n      }\n      return true;\n    };\n    var ID_OP_SET = '$set';\n    var ID_OP_UNSET = '$unset';\n    var ID_OP_CLEAR_ALL = '$clearAll';\n    // Polyfill for Object.entries\n    if (!Object.entries) {\n      Object.entries = function (obj) {\n        var ownProps = Object.keys(obj);\n        var i = ownProps.length;\n        var resArray = new Array(i);\n        while (i--) {\n          resArray[i] = [ownProps[i], obj[ownProps[i]]];\n        }\n        return resArray;\n      };\n    }\n    var IdentityStoreImpl = /** @class */function () {\n      function IdentityStoreImpl() {\n        this.identity = {\n          userProperties: {}\n        };\n        this.listeners = new Set();\n      }\n      IdentityStoreImpl.prototype.editIdentity = function () {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        var self = this;\n        var actingUserProperties = __assign({}, this.identity.userProperties);\n        var actingIdentity = __assign(__assign({}, this.identity), {\n          userProperties: actingUserProperties\n        });\n        return {\n          setUserId: function (userId) {\n            actingIdentity.userId = userId;\n            return this;\n          },\n          setDeviceId: function (deviceId) {\n            actingIdentity.deviceId = deviceId;\n            return this;\n          },\n          setUserProperties: function (userProperties) {\n            actingIdentity.userProperties = userProperties;\n            return this;\n          },\n          setOptOut: function (optOut) {\n            actingIdentity.optOut = optOut;\n            return this;\n          },\n          updateUserProperties: function (actions) {\n            var e_1, _a, e_2, _b, e_3, _c;\n            var actingProperties = actingIdentity.userProperties || {};\n            try {\n              for (var _d = __values(Object.entries(actions)), _e = _d.next(); !_e.done; _e = _d.next()) {\n                var _f = __read(_e.value, 2),\n                  action = _f[0],\n                  properties = _f[1];\n                switch (action) {\n                  case ID_OP_SET:\n                    try {\n                      for (var _g = (e_2 = void 0, __values(Object.entries(properties))), _h = _g.next(); !_h.done; _h = _g.next()) {\n                        var _j = __read(_h.value, 2),\n                          key = _j[0],\n                          value = _j[1];\n                        actingProperties[key] = value;\n                      }\n                    } catch (e_2_1) {\n                      e_2 = {\n                        error: e_2_1\n                      };\n                    } finally {\n                      try {\n                        if (_h && !_h.done && (_b = _g.return)) _b.call(_g);\n                      } finally {\n                        if (e_2) throw e_2.error;\n                      }\n                    }\n                    break;\n                  case ID_OP_UNSET:\n                    try {\n                      for (var _k = (e_3 = void 0, __values(Object.keys(properties))), _l = _k.next(); !_l.done; _l = _k.next()) {\n                        var key = _l.value;\n                        delete actingProperties[key];\n                      }\n                    } catch (e_3_1) {\n                      e_3 = {\n                        error: e_3_1\n                      };\n                    } finally {\n                      try {\n                        if (_l && !_l.done && (_c = _k.return)) _c.call(_k);\n                      } finally {\n                        if (e_3) throw e_3.error;\n                      }\n                    }\n                    break;\n                  case ID_OP_CLEAR_ALL:\n                    actingProperties = {};\n                    break;\n                }\n              }\n            } catch (e_1_1) {\n              e_1 = {\n                error: e_1_1\n              };\n            } finally {\n              try {\n                if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n              } finally {\n                if (e_1) throw e_1.error;\n              }\n            }\n            actingIdentity.userProperties = actingProperties;\n            return this;\n          },\n          commit: function () {\n            self.setIdentity(actingIdentity);\n            return this;\n          }\n        };\n      };\n      IdentityStoreImpl.prototype.getIdentity = function () {\n        return __assign({}, this.identity);\n      };\n      IdentityStoreImpl.prototype.setIdentity = function (identity) {\n        var originalIdentity = __assign({}, this.identity);\n        this.identity = __assign({}, identity);\n        if (!isEqual(originalIdentity, this.identity)) {\n          this.listeners.forEach(function (listener) {\n            listener(identity);\n          });\n        }\n      };\n      IdentityStoreImpl.prototype.addIdentityListener = function (listener) {\n        this.listeners.add(listener);\n      };\n      IdentityStoreImpl.prototype.removeIdentityListener = function (listener) {\n        this.listeners.delete(listener);\n      };\n      return IdentityStoreImpl;\n    }();\n\n    /* eslint-disable no-restricted-globals -- standalone global shim; cannot depend on experiment-core */\n    var safeGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof global !== 'undefined' ? global : self;\n    var AnalyticsConnector = /** @class */function () {\n      function AnalyticsConnector() {\n        this.identityStore = new IdentityStoreImpl();\n        this.eventBridge = new EventBridgeImpl();\n        this.applicationContextProvider = new ApplicationContextProviderImpl();\n      }\n      AnalyticsConnector.getInstance = function (instanceName) {\n        if (!safeGlobal['analyticsConnectorInstances']) {\n          safeGlobal['analyticsConnectorInstances'] = {};\n        }\n        if (!safeGlobal['analyticsConnectorInstances'][instanceName]) {\n          safeGlobal['analyticsConnectorInstances'][instanceName] = new AnalyticsConnector();\n        }\n        return safeGlobal['analyticsConnectorInstances'][instanceName];\n      };\n      return AnalyticsConnector;\n    }();\n\n    function unfetch (e, n) {\n      return n = n || {}, new Promise(function (t, r) {\n        var s = new XMLHttpRequest(),\n          o = [],\n          u = [],\n          i = {},\n          a = function () {\n            return {\n              ok: 2 == (s.status / 100 | 0),\n              statusText: s.statusText,\n              status: s.status,\n              url: s.responseURL,\n              text: function () {\n                return Promise.resolve(s.responseText);\n              },\n              json: function () {\n                return Promise.resolve(JSON.parse(s.responseText));\n              },\n              blob: function () {\n                return Promise.resolve(new Blob([s.response]));\n              },\n              clone: a,\n              headers: {\n                keys: function () {\n                  return o;\n                },\n                entries: function () {\n                  return u;\n                },\n                get: function (e) {\n                  return i[e.toLowerCase()];\n                },\n                has: function (e) {\n                  return e.toLowerCase() in i;\n                }\n              }\n            };\n          };\n        for (var l in s.open(n.method || \"get\", e, !0), s.onload = function () {\n          s.getAllResponseHeaders().replace(/^(.*?):[^\\S\\n]*([\\s\\S]*?)$/gm, function (e, n, t) {\n            o.push(n = n.toLowerCase()), u.push([n, t]), i[n] = i[n] ? i[n] + \",\" + t : t;\n          }), t(a());\n        }, s.onerror = r, s.withCredentials = \"include\" == n.credentials, n.headers) s.setRequestHeader(l, n.headers[l]);\n        s.send(n.body || null);\n      });\n    }\n\n    /**\n     * @packageDocumentation\n     * @internal\n     */\n    var fetch = getFetch() || unfetch;\n    /*\n     * Copied from:\n     * https://github.com/github/fetch/issues/175#issuecomment-284787564\n     */\n    var timeout = function (promise, timeoutMillis) {\n        // Don't timeout if timeout is null or invalid\n        if (timeoutMillis == null || timeoutMillis <= 0) {\n            return promise;\n        }\n        return new Promise(function (resolve, reject) {\n            var setTimeoutFn = getSetTimeout();\n            if (setTimeoutFn) {\n                setTimeoutFn(function () {\n                    reject(new TimeoutError(\"Request timeout after \".concat(timeoutMillis, \" milliseconds\")));\n                }, timeoutMillis);\n            }\n            promise.then(resolve, reject);\n        });\n    };\n    var _request = function (requestUrl, method, headers, data, timeoutMillis) {\n        var call = function () { return __awaiter$1(void 0, void 0, void 0, function () {\n            var response, simpleResponse;\n            var _a;\n            return __generator$1(this, function (_b) {\n                switch (_b.label) {\n                    case 0: return [4 /*yield*/, fetch(requestUrl, {\n                            method: method,\n                            headers: headers,\n                            body: data,\n                        })];\n                    case 1:\n                        response = _b.sent();\n                        _a = {\n                            status: response.status\n                        };\n                        return [4 /*yield*/, response.text()];\n                    case 2:\n                        simpleResponse = (_a.body = _b.sent(),\n                            _a);\n                        return [2 /*return*/, simpleResponse];\n                }\n            });\n        }); };\n        return timeout(call(), timeoutMillis);\n    };\n    /**\n     * Wrap the exposed HttpClient in a CoreClient implementation to work with\n     * FlagsApi and EvaluationApi.\n     */\n    var WrapperClient = /** @class */ (function () {\n        function WrapperClient(client) {\n            this.client = client;\n        }\n        WrapperClient.prototype.request = function (request) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0: return [4 /*yield*/, this.client.request(request.requestUrl, request.method, request.headers, null, request.timeoutMillis)];\n                        case 1: return [2 /*return*/, _a.sent()];\n                    }\n                });\n            });\n        };\n        return WrapperClient;\n    }());\n    var FetchHttpClient = { request: _request };\n\n    /**\n     * Log level enumeration for controlling logging verbosity.\n     * @category Logging\n     */\n    exports.LogLevel = void 0;\n    (function (LogLevel) {\n        /**\n         * Disable all logging\n         */\n        LogLevel[LogLevel[\"Disable\"] = 0] = \"Disable\";\n        /**\n         * Error level logging - only critical errors\n         */\n        LogLevel[LogLevel[\"Error\"] = 1] = \"Error\";\n        /**\n         * Warning level logging - errors and warnings\n         */\n        LogLevel[LogLevel[\"Warn\"] = 2] = \"Warn\";\n        /**\n         * Info level logging - errors, warnings, and informational messages\n         */\n        LogLevel[LogLevel[\"Info\"] = 3] = \"Info\";\n        /**\n         * Debug level logging - errors, warnings, info, and debug messages\n         */\n        LogLevel[LogLevel[\"Debug\"] = 4] = \"Debug\";\n        /**\n         * Verbose level logging - all messages including verbose details\n         */\n        LogLevel[LogLevel[\"Verbose\"] = 5] = \"Verbose\";\n    })(exports.LogLevel || (exports.LogLevel = {}));\n\n    /**\n     * Determines the primary source of variants before falling back.\n     *\n     * @category Source\n     */\n    exports.Source = void 0;\n    (function (Source) {\n        /**\n         * The default way to source variants within your application. Before the\n         * assignments are fetched, `getVariant(s)` will fallback to local storage\n         * first, then `initialVariants` if local storage is empty. This option\n         * effectively falls back to an assignment fetched previously.\n         */\n        Source[\"LocalStorage\"] = \"localStorage\";\n        /**\n         * This bootstrap option is used primarily for servers-side rendering using an\n         * Experiment server SDK. This bootstrap option always prefers the config\n         * `initialVariants` over data in local storage, even if variants are fetched\n         * successfully and stored locally.\n         */\n        Source[\"InitialVariants\"] = \"initialVariants\";\n    })(exports.Source || (exports.Source = {}));\n    /**\n     * Indicates from which source the variant() function determines the variant\n     *\n     * @category Source\n     */\n    var VariantSource;\n    (function (VariantSource) {\n        VariantSource[\"LocalStorage\"] = \"storage\";\n        VariantSource[\"InitialVariants\"] = \"initial\";\n        VariantSource[\"SecondaryLocalStorage\"] = \"secondary-storage\";\n        VariantSource[\"SecondaryInitialVariants\"] = \"secondary-initial\";\n        VariantSource[\"FallbackInline\"] = \"fallback-inline\";\n        VariantSource[\"FallbackConfig\"] = \"fallback-config\";\n        VariantSource[\"LocalEvaluation\"] = \"local-evaluation\";\n    })(VariantSource || (VariantSource = {}));\n    /**\n     * Returns true if the VariantSource is one of the fallbacks (inline or config)\n     *\n     * @param source a {@link VariantSource}\n     * @returns true if source is {@link VariantSource.FallbackInline} or {@link VariantSource.FallbackConfig}\n     */\n    var isFallback = function (source) {\n        return (!source ||\n            source === VariantSource.FallbackInline ||\n            source === VariantSource.FallbackConfig ||\n            source === VariantSource.SecondaryInitialVariants);\n    };\n\n    /**\n     Defaults for Experiment Config options\n\n     | **Option**       | **Default**                       |\n     |------------------|-----------------------------------|\n     | **debug**        | `false`                           |\n     | **logLevel**     | `LogLevel.Error`                  |\n     | **logger**       | `null` (ConsoleLogger will be used) |\n     | **instanceName** | `$default_instance` |\n     | **fallbackVariant**         | `null`                 |\n     | **initialVariants**         | `null`                 |\n     | **initialFlags**         | `undefined`                 |\n     | **source** | `Source.LocalStorage` |\n     | **serverUrl**    | `\"https://api.lab.amplitude.com\"` |\n     | **flagsServerUrl**    | `\"https://flag.lab.amplitude.com\"` |\n     | **serverZone**    | `\"US\"` |\n     | **assignmentTimeoutMillis**    | `10000` |\n     | **retryFailedAssignment**    | `true` |\n     | **automaticExposureTracking** | `true` |\n     | **pollOnStart** | `true` |\n     | **flagConfigPollingIntervalMillis** | `300000` |\n     | **fetchOnStart** | `true` |\n     | **automaticFetchOnAmplitudeIdentityChange** | `false` |\n     | **userProvider**    | `null` |\n     | **analyticsProvider**    | `null` |\n     | **exposureTrackingProvider**    | `null` |\n\n     *\n     * @category Configuration\n     */\n    var Defaults = {\n        debug: false,\n        logLevel: exports.LogLevel.Error,\n        loggerProvider: null,\n        instanceName: '$default_instance',\n        fallbackVariant: {},\n        initialVariants: {},\n        initialFlags: undefined,\n        source: exports.Source.LocalStorage,\n        serverUrl: 'https://api.lab.amplitude.com',\n        flagsServerUrl: 'https://flag.lab.amplitude.com',\n        serverZone: 'US',\n        fetchTimeoutMillis: 10000,\n        retryFetchOnFailure: true,\n        throwOnError: false,\n        automaticExposureTracking: true,\n        pollOnStart: true,\n        flagConfigPollingIntervalMillis: 300000,\n        fetchOnStart: true,\n        automaticFetchOnAmplitudeIdentityChange: false,\n        userProvider: null,\n        analyticsProvider: null,\n        exposureTrackingProvider: null,\n        httpClient: FetchHttpClient,\n    };\n\n    var version = \"1.22.0\";\n\n    var MAX_QUEUE_SIZE = 512;\n    /**\n     * Handles integration plugin management, event persistence and deduplication.\n     */\n    var IntegrationManager = /** @class */ (function () {\n        function IntegrationManager(config, client) {\n            var _this = this;\n            var _a;\n            this.isReady = new Promise(function (resolve) {\n                _this.resolve = resolve;\n            });\n            this.config = config;\n            this.client = client;\n            var instanceName = (_a = config.instanceName) !== null && _a !== void 0 ? _a : Defaults.instanceName;\n            this.queue = new PersistentTrackingQueue(instanceName);\n            this.cache = new SessionDedupeCache(instanceName);\n        }\n        /**\n         * Returns a promise when the integration has completed setup. If no\n         * integration has been set, returns a resolved promise.\n         */\n        IntegrationManager.prototype.ready = function () {\n            if (!this.integration) {\n                return Promise.resolve();\n            }\n            return this.isReady;\n        };\n        /**\n         * Set the integration to be managed. An existing integration is torndown,\n         * and the new integration is setup. This function resolves the promise\n         * returned by ready() if it has not already been resolved.\n         *\n         * @param integration the integration to manage.\n         */\n        IntegrationManager.prototype.setIntegration = function (integration) {\n            var _this = this;\n            if (this.integration && this.integration.teardown) {\n                void this.integration.teardown();\n            }\n            this.integration = integration;\n            if (integration.setup) {\n                this.integration.setup(this.config, this.client).then(function () {\n                    _this.queue.setTracker(_this.integration.track.bind(integration));\n                    _this.resolve();\n                }, function () {\n                    _this.queue.setTracker(_this.integration.track.bind(integration));\n                    _this.resolve();\n                });\n            }\n            else {\n                this.queue.setTracker(this.integration.track.bind(integration));\n                this.resolve();\n            }\n        };\n        /**\n         * Get the user from the integration. If no integration is set, returns an\n         * empty object.\n         */\n        IntegrationManager.prototype.getUser = function () {\n            if (!this.integration) {\n                return {};\n            }\n            return this.integration.getUser();\n        };\n        /**\n         * Deduplicates exposures using session storage, then tracks the event to the\n         * integration. If no integration is set, or if the integration returns false,\n         * the event is persisted in local storage.\n         *\n         * @param exposure\n         * @param user\n         */\n        IntegrationManager.prototype.track = function (exposure, user) {\n            if (this.cache.shouldTrack(exposure, user)) {\n                var event_1 = this.getExposureEvent(exposure);\n                this.queue.push(event_1);\n            }\n        };\n        IntegrationManager.prototype.getExposureEvent = function (exposure) {\n            var _a, _b, _c;\n            var event = {\n                eventType: '$exposure',\n                eventProperties: exposure,\n            };\n            if ((_a = exposure.metadata) === null || _a === void 0 ? void 0 : _a.exposureEvent) {\n                // Metadata specifically passes the exposure event definition\n                event = {\n                    eventType: (_b = exposure.metadata) === null || _b === void 0 ? void 0 : _b.exposureEvent,\n                    eventProperties: exposure,\n                };\n            }\n            else if (((_c = exposure.metadata) === null || _c === void 0 ? void 0 : _c.deliveryMethod) === 'web') {\n                // Web experiments track impression events by default\n                event = {\n                    eventType: '$impression',\n                    eventProperties: exposure,\n                };\n            }\n            return event;\n        };\n        return IntegrationManager;\n    }());\n    var SessionDedupeCache = /** @class */ (function () {\n        function SessionDedupeCache(instanceName) {\n            this.isSessionStorageAvailable = checkIsSessionStorageAvailable();\n            this.inMemoryCache = {};\n            this.identity = {};\n            this.storageKey = \"EXP_sent_v3_\".concat(instanceName);\n            // Remove previous versions of storage if they exist.\n            var sessionStorage = getSessionStorage();\n            if (this.isSessionStorageAvailable && sessionStorage) {\n                sessionStorage.removeItem(\"EXP_sent_\".concat(instanceName));\n                sessionStorage.removeItem(\"EXP_sent_v2_\".concat(instanceName));\n            }\n        }\n        SessionDedupeCache.prototype.shouldTrack = function (exposure, user) {\n            var _a, _b;\n            // Always track web impressions.\n            if (((_a = exposure.metadata) === null || _a === void 0 ? void 0 : _a.deliveryMethod) === 'web') {\n                return true;\n            }\n            var newIdentity = {\n                userId: user === null || user === void 0 ? void 0 : user.user_id,\n                deviceId: user === null || user === void 0 ? void 0 : user.device_id,\n            };\n            if (!this.identityEquals(this.identity, newIdentity)) {\n                this.clearCache();\n            }\n            this.identity = newIdentity;\n            this.loadCache();\n            var hasKey = exposure.flag_key in this.inMemoryCache;\n            var cachedVariant = this.inMemoryCache[exposure.flag_key];\n            // Normalize undefined to null for comparison and storage since JSON.stringify\n            // omits keys with undefined values and converts undefined to null\n            var normalizedExposureVariant = (_b = exposure.variant) !== null && _b !== void 0 ? _b : null;\n            var normalizedCachedVariant = cachedVariant !== null && cachedVariant !== void 0 ? cachedVariant : null;\n            var shouldTrack = false;\n            if (!hasKey || normalizedCachedVariant !== normalizedExposureVariant) {\n                shouldTrack = true;\n                this.inMemoryCache[exposure.flag_key] = normalizedExposureVariant;\n            }\n            this.storeCache();\n            return shouldTrack;\n        };\n        SessionDedupeCache.prototype.clearCache = function () {\n            this.inMemoryCache = {};\n            var sessionStorage = getSessionStorage();\n            if (this.isSessionStorageAvailable && sessionStorage) {\n                sessionStorage.removeItem(this.storageKey);\n            }\n        };\n        SessionDedupeCache.prototype.identityEquals = function (id1, id2) {\n            if (id1.userId && id2.userId) {\n                return id1.userId === id2.userId;\n            }\n            if (!id1.userId && !id2.userId) {\n                return id1.deviceId === id2.deviceId;\n            }\n            return false;\n        };\n        SessionDedupeCache.prototype.loadCache = function () {\n            var sessionStorage = getSessionStorage();\n            if (this.isSessionStorageAvailable && sessionStorage) {\n                var storedCache = sessionStorage.getItem(this.storageKey);\n                this.inMemoryCache = storedCache ? JSON.parse(storedCache) : {};\n            }\n        };\n        SessionDedupeCache.prototype.storeCache = function () {\n            var sessionStorage = getSessionStorage();\n            if (this.isSessionStorageAvailable && sessionStorage) {\n                try {\n                    sessionStorage.setItem(this.storageKey, JSON.stringify(this.inMemoryCache));\n                }\n                catch (e) {\n                    // Gracefully handle QuotaExceededError or other storage errors.\n                    // The in-memory cache will still work for deduplication within this session.\n                }\n            }\n        };\n        return SessionDedupeCache;\n    }());\n    var PersistentTrackingQueue = /** @class */ (function () {\n        function PersistentTrackingQueue(instanceName, maxQueueSize) {\n            if (maxQueueSize === void 0) { maxQueueSize = MAX_QUEUE_SIZE; }\n            this.isLocalStorageAvailable = isLocalStorageAvailable();\n            this.inMemoryQueue = [];\n            this.storageKey = \"EXP_unsent_\".concat(instanceName);\n            this.maxQueueSize = maxQueueSize;\n        }\n        PersistentTrackingQueue.prototype.push = function (event) {\n            this.loadQueue();\n            this.inMemoryQueue.push(event);\n            this.flush();\n            this.storeQueue();\n        };\n        PersistentTrackingQueue.prototype.setTracker = function (tracker) {\n            var _this = this;\n            this.tracker = tracker;\n            var setInterval = getSetInterval();\n            if (setInterval) {\n                this.poller = setInterval(function () {\n                    _this.loadFlushStore();\n                }, 1000);\n            }\n            this.loadFlushStore();\n        };\n        PersistentTrackingQueue.prototype.flush = function () {\n            if (!this.tracker)\n                return;\n            if (this.inMemoryQueue.length === 0)\n                return;\n            var i = 0;\n            for (; i < this.inMemoryQueue.length; i++) {\n                try {\n                    if (!this.tracker(this.inMemoryQueue[i])) {\n                        break;\n                    }\n                }\n                catch (e) {\n                    break;\n                }\n            }\n            this.inMemoryQueue = this.inMemoryQueue.slice(i);\n            if (this.inMemoryQueue.length === 0 && this.poller) {\n                var clearInterval_1 = getClearInterval();\n                if (clearInterval_1) {\n                    clearInterval_1(this.poller);\n                }\n                this.poller = undefined;\n            }\n        };\n        PersistentTrackingQueue.prototype.loadQueue = function () {\n            var localStorage = getLocalStorage();\n            if (this.isLocalStorageAvailable && localStorage) {\n                var storedQueue = localStorage.getItem(this.storageKey);\n                this.inMemoryQueue = storedQueue ? JSON.parse(storedQueue) : [];\n            }\n        };\n        PersistentTrackingQueue.prototype.storeQueue = function () {\n            var localStorage = getLocalStorage();\n            if (this.isLocalStorageAvailable && localStorage) {\n                // Trim the queue if it is too large.\n                if (this.inMemoryQueue.length > this.maxQueueSize) {\n                    this.inMemoryQueue = this.inMemoryQueue.slice(this.inMemoryQueue.length - this.maxQueueSize);\n                }\n                localStorage.setItem(this.storageKey, JSON.stringify(this.inMemoryQueue));\n            }\n        };\n        PersistentTrackingQueue.prototype.loadFlushStore = function () {\n            this.loadQueue();\n            this.flush();\n            this.storeQueue();\n        };\n        return PersistentTrackingQueue;\n    }());\n    var checkIsSessionStorageAvailable = function () {\n        var globalScope = getGlobalScope();\n        if (globalScope) {\n            try {\n                var testKey = 'EXP_test';\n                globalScope.sessionStorage.setItem(testKey, testKey);\n                globalScope.sessionStorage.removeItem(testKey);\n                return true;\n            }\n            catch (e) {\n                return false;\n            }\n        }\n        return false;\n    };\n\n    /**\n     * Internal logger class that wraps a Logger implementation and handles log level filtering.\n     * This class provides a centralized logging mechanism for the Experiment client.\n     * @category Logging\n     */\n    var AmpLogger = /** @class */ (function () {\n        /**\n         * Creates a new AmpLogger instance\n         * @param logger The underlying logger implementation to use\n         * @param logLevel The minimum log level to output. Messages below this level will be ignored.\n         */\n        function AmpLogger(logger, logLevel) {\n            if (logLevel === void 0) { logLevel = exports.LogLevel.Error; }\n            this.logger = logger;\n            this.logLevel = logLevel;\n        }\n        /**\n         * Log an error message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        AmpLogger.prototype.error = function (message) {\n            var _a;\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            if (this.logLevel >= exports.LogLevel.Error) {\n                (_a = this.logger).error.apply(_a, __spreadArray$1([message], __read$2(optionalParams), false));\n            }\n        };\n        /**\n         * Log a warning message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        AmpLogger.prototype.warn = function (message) {\n            var _a;\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            if (this.logLevel >= exports.LogLevel.Warn) {\n                (_a = this.logger).warn.apply(_a, __spreadArray$1([message], __read$2(optionalParams), false));\n            }\n        };\n        /**\n         * Log an informational message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        AmpLogger.prototype.info = function (message) {\n            var _a;\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            if (this.logLevel >= exports.LogLevel.Info) {\n                (_a = this.logger).info.apply(_a, __spreadArray$1([message], __read$2(optionalParams), false));\n            }\n        };\n        /**\n         * Log a debug message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        AmpLogger.prototype.debug = function (message) {\n            var _a;\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            if (this.logLevel >= exports.LogLevel.Debug) {\n                (_a = this.logger).debug.apply(_a, __spreadArray$1([message], __read$2(optionalParams), false));\n            }\n        };\n        /**\n         * Log a verbose message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        AmpLogger.prototype.verbose = function (message) {\n            var _a;\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            if (this.logLevel >= exports.LogLevel.Verbose) {\n                (_a = this.logger).verbose.apply(_a, __spreadArray$1([message], __read$2(optionalParams), false));\n            }\n        };\n        return AmpLogger;\n    }());\n\n    /**\n     * Default console-based logger implementation.\n     * This logger uses the browser's console API to output log messages.\n     * Log level filtering is handled by the AmpLogger wrapper class.\n     * @category Logging\n     */\n    var ConsoleLogger = /** @class */ (function () {\n        function ConsoleLogger() {\n        }\n        /**\n         * Log an error message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        ConsoleLogger.prototype.error = function (message) {\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            console.error.apply(console, __spreadArray$1([message], __read$2(optionalParams), false));\n        };\n        /**\n         * Log a warning message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        ConsoleLogger.prototype.warn = function (message) {\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            console.warn.apply(console, __spreadArray$1([message], __read$2(optionalParams), false));\n        };\n        /**\n         * Log an informational message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        ConsoleLogger.prototype.info = function (message) {\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            console.info.apply(console, __spreadArray$1([message], __read$2(optionalParams), false));\n        };\n        /**\n         * Log a debug message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        ConsoleLogger.prototype.debug = function (message) {\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            console.debug.apply(console, __spreadArray$1([message], __read$2(optionalParams), false));\n        };\n        /**\n         * Log a verbose message\n         * @param message The message to log\n         * @param optionalParams Additional parameters to log\n         */\n        ConsoleLogger.prototype.verbose = function (message) {\n            var optionalParams = [];\n            for (var _i = 1; _i < arguments.length; _i++) {\n                optionalParams[_i - 1] = arguments[_i];\n            }\n            console.debug.apply(console, __spreadArray$1([message], __read$2(optionalParams), false));\n        };\n        return ConsoleLogger;\n    }());\n\n    var LocalStorage = /** @class */ (function () {\n        function LocalStorage() {\n            this.globalScope = getGlobalScope();\n        }\n        LocalStorage.prototype.get = function (key) {\n            var _a;\n            return (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.localStorage.getItem(key);\n        };\n        LocalStorage.prototype.put = function (key, value) {\n            var _a;\n            (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.localStorage.setItem(key, value);\n        };\n        LocalStorage.prototype.delete = function (key) {\n            var _a;\n            (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.localStorage.removeItem(key);\n        };\n        return LocalStorage;\n    }());\n\n    var getVariantStorage = function (deploymentKey, instanceName, storage) {\n        var truncatedDeployment = deploymentKey.substring(deploymentKey.length - 6);\n        var namespace = \"amp-exp-\".concat(instanceName, \"-\").concat(truncatedDeployment);\n        return new LoadStoreCache(namespace, storage, transformVariantFromStorage);\n    };\n    var getFlagStorage = function (deploymentKey, instanceName, storage) {\n        if (storage === void 0) { storage = new LocalStorage(); }\n        var truncatedDeployment = deploymentKey.substring(deploymentKey.length - 6);\n        var namespace = \"amp-exp-\".concat(instanceName, \"-\").concat(truncatedDeployment, \"-flags\");\n        return new LoadStoreCache(namespace, storage);\n    };\n    var getVariantsOptionsStorage = function (deploymentKey, instanceName, storage) {\n        if (storage === void 0) { storage = new LocalStorage(); }\n        var truncatedDeployment = deploymentKey.substring(deploymentKey.length - 6);\n        var namespace = \"amp-exp-\".concat(instanceName, \"-\").concat(truncatedDeployment, \"-variants-options\");\n        return new SingleValueStoreCache(namespace, storage);\n    };\n    var SingleValueStoreCache = /** @class */ (function () {\n        function SingleValueStoreCache(namespace, storage) {\n            this.namespace = namespace;\n            this.storage = storage;\n        }\n        SingleValueStoreCache.prototype.get = function () {\n            return this.value;\n        };\n        SingleValueStoreCache.prototype.put = function (value) {\n            this.value = value;\n        };\n        SingleValueStoreCache.prototype.load = function () {\n            var value = this.storage.get(this.namespace);\n            if (value) {\n                this.value = JSON.parse(value);\n            }\n        };\n        SingleValueStoreCache.prototype.store = function () {\n            if (this.value === undefined) {\n                // Delete the key if the value is undefined\n                this.storage.delete(this.namespace);\n            }\n            else {\n                // Also store false or null values\n                this.storage.put(this.namespace, JSON.stringify(this.value));\n            }\n        };\n        return SingleValueStoreCache;\n    }());\n    var LoadStoreCache = /** @class */ (function () {\n        function LoadStoreCache(namespace, storage, transformer) {\n            this.cache = {};\n            this.namespace = namespace;\n            this.storage = storage;\n            this.transformer = transformer;\n        }\n        LoadStoreCache.prototype.get = function (key) {\n            return this.cache[key];\n        };\n        LoadStoreCache.prototype.getAll = function () {\n            return __assign$2({}, this.cache);\n        };\n        LoadStoreCache.prototype.put = function (key, value) {\n            this.cache[key] = value;\n        };\n        LoadStoreCache.prototype.putAll = function (values) {\n            var e_1, _a;\n            try {\n                for (var _b = __values$2(Object.keys(values)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var key = _c.value;\n                    this.cache[key] = values[key];\n                }\n            }\n            catch (e_1_1) { e_1 = { error: e_1_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_1) throw e_1.error; }\n            }\n        };\n        LoadStoreCache.prototype.remove = function (key) {\n            delete this.cache[key];\n        };\n        LoadStoreCache.prototype.clear = function () {\n            this.cache = {};\n        };\n        LoadStoreCache.prototype.load = function () {\n            var e_2, _a;\n            var rawValues = this.storage.get(this.namespace);\n            var jsonValues;\n            try {\n                jsonValues = JSON.parse(rawValues) || {};\n            }\n            catch (_b) {\n                // Do nothing\n                return;\n            }\n            var values = {};\n            try {\n                for (var _c = __values$2(Object.keys(jsonValues)), _d = _c.next(); !_d.done; _d = _c.next()) {\n                    var key = _d.value;\n                    try {\n                        var value = void 0;\n                        if (this.transformer) {\n                            value = this.transformer(jsonValues[key]);\n                        }\n                        else {\n                            value = jsonValues[key];\n                        }\n                        if (value) {\n                            values[key] = value;\n                        }\n                    }\n                    catch (_e) {\n                        // Do nothing\n                    }\n                }\n            }\n            catch (e_2_1) { e_2 = { error: e_2_1 }; }\n            finally {\n                try {\n                    if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n                }\n                finally { if (e_2) throw e_2.error; }\n            }\n            this.clear();\n            this.putAll(values);\n        };\n        LoadStoreCache.prototype.store = function (values) {\n            if (values === void 0) { values = this.cache; }\n            this.storage.put(this.namespace, JSON.stringify(values));\n        };\n        return LoadStoreCache;\n    }());\n    var transformVariantFromStorage = function (storageValue) {\n        if (typeof storageValue === 'string') {\n            // From v0 string format\n            return {\n                key: storageValue,\n                value: storageValue,\n            };\n        }\n        else if (typeof storageValue === 'object') {\n            // From v1 or v2 object format\n            var key = storageValue['key'];\n            var value = storageValue['value'];\n            var payload = storageValue['payload'];\n            var metadata = storageValue['metadata'];\n            var experimentKey = storageValue['expKey'];\n            if (metadata && metadata.experimentKey) {\n                experimentKey = metadata.experimentKey;\n            }\n            else if (experimentKey) {\n                metadata = metadata || {};\n                metadata['experimentKey'] = experimentKey;\n            }\n            var variant = {};\n            if (key) {\n                variant.key = key;\n            }\n            else if (value) {\n                variant.key = value;\n            }\n            if (value)\n                variant.value = value;\n            if (metadata)\n                variant.metadata = metadata;\n            if (payload)\n                variant.payload = payload;\n            if (experimentKey)\n                variant.expKey = experimentKey;\n            return variant;\n        }\n    };\n\n    var SessionStorage = /** @class */ (function () {\n        function SessionStorage() {\n            this.globalScope = getGlobalScope();\n        }\n        SessionStorage.prototype.get = function (key) {\n            var _a;\n            return (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.sessionStorage.getItem(key);\n        };\n        SessionStorage.prototype.put = function (key, value) {\n            var _a;\n            (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.sessionStorage.setItem(key, value);\n        };\n        SessionStorage.prototype.delete = function (key) {\n            var _a;\n            (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.sessionStorage.removeItem(key);\n        };\n        return SessionStorage;\n    }());\n\n    /**\n     * Event for tracking a user's exposure to a variant. This event will not count\n     * towards your analytics event volume.\n     *\n     * @deprecated use ExposureTrackingProvider instead\n     */\n    var exposureEvent = function (user, key, variant, source) {\n        var _a;\n        var name = '[Experiment] Exposure';\n        var value = variant === null || variant === void 0 ? void 0 : variant.value;\n        var userProperty = \"[Experiment] \".concat(key);\n        return {\n            name: name,\n            user: user,\n            key: key,\n            variant: variant,\n            userProperty: userProperty,\n            properties: {\n                key: key,\n                variant: value,\n                source: source,\n            },\n            userProperties: (_a = {},\n                _a[userProperty] = value,\n                _a),\n        };\n    };\n\n    var isNullOrUndefined = function (value) {\n        return value === null || value === undefined;\n    };\n    var isNullUndefinedOrEmpty = function (value) {\n        if (isNullOrUndefined(value))\n            return true;\n        return value && Object.keys(value).length === 0;\n    };\n    /**\n     * Filters out null and undefined values from an object, returning a new object\n     * with only defined values. This is useful for config merging where you want\n     * defaults to take precedence over explicit null/undefined values.\n     */\n    var filterNullUndefined = function (obj) {\n        var e_1, _a;\n        if (!obj || typeof obj !== 'object') {\n            return {};\n        }\n        var filtered = {};\n        try {\n            for (var _b = __values$2(Object.entries(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                var _d = __read$2(_c.value, 2), key = _d[0], value = _d[1];\n                if (!isNullOrUndefined(value)) {\n                    filtered[key] = value;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        return filtered;\n    };\n    var isLocalEvaluationMode = function (flag) {\n        var _a;\n        return ((_a = flag === null || flag === void 0 ? void 0 : flag.metadata) === null || _a === void 0 ? void 0 : _a.evaluationMode) === 'local';\n    };\n\n    var Backoff = /** @class */ (function () {\n        function Backoff(attempts, min, max, scalar) {\n            this.started = false;\n            this.done = false;\n            this.attempts = attempts;\n            this.min = min;\n            this.max = max;\n            this.scalar = scalar;\n        }\n        Backoff.prototype.start = function (fn) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            if (!this.started) {\n                                this.started = true;\n                            }\n                            else {\n                                throw Error('Backoff already started');\n                            }\n                            return [4 /*yield*/, this.backoff(fn, 0, this.min)];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        Backoff.prototype.cancel = function () {\n            this.done = true;\n            var clearTimeoutFn = getClearTimeout();\n            if (clearTimeoutFn) {\n                clearTimeoutFn(this.timeoutHandle);\n            }\n        };\n        Backoff.prototype.backoff = function (fn, attempt, delay) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                var setTimeoutFn;\n                var _this = this;\n                return __generator$1(this, function (_a) {\n                    if (this.done) {\n                        return [2 /*return*/];\n                    }\n                    setTimeoutFn = getSetTimeout();\n                    if (!setTimeoutFn) {\n                        return [2 /*return*/];\n                    }\n                    this.timeoutHandle = setTimeoutFn(function () {\n                        void (function () { return __awaiter$1(_this, void 0, void 0, function () {\n                            var nextAttempt, nextDelay;\n                            return __generator$1(this, function (_a) {\n                                switch (_a.label) {\n                                    case 0:\n                                        _a.trys.push([0, 2, , 5]);\n                                        return [4 /*yield*/, fn()];\n                                    case 1:\n                                        _a.sent();\n                                        return [3 /*break*/, 5];\n                                    case 2:\n                                        _a.sent();\n                                        nextAttempt = attempt + 1;\n                                        if (!(nextAttempt < this.attempts)) return [3 /*break*/, 4];\n                                        nextDelay = Math.min(delay * this.scalar, this.max);\n                                        return [4 /*yield*/, this.backoff(fn, nextAttempt, nextDelay)];\n                                    case 3:\n                                        _a.sent();\n                                        _a.label = 4;\n                                    case 4: return [3 /*break*/, 5];\n                                    case 5: return [2 /*return*/];\n                                }\n                            });\n                        }); })();\n                    }, delay);\n                    return [2 /*return*/];\n                });\n            });\n        };\n        return Backoff;\n    }());\n\n    var convertUserToContext = function (user) {\n        var e_1, _a;\n        var _b, _c;\n        if (!user) {\n            return {};\n        }\n        var context = { user: user };\n        // add page context (skip if location is unavailable, e.g. Node SSR)\n        var globalScope = getGlobalScope();\n        if (globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) {\n            context.page = {\n                url: globalScope.location.href,\n            };\n        }\n        var groups = {};\n        if (!user.groups) {\n            return context;\n        }\n        try {\n            for (var _d = __values$2(Object.keys(user.groups)), _e = _d.next(); !_e.done; _e = _d.next()) {\n                var groupType = _e.value;\n                var groupNames = user.groups[groupType];\n                if (groupNames.length > 0 && groupNames[0]) {\n                    var groupName = groupNames[0];\n                    var groupNameMap = {\n                        group_name: groupName,\n                    };\n                    // Check for group properties\n                    var groupProperties = (_c = (_b = user.group_properties) === null || _b === void 0 ? void 0 : _b[groupType]) === null || _c === void 0 ? void 0 : _c[groupName];\n                    if (groupProperties && Object.keys(groupProperties).length > 0) {\n                        groupNameMap['group_properties'] = groupProperties;\n                    }\n                    groups[groupType] = groupNameMap;\n                }\n            }\n        }\n        catch (e_1_1) { e_1 = { error: e_1_1 }; }\n        finally {\n            try {\n                if (_e && !_e.done && (_a = _d.return)) _a.call(_d);\n            }\n            finally { if (e_1) throw e_1.error; }\n        }\n        if (Object.keys(groups).length > 0) {\n            context['groups'] = groups;\n        }\n        delete context.user['groups'];\n        delete context.user['group_properties'];\n        return context;\n    };\n    var convertVariant = function (value) {\n        if (value === null || value === undefined) {\n            return {};\n        }\n        if (typeof value == 'string') {\n            return {\n                key: value,\n                value: value,\n            };\n        }\n        else {\n            return value;\n        }\n    };\n    var convertEvaluationVariantToVariant = function (evaluationVariant) {\n        if (!evaluationVariant) {\n            return {};\n        }\n        var experimentKey = undefined;\n        if (evaluationVariant.metadata) {\n            experimentKey = evaluationVariant.metadata['experimentKey'];\n        }\n        var variant = {};\n        if (evaluationVariant.key)\n            variant.key = evaluationVariant.key;\n        if (evaluationVariant.value)\n            variant.value = evaluationVariant.value;\n        if (evaluationVariant.payload)\n            variant.payload = evaluationVariant.payload;\n        if (experimentKey)\n            variant.expKey = experimentKey;\n        if (evaluationVariant.metadata)\n            variant.metadata = evaluationVariant.metadata;\n        return variant;\n    };\n\n    /**\n     * A wrapper for an analytics provider which only sends one exposure event per\n     * flag, per variant, per session. In other words, wrapping an analytics\n     * provider in this class will prevent the same exposure event to be sent twice\n     * in one session.\n     */\n    var SessionAnalyticsProvider = /** @class */ (function () {\n        function SessionAnalyticsProvider(analyticsProvider) {\n            // In memory record of flagKey and variant value to in order to only set\n            // user properties and track an exposure event once per session unless the\n            // variant value changes\n            this.setProperties = {};\n            this.unsetProperties = {};\n            this.analyticsProvider = analyticsProvider;\n        }\n        SessionAnalyticsProvider.prototype.track = function (event) {\n            if (this.setProperties[event.key] == event.variant.value) {\n                return;\n            }\n            else {\n                this.setProperties[event.key] = event.variant.value;\n                delete this.unsetProperties[event.key];\n            }\n            this.analyticsProvider.track(event);\n        };\n        SessionAnalyticsProvider.prototype.setUserProperty = function (event) {\n            if (this.setProperties[event.key] == event.variant.value) {\n                return;\n            }\n            this.analyticsProvider.setUserProperty(event);\n        };\n        SessionAnalyticsProvider.prototype.unsetUserProperty = function (event) {\n            if (this.unsetProperties[event.key]) {\n                return;\n            }\n            else {\n                this.unsetProperties[event.key] = 'unset';\n                delete this.setProperties[event.key];\n            }\n            this.analyticsProvider.unsetUserProperty(event);\n        };\n        return SessionAnalyticsProvider;\n    }());\n\n    /**\n     * A wrapper for an exposure tracking provider which only sends one exposure event per\n     * flag, per variant, per user session. When the user identity (userId or deviceId) changes,\n     * the tracking cache is reset to ensure exposures are tracked for the new user session.\n     */\n    var UserSessionExposureTracker = /** @class */ (function () {\n        function UserSessionExposureTracker(exposureTrackingProvider) {\n            this.tracked = {};\n            this.identity = {};\n            this.exposureTrackingProvider = exposureTrackingProvider;\n        }\n        UserSessionExposureTracker.prototype.track = function (exposure, user) {\n            var newIdentity = {\n                userId: user === null || user === void 0 ? void 0 : user.user_id,\n                deviceId: user === null || user === void 0 ? void 0 : user.device_id,\n            };\n            if (!this.identityEquals(this.identity, newIdentity)) {\n                this.tracked = {};\n            }\n            this.identity = newIdentity;\n            var hasTrackedFlag = exposure.flag_key in this.tracked;\n            var trackedVariant = this.tracked[exposure.flag_key];\n            if (hasTrackedFlag && trackedVariant === exposure.variant) {\n                return;\n            }\n            this.tracked[exposure.flag_key] = exposure.variant;\n            this.exposureTrackingProvider.track(exposure);\n        };\n        UserSessionExposureTracker.prototype.identityEquals = function (id1, id2) {\n            return id1.userId === id2.userId && id1.deviceId === id2.deviceId;\n        };\n        return UserSessionExposureTracker;\n    }());\n\n    /**\n     * @packageDocumentation\n     * @module experiment-js-client\n     */\n    // Configs which have been removed from the public API.\n    // May be added back in the future.\n    var fetchBackoffTimeout = 10000;\n    var fetchBackoffAttempts = 8;\n    var fetchBackoffMinMillis = 500;\n    var fetchBackoffMaxMillis = 10000;\n    var fetchBackoffScalar = 1.5;\n    var minFlagPollerIntervalMillis = 60000;\n    var euServerUrl = 'https://api.lab.eu.amplitude.com';\n    var euFlagsServerUrl = 'https://flag.lab.eu.amplitude.com';\n    /**\n     * The default {@link Client} used to fetch variations from Experiment's\n     * servers.\n     *\n     * @category Core Usage\n     */\n    var ExperimentClient = /** @class */ (function () {\n        /**\n         * Creates a new ExperimentClient instance.\n         *\n         * In most cases you will want to use the `initialize` factory method in\n         * {@link Experiment}.\n         *\n         * @param apiKey The Client key for the Experiment project\n         * @param config See {@link ExperimentConfig} for config options\n         */\n        function ExperimentClient(apiKey, config) {\n            var _this = this;\n            var _a, _b, _c, _d, _e;\n            this.engine = new EvaluationEngine();\n            this.isRunning = false;\n            this.apiKey = apiKey;\n            // Filter out null/undefined values from config to ensure defaults take precedence\n            config = filterNullUndefined(config);\n            // Merge configs with defaults and wrap providers\n            this.config = __assign$2(__assign$2(__assign$2({}, Defaults), config), { \n                // Set server URLs separately\n                serverUrl: (config === null || config === void 0 ? void 0 : config.serverUrl) ||\n                    (((_a = config === null || config === void 0 ? void 0 : config.serverZone) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'eu'\n                        ? euServerUrl\n                        : Defaults.serverUrl), flagsServerUrl: (config === null || config === void 0 ? void 0 : config.flagsServerUrl) ||\n                    (((_b = config === null || config === void 0 ? void 0 : config.serverZone) === null || _b === void 0 ? void 0 : _b.toLowerCase()) === 'eu'\n                        ? euFlagsServerUrl\n                        : Defaults.flagsServerUrl), \n                // Force minimum flag config polling interval.\n                flagConfigPollingIntervalMillis: config.flagConfigPollingIntervalMillis < minFlagPollerIntervalMillis\n                    ? minFlagPollerIntervalMillis\n                    : (_c = config.flagConfigPollingIntervalMillis) !== null && _c !== void 0 ? _c : Defaults.flagConfigPollingIntervalMillis });\n            this.logger = new AmpLogger(this.config.loggerProvider || new ConsoleLogger(), ExperimentClient.getLogLevel(config));\n            var internalInstanceName = (_d = this.config) === null || _d === void 0 ? void 0 : _d['internalInstanceNameSuffix'];\n            this.isWebExperiment = internalInstanceName === 'web';\n            this.poller = new Poller(function () { return __awaiter$1(_this, void 0, void 0, function () {\n                var e_1;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            _a.trys.push([0, 2, , 3]);\n                            return [4 /*yield*/, this.doFlags()];\n                        case 1:\n                            _a.sent();\n                            return [3 /*break*/, 3];\n                        case 2:\n                            e_1 = _a.sent();\n                            this.logger.info(e_1);\n                            return [3 /*break*/, 3];\n                        case 3: return [2 /*return*/];\n                    }\n                });\n            }); }, this.config.flagConfigPollingIntervalMillis);\n            // Transform initialVariants\n            if (this.config.initialVariants) {\n                for (var flagKey in this.config.initialVariants) {\n                    this.config.initialVariants[flagKey] = transformVariantFromStorage(this.config.initialVariants[flagKey]);\n                }\n            }\n            if (this.config.userProvider) {\n                this.userProvider = this.config.userProvider;\n            }\n            if (this.config.analyticsProvider) {\n                this.analyticsProvider = new SessionAnalyticsProvider(this.config.analyticsProvider);\n            }\n            if (this.config.exposureTrackingProvider) {\n                this.userSessionExposureTracker = new UserSessionExposureTracker(this.config.exposureTrackingProvider);\n            }\n            this.integrationManager = new IntegrationManager(this.config, this);\n            // Setup Remote APIs\n            var httpClient = new WrapperClient(this.config.httpClient || FetchHttpClient);\n            this.flagApi = new SdkFlagApi(this.apiKey, this.config.flagsServerUrl, httpClient);\n            this.evaluationApi = new SdkEvaluationApi(this.apiKey, this.config.serverUrl, httpClient);\n            // Storage & Caching\n            var storage;\n            var storageInstanceName = internalInstanceName\n                ? \"\".concat(this.config.instanceName, \"-\").concat(String(internalInstanceName))\n                : this.config.instanceName;\n            if (this.isWebExperiment) {\n                // Internal: experiment-tag injects an in-memory storage while cookie\n                // consent is not yet granted, so the amp-exp-* caches never touch\n                // sessionStorage pre-consent. Always fall back to SessionStorage when\n                // nothing is injected.\n                var internalCacheStorage = (_e = this.config) === null || _e === void 0 ? void 0 : _e['internalCacheStorage'];\n                storage = internalCacheStorage !== null && internalCacheStorage !== void 0 ? internalCacheStorage : new SessionStorage();\n            }\n            else {\n                storage = new LocalStorage();\n            }\n            this.variants = getVariantStorage(this.apiKey, storageInstanceName, storage);\n            this.flags = getFlagStorage(this.apiKey, storageInstanceName, storage);\n            this.fetchVariantsOptions = getVariantsOptionsStorage(this.apiKey, storageInstanceName, storage);\n            try {\n                this.flags.load();\n                this.variants.load();\n                this.fetchVariantsOptions.load();\n            }\n            catch (e) {\n                // catch localStorage undefined error\n            }\n            this.mergeInitialFlagsWithStorage();\n        }\n        /**\n         * Start the SDK by getting flag configurations from the server and fetching\n         * variants for the user. The promise returned by this function resolves when\n         * local flag configurations have been updated, and the {@link fetch()}\n         * result has been received (if the request was made).\n         *\n         * To force this function not to fetch variants, set the {@link fetchOnStart}\n         * configuration option to `false` when initializing the SDK.\n         *\n         * Finally, this function will start polling for flag configurations at a\n         * fixed interval. To disable polling, set the {@link pollOnStart}\n         * configuration option to `false` on initialization.\n         *\n         * @param user The user to set in the SDK.\n         * @see fetchOnStart\n         * @see pollOnStart\n         * @see fetch\n         * @see variant\n         */\n        ExperimentClient.prototype.start = function (user) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                var flagsReadyPromise, fetchOnStart, e_2;\n                var _a;\n                return __generator$1(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            if (this.isRunning) {\n                                return [2 /*return*/];\n                            }\n                            else {\n                                this.isRunning = true;\n                            }\n                            this.setUser(user);\n                            _b.label = 1;\n                        case 1:\n                            _b.trys.push([1, 6, , 7]);\n                            flagsReadyPromise = this.doFlags();\n                            fetchOnStart = (_a = this.config.fetchOnStart) !== null && _a !== void 0 ? _a : true;\n                            if (!fetchOnStart) return [3 /*break*/, 3];\n                            return [4 /*yield*/, Promise.all([this.fetch(user), flagsReadyPromise])];\n                        case 2:\n                            _b.sent();\n                            return [3 /*break*/, 5];\n                        case 3: return [4 /*yield*/, flagsReadyPromise];\n                        case 4:\n                            _b.sent();\n                            _b.label = 5;\n                        case 5: return [3 /*break*/, 7];\n                        case 6:\n                            e_2 = _b.sent();\n                            // If throwOnError is true, rethrow the error\n                            if (this.config.throwOnError) {\n                                throw e_2;\n                            }\n                            return [3 /*break*/, 7];\n                        case 7:\n                            if (this.config.pollOnStart) {\n                                this.poller.start();\n                            }\n                            return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        /**\n         * Stop the local flag configuration poller.\n         */\n        ExperimentClient.prototype.stop = function () {\n            if (!this.isRunning) {\n                return;\n            }\n            this.poller.stop();\n            this.isRunning = false;\n        };\n        /**\n         * Assign the given user to the SDK and asynchronously fetch all variants\n         * from the server. Subsequent calls may omit the user from the argument to\n         * use the user from the previous call.\n         *\n         * If an {@link ExperimentUserProvider} has been set, the argument user will\n         * be merged with the provider user, preferring user fields from the argument\n         * user and falling back on the provider for fields which are null or\n         * undefined.\n         *\n         * If configured, fetch retries the request in the background on failure.\n         * Variants received from a successful retry are stored in local storage for\n         * access.\n         *\n         * If you are using the `initialVariants` config option to preload this SDK\n         * from the server, you generally do not need to call `fetch`.\n         *\n         * @param user The user to fetch variants for.\n         * @param options Options for this specific fetch call.\n         * @returns Promise that resolves when the request for variants completes.\n         * @see ExperimentUser\n         * @see ExperimentUserProvider\n         * @see FetchOptions\n         */\n        ExperimentClient.prototype.fetch = function () {\n            return __awaiter$1(this, arguments, void 0, function (user, options) {\n                var e_3;\n                if (user === void 0) { user = this.user; }\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            this.setUser(user || {});\n                            _a.label = 1;\n                        case 1:\n                            _a.trys.push([1, 3, , 4]);\n                            return [4 /*yield*/, this.fetchInternal(user, this.config.fetchTimeoutMillis, this.config.retryFetchOnFailure, options)];\n                        case 2:\n                            _a.sent();\n                            return [3 /*break*/, 4];\n                        case 3:\n                            e_3 = _a.sent();\n                            // If throwOnError is configured to true, rethrow the error\n                            if (this.config.throwOnError) {\n                                throw e_3;\n                            }\n                            // Otherwise, handle errors silently as before\n                            if (e_3 instanceof TimeoutError) {\n                                this.logger.debug(e_3);\n                            }\n                            else {\n                                this.logger.error(e_3);\n                            }\n                            return [3 /*break*/, 4];\n                        case 4: return [2 /*return*/, this];\n                    }\n                });\n            });\n        };\n        /**\n         * Returns the variant for the provided key.\n         *\n         * Access the variant from {@link Source}, falling back  on the given\n         * fallback, then the configured fallbackVariant.\n         *\n         * If an {@link ExposureTrackingProvider} is configured and the\n         * {@link automaticExposureTracking} configuration option is `true`, this\n         * function will call the provider with an {@link Exposure} event. The\n         * exposure event does not count towards your event volume within Amplitude.\n         *\n         * @param key The key to get the variant for.\n         * @param fallback The highest priority fallback.\n         * @see ExperimentConfig\n         * @see ExposureTrackingProvider\n         */\n        ExperimentClient.prototype.variant = function (key, fallback) {\n            var _a, _b;\n            if (!this.apiKey) {\n                return { value: undefined };\n            }\n            var sourceVariant = this.variantAndSource(key, fallback);\n            if (this.config.automaticExposureTracking) {\n                this.exposureInternal(key, sourceVariant);\n            }\n            this.logger.debug(\"[Experiment] variant for \".concat(key, \" is \").concat(((_a = sourceVariant.variant) === null || _a === void 0 ? void 0 : _a.key) || ((_b = sourceVariant.variant) === null || _b === void 0 ? void 0 : _b.value)));\n            return sourceVariant.variant || {};\n        };\n        /**\n         * Track an exposure event for the variant associated with the flag/experiment\n         * {@link key}.\n         *\n         * This method requires that an {@link ExposureTrackingProvider} be\n         * configured when this client is initialized, either manually, or through the\n         * Amplitude Analytics SDK integration from set up using\n         * {@link Experiment.initializeWithAmplitudeAnalytics}.\n         *\n         * @param key The flag/experiment key to track an exposure for.\n         * @see ExposureTrackingProvider\n         */\n        ExperimentClient.prototype.exposure = function (key) {\n            var sourceVariant = this.variantAndSource(key);\n            this.exposureInternal(key, sourceVariant);\n        };\n        /**\n         * Returns all variants for the user.\n         *\n         * The primary source of variants is based on the\n         * {@link Source} configured in the {@link ExperimentConfig}.\n         *\n         * @see Source\n         * @see ExperimentConfig\n         */\n        ExperimentClient.prototype.all = function () {\n            if (!this.apiKey) {\n                return {};\n            }\n            var evaluatedVariants = this.evaluate();\n            for (var flagKey in evaluatedVariants) {\n                var flag = this.flags.get(flagKey);\n                if (!isLocalEvaluationMode(flag)) {\n                    delete evaluatedVariants[flagKey];\n                }\n            }\n            return __assign$2(__assign$2(__assign$2({}, this.secondaryVariants()), this.sourceVariants()), evaluatedVariants);\n        };\n        /**\n         * Clear all variants in the cache and storage.\n         */\n        ExperimentClient.prototype.clear = function () {\n            this.variants.clear();\n            try {\n                void this.variants.store();\n            }\n            catch (e) {\n                // catch localStorage undefined error\n            }\n        };\n        /**\n         * Get a copy of the internal {@link ExperimentUser} object if it is set.\n         *\n         * @returns a copy of the internal user object if set.\n         */\n        ExperimentClient.prototype.getUser = function () {\n            var _a;\n            if (!this.user) {\n                return this.user;\n            }\n            if ((_a = this.user) === null || _a === void 0 ? void 0 : _a.user_properties) {\n                var userPropertiesCopy = __assign$2({}, this.user.user_properties);\n                return __assign$2(__assign$2({}, this.user), { user_properties: userPropertiesCopy });\n            }\n            else {\n                return __assign$2({}, this.user);\n            }\n        };\n        /**\n         * Copy in and set the user within the experiment client.\n         *\n         * @param user the user to set within the experiment client.\n         */\n        ExperimentClient.prototype.setUser = function (user) {\n            var _a;\n            if (!user) {\n                this.user = null;\n                return;\n            }\n            if ((_a = this.user) === null || _a === void 0 ? void 0 : _a.user_properties) {\n                var userPropertiesCopy = __assign$2({}, user.user_properties);\n                this.user = __assign$2(__assign$2({}, user), { user_properties: userPropertiesCopy });\n            }\n            else {\n                this.user = __assign$2({}, user);\n            }\n        };\n        /**\n         * Get the user provider set by {@link setUserProvider} or null if the user\n         * provider has not been set.\n         *\n         * @returns The user provider set by {@link setUserProvider} or null.\n         * @deprecated use ExperimentConfig.userProvider instead\n         */\n        ExperimentClient.prototype.getUserProvider = function () {\n            return this.userProvider;\n        };\n        /**\n         * Sets a user provider that will inject identity information into the user\n         * for {@link fetch()} requests. The user provider will only set user fields\n         * in outgoing requests which are null or undefined.\n         *\n         * See {@link ExperimentUserProvider} for more details\n         * @param userProvider\n         * @deprecated use ExperimentConfig.userProvider instead\n         */\n        ExperimentClient.prototype.setUserProvider = function (userProvider) {\n            this.userProvider = userProvider;\n            return this;\n        };\n        ExperimentClient.prototype.mergeInitialFlagsWithStorage = function () {\n            var _this = this;\n            if (this.config.initialFlags) {\n                var initialFlags = JSON.parse(this.config.initialFlags);\n                initialFlags.forEach(function (flag) {\n                    if (!_this.flags.get(flag.key)) {\n                        _this.flags.put(flag.key, flag);\n                    }\n                });\n            }\n        };\n        ExperimentClient.prototype.evaluate = function (flagKeys) {\n            var e_4, _a;\n            var user = this.addContext(this.user);\n            var flags = topologicalSort(this.flags.getAll(), flagKeys);\n            var context = convertUserToContext(user);\n            var evaluationVariants = this.engine.evaluate(context, flags);\n            var variants = {};\n            try {\n                for (var _b = __values$2(Object.keys(evaluationVariants)), _c = _b.next(); !_c.done; _c = _b.next()) {\n                    var flagKey = _c.value;\n                    variants[flagKey] = convertEvaluationVariantToVariant(evaluationVariants[flagKey]);\n                }\n            }\n            catch (e_4_1) { e_4 = { error: e_4_1 }; }\n            finally {\n                try {\n                    if (_c && !_c.done && (_a = _b.return)) _a.call(_b);\n                }\n                finally { if (e_4) throw e_4.error; }\n            }\n            return variants;\n        };\n        /** @alpha */\n        ExperimentClient.prototype.getEvaluationTraces = function (flagKeys) {\n            var user = this.addContext(this.user);\n            var flags = topologicalSort(this.flags.getAll(), flagKeys);\n            var context = convertUserToContext(user);\n            var traces = this.engine.evaluateWithTraces(context, flags).traces;\n            return traces;\n        };\n        ExperimentClient.prototype.variantAndSource = function (key, fallback) {\n            var sourceVariant = {};\n            if (this.config.source === exports.Source.LocalStorage) {\n                sourceVariant = this.localStorageVariantAndSource(key, fallback);\n            }\n            else if (this.config.source === exports.Source.InitialVariants) {\n                sourceVariant = this.initialVariantsVariantAndSource(key, fallback);\n            }\n            var flag = this.flags.get(key);\n            if (isLocalEvaluationMode(flag) || (!sourceVariant.variant && flag)) {\n                sourceVariant = this.localEvaluationVariantAndSource(key, flag, fallback);\n            }\n            return sourceVariant;\n        };\n        /**\n         * This function assumes the flag exists and is local evaluation mode. For\n         * local evaluation, fallback order goes:\n         *\n         *  1. Local evaluation\n         *  2. Inline function fallback\n         *  3. Initial variants\n         *  4. Config fallback\n         *\n         * If there is a default variant and no fallback, return the default variant.\n         */\n        ExperimentClient.prototype.localEvaluationVariantAndSource = function (key, flag, fallback) {\n            var _a;\n            var defaultSourceVariant = {};\n            // Local evaluation\n            var variant = this.evaluate([flag.key])[key];\n            var source = VariantSource.LocalEvaluation;\n            var isLocalEvaluationDefault = (_a = variant === null || variant === void 0 ? void 0 : variant.metadata) === null || _a === void 0 ? void 0 : _a.default;\n            if (!isNullOrUndefined(variant) && !isLocalEvaluationDefault) {\n                return {\n                    variant: convertVariant(variant),\n                    source: source,\n                    hasDefaultVariant: false,\n                };\n            }\n            else if (isLocalEvaluationDefault) {\n                defaultSourceVariant = {\n                    variant: convertVariant(variant),\n                    source: source,\n                    hasDefaultVariant: true,\n                };\n            }\n            // Inline fallback\n            if (!isNullOrUndefined(fallback)) {\n                return {\n                    variant: convertVariant(fallback),\n                    source: VariantSource.FallbackInline,\n                    hasDefaultVariant: defaultSourceVariant.hasDefaultVariant,\n                };\n            }\n            // Initial variants\n            var initialVariant = this.config.initialVariants[key];\n            if (!isNullOrUndefined(initialVariant)) {\n                return {\n                    variant: convertVariant(initialVariant),\n                    source: VariantSource.SecondaryInitialVariants,\n                    hasDefaultVariant: defaultSourceVariant.hasDefaultVariant,\n                };\n            }\n            // Configured fallback, or default variant\n            var fallbackVariant = convertVariant(this.config.fallbackVariant);\n            var fallbackSourceVariant = {\n                variant: fallbackVariant,\n                source: VariantSource.FallbackConfig,\n                hasDefaultVariant: defaultSourceVariant.hasDefaultVariant,\n            };\n            if (!isNullUndefinedOrEmpty(fallbackVariant)) {\n                return fallbackSourceVariant;\n            }\n            return defaultSourceVariant;\n        };\n        /**\n         * For Source.LocalStorage, fallback order goes:\n         *\n         *  1. Local Storage\n         *  2. Inline function fallback\n         *  3. InitialFlags\n         *  4. Config fallback\n         *\n         * If there is a default variant and no fallback, return the default variant.\n         */\n        ExperimentClient.prototype.localStorageVariantAndSource = function (key, fallback) {\n            var _a;\n            var defaultSourceVariant = {};\n            // Local storage\n            var localStorageVariant = this.variants.get(key);\n            var isLocalStorageDefault = (_a = localStorageVariant === null || localStorageVariant === void 0 ? void 0 : localStorageVariant.metadata) === null || _a === void 0 ? void 0 : _a.default;\n            if (!isNullOrUndefined(localStorageVariant) && !isLocalStorageDefault) {\n                return {\n                    variant: convertVariant(localStorageVariant),\n                    source: VariantSource.LocalStorage,\n                    hasDefaultVariant: false,\n                };\n            }\n            else if (isLocalStorageDefault) {\n                defaultSourceVariant = {\n                    variant: convertVariant(localStorageVariant),\n                    source: VariantSource.LocalStorage,\n                    hasDefaultVariant: true,\n                };\n            }\n            // Inline fallback\n            if (!isNullOrUndefined(fallback)) {\n                return {\n                    variant: convertVariant(fallback),\n                    source: VariantSource.FallbackInline,\n                    hasDefaultVariant: defaultSourceVariant.hasDefaultVariant,\n                };\n            }\n            // Initial variants\n            var initialVariant = this.config.initialVariants[key];\n            if (!isNullOrUndefined(initialVariant)) {\n                return {\n                    variant: convertVariant(initialVariant),\n                    source: VariantSource.SecondaryInitialVariants,\n                    hasDefaultVariant: defaultSourceVariant.hasDefaultVariant,\n                };\n            }\n            // Configured fallback, or default variant\n            var fallbackVariant = convertVariant(this.config.fallbackVariant);\n            var fallbackSourceVariant = {\n                variant: fallbackVariant,\n                source: VariantSource.FallbackConfig,\n                hasDefaultVariant: defaultSourceVariant.hasDefaultVariant,\n            };\n            if (!isNullUndefinedOrEmpty(fallbackVariant)) {\n                return fallbackSourceVariant;\n            }\n            return defaultSourceVariant;\n        };\n        /**\n         * For Source.InitialVariants, fallback order goes:\n         *\n         *  1. Initial variants\n         *  2. Local storage\n         *  3. Inline function fallback\n         *  4. Config fallback\n         *\n         * If there is a default variant and no fallback, return the default variant.\n         */\n        ExperimentClient.prototype.initialVariantsVariantAndSource = function (key, fallback) {\n            var _a;\n            var defaultSourceVariant = {};\n            // Initial variants\n            var initialVariantsVariant = this.config.initialVariants[key];\n            if (!isNullOrUndefined(initialVariantsVariant)) {\n                return {\n                    variant: convertVariant(initialVariantsVariant),\n                    source: VariantSource.InitialVariants,\n                    hasDefaultVariant: false,\n                };\n            }\n            // Local storage\n            var localStorageVariant = this.variants.get(key);\n            var isLocalStorageDefault = (_a = localStorageVariant === null || localStorageVariant === void 0 ? void 0 : localStorageVariant.metadata) === null || _a === void 0 ? void 0 : _a.default;\n            if (!isNullOrUndefined(localStorageVariant) && !isLocalStorageDefault) {\n                return {\n                    variant: convertVariant(localStorageVariant),\n                    source: VariantSource.LocalStorage,\n                    hasDefaultVariant: false,\n                };\n            }\n            else if (isLocalStorageDefault) {\n                defaultSourceVariant = {\n                    variant: convertVariant(localStorageVariant),\n                    source: VariantSource.LocalStorage,\n                    hasDefaultVariant: true,\n                };\n            }\n            // Inline fallback\n            if (!isNullOrUndefined(fallback)) {\n                return {\n                    variant: convertVariant(fallback),\n                    source: VariantSource.FallbackInline,\n                    hasDefaultVariant: defaultSourceVariant.hasDefaultVariant,\n                };\n            }\n            // Configured fallback, or default variant\n            var fallbackVariant = convertVariant(this.config.fallbackVariant);\n            var fallbackSourceVariant = {\n                variant: fallbackVariant,\n                source: VariantSource.FallbackConfig,\n                hasDefaultVariant: defaultSourceVariant.hasDefaultVariant,\n            };\n            if (!isNullUndefinedOrEmpty(fallbackVariant)) {\n                return fallbackSourceVariant;\n            }\n            return defaultSourceVariant;\n        };\n        ExperimentClient.prototype.fetchInternal = function (user, timeoutMillis, retry, options) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                var variants, e_5;\n                var _a;\n                return __generator$1(this, function (_b) {\n                    switch (_b.label) {\n                        case 0:\n                            // Don't even try to fetch variants if API key is not set\n                            if (!this.apiKey) {\n                                throw Error('Experiment API key is empty');\n                            }\n                            this.logger.debug(\"[Experiment] Fetch all: retry=\".concat(String(retry)));\n                            // Proactively cancel retries if active in order to avoid unnecessary API\n                            // requests. A new failure will restart the retries.\n                            if (retry) {\n                                this.stopRetries();\n                            }\n                            _b.label = 1;\n                        case 1:\n                            _b.trys.push([1, 4, , 5]);\n                            return [4 /*yield*/, this.doFetch(user, timeoutMillis, __assign$2({ trackingOption: (_a = this.fetchVariantsOptions.get()) === null || _a === void 0 ? void 0 : _a.trackingOption }, options))];\n                        case 2:\n                            variants = _b.sent();\n                            return [4 /*yield*/, this.storeVariants(variants, options)];\n                        case 3:\n                            _b.sent();\n                            return [2 /*return*/, variants];\n                        case 4:\n                            e_5 = _b.sent();\n                            if (retry && this.shouldRetryFetch(e_5)) {\n                                void this.startRetries(user, options);\n                            }\n                            throw e_5;\n                        case 5: return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        /**\n         * Enables or disables tracking of assignment events when fetching variants.\n         * @param doTrack Whether to track assignment events.\n         */\n        ExperimentClient.prototype.setTracksAssignment = function (doTrack) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    this.fetchVariantsOptions.put(__assign$2(__assign$2({}, (this.fetchVariantsOptions.get() || {})), { trackingOption: doTrack ? 'track' : 'no-track' }));\n                    this.fetchVariantsOptions.store();\n                    return [2 /*return*/];\n                });\n            });\n        };\n        ExperimentClient.prototype.cleanUserPropsForFetch = function (user) {\n            var cleanedUser = __assign$2({}, user);\n            delete cleanedUser.cookie;\n            return cleanedUser;\n        };\n        ExperimentClient.prototype.doFetch = function (user, timeoutMillis, options) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                var results, variants, _a, _b, key;\n                var e_6, _c;\n                return __generator$1(this, function (_d) {\n                    switch (_d.label) {\n                        case 0: return [4 /*yield*/, this.addContextOrWait(user)];\n                        case 1:\n                            user = _d.sent();\n                            user = this.cleanUserPropsForFetch(user);\n                            this.logger.debug('[Experiment] Fetch variants for user: ', user);\n                            return [4 /*yield*/, this.evaluationApi.getVariants(user, __assign$2({ timeoutMillis: timeoutMillis }, options))];\n                        case 2:\n                            results = _d.sent();\n                            variants = {};\n                            try {\n                                for (_a = __values$2(Object.keys(results)), _b = _a.next(); !_b.done; _b = _a.next()) {\n                                    key = _b.value;\n                                    variants[key] = convertEvaluationVariantToVariant(results[key]);\n                                }\n                            }\n                            catch (e_6_1) { e_6 = { error: e_6_1 }; }\n                            finally {\n                                try {\n                                    if (_b && !_b.done && (_c = _a.return)) _c.call(_a);\n                                }\n                                finally { if (e_6) throw e_6.error; }\n                            }\n                            this.logger.debug('[Experiment] Received variants: ', variants);\n                            return [2 /*return*/, variants];\n                    }\n                });\n            });\n        };\n        ExperimentClient.prototype.doFlags = function () {\n            return __awaiter$1(this, void 0, void 0, function () {\n                var user, flags, e_7;\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0:\n                            _a.trys.push([0, 4, , 5]);\n                            user = void 0;\n                            if (!this.isWebExperiment) return [3 /*break*/, 2];\n                            return [4 /*yield*/, this.addContextOrWait(this.getUser())];\n                        case 1:\n                            user = _a.sent();\n                            _a.label = 2;\n                        case 2: return [4 /*yield*/, this.flagApi.getFlags({\n                                libraryName: 'experiment-js-client',\n                                libraryVersion: version,\n                                timeoutMillis: this.config.fetchTimeoutMillis,\n                                deliveryMethod: this.isWebExperiment ? 'web' : undefined,\n                                user: (user === null || user === void 0 ? void 0 : user.user_id) || (user === null || user === void 0 ? void 0 : user.device_id)\n                                    ? { user_id: user === null || user === void 0 ? void 0 : user.user_id, device_id: user === null || user === void 0 ? void 0 : user.device_id }\n                                    : undefined,\n                            })];\n                        case 3:\n                            flags = _a.sent();\n                            this.flags.clear();\n                            this.flags.putAll(flags);\n                            return [3 /*break*/, 5];\n                        case 4:\n                            e_7 = _a.sent();\n                            if (e_7 instanceof TimeoutError) {\n                                this.logger.debug(e_7);\n                                // If throwOnError is configured to true, rethrow timeout errors\n                                if (this.config.throwOnError) {\n                                    throw e_7;\n                                }\n                            }\n                            else {\n                                throw e_7;\n                            }\n                            return [3 /*break*/, 5];\n                        case 5:\n                            try {\n                                this.flags.store();\n                            }\n                            catch (e) {\n                                // catch localStorage undefined error\n                            }\n                            this.mergeInitialFlagsWithStorage();\n                            return [2 /*return*/];\n                    }\n                });\n            });\n        };\n        ExperimentClient.prototype.storeVariants = function (variants, options) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                var failedFlagKeys, _loop_1, this_1, key, failedFlagKeys_1, failedFlagKeys_1_1, key;\n                var e_8, _a;\n                return __generator$1(this, function (_b) {\n                    failedFlagKeys = options && options.flagKeys ? options.flagKeys : [];\n                    if (failedFlagKeys.length === 0) {\n                        this.variants.clear();\n                    }\n                    _loop_1 = function (key) {\n                        failedFlagKeys = failedFlagKeys.filter(function (flagKey) { return flagKey !== key; });\n                        this_1.variants.put(key, variants[key]);\n                    };\n                    this_1 = this;\n                    for (key in variants) {\n                        _loop_1(key);\n                    }\n                    try {\n                        for (failedFlagKeys_1 = __values$2(failedFlagKeys), failedFlagKeys_1_1 = failedFlagKeys_1.next(); !failedFlagKeys_1_1.done; failedFlagKeys_1_1 = failedFlagKeys_1.next()) {\n                            key = failedFlagKeys_1_1.value;\n                            this.variants.remove(key);\n                        }\n                    }\n                    catch (e_8_1) { e_8 = { error: e_8_1 }; }\n                    finally {\n                        try {\n                            if (failedFlagKeys_1_1 && !failedFlagKeys_1_1.done && (_a = failedFlagKeys_1.return)) _a.call(failedFlagKeys_1);\n                        }\n                        finally { if (e_8) throw e_8.error; }\n                    }\n                    try {\n                        this.variants.store();\n                    }\n                    catch (e) {\n                        // catch localStorage undefined error\n                    }\n                    this.logger.debug('[Experiment] Stored variants: ', variants);\n                    return [2 /*return*/];\n                });\n            });\n        };\n        ExperimentClient.prototype.startRetries = function (user, options) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                var _this = this;\n                return __generator$1(this, function (_a) {\n                    this.logger.debug('[Experiment] Retry fetch');\n                    this.retriesBackoff = new Backoff(fetchBackoffAttempts, fetchBackoffMinMillis, fetchBackoffMaxMillis, fetchBackoffScalar);\n                    void this.retriesBackoff.start(function () { return __awaiter$1(_this, void 0, void 0, function () {\n                        return __generator$1(this, function (_a) {\n                            switch (_a.label) {\n                                case 0: return [4 /*yield*/, this.fetchInternal(user, fetchBackoffTimeout, false, options)];\n                                case 1:\n                                    _a.sent();\n                                    return [2 /*return*/];\n                            }\n                        });\n                    }); });\n                    return [2 /*return*/];\n                });\n            });\n        };\n        ExperimentClient.prototype.stopRetries = function () {\n            if (this.retriesBackoff) {\n                this.retriesBackoff.cancel();\n            }\n        };\n        ExperimentClient.prototype.addContext = function (user) {\n            var _a;\n            var providedUser = (_a = this.userProvider) === null || _a === void 0 ? void 0 : _a.getUser();\n            var integrationUser = this.integrationManager.getUser();\n            var mergedUserProperties = __assign$2(__assign$2(__assign$2({}, providedUser === null || providedUser === void 0 ? void 0 : providedUser.user_properties), integrationUser.user_properties), user === null || user === void 0 ? void 0 : user.user_properties);\n            return __assign$2(__assign$2(__assign$2(__assign$2({ library: \"experiment-js-client/\".concat(version) }, providedUser), integrationUser), user), { user_properties: mergedUserProperties });\n        };\n        ExperimentClient.prototype.addContextOrWait = function (user) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    switch (_a.label) {\n                        case 0: return [4 /*yield*/, this.integrationManager.ready()];\n                        case 1:\n                            _a.sent();\n                            return [2 /*return*/, this.addContext(user)];\n                    }\n                });\n            });\n        };\n        ExperimentClient.prototype.sourceVariants = function () {\n            if (this.config.source == exports.Source.LocalStorage) {\n                return this.variants.getAll();\n            }\n            else if (this.config.source == exports.Source.InitialVariants) {\n                return this.config.initialVariants;\n            }\n        };\n        ExperimentClient.prototype.secondaryVariants = function () {\n            if (this.config.source == exports.Source.LocalStorage) {\n                return this.config.initialVariants;\n            }\n            else if (this.config.source == exports.Source.InitialVariants) {\n                return this.variants.getAll();\n            }\n        };\n        ExperimentClient.prototype.exposureInternal = function (key, sourceVariant) {\n            var _a, _b, _c, _d, _e, _f, _g, _h, _j;\n            // Variant metadata may disable exposure tracking remotely.\n            var trackExposure = (_c = (_b = (_a = sourceVariant.variant) === null || _a === void 0 ? void 0 : _a.metadata) === null || _b === void 0 ? void 0 : _b.trackExposure) !== null && _c !== void 0 ? _c : true;\n            if (!trackExposure) {\n                return;\n            }\n            this.legacyExposureInternal(key, sourceVariant.variant, sourceVariant.source);\n            var exposure = { flag_key: key };\n            // Do not track exposure for fallback variants that are not associated with\n            // a default variant.\n            var fallback = isFallback(sourceVariant.source);\n            if (fallback && !sourceVariant.hasDefaultVariant) {\n                return;\n            }\n            if ((_d = sourceVariant.variant) === null || _d === void 0 ? void 0 : _d.expKey) {\n                exposure.experiment_key = (_e = sourceVariant.variant) === null || _e === void 0 ? void 0 : _e.expKey;\n            }\n            var metadata = (_f = sourceVariant.variant) === null || _f === void 0 ? void 0 : _f.metadata;\n            if (!fallback && !(metadata === null || metadata === void 0 ? void 0 : metadata.default)) {\n                if ((_g = sourceVariant.variant) === null || _g === void 0 ? void 0 : _g.key) {\n                    exposure.variant = sourceVariant.variant.key;\n                }\n                else if ((_h = sourceVariant.variant) === null || _h === void 0 ? void 0 : _h.value) {\n                    exposure.variant = sourceVariant.variant.value;\n                }\n            }\n            if (metadata)\n                exposure.metadata = metadata;\n            if (this.isWebExperiment) {\n                exposure.time = Date.now();\n            }\n            // Add current URL for web experiments\n            if (this.isWebExperiment) {\n                var globalScope = getGlobalScope();\n                if (globalScope === null || globalScope === void 0 ? void 0 : globalScope.location) {\n                    try {\n                        var url = globalScope.location.href;\n                        // Add URL without query parameters\n                        exposure.metadata.url = url.split('?')[0] || '';\n                    }\n                    catch (e) {\n                        // If there's any error getting the URL, continue without it\n                    }\n                }\n            }\n            var user = this.addContext(this.getUser());\n            (_j = this.userSessionExposureTracker) === null || _j === void 0 ? void 0 : _j.track(exposure, user);\n            this.integrationManager.track(exposure, user);\n        };\n        ExperimentClient.prototype.legacyExposureInternal = function (key, variant, source) {\n            var _a, _b, _c, _d, _e;\n            if (this.analyticsProvider) {\n                var user = this.addContext(this.getUser());\n                var event_1 = exposureEvent(user, key, variant, source);\n                if (isFallback(source) || !(variant === null || variant === void 0 ? void 0 : variant.value)) {\n                    (_b = (_a = this.analyticsProvider) === null || _a === void 0 ? void 0 : _a.unsetUserProperty) === null || _b === void 0 ? void 0 : _b.call(_a, event_1);\n                }\n                else if (variant === null || variant === void 0 ? void 0 : variant.value) {\n                    (_d = (_c = this.analyticsProvider) === null || _c === void 0 ? void 0 : _c.setUserProperty) === null || _d === void 0 ? void 0 : _d.call(_c, event_1);\n                    (_e = this.analyticsProvider) === null || _e === void 0 ? void 0 : _e.track(event_1);\n                }\n            }\n        };\n        ExperimentClient.getLogLevel = function (config) {\n            var _a;\n            // Backwards compatibility: if debug flag is set to true, use Debug level\n            if (config.debug === true) {\n                return exports.LogLevel.Debug;\n            }\n            // Otherwise use the configured logLevel or default to Error\n            return (_a = config.logLevel) !== null && _a !== void 0 ? _a : exports.LogLevel.Error;\n        };\n        ExperimentClient.prototype.shouldRetryFetch = function (e) {\n            if (e instanceof FetchError) {\n                return e.statusCode < 400 || e.statusCode >= 500 || e.statusCode === 429;\n            }\n            return true;\n        };\n        /**\n         * Add a plugin to the experiment client.\n         * @param plugin the plugin to add.\n         */\n        ExperimentClient.prototype.addPlugin = function (plugin) {\n            if (plugin.type === 'integration') {\n                this.integrationManager.setIntegration(plugin);\n            }\n        };\n        return ExperimentClient;\n    }());\n\n    var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};\n\n    function createCommonjsModule(fn, basedir, module) {\n    \treturn module = {\n    \t\tpath: basedir,\n    \t\texports: {},\n    \t\trequire: function (path, base) {\n    \t\t\treturn commonjsRequire(path, (base === undefined || base === null) ? module.path : base);\n    \t\t}\n    \t}, fn(module, module.exports), module.exports;\n    }\n\n    function commonjsRequire () {\n    \tthrow new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs');\n    }\n\n    var uaParser = createCommonjsModule(function (module, exports) {\n      /////////////////////////////////////////////////////////////////////////////////\n      /* UAParser.js v0.7.33\n         Copyright © 2012-2021 Faisal Salman <f@faisalman.com>\n         MIT License */ /*\n                        Detect Browser, Engine, OS, CPU, and Device type/model from User-Agent data.\n                        Supports browser & node.js environment.\n                        Demo   : https://faisalman.github.io/ua-parser-js\n                        Source : https://github.com/faisalman/ua-parser-js */\n      /////////////////////////////////////////////////////////////////////////////////\n\n      (function (window, undefined$1) {\n\n        //////////////\n        // Constants\n        /////////////\n        var LIBVERSION = \"0.7.33\",\n          EMPTY = \"\",\n          UNKNOWN = \"?\",\n          FUNC_TYPE = \"function\",\n          UNDEF_TYPE = \"undefined\",\n          OBJ_TYPE = \"object\",\n          STR_TYPE = \"string\",\n          MAJOR = \"major\",\n          MODEL = \"model\",\n          NAME = \"name\",\n          TYPE = \"type\",\n          VENDOR = \"vendor\",\n          VERSION = \"version\",\n          ARCHITECTURE = \"architecture\",\n          CONSOLE = \"console\",\n          MOBILE = \"mobile\",\n          TABLET = \"tablet\",\n          SMARTTV = \"smarttv\",\n          WEARABLE = \"wearable\",\n          EMBEDDED = \"embedded\",\n          UA_MAX_LENGTH = 350;\n        var AMAZON = \"Amazon\",\n          APPLE = \"Apple\",\n          ASUS = \"ASUS\",\n          BLACKBERRY = \"BlackBerry\",\n          BROWSER = \"Browser\",\n          CHROME = \"Chrome\",\n          EDGE = \"Edge\",\n          FIREFOX = \"Firefox\",\n          GOOGLE = \"Google\",\n          HUAWEI = \"Huawei\",\n          LG = \"LG\",\n          MICROSOFT = \"Microsoft\",\n          MOTOROLA = \"Motorola\",\n          OPERA = \"Opera\",\n          SAMSUNG = \"Samsung\",\n          SHARP = \"Sharp\",\n          SONY = \"Sony\",\n          XIAOMI = \"Xiaomi\",\n          ZEBRA = \"Zebra\",\n          FACEBOOK = \"Facebook\";\n\n        ///////////\n        // Helper\n        //////////\n\n        var extend = function (regexes, extensions) {\n            var mergedRegexes = {};\n            for (var i in regexes) {\n              if (extensions[i] && extensions[i].length % 2 === 0) {\n                mergedRegexes[i] = extensions[i].concat(regexes[i]);\n              } else {\n                mergedRegexes[i] = regexes[i];\n              }\n            }\n            return mergedRegexes;\n          },\n          enumerize = function (arr) {\n            var enums = {};\n            for (var i = 0; i < arr.length; i++) {\n              enums[arr[i].toUpperCase()] = arr[i];\n            }\n            return enums;\n          },\n          has = function (str1, str2) {\n            return typeof str1 === STR_TYPE ? lowerize(str2).indexOf(lowerize(str1)) !== -1 : false;\n          },\n          lowerize = function (str) {\n            return str.toLowerCase();\n          },\n          majorize = function (version) {\n            return typeof version === STR_TYPE ? version.replace(/[^\\d\\.]/g, EMPTY).split(\".\")[0] : undefined$1;\n          },\n          trim = function (str, len) {\n            if (typeof str === STR_TYPE) {\n              str = str.replace(/^\\s\\s*/, EMPTY);\n              return typeof len === UNDEF_TYPE ? str : str.substring(0, UA_MAX_LENGTH);\n            }\n          };\n\n        ///////////////\n        // Map helper\n        //////////////\n\n        var rgxMapper = function (ua, arrays) {\n            var i = 0,\n              j,\n              k,\n              p,\n              q,\n              matches,\n              match;\n\n            // loop through all regexes maps\n            while (i < arrays.length && !matches) {\n              var regex = arrays[i],\n                // even sequence (0,2,4,..)\n                props = arrays[i + 1]; // odd sequence (1,3,5,..)\n              j = k = 0;\n\n              // try matching uastring with regexes\n              while (j < regex.length && !matches) {\n                matches = regex[j++].exec(ua);\n                if (!!matches) {\n                  for (p = 0; p < props.length; p++) {\n                    match = matches[++k];\n                    q = props[p];\n                    // check if given property is actually array\n                    if (typeof q === OBJ_TYPE && q.length > 0) {\n                      if (q.length === 2) {\n                        if (typeof q[1] == FUNC_TYPE) {\n                          // assign modified match\n                          this[q[0]] = q[1].call(this, match);\n                        } else {\n                          // assign given value, ignore regex match\n                          this[q[0]] = q[1];\n                        }\n                      } else if (q.length === 3) {\n                        // check whether function or regex\n                        if (typeof q[1] === FUNC_TYPE && !(q[1].exec && q[1].test)) {\n                          // call function (usually string mapper)\n                          this[q[0]] = match ? q[1].call(this, match, q[2]) : undefined$1;\n                        } else {\n                          // sanitize match using given regex\n                          this[q[0]] = match ? match.replace(q[1], q[2]) : undefined$1;\n                        }\n                      } else if (q.length === 4) {\n                        this[q[0]] = match ? q[3].call(this, match.replace(q[1], q[2])) : undefined$1;\n                      }\n                    } else {\n                      this[q] = match ? match : undefined$1;\n                    }\n                  }\n                }\n              }\n              i += 2;\n            }\n          },\n          strMapper = function (str, map) {\n            for (var i in map) {\n              // check if current value is array\n              if (typeof map[i] === OBJ_TYPE && map[i].length > 0) {\n                for (var j = 0; j < map[i].length; j++) {\n                  if (has(map[i][j], str)) {\n                    return i === UNKNOWN ? undefined$1 : i;\n                  }\n                }\n              } else if (has(map[i], str)) {\n                return i === UNKNOWN ? undefined$1 : i;\n              }\n            }\n            return str;\n          };\n\n        ///////////////\n        // String map\n        //////////////\n\n        // Safari < 3.0\n        var oldSafariMap = {\n            \"1.0\": \"/8\",\n            1.2: \"/1\",\n            1.3: \"/3\",\n            \"2.0\": \"/412\",\n            \"2.0.2\": \"/416\",\n            \"2.0.3\": \"/417\",\n            \"2.0.4\": \"/419\",\n            \"?\": \"/\"\n          },\n          windowsVersionMap = {\n            ME: \"4.90\",\n            \"NT 3.11\": \"NT3.51\",\n            \"NT 4.0\": \"NT4.0\",\n            2000: \"NT 5.0\",\n            XP: [\"NT 5.1\", \"NT 5.2\"],\n            Vista: \"NT 6.0\",\n            7: \"NT 6.1\",\n            8: \"NT 6.2\",\n            8.1: \"NT 6.3\",\n            10: [\"NT 6.4\", \"NT 10.0\"],\n            RT: \"ARM\"\n          };\n\n        //////////////\n        // Regex map\n        /////////////\n\n        var regexes = {\n          browser: [[/\\b(?:crmo|crios)\\/([\\w\\.]+)/i // Chrome for Android/iOS\n          ], [VERSION, [NAME, \"Chrome\"]], [/edg(?:e|ios|a)?\\/([\\w\\.]+)/i // Microsoft Edge\n          ], [VERSION, [NAME, \"Edge\"]], [\n          // Presto based\n          /(opera mini)\\/([-\\w\\.]+)/i,\n          // Opera Mini\n          /(opera [mobiletab]{3,6})\\b.+version\\/([-\\w\\.]+)/i,\n          // Opera Mobi/Tablet\n          /(opera)(?:.+version\\/|[\\/ ]+)([\\w\\.]+)/i // Opera\n          ], [NAME, VERSION], [/opios[\\/ ]+([\\w\\.]+)/i // Opera mini on iphone >= 8.0\n          ], [VERSION, [NAME, OPERA + \" Mini\"]], [/\\bopr\\/([\\w\\.]+)/i // Opera Webkit\n          ], [VERSION, [NAME, OPERA]], [\n          // Mixed\n          /(kindle)\\/([\\w\\.]+)/i,\n          // Kindle\n          /(lunascape|maxthon|netfront|jasmine|blazer)[\\/ ]?([\\w\\.]*)/i,\n          // Lunascape/Maxthon/Netfront/Jasmine/Blazer\n          // Trident based\n          /(avant |iemobile|slim)(?:browser)?[\\/ ]?([\\w\\.]*)/i,\n          // Avant/IEMobile/SlimBrowser\n          /(ba?idubrowser)[\\/ ]?([\\w\\.]+)/i,\n          // Baidu Browser\n          /(?:ms|\\()(ie) ([\\w\\.]+)/i,\n          // Internet Explorer\n\n          // Webkit/KHTML based                                               // Flock/RockMelt/Midori/Epiphany/Silk/Skyfire/Bolt/Iron/Iridium/PhantomJS/Bowser/QupZilla/Falkon\n          /(flock|rockmelt|midori|epiphany|silk|skyfire|ovibrowser|bolt|iron|vivaldi|iridium|phantomjs|bowser|quark|qupzilla|falkon|rekonq|puffin|brave|whale|qqbrowserlite|qq|duckduckgo)\\/([-\\w\\.]+)/i,\n          // Rekonq/Puffin/Brave/Whale/QQBrowserLite/QQ, aka ShouQ\n          /(weibo)__([\\d\\.]+)/i // Weibo\n          ], [NAME, VERSION], [/(?:\\buc? ?browser|(?:juc.+)ucweb)[\\/ ]?([\\w\\.]+)/i // UCBrowser\n          ], [VERSION, [NAME, \"UC\" + BROWSER]], [/microm.+\\bqbcore\\/([\\w\\.]+)/i,\n          // WeChat Desktop for Windows Built-in Browser\n          /\\bqbcore\\/([\\w\\.]+).+microm/i], [VERSION, [NAME, \"WeChat(Win) Desktop\"]], [/micromessenger\\/([\\w\\.]+)/i // WeChat\n          ], [VERSION, [NAME, \"WeChat\"]], [/konqueror\\/([\\w\\.]+)/i // Konqueror\n          ], [VERSION, [NAME, \"Konqueror\"]], [/trident.+rv[: ]([\\w\\.]{1,9})\\b.+like gecko/i // IE11\n          ], [VERSION, [NAME, \"IE\"]], [/yabrowser\\/([\\w\\.]+)/i // Yandex\n          ], [VERSION, [NAME, \"Yandex\"]], [/(avast|avg)\\/([\\w\\.]+)/i // Avast/AVG Secure Browser\n          ], [[NAME, /(.+)/, \"$1 Secure \" + BROWSER], VERSION], [/\\bfocus\\/([\\w\\.]+)/i // Firefox Focus\n          ], [VERSION, [NAME, FIREFOX + \" Focus\"]], [/\\bopt\\/([\\w\\.]+)/i // Opera Touch\n          ], [VERSION, [NAME, OPERA + \" Touch\"]], [/coc_coc\\w+\\/([\\w\\.]+)/i // Coc Coc Browser\n          ], [VERSION, [NAME, \"Coc Coc\"]], [/dolfin\\/([\\w\\.]+)/i // Dolphin\n          ], [VERSION, [NAME, \"Dolphin\"]], [/coast\\/([\\w\\.]+)/i // Opera Coast\n          ], [VERSION, [NAME, OPERA + \" Coast\"]], [/miuibrowser\\/([\\w\\.]+)/i // MIUI Browser\n          ], [VERSION, [NAME, \"MIUI \" + BROWSER]], [/fxios\\/([-\\w\\.]+)/i // Firefox for iOS\n          ], [VERSION, [NAME, FIREFOX]], [/\\bqihu|(qi?ho?o?|360)browser/i // 360\n          ], [[NAME, \"360 \" + BROWSER]], [/(oculus|samsung|sailfish|huawei)browser\\/([\\w\\.]+)/i], [[NAME, /(.+)/, \"$1 \" + BROWSER], VERSION], [\n          // Oculus/Samsung/Sailfish/Huawei Browser\n          /(comodo_dragon)\\/([\\w\\.]+)/i // Comodo Dragon\n          ], [[NAME, /_/g, \" \"], VERSION], [/(electron)\\/([\\w\\.]+) safari/i,\n          // Electron-based App\n          /(tesla)(?: qtcarbrowser|\\/(20\\d\\d\\.[-\\w\\.]+))/i,\n          // Tesla\n          /m?(qqbrowser|baiduboxapp|2345Explorer)[\\/ ]?([\\w\\.]+)/i // QQBrowser/Baidu App/2345 Browser\n          ], [NAME, VERSION], [/(metasr)[\\/ ]?([\\w\\.]+)/i,\n          // SouGouBrowser\n          /(lbbrowser)/i,\n          // LieBao Browser\n          /\\[(linkedin)app\\]/i // LinkedIn App for iOS & Android\n          ], [NAME], [\n          // WebView\n          /((?:fban\\/fbios|fb_iab\\/fb4a)(?!.+fbav)|;fbav\\/([\\w\\.]+);)/i // Facebook App for iOS & Android\n          ], [[NAME, FACEBOOK], VERSION], [/safari (line)\\/([\\w\\.]+)/i,\n          // Line App for iOS\n          /\\b(line)\\/([\\w\\.]+)\\/iab/i,\n          // Line App for Android\n          /(chromium|instagram)[\\/ ]([-\\w\\.]+)/i // Chromium/Instagram\n          ], [NAME, VERSION], [/\\bgsa\\/([\\w\\.]+) .*safari\\//i // Google Search Appliance on iOS\n          ], [VERSION, [NAME, \"GSA\"]], [/headlesschrome(?:\\/([\\w\\.]+)| )/i // Chrome Headless\n          ], [VERSION, [NAME, CHROME + \" Headless\"]], [/ wv\\).+(chrome)\\/([\\w\\.]+)/i // Chrome WebView\n          ], [[NAME, CHROME + \" WebView\"], VERSION], [/droid.+ version\\/([\\w\\.]+)\\b.+(?:mobile safari|safari)/i // Android Browser\n          ], [VERSION, [NAME, \"Android \" + BROWSER]], [/(chrome|omniweb|arora|[tizenoka]{5} ?browser)\\/v?([\\w\\.]+)/i // Chrome/OmniWeb/Arora/Tizen/Nokia\n          ], [NAME, VERSION], [/version\\/([\\w\\.\\,]+) .*mobile\\/\\w+ (safari)/i // Mobile Safari\n          ], [VERSION, [NAME, \"Mobile Safari\"]], [/version\\/([\\w(\\.|\\,)]+) .*(mobile ?safari|safari)/i // Safari & Safari Mobile\n          ], [VERSION, NAME], [/webkit.+?(mobile ?safari|safari)(\\/[\\w\\.]+)/i // Safari < 3.0\n          ], [NAME, [VERSION, strMapper, oldSafariMap]], [/(webkit|khtml)\\/([\\w\\.]+)/i], [NAME, VERSION], [\n          // Gecko based\n          /(navigator|netscape\\d?)\\/([-\\w\\.]+)/i // Netscape\n          ], [[NAME, \"Netscape\"], VERSION], [/mobile vr; rv:([\\w\\.]+)\\).+firefox/i // Firefox Reality\n          ], [VERSION, [NAME, FIREFOX + \" Reality\"]], [/ekiohf.+(flow)\\/([\\w\\.]+)/i,\n          // Flow\n          /(swiftfox)/i,\n          // Swiftfox\n          /(icedragon|iceweasel|camino|chimera|fennec|maemo browser|minimo|conkeror|klar)[\\/ ]?([\\w\\.\\+]+)/i,\n          // IceDragon/Iceweasel/Camino/Chimera/Fennec/Maemo/Minimo/Conkeror/Klar\n          /(seamonkey|k-meleon|icecat|iceape|firebird|phoenix|palemoon|basilisk|waterfox)\\/([-\\w\\.]+)$/i,\n          // Firefox/SeaMonkey/K-Meleon/IceCat/IceApe/Firebird/Phoenix\n          /(firefox)\\/([\\w\\.]+)/i,\n          // Other Firefox-based\n          /(mozilla)\\/([\\w\\.]+) .+rv\\:.+gecko\\/\\d+/i,\n          // Mozilla\n\n          // Other\n          /(polaris|lynx|dillo|icab|doris|amaya|w3m|netsurf|sleipnir|obigo|mosaic|(?:go|ice|up)[\\. ]?browser)[-\\/ ]?v?([\\w\\.]+)/i,\n          // Polaris/Lynx/Dillo/iCab/Doris/Amaya/w3m/NetSurf/Sleipnir/Obigo/Mosaic/Go/ICE/UP.Browser\n          /(links) \\(([\\w\\.]+)/i // Links\n          ], [NAME, VERSION], [/(cobalt)\\/([\\w\\.]+)/i // Cobalt\n          ], [NAME, [VERSION, /master.|lts./, \"\"]]],\n          cpu: [[/(?:(amd|x(?:(?:86|64)[-_])?|wow|win)64)[;\\)]/i // AMD64 (x64)\n          ], [[ARCHITECTURE, \"amd64\"]], [/(ia32(?=;))/i // IA32 (quicktime)\n          ], [[ARCHITECTURE, lowerize]], [/((?:i[346]|x)86)[;\\)]/i // IA32 (x86)\n          ], [[ARCHITECTURE, \"ia32\"]], [/\\b(aarch64|arm(v?8e?l?|_?64))\\b/i // ARM64\n          ], [[ARCHITECTURE, \"arm64\"]], [/\\b(arm(?:v[67])?ht?n?[fl]p?)\\b/i // ARMHF\n          ], [[ARCHITECTURE, \"armhf\"]], [\n          // PocketPC mistakenly identified as PowerPC\n          /windows (ce|mobile); ppc;/i], [[ARCHITECTURE, \"arm\"]], [/((?:ppc|powerpc)(?:64)?)(?: mac|;|\\))/i // PowerPC\n          ], [[ARCHITECTURE, /ower/, EMPTY, lowerize]], [/(sun4\\w)[;\\)]/i // SPARC\n          ], [[ARCHITECTURE, \"sparc\"]], [/((?:avr32|ia64(?=;))|68k(?=\\))|\\barm(?=v(?:[1-7]|[5-7]1)l?|;|eabi)|(?=atmel )avr|(?:irix|mips|sparc)(?:64)?\\b|pa-risc)/i\n          // IA64, 68K, ARM/64, AVR/32, IRIX/64, MIPS/64, SPARC/64, PA-RISC\n          ], [[ARCHITECTURE, lowerize]]],\n          device: [[\n          //////////////////////////\n          // MOBILES & TABLETS\n          // Ordered by popularity\n          /////////////////////////\n\n          // Samsung\n          /\\b(sch-i[89]0\\d|shw-m380s|sm-[ptx]\\w{2,4}|gt-[pn]\\d{2,4}|sgh-t8[56]9|nexus 10)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, TABLET]], [/\\b((?:s[cgp]h|gt|sm)-\\w+|galaxy nexus)/i, /samsung[- ]([-\\w]+)/i, /sec-(sgh\\w+)/i], [MODEL, [VENDOR, SAMSUNG], [TYPE, MOBILE]], [\n          // Apple\n          /((ipod|iphone)\\d+,\\d+)/i // iPod/iPhone model\n          ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [/(ipad\\d+,\\d+)/i // iPad model\n          ], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [/\\((ip(?:hone|od)[\\w ]*);/i // iPod/iPhone\n          ], [MODEL, [VENDOR, APPLE], [TYPE, MOBILE]], [/\\((ipad);[-\\w\\),; ]+apple/i,\n          // iPad\n          /applecoremedia\\/[\\w\\.]+ \\((ipad)/i, /\\b(ipad)\\d\\d?,\\d\\d?[;\\]].+ios/i], [MODEL, [VENDOR, APPLE], [TYPE, TABLET]], [/(macintosh);/i], [MODEL, [VENDOR, APPLE]], [\n          // Huawei\n          /\\b((?:ag[rs][23]?|bah2?|sht?|btv)-a?[lw]\\d{2})\\b(?!.+d\\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, TABLET]], [/(?:huawei|honor)([-\\w ]+)[;\\)]/i, /\\b(nexus 6p|\\w{2,4}e?-[atu]?[ln][\\dx][012359c][adn]?)\\b(?!.+d\\/s)/i], [MODEL, [VENDOR, HUAWEI], [TYPE, MOBILE]], [\n          // Xiaomi\n          /\\b(poco[\\w ]+)(?: bui|\\))/i,\n          // Xiaomi POCO\n          /\\b; (\\w+) build\\/hm\\1/i,\n          // Xiaomi Hongmi 'numeric' models\n          /\\b(hm[-_ ]?note?[_ ]?(?:\\d\\w)?) bui/i,\n          // Xiaomi Hongmi\n          /\\b(redmi[\\-_ ]?(?:note|k)?[\\w_ ]+)(?: bui|\\))/i,\n          // Xiaomi Redmi\n          /\\b(mi[-_ ]?(?:a\\d|one|one[_ ]plus|note lte|max|cc)?[_ ]?(?:\\d?\\w?)[_ ]?(?:plus|se|lite)?)(?: bui|\\))/i // Xiaomi Mi\n          ], [[MODEL, /_/g, \" \"], [VENDOR, XIAOMI], [TYPE, MOBILE]], [/\\b(mi[-_ ]?(?:pad)(?:[\\w_ ]+))(?: bui|\\))/i // Mi Pad tablets\n          ], [[MODEL, /_/g, \" \"], [VENDOR, XIAOMI], [TYPE, TABLET]], [\n          // OPPO\n          /; (\\w+) bui.+ oppo/i, /\\b(cph[12]\\d{3}|p(?:af|c[al]|d\\w|e[ar])[mt]\\d0|x9007|a101op)\\b/i], [MODEL, [VENDOR, \"OPPO\"], [TYPE, MOBILE]], [\n          // Vivo\n          /vivo (\\w+)(?: bui|\\))/i, /\\b(v[12]\\d{3}\\w?[at])(?: bui|;)/i], [MODEL, [VENDOR, \"Vivo\"], [TYPE, MOBILE]], [\n          // Realme\n          /\\b(rmx[12]\\d{3})(?: bui|;|\\))/i], [MODEL, [VENDOR, \"Realme\"], [TYPE, MOBILE]], [\n          // Motorola\n          /\\b(milestone|droid(?:[2-4x]| (?:bionic|x2|pro|razr))?:?( 4g)?)\\b[\\w ]+build\\//i, /\\bmot(?:orola)?[- ](\\w*)/i, /((?:moto[\\w\\(\\) ]+|xt\\d{3,4}|nexus 6)(?= bui|\\)))/i], [MODEL, [VENDOR, MOTOROLA], [TYPE, MOBILE]], [/\\b(mz60\\d|xoom[2 ]{0,2}) build\\//i], [MODEL, [VENDOR, MOTOROLA], [TYPE, TABLET]], [\n          // LG\n          /((?=lg)?[vl]k\\-?\\d{3}) bui| 3\\.[-\\w; ]{10}lg?-([06cv9]{3,4})/i], [MODEL, [VENDOR, LG], [TYPE, TABLET]], [/(lm(?:-?f100[nv]?|-[\\w\\.]+)(?= bui|\\))|nexus [45])/i, /\\blg[-e;\\/ ]+((?!browser|netcast|android tv)\\w+)/i, /\\blg-?([\\d\\w]+) bui/i], [MODEL, [VENDOR, LG], [TYPE, MOBILE]], [\n          // Lenovo\n          /(ideatab[-\\w ]+)/i, /lenovo ?(s[56]000[-\\w]+|tab(?:[\\w ]+)|yt[-\\d\\w]{6}|tb[-\\d\\w]{6})/i], [MODEL, [VENDOR, \"Lenovo\"], [TYPE, TABLET]], [\n          // Nokia\n          /(?:maemo|nokia).*(n900|lumia \\d+)/i, /nokia[-_ ]?([-\\w\\.]*)/i], [[MODEL, /_/g, \" \"], [VENDOR, \"Nokia\"], [TYPE, MOBILE]], [\n          // Google\n          /(pixel c)\\b/i // Google Pixel C\n          ], [MODEL, [VENDOR, GOOGLE], [TYPE, TABLET]], [/droid.+; (pixel[\\daxl ]{0,6})(?: bui|\\))/i // Google Pixel\n          ], [MODEL, [VENDOR, GOOGLE], [TYPE, MOBILE]], [\n          // Sony\n          /droid.+ (a?\\d[0-2]{2}so|[c-g]\\d{4}|so[-gl]\\w+|xq-a\\w[4-7][12])(?= bui|\\).+chrome\\/(?![1-6]{0,1}\\d\\.))/i], [MODEL, [VENDOR, SONY], [TYPE, MOBILE]], [/sony tablet [ps]/i, /\\b(?:sony)?sgp\\w+(?: bui|\\))/i], [[MODEL, \"Xperia Tablet\"], [VENDOR, SONY], [TYPE, TABLET]], [\n          // OnePlus\n          / (kb2005|in20[12]5|be20[12][59])\\b/i, /(?:one)?(?:plus)? (a\\d0\\d\\d)(?: b|\\))/i], [MODEL, [VENDOR, \"OnePlus\"], [TYPE, MOBILE]], [\n          // Amazon\n          /(alexa)webm/i, /(kf[a-z]{2}wi)( bui|\\))/i,\n          // Kindle Fire without Silk\n          /(kf[a-z]+)( bui|\\)).+silk\\//i // Kindle Fire HD\n          ], [MODEL, [VENDOR, AMAZON], [TYPE, TABLET]], [/((?:sd|kf)[0349hijorstuw]+)( bui|\\)).+silk\\//i // Fire Phone\n          ], [[MODEL, /(.+)/g, \"Fire Phone $1\"], [VENDOR, AMAZON], [TYPE, MOBILE]], [\n          // BlackBerry\n          /(playbook);[-\\w\\),; ]+(rim)/i // BlackBerry PlayBook\n          ], [MODEL, VENDOR, [TYPE, TABLET]], [/\\b((?:bb[a-f]|st[hv])100-\\d)/i, /\\(bb10; (\\w+)/i // BlackBerry 10\n          ], [MODEL, [VENDOR, BLACKBERRY], [TYPE, MOBILE]], [\n          // Asus\n          /(?:\\b|asus_)(transfo[prime ]{4,10} \\w+|eeepc|slider \\w+|nexus 7|padfone|p00[cj])/i], [MODEL, [VENDOR, ASUS], [TYPE, TABLET]], [/ (z[bes]6[027][012][km][ls]|zenfone \\d\\w?)\\b/i], [MODEL, [VENDOR, ASUS], [TYPE, MOBILE]], [\n          // HTC\n          /(nexus 9)/i // HTC Nexus 9\n          ], [MODEL, [VENDOR, \"HTC\"], [TYPE, TABLET]], [/(htc)[-;_ ]{1,2}([\\w ]+(?=\\)| bui)|\\w+)/i,\n          // HTC\n\n          // ZTE\n          /(zte)[- ]([\\w ]+?)(?: bui|\\/|\\))/i, /(alcatel|geeksphone|nexian|panasonic|sony(?!-bra))[-_ ]?([-\\w]*)/i // Alcatel/GeeksPhone/Nexian/Panasonic/Sony\n          ], [VENDOR, [MODEL, /_/g, \" \"], [TYPE, MOBILE]], [\n          // Acer\n          /droid.+; ([ab][1-7]-?[0178a]\\d\\d?)/i], [MODEL, [VENDOR, \"Acer\"], [TYPE, TABLET]], [\n          // Meizu\n          /droid.+; (m[1-5] note) bui/i, /\\bmz-([-\\w]{2,})/i], [MODEL, [VENDOR, \"Meizu\"], [TYPE, MOBILE]], [\n          // Sharp\n          /\\b(sh-?[altvz]?\\d\\d[a-ekm]?)/i], [MODEL, [VENDOR, SHARP], [TYPE, MOBILE]], [\n          // MIXED\n          /(blackberry|benq|palm(?=\\-)|sonyericsson|acer|asus|dell|meizu|motorola|polytron)[-_ ]?([-\\w]*)/i,\n          // BlackBerry/BenQ/Palm/Sony-Ericsson/Acer/Asus/Dell/Meizu/Motorola/Polytron\n          /(hp) ([\\w ]+\\w)/i,\n          // HP iPAQ\n          /(asus)-?(\\w+)/i,\n          // Asus\n          /(microsoft); (lumia[\\w ]+)/i,\n          // Microsoft Lumia\n          /(lenovo)[-_ ]?([-\\w]+)/i,\n          // Lenovo\n          /(jolla)/i,\n          // Jolla\n          /(oppo) ?([\\w ]+) bui/i // OPPO\n          ], [VENDOR, MODEL, [TYPE, MOBILE]], [/(archos) (gamepad2?)/i,\n          // Archos\n          /(hp).+(touchpad(?!.+tablet)|tablet)/i,\n          // HP TouchPad\n          /(kindle)\\/([\\w\\.]+)/i,\n          // Kindle\n          /(nook)[\\w ]+build\\/(\\w+)/i,\n          // Nook\n          /(dell) (strea[kpr\\d ]*[\\dko])/i,\n          // Dell Streak\n          /(le[- ]+pan)[- ]+(\\w{1,9}) bui/i,\n          // Le Pan Tablets\n          /(trinity)[- ]*(t\\d{3}) bui/i,\n          // Trinity Tablets\n          /(gigaset)[- ]+(q\\w{1,9}) bui/i,\n          // Gigaset Tablets\n          /(vodafone) ([\\w ]+)(?:\\)| bui)/i // Vodafone\n          ], [VENDOR, MODEL, [TYPE, TABLET]], [/(surface duo)/i // Surface Duo\n          ], [MODEL, [VENDOR, MICROSOFT], [TYPE, TABLET]], [/droid [\\d\\.]+; (fp\\du?)(?: b|\\))/i // Fairphone\n          ], [MODEL, [VENDOR, \"Fairphone\"], [TYPE, MOBILE]], [/(u304aa)/i // AT&T\n          ], [MODEL, [VENDOR, \"AT&T\"], [TYPE, MOBILE]], [/\\bsie-(\\w*)/i // Siemens\n          ], [MODEL, [VENDOR, \"Siemens\"], [TYPE, MOBILE]], [/\\b(rct\\w+) b/i // RCA Tablets\n          ], [MODEL, [VENDOR, \"RCA\"], [TYPE, TABLET]], [/\\b(venue[\\d ]{2,7}) b/i // Dell Venue Tablets\n          ], [MODEL, [VENDOR, \"Dell\"], [TYPE, TABLET]], [/\\b(q(?:mv|ta)\\w+) b/i // Verizon Tablet\n          ], [MODEL, [VENDOR, \"Verizon\"], [TYPE, TABLET]], [/\\b(?:barnes[& ]+noble |bn[rt])([\\w\\+ ]*) b/i // Barnes & Noble Tablet\n          ], [MODEL, [VENDOR, \"Barnes & Noble\"], [TYPE, TABLET]], [/\\b(tm\\d{3}\\w+) b/i], [MODEL, [VENDOR, \"NuVision\"], [TYPE, TABLET]], [/\\b(k88) b/i // ZTE K Series Tablet\n          ], [MODEL, [VENDOR, \"ZTE\"], [TYPE, TABLET]], [/\\b(nx\\d{3}j) b/i // ZTE Nubia\n          ], [MODEL, [VENDOR, \"ZTE\"], [TYPE, MOBILE]], [/\\b(gen\\d{3}) b.+49h/i // Swiss GEN Mobile\n          ], [MODEL, [VENDOR, \"Swiss\"], [TYPE, MOBILE]], [/\\b(zur\\d{3}) b/i // Swiss ZUR Tablet\n          ], [MODEL, [VENDOR, \"Swiss\"], [TYPE, TABLET]], [/\\b((zeki)?tb.*\\b) b/i // Zeki Tablets\n          ], [MODEL, [VENDOR, \"Zeki\"], [TYPE, TABLET]], [/\\b([yr]\\d{2}) b/i, /\\b(dragon[- ]+touch |dt)(\\w{5}) b/i // Dragon Touch Tablet\n          ], [[VENDOR, \"Dragon Touch\"], MODEL, [TYPE, TABLET]], [/\\b(ns-?\\w{0,9}) b/i // Insignia Tablets\n          ], [MODEL, [VENDOR, \"Insignia\"], [TYPE, TABLET]], [/\\b((nxa|next)-?\\w{0,9}) b/i // NextBook Tablets\n          ], [MODEL, [VENDOR, \"NextBook\"], [TYPE, TABLET]], [/\\b(xtreme\\_)?(v(1[045]|2[015]|[3469]0|7[05])) b/i // Voice Xtreme Phones\n          ], [[VENDOR, \"Voice\"], MODEL, [TYPE, MOBILE]], [/\\b(lvtel\\-)?(v1[12]) b/i // LvTel Phones\n          ], [[VENDOR, \"LvTel\"], MODEL, [TYPE, MOBILE]], [/\\b(ph-1) /i // Essential PH-1\n          ], [MODEL, [VENDOR, \"Essential\"], [TYPE, MOBILE]], [/\\b(v(100md|700na|7011|917g).*\\b) b/i // Envizen Tablets\n          ], [MODEL, [VENDOR, \"Envizen\"], [TYPE, TABLET]], [/\\b(trio[-\\w\\. ]+) b/i // MachSpeed Tablets\n          ], [MODEL, [VENDOR, \"MachSpeed\"], [TYPE, TABLET]], [/\\btu_(1491) b/i // Rotor Tablets\n          ], [MODEL, [VENDOR, \"Rotor\"], [TYPE, TABLET]], [/(shield[\\w ]+) b/i // Nvidia Shield Tablets\n          ], [MODEL, [VENDOR, \"Nvidia\"], [TYPE, TABLET]], [/(sprint) (\\w+)/i // Sprint Phones\n          ], [VENDOR, MODEL, [TYPE, MOBILE]], [/(kin\\.[onetw]{3})/i // Microsoft Kin\n          ], [[MODEL, /\\./g, \" \"], [VENDOR, MICROSOFT], [TYPE, MOBILE]], [/droid.+; (cc6666?|et5[16]|mc[239][23]x?|vc8[03]x?)\\)/i // Zebra\n          ], [MODEL, [VENDOR, ZEBRA], [TYPE, TABLET]], [/droid.+; (ec30|ps20|tc[2-8]\\d[kx])\\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, MOBILE]], [\n          ///////////////////\n          // CONSOLES\n          ///////////////////\n\n          /(ouya)/i,\n          // Ouya\n          /(nintendo) ([wids3utch]+)/i // Nintendo\n          ], [VENDOR, MODEL, [TYPE, CONSOLE]], [/droid.+; (shield) bui/i // Nvidia\n          ], [MODEL, [VENDOR, \"Nvidia\"], [TYPE, CONSOLE]], [/(playstation [345portablevi]+)/i // Playstation\n          ], [MODEL, [VENDOR, SONY], [TYPE, CONSOLE]], [/\\b(xbox(?: one)?(?!; xbox))[\\); ]/i // Microsoft Xbox\n          ], [MODEL, [VENDOR, MICROSOFT], [TYPE, CONSOLE]], [\n          ///////////////////\n          // SMARTTVS\n          ///////////////////\n\n          /smart-tv.+(samsung)/i // Samsung\n          ], [VENDOR, [TYPE, SMARTTV]], [/hbbtv.+maple;(\\d+)/i], [[MODEL, /^/, \"SmartTV\"], [VENDOR, SAMSUNG], [TYPE, SMARTTV]], [/(nux; netcast.+smarttv|lg (netcast\\.tv-201\\d|android tv))/i // LG SmartTV\n          ], [[VENDOR, LG], [TYPE, SMARTTV]], [/(apple) ?tv/i // Apple TV\n          ], [VENDOR, [MODEL, APPLE + \" TV\"], [TYPE, SMARTTV]], [/crkey/i // Google Chromecast\n          ], [[MODEL, CHROME + \"cast\"], [VENDOR, GOOGLE], [TYPE, SMARTTV]], [/droid.+aft(\\w)( bui|\\))/i // Fire TV\n          ], [MODEL, [VENDOR, AMAZON], [TYPE, SMARTTV]], [/\\(dtv[\\);].+(aquos)/i, /(aquos-tv[\\w ]+)\\)/i // Sharp\n          ], [MODEL, [VENDOR, SHARP], [TYPE, SMARTTV]], [/(bravia[\\w ]+)( bui|\\))/i // Sony\n          ], [MODEL, [VENDOR, SONY], [TYPE, SMARTTV]], [/(mitv-\\w{5}) bui/i // Xiaomi\n          ], [MODEL, [VENDOR, XIAOMI], [TYPE, SMARTTV]], [/\\b(roku)[\\dx]*[\\)\\/]((?:dvp-)?[\\d\\.]*)/i,\n          // Roku\n          /hbbtv\\/\\d+\\.\\d+\\.\\d+ +\\([\\w ]*; *(\\w[^;]*);([^;]*)/i // HbbTV devices\n          ], [[VENDOR, trim], [MODEL, trim], [TYPE, SMARTTV]], [/\\b(android tv|smart[- ]?tv|opera tv|tv; rv:)\\b/i // SmartTV from Unidentified Vendors\n          ], [[TYPE, SMARTTV]], [\n          ///////////////////\n          // WEARABLES\n          ///////////////////\n\n          /((pebble))app/i // Pebble\n          ], [VENDOR, MODEL, [TYPE, WEARABLE]], [/droid.+; (glass) \\d/i // Google Glass\n          ], [MODEL, [VENDOR, GOOGLE], [TYPE, WEARABLE]], [/droid.+; (wt63?0{2,3})\\)/i], [MODEL, [VENDOR, ZEBRA], [TYPE, WEARABLE]], [/(quest( 2)?)/i // Oculus Quest\n          ], [MODEL, [VENDOR, FACEBOOK], [TYPE, WEARABLE]], [\n          ///////////////////\n          // EMBEDDED\n          ///////////////////\n\n          /(tesla)(?: qtcarbrowser|\\/[-\\w\\.]+)/i // Tesla\n          ], [VENDOR, [TYPE, EMBEDDED]], [\n          ////////////////////\n          // MIXED (GENERIC)\n          ///////////////////\n\n          /droid .+?; ([^;]+?)(?: bui|\\) applew).+? mobile safari/i // Android Phones from Unidentified Vendors\n          ], [MODEL, [TYPE, MOBILE]], [/droid .+?; ([^;]+?)(?: bui|\\) applew).+?(?! mobile) safari/i // Android Tablets from Unidentified Vendors\n          ], [MODEL, [TYPE, TABLET]], [/\\b((tablet|tab)[;\\/]|focus\\/\\d(?!.+mobile))/i // Unidentifiable Tablet\n          ], [[TYPE, TABLET]], [/(phone|mobile(?:[;\\/]| [ \\w\\/\\.]*safari)|pda(?=.+windows ce))/i // Unidentifiable Mobile\n          ], [[TYPE, MOBILE]], [/(android[-\\w\\. ]{0,9});.+buil/i // Generic Android Device\n          ], [MODEL, [VENDOR, \"Generic\"]]],\n          engine: [[/windows.+ edge\\/([\\w\\.]+)/i // EdgeHTML\n          ], [VERSION, [NAME, EDGE + \"HTML\"]], [/webkit\\/537\\.36.+chrome\\/(?!27)([\\w\\.]+)/i // Blink\n          ], [VERSION, [NAME, \"Blink\"]], [/(presto)\\/([\\w\\.]+)/i,\n          // Presto\n          /(webkit|trident|netfront|netsurf|amaya|lynx|w3m|goanna)\\/([\\w\\.]+)/i,\n          // WebKit/Trident/NetFront/NetSurf/Amaya/Lynx/w3m/Goanna\n          /ekioh(flow)\\/([\\w\\.]+)/i,\n          // Flow\n          /(khtml|tasman|links)[\\/ ]\\(?([\\w\\.]+)/i,\n          // KHTML/Tasman/Links\n          /(icab)[\\/ ]([23]\\.[\\d\\.]+)/i // iCab\n          ], [NAME, VERSION], [/rv\\:([\\w\\.]{1,9})\\b.+(gecko)/i // Gecko\n          ], [VERSION, NAME]],\n          os: [[\n          // Windows\n          /microsoft (windows) (vista|xp)/i // Windows (iTunes)\n          ], [NAME, VERSION], [/(windows) nt 6\\.2; (arm)/i,\n          // Windows RT\n          /(windows (?:phone(?: os)?|mobile))[\\/ ]?([\\d\\.\\w ]*)/i,\n          // Windows Phone\n          /(windows)[\\/ ]?([ntce\\d\\. ]+\\w)(?!.+xbox)/i], [NAME, [VERSION, strMapper, windowsVersionMap]], [/(win(?=3|9|n)|win 9x )([nt\\d\\.]+)/i], [[NAME, \"Windows\"], [VERSION, strMapper, windowsVersionMap]], [\n          // iOS/macOS\n          /ip[honead]{2,4}\\b(?:.*os ([\\w]+) like mac|; opera)/i,\n          // iOS\n          /cfnetwork\\/.+darwin/i], [[VERSION, /_/g, \".\"], [NAME, \"iOS\"]], [/(mac os x) ?([\\w\\. ]*)/i, /(macintosh|mac_powerpc\\b)(?!.+haiku)/i // Mac OS\n          ], [[NAME, \"Mac OS\"], [VERSION, /_/g, \".\"]], [\n          // Mobile OSes\n          /droid ([\\w\\.]+)\\b.+(android[- ]x86|harmonyos)/i // Android-x86/HarmonyOS\n          ], [VERSION, NAME], [\n          // Android/WebOS/QNX/Bada/RIM/Maemo/MeeGo/Sailfish OS\n          /(android|webos|qnx|bada|rim tablet os|maemo|meego|sailfish)[-\\/ ]?([\\w\\.]*)/i, /(blackberry)\\w*\\/([\\w\\.]*)/i,\n          // Blackberry\n          /(tizen|kaios)[\\/ ]([\\w\\.]+)/i,\n          // Tizen/KaiOS\n          /\\((series40);/i // Series 40\n          ], [NAME, VERSION], [/\\(bb(10);/i // BlackBerry 10\n          ], [VERSION, [NAME, BLACKBERRY]], [/(?:symbian ?os|symbos|s60(?=;)|series60)[-\\/ ]?([\\w\\.]*)/i // Symbian\n          ], [VERSION, [NAME, \"Symbian\"]], [/mozilla\\/[\\d\\.]+ \\((?:mobile|tablet|tv|mobile; [\\w ]+); rv:.+ gecko\\/([\\w\\.]+)/i // Firefox OS\n          ], [VERSION, [NAME, FIREFOX + \" OS\"]], [/web0s;.+rt(tv)/i, /\\b(?:hp)?wos(?:browser)?\\/([\\w\\.]+)/i // WebOS\n          ], [VERSION, [NAME, \"webOS\"]], [\n          // Google Chromecast\n          /crkey\\/([\\d\\.]+)/i // Google Chromecast\n          ], [VERSION, [NAME, CHROME + \"cast\"]], [/(cros) [\\w]+ ([\\w\\.]+\\w)/i // Chromium OS\n          ], [[NAME, \"Chromium OS\"], VERSION], [\n          // Console\n          /(nintendo|playstation) ([wids345portablevuch]+)/i,\n          // Nintendo/Playstation\n          /(xbox); +xbox ([^\\);]+)/i,\n          // Microsoft Xbox (360, One, X, S, Series X, Series S)\n\n          // Other\n          /\\b(joli|palm)\\b ?(?:os)?\\/?([\\w\\.]*)/i,\n          // Joli/Palm\n          /(mint)[\\/\\(\\) ]?(\\w*)/i,\n          // Mint\n          /(mageia|vectorlinux)[; ]/i,\n          // Mageia/VectorLinux\n          /([kxln]?ubuntu|debian|suse|opensuse|gentoo|arch(?= linux)|slackware|fedora|mandriva|centos|pclinuxos|red ?hat|zenwalk|linpus|raspbian|plan 9|minix|risc os|contiki|deepin|manjaro|elementary os|sabayon|linspire)(?: gnu\\/linux)?(?: enterprise)?(?:[- ]linux)?(?:-gnu)?[-\\/ ]?(?!chrom|package)([-\\w\\.]*)/i,\n          // Ubuntu/Debian/SUSE/Gentoo/Arch/Slackware/Fedora/Mandriva/CentOS/PCLinuxOS/RedHat/Zenwalk/Linpus/Raspbian/Plan9/Minix/RISCOS/Contiki/Deepin/Manjaro/elementary/Sabayon/Linspire\n          /(hurd|linux) ?([\\w\\.]*)/i,\n          // Hurd/Linux\n          /(gnu) ?([\\w\\.]*)/i,\n          // GNU\n          /\\b([-frentopcghs]{0,5}bsd|dragonfly)[\\/ ]?(?!amd|[ix346]{1,2}86)([\\w\\.]*)/i,\n          // FreeBSD/NetBSD/OpenBSD/PC-BSD/GhostBSD/DragonFly\n          /(haiku) (\\w+)/i // Haiku\n          ], [NAME, VERSION], [/(sunos) ?([\\w\\.\\d]*)/i // Solaris\n          ], [[NAME, \"Solaris\"], VERSION], [/((?:open)?solaris)[-\\/ ]?([\\w\\.]*)/i,\n          // Solaris\n          /(aix) ((\\d)(?=\\.|\\)| )[\\w\\.])*/i,\n          // AIX\n          /\\b(beos|os\\/2|amigaos|morphos|openvms|fuchsia|hp-ux)/i,\n          // BeOS/OS2/AmigaOS/MorphOS/OpenVMS/Fuchsia/HP-UX\n          /(unix) ?([\\w\\.]*)/i // UNIX\n          ], [NAME, VERSION]]\n        };\n\n        /////////////////\n        // Constructor\n        ////////////////\n\n        var UAParser = function (ua, extensions) {\n          if (typeof ua === OBJ_TYPE) {\n            extensions = ua;\n            ua = undefined$1;\n          }\n          if (!(this instanceof UAParser)) {\n            return new UAParser(ua, extensions).getResult();\n          }\n          var _ua = ua || (typeof window !== UNDEF_TYPE && window.navigator && window.navigator.userAgent ? window.navigator.userAgent : EMPTY);\n          var _rgxmap = extensions ? extend(regexes, extensions) : regexes;\n          this.getBrowser = function () {\n            var _browser = {};\n            _browser[NAME] = undefined$1;\n            _browser[VERSION] = undefined$1;\n            rgxMapper.call(_browser, _ua, _rgxmap.browser);\n            _browser.major = majorize(_browser.version);\n            return _browser;\n          };\n          this.getCPU = function () {\n            var _cpu = {};\n            _cpu[ARCHITECTURE] = undefined$1;\n            rgxMapper.call(_cpu, _ua, _rgxmap.cpu);\n            return _cpu;\n          };\n          this.getDevice = function () {\n            var _device = {};\n            _device[VENDOR] = undefined$1;\n            _device[MODEL] = undefined$1;\n            _device[TYPE] = undefined$1;\n            rgxMapper.call(_device, _ua, _rgxmap.device);\n            return _device;\n          };\n          this.getEngine = function () {\n            var _engine = {};\n            _engine[NAME] = undefined$1;\n            _engine[VERSION] = undefined$1;\n            rgxMapper.call(_engine, _ua, _rgxmap.engine);\n            return _engine;\n          };\n          this.getOS = function () {\n            var _os = {};\n            _os[NAME] = undefined$1;\n            _os[VERSION] = undefined$1;\n            rgxMapper.call(_os, _ua, _rgxmap.os);\n            return _os;\n          };\n          this.getResult = function () {\n            return {\n              ua: this.getUA(),\n              browser: this.getBrowser(),\n              engine: this.getEngine(),\n              os: this.getOS(),\n              device: this.getDevice(),\n              cpu: this.getCPU()\n            };\n          };\n          this.getUA = function () {\n            return _ua;\n          };\n          this.setUA = function (ua) {\n            _ua = typeof ua === STR_TYPE && ua.length > UA_MAX_LENGTH ? trim(ua, UA_MAX_LENGTH) : ua;\n            return this;\n          };\n          this.setUA(_ua);\n          return this;\n        };\n        UAParser.VERSION = LIBVERSION;\n        UAParser.BROWSER = enumerize([NAME, VERSION, MAJOR]);\n        UAParser.CPU = enumerize([ARCHITECTURE]);\n        UAParser.DEVICE = enumerize([MODEL, VENDOR, TYPE, CONSOLE, MOBILE, SMARTTV, TABLET, WEARABLE, EMBEDDED]);\n        UAParser.ENGINE = UAParser.OS = enumerize([NAME, VERSION]);\n\n        ///////////\n        // Export\n        //////////\n\n        // check js environment\n        {\n          // nodejs env\n          if (module.exports) {\n            exports = module.exports = UAParser;\n          }\n          exports.UAParser = UAParser;\n        }\n\n        // jQuery/Zepto specific (optional)\n        // Note:\n        //   In AMD env the global scope should be kept clean, but jQuery is an exception.\n        //   jQuery always exports to global scope, unless jQuery.noConflict(true) is used,\n        //   and we should catch that.\n        var $ = typeof window !== UNDEF_TYPE && (window.jQuery || window.Zepto);\n        if ($ && !$.ua) {\n          var parser = new UAParser();\n          $.ua = parser.getResult();\n          $.ua.get = function () {\n            return parser.getUA();\n          };\n          $.ua.set = function (ua) {\n            parser.setUA(ua);\n            var result = parser.getResult();\n            for (var prop in result) {\n              $.ua[prop] = result[prop];\n            }\n          };\n        }\n      })(typeof window === \"object\" ? window : commonjsGlobal);\n    });\n\n    var DefaultUserProvider = /** @class */ (function () {\n        function DefaultUserProvider(userProvider, apiKey) {\n            var _a, _b, _c;\n            this.globalScope = getGlobalScope();\n            this.userAgent = typeof ((_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.navigator) !== 'undefined'\n                ? (_b = this.globalScope) === null || _b === void 0 ? void 0 : _b.navigator.userAgent\n                : undefined;\n            this.ua = new uaParser.UAParser(this.userAgent).getResult();\n            this.localStorage = new LocalStorage();\n            this.sessionStorage = new SessionStorage();\n            this.userProvider = userProvider;\n            this.apiKey = apiKey;\n            this.storageKey = \"EXP_\".concat((_c = this.apiKey) === null || _c === void 0 ? void 0 : _c.slice(0, 10), \"_DEFAULT_USER_PROVIDER\");\n        }\n        DefaultUserProvider.prototype.getUser = function () {\n            var _a, _b, _c, _d, _e;\n            var user = ((_a = this.userProvider) === null || _a === void 0 ? void 0 : _a.getUser()) || {};\n            return __assign$2({ language: this.getLanguage(), platform: 'Web', os: this.getOs(this.ua), device_model: this.getDeviceModel(this.ua), device_category: (_c = (_b = this.ua.device) === null || _b === void 0 ? void 0 : _b.type) !== null && _c !== void 0 ? _c : 'desktop', referring_url: (_e = (_d = this.globalScope) === null || _d === void 0 ? void 0 : _d.document) === null || _e === void 0 ? void 0 : _e.referrer.replace(/\\/$/, ''), cookie: this.getCookie(), browser: this.getBrowser(this.ua), landing_url: this.getLandingUrl(), first_seen: this.getFirstSeen(), url_param: this.getUrlParam(), user_agent: this.userAgent }, user);\n        };\n        DefaultUserProvider.prototype.getLanguage = function () {\n            return ((typeof navigator !== 'undefined' &&\n                ((navigator.languages && navigator.languages[0]) ||\n                    navigator.language)) ||\n                '');\n        };\n        DefaultUserProvider.prototype.getOs = function (ua) {\n            var _a, _b;\n            return [(_a = ua.browser) === null || _a === void 0 ? void 0 : _a.name, (_b = ua.browser) === null || _b === void 0 ? void 0 : _b.major]\n                .filter(function (e) { return e !== null && e !== undefined; })\n                .join(' ');\n        };\n        DefaultUserProvider.prototype.getDeviceModel = function (ua) {\n            var _a;\n            return (_a = ua.os) === null || _a === void 0 ? void 0 : _a.name;\n        };\n        DefaultUserProvider.prototype.getBrowser = function (ua) {\n            var _a;\n            var browser = (_a = ua.browser) === null || _a === void 0 ? void 0 : _a.name;\n            // Normalize for Chrome, Firefox, Safari, Edge, and Opera.\n            if (browser === null || browser === void 0 ? void 0 : browser.includes('Chrom'))\n                browser = 'Chrome'; // Chrome, Chrome Mobile, Chromium, etc\n            if (browser === null || browser === void 0 ? void 0 : browser.includes('Firefox'))\n                browser = 'Firefox'; // Firefox, Firefox Mobile, etc\n            if (browser === null || browser === void 0 ? void 0 : browser.includes('Safari'))\n                browser = 'Safari'; // Safari, Safari Mobile\n            if (browser === null || browser === void 0 ? void 0 : browser.includes('Edge'))\n                browser = 'Edge'; // Edge\n            if (browser === null || browser === void 0 ? void 0 : browser.includes('Opera'))\n                browser = 'Opera'; // Opera, Opera Mobi, etc\n            return browser;\n        };\n        DefaultUserProvider.prototype.getCookie = function () {\n            var _a, _b, _c, _d, _e;\n            if (!((_b = (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.document) === null || _b === void 0 ? void 0 : _b.cookie)) {\n                return undefined;\n            }\n            return Object.fromEntries((_e = (_d = (_c = this.globalScope) === null || _c === void 0 ? void 0 : _c.document) === null || _d === void 0 ? void 0 : _d.cookie) === null || _e === void 0 ? void 0 : _e.split('; ').map(function (c) { return c.split('='); }));\n        };\n        DefaultUserProvider.prototype.getLandingUrl = function () {\n            var _a, _b;\n            try {\n                var sessionUser = JSON.parse(this.sessionStorage.get(this.storageKey) || '{}');\n                if (!sessionUser.landing_url) {\n                    sessionUser.landing_url = (_b = (_a = this.globalScope) === null || _a === void 0 ? void 0 : _a.location) === null || _b === void 0 ? void 0 : _b.href.replace(/\\/$/, '');\n                    this.sessionStorage.put(this.storageKey, JSON.stringify(sessionUser));\n                }\n                return sessionUser.landing_url;\n            }\n            catch (_c) {\n                return undefined;\n            }\n        };\n        DefaultUserProvider.prototype.getFirstSeen = function () {\n            try {\n                var localUser = JSON.parse(this.localStorage.get(this.storageKey) || '{}');\n                if (!localUser.first_seen) {\n                    localUser.first_seen = (Date.now() / 1000).toString();\n                    this.localStorage.put(this.storageKey, JSON.stringify(localUser));\n                }\n                return localUser.first_seen;\n            }\n            catch (_a) {\n                return undefined;\n            }\n        };\n        DefaultUserProvider.prototype.getUrlParam = function () {\n            var e_1, _a;\n            var _b;\n            if (!this.globalScope) {\n                return undefined;\n            }\n            var params = {};\n            try {\n                var url = new URL(this.globalScope.location.href);\n                try {\n                    for (var _c = __values$2(url.searchParams), _d = _c.next(); !_d.done; _d = _c.next()) {\n                        var _e = __read$2(_d.value, 2), name_1 = _e[0], value = _e[1];\n                        params[name_1] = __spreadArray$1(__spreadArray$1([], __read$2(((_b = params[name_1]) !== null && _b !== void 0 ? _b : [])), false), __read$2(value.split(',')), false);\n                    }\n                }\n                catch (e_1_1) { e_1 = { error: e_1_1 }; }\n                finally {\n                    try {\n                        if (_d && !_d.done && (_a = _c.return)) _a.call(_c);\n                    }\n                    finally { if (e_1) throw e_1.error; }\n                }\n            }\n            catch (error) {\n                return undefined;\n            }\n            return Object.entries(params).reduce(function (acc, _a) {\n                var _b = __read$2(_a, 2), name = _b[0], value = _b[1];\n                acc[name] = value.length == 1 ? value[0] : value;\n                return acc;\n            }, {});\n        };\n        return DefaultUserProvider;\n    }());\n\n    var _a;\n    // Global instances for debugging. Falls back to a module-local map when no\n    // global scope is available (e.g. SSR or iOS Safari globalThis === null).\n    var globalScope = getGlobalScope();\n    if (globalScope) {\n        globalScope.experimentInstances = {};\n    }\n    var instances = (_a = globalScope === null || globalScope === void 0 ? void 0 : globalScope.experimentInstances) !== null && _a !== void 0 ? _a : {};\n    /**\n     * Initializes a singleton {@link ExperimentClient} identified by the configured\n     * instance name.\n     *\n     * @param apiKey The deployment API Key\n     * @param config See {@link ExperimentConfig} for config options\n     */\n    var initialize = function (apiKey, config) {\n        return _initialize(apiKey, config);\n    };\n    /**\n     * Initialize a singleton {@link ExperimentClient} which automatically\n     * integrates with the installed and initialized instance of the amplitude\n     * analytics SDK.\n     *\n     * You must be using amplitude-js SDK version 8.17.0+ for this integration to\n     * work.\n     *\n     * @param apiKey The deployment API Key\n     * @param config See {@link ExperimentConfig} for config options\n     */\n    var initializeWithAmplitudeAnalytics = function (apiKey, config) {\n        var plugin = function () {\n            return new AmplitudeIntegrationPlugin(apiKey, AnalyticsConnector.getInstance(getInstanceName(config)), 10000);\n        };\n        return _initialize(apiKey, config, plugin);\n    };\n    var getInstanceName = function (config) {\n        return (config === null || config === void 0 ? void 0 : config.instanceName) || Defaults.instanceName;\n    };\n    var getInstanceKey = function (apiKey, config) {\n        // Store instances by appending the instance name and api key. Allows for\n        // initializing multiple default instances for different api keys.\n        var instanceName = getInstanceName(config);\n        // The internal instance name prefix is used by web experiment to differentiate\n        // web and feature experiment sdks which use the same api key.\n        var internalInstanceNameSuffix = config === null || config === void 0 ? void 0 : config['internalInstanceNameSuffix'];\n        return internalInstanceNameSuffix\n            ? \"\".concat(instanceName, \".\").concat(apiKey, \".\").concat(String(internalInstanceNameSuffix))\n            : \"\".concat(instanceName, \".\").concat(apiKey);\n    };\n    var newExperimentClient = function (apiKey, config) {\n        return new ExperimentClient(apiKey, __assign$2(__assign$2({}, config), { userProvider: new DefaultUserProvider(config === null || config === void 0 ? void 0 : config.userProvider, apiKey) }));\n    };\n    var _initialize = function (apiKey, config, plugin) {\n        var instanceKey = getInstanceKey(apiKey, config);\n        var client = instances[instanceKey];\n        if (client) {\n            return client;\n        }\n        client = newExperimentClient(apiKey, config);\n        if (plugin) {\n            client.addPlugin(plugin());\n        }\n        instances[instanceKey] = client;\n        return client;\n    };\n    /**\n     * Provides factory methods for storing singleton instances of {@link ExperimentClient}\n     * @category Core Usage\n     */\n    var Experiment = {\n        initialize: initialize,\n        initializeWithAmplitudeAnalytics: initializeWithAmplitudeAnalytics,\n    };\n\n    /**\n     * A stub {@link Client} implementation that does nothing for all methods\n     */\n    var StubExperimentClient = /** @class */ (function () {\n        function StubExperimentClient() {\n        }\n        StubExperimentClient.prototype.getUser = function () {\n            return {};\n        };\n        StubExperimentClient.prototype.start = function (user) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    return [2 /*return*/];\n                });\n            });\n        };\n        StubExperimentClient.prototype.stop = function () { };\n        StubExperimentClient.prototype.setUser = function (user) { };\n        StubExperimentClient.prototype.fetch = function (user, options) {\n            return __awaiter$1(this, void 0, void 0, function () {\n                return __generator$1(this, function (_a) {\n                    return [2 /*return*/, this];\n                });\n            });\n        };\n        StubExperimentClient.prototype.getUserProvider = function () {\n            return null;\n        };\n        StubExperimentClient.prototype.setUserProvider = function (uerProvider) {\n            return this;\n        };\n        StubExperimentClient.prototype.variant = function (key, fallback) {\n            return Defaults.fallbackVariant;\n        };\n        StubExperimentClient.prototype.all = function () {\n            return {};\n        };\n        StubExperimentClient.prototype.clear = function () { };\n        StubExperimentClient.prototype.exposure = function (key) { };\n        return StubExperimentClient;\n    }());\n\n    /**\n     * In-memory {@link Storage} for the web experiment variant/flag caches\n     * (`amp-exp-*`), injected by experiment-tag while cookie consent has not been\n     * granted so the caches never touch sessionStorage pre-consent. The storage is\n     * chosen once at client construction: after a mid-session grant the cache\n     * stays in memory for the page lifetime and reverts to SessionStorage on the\n     * next load — acceptable because it is a cache that repopulates on fetch.\n     */\n    var MemoryStorage = /** @class */ (function () {\n        function MemoryStorage() {\n            this.store = new Map();\n        }\n        MemoryStorage.prototype.get = function (key) {\n            return this.store.get(key);\n        };\n        MemoryStorage.prototype.put = function (key, value) {\n            this.store.set(key, value);\n        };\n        MemoryStorage.prototype.delete = function (key) {\n            this.store.delete(key);\n        };\n        return MemoryStorage;\n    }());\n\n    exports.AmplitudeAnalyticsProvider = AmplitudeAnalyticsProvider;\n    exports.AmplitudeIntegrationPlugin = AmplitudeIntegrationPlugin;\n    exports.AmplitudeUserProvider = AmplitudeUserProvider;\n    exports.ConsoleLogger = ConsoleLogger;\n    exports.Experiment = Experiment;\n    exports.ExperimentClient = ExperimentClient;\n    exports.MemoryStorage = MemoryStorage;\n    exports.StubExperimentClient = StubExperimentClient;\n    exports.initialize = initialize;\n    exports.initializeWithAmplitudeAnalytics = initializeWithAmplitudeAnalytics;\n\n    Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n"]}