assets/js/pack.3KYIYXYU.js.map in compost-jekyll-theme-0.3.1 vs assets/js/pack.3KYIYXYU.js.map in compost-jekyll-theme-0.3.2

- old
+ new

@@ -1,3 +1,7 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:4400dc7eace00b355666bb97becfcbbd4fda219d87c57c9f47af606294bb729b -size 2478951 +{ + "version": 3, + "sources": ["../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/utils/trim.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/utils/version.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/utils/variable-replacement.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/utils/memory-cache.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/utils/user-agent.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/client/browsers.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/client/browser_engine.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/fixtures/available-browsers.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/fixtures/mobile-only-browsers.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/browser.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/client/mobile_apps.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/mobile-apps.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/client/feed_readers.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/feed-readers.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/client/libraries.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/libraries.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/client/mediaplayers.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/media-players.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/client/pim.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/personal-information-managers.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/client/index.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/device/cameras.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/device/cameras.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/device/mobiles.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/utils/model.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/device/mobiles.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/device/televisions.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/device/televisions.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/device/car_browsers.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/device/cars.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/device/consoles.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/device/consoles.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/device/notebooks.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/device/notebooks.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/device/portable_media_player.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/device/portable-media-players.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/device/index.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/oss.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/operating-system/fixtures/operating-system.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/operating-system/index.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/vendorfragments.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/vendor-fragment/index.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/fixtures/regexes/bots.json", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/parsers/bot/index.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/utils/version-compare.js", "../../node_modules/.pnpm/device-detector-js@3.0.3/node_modules/device-detector-js/dist/index.js", "../../node_modules/.pnpm/stackframe@1.3.4/node_modules/stackframe/stackframe.js", "../../node_modules/.pnpm/error-stack-parser@2.1.4/node_modules/error-stack-parser/error-stack-parser.js", "../../node_modules/.pnpm/cross-fetch@3.1.8/node_modules/cross-fetch/dist/browser-ponyfill.js", "../../node_modules/.pnpm/bintrees@1.0.2/node_modules/bintrees/lib/treebase.js", "../../node_modules/.pnpm/bintrees@1.0.2/node_modules/bintrees/lib/rbtree.js", "../../node_modules/.pnpm/bintrees@1.0.2/node_modules/bintrees/lib/bintree.js", "../../node_modules/.pnpm/bintrees@1.0.2/node_modules/bintrees/index.js", "../../node_modules/.pnpm/tdigest@0.1.2/node_modules/tdigest/tdigest.js", "../../_packs/entry.js", "../../node_modules/.pnpm/promise-polyfill@8.3.0/node_modules/promise-polyfill/src/finally.js", "../../node_modules/.pnpm/promise-polyfill@8.3.0/node_modules/promise-polyfill/src/allSettled.js", "../../node_modules/.pnpm/promise-polyfill@8.3.0/node_modules/promise-polyfill/src/any.js", "../../node_modules/.pnpm/promise-polyfill@8.3.0/node_modules/promise-polyfill/src/index.js", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/jsonify_notice.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/metrics.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/scope.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/processor/esp.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/filter/angular_message.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/filter/debounce.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/filter/ignore_noise.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/filter/uncaught_message.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/http_req/fetch.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/http_req/api.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/http_req/node.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/http_req/index.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/tdshared.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/queries.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/queues.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/routes.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/version.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/base_notifier.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/filter/window.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/instrumentation/console.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/instrumentation/dom.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/instrumentation/fetch.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/instrumentation/location.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/instrumentation/xhr.ts", "../../node_modules/.pnpm/@airbrake+browser@1.4.2/node_modules/@airbrake/browser/src/notifier.ts", "../../node_modules/.pnpm/@hotwired+turbo@7.3.0/node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js", "../../node_modules/.pnpm/@hotwired+stimulus@3.2.2/node_modules/@hotwired/stimulus/dist/stimulus.js", "../../_packs/controllers/body_scroll_controller.js", "../../_packs/controllers/device_detector_controller.js", "../../_packs/controllers/button_copy_controller.js", "../../_packs/controllers/footnotes_controller.js", "../../_packs/controllers/support_us_controller.js", "../../_packs/controllers/modal_controller.js", "../../_packs/controllers/authorize_interaction_controller.js", "../../_packs/controllers/tabs_controller.js"], + "sourcesContent": ["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.trim = (str, char) => {\n return str.replace(new RegExp(\"^[\" + char + \"]+|[\" + char + \"]+$\", \"g\"), \"\");\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst trim_1 = require(\"./trim\");\nexports.formatVersion = (version, versionTruncation) => {\n if (version === undefined)\n return \"\";\n const versionString = trim_1.trim(version, \". \").replace(new RegExp(\"_\", \"g\"), \".\");\n const versionParts = versionString.split(\".\");\n // Return if the string is not only digits once we removed the dots\n if (!/^\\d+$/.test(versionParts.join(\"\"))) {\n return versionString;\n }\n if (versionTruncation !== 0) {\n if (Number.isInteger(parseFloat(versionString))) {\n return parseInt(versionString, 10).toFixed(1);\n }\n }\n if (versionParts.length > 1) {\n if (versionTruncation !== null) {\n return versionParts.slice(0, versionTruncation + 1).join(\".\");\n }\n }\n return versionString;\n};\nexports.parseBrowserEngineVersion = (userAgent, engine) => {\n if (!engine)\n return \"\";\n if (engine === \"Gecko\") {\n const geckoVersionRegex = /[ ](?:rv[: ]([0-9\\.]+)).*gecko\\/[0-9]{8,10}/i;\n const match = userAgent.match(geckoVersionRegex);\n if (match) {\n return match.pop();\n }\n }\n const regex = new RegExp(`${engine}\\\\s*\\\\/?\\\\s*((?:(?=\\\\d+\\\\.\\\\d)\\\\d+[.\\\\d]*|\\\\d{1,7}(?=(?:\\\\D|$))))`, \"i\");\n const match = userAgent.match(regex);\n if (!match)\n return \"\";\n return match.pop();\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.variableReplacement = (template, variables) => {\n const regex = new RegExp(`\\\\$\\\\d`, \"g\");\n if (template === null || template === undefined)\n return \"\";\n return template.replace(regex, (match) => {\n const index = parseInt(match.substr(1), 10);\n const variable = variables[index - 1];\n return variable || \"\";\n });\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.memoryCache = () => {\n const memoryCacheBucket = {};\n const set = (key, value) => {\n memoryCacheBucket[key] = value;\n };\n const get = (key) => {\n if (memoryCacheBucket.hasOwnProperty(key)) {\n return memoryCacheBucket[key];\n }\n };\n return {\n set,\n get\n };\n};\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst memory_cache_1 = require(\"./memory-cache\");\nconst cache = memory_cache_1.memoryCache();\nconst getRegexInstance = (rawRegex) => {\n const cachedRegexInstance = cache.get(rawRegex);\n if (cachedRegexInstance)\n return cachedRegexInstance.value;\n const regexInstance = RegExp(`(?:^|[^A-Z0-9\\-_]|[^A-Z0-9\\-]_|sprd-)(?:${rawRegex})`, \"i\");\n cache.set(rawRegex, {\n value: regexInstance\n });\n return regexInstance;\n};\nexports.userAgentParser = (rawRegex, userAgent) => {\n // TODO: find out why it fails in some browsers\n try {\n const regexInstance = getRegexInstance(rawRegex);\n const match = regexInstance.exec(userAgent);\n return match ? match.slice(1) : null;\n }\n catch (_a) {\n return null;\n }\n};\n", "[\n {\n \"regex\": \"Helio/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Helio\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"7654Browser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"7654 Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Qazweb/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Qazweb\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Degdegan/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"deg-degan\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"JavaFX/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"JavaFX\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Chedot/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Chedot\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Chrome/(\\\\d+[\\\\.\\\\d]+) \\\\(Chromium GOST\\\\)\",\n \"name\": \"Chromium GOST\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"(?:DeledaoPersonal|DeledaoFamily)/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Deledao\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"HasBrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"HasBrowser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Byffox/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Byffox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Chrome/(\\\\d+[\\\\.\\\\d]+).+AgentWeb.+UCBrowser\",\n \"name\": \"CoolBrowser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"DotBrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Dot Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"CravingExplorer/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Craving Explorer\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"DeskBrowse/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"DeskBrowse\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Lolifox/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Lolifox\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"qutebrowser/(\\\\d+[\\\\.\\\\d]+).+Chrome\",\n \"name\": \"Qutebrowser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"qutebrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Qutebrowser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"flast/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Flast\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"PolyBrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"PolyBrowser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Chrome.+BriskBard/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"BriskBard\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"BriskBard(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"BriskBard\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"GinxDroidBrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"GinxDroid Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"AviraScout/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Avira Scout\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"VenusBrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Venus Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Chrome.+Otter(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Otter Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Otter(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Otter Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Chrome.+Smooz/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Smooz\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Smooz/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Smooz\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Cornowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Cornowser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Orca/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Orca\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Flow/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"Flow\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"EkiohFlow\"\n }\n },\n {\n \"regex\": \"Ekioh/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"Flow\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"EkiohFlow\"\n }\n },\n {\n \"regex\": \"xStand/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"xStand\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Biyubi/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Biyubi\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Perfect%20Browser(?:-iPad)?|Perfect(?:BrowserPro)?)/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Perfect Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Browser/Phantom/V(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Phantom Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AwoX(?:/(\\\\d+[\\\\.\\\\d]+))? Browser\",\n \"name\": \"AwoX\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Zetakey/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Zetakey\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"PlayFreeBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"PlayFree Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:chimlac_browser|chimlac)/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"Chim Lac\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Odin/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"Odin\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Tbrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"T-Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"SFive(?:_Android)?/.+ Chrome/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"SFive\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"SFive_IOS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"SFive\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Navigateur web/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Navigateur Web\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Sraf(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Seraphic Sraf\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"SeewoBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Seewo Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"(?:Kode(?:iOS)?/(?:(\\\\d+[\\\\.\\\\d]+))?|TansoDL)\",\n \"name\": \"Kode Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UR/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"UR Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"OceanHero/([\\\\.\\\\d]+)\",\n \"name\": \"OceanHero\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Chrome/.+ SLBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Smart Lenovo Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"SLBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Smart Lenovo Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Browzar\",\n \"name\": \"Browzar\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Stargon/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Stargon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"NFSBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NFS Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Borealis/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Borealis Navigator\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"YoloBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Yolo Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"PHX/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Phoenix Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"PrivacyWall/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"PrivacyWall\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Ghostery:?(\\\\d+[\\\\.\\\\d]+)?\",\n \"name\": \"Ghostery Privacy Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Firefox/.*(?:Turkcell-)?YaaniBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Yaani Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"(?:Turkcell-)?YaaniBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Yaani Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"SEB/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Safe Exam Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Colibri/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Colibri\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Xvast/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Xvast\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"TungstenBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Tungsten\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Lulumi-browser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Lulumi\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"ybrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Yahoo! Japan Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"iLunascapeLite/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Lunascape Lite\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Polypane/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Polypane\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"OhHaiBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"OhHai Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Sizzy/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Sizzy\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"GlassBrowser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Glass Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"ToGate/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"ToGate\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AirWatch Browser v(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"VMware AirWatch\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"ADG/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"AOL Desktop\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Elements Browser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Elements Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Light/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Light\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Valve Steam GameOverlay/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Steam In-Game Overlay\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"115Browser/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"115 Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Atom/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Atom\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Mobile VR.+Firefox\",\n \"name\": \"Firefox Reality\",\n \"version\": \"\"\n },\n {\n \"regex\": \"AVG(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"AVG Secure Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Start/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"START Internet Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Lovense(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Lovense Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"com.airfind.deltabrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Delta Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Ordissimo|webissimo3)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Ordissimo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"CCleaner(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"CCleaner\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AlohaLite(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Aloha Browser Lite\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"TaoBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Tao Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Falkon(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Falkon\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"mCent(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"mCent\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"SalamWeb(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"SalamWeb\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"BlackHawk(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"BlackHawk\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Minimo(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Minimo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"WIB(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Wear Internet Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Origyn Web Browser\",\n \"name\": \"Origyn Web Browser\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Kinza(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Kinza\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Beamrise(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Beamrise\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Faux(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Faux Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"splash Version(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Splash\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MZBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Meizu Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"COSBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"COS Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Crusta(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Crusta\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Hawk/TurboBrowser(?:/v?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Hawk Turbo Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"FreeU(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"FreeU\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"NoxBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Nox Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Basilisk(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Basilisk\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Goanna\"\n }\n },\n {\n \"regex\": \"SputnikBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Sputnik Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"TNSBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"K.Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"OculusBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Oculus Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Jio(?:Browser|Pages)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Jio Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Chrome/.+ Hola(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"hola! Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Slimjet/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"Slimjet\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"7Star/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"7Star\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"MxNitro/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"MxNitro\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"HuaweiBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Huawei Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"VivoBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"vivo Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RealmeBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Realme Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Beaker ?Browser(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Beaker Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"QwantiOS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Qwant Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"QwantMobile(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Qwant Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Qwant/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Qwant Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"TenFourFox(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"TenFourFox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"AOLShield(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"AOL Shield\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Edge[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Microsoft Edge\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Edge\"\n }\n },\n {\n \"regex\": \"EdgiOS[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Microsoft Edge\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"EdgA[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Microsoft Edge\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Edg[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Microsoft Edge\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"QIHU 360[ES]E\",\n \"name\": \"360 Browser\",\n \"version\": \"\"\n },\n {\n \"regex\": \"360 Aphone Browser(?: \\\\((\\\\d+[\\\\.\\\\d]+)(?:beta)?\\\\))?\",\n \"name\": \"360 Phone Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"SailfishBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Sailfish Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"IceCat(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"IceCat\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Mobicip\",\n \"name\": \"Mobicip\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Camino(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Camino\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Waterfox(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Waterfox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Chrome/.+ AlohaBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Aloha Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"AlohaBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Aloha Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Avast|ASW|Safer)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Avast Secure Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Epic(?:/(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"Epic\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Fennec(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Fennec\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Firefox.*Tablet browser (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"MicroB\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Maemo Browser(?: (\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"MicroB\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Deepnet Explorer (\\\\d+[\\\\.\\\\d]+)?\",\n \"name\": \"Deepnet Explorer\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Avant ?Browser\",\n \"name\": \"Avant Browser\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"OppoBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Oppo Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Chrome/(\\\\d+[\\\\.\\\\d]+).*MRCHROME\",\n \"name\": \"Amigo\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"AtomicBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Atomic Web Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Bunjalloo(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Bunjalloo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Brave(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Brave\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Iridium(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Iridium\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Iceweasel(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Iceweasel\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"WebPositive\",\n \"name\": \"WebPositive\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \".*Goanna.*PaleMoon(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Pale Moon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Goanna\"\n }\n },\n {\n \"regex\": \"PaleMoon(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Pale Moon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"CometBird(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"CometBird\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"IceDragon(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"IceDragon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Flock(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Flock\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\",\n \"versions\": {\n \"3\": \"WebKit\"\n }\n }\n },\n {\n \"regex\": \"JigBrowserPlus/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Jig Browser Plus\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"jig browser(?: web;|9i?)?(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Jig Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Kapiko(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Kapiko\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Kylo(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Kylo\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Origin/(?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Origin In-Game Overlay\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Cunaguaro(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Cunaguaro\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:TO-Browser/TOB|DT-Browser/DTB)(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"t-online.de Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Kazehakase(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Kazehakase\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"ArcticFox(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Arctic Fox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Goanna\"\n }\n },\n {\n \"regex\": \"Mypal(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Mypal\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Goanna\"\n }\n },\n {\n \"regex\": \"Centaury(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Centaury\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Goanna\"\n }\n },\n {\n \"regex\": \"(?:Focus|Klar)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Firefox Focus\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Cyberfox(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Cyberfox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Firefox/(\\\\d+[\\\\.\\\\d]+).*\\\\(Swiftfox\\\\)\",\n \"name\": \"Swiftfox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"(?:Mobile|Tablet).*Servo.*Firefox(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Firefox Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Servo\"\n }\n },\n {\n \"regex\": \"(?:Mobile|Tablet).*Firefox(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Firefox Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"FxiOS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Firefox Mobile iOS\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \".*Servo.*Firefox(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Firefox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Servo\"\n }\n },\n {\n \"regex\": \"(?!.*Opera[ /])Firefox(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Firefox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"(?:BonEcho|GranParadiso|Lorentz|Minefield|Namoroka|Shiretoko)/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Firefox\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"ANTFresco(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"ANT Fresco\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"ANTGalio(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"ANTGalio\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Espial|Escape)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Espial TV Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RockMelt(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"RockMelt\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Fireweb Navigator(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Fireweb Navigator\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Fireweb(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Fireweb\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Navigator|Netscape6?)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Netscape\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"(?:Polarity)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Polarity\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:QupZilla)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"QupZilla\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Dooble)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Dooble\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Whale/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Whale Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Obigo[ ]?(?:InternetBrowser|Browser)?(?:[ /]([a-z0-9]*))?\",\n \"name\": \"Obigo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Obigo|Teleca\",\n \"name\": \"Obigo\",\n \"version\": \"\"\n },\n {\n \"regex\": \"UCBrowserHD/(\\\\d[\\\\d\\\\.]+)\",\n \"name\": \"UC Browser HD\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UCMini(?:[ /]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"UC Browser Mini\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UC[ ]?Browser.* \\\\(UCMini\\\\)\",\n \"name\": \"UC Browser Mini\",\n \"version\": \"\"\n },\n {\n \"regex\": \"UCTurbo(?:[ /]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"UC Browser Turbo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UC[ ]?Browser.* \\\\(UCTurbo\\\\)\",\n \"name\": \"UC Browser Turbo\",\n \"version\": \"\"\n },\n {\n \"regex\": \"OPRGX(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Opera GX\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"(?:Opera Tablet.*Version|Opera/.+Opera Mobi.+Version|Mobile.+OPR)/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Presto\",\n \"versions\": {\n \"15\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"MMS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera Neon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"OMI/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera Devices\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Opera%20Touch/(\\\\d+[\\\\.\\\\d]+)? CFNetwork/.+Darwin/.+(?!.*x86_64)\",\n \"name\": \"Opera Touch\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"OPT/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera Touch\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Opera/(\\\\d+[\\\\.\\\\d]+).+Opera Mobi\",\n \"name\": \"Opera Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Presto\",\n \"versions\": {\n \"15\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"Opera ?Mini/(?:att/)?(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera Mini\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Presto\"\n }\n },\n {\n \"regex\": \"Opera ?Mini.+Version/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera Mini\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Presto\"\n }\n },\n {\n \"regex\": \"OPiOS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera Mini iOS\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Opera%20Mini/(\\\\d+[\\\\.\\\\d]+) CFNetwork\",\n \"name\": \"Opera Mini iOS\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Opera.+Edition Next.+Version/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera Next\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Presto\",\n \"versions\": {\n \"15\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"(?:Opera|OPR)[/ ](?:9.80.*Version/)?(\\\\d+[\\\\.\\\\d]+).+Edition Next\",\n \"name\": \"Opera Next\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Presto\",\n \"versions\": {\n \"15\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"(?:Opera[/ ]?|OPR[/ ])(?:9.80.*Version/)?(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Opera\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\",\n \"versions\": {\n \"7\": \"Presto\",\n \"15\": \"Blink\",\n \"3.5\": \"Elektra\"\n }\n }\n },\n {\n \"regex\": \"rekonq(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Rekonq\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"CoolNovo(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"CoolNovo\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"(?:Comodo[ _])?Dragon(?!fruit)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Comodo Dragon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"ChromePlus(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"ChromePlus\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"Conkeror(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Conkeror\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Konqueror(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Konqueror\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"KHTML\",\n \"versions\": {\n \"4\": \"\"\n }\n }\n },\n {\n \"regex\": \"(?:baidubrowser|bdbrowser(?:(?:hd)?_i18n)?|FlyFlow|BaiduHD)(?:[/ ](\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"Baidu Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:(?:BD)?Spark(?:Safe)?|BIDUBrowser)[/ ](\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"Baidu Spark\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"YaBrowser(?:/(\\\\d+[\\\\.\\\\d]*)) \\\\(lite\\\\)?\",\n \"name\": \"Yandex Browser Lite\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"YaBrowser(?:/(\\\\d+[\\\\.\\\\d]*))(?: \\\\((alpha|beta)\\\\))?\",\n \"name\": \"Yandex Browser\",\n \"version\": \"$1 $2\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Ya(?:ndex)?SearchBrowser(?:/(\\\\d+[\\\\.\\\\d]*))\",\n \"name\": \"Yandex Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Vivaldi(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Vivaldi\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"TweakStyle(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"TweakStyle\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Chrome.+Midori Browser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Midori\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Midori(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Midori\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Mercury(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Mercury\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Chrome.+Maxthon(?:.+\\\\(portable\\\\))?/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Maxthon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"5.2\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"(?:Maxthon(?:%20Browser)?|MxBrowser(?:-inhouse|-iPhone)?)[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Maxthon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\",\n \"versions\": {\n \"3\": \"WebKit\"\n }\n }\n },\n {\n \"regex\": \"(?:Maxthon|MyIE2)\",\n \"name\": \"Maxthon\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"Puffin(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Puffin\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MobileIron(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Iron Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Chrome(?:/(\\\\d+[\\\\.\\\\d]+))?.*Iron\",\n \"name\": \"Iron\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Iron(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Iron\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"Epiphany(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"GNOME Web\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\",\n \"versions\": {\n \"2.9.16\": \"\",\n \"2.28\": \"WebKit\"\n }\n }\n },\n {\n \"regex\": \"LieBaoFast(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"LieBaoFast\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"LBBrowser(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Cheetah Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"SE (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Sogou Explorer\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"QQBrowserLite/([\\\\d\\\\.]+)\",\n \"name\": \"QQ Browser Lite\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"M?QQBrowser/Mini([\\\\.\\\\d]+)?\",\n \"name\": \"QQ Browser Mini\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"M?QQBrowser(?:/([\\\\.\\\\d]+))?\",\n \"name\": \"QQ Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"(?:MIUIBrowser|MiuiBrowser)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"MIUI Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"(?:coc_coc_browser|coccocbrowser|CocCoc)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Coc Coc\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"DuckDuckGo/(\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"DuckDuckGo Privacy Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Samsung ?Browser(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Samsung Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:SFB(?:rowser)?)/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Super Fast Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"com.browser.tssomas(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Super Fast Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"EUI Browser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"EUI Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"UBrowser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Streamy(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Streamy\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"isivioo\",\n \"name\": \"Isivioo\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"UC[ ]?Browser(?:[ /]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"UC Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UCWEB(?:[ /]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"UC Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UC AppleWebKit\",\n \"name\": \"UC Browser\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Tenta/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Tenta Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Rocket/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Firefox Rocket\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Web Explorer/(\\\\d+[\\\\.\\\\d]+).*Chrome\",\n \"name\": \"Web Explorer\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"SznProhlizec/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Seznam Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"SogouMobileBrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Sogou Mobile Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"Mint Browser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Mint Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"Ecosia (?:android|ios)@(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Ecosia\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"ACHEETAHI\",\n \"name\": \"CM Browser\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"Kiwi Chrome\",\n \"name\": \"Kiwi\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"Mb2345Browser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"2345 Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"QtWebEngine/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"QtWebEngine\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"Silk/(\\\\d+[\\\\.\\\\d]+) like Chrome\",\n \"name\": \"Mobile Silk\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Silk(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Mobile Silk\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"IBrowse(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"IBrowse\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UP.Browser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Openwave Mobile Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Openwave(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Openwave Mobile Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"OneBrowser(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"ONE Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"(?:NokiaBrowser|BrowserNG)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Nokia Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Series60/5\\\\.0\",\n \"name\": \"Nokia Browser\",\n \"version\": \"7.0\"\n },\n {\n \"regex\": \"Series60/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Nokia OSS Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"S40OviBrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Nokia Ovi Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"^Nokia|Nokia[EN]?\\\\d+\",\n \"name\": \"Nokia Browser\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Sleipnir(?:(?:%20Browser)?[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Sleipnir\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"NTENTBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NTENT Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"TV Bro/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"TV Bro\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Chrome/.+ Quark(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Quark\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"MonumentBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Monument Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"BlueBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Blue Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"JAPAN Browser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Japan Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Version/.* Chrome(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Chrome Webview\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"CrMo(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Chrome Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"CriOS(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Chrome Mobile iOS\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Chrome(?:/(\\\\d+[\\\\.\\\\d]+))? Mobile\",\n \"name\": \"Chrome Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"chromeframe(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Chrome Frame\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Chromium(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Chromium\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"HeadlessChrome(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Headless Chrome\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Blink\"\n }\n },\n {\n \"regex\": \"Chrome(?!book)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Chrome\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\",\n \"versions\": {\n \"28\": \"Blink\"\n }\n }\n },\n {\n \"regex\": \"(?:Tizen|SLP) Browser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Tizen Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Blazer(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Palm Blazer\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Pre/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Palm Pre\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:hpw|web)OS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"wOSBrowser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"WebPro(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Palm WebPro\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Palmscape(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Palmscape\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Jasmine(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Jasmine\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Lynx(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Lynx\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Text-based\"\n }\n },\n {\n \"regex\": \"NCSA_Mosaic(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NCSA Mosaic\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"ABrowse(?: (\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"ABrowse\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"amaya(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Amaya\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AmigaVoyager(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Amiga Voyager\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Amiga-Aweb(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Amiga Aweb\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Arora(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Arora\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Beonex(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Beonex\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"bline(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"B-Line\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"BrowseX \\\\((\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"BrowseX\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Charon(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Charon\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Cheshire(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Cheshire\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"dbrowser\",\n \"name\": \"dbrowser\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Dillo(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Dillo\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Dillo\"\n }\n },\n {\n \"regex\": \"Dolfin(?:/(\\\\d+[\\\\.\\\\d]+))?|dolphin\",\n \"name\": \"Dolphin\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Elinks(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Elinks\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Text-based\"\n }\n },\n {\n \"regex\": \"Element Browser(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Element Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"eZBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"eZ Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Firebird(?! Build)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Firebird\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Fluid(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Fluid\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Galeon(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Galeon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Google Earth(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Google Earth\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"HotJava(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"HotJava\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"iCabMobile(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"iCab Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"iCab(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"iCab\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"iCab\",\n \"versions\": {\n \"4\": \"WebKit\"\n }\n }\n },\n {\n \"regex\": \"i?Lunascape(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Lunascape\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"\"\n }\n },\n {\n \"regex\": \"Crazy Browser (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Crazy Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"IEMobile[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"IE Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"MSIE (\\\\d+[\\\\.\\\\d]+).*XBLWP7\",\n \"name\": \"IE Mobile\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"MSIE.*Trident/4.0\",\n \"name\": \"Internet Explorer\",\n \"version\": \"8.0\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"MSIE.*Trident/5.0\",\n \"name\": \"Internet Explorer\",\n \"version\": \"9.0\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"MSIE.*Trident/6.0\",\n \"name\": \"Internet Explorer\",\n \"version\": \"10.0\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"Trident/[78].0\",\n \"name\": \"Internet Explorer\",\n \"version\": \"11.0\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"MSIE (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Internet Explorer\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"IE[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Internet Explorer\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Trident\"\n }\n },\n {\n \"regex\": \"Kindle/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Kindle Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"K-meleon(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"K-meleon\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"Links(?: \\\\((\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Links\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Text-based\"\n }\n },\n {\n \"regex\": \"LG Browser(?:/(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"LG Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"LuaKit(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"LuaKit\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"OmniWeb(?:/[v]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"OmniWeb\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Phoenix(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Phoenix\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"NetFrontLifeBrowser(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NetFront Life\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"NetFront\"\n }\n },\n {\n \"regex\": \"NetFront(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NetFront\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"NetFront\"\n }\n },\n {\n \"regex\": \"PLAYSTATION|NINTENDO 3|AppleWebKit.+ N[XF]/\\\\d+\\\\.\\\\d+\\\\.\\\\d+\",\n \"name\": \"NetFront\",\n \"version\": \"\"\n },\n {\n \"regex\": \"NetPositive(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NetPositive\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Odyssey Web Browser(?:.*OWB/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Odyssey Web Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"OffByOne\",\n \"name\": \"Off By One\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:Oregano|OreganMediaBrowser)(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Oregano\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Polaris|Embider)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Polaris\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"SEMC-Browser(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"SEMC-Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Shiira(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Shiira\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Skyfire(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Skyfire\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Snowshoe(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Snowshoe\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Sunrise(?:Browser)?(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Sunrise\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"SuperBird(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"SuperBird\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Vision-Browser(?:/(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"Vision Mobile Browser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"WeTab-Browser\",\n \"name\": \"WeTab Browser\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Xiino(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Xiino\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"BlackBerry|PlayBook|BB10\",\n \"name\": \"BlackBerry Browser\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Android\",\n \"name\": \"Android Browser\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Coast(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Coast\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Surf(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"surf\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"(?:(?:iPod|iPad|iPhone).+Version|MobileSafari)/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Mobile Safari\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"(?:Version/(\\\\d+[\\\\.\\\\d]+).*)?Mobile.*Safari/\",\n \"name\": \"Mobile Safari\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"(?:iPod|iPhone|iPad)\",\n \"name\": \"Mobile Safari\",\n \"version\": \"\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Version/(\\\\d+[\\\\.\\\\d]+).*Safari/|Safari/?\\\\d+\",\n \"name\": \"Safari\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n },\n {\n \"regex\": \"Dorado WAP-Browser[/ ](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Dorado\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"NetSurf(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NetSurf\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"NetSurf\"\n }\n },\n {\n \"regex\": \"Uzbl\",\n \"name\": \"Uzbl\",\n \"version\": \"\"\n },\n {\n \"regex\": \"SimpleBrowser\",\n \"name\": \"SimpleBrowser\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Zvu(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Zvu\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"Gecko\"\n }\n },\n {\n \"regex\": \"GOGGalaxyClient/(\\\\d+[\\\\.\\\\d]+)?\",\n \"name\": \"GOG Galaxy\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"WAP Browser/MAUI|(?:\\\\w+)?Maui Wap Browser|MAUI[- ]Browser\",\n \"name\": \"MAUI WAP Browser\",\n \"version\": \"\"\n },\n {\n \"regex\": \"SP%20Browser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"SP Browser\",\n \"version\": \"$1\",\n \"engine\": {\n \"default\": \"WebKit\"\n }\n }\n]\n", "[\n {\n \"regex\": \"NetFront\",\n \"name\": \"NetFront\"\n },\n {\n \"regex\": \"Edge\",\n \"name\": \"Edge\"\n },\n {\n \"regex\": \"Trident\",\n \"name\": \"Trident\"\n },\n {\n \"regex\": \"(?<!SmartHu)Blink\",\n \"name\": \"Blink\"\n },\n {\n \"regex\": \"(?:Apple)?WebKit\",\n \"name\": \"WebKit\"\n },\n {\n \"regex\": \"Presto\",\n \"name\": \"Presto\"\n },\n {\n \"regex\": \"Goanna\",\n \"name\": \"Goanna\"\n },\n {\n \"regex\": \"(?<!like )Gecko\",\n \"name\": \"Gecko\"\n },\n {\n \"regex\": \"KHTML\",\n \"name\": \"KHTML\"\n },\n {\n \"regex\": \"NetSurf\",\n \"name\": \"NetSurf\"\n },\n {\n \"regex\": \"Servo\",\n \"name\": \"Servo\"\n },\n {\n \"regex\": \"Goanna\",\n \"name\": \"Goanna\"\n },\n {\n \"regex\": \"Ekioh(?:Flow)?\",\n \"name\": \"EkiohFlow\"\n }\n]\n", "{\n \"1B\": \"115 Browser\",\n \"2B\": \"2345 Browser\",\n \"36\": \"360 Phone Browser\",\n \"3B\": \"360 Browser\",\n \"7B\": \"7654 Browser\",\n \"AA\": \"Avant Browser\",\n \"AB\": \"ABrowse\",\n \"AF\": \"ANT Fresco\",\n \"AG\": \"ANTGalio\",\n \"AL\": \"Aloha Browser\",\n \"AH\": \"Aloha Browser Lite\",\n \"AM\": \"Amaya\",\n \"AO\": \"Amigo\",\n \"AN\": \"Android Browser\",\n \"AE\": \"AOL Desktop\",\n \"AD\": \"AOL Shield\",\n \"AR\": \"Arora\",\n \"AX\": \"Arctic Fox\",\n \"AV\": \"Amiga Voyager\",\n \"AW\": \"Amiga Aweb\",\n \"A0\": \"Atom\",\n \"AT\": \"Atomic Web Browser\",\n \"AS\": \"Avast Secure Browser\",\n \"VG\": \"AVG Secure Browser\",\n \"AC\": \"Avira Scout\",\n \"A1\": \"AwoX\",\n \"BA\": \"Beaker Browser\",\n \"BM\": \"Beamrise\",\n \"BB\": \"BlackBerry Browser\",\n \"BD\": \"Baidu Browser\",\n \"BS\": \"Baidu Spark\",\n \"BI\": \"Basilisk\",\n \"BE\": \"Beonex\",\n \"BH\": \"BlackHawk\",\n \"BJ\": \"Bunjalloo\",\n \"BL\": \"B-Line\",\n \"BU\": \"Blue Browser\",\n \"BN\": \"Borealis Navigator\",\n \"BR\": \"Brave\",\n \"BK\": \"BriskBard\",\n \"BX\": \"BrowseX\",\n \"BZ\": \"Browzar\",\n \"BY\": \"Biyubi\",\n \"BF\": \"Byffox\",\n \"CA\": \"Camino\",\n \"CL\": \"CCleaner\",\n \"C6\": \"Chedot\",\n \"C0\": \"Centaury\",\n \"CC\": \"Coc Coc\",\n \"C4\": \"CoolBrowser\",\n \"C2\": \"Colibri\",\n \"CD\": \"Comodo Dragon\",\n \"C1\": \"Coast\",\n \"CX\": \"Charon\",\n \"CE\": \"CM Browser\",\n \"CF\": \"Chrome Frame\",\n \"HC\": \"Headless Chrome\",\n \"CH\": \"Chrome\",\n \"CI\": \"Chrome Mobile iOS\",\n \"CK\": \"Conkeror\",\n \"CM\": \"Chrome Mobile\",\n \"CN\": \"CoolNovo\",\n \"CO\": \"CometBird\",\n \"CB\": \"COS Browser\",\n \"CW\": \"Cornowser\",\n \"C3\": \"Chim Lac\",\n \"CP\": \"ChromePlus\",\n \"CR\": \"Chromium\",\n \"C5\": \"Chromium GOST\",\n \"CY\": \"Cyberfox\",\n \"CS\": \"Cheshire\",\n \"CT\": \"Crusta\",\n \"CG\": \"Craving Explorer\",\n \"CZ\": \"Crazy Browser\",\n \"CU\": \"Cunaguaro\",\n \"CV\": \"Chrome Webview\",\n \"DB\": \"dbrowser\",\n \"DE\": \"Deepnet Explorer\",\n \"DG\": \"deg-degan\",\n \"DA\": \"Deledao\",\n \"DT\": \"Delta Browser\",\n \"DS\": \"DeskBrowse\",\n \"DF\": \"Dolphin\",\n \"DO\": \"Dorado\",\n \"DR\": \"Dot Browser\",\n \"DL\": \"Dooble\",\n \"DI\": \"Dillo\",\n \"DD\": \"DuckDuckGo Privacy Browser\",\n \"EC\": \"Ecosia\",\n \"EI\": \"Epic\",\n \"EL\": \"Elinks\",\n \"EB\": \"Element Browser\",\n \"EE\": \"Elements Browser\",\n \"EZ\": \"eZ Browser\",\n \"EU\": \"EUI Browser\",\n \"EP\": \"GNOME Web\",\n \"ES\": \"Espial TV Browser\",\n \"FA\": \"Falkon\",\n \"FX\": \"Faux Browser\",\n \"F1\": \"Firefox Mobile iOS\",\n \"FB\": \"Firebird\",\n \"FD\": \"Fluid\",\n \"FE\": \"Fennec\",\n \"FF\": \"Firefox\",\n \"FK\": \"Firefox Focus\",\n \"FY\": \"Firefox Reality\",\n \"FR\": \"Firefox Rocket\",\n \"FL\": \"Flock\",\n \"FO\": \"Flow\",\n \"FM\": \"Firefox Mobile\",\n \"FW\": \"Fireweb\",\n \"FN\": \"Fireweb Navigator\",\n \"FS\": \"Flast\",\n \"FU\": \"FreeU\",\n \"GA\": \"Galeon\",\n \"GH\": \"Ghostery Privacy Browser\",\n \"GI\": \"GinxDroid Browser\",\n \"GB\": \"Glass Browser\",\n \"GE\": \"Google Earth\",\n \"GO\": \"GOG Galaxy\",\n \"HS\": \"HasBrowser\",\n \"HA\": \"Hawk Turbo Browser\",\n \"HE\": \"Helio\",\n \"HO\": \"hola! Browser\",\n \"HJ\": \"HotJava\",\n \"HU\": \"Huawei Browser\",\n \"IB\": \"IBrowse\",\n \"IC\": \"iCab\",\n \"I2\": \"iCab Mobile\",\n \"I1\": \"Iridium\",\n \"I3\": \"Iron Mobile\",\n \"I4\": \"IceCat\",\n \"ID\": \"IceDragon\",\n \"IV\": \"Isivioo\",\n \"IW\": \"Iceweasel\",\n \"IE\": \"Internet Explorer\",\n \"IM\": \"IE Mobile\",\n \"IR\": \"Iron\",\n \"JB\": \"Japan Browser\",\n \"JS\": \"Jasmine\",\n \"JA\": \"JavaFX\",\n \"JI\": \"Jig Browser\",\n \"JP\": \"Jig Browser Plus\",\n \"JO\": \"Jio Browser\",\n \"KB\": \"K.Browser\",\n \"KI\": \"Kindle Browser\",\n \"KM\": \"K-meleon\",\n \"KO\": \"Konqueror\",\n \"KP\": \"Kapiko\",\n \"KN\": \"Kinza\",\n \"KW\": \"Kiwi\",\n \"KD\": \"Kode Browser\",\n \"KY\": \"Kylo\",\n \"KZ\": \"Kazehakase\",\n \"LB\": \"Cheetah Browser\",\n \"LF\": \"LieBaoFast\",\n \"LG\": \"LG Browser\",\n \"LH\": \"Light\",\n \"LI\": \"Links\",\n \"IF\": \"Lolifox\",\n \"LO\": \"Lovense Browser\",\n \"LU\": \"LuaKit\",\n \"LL\": \"Lulumi\",\n \"LS\": \"Lunascape\",\n \"LN\": \"Lunascape Lite\",\n \"LX\": \"Lynx\",\n \"M1\": \"mCent\",\n \"MB\": \"MicroB\",\n \"MC\": \"NCSA Mosaic\",\n \"MZ\": \"Meizu Browser\",\n \"ME\": \"Mercury\",\n \"MF\": \"Mobile Safari\",\n \"MI\": \"Midori\",\n \"MO\": \"Mobicip\",\n \"MU\": \"MIUI Browser\",\n \"MS\": \"Mobile Silk\",\n \"MN\": \"Minimo\",\n \"MT\": \"Mint Browser\",\n \"MX\": \"Maxthon\",\n \"NM\": \"MxNitro\",\n \"MY\": \"Mypal\",\n \"MR\": \"Monument Browser\",\n \"MW\": \"MAUI WAP Browser\",\n \"NW\": \"Navigateur Web\",\n \"NR\": \"NFS Browser\",\n \"NB\": \"Nokia Browser\",\n \"NO\": \"Nokia OSS Browser\",\n \"NV\": \"Nokia Ovi Browser\",\n \"NX\": \"Nox Browser\",\n \"NE\": \"NetSurf\",\n \"NF\": \"NetFront\",\n \"NL\": \"NetFront Life\",\n \"NP\": \"NetPositive\",\n \"NS\": \"Netscape\",\n \"NT\": \"NTENT Browser\",\n \"OC\": \"Oculus Browser\",\n \"O1\": \"Opera Mini iOS\",\n \"OB\": \"Obigo\",\n \"O2\": \"Odin\",\n \"H2\": \"OceanHero\",\n \"OD\": \"Odyssey Web Browser\",\n \"OF\": \"Off By One\",\n \"HH\": \"OhHai Browser\",\n \"OE\": \"ONE Browser\",\n \"OX\": \"Opera GX\",\n \"OG\": \"Opera Neon\",\n \"OH\": \"Opera Devices\",\n \"OI\": \"Opera Mini\",\n \"OM\": \"Opera Mobile\",\n \"OP\": \"Opera\",\n \"ON\": \"Opera Next\",\n \"OO\": \"Opera Touch\",\n \"OA\": \"Orca\",\n \"OS\": \"Ordissimo\",\n \"OR\": \"Oregano\",\n \"O0\": \"Origin In-Game Overlay\",\n \"OY\": \"Origyn Web Browser\",\n \"OV\": \"Openwave Mobile Browser\",\n \"OW\": \"OmniWeb\",\n \"OT\": \"Otter Browser\",\n \"PL\": \"Palm Blazer\",\n \"PM\": \"Pale Moon\",\n \"PY\": \"Polypane\",\n \"PP\": \"Oppo Browser\",\n \"PR\": \"Palm Pre\",\n \"PU\": \"Puffin\",\n \"PW\": \"Palm WebPro\",\n \"PA\": \"Palmscape\",\n \"PE\": \"Perfect Browser\",\n \"PH\": \"Phantom Browser\",\n \"PX\": \"Phoenix\",\n \"PB\": \"Phoenix Browser\",\n \"PF\": \"PlayFree Browser\",\n \"PO\": \"Polaris\",\n \"PT\": \"Polarity\",\n \"LY\": \"PolyBrowser\",\n \"PI\": \"PrivacyWall\",\n \"PS\": \"Microsoft Edge\",\n \"QA\": \"Qazweb\",\n \"Q2\": \"QQ Browser Lite\",\n \"Q1\": \"QQ Browser Mini\",\n \"QQ\": \"QQ Browser\",\n \"QT\": \"Qutebrowser\",\n \"QU\": \"Quark\",\n \"QZ\": \"QupZilla\",\n \"QM\": \"Qwant Mobile\",\n \"QW\": \"QtWebEngine\",\n \"RE\": \"Realme Browser\",\n \"RK\": \"Rekonq\",\n \"RM\": \"RockMelt\",\n \"SB\": \"Samsung Browser\",\n \"SA\": \"Sailfish Browser\",\n \"S8\": \"Seewo Browser\",\n \"SC\": \"SEMC-Browser\",\n \"SE\": \"Sogou Explorer\",\n \"SF\": \"Safari\",\n \"S5\": \"Safe Exam Browser\",\n \"SW\": \"SalamWeb\",\n \"SV\": \"SFive\",\n \"SH\": \"Shiira\",\n \"S1\": \"SimpleBrowser\",\n \"SY\": \"Sizzy\",\n \"SK\": \"Skyfire\",\n \"SS\": \"Seraphic Sraf\",\n \"SL\": \"Sleipnir\",\n \"S6\": \"Slimjet\",\n \"S7\": \"SP Browser\",\n \"7S\": \"7Star\",\n \"LE\": \"Smart Lenovo Browser\",\n \"OZ\": \"Smooz\",\n \"SN\": \"Snowshoe\",\n \"SO\": \"Sogou Mobile Browser\",\n \"S2\": \"Splash\",\n \"SI\": \"Sputnik Browser\",\n \"SR\": \"Sunrise\",\n \"SP\": \"SuperBird\",\n \"SU\": \"Super Fast Browser\",\n \"S3\": \"surf\",\n \"SG\": \"Stargon\",\n \"S0\": \"START Internet Browser\",\n \"S4\": \"Steam In-Game Overlay\",\n \"ST\": \"Streamy\",\n \"SX\": \"Swiftfox\",\n \"SZ\": \"Seznam Browser\",\n \"TR\": \"T-Browser\",\n \"TO\": \"t-online.de Browser\",\n \"TA\": \"Tao Browser\",\n \"TF\": \"TenFourFox\",\n \"TB\": \"Tenta Browser\",\n \"TZ\": \"Tizen Browser\",\n \"TU\": \"Tungsten\",\n \"TG\": \"ToGate\",\n \"TS\": \"TweakStyle\",\n \"TV\": \"TV Bro\",\n \"UB\": \"UBrowser\",\n \"UC\": \"UC Browser\",\n \"UH\": \"UC Browser HD\",\n \"UM\": \"UC Browser Mini\",\n \"UT\": \"UC Browser Turbo\",\n \"UR\": \"UR Browser\",\n \"UZ\": \"Uzbl\",\n \"VE\": \"Venus Browser\",\n \"VI\": \"Vivaldi\",\n \"VV\": \"vivo Browser\",\n \"VB\": \"Vision Mobile Browser\",\n \"VM\": \"VMware AirWatch\",\n \"WI\": \"Wear Internet Browser\",\n \"WP\": \"Web Explorer\",\n \"WE\": \"WebPositive\",\n \"WF\": \"Waterfox\",\n \"WH\": \"Whale Browser\",\n \"WO\": \"wOSBrowser\",\n \"WT\": \"WeTab Browser\",\n \"YJ\": \"Yahoo! Japan Browser\",\n \"YA\": \"Yandex Browser\",\n \"YL\": \"Yandex Browser Lite\",\n \"YN\": \"Yaani Browser\",\n \"YB\": \"Yolo Browser\",\n \"XS\": \"xStand\",\n \"XI\": \"Xiino\",\n \"XV\": \"Xvast\",\n \"ZE\": \"Zetakey\",\n \"ZV\": \"Zvu\"\n}\n", "[\n \"36\", \"OC\", \"PU\", \"SK\", \"MF\", \"OI\", \"OM\", \"DD\", \"DB\",\n \"ST\", \"BL\", \"IV\", \"FM\", \"C1\", \"C4\", \"SA\", \"SB\", \"FR\",\n \"WP\", \"HA\", \"NX\", \"HU\", \"VV\", \"RE\", \"CB\", \"MZ\", \"UM\",\n \"FK\", \"FX\", \"WI\", \"MN\", \"M1\", \"AH\", \"SU\", \"EU\", \"EZ\",\n \"UT\", \"DT\", \"S0\", \"QU\", \"YN\", \"JB\", \"GH\", \"PI\", \"SG\",\n \"KD\", \"PE\", \"UH\", \"S7\", \"CW\", \"OZ\", \"GI\", \"VE\"\n]\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst version_1 = require(\"../../utils/version\");\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nconst browsers_json_1 = __importDefault(require(\"../../fixtures/regexes/client/browsers.json\"));\nconst browser_engine_json_1 = __importDefault(require(\"../../fixtures/regexes/client/browser_engine.json\"));\nconst available_browsers_json_1 = __importDefault(require(\"./fixtures/available-browsers.json\"));\nconst mobile_only_browsers_json_1 = __importDefault(require(\"./fixtures/mobile-only-browsers.json\"));\nclass BrowserParser {\n constructor(options) {\n this.options = {\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n name: \"\",\n version: \"\",\n engine: \"\",\n engineVersion: \"\"\n };\n for (const browser of browsers_json_1.default) {\n const match = user_agent_1.userAgentParser(browser.regex, userAgent);\n if (!match)\n continue;\n const vrpVersion = variable_replacement_1.variableReplacement(browser.version, match);\n const version = version_1.formatVersion(vrpVersion, this.options.versionTruncation);\n const shortVersion = version && parseFloat(version_1.formatVersion(vrpVersion, 1)) || \"\";\n if (browser.engine) {\n result.engine = browser.engine.default;\n if (browser.engine && browser.engine.versions && shortVersion) {\n const sortedEngineVersions = Object.entries(browser.engine.versions).sort((a, b) => {\n return parseFloat(a[0]) > parseFloat(b[0]) ? 1 : -1;\n });\n for (const [versionThreshold, engineByVersion] of sortedEngineVersions) {\n if (parseFloat(versionThreshold) <= shortVersion) {\n result.engine = engineByVersion || \"\";\n }\n }\n }\n }\n result.type = \"browser\";\n result.name = variable_replacement_1.variableReplacement(browser.name, match);\n result.version = version;\n break;\n }\n if (!result.engine) {\n for (const browserEngine of browser_engine_json_1.default) {\n let match = null;\n try {\n match = RegExp(browserEngine.regex, \"i\").exec(userAgent);\n }\n catch (_a) {\n // TODO: find out why it fails in some browsers\n }\n if (!match)\n continue;\n result.engine = browserEngine.name;\n break;\n }\n }\n result.engineVersion = version_1.formatVersion(version_1.parseBrowserEngineVersion(userAgent, result.engine), this.options.versionTruncation);\n return result;\n };\n this.options = Object.assign(Object.assign({}, this.options), options);\n }\n}\nexports.default = BrowserParser;\nBrowserParser.getBrowserShortName = (browserName) => {\n for (const [shortName, name] of Object.entries(available_browsers_json_1.default)) {\n if (name === browserName) {\n return shortName;\n }\n }\n return \"\";\n};\nBrowserParser.isMobileOnlyBrowser = (browserName) => {\n return mobile_only_browsers_json_1.default.includes(BrowserParser.getBrowserShortName(browserName));\n};\n", "[\n {\n \"regex\": \"AndroidDownloadManager(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"AndroidDownloadManager\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Apple)?News(?:[ /][\\\\d\\\\.]+)? Version(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"Apple News\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"bPod\",\n \"name\": \"bPod\",\n \"version\": \"\"\n },\n {\n \"regex\": \"MessengerLiteForiOS.(?:FBAV)(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"Facebook Messenger Lite\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:MessengerForiOS|MESSENGER).(?:FBAV)(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"Facebook Messenger\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:FBAV|com.facebook.katana)(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"Facebook\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:FBAN|FBSV|FBID|FBBV)/\",\n \"name\": \"Facebook\",\n \"version\": \"\"\n },\n {\n \"regex\": \"FeedR(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"FeedR\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"com.google.android.apps.searchlite\",\n \"name\": \"Google Go\",\n \"version\": \"\"\n },\n {\n \"regex\": \"com.google.android.apps.magazines\",\n \"name\": \"Google Play Newsstand\",\n \"version\": \"\"\n },\n {\n \"regex\": \"com.google.GooglePlus\",\n \"name\": \"Google Plus\",\n \"version\": \"\"\n },\n {\n \"regex\": \"MicroMessenger/([^; ]+)\",\n \"name\": \"WeChat\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"WeChatShareExtensionNew/([\\\\d\\\\.]+)\",\n \"name\": \"WeChat Share Extension\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"DingTalk/([0-9\\\\.]+)\",\n \"name\": \"DingTalk\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \".*__weibo__([0-9\\\\.]+)__\",\n \"name\": \"Sina Weibo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Pinterest(?: for (?:Android|iOS))?(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"Pinterest\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Podcatcher Deluxe\",\n \"name\": \"Podcatcher Deluxe\",\n \"version\": \"\"\n },\n {\n \"regex\": \"com.google.android.youtube(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"YouTube\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"([^/]+)/(\\\\d+(?:\\\\.\\\\d+)+) \\\\((?:iPhone|iPad); iOS [0-9\\\\.]+; Scale/[0-9\\\\.]+\\\\)\",\n \"name\": \"$1\",\n \"version\": \"$2\"\n },\n {\n \"regex\": \"WhatsApp(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"WhatsApp\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Line(?:[ /]([\\\\d\\\\.]+))\",\n \"name\": \"Line\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Instacast(?:HD)?/(\\\\d\\\\.[\\\\d\\\\.abc]+) CFNetwork/([\\\\d\\\\.]+) Darwin/([\\\\d\\\\.]+)\",\n \"name\": \"Instacast\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Podcasts/([\\\\d\\\\.]+)\",\n \"name\": \"Podcasts\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Pocket Casts(?:, (?:Android|iOS) v([\\\\d\\\\.]+))?\",\n \"name\": \"Pocket Casts\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Podcat/([\\\\d\\\\.]+)\",\n \"name\": \"Podcat\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"BeyondPod\",\n \"name\": \"BeyondPod\",\n \"version\": null\n },\n {\n \"regex\": \"AntennaPod/?([\\\\d\\\\.]+)?\",\n \"name\": \"AntennaPod\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Overcast/([\\\\d\\\\.]+)\",\n \"name\": \"Overcast\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:CastBox|fm.castbox.audiobook.radio.podcast)/?([\\\\d\\\\.]+)?\",\n \"name\": \"CastBox\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Player FM\",\n \"name\": \"Player FM\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Podkicker(?: Pro)?/([\\\\d\\\\.]+)\",\n \"name\": \"Podkicker\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"PodcastRepublic/([\\\\d\\\\.]+)\",\n \"name\": \"Podcast Republic\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Castro/(\\\\d+)\",\n \"name\": \"Castro\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Castro 2 ([\\\\d\\\\.]+)/[\\\\d]+ Like iTunes\",\n \"name\": \"Castro 2\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Castro 2\",\n \"name\": \"Castro 2\",\n \"version\": \"\"\n },\n {\n \"regex\": \"DoggCatcher\",\n \"name\": \"DoggCatcher\",\n \"version\": null\n },\n {\n \"regex\": \"PodcastAddict/v([\\\\d]+)\",\n \"name\": \"Podcast & Radio Addict\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Podcat(?:%202)?/([\\\\d]+) CFNetwork\",\n \"name\": \"Podcat\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"iCatcher[^\\\\d]+([\\\\d\\\\.]+)\",\n \"name\": \"iCatcher\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"YelpApp/([\\\\d\\\\.]+)\",\n \"name\": \"Yelp Mobile\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"jp.co.yahoo.android.yjtop/([\\\\d\\\\.]+)\",\n \"name\": \"Yahoo! Japan\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RSSRadio/([\\\\d]+)?\",\n \"name\": \"RSSRadio\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"SogouSearch Android[\\\\d\\\\.]+ version([\\\\d\\\\.]+)?\",\n \"name\": \"SogouSearch App\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"NewsArticle/([\\\\d\\\\.]+)?\",\n \"name\": \"NewsArticle App\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"tieba/([\\\\d\\\\.]+)?\",\n \"name\": \"tieba\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"com\\\\.douban\\\\.group/([\\\\d\\\\.]+)?\",\n \"name\": \"douban App\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"BingWeb/([\\\\d\\\\.]+)?\",\n \"name\": \"BingWebApp\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:com.google.GoogleMobile|GSA)/([\\\\d\\\\.]+)?\",\n \"name\": \"Google Search App\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Flipboard/([\\\\d\\\\.]+)?\",\n \"name\": \"Flipboard App\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Instagram[ /]([\\\\d\\\\.]+)?\",\n \"name\": \"Instagram App\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"baiduboxapp/([\\\\d\\\\.]+)?\",\n \"name\": \"Baidu Box App\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Crosswalk(?!.*(?:Streamy|QwantMobile))/([\\\\d\\\\.]+)?\",\n \"name\": \"CrosswalkApp\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Twitter for iPhone[/]?([\\\\d\\\\.]+)?\",\n \"name\": \"Twitter\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Twitter/([\\\\d\\\\.]+)\",\n \"name\": \"Twitter\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"TwitterAndroid[/]?([\\\\d\\\\.]+)?\",\n \"name\": \"Twitter\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"TopBuzz/([\\\\d\\\\.]+)\",\n \"name\": \"TopBuzz\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Snapchat/([\\\\d\\\\.]+)\",\n \"name\": \"Snapchat\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UnityPlayer/([\\\\d\\\\.]+)\",\n \"name\": \"UnityPlayer\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"UCURSOS/v([\\\\d\\\\.]+)\",\n \"name\": \"U-Cursos\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"HeyTapBrowser/([\\\\d\\\\.]+)\",\n \"name\": \"HeyTapBrowser\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RobloxApp/([\\\\d\\\\.]+)\",\n \"name\": \"Roblox\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Viber/([\\\\d\\\\.]+)\",\n \"name\": \"Viber\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Siri/1\",\n \"name\": \"Siri\",\n \"version\": \"1.0\"\n },\n {\n \"regex\": \"LinkedIn/([\\\\d\\\\.]+)\",\n \"name\": \"LinkedIn\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Instapaper/([\\\\d\\\\.]+)\",\n \"name\": \"Instapaper\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Keeper/([\\\\d\\\\.]+)\",\n \"name\": \"Keeper Password Manager\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Skyeng Teachers/([\\\\d\\\\.]+)\",\n \"name\": \"Skyeng Teachers\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Kik/([\\\\d\\\\.]+) \\\\(Android\",\n \"name\": \"Kik\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Procast/?([\\\\d\\\\.]+)?\",\n \"name\": \"Procast\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"DeviantArt/([\\\\d\\\\.]+)\",\n \"name\": \"DeviantArt\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Discord/([\\\\d\\\\.]+)\",\n \"name\": \"Discord\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Covenant%20Eyes/([\\\\d\\\\.]+)\",\n \"name\": \"Covenant Eyes\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"HP%20Smart/([\\\\d\\\\.]+)\",\n \"name\": \"HP Smart\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Bitsboard/([\\\\d\\\\.]+)\",\n \"name\": \"Bitsboard\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Betbull/([\\\\d\\\\.]+)\",\n \"name\": \"BetBull\",\n \"version\": \"\"\n },\n {\n \"regex\": \"U-Cursos/([\\\\d\\\\.]+)\",\n \"name\": \"U-Cursos\",\n \"version\": \"\"\n },\n {\n \"regex\": \"1PasswordThumbs/([\\\\d\\\\.]+)\",\n \"name\": \"1Password\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Microsoft Office )?(Access|Excel|OneDrive for Business|OneNote|PowerPoint|Project|Publisher|Visio|Word)[ /]([\\\\d\\\\.]+)\",\n \"name\": \"Microsoft Office $1\",\n \"version\": \"$2\"\n },\n {\n \"regex\": \"OneDriveiOSApp/([\\\\d\\\\.]+)\",\n \"name\": \"Microsoft OneDrive\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Microsoft Office Mobile/([\\\\d\\\\.]+)\",\n \"name\": \"Microsoft Office Mobile\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"OC/([\\\\d\\\\.]+) \\\\(Skype for Business\\\\)\",\n \"name\": \"Skype for Business\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"TikTok[/ ](\\\\d+\\\\.(?:[\\\\.\\\\d]+))?\",\n \"name\": \"TikTok\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"NAVER/(\\\\d+[\\\\.\\\\d]+) CFNetwork\",\n \"name\": \"Naver\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Copied/(\\\\d+[\\\\.\\\\d]+) CFNetwork\",\n \"name\": \"Copied\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Pic%20Collage/(\\\\d+[\\\\.\\\\d]+) CFNetwork\",\n \"name\": \"Pic Collage\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Papers/(\\\\d+[\\\\.\\\\d]+) CFNetwork\",\n \"name\": \"Papers\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RoboForm/(\\\\d+[\\\\.\\\\d]+) CFNetwork\",\n \"name\": \"RoboForm\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Slack/(\\\\d+[\\\\.\\\\d]+) CFNetwork\",\n \"name\": \"Slack\",\n \"version\": \"\"\n },\n {\n \"regex\": \"KAKAOTALK (\\\\d+\\\\.(?:[\\\\.\\\\d]+))?\",\n \"name\": \"KakaoTalk\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"ShopeeVN/([\\\\d\\\\.]+)\",\n \"name\": \"Shopee\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"SPORT1/([\\\\d\\\\.]+)\",\n \"name\": \"SPORT1\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Clovia/([\\\\d\\\\.]+)\",\n \"name\": \"Clovia\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"ShowMe/([\\\\d\\\\.]+)\",\n \"name\": \"ShowMe\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Wattpad/([\\\\d\\\\.]+)\",\n \"name\": \"Wattpad\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"WSJ/([\\\\d\\\\.]+)\",\n \"name\": \"The Wall Street Journal\",\n \"version\": \"\"\n },\n {\n \"regex\": \"WH%20Questions/([\\\\d\\\\.]+)\",\n \"name\": \"WH Questions\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"whisper/([\\\\d\\\\.]+)\",\n \"name\": \"Whisper\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Opal/([\\\\d\\\\.]+)\",\n \"name\": \"Opal Travel\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Zalo/([\\\\d\\\\.]+)\",\n \"name\": \"Zalo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Yandex/([\\\\d\\\\.]+)\",\n \"name\": \"Yandex\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Zoho%20Chat/([\\\\d\\\\.]+)\",\n \"name\": \"Zoho Chat\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Thunder/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Thunder\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"CGNBrowser/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"CGN\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Podbean/.+App (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Podbean\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AlexaMediaPlayer/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Alexa Media Player\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"TuneIn Radio Pro(?:[^/]+)?/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"TuneIn Radio Pro\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"TuneIn Radio(?:[^/]+)?/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"TuneIn Radio\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Podcaster/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Podcaster\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Swoot/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Swoot\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RadioPublic/android-(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"RadioPublic\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Podimo/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Podimo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"com.evolve.podcast/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Evolve Podcast\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \" Rocket.Chat\\\\+?/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Rocket Chat\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"^Pandora Audio.+Android\",\n \"name\": \"Pandora\",\n \"version\": \"\"\n },\n {\n \"regex\": \"^NPROneAndroid\",\n \"name\": \"NPR One\",\n \"version\": \"\"\n },\n {\n \"regex\": \"^WirtschaftsWoche-iOS-(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Wirtschafts Woche\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"^Outlook-iOS/.+\\\\((\\\\d+[\\\\.\\\\d]+)\\\\)$\",\n \"name\": \"Microsoft Outlook\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"^TVirl/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"TVirl\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"2?chMate/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"ChMate\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"2tch/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"2tch\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Ciisaa/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Ciisaa\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"BB2C (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"BB2C\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"twinkle/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"twinkle\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"JaneStyle_iOS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"JaneStyle\",\n \"version\": \"$1\"\n }\n]\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst mobile_apps_json_1 = __importDefault(require(\"../../fixtures/regexes/client/mobile_apps.json\"));\nconst version_1 = require(\"../../utils/version\");\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass MobileAppParser {\n constructor(options) {\n this.options = {\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n name: \"\",\n version: \"\"\n };\n for (const mobileApp of mobile_apps_json_1.default) {\n const match = user_agent_1.userAgentParser(mobileApp.regex, userAgent);\n if (!match)\n continue;\n result.type = \"mobile app\";\n result.name = variable_replacement_1.variableReplacement(mobileApp.name, match);\n result.version = version_1.formatVersion(variable_replacement_1.variableReplacement(mobileApp.version, match), this.options.versionTruncation);\n break;\n }\n return result;\n };\n this.options = Object.assign(Object.assign({}, this.options), options);\n }\n}\nexports.default = MobileAppParser;\n", "[\n {\n \"regex\": \"Akregator(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Akregator\",\n \"version\": \"$1\",\n \"url\": \"http://userbase.kde.org/Akregator\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"Apple-PubSub(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Apple PubSub\",\n \"version\": \"$1\",\n \"url\": \"https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/pubsub.1.html\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"BashPodder\",\n \"name\": \"BashPodder\",\n \"version\": \"\",\n \"url\": \"http://lincgeek.org/bashpodder/\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"Breaker/v([\\\\d\\\\.]+)\",\n \"name\": \"Breaker\",\n \"version\": \"$1\",\n \"url\": \"https://www.breaker.audio/\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"Downcast/([\\\\d\\\\.]+)\",\n \"name\": \"Downcast\",\n \"version\": \"$1\",\n \"url\": \"http://downcastapp.com/\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"FeedDemon(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"FeedDemon\",\n \"version\": \"$1\",\n \"url\": \"http://www.feeddemon.com/\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"Feeddler(?:RSS|PRO)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Feeddler RSS Reader\",\n \"version\": \"$1\",\n \"url\": \"http://www.chebinliu.com/projects/iphone/feeddler-rss-reader/\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"QuiteRSS(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"QuiteRSS\",\n \"version\": \"$1\",\n \"url\": \"https://quiterss.org\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"gPodder/([\\\\d\\\\.]+)\",\n \"name\": \"gPodder\",\n \"version\": \"$1\",\n \"url\": \"http://gpodder.org/\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"JetBrains Omea Reader(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"JetBrains Omea Reader\",\n \"version\": \"$1\",\n \"url\": \"http://www.jetbrains.com/omea/reader/\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"Liferea(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Liferea\",\n \"version\": \"$1\",\n \"url\": \"http://liferea.sf.net/\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"(?:NetNewsWire|Evergreen.+MacOS)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NetNewsWire\",\n \"version\": \"$1\",\n \"url\": \"http://netnewswireapp.com/\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"NewsBlur (?:iPhone|iPad) App(?: v(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NewsBlur Mobile App\",\n \"version\": \"$1\",\n \"url\": \"http://www.newsblur.com\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"NewsBlur(?:/(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"NewsBlur\",\n \"version\": \"$1\",\n \"url\": \"http://www.newsblur.com\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"newsbeuter(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Newsbeuter\",\n \"version\": \"$1\",\n \"url\": \"http://www.newsbeuter.org/\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"PritTorrent/([\\\\d\\\\.]+)\",\n \"name\": \"PritTorrent\",\n \"version\": \"$1\",\n \"url\": \"http://bitlove.org\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"Pulp[/ ](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Pulp\",\n \"version\": \"$1\",\n \"url\": \"http://www.acrylicapps.com/pulp/\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"ReadKit(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"ReadKit\",\n \"version\": \"$1\",\n \"url\": \"http://readkitapp.com/\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"Reeder[/ ](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Reeder\",\n \"version\": \"$1\",\n \"url\": \"http://reederapp.com/\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"RSSBandit(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"RSS Bandit\",\n \"version\": \"$1\",\n \"url\": \"http://www.rssbandit.org)\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"RSS Junkie(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"RSS Junkie\",\n \"version\": \"$1\",\n \"url\": \"https://play.google.com/store/apps/details?id=com.bitpowder.rssjunkie\",\n \"type\": \"Feed Reader App\"\n },\n {\n \"regex\": \"RSSOwl(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"RSSOwl\",\n \"version\": \"$1\",\n \"url\": \"http://www.rssowl.org/\",\n \"type\": \"Feed Reader\"\n },\n {\n \"regex\": \"Stringer\",\n \"name\": \"Stringer\",\n \"version\": \"\",\n \"url\": \"https://github.com/swanson/stringer\",\n \"type\": \"Feed Reader\"\n }\n]\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst feed_readers_json_1 = __importDefault(require(\"../../fixtures/regexes/client/feed_readers.json\"));\nconst version_1 = require(\"../../utils/version\");\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass FeedReaderParser {\n constructor(options) {\n this.options = {\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n name: \"\",\n version: \"\",\n url: \"\"\n };\n for (const feedReader of feed_readers_json_1.default) {\n const match = user_agent_1.userAgentParser(feedReader.regex, userAgent);\n if (!match)\n continue;\n result.type = \"feed reader\";\n result.name = variable_replacement_1.variableReplacement(feedReader.name, match);\n result.version = version_1.formatVersion(variable_replacement_1.variableReplacement(feedReader.version, match), this.options.versionTruncation);\n result.url = feedReader.url;\n break;\n }\n return result;\n };\n this.options = Object.assign(Object.assign({}, this.options), options);\n }\n}\nexports.default = FeedReaderParser;\n", "[\n {\n \"regex\": \"Wget(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Wget\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Guzzle(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Guzzle (PHP HTTP Client)\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:lib)?curl(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"curl\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"python-requests(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Python Requests\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Python-urllib(?:/?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Python urllib\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Java(?:/?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Java\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:perlclient|libwww-perl)(?:/?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Perl\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"okhttp/([\\\\d\\\\.]+)\",\n \"name\": \"OkHttp\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"HTTP_Request2(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"HTTP_Request2\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"HTTP_Request2(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"HTTP_Request2\",\n \"version\": \"$1\",\n \"url\": \"http://pear.php.net/package/http_request2\"\n },\n {\n \"regex\": \"Mechanize(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Mechanize\",\n \"version\": \"$1\",\n \"url\": \"http://github.com/sparklemotion/mechanize/\"\n },\n {\n \"regex\": \"aiohttp(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"aiohttp\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Google-HTTP-Java-Client(?:/(\\\\d+[\\\\.\\\\d\\\\w-]+))?\",\n \"name\": \"Google HTTP Java Client\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"WWW-Mechanize(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"WWW-Mechanize\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Faraday(?: v(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Faraday\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Go-http-client|Go )/?(?:(\\\\d+[\\\\.\\\\d]+))?(?: package http)?\",\n \"name\": \"Go-http-client\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"urlgrabber(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"urlgrabber (yum)\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"libdnf(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"libdnf\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"HTTPie(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"HTTPie\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"rest-client/(\\\\d+[\\\\.\\\\d]+).*ruby\",\n \"name\": \"REST Client for Ruby\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RestSharp/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"RestSharp\",\n \"version\": \"$1\",\n \"url\": \"http://restsharp.org/\"\n },\n {\n \"regex\": \"scalaj-http/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"ScalaJ HTTP\",\n \"version\": \"$1\",\n \"url\": \"https://github.com/scalaj/scalaj-http\"\n },\n {\n \"regex\": \"REST::Client/(\\\\d+)\",\n \"name\": \"Perl REST::Client\",\n \"version\": \"$1\",\n \"url\": \"https://metacpan.org/pod/REST::Client\"\n },\n {\n \"regex\": \"node-fetch/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Node Fetch\",\n \"version\": \"$1\",\n \"url\": \"https://github.com/node-fetch/node-fetch\"\n },\n {\n \"regex\": \"ReactorNetty/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"ReactorNetty\",\n \"version\": \"$1\",\n \"url\": \"https://github.com/reactor/reactor-netty\"\n },\n {\n \"regex\": \"PostmanRuntime(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Postman Desktop\",\n \"version\": \"$1\",\n \"url\": \"https://github.com/postmanlabs/postman-runtime\"\n },\n {\n \"regex\": \"Jakarta Commons-HttpClient/([\\\\.\\\\d]+)\",\n \"name\": \"Jakarta Commons HttpClient\",\n \"version\": \"$1\",\n \"url\": \"https://hc.apache.org/httpclient-3.x\"\n },\n {\n \"regex\": \"WinHttp.WinHttpRequest.+([\\\\.\\\\d]+)\",\n \"name\": \"WinHttp WinHttpRequest\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Embarcadero URI Client/([\\\\.\\\\d]+)\",\n \"name\": \"Embarcadero URI Client\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Mikrotik/([\\\\.\\\\d]+)\",\n \"name\": \"Mikrotik Fetch\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"GRequests(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"GRequests\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"akka-http/([\\\\.\\\\d]+)\",\n \"name\": \"Akka HTTP\",\n \"version\": \"$1\"\n }\n]\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst libraries_json_1 = __importDefault(require(\"../../fixtures/regexes/client/libraries.json\"));\nconst version_1 = require(\"../../utils/version\");\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass LibraryParser {\n constructor(options) {\n this.options = {\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n name: \"\",\n version: \"\",\n url: \"\"\n };\n for (const library of libraries_json_1.default) {\n const match = user_agent_1.userAgentParser(library.regex, userAgent);\n if (!match)\n continue;\n result.type = \"library\";\n result.name = variable_replacement_1.variableReplacement(library.name, match);\n result.version = version_1.formatVersion(variable_replacement_1.variableReplacement(library.version, match), this.options.versionTruncation);\n result.url = library.url || \"\";\n break;\n }\n return result;\n };\n this.options = Object.assign(Object.assign({}, this.options), options);\n }\n}\nexports.default = LibraryParser;\n", "[\n {\n \"regex\": \"Audacious(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"Audacious\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Banshee(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"Banshee\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Boxee(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"Boxee\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Clementine(?:[ /]([\\\\d\\\\.]+))?\",\n \"name\": \"Clementine\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Deezer(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"Deezer\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"iTunes(?:-iPhone|-iPad)?(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"iTunes\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"FlyCast(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"FlyCast\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"foobar2000(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"Foobar2000\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MediaMonkey(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"MediaMonkey\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Miro(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Miro\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"NexPlayer(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NexPlayer\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Nightingale(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"Nightingale\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"QuickTime(?:(?:(?:.+qtver=)|(?:(?: E-)?[\\\\./]))([\\\\d\\\\.]+))?\",\n \"name\": \"QuickTime\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Songbird(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"Songbird\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"SubStream(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"SubStream\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Sonos/([\\\\d\\\\.]+)?\",\n \"name\": \"SONOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Lib)?VLC(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"VLC\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Winamp(?:MPEG)?(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Winamp\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Windows-Media-Player|NSPlayer)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Windows Media Player\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"XBMC(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"XBMC\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Kodi(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"Kodi\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"stagefright(?:/([\\\\d\\\\.]+))?\",\n \"name\": \"Stagefright\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"GoogleChirp(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Google Podcasts\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Music Player Daemon (?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Music Player Daemon\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"mpv (?:(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"mpv\",\n \"version\": \"$1\"\n }\n]\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst mediaplayers_json_1 = __importDefault(require(\"../../fixtures/regexes/client/mediaplayers.json\"));\nconst version_1 = require(\"../../utils/version\");\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass MediaPlayerParser {\n constructor(options) {\n this.options = {\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n name: \"\",\n version: \"\"\n };\n for (const mediaPlayer of mediaplayers_json_1.default) {\n const match = user_agent_1.userAgentParser(mediaPlayer.regex, userAgent);\n if (!match)\n continue;\n result.type = \"media player\";\n result.name = variable_replacement_1.variableReplacement(mediaPlayer.name, match);\n result.version = version_1.formatVersion(variable_replacement_1.variableReplacement(mediaPlayer.version, match), this.options.versionTruncation);\n break;\n }\n return result;\n };\n this.options = Object.assign(Object.assign({}, this.options), options);\n }\n}\nexports.default = MediaPlayerParser;\n", "[\n {\n \"regex\": \"Outlook-Express(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Outlook Express\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Microsoft Outlook(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Microsoft Outlook\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Thunderbird|Icedove|Shredder)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Thunderbird\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Airmail(?: (\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Airmail\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Lotus-Notes(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Lotus Notes\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Barca(?:Pro)?(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Barca\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Postbox(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Postbox\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MailBar(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"MailBar\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"The Bat!(?: Voyager)?(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"The Bat!\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"DAVdroid(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"DAVdroid\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:SeaMonkey|Iceape)(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"SeaMonkey\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Live5ch/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Live5ch\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"JaneView/\",\n \"name\": \"JaneView\",\n \"version\": \"\"\n },\n {\n \"regex\": \"BathyScaphe/\",\n \"name\": \"BathyScaphe\",\n \"version\": \"\"\n }\n]\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst pim_json_1 = __importDefault(require(\"../../fixtures/regexes/client/pim.json\"));\nconst version_1 = require(\"../../utils/version\");\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass PersonalInformationManagerParser {\n constructor(options) {\n this.options = {\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n name: \"\",\n version: \"\"\n };\n for (const personalInformationManager of pim_json_1.default) {\n const match = user_agent_1.userAgentParser(personalInformationManager.regex, userAgent);\n if (!match)\n continue;\n result.type = \"personal information manager\";\n result.name = variable_replacement_1.variableReplacement(personalInformationManager.name, match);\n result.version = version_1.formatVersion(variable_replacement_1.variableReplacement(personalInformationManager.version, match), this.options.versionTruncation);\n break;\n }\n return result;\n };\n this.options = Object.assign(Object.assign({}, this.options), options);\n }\n}\nexports.default = PersonalInformationManagerParser;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst browser_1 = __importDefault(require(\"./browser\"));\nconst mobile_apps_1 = __importDefault(require(\"./mobile-apps\"));\nconst feed_readers_1 = __importDefault(require(\"./feed-readers\"));\nconst libraries_1 = __importDefault(require(\"./libraries\"));\nconst media_players_1 = __importDefault(require(\"./media-players\"));\nconst personal_information_managers_1 = __importDefault(require(\"./personal-information-managers\"));\nconst clientParsers = [\n feed_readers_1.default,\n mobile_apps_1.default,\n media_players_1.default,\n personal_information_managers_1.default,\n browser_1.default,\n libraries_1.default\n];\nclass ClientParser {\n constructor(options) {\n this.options = {\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n for (const Parser of clientParsers) {\n const parser = new Parser(this.options);\n const client = parser.parse(userAgent);\n if (client.type !== \"\")\n return client;\n }\n return null;\n };\n this.options = Object.assign(Object.assign({}, this.options), options);\n }\n}\nexports.default = ClientParser;\n", "{\n \"Nikon\": {\n \"regex\": \"Coolpix S800c\",\n \"device\": \"camera\",\n \"model\": \"Coolpix S800c\"\n },\n \"Samsung\": {\n \"regex\": \"EK-G[CN][0-9]{3}\",\n \"device\": \"camera\",\n \"models\": [\n {\n \"regex\": \"EK-GN120\",\n \"model\": \"Galaxy NX\"\n },\n {\n \"regex\": \"EK-GC100\",\n \"model\": \"Galaxy Camera\"\n },\n {\n \"regex\": \"EK-GC110\",\n \"model\": \"Galaxy Camera WiFi only\"\n },\n {\n \"regex\": \"EK-GC200\",\n \"model\": \"Galaxy Camera 2\"\n },\n {\n \"regex\": \"EK-GC([0-9]{3})\",\n \"model\": \"Galaxy Camera $1\"\n }\n ]\n }\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cameras_json_1 = __importDefault(require(\"../../fixtures/regexes/device/cameras.json\"));\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass CameraParser {\n constructor() {\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n brand: \"\",\n model: \"\"\n };\n for (const [brand, camera] of Object.entries(cameras_json_1.default)) {\n const match = user_agent_1.userAgentParser(camera.regex, userAgent);\n if (!match)\n continue;\n result.type = \"camera\";\n result.brand = brand;\n if (\"model\" in camera && camera.model) {\n result.model = variable_replacement_1.variableReplacement(camera.model, match).trim();\n }\n else if (\"models\" in camera && camera.models) {\n for (const model of camera.models) {\n const modelMatch = user_agent_1.userAgentParser(model.regex, userAgent);\n if (!modelMatch)\n continue;\n result.model = variable_replacement_1.variableReplacement(model.model, modelMatch).trim();\n break;\n }\n }\n break;\n }\n return result;\n };\n }\n}\nexports.default = CameraParser;\n", "{\n \"360\": {\n \"regex\": \"(?:180[1379]-A01|1713-A01|1707-A01|1509-A00|1603-A03|1607-A01|1503-A01)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"1807-A01(?:[);/ ]|$)\",\n \"model\": \"N7\"\n },\n {\n \"regex\": \"1803-A01(?:[);/ ]|$)\",\n \"model\": \"N7 Lite\"\n },\n {\n \"regex\": \"1809-A01(?:[);/ ]|$)\",\n \"model\": \"N7 Pro\"\n },\n {\n \"regex\": \"1713-A01(?:[);/ ]|$)\",\n \"model\": \"N6 Lite\"\n },\n {\n \"regex\": \"1707-A01(?:[);/ ]|$)\",\n \"model\": \"N6\"\n },\n {\n \"regex\": \"1801-A01(?:[);/ ]|$)\",\n \"model\": \"N6 Pro\"\n },\n {\n \"regex\": \"1509-A00(?:[);/ ]|$)\",\n \"model\": \"Q5 Plus\"\n },\n {\n \"regex\": \"1503-A01(?:[);/ ]|$)\",\n \"model\": \"N4\"\n },\n {\n \"regex\": \"1603-A03(?:[);/ ]|$)\",\n \"model\": \"N4A\"\n },\n {\n \"regex\": \"1607-A01(?:[);/ ]|$)\",\n \"model\": \"N5S\"\n }\n ]\n },\n \"8848\": {\n \"regex\": \"8848 (M[3-6])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Ace\": {\n \"regex\": \"(?:BUZZ [12]|BUZZ 2|CLEVER 1|URBAN 1(?: Pro)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BUZZ ([12]) Lite\",\n \"model\": \"Buzz $1 Lite\"\n },\n {\n \"regex\": \"BUZZ ([12]) Plus\",\n \"model\": \"Buzz $1 Plus\"\n },\n {\n \"regex\": \"BUZZ ([12])\",\n \"model\": \"Buzz $1\"\n },\n {\n \"regex\": \"CLEVER 1\",\n \"model\": \"Clever 1\"\n },\n {\n \"regex\": \"URBAN 1 Pro\",\n \"model\": \"Urban 1 Pro\"\n },\n {\n \"regex\": \"URBAN 1\",\n \"model\": \"Urban 1\"\n }\n ]\n },\n \"Tunisie Telecom\": {\n \"regex\": \"StarTrail TT(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"StarTrail by TT\"\n },\n \"SFR\": {\n \"regex\": \"StarShine|StarTrail|STARADDICT|StarText|StarNaute|StarXtrem|StarTab\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"StarXtrem II(?:[);/ ]|$)\",\n \"model\": \"StarXtrem 2\"\n },\n {\n \"regex\": \"StarXtrem ?([3-6])(?:[);/ ]|$)\",\n \"model\": \"StarXtrem $1\"\n },\n {\n \"regex\": \"StarXtrem(?:[);/ ]|$)\",\n \"model\": \"StarXtrem\"\n },\n {\n \"regex\": \"StarTrail III(?:[);/ ]|$)\",\n \"model\": \"StarTrail 3\"\n },\n {\n \"regex\": \"StarTrail II(?:[);/ ]|$)\",\n \"model\": \"StarTrail 2\"\n },\n {\n \"regex\": \"StarTrail[ _]?([1-9])[ _]([34])G(?:[);/ ]|$)\",\n \"model\": \"StarTrail $1 $2G\"\n },\n {\n \"regex\": \"StarTrail[ _]?([1-9])(?:[);/ ]|$)\",\n \"model\": \"StarTrail $1\"\n },\n {\n \"regex\": \"StarTrail(?:[);/ ]|$)\",\n \"model\": \"StarTrail\"\n },\n {\n \"regex\": \"StarShine II(?:[);/ ]|$)\",\n \"model\": \"StarShine 2\"\n },\n {\n \"regex\": \"StarShine(?:[);/ ]|$)\",\n \"model\": \"StarShine\"\n },\n {\n \"regex\": \"STARADDICT 4(?:[);/ ]|$)\",\n \"model\": \"Staraddict 4\"\n },\n {\n \"regex\": \"STARADDICT III(?:[);/ ]|$)\",\n \"model\": \"Staraddict 3\"\n },\n {\n \"regex\": \"STARADDICT II Plus(?:[);/ ]|$)\",\n \"model\": \"Staraddict 2 Plus\"\n },\n {\n \"regex\": \"STARADDICT II(?:[);/ ]|$)\",\n \"model\": \"Staraddict 2\"\n },\n {\n \"regex\": \"STARADDICT(?:[);/ ]|$)\",\n \"model\": \"Staraddict\"\n },\n {\n \"regex\": \"StarText II(?:[);/ ]|$)\",\n \"model\": \"StarText 2\"\n },\n {\n \"regex\": \"StarText(?:[);/ ]|$)\",\n \"model\": \"StarText\"\n },\n {\n \"regex\": \"StarNaute II(?:[);/ ]|$)\",\n \"model\": \"StarNaute 2\"\n },\n {\n \"regex\": \"StarNaute(?:[);/ ]|$)\",\n \"model\": \"StarNaute\"\n },\n {\n \"regex\": \"StarTab\",\n \"model\": \"StarTab\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"((?:StarShine|StarTrail|STARADDICT|StarText|StarNaute|StarXtrem)[^;/]*) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"HTC\": {\n \"regex\": \"HTC|Sprint (?:APA|ATP)|ADR(?!910L)[a-z0-9]+|NexusHD2|Amaze[ _]4G(?:[);/ ]|$)|(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\\\\))|(Amaze[ _]4G|(?<!BLU LIFE )One ?[XELSV\\\\+]+)(?:[);/ ]|$)|SPV E6[05]0|(One M8|One Mini 2|X525a|PG86100|PC36100|XV6975|PJ83100|2PYB2|2PS64|2PZC5|0PJA10|0PJA2|HTV33|0PM92|0PCV1|601HT|0PAJ5|HTL2[23]|HTV3[12]|2PQ93|X2-HT|EXODUS 1|ISW13HT)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"2PZC5(?:[);/ ]|$)\",\n \"model\": \"U11\"\n },\n {\n \"regex\": \"XV6975(?:[);/ ]|$)\",\n \"model\": \"Imagio\"\n },\n {\n \"regex\": \"PG86100(?:[);/ ]|$)\",\n \"model\": \"Evo 3G\"\n },\n {\n \"regex\": \"PC36100(?:[);/ ]|$)\",\n \"model\": \"Evo 4G\"\n },\n {\n \"regex\": \"(?:HTV33|601HT)(?:[);/ ]|$)\",\n \"model\": \"U11\"\n },\n {\n \"regex\": \"(?:801e|802[wdt])\",\n \"model\": \"One\"\n },\n {\n \"regex\": \"PJ83100(?:[);/ ]|$)\",\n \"model\": \"One X\"\n },\n {\n \"regex\": \"One Mini 2(?:[);/ ]|$)\",\n \"model\": \"One Mini 2\"\n },\n {\n \"regex\": \"X2-HT(?:[);/ ]|$)\",\n \"model\": \"One X2\"\n },\n {\n \"regex\": \"ISW13HT(?:[);/ ]|$)\",\n \"model\": \"J\"\n },\n {\n \"regex\": \"HTL22(?:[);/ ]|$)\",\n \"model\": \"J One\"\n },\n {\n \"regex\": \"HTL23(?:[);/ ]|$)\",\n \"model\": \"J Butterfly\"\n },\n {\n \"regex\": \"(?:0PJA2|0PJA10)(?:[);/ ]|$)\",\n \"model\": \"One M9\"\n },\n {\n \"regex\": \"X525a(?:[);/ ]|$)\",\n \"model\": \"One X+\"\n },\n {\n \"regex\": \"2PQ93(?:[);/ ]|$)\",\n \"model\": \"One A9\"\n },\n {\n \"regex\": \"ADR6300\",\n \"model\": \"Droid Incredible\"\n },\n {\n \"regex\": \"ADR6400L\",\n \"model\": \"ThunderBolt\"\n },\n {\n \"regex\": \"ADR6410LRA\",\n \"model\": \"Droid Incredible 3\"\n },\n {\n \"regex\": \"SPV E600\",\n \"model\": \"Excalibur\"\n },\n {\n \"regex\": \"SPV E650\",\n \"model\": \"Vox\"\n },\n {\n \"regex\": \"2PYB2\",\n \"model\": \"Bolt\"\n },\n {\n \"regex\": \"2PS64\",\n \"model\": \"10\"\n },\n {\n \"regex\": \"0PM92(?:[);/ ]|$)\",\n \"model\": \"Desire 626S\"\n },\n {\n \"regex\": \"0PCV1(?:[);/ ]|$)\",\n \"model\": \"Desire 510\"\n },\n {\n \"regex\": \"608t(?:[);/ ]|$)\",\n \"model\": \"Desire 608t\"\n },\n {\n \"regex\": \"EXODUS 1(?:[);/ ]|$)\",\n \"model\": \"Exodus 1\"\n },\n {\n \"regex\": \"NexusHD2\",\n \"model\": \"HD2\"\n },\n {\n \"regex\": \"HTC[ _\\\\-]P715a\",\n \"device\": \"tablet\",\n \"model\": \"P715a\"\n },\n {\n \"regex\": \"HTC[ _\\\\-]Flyer Build\",\n \"device\": \"tablet\",\n \"model\": \"Flyer\"\n },\n {\n \"regex\": \"HTC[ _\\\\-]Flyer[ _\\\\-]([\\\\w]{1,5})\",\n \"device\": \"tablet\",\n \"model\": \"Flyer $1\"\n },\n {\n \"regex\": \"HTC[ _\\\\-]One[ _\\\\-]max(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"One max\"\n },\n {\n \"regex\": \"HTC[ _]([^/;]+) [0-9]+(?:\\\\.[0-9]+)+ Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HTC[ _]([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HTC[ _]([a-z0-9]+[ _\\\\-]?(?:[a-z0-9_+\\\\-])*)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"USCCHTC(\\\\d+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Sprint (ATP.*) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1 (Sprint)\"\n },\n {\n \"regex\": \"Sprint (APA.*) Build\",\n \"model\": \"$1 (Sprint)\"\n },\n {\n \"regex\": \"(?:HTC-)?HTC(?:[\\\\-/ ])?([a-z0-9\\\\-_]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HTC;(?: )?([a-z0-9 ]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Desire|Sensation|Evo ?3D|IncredibleS|Wildfire|Butterfly)[ _]?([^;/)]+)(?: Build|\\\\))\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"(Amaze[ _]4G|One ?[XELSV\\\\+]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(ADR[^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(ADR[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(One M8)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"0PAJ5(?:[);/ ]|$)\",\n \"model\": \"One E8\"\n },\n {\n \"regex\": \"HTV32(?:[);/ ]|$)\",\n \"model\": \"10\"\n },\n {\n \"regex\": \"HTV31(?:[);/ ]|$)\",\n \"model\": \"J Butterfly\"\n }\n ]\n },\n \"Microsoft\": {\n \"regex\": \"KIN\\\\.(One|Two)|RM-(?:1010|1031|106[57]|107[23467]|1089|109[02]|1096|1099|1109|111[348]|1127|1141|115[24]|994)|Microsoft; Lumia|Lumia (?:1530|1320|950|850|650|640|550|535|435)|Corporation/Surface\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"KIN\\\\.(One|Two)\",\n \"device\": \"feature phone\",\n \"model\": \"Kin $1\"\n },\n {\n \"regex\": \"RM-1099|Lumia 430\",\n \"model\": \"Lumia 430\"\n },\n {\n \"regex\": \"RM-1114|Lumia 435\",\n \"model\": \"Lumia 435\"\n },\n {\n \"regex\": \"RM-1031|Lumia 532\",\n \"model\": \"Lumia 532\"\n },\n {\n \"regex\": \"Lumia 535 Dual SIM\",\n \"model\": \"Lumia 535 Dual SIM\"\n },\n {\n \"regex\": \"RM-109[02]|RM-1089|Lumia 535\",\n \"model\": \"Lumia 535\"\n },\n {\n \"regex\": \"RM-1141|Lumia 540\",\n \"model\": \"Lumia 540\"\n },\n {\n \"regex\": \"RM-1127|Lumia 550\",\n \"model\": \"Lumia 550\"\n },\n {\n \"regex\": \"RM-1010\",\n \"model\": \"Lumia 638\"\n },\n {\n \"regex\": \"Lumia 640 XL LTE\",\n \"model\": \"Lumia 640 XL LTE\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"RM-106[57]|RM-1096|Lumia 640 XL\",\n \"model\": \"Lumia 640 XL\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Lumia 640 LTE Dual SIM\",\n \"model\": \"Lumia 640 LTE Dual SIM\"\n },\n {\n \"regex\": \"Lumia 640 LTE\",\n \"model\": \"Lumia 640 LTE\"\n },\n {\n \"regex\": \"Lumia 640 Dual SIM\",\n \"model\": \"Lumia 640 Dual SIM\"\n },\n {\n \"regex\": \"RM-1109|RM-1113|RM-107[23467]|Lumia 640\",\n \"model\": \"Lumia 640\"\n },\n {\n \"regex\": \"RM-1154|Lumia 650\",\n \"model\": \"Lumia 650\"\n },\n {\n \"regex\": \"RM-1152\",\n \"model\": \"Lumia 650 SS\"\n },\n {\n \"regex\": \"Lumia 850\",\n \"model\": \"Lumia 850\"\n },\n {\n \"regex\": \"Lumia 950 XL Dual SIM\",\n \"model\": \"Lumia 950 XL Dual SIM\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Lumia 950 XL\",\n \"model\": \"Lumia 950 XL\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Lumia 950 Dual SIM\",\n \"model\": \"Lumia 950 Dual SIM\"\n },\n {\n \"regex\": \"Lumia 950|RM-1118\",\n \"model\": \"Lumia 950\"\n },\n {\n \"regex\": \"RM-994|Lumia 1320\",\n \"model\": \"Lumia 1320\"\n },\n {\n \"regex\": \"Lumia 1530\",\n \"model\": \"Lumia 1530\"\n },\n {\n \"regex\": \"Surface Book 3\",\n \"device\": \"desktop\",\n \"model\": \"Surface Book 3\"\n },\n {\n \"regex\": \"Surface Pro( [34])?\",\n \"device\": \"desktop\",\n \"model\": \"Surface Pro$1\"\n },\n {\n \"regex\": \"Microsoft; Lumia ([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"Lumia $1\"\n }\n ]\n },\n \"Nokia\": {\n \"regex\": \"Nokia(?!Browser|Webview|; GT-I8750)|Lumia|Maemo RX|portalmmm/2\\\\.0 N7|portalmmm/2\\\\.0 NK|nok[0-9]+|Symbian.*\\\\s([a-z0-9]+)$|RX-51 N900|TA-[0-9]{4}|ARM; 909\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TA-10(07|23|29|35)\",\n \"model\": \"2\"\n },\n {\n \"regex\": \"TA-10(20|28|32|38)\",\n \"model\": \"3\"\n },\n {\n \"regex\": \"TA-10(24|27|44|53)\",\n \"model\": \"5\"\n },\n {\n \"regex\": \"TA-10(00|03|21|25|33|39|54)\",\n \"model\": \"6\"\n },\n {\n \"regex\": \"TA-1041\",\n \"model\": \"7\"\n },\n {\n \"regex\": \"TA-10(04|12|52)\",\n \"model\": \"8\"\n },\n {\n \"regex\": \"Nokia 8\\\\.1\",\n \"model\": \"8.1\"\n },\n {\n \"regex\": \"Nokia 8 Sirocco\",\n \"model\": \"8 Sirocco\"\n },\n {\n \"regex\": \"Nokia 7\\\\.1\",\n \"model\": \"7.1\"\n },\n {\n \"regex\": \"Nokia 7 plus\",\n \"model\": \"7 plus\"\n },\n {\n \"regex\": \"Nokia 6\\\\.1 Plus\",\n \"model\": \"6.1 Plus\"\n },\n {\n \"regex\": \"Nokia 6\\\\.1\",\n \"model\": \"6.1\"\n },\n {\n \"regex\": \"Nokia 5\\\\.1 Plus\",\n \"model\": \"5.1 Plus\"\n },\n {\n \"regex\": \"Nokia 5\\\\.1\",\n \"model\": \"5.1\"\n },\n {\n \"regex\": \"Nokia 3\\\\.1 Plus\",\n \"model\": \"3.1 Plus\"\n },\n {\n \"regex\": \"Nokia 3\\\\.1\",\n \"model\": \"3.1\"\n },\n {\n \"regex\": \"Nokia 2\\\\.1\",\n \"model\": \"2.1\"\n },\n {\n \"regex\": \"Nokia 1 Plus\",\n \"model\": \"1 Plus\"\n },\n {\n \"regex\": \"Nokia 1\",\n \"model\": \"1\"\n },\n {\n \"regex\": \"RX-51 N900\",\n \"model\": \"N900\"\n },\n {\n \"regex\": \"(?: )?(Nokia500|nokiaasha500(?:dualsim)?)(?: Build|[_);/])\",\n \"model\": \"Asha 500\"\n },\n {\n \"regex\": \"Nokia5130c(?:-2)?\",\n \"model\": \"5130 XpressMusic\"\n },\n {\n \"regex\": \"Nokia5230\",\n \"model\": \"Nuron\"\n },\n {\n \"regex\": \"Nokia5233\",\n \"model\": \"5233\"\n },\n {\n \"regex\": \"Nokia5800d-1\",\n \"model\": \"5800 XpressMusic\"\n },\n {\n \"regex\": \"Nokia6210Navigator\",\n \"model\": \"Navigator\"\n },\n {\n \"regex\": \"Nokia8800e?\",\n \"model\": \"Sapphire Arte\"\n },\n {\n \"regex\": \"NOKIA-RH-17\",\n \"model\": \"2280\"\n },\n {\n \"regex\": \"NOKIA-RH-27\",\n \"model\": \"6225\"\n },\n {\n \"regex\": \"NOKIA-RH-34\",\n \"model\": \"6585\"\n },\n {\n \"regex\": \"NOKIA-RH-48\",\n \"model\": \"3105\"\n },\n {\n \"regex\": \"NOKIA-RM-11\",\n \"model\": \"3205\"\n },\n {\n \"regex\": \"Nokia808 PureView\",\n \"model\": \"808 PureView\"\n },\n {\n \"regex\": \"Nokia ?([0-9]{4})c(?:-)?\",\n \"model\": \"$1 Classic\"\n },\n {\n \"regex\": \"Nokia ?([0-9]{4})s(?:-)?\",\n \"model\": \"$1 Slide\"\n },\n {\n \"regex\": \"Nokia ?([0-9]{4})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?: )?Nokia([235][0-9]{2})(?: Build|[_);/])\",\n \"model\": \"Asha $1\"\n },\n {\n \"regex\": \"Nokia([CEX]-?[0-9]{1,2}i?)-[0-9]{1,2}u?(?: Build|[_);/])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Nokia;? 520T\",\n \"model\": \"Lumia 520T\"\n },\n {\n \"regex\": \"RM-91[45]\",\n \"model\": \"Lumia 520\"\n },\n {\n \"regex\": \"RM-997|Nokia 526\",\n \"model\": \"Lumia 526\"\n },\n {\n \"regex\": \"RM-846\",\n \"model\": \"Lumia 620\"\n },\n {\n \"regex\": \"RM-97[68]\",\n \"model\": \"Lumia 630\"\n },\n {\n \"regex\": \"RM-97[45]\",\n \"model\": \"Lumia 635\"\n },\n {\n \"regex\": \"RM-1027\",\n \"model\": \"Lumia 636\"\n },\n {\n \"regex\": \"NOKIA;? 710\",\n \"model\": \"Lumia 710\"\n },\n {\n \"regex\": \"Nokia;? 720T\",\n \"model\": \"Lumia 720T\"\n },\n {\n \"regex\": \"RM-885\",\n \"model\": \"Lumia 720\"\n },\n {\n \"regex\": \"Lumia 730\",\n \"model\": \"Lumia 730\"\n },\n {\n \"regex\": \"RM-103[89]\",\n \"model\": \"Lumia 735\"\n },\n {\n \"regex\": \"Nokia;? 800C\",\n \"model\": \"Lumia 800C\"\n },\n {\n \"regex\": \"Nokia;? 800\",\n \"model\": \"Lumia 800\"\n },\n {\n \"regex\": \"Nokia 820\",\n \"model\": \"Lumia 820\"\n },\n {\n \"regex\": \"RM-984\",\n \"model\": \"Lumia 830\"\n },\n {\n \"regex\": \"Nokia;? 900\",\n \"model\": \"Lumia 900\"\n },\n {\n \"regex\": \"(RM-82[12]|Nokia;? 920)(?: Build|[_);/])\",\n \"model\": \"Lumia 920\"\n },\n {\n \"regex\": \"(RM-89[23]|RM-910|Nokia;? 925)(?: Build|[a_);/])\",\n \"model\": \"Lumia 925\"\n },\n {\n \"regex\": \"Lumia 929\",\n \"model\": \"Lumia Icon\"\n },\n {\n \"regex\": \"RM-1045\",\n \"model\": \"Lumia 930\"\n },\n {\n \"regex\": \"(ARM; 909|NOKIA;? 909|NOKIA; id300)(?: Build|[_);/])\",\n \"model\": \"Lumia 1020\"\n },\n {\n \"regex\": \"NOKIA;? 1520\\\\.1\",\n \"model\": \"Lumia 1520.1\"\n },\n {\n \"regex\": \"Nokia ([A-Za-z0-9\\\\. ]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Nokia(N[0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Nokia-([a-z0-9]+)\",\n \"model\": \"N$1\"\n },\n {\n \"regex\": \"NOKIA; (?!Qt;)([a-z0-9\\\\- ]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"NOKIA[ _]?([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"NOKIA/([a-z0-9 ]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Lumia [a-z0-9\\\\-]+ XL)\",\n \"device\": \"phablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Lumia [a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Maemo RX-51 ([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Maemo RX-34\",\n \"model\": \"N800\"\n },\n {\n \"regex\": \"NokiaInternal|Nokia-WAP-Toolkit|Nokia-MIT-Browser|Nokia Mobile|Nokia Browser|Nokia/Series\",\n \"model\": \"\"\n },\n {\n \"regex\": \"portalmmm/2\\\\.0 (N7[37]|NK[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"nok([0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Symbian.*\\\\s([a-z0-9]+)$\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"CnM\": {\n \"regex\": \"CnM\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"CnM[ \\\\-](?:Touchpad|TP)[ \\\\-]([0-9\\\\.]+)\",\n \"model\": \"Touchpad $1\"\n }\n ]\n },\n \"RIM\": {\n \"regex\": \"BB10;|BlackBerry|rim[0-9]+|PlayBook|STV100-[1234]|STH100-[12]|BBA100-[12]|BBB100-[1234567]|BBD100-[126]|BB[EF]100-[123456789]|BB[CGH]100-1\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BBA100-[12]\",\n \"model\": \"BlackBerry DTEK60\"\n },\n {\n \"regex\": \"BBB100-[1234567]\",\n \"model\": \"KEYone\"\n },\n {\n \"regex\": \"BBC100-1\",\n \"model\": \"Aurora\"\n },\n {\n \"regex\": \"BBD100-[126]\",\n \"model\": \"Motion\"\n },\n {\n \"regex\": \"BBE100-[123456789]\",\n \"model\": \"KEY2 LE\"\n },\n {\n \"regex\": \"BBF100-[1234567]\",\n \"model\": \"KEY2\"\n },\n {\n \"regex\": \"BBF100-8\",\n \"model\": \"KEY2 Silver\"\n },\n {\n \"regex\": \"BBF100-9\",\n \"model\": \"KEY2 Black\"\n },\n {\n \"regex\": \"BBG100-1\",\n \"model\": \"Evolve\"\n },\n {\n \"regex\": \"BBH100-1\",\n \"model\": \"Evolve X\"\n },\n {\n \"regex\": \"STV100-[1234]\",\n \"model\": \"BlackBerry Priv\"\n },\n {\n \"regex\": \"STH100-[12]\",\n \"model\": \"BlackBerry DTEK50\"\n },\n {\n \"regex\": \"BB10; ([a-z0-9\\\\- ]+)\\\\)\",\n \"model\": \"BlackBerry $1\"\n },\n {\n \"regex\": \"PlayBook.+RIM Tablet OS\",\n \"model\": \"BlackBerry Playbook\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BlackBerry(?: )?([a-z0-9]+)\",\n \"model\": \"BlackBerry $1\"\n },\n {\n \"regex\": \"rim([0-9]+)\",\n \"model\": \"BlackBerry $1\"\n },\n {\n \"regex\": \"9000\",\n \"model\": \"Bold 9000\"\n },\n {\n \"regex\": \"9300\",\n \"model\": \"Curve 3G 9300\"\n },\n {\n \"regex\": \"(8520|8530|9220|9320|9360)\",\n \"model\": \"Curve $1\"\n },\n {\n \"regex\": \"9630\",\n \"model\": \"Tour 9630\"\n },\n {\n \"regex\": \"9720\",\n \"model\": \"9720\"\n },\n {\n \"regex\": \"(9800|9860)\",\n \"model\": \"Torch $1\"\n },\n {\n \"regex\": \"BlackBerry\",\n \"model\": \"BlackBerry\"\n }\n ]\n },\n \"CHIA\": {\n \"regex\": \"(SVEGLIO[ _][QH]1|TREO_TAB8G|GTA7WF)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SVEGLIO[ _]([QH]1)\",\n \"model\": \"Sveglio $1\"\n },\n {\n \"regex\": \"TREO_TAB8G\",\n \"device\": \"tablet\",\n \"model\": \"TREO TAB8G\"\n },\n {\n \"regex\": \"GTA7WF\",\n \"device\": \"tablet\",\n \"model\": \"GTA7WF\"\n }\n ]\n },\n \"Palm\": {\n \"regex\": \"(?:Pre|Pixi)/(\\\\d+)\\\\.(\\\\d+)|Palm|Treo|Xiino\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"((?:Pre|Pixi))/(\\\\d+\\\\.\\\\d+)\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"Palm(?:[ \\\\-])?((?!OS|Source|scape)[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Treo([a-z0-9]+)\",\n \"model\": \"Treo $1\"\n },\n {\n \"regex\": \"Tungsten\",\n \"model\": \"Tungsten\"\n },\n {\n \"regex\": \"Xiino|Palmscape\",\n \"model\": \"\"\n }\n ]\n },\n \"HP\": {\n \"regex\": \"Hewlett-Packard|HP/HP|HP EliteBook 820|TouchPad/\\\\d+\\\\.\\\\d+|hp-tablet|HP ?iPAQ|webOS.*P160U|HP (?:Pro )?Slate|HP [78]|HP 10 Plus|Compaq [7|8]|HP; [^;/)]+\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"HP Slate 6 Voice Tab\",\n \"model\": \"Slate 6 VoiceTab\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"HP 10 Plus\",\n \"model\": \"10 Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HP ([78][^)/;]*)(?: Build|\\\\))\",\n \"model\": \"Slate $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Compaq ([78][^/;]*) Build\",\n \"model\": \"Compaq $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HP Pro Slate 8\",\n \"model\": \"Pro Slate 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HP Slate ?(.+) Build\",\n \"model\": \"Slate $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HP Slate ?([0-9]+)\",\n \"model\": \"Slate $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TouchPad/(\\\\d+\\\\.\\\\d+)|hp-tablet\",\n \"model\": \"TouchPad\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HP; ([^;/)]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HP ?iPAQ ?([a-z0-9]+)\",\n \"model\": \"iPAQ $1\"\n },\n {\n \"regex\": \"webOS.*(P160U)\",\n \"model\": \"Veer\"\n },\n {\n \"regex\": \"HP ProBook (6560b)\",\n \"device\": \"desktop\",\n \"model\": \"ProBook $1\"\n },\n {\n \"regex\": \"HP EliteBook 820 G2\",\n \"device\": \"desktop\",\n \"model\": \"EliteBook 820 G2\"\n },\n {\n \"regex\": \"Z240 Tower Workstation\",\n \"device\": \"desktop\",\n \"model\": \"Z240 Tower Workstation\"\n }\n ]\n },\n \"TiPhone\": {\n \"regex\": \"TiPhone ?([a-z0-9]+)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Apple\": {\n \"regex\": \"(?:iTunes-)?Apple[ _]?TV|Apple/|(?:Apple-|iTunes-)?(?<!like )(?:iPad|iPhone)|iPh[0-9],[0-9]|CFNetwork|HomePod|Watch ?OS|Watch1,[12]|MDCR_Mac|ICRU_iP(?:ad|hone)\",\n \"models\": [\n {\n \"regex\": \"HomePod\",\n \"device\": \"smart speaker\",\n \"model\": \"HomePod\"\n },\n {\n \"regex\": \"Watch1,1\",\n \"device\": \"wearable\",\n \"model\": \"Watch 38mm\"\n },\n {\n \"regex\": \"Watch1,2\",\n \"device\": \"wearable\",\n \"model\": \"Watch 42mm\"\n },\n {\n \"regex\": \"Watch2,6\",\n \"device\": \"wearable\",\n \"model\": \"Watch Series 1 38mm\"\n },\n {\n \"regex\": \"Watch2,7\",\n \"device\": \"wearable\",\n \"model\": \"Watch Series 1 42mm\"\n },\n {\n \"regex\": \"Watch2,3\",\n \"device\": \"wearable\",\n \"model\": \"Watch Series 2 38mm\"\n },\n {\n \"regex\": \"Watch2,4\",\n \"device\": \"wearable\",\n \"model\": \"Watch Series 2 42mm\"\n },\n {\n \"regex\": \"Watch3,[13]\",\n \"device\": \"wearable\",\n \"model\": \"Watch Series 3 38mm\"\n },\n {\n \"regex\": \"Watch3,[24]\",\n \"device\": \"wearable\",\n \"model\": \"Watch Series 3 42mm\"\n },\n {\n \"regex\": \"Watch5,(?:9|11)\",\n \"device\": \"wearable\",\n \"model\": \"Watch SE 40mm\"\n },\n {\n \"regex\": \"Watch5,1[02]\",\n \"device\": \"wearable\",\n \"model\": \"Watch SE 44mm\"\n },\n {\n \"regex\": \"Watch([456]),[13]\",\n \"device\": \"wearable\",\n \"model\": \"Watch Series $1 40mm\"\n },\n {\n \"regex\": \"Watch([456]),[24]\",\n \"device\": \"wearable\",\n \"model\": \"Watch Series $1 44mm\"\n },\n {\n \"regex\": \"(?:.+_)?MacBook7(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook 13\\\" (2010)\"\n },\n {\n \"regex\": \"(?:.+_)?MacPro5(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"Mac Pro (2010-2012)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac12(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"iMac 21.5\\\" (2011)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac17(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"iMac 27\\\" (2015)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac19(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"iMac 21.5\\\" (2019)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac19(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"iMac 27\\\" (2019)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac20(?:%2C|,)[12]\",\n \"device\": \"desktop\",\n \"model\": \"iMac 27\\\" (2020)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac14(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"iMac 27\\\" (2013)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac14(?:%2C|,)4\",\n \"device\": \"desktop\",\n \"model\": \"iMac 21.5\\\" (2014)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac14(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"iMac 21.5\\\" (2013)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBook6(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook 13\\\" (2009)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBook8(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook 12\\\" (2015)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBook9(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook 12\\\" (2016)\"\n },\n {\n \"regex\": \"(?:.+_)?iMac10(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"iMac (2009)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir2(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air (2009)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir3(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 11\\\" (2010)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir3(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2010)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir4(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 11\\\" (2011)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir4(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2011)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir5(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 11\\\" (2012)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir5(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2012)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir6(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 11\\\" (2013-2014)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir6(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2013-2014)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir7(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 11\\\" (2015)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir7(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2015-2017)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir8(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2018)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir8(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2019)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir9(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2020)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookAir10(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Air 13\\\" (2020)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro1(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2006)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro1(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 17\\\" (2006)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro2(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 17\\\" (2007)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro2(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2007)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro[34](?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro (2008)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro5(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2008)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro5(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 17\\\" (2009)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro5(?:%2C|,)[34]\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2009)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro5(?:%2C|,)5\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2009)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro6(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 17\\\" (2010)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro6(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2010)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro7(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2010)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro8(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2011)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro8(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2011)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro8(?:%2C|,)3\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 17\\\" (2011)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro9(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2012)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro9(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2012)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro10(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2012-2013)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro10(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2012-2013)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro11(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2013-2014)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro11(?:%2C|,)[23]\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2013-2014)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro11(?:%2C|,)[45]\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2015)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro12(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2015)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro13(?:%2C|,)[12]\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2016)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro13(?:%2C|,)3\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2016)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro14(?:%2C|,)[12]\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2017)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro14(?:%2C|,)3\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2017)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro15(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2018-2019)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro15(?:%2C|,)2\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2018-2019)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro15(?:%2C|,)3\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 15\\\" (2019)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro15(?:%2C|,)4\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2019)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro16(?:%2C|,)[14]\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 16\\\" (2019)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro16(?:%2C|,)[23]\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2020)\"\n },\n {\n \"regex\": \"(?:.+_)?MacBookPro17(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"MacBook Pro 13\\\" (2020)\"\n },\n {\n \"regex\": \"(?:.+_)?Macmini8(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"Mac Mini (2018)\"\n },\n {\n \"regex\": \"(?:.+_)?Macmini9(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"Mac Mini (2020)\"\n },\n {\n \"regex\": \"(?:.+_)?Macmini7(?:%2C|,)1\",\n \"device\": \"desktop\",\n \"model\": \"Mac Mini (2014)\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?1[C,_]1\",\n \"model\": \"iPhone\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?1[C,_]2\",\n \"model\": \"iPhone 3G\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?2[C,_]1| 3GS\\\\)$\",\n \"model\": \"iPhone 3GS\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?3[C,_][123]\",\n \"model\": \"iPhone 4\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?4[C,_]1|1C2%254enohPi| 4S\\\\)$\",\n \"model\": \"iPhone 4S\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?5[C,_][12]| 5\\\\)$\",\n \"model\": \"iPhone 5\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?5[C,_][34]\",\n \"model\": \"iPhone 5C\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?6[C,_][12]| 5S\\\\)$\",\n \"model\": \"iPhone 5S\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?7[C,_]1|1C2%257enohPi| 6PLUS\\\\)$\",\n \"model\": \"iPhone 6 Plus\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?7[C,_]2| 6\\\\)$\",\n \"model\": \"iPhone 6\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?8[C,_]2| 6SPLUS\\\\)$\",\n \"model\": \"iPhone 6s Plus\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?8[C,_]1|iPhone 6s| 6S\\\\)$\",\n \"model\": \"iPhone 6s\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?8[C,_]4| SE\\\\)$\",\n \"model\": \"iPhone SE\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?9[C,_][13]| 7\\\\)$\",\n \"model\": \"iPhone 7\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?9[C,_][24]| 7PLUS\\\\)$\",\n \"model\": \"iPhone 7 Plus\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?10[C,_][14]| 8\\\\)$\",\n \"model\": \"iPhone 8\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?10[C,_][25]| 8PLUS\\\\)$\",\n \"model\": \"iPhone 8 Plus\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?10[C,_][36]|iPhone X| X\\\\)$\",\n \"model\": \"iPhone X\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?11[C,_][2]| XS\\\\)$\",\n \"model\": \"iPhone XS\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?11[C,_][46]| XSMAX\\\\)$\",\n \"model\": \"iPhone XS Max\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?11[C,_][8]| XR\\\\)$\",\n \"model\": \"iPhone XR\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?12[C,_][1]| 11\\\\)$\",\n \"model\": \"iPhone 11\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?12[C,_][3]| 11PRO\\\\)$\",\n \"model\": \"iPhone 11 Pro\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?12[C,_][5]| 11PROMAX\\\\)$\",\n \"model\": \"iPhone 11 Pro Max\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?12[C,_][8]\",\n \"model\": \"iPhone SE (2020)\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?13[C,_][1]\",\n \"model\": \"iPhone 12 Mini\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?13[C,_][2]\",\n \"model\": \"iPhone 12\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?13[C,_][3]\",\n \"model\": \"iPhone 12 Pro\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPh(?:one)?13[C,_][4]\",\n \"model\": \"iPhone 12 Pro Max\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad1[C,_]1\",\n \"model\": \"iPad\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad2[C,_][1234]\",\n \"model\": \"iPad 2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad2[C,_][567]\",\n \"model\": \"iPad Mini\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad3[C,_][123]\",\n \"model\": \"iPad 3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad3[C,_][456]\",\n \"model\": \"iPad 4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad4[C,_][123]\",\n \"model\": \"iPad Air\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad4[C,_][456]\",\n \"model\": \"iPad Mini 2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad4[C,_][789]\",\n \"model\": \"iPad Mini 3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad5[C,_][12]\",\n \"model\": \"iPad Mini 4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad5[C,_][34]\",\n \"model\": \"iPad Air 2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad6[C,_][34]\",\n \"model\": \"iPad Pro 9.7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad6[C,_][78]\",\n \"model\": \"iPad Pro 12.9\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad6[C,_](?:11|12)\",\n \"model\": \"iPad 5 9.7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad7[C,_][12]\",\n \"model\": \"iPad Pro 2 12.9\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad7[C,_][34]\",\n \"model\": \"iPad Pro 10.5\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad7[C,_][56]\",\n \"model\": \"iPad 6 9.7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad7[C,_](?:11|12)\",\n \"model\": \"iPad 7 10.2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad8[C,_](?:9|10)\",\n \"model\": \"iPad Pro 2 11\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad8[C,_]1[12]\",\n \"model\": \"iPad Pro 4 12.9\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad8[C,_][1-4]\",\n \"model\": \"iPad Pro 3 11.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad8[C,_][5-8]\",\n \"model\": \"iPad Pro 3 12.9\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad11[C,_][12]\",\n \"model\": \"iPad Mini 5\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad11[C,_][34]\",\n \"model\": \"iPad Air 3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad11[C,_][67]\",\n \"model\": \"iPad 8 10.2\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad13[C,_][12]\",\n \"model\": \"iPad Air 4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Apple-?TV2[C,_]1\",\n \"model\": \"Apple TV 2\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"Apple-?TV3[C,_][12]\",\n \"model\": \"Apple TV 3\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"Apple-?TV5[C,_]3\",\n \"model\": \"Apple TV 4\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"Apple-?TV6[C,_]2\",\n \"model\": \"Apple TV 4K\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(?:iTunes-)?Apple[ _]?TV\",\n \"model\": \"Apple TV\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"HomePod\",\n \"model\": \"HomePod\",\n \"device\": \"smart speaker\"\n },\n {\n \"regex\": \"iTunes-iPad/[0-9]+(?:\\\\.[0-9]+)* \\\\(([^;]+);\",\n \"model\": \"iPad $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Apple-|.+_)?iPad\",\n \"model\": \"iPad\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"iTunes-iPhone/[0-9]+(?:\\\\.[0-9]+)* \\\\(([^;]+);\",\n \"model\": \"iPhone $1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Apple-)?iPhone ?(3GS?|4S?|5[CS]?|6(:? Plus)?)?\",\n \"model\": \"iPhone $1\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"MicroMax\": {\n \"regex\": \"(?:MicroMax[ \\\\-\\\\_]?[a-z0-9]+|Q327)|4560MMX|P70221|(?:YU(?:5040|5530)|AQ5001(?: Canvas Power)?|N8216|N8301)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AQ5001 Canvas Power\",\n \"model\": \"Canvas Power\"\n },\n {\n \"regex\": \"AQ5001\",\n \"model\": \"Canvas Juice 2\"\n },\n {\n \"regex\": \"4560MMX(?:[);/ ]|$)\",\n \"model\": \"4560MMX\"\n },\n {\n \"regex\": \"E481\",\n \"model\": \"Canvas 5\"\n },\n {\n \"regex\": \"P70221(?:[);/ ]|$)\",\n \"model\": \"Canvas Tab\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Q327\",\n \"model\": \"Bolt\"\n },\n {\n \"regex\": \"Q417\",\n \"model\": \"Canvas Mega\"\n },\n {\n \"regex\": \"Q402\\\\+\",\n \"model\": \"Bolt Pace\"\n },\n {\n \"regex\": \"YU5040(?:[);/ ]|$)\",\n \"model\": \"YU Yureka YU5040\"\n },\n {\n \"regex\": \"YU5530(?:[);/ ]|$)\",\n \"model\": \"YU Yureka S YU5530\"\n },\n {\n \"regex\": \"Q424\",\n \"model\": \"Bolt Selfie\"\n },\n {\n \"regex\": \"Q426\",\n \"model\": \"Canvas Mega 2\"\n },\n {\n \"regex\": \"N8216\",\n \"model\": \"Infinity N11\"\n },\n {\n \"regex\": \"N8301\",\n \"model\": \"Infinity N12\"\n },\n {\n \"regex\": \"MicroMax(?:[ \\\\-\\\\_])?(X291|X246|X252|X458|X312)\",\n \"model\": \"$1\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"MicroMax(?:[ \\\\-\\\\_])?(P[a-z0-9]+)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MicroMax(?:[ \\\\-\\\\_])?([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"3Q\": {\n \"regex\": \"AC0731B|AC1024C|AC7803C|BC9710AM|EL72B|LC0720C|LC0723B|LC0725B|LC0804B|LC0808B|LC0809B|LC0810C|LC0816C|LC0901D|LC1016C|MT0724B|MT0729[BD]|MT0811B|OC1020A|RC0709B|RC0710B|RC0718C|RC0719H|RC0721B|RC0722C|RC0726B|RC0734H|RC0743H|RC0817C|RC1018C|RC1019G|RC1025F|RC1301C|RC780[24]F|RC9711B|RC9712C|RC9716B|RC9717B|RC9724C|RC9726C|RC9727F|RC9730C|RC9731C|TS0807B|TS1013B|VM0711A|VM1017A|RC0813C|QS9719D|QS9718C|QS9715F|QS1023H|QS0815C|QS0730C|QS0728C|QS0717D|QS0716D|QS0715C|MT7801C|TS9708B|AC0732C|MT0739D|MT0812E|(?:3Q_)?ER71B\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"MT0724B|LC0901D|LC0816C|LC0810C|LC0809B|LC0808B|LC0804B|LC0725B|LC0723B\",\n \"model\": \"Qoo! P-Pad\"\n },\n {\n \"regex\": \"VM1017A|TS1013B|TS0807B|RC9731C|RC9730C|RC9727F|RC9726C|RC9724C|RC9717B|RC9716B|RC9712C|RC9711B|RC1301C|RC1025F|RC1019G|RC1018C|RC0817C|RC0813C|RC0743H|RC0734H|RC0726B|RC0722C|RC0721B|RC0719H|RC0718C|RC0710B|RC0709B|QS9715F|QS1023H|QS0815C|QS0730C|QS0728C|QS0717D|QS0716D|QS0715C|MT0811B|MT0739D|MT0729[BD]|LC1016C|LC0720C|BC9710AM|AC1024C|AC0731B\",\n \"model\": \"Qoo! Q-Pad\"\n },\n {\n \"regex\": \"MT7801C|QS9718C|QS9719D|VM0711A|OC1020A\",\n \"model\": \"Qoo! Surf\"\n },\n {\n \"regex\": \"TS9708B\",\n \"model\": \"Surf TS1009B\"\n },\n {\n \"regex\": \"AC7803C|AC0732C\",\n \"model\": \"Qoo! Lite\"\n },\n {\n \"regex\": \"MT0812E|RC7802F\",\n \"model\": \"Qoo! Meta\"\n },\n {\n \"regex\": \"EL72B|(?:3Q_)?ER71B\",\n \"model\": \"Qoo! Q-Book\"\n },\n {\n \"regex\": \"(RC7804F)\",\n \"model\": \"Qoo! Glaze\"\n }\n ]\n },\n \"4Good\": {\n \"regex\": \"4Good[ _]|S450m [43]G|S555m 4G|S501m 3G|T700i_3G|People (?:G503|G410|GT300)|Light (?:A103|B100)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"T700i_3G\",\n \"model\": \"T700i 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"People GT300\",\n \"model\": \"People GT300\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"S555m[_ ]4G\",\n \"model\": \"People\"\n },\n {\n \"regex\": \"(S(?:450m|501m)[_ ][43]G|Light (?:A103|B100)|People (?:G503|G410))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"4Good[ _]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"4Good[ _]([^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Acteck\": {\n \"regex\": \"BLECK\",\n \"device\": \"tablet\",\n \"model\": \"Bleck\"\n },\n \"Alba\": {\n \"regex\": \"Alba ?(?:57|4|10 TABLET|(?:7|10)(?:Nou|Pie))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Alba 57\",\n \"model\": \"5.7\"\n },\n {\n \"regex\": \"Alba (4)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"10 TABLET\",\n \"device\": \"tablet\",\n \"model\": \"10 Tablet\"\n },\n {\n \"regex\": \"Alba((?:7|10)(?:Nou|Pie))\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"AllCall\": {\n \"regex\": \"AllCall_|Heat[34]|Rio_X(?:[);/ ]|$)|Hot ?[125][^;/]+ Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AllCall_(Alpha|Atom|Bro|Madrid)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"AllCall_S1_X\",\n \"model\": \"S1 X\"\n },\n {\n \"regex\": \"AllCall_S1\",\n \"model\": \"S1\"\n },\n {\n \"regex\": \"AllCall_RIO_S\",\n \"model\": \"Rio S\"\n },\n {\n \"regex\": \"AllCall_RIO_PRO\",\n \"model\": \"Rio Pro\"\n },\n {\n \"regex\": \"AllCall_RIO\",\n \"model\": \"Rio\"\n },\n {\n \"regex\": \"Heat([34])\",\n \"model\": \"Heat $1\"\n },\n {\n \"regex\": \"Rio_X(?:[);/ ]|$)\",\n \"model\": \"Rio X\"\n },\n {\n \"regex\": \"Hot ?([125][^;/]+) Build\",\n \"model\": \"Hot $1\"\n }\n ]\n },\n \"Bravis\": {\n \"regex\": \"Bravis[ _]|A501 Bright|A552 JOY Max|A504 Trace|A505 JOY Plus|A503 Joy|NB(?:106M|10[1-8]|751|7[145]|8[57]1|76)|NP101|NB961|NP 104 3G|B501|N1-570 Space|Atlas A551|A512 Harmony Pro|A510_Jeans_4G|A509_Jeans|N1_550_Cruiser\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"A501 BRIGHT\",\n \"model\": \"A501 Bright\"\n },\n {\n \"regex\": \"Bravis[_ ]X500\",\n \"model\": \"Trace Pro\"\n },\n {\n \"regex\": \"Bravis[_ ]A506\",\n \"model\": \"Crystal\"\n },\n {\n \"regex\": \"Bravis[_ ]A553\",\n \"model\": \"Discovery\"\n },\n {\n \"regex\": \"BRAVIS[ _]TAU\",\n \"model\": \"Tau\"\n },\n {\n \"regex\": \"BRAVIS[ _]DELTA\",\n \"model\": \"Delta\"\n },\n {\n \"regex\": \"BRAVIS[ _]TREND\",\n \"model\": \"Trend\"\n },\n {\n \"regex\": \"B501\",\n \"model\": \"Easy\"\n },\n {\n \"regex\": \"N1-570\",\n \"model\": \"Space\"\n },\n {\n \"regex\": \"BRAVIS[ ]A554\",\n \"model\": \"A554 Grand\"\n },\n {\n \"regex\": \"BRAVIS[ ]S500\",\n \"model\": \"S500 Diamond\"\n },\n {\n \"regex\": \"A505 JOY Plus\",\n \"model\": \"A505 Joy Plus\"\n },\n {\n \"regex\": \"A552 JOY Max\",\n \"model\": \"A552 Joy Max\"\n },\n {\n \"regex\": \"Atlas A551\",\n \"model\": \"A551 Atlas\"\n },\n {\n \"regex\": \"A503 Joy\",\n \"model\": \"A503 Joy\"\n },\n {\n \"regex\": \"A504 Trace\",\n \"model\": \"A504 Trace\"\n },\n {\n \"regex\": \"A512 Harmony Pro\",\n \"model\": \"A512 Harmony Pro\"\n },\n {\n \"regex\": \"A510_Jeans_4G\",\n \"model\": \"A510 Jeans 4G\"\n },\n {\n \"regex\": \"A509_Jeans\",\n \"model\": \"A509 Jeans\"\n },\n {\n \"regex\": \"BRAVIS NEO\",\n \"model\": \"A401 Neo\"\n },\n {\n \"regex\": \"N1_550_Cruiser\",\n \"model\": \"N1-550 Cruiser\"\n },\n {\n \"regex\": \"BRAVIS OMEGA\",\n \"model\": \"Omega\"\n },\n {\n \"regex\": \"BRAVIS BIZ\",\n \"model\": \"Biz\"\n },\n {\n \"regex\": \"BRAVIS POWER\",\n \"model\": \"Power\"\n },\n {\n \"regex\": \"BRAVIS[ _]SPARK\",\n \"model\": \"Spark\"\n },\n {\n \"regex\": \"BRAVIS[ _]SLIM[ _]3G\",\n \"model\": \"Slim 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"NP 104 3G\",\n \"model\": \"NP104 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BRAVIS NP 103\",\n \"model\": \"NP103\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BRAVIS NP 844\",\n \"model\": \"NP844\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Bravis[_ ]([^;\\\\)]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(NB(?:106M|10[1-8]|751|7[145]|8[57]1|76)|NP101|NB961)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Acer\": {\n \"regex\": \"acer|(?<!Satellite |ZTE BLADE |ImSmart |ERGO |X-Style Tab )a(?:101|110|2[10]0|211|50[10]|51[10]|70[10])(?:[);/ ]|$)|Android.*V3[67]0(?:[);/ ]|$)|Android.*Z1[23456]0 Build|Android.*Z5\\\\d{2} Build|Android.*T0[234678] Build|Android.*S55(?:[);/ ]|$)|(?:A1-(713(HD)?|7[23]4|830|841|840FHD|81[01])|A3-A[1234][01]|B1-(7[1235-8][01](HD)?|7[23]3|7A0|8[1235]0|A71|860A)|TPA60W|B3-(A[125]0|A3[02]|A40FHD)|E39)(?:[);/ ]|$)|S5[12]0 Build|(DA[0-9]+HQ?L|Aspire (?:V5-121|XC-704G|V5-573G)|Chromebook 14 \\\\(CB3-431\\\\)|Predator G9-793|GT-810|B1-870|B3-A4[02]|B3-A50FHD)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"DA220HQL(?:[);/ ]|$)\",\n \"model\": \"DA220HQL\",\n \"device\": \"smart display\"\n },\n {\n \"regex\": \"DA241HL(?:[);/ ]|$)\",\n \"model\": \"DA241HL\",\n \"device\": \"smart display\"\n },\n {\n \"regex\": \"(DA[0-9]+HQ?L)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"smart display\"\n },\n {\n \"regex\": \"A1-81[01]\",\n \"model\": \"Iconia A\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TPA60W\",\n \"model\": \"TPA60W\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A1-84(1|0FHD)\",\n \"model\": \"Iconia Tab 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A1-713(HD)?\",\n \"model\": \"Iconia Tab 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A1-830\",\n \"model\": \"Iconia A1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A1-7[23]4\",\n \"model\": \"Iconia Talk S\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A3-A[12][01]\",\n \"model\": \"Iconia A3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A3-A[34]0\",\n \"model\": \"Iconia Tab 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"B1-7(?:[5678]0|30HD|A0)\",\n \"model\": \"Iconia One 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"B1-7[123][01]|B1-A71\",\n \"model\": \"Iconia B1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"B1-7[23]3\",\n \"model\": \"Iconia Talk 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"B1-8[123567]0\",\n \"model\": \"Iconia One 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"B3-A([125]0|3[02]|[45]0FHD|4[02])\",\n \"model\": \"Iconia One 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A101\",\n \"model\": \"Vangogh\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A200\",\n \"model\": \"Picasso E\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A50[01]\",\n \"model\": \"Picasso\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Acer One 7\",\n \"model\": \"One 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"GT-810\",\n \"model\": \"Predator 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"E39(?:[);/ ]|$)\",\n \"model\": \"Liquid E700\"\n },\n {\n \"regex\": \"E310(?:[);/ ]|$)\",\n \"model\": \"Liquid Mini\"\n },\n {\n \"regex\": \"E320(?:-orange)?(?:[);/ ]|$)\",\n \"model\": \"Liquid Express\"\n },\n {\n \"regex\": \"E310(?:[);/ ]|$)\",\n \"model\": \"beTouch E210\"\n },\n {\n \"regex\": \"Android.*V360(?:[);/ ]|$)\",\n \"model\": \"Liquid E1 Duo\"\n },\n {\n \"regex\": \"Android.*V370(?:[);/ ]|$)\",\n \"model\": \"Liquid E2 Duo\"\n },\n {\n \"regex\": \"S510(?:[);/ ]|$)\",\n \"model\": \"Liquid S1\"\n },\n {\n \"regex\": \"S520(?:[);/ ]|$)\",\n \"model\": \"Liquid S2\"\n },\n {\n \"regex\": \"(?:Acer_)?P400(?:[);/ ]|$)\",\n \"model\": \"neoTouch P400\"\n },\n {\n \"regex\": \"(?:Acer_)?P300(?:[);/ ]|$)\",\n \"model\": \"neoTouch P300\"\n },\n {\n \"regex\": \"(?:Acer_)?S200(?:[);/ ]|$)\",\n \"model\": \"neoTouch S200\"\n },\n {\n \"regex\": \"(?:Acer_)?E100(?:[);/ ]|$)\",\n \"model\": \"beTouch E100\"\n },\n {\n \"regex\": \"Android.*Z1([234])0(?:[);/ ]|$)\",\n \"model\": \"Liquid Z$1\"\n },\n {\n \"regex\": \"Android.*Z110(?:[);/ ]|$)\",\n \"model\": \"Liquid Z110\"\n },\n {\n \"regex\": \"Android.*Z150(?:[);/ ]|$)\",\n \"model\": \"Liquid Z5 Duo\"\n },\n {\n \"regex\": \"Android.*Z160(?:[);/ ]|$)\",\n \"model\": \"Liquid Z4 Duo\"\n },\n {\n \"regex\": \"Android.*Z(5\\\\d{2})(?:[);/ ]|$)\",\n \"model\": \"Liquid Z$1\"\n },\n {\n \"regex\": \"Android.*S57(?:[);/ ]|$)\",\n \"model\": \"Liquid Jade Z\"\n },\n {\n \"regex\": \"Android.*T02(?:[);/ ]|$)\",\n \"model\": \"Liquid Z530\"\n },\n {\n \"regex\": \"Android.*T03(?:[);/ ]|$)\",\n \"model\": \"Liquid Z630\"\n },\n {\n \"regex\": \"Android.*T04(?:[);/ ]|$)\",\n \"model\": \"Liquid Z630S\"\n },\n {\n \"regex\": \"Android.*T06(?:[);/ ]|$)\",\n \"model\": \"Liquid Zest\"\n },\n {\n \"regex\": \"Android.*T07(?:[);/ ]|$)\",\n \"model\": \"Liquid Zest 4G\"\n },\n {\n \"regex\": \"Android.*T08(?:[);/ ]|$)\",\n \"model\": \"Liquid Zest Plus\"\n },\n {\n \"regex\": \"TM01(?:[);/ ]|$)\",\n \"model\": \"Liquid M330\"\n },\n {\n \"regex\": \"M220(?:[);/ ]|$)\",\n \"model\": \"Liquid M220\"\n },\n {\n \"regex\": \"AcerTD600\",\n \"model\": \"TD600\"\n },\n {\n \"regex\": \"Android.*S55(?:[);/ ]|$)\",\n \"model\": \"Liquid Jade\"\n },\n {\n \"regex\": \"(?:Acer )?(Chromebook R1[13])\",\n \"model\": \"$1\",\n \"device\": \"desktop\"\n },\n {\n \"regex\": \"(?:Acer )?(Chromebook 14)\",\n \"model\": \"$1\",\n \"device\": \"desktop\"\n },\n {\n \"regex\": \"(Aspire (?:V5-121|XC-704G|V5-573G|A515-51G))\",\n \"model\": \"$1\",\n \"device\": \"desktop\"\n },\n {\n \"regex\": \"(Predator G9-793|Aspire E5-511)\",\n \"model\": \"$1\",\n \"device\": \"desktop\"\n },\n {\n \"regex\": \"Acer; ?([^;\\\\(\\\\)/]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Acer(?! ?inc)[ _\\\\-]?([^;\\\\(\\\\)/]+)[();/ ]\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"acer[\\\\-_]([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"a(101|110|2[10]0|211|50[10]|51[10]|70[10])(?:[);/ ]|$)\",\n \"model\": \"Iconia Tab A$1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Advan\": {\n \"regex\": \"(?:ADVAN (?:M4|S40)|i7U|S45E|S50H|I7D|i55[KD]|i4U|S7D|S4Z|i5[KE]|S5E[ _]NXT|S5J\\\\+|S4\\\\+)(?:[);/ ]|$)|[ ](?:50(?:[46]1|59)|600[24])(?: Build|\\\\) AppleWebKit)|(?:E1C_3G)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ADVAN M4\",\n \"model\": \"M4\"\n },\n {\n \"regex\": \"ADVAN S40\",\n \"model\": \"S40\"\n },\n {\n \"regex\": \"i7U\",\n \"model\": \"I Lite i7U\"\n },\n {\n \"regex\": \"S5E[ _]NXT\",\n \"model\": \"S5E NXT\"\n },\n {\n \"regex\": \"i(55[KD]|5[KE])\",\n \"model\": \"I$1\"\n },\n {\n \"regex\": \"i4U\",\n \"model\": \"I4U\"\n },\n {\n \"regex\": \" 6004(?: Build|\\\\) AppleWebKit)\",\n \"model\": \"G2 Pro\"\n },\n {\n \"regex\": \" 6002(?: Build|\\\\) AppleWebKit)\",\n \"model\": \"G3 Pro\"\n },\n {\n \"regex\": \"(S45E|50[46]1|5059|S50H|I7D|S7D|S4Z|S5J\\\\+|S4\\\\+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"E1C_3G\",\n \"device\": \"tablet\",\n \"model\": \"E1C 3G\"\n }\n ]\n },\n \"Advance\": {\n \"regex\": \"Hollogram|(?:HL(?:4936|6246|[56]575|5[67]67)|IntroTr3544|Pr(?:61(?:4[56]|50)|60[27]0|5[69]50)|Tr3845)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IntroTr3544|Tr3845\",\n \"model\": \"Intro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Pr(61(?:4[56]|50)|60[27]0|5[69]50)\",\n \"model\": \"Prime PR$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HL(4936|6246|[56]575|5[67]67)\",\n \"model\": \"Hollogram HL$1\"\n },\n {\n \"regex\": \"Hollogram ([^;/)]+)(?: Build|[;)])\",\n \"model\": \"Hollogram $1\"\n }\n ]\n },\n \"AGM\": {\n \"regex\": \"AGM ([^/;)]+)(?: Build|[;)])\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Airness\": {\n \"regex\": \"AIRNESS-([\\\\w]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Aiwa\": {\n \"regex\": \"(?:AW790|M300|AWM(?:533|50[19]|561)|AW500)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AW790(?:[);/ ]|$)\",\n \"model\": \"AW790\"\n },\n {\n \"regex\": \"AW500(?:[);/ ]|$)\",\n \"model\": \"AW500\"\n },\n {\n \"regex\": \"AWM(533|50[19]|561)(?:[);/ ]|$)\",\n \"model\": \"AWM$1\"\n },\n {\n \"regex\": \"M300(?:[);/ ]|$)\",\n \"model\": \"M300\",\n \"device\": \"phablet\"\n }\n ]\n },\n \"Akai\": {\n \"regex\": \"AKAI,|Akai[ _-]|Eco[ _]E2|Glory[ _](?:G[1235]|L[123]|O[125])|TAB-[79]8[03]0Q?|X6 METAL|AKTB-703MZ\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TAB-([79]8[03]0Q?)\",\n \"device\": \"tablet\",\n \"model\": \"TAB $1\"\n },\n {\n \"regex\": \"AKTB-703MZ\",\n \"device\": \"tablet\",\n \"model\": \"AKTB-703MZ\"\n },\n {\n \"regex\": \"X6 METAL\",\n \"model\": \"iLike\"\n },\n {\n \"regex\": \"Glory[ _](G[1235]|L[123]|O[125])\",\n \"model\": \"Glory $1\"\n },\n {\n \"regex\": \"Eco[ _]E2\",\n \"model\": \"Eco E2\"\n },\n {\n \"regex\": \"Akai[ _-]([^;/)]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"AKAI,(AK3219NF)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Si2157LG32\",\n \"device\": \"tv\",\n \"model\": \"Si2157LG32\"\n }\n ]\n },\n \"Arian Space\": {\n \"regex\": \"Arian Space\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"100 ST1004PG\",\n \"model\": \"100\"\n },\n {\n \"regex\": \"80 SS8003PG\",\n \"model\": \"80\"\n },\n {\n \"regex\": \"71 ST7002PG\",\n \"model\": \"71\"\n },\n {\n \"regex\": \"70 ST7001RW\",\n \"model\": \"70\"\n }\n ]\n },\n \"Alcatel\": {\n \"regex\": \"Alcatel|Alc(?!or )[a-z0-9]+|One[ _]?Touch|idol3|TIMXL|(?:(?:4003[AJ]|4009[ADEFIKMSX]|4013[DEJKMX]|4014[ADEKMX]|4015[ADNTX]|4016[ADX]|4017[ADEFSX]|4018[ADEFMX]|4024[EDX]|4027[ADNX]|4028[AEJS]|4032[ADEX]|4034[ADEFGXTL]|4035[ADXY]|4045[ADEX]|4047[ADFGNX]|4049[DEGMX]|4060[SW]|A466BG|A621BL|4114E|4087U|5001[ADJTU]|5002[ADFH]|5003[ADGU]|5006D|5007[AU]|5008[ADUYT]|5009[AD]|5010[DEGSUX]|5011A|5012[DFG]|5015[ADEX]|5016[AXJ]|5017[ABDEOX]|5019D|5022[EDX]|5023[EF]|5024[ADJF]|5025[DEG]|5026[ADJ]|5027B|5028[AYD]|5029[EYD]|5030[DE]|5032W|5033[AEFXDJGMOTXYQS]|5034D|5036D|5038[ADEX]|5039[DY]|5041[CD]|5042[ADEFGWXT]|5044[ADGIKOPSTY]|5045[ADFGIJTXY]|5046[ADGIJSTUY]|5047[DIUY]|5048[AYUI]|5049[EGSWZ]|5050[ASXY]|5051[ADEJMTWX]|5052[ADY]|5053[ADKY]|5054[ADNSTWX]|5056[ADEGIJMNTUWX]|5057M|5058[AIY]|5059[ADJXYZIST]|5060[ADJ]|5061[KU]|5065[ADNWX]|5070D|5080[ADFQUX]|5085[ABCDGHIJNOQY]|5086[ADY]|5090[AIY]|5095[IKY]|5098[OS]|5099[ADYUI]|5116J|5145A|6016[ADEX]|6036[AXY]|6037[BKY]|6039[AHJKY]|6042D|6043[AD]|6044D|6045[BFIKOYX]|6050[AFY]|6055[ABDHIKPUYZ]|6058[ADX]|6060[SX]|6062W|6070K|7040[ADEFKRT]|7041[DX]|7042A|7043[AEKY]|7044[AX]|7045Y|7048[ASWX]|7053D|7055A|7070X|7071[ADX]|8030Y|8050[DEGX]|8063|8088[XQM]|9001[DIX]|9002X|9003[AX]|9024O|9005X|9026X|9007[ATX]|9008[ADIJNTUX]|9009G|9010X|9020A|9022X|9027[FTWX]|9029Z|9203A|A(?:464BG|570BL|50[13]DL|57[17]VL|574BL)|I213|I216X|(?<!\\\\.)80(?:82|6[78])|A576CC)(?:_(?:EEA|RU))?|P360X)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"4087U\",\n \"model\": \"1SE Light\"\n },\n {\n \"regex\": \"5022[EDX]|5070D\",\n \"model\": \"One Touch Pop Star\"\n },\n {\n \"regex\": \"6044D\",\n \"model\": \"One Touch Pop Up\"\n },\n {\n \"regex\": \"4015[ATX]|4016A\",\n \"model\": \"One Touch Pop C1\"\n },\n {\n \"regex\": \"4015[DN]|4016[DX]\",\n \"model\": \"One Touch Pop C1 Dual SIM\"\n },\n {\n \"regex\": \"4032[AX]\",\n \"model\": \"One Touch Pop C2\"\n },\n {\n \"regex\": \"4032[DE]\",\n \"model\": \"One Touch Pop C2 Dual SIM\"\n },\n {\n \"regex\": \"5036D\",\n \"model\": \"One Touch Pop C5 Dual SIM\"\n },\n {\n \"regex\": \"7040[AFK]|7041X|7042A\",\n \"model\": \"One Touch Pop C7\"\n },\n {\n \"regex\": \"7040[DE]|7041D\",\n \"model\": \"One Touch Pop C7 Dual SIM\"\n },\n {\n \"regex\": \"4018[ADEFMX]\",\n \"model\": \"One Touch Pop D1\"\n },\n {\n \"regex\": \"4035[ADXY]\",\n \"model\": \"One Touch Pop D3\"\n },\n {\n \"regex\": \"5038[ADEX]\",\n \"model\": \"One Touch Pop D5\"\n },\n {\n \"regex\": \"4045[AX]\",\n \"model\": \"One Touch Pop 2 4\\\"\"\n },\n {\n \"regex\": \"4045[DE]\",\n \"model\": \"One Touch Pop 2 4\\\" Dual SIM\"\n },\n {\n \"regex\": \"5042[AFGWX]\",\n \"model\": \"One Touch Pop 2 4.5\\\"\"\n },\n {\n \"regex\": \"5042[DE]\",\n \"model\": \"One Touch Pop 2 4.5\\\" Dual SIM\"\n },\n {\n \"regex\": \"7043[AY]|7044[AX]\",\n \"model\": \"One Touch Pop 2 5\\\"\"\n },\n {\n \"regex\": \"7043[EK]\",\n \"model\": \"One Touch Pop 2 5\\\" Dual SIM\"\n },\n {\n \"regex\": \"50[16]5X\",\n \"model\": \"One Touch Pop 3\"\n },\n {\n \"regex\": \"5015[AE]|5016[AJ]|5065[ADWX]|5116J\",\n \"model\": \"One Touch Pop 3 5\\\"\"\n },\n {\n \"regex\": \"5025[DEG]|5054[ADSTX]\",\n \"model\": \"One Touch Pop 3 5.5\\\"\"\n },\n {\n \"regex\": \"5015D\",\n \"model\": \"One Touch Pop 3 Dual SIM\"\n },\n {\n \"regex\": \"5051[AEJMTWX]\",\n \"model\": \"One Touch Pop 4\"\n },\n {\n \"regex\": \"5051D\",\n \"model\": \"One Touch Pop 4 Dual SIM\"\n },\n {\n \"regex\": \"5095[IKY]\",\n \"model\": \"One Touch Pop 4S\"\n },\n {\n \"regex\": \"5056[ADEGJMTUX]\",\n \"model\": \"One Touch Pop 4+\"\n },\n {\n \"regex\": \"7070X\",\n \"model\": \"One Touch Pop 4 6\\\"\"\n },\n {\n \"regex\": \"5057M\",\n \"model\": \"One Touch Pop Mirage\"\n },\n {\n \"regex\": \"5050[ASXY]\",\n \"model\": \"One Touch Pop S3\"\n },\n {\n \"regex\": \"7045Y\",\n \"model\": \"One Touch Pop S7\"\n },\n {\n \"regex\": \"6037[BKY]\",\n \"model\": \"One Touch Idol 2\"\n },\n {\n \"regex\": \"5042T\",\n \"model\": \"One Touch Astro\"\n },\n {\n \"regex\": \"5027B\",\n \"model\": \"One Touch Dawn\"\n },\n {\n \"regex\": \"5024[ADF]|5028Y\",\n \"model\": \"1S\"\n },\n {\n \"regex\": \"7071[ADX]\",\n \"model\": \"A7 XL\"\n },\n {\n \"regex\": \"5002[ADH]\",\n \"model\": \"1B (2020)\"\n },\n {\n \"regex\": \"4034T\",\n \"model\": \"1E\"\n },\n {\n \"regex\": \"5002F\",\n \"model\": \"1A (2020)\"\n },\n {\n \"regex\": \"5034D\",\n \"model\": \"3L\"\n },\n {\n \"regex\": \"A576CC\",\n \"model\": \"Kora A576CC\"\n },\n {\n \"regex\": \"7040[RT]\",\n \"model\": \"One Touch Fierce 2\"\n },\n {\n \"regex\": \"5056[NW]\",\n \"model\": \"One Touch Fierce 4\"\n },\n {\n \"regex\": \"5054N\",\n \"model\": \"One Touch Fierce XL\"\n },\n {\n \"regex\": \"6042D\",\n \"model\": \"One Touch Flash\"\n },\n {\n \"regex\": \"6016[AX]\",\n \"model\": \"One Touch Idol 2 mini\"\n },\n {\n \"regex\": \"6016[DE]\",\n \"model\": \"One Touch Idol 2 mini Dual SIM\"\n },\n {\n \"regex\": \"6036[AXY]\",\n \"model\": \"One Touch Idol 2 mini S\"\n },\n {\n \"regex\": \"6050[AFY]\",\n \"model\": \"One Touch Idol 2S\"\n },\n {\n \"regex\": \"6039[AHJKY]|idol3\",\n \"model\": \"One Touch Idol 3\"\n },\n {\n \"regex\": \"6045[BFIKOYX]\",\n \"model\": \"One Touch Idol 3 5.5\\\"\"\n },\n {\n \"regex\": \"6055[ABDHIKPUYZ]\",\n \"model\": \"One Touch Idol 4\"\n },\n {\n \"regex\": \"6070K\",\n \"model\": \"One Touch Idol 4S\"\n },\n {\n \"regex\": \"6058[ADX]\",\n \"model\": \"One Touch Idol 5\"\n },\n {\n \"regex\": \"6060[SX]\",\n \"model\": \"One Touch Idol 5S\"\n },\n {\n \"regex\": \"6043[AD]\",\n \"model\": \"One Touch Idol X+\"\n },\n {\n \"regex\": \"8030Y\",\n \"model\": \"One Touch Hero 2\"\n },\n {\n \"regex\": \"7055A\",\n \"model\": \"One Touch Hero 2C\"\n },\n {\n \"regex\": \"7053D\",\n \"model\": \"One Touch X1\"\n },\n {\n \"regex\": \"5065N\",\n \"model\": \"TRU\"\n },\n {\n \"regex\": \"A574BL\",\n \"model\": \"Raven\"\n },\n {\n \"regex\": \"A577VL\",\n \"model\": \"Zip\"\n },\n {\n \"regex\": \"A466BG\",\n \"model\": \"Pixi Unite\"\n },\n {\n \"regex\": \"5056I\",\n \"model\": \"One Touch Optus X Smart\"\n },\n {\n \"regex\": \"A570BL\",\n \"model\": \"One Touch Pixi Avion LTE\"\n },\n {\n \"regex\": \"A571VL\",\n \"model\": \"One Touch Pixi Avion 4G LTE\"\n },\n {\n \"regex\": \"4024[DEX]\",\n \"model\": \"One Touch Pixi First\"\n },\n {\n \"regex\": \"A464BG\",\n \"model\": \"One Touch Pixi Glitz\"\n },\n {\n \"regex\": \"A621BL\",\n \"model\": \"One Touch Pixi Glory\"\n },\n {\n \"regex\": \"4014D\",\n \"model\": \"One Touch Pixi 2\"\n },\n {\n \"regex\": \"4009[AFIKMSX]\",\n \"model\": \"One Touch Pixi 3 3.5\\\"\"\n },\n {\n \"regex\": \"4009[DE]\",\n \"model\": \"One Touch Pixi 3 3.5\\\" Dual SIM\"\n },\n {\n \"regex\": \"4003[AJ]|4013[DEJKMX]|4014[AEKMX]|4114E\",\n \"model\": \"One Touch Pixi 3 4\\\"\"\n },\n {\n \"regex\": \"4027[ADNX]|4028[AEJS]|5019D\",\n \"model\": \"One Touch Pixi 3 4.5\\\"\"\n },\n {\n \"regex\": \"5017[ABDEOX]\",\n \"model\": \"One Touch Pixi 3 4.5\\\" 4G\"\n },\n {\n \"regex\": \"9002X\",\n \"model\": \"One Touch Pixi 3 7\\\"\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"9007A\",\n \"model\": \"One Touch Pixi 3 7\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9007[TX]\",\n \"model\": \"One Touch Pixi 3 7\\\" 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9009G\",\n \"model\": \"1T\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?!<\\\\.)8082(?:_(?:EEA|RU))?(?:[);/ ]|$)\",\n \"model\": \"1T 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?!<\\\\.)806[78](?:_(?:EEA|RU))?(?:[);/ ]|$)\",\n \"model\": \"1T 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9022X\",\n \"model\": \"One Touch Pixi 3 8\\\"\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"9010X\",\n \"model\": \"One Touch Pixi 3 10\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"4017[ADEFSX]\",\n \"model\": \"One Touch Pixi 4 3.5\\\"\"\n },\n {\n \"regex\": \"4034[ADEFGXL]\",\n \"model\": \"One Touch Pixi 4 4\\\"\"\n },\n {\n \"regex\": \"4060[SW]\",\n \"model\": \"One Touch Pixi 4 4.5\\\"\"\n },\n {\n \"regex\": \"5023[EF]\",\n \"model\": \"One Touch Pixi 4 Plus Power\"\n },\n {\n \"regex\": \"5010[DEGSUX]\",\n \"model\": \"One Touch Pixi 4 5\\\" 3G\"\n },\n {\n \"regex\": \"5041D\",\n \"model\": \"One Touch Pixi 4 5.0\\\"\"\n },\n {\n \"regex\": \"5012[DFG]\",\n \"model\": \"One Touch Pixi 4 5.5\\\" 3G\"\n },\n {\n \"regex\": \"5045[ADFGIJTXY]|5145A\",\n \"model\": \"One Touch Pixi 4 5\\\" 4G\"\n },\n {\n \"regex\": \"5098O\",\n \"model\": \"One Touch Pixi Theatre\"\n },\n {\n \"regex\": \"A501DL\",\n \"model\": \"A1\"\n },\n {\n \"regex\": \"A503DL\",\n \"model\": \"A1X\"\n },\n {\n \"regex\": \"5046[ADIJTUY]\",\n \"model\": \"A3\"\n },\n {\n \"regex\": \"5011A|5049[EG]\",\n \"model\": \"A3 Plus\"\n },\n {\n \"regex\": \"9008[ADIJNTUX]\",\n \"model\": \"A3 XL\"\n },\n {\n \"regex\": \"9203A\",\n \"model\": \"A3 7\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9027[FTWX]\",\n \"model\": \"3T 8.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9026X\",\n \"model\": \"A3 10\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"5085[BQ]\",\n \"model\": \"A5\"\n },\n {\n \"regex\": \"5085[ADHIJY]\",\n \"model\": \"A5 LED\"\n },\n {\n \"regex\": \"5085N\",\n \"model\": \"A5 Max LED\"\n },\n {\n \"regex\": \"5090[AIY]\",\n \"model\": \"A7\"\n },\n {\n \"regex\": \"5046[GS]\",\n \"model\": \"A30\"\n },\n {\n \"regex\": \"5049S\",\n \"model\": \"A30 Plus\"\n },\n {\n \"regex\": \"5049Z\",\n \"model\": \"A30 Fierce\"\n },\n {\n \"regex\": \"5085[GO]\",\n \"model\": \"A50\"\n },\n {\n \"regex\": \"5048[AYUI]\",\n \"model\": \"3X (2019)\"\n },\n {\n \"regex\": \"5049W\",\n \"model\": \"Revvl\"\n },\n {\n \"regex\": \"8050[GX]\",\n \"model\": \"One Touch Pixi 4 6\\\" 3G\"\n },\n {\n \"regex\": \"8050[ED]\",\n \"model\": \"One Touch Pixi 4 6\\\" 3G Dual SIM\"\n },\n {\n \"regex\": \"5098S|9001[DIX]\",\n \"model\": \"One Touch Pixi 4 6\\\" 4G\"\n },\n {\n \"regex\": \"9003[AX]\",\n \"model\": \"One Touch Pixi 4 7\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"8063\",\n \"model\": \"One Touch Pixi 4 7\\\" WiFi\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9024O\",\n \"model\": \"One Touch Pixi 5\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"I216X\",\n \"model\": \"One Touch Pixi 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"I213\",\n \"model\": \"One Touch Pixi 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9005X\",\n \"model\": \"One Touch Pixi 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P320X\",\n \"model\": \"One Touch POP 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P310X\",\n \"model\": \"One Touch POP 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9020A\",\n \"model\": \"One Touch Trek HD\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"7048[ASWX]\",\n \"model\": \"One Touch Go Play\"\n },\n {\n \"regex\": \"(?:Alcatel-)?OT-802\",\n \"model\": \"Wave\"\n },\n {\n \"regex\": \"ALCATEL_ONE_TOUCH_768T\",\n \"model\": \"Island\"\n },\n {\n \"regex\": \"(?:TRIBE_)?3075A\",\n \"model\": \"One Touch Tribe\"\n },\n {\n \"regex\": \"ALCATEL_one_touch_585\",\n \"model\": \"One Touch 585\"\n },\n {\n \"regex\": \"ALCATEL_ONE_TOUCH_838\",\n \"model\": \"One Touch 838\"\n },\n {\n \"regex\": \"ALCATEL_one_touch_813d\",\n \"model\": \"One Touch 813D\"\n },\n {\n \"regex\": \"ALCATEL_one_touch_813\",\n \"model\": \"One Touch 813\"\n },\n {\n \"regex\": \"OT871A\",\n \"model\": \"One Touch 871A\"\n },\n {\n \"regex\": \"P360X\",\n \"model\": \"One Touch Pop 10\"\n },\n {\n \"regex\": \"(?:Alcatel[ _])?One[ _]?Touch[ _]((?:T[0-9]+|TAB[^/;]+|EVO[78](?:HD)?)) Build\",\n \"device\": \"tablet\",\n \"model\": \"One Touch $1\"\n },\n {\n \"regex\": \"(?:Alcatel[ _])?One[ _]?Touch([^/;]*) Build\",\n \"model\": \"One Touch$1\"\n },\n {\n \"regex\": \"(?:Alcatel[ _])?One[ _]?Touch([^/;\\\\)]*)\\\\)\",\n \"model\": \"One Touch$1\"\n },\n {\n \"regex\": \"5080[ADFQUX]\",\n \"model\": \"Shine Lite\"\n },\n {\n \"regex\": \"TIMXL\",\n \"model\": \"TIM XL\"\n },\n {\n \"regex\": \"5085C\",\n \"model\": \"PulseMix\"\n },\n {\n \"regex\": \"4049[DEGMX]\",\n \"model\": \"U3\"\n },\n {\n \"regex\": \"5044[ADIKOPTY]\",\n \"model\": \"U5\"\n },\n {\n \"regex\": \"4047[DFXN]\",\n \"model\": \"U5 3G\"\n },\n {\n \"regex\": \"5047[DIUY]\",\n \"model\": \"U5 HD\"\n },\n {\n \"regex\": \"4047G\",\n \"model\": \"U5 Lite\"\n },\n {\n \"regex\": \"4047A\",\n \"model\": \"U5 Plus\"\n },\n {\n \"regex\": \"4044[CV]\",\n \"model\": \"Quick Flip\"\n },\n {\n \"regex\": \"4044O\",\n \"model\": \"Cingular Flip 2\"\n },\n {\n \"regex\": \"(?:Alcatel)?4044[MNT]\",\n \"model\": \"Go Flip\"\n },\n {\n \"regex\": \"5044[GS]\",\n \"model\": \"U50\"\n },\n {\n \"regex\": \"5033[ADXJEFGMOTXYQS]\",\n \"model\": \"1\"\n },\n {\n \"regex\": \"5009[AD]\",\n \"model\": \"1C\"\n },\n {\n \"regex\": \"5008[ADUYT]\",\n \"model\": \"1X (2019)\"\n },\n {\n \"regex\": \"5007[AU]\",\n \"model\": \"1V (2020)\"\n },\n {\n \"regex\": \"5003[ADGU]\",\n \"model\": \"1C (2019)\"\n },\n {\n \"regex\": \"5006D\",\n \"model\": \"3C (2019)\"\n },\n {\n \"regex\": \"5024J\",\n \"model\": \"1S\"\n },\n {\n \"regex\": \"5028[AD]\",\n \"model\": \"1S (2020)\"\n },\n {\n \"regex\": \"5030[DE]\",\n \"model\": \"1SE (2020)\"\n },\n {\n \"regex\": \"5001[ADJTU]\",\n \"model\": \"1V\"\n },\n {\n \"regex\": \"5059[ADJXYZIT]\",\n \"model\": \"1X\"\n },\n {\n \"regex\": \"5059S\",\n \"model\": \"Avalon V\"\n },\n {\n \"regex\": \"5060[ADJ]\",\n \"model\": \"5V\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"5052[ADY]|5053[ADKY]\",\n \"model\": \"3\"\n },\n {\n \"regex\": \"5029E\",\n \"model\": \"3 (2020)\"\n },\n {\n \"regex\": \"5029[DY]\",\n \"model\": \"3L (2020)\"\n },\n {\n \"regex\": \"5032W|5099[ADYUI]\",\n \"model\": \"3V\"\n },\n {\n \"regex\": \"5026[ADJ]\",\n \"model\": \"3C\"\n },\n {\n \"regex\": \"5039[DY]\",\n \"model\": \"3L\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"5058[AIY]\",\n \"model\": \"3X\"\n },\n {\n \"regex\": \"5061[KU]\",\n \"model\": \"3X (2020)\"\n },\n {\n \"regex\": \"5086[ADY]\",\n \"model\": \"5\"\n },\n {\n \"regex\": \"6062W\",\n \"model\": \"7\"\n },\n {\n \"regex\": \"8088[XQM]\",\n \"model\": \"3T 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9029Z\",\n \"model\": \"Joy Tab\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"9029Z\",\n \"model\": \"Joy Tab\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Alcatel UP\",\n \"model\": \"\"\n },\n {\n \"regex\": \"(?:ALCATEL_)?A383G\",\n \"model\": \"Big Easy Plus\"\n },\n {\n \"regex\": \"5041C\",\n \"model\": \"TETRA\"\n },\n {\n \"regex\": \"ALCATEL([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ALCATEL[ \\\\-]?([^/;\\\\)]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ALCATEL_([^/;\\\\)]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Alc([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Allview\": {\n \"regex\": \"Allview|A4You|H1003_LTE_PRO|A5_(?:Easy(?:_TM)?|Ready(?:_TM)?|Quad|Quad_Plus_TM)|A[5-9]_Lite|A5Smiley|A6_Duo|A10_Lite_2019|A10_(?:Plus|Max)|AX2_Frenzy|AX4Nano|AX5NanoQ|C6_Duo|E[23]_Living|E3_(?:Jump|Sign)|E4_Lite|M9_Connect|P(?:43_Easy|[5689]_Energy|6_Energy_Lite|[68]_Energy_Mini(?:_TM)?|(41|[458])_eMagic(?:_TM)?|[589](?:_)?Life(?:_TM)?|[567]_Lite(?:_TM)?|6_plus|[45678]_Pro|7_Seon|10_Life|10_Max|10_Style|7_Xtreme|6_Qmax|4_Quad)|V(?:[134]_Viper|1_Viper_I|2_Viper_(?:E|I|S|X|X_plus|Xe))|X4_Soul_Vision|X(?:[1-46]_Soul_Xtreme|[1-5]_Soul|3_Soul_Lite|[2-6]_Soul_Mini(?:_TM)?|4_Soul_Mini_S(?:_TM)?|[2-5]_Soul_Style(?:_TM)?|2_Soul_Style_Plus|2_Twin)|Viva_(?:H801|100[13]G|(?:H100[12]|H701|H802)_LTE|C701|i701G)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"A4You\",\n \"model\": \"A4 You\"\n },\n {\n \"regex\": \"AX2_Frenzy\",\n \"model\": \"AX2 Frenzy\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AX4Nano\",\n \"model\": \"AX4 Nano\"\n },\n {\n \"regex\": \"AX5NanoQ\",\n \"model\": \"AX5 Nano Q\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"C6_Duo\",\n \"model\": \"C6 Duo\"\n },\n {\n \"regex\": \"E([23])_Living\",\n \"model\": \"E$1 Living\"\n },\n {\n \"regex\": \"E3_Jump\",\n \"model\": \"E3 Jump\"\n },\n {\n \"regex\": \"E3_Sign\",\n \"model\": \"E3 Sign\"\n },\n {\n \"regex\": \"E4_Lite\",\n \"model\": \"E4 Lite\"\n },\n {\n \"regex\": \"M9_Connect\",\n \"model\": \"M9 Connect\"\n },\n {\n \"regex\": \"P43_Easy\",\n \"model\": \"P43 Easy\"\n },\n {\n \"regex\": \"P(41|[458])_eMagic(?:_TM)?\",\n \"model\": \"P$1 eMagic\"\n },\n {\n \"regex\": \"P([567])_Lite(?:_TM)?\",\n \"model\": \"P$1 Lite\"\n },\n {\n \"regex\": \"P6_plus\",\n \"model\": \"P6 Plus\"\n },\n {\n \"regex\": \"P6_Qmax\",\n \"model\": \"P6 Qmax\"\n },\n {\n \"regex\": \"P([45678])_Pro\",\n \"model\": \"P$1 Pro\"\n },\n {\n \"regex\": \"P4_Quad\",\n \"model\": \"P4 Quad\"\n },\n {\n \"regex\": \"P9_Energy_Lite_2017\",\n \"model\": \"P9 Energy Lite (2017)\"\n },\n {\n \"regex\": \"P9_Energy_S\",\n \"model\": \"P9 Energy S\"\n },\n {\n \"regex\": \"P([69])_Energy_Lite\",\n \"model\": \"P$1 Energy Lite\"\n },\n {\n \"regex\": \"P8_Energy_PRO\",\n \"model\": \"P8 Energy Pro\"\n },\n {\n \"regex\": \"P([689])_Energy_mini(?:_TM)?\",\n \"model\": \"P$1 Energy Mini\"\n },\n {\n \"regex\": \"P([5689])_Energy\",\n \"model\": \"P$1 Energy\"\n },\n {\n \"regex\": \"P7_Seon\",\n \"model\": \"P7 Seon\"\n },\n {\n \"regex\": \"P7_Xtreme\",\n \"model\": \"P7 Xtreme\"\n },\n {\n \"regex\": \"P([589])(?:_)?Life(?:_TM)?\",\n \"model\": \"P$1 Life\"\n },\n {\n \"regex\": \"P10_Life\",\n \"model\": \"P10 Life\"\n },\n {\n \"regex\": \"P10_Max\",\n \"model\": \"P10 Max\"\n },\n {\n \"regex\": \"P10_Style\",\n \"model\": \"P10 Style\"\n },\n {\n \"regex\": \"V([12])_Viper_I4G(?:_TM)?\",\n \"model\": \"V$1 Viper I 4G\"\n },\n {\n \"regex\": \"V1_Viper_I\",\n \"model\": \"V1 Viper I\"\n },\n {\n \"regex\": \"V([134])_Viper\",\n \"model\": \"V$1 Viper\"\n },\n {\n \"regex\": \"V2_Viper_X_plus\",\n \"model\": \"V2 Viper X Plus\"\n },\n {\n \"regex\": \"V2_Viper_(E|I|S|X(?:e)?)\",\n \"model\": \"V2 Viper $1\"\n },\n {\n \"regex\": \"X4_Soul_Vision\",\n \"model\": \"X4 Soul Vision\"\n },\n {\n \"regex\": \"X([1246])_Soul_Xtreme\",\n \"model\": \"X$1 Soul Xtreme\"\n },\n {\n \"regex\": \"X4_Soul_Infinity_(L|N|S|Z)\",\n \"model\": \"X4 Soul Infinity $1\"\n },\n {\n \"regex\": \"X([34])_Soul_Lite\",\n \"model\": \"X$1 Soul Lite\"\n },\n {\n \"regex\": \"X4_Soul_Mini_S(?:_TM)?\",\n \"model\": \"X4 Soul Mini S\"\n },\n {\n \"regex\": \"X([23456])_Soul_Mini(?:_TM)?\",\n \"model\": \"X$1 Soul Mini\"\n },\n {\n \"regex\": \"X3_Soul_PLUS\",\n \"model\": \"X3 Soul Plus\"\n },\n {\n \"regex\": \"X([35])_Soul_Pro\",\n \"model\": \"X$1 Soul Pro\"\n },\n {\n \"regex\": \"X2_Soul_Style_Plus\",\n \"model\": \"X2 Soul Style Plus\"\n },\n {\n \"regex\": \"X([2345])_Soul_Style(?:_TM)?\",\n \"model\": \"X$1 Soul Style\"\n },\n {\n \"regex\": \"X([12345])_Soul\",\n \"model\": \"X$1 Soul\"\n },\n {\n \"regex\": \"X2_Twin\",\n \"model\": \"X2 Twin\"\n },\n {\n \"regex\": \"A5_Easy(?:_TM)?\",\n \"model\": \"A5 Easy\"\n },\n {\n \"regex\": \"A([56789])_Lite\",\n \"model\": \"A$1 Lite\"\n },\n {\n \"regex\": \"A5_Ready(?:_TM)?\",\n \"model\": \"A5 Ready\"\n },\n {\n \"regex\": \"A5Smiley\",\n \"model\": \"A5 Smiley\"\n },\n {\n \"regex\": \"A5_Quad_Plus_TM\",\n \"model\": \"A5 Quad Plus\"\n },\n {\n \"regex\": \"A5_Quad\",\n \"model\": \"A5 Quad\"\n },\n {\n \"regex\": \"A6_Duo\",\n \"model\": \"A6 Duo\"\n },\n {\n \"regex\": \"A10_Lite_2019\",\n \"model\": \"A10 Lite (2019)\"\n },\n {\n \"regex\": \"A10_Plus\",\n \"model\": \"A10 Plus\"\n },\n {\n \"regex\": \"A10_Max\",\n \"model\": \"A10 Max\"\n },\n {\n \"regex\": \"Impera S\",\n \"model\": \"Impera S\"\n },\n {\n \"regex\": \"ALLVIEW P4i\",\n \"model\": \"AllDro P4\"\n },\n {\n \"regex\": \"Allview_P2\",\n \"model\": \"AllDro\"\n },\n {\n \"regex\": \"AllviewCityPlus\",\n \"device\": \"tablet\",\n \"model\": \"City Plus\"\n },\n {\n \"regex\": \"AllviewCity\",\n \"device\": \"tablet\",\n \"model\": \"City\"\n },\n {\n \"regex\": \"AllviewAX2Frenzy\",\n \"device\": \"tablet\",\n \"model\": \"AX2 Frenzy\"\n },\n {\n \"regex\": \"Allview2SpeedDuo\",\n \"device\": \"tablet\",\n \"model\": \"Alldro 2 Speed Duo\"\n },\n {\n \"regex\": \"Allview3SpeedQuad\",\n \"device\": \"tablet\",\n \"model\": \"Alldro 3 Speed Quad\"\n },\n {\n \"regex\": \"H1003_LTE_PRO\",\n \"device\": \"tablet\",\n \"model\": \"Viva H1003 LTE Pro\"\n },\n {\n \"regex\": \"Viva_(H801|100[13]G|(?:H802|H100[12]|H701)_LTE|C701|i701G)\",\n \"device\": \"tablet\",\n \"model\": \"Viva $1\"\n },\n {\n \"regex\": \"ALLVIEW ?SPEEDI\",\n \"device\": \"tablet\",\n \"model\": \"Speed I\"\n },\n {\n \"regex\": \"ALLVIEW ?SPEED\",\n \"device\": \"tablet\",\n \"model\": \"Speed\"\n },\n {\n \"regex\": \"ALLVIEWSPEED\",\n \"device\": \"tablet\",\n \"model\": \"Speed\"\n },\n {\n \"regex\": \"AX4Nano\",\n \"device\": \"tablet\",\n \"model\": \"AX4 Nano\"\n },\n {\n \"regex\": \"ALLVIEW_TX1_Quasar\",\n \"device\": \"tablet\",\n \"model\": \"TX1 Quasar\"\n },\n {\n \"regex\": \"Allview[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Allview[ _-]([^;/]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Allwinner\": {\n \"regex\": \"(?:QUAD-CORE (?:A64 p3|A33 y3|T3 K2001M)|ZY-07B|UltraOcta-T8|OCTA-CORE T8)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"QUAD-CORE A64 p3\",\n \"model\": \"A64 QUAD-CORE p3\"\n },\n {\n \"regex\": \"QUAD-CORE A33 y3\",\n \"model\": \"A33 QUAD-CORE y3\"\n },\n {\n \"regex\": \"ZY-07B\",\n \"model\": \"ZY-07B\"\n },\n {\n \"regex\": \"UltraOcta-T8\",\n \"device\": \"car browser\",\n \"model\": \"Ultra Octa T8\"\n },\n {\n \"regex\": \"QUAD-CORE T3 K2001M\",\n \"device\": \"car browser\",\n \"model\": \"QUAD-CORE T3 K2001M\"\n },\n {\n \"regex\": \"OCTA-CORE T8\",\n \"device\": \"car browser\",\n \"model\": \"OCTA-CORE T8\"\n }\n ]\n },\n \"altron\": {\n \"regex\": \"(AL-555|GI-626|OB[_-](?:421|728|627))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AL-555\",\n \"model\": \"AL-555\"\n },\n {\n \"regex\": \"OB[_-](421|728|627)\",\n \"model\": \"OB-$1\"\n },\n {\n \"regex\": \"GI-626\",\n \"device\": \"phablet\",\n \"model\": \"GI-626\"\n }\n ]\n },\n \"AMGOO\": {\n \"regex\": \"AM(350|355|40[257]|41[025]|450|50[89]|52[037]|51[58]|53[05])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AM350\",\n \"model\": \"Jack Pro\"\n },\n {\n \"regex\": \"AM(355|407)\",\n \"model\": \"Tigo\"\n },\n {\n \"regex\": \"AM402\",\n \"model\": \"Pronto\"\n },\n {\n \"regex\": \"AM410\",\n \"model\": \"Unico\"\n },\n {\n \"regex\": \"AM450\",\n \"model\": \"Swift\"\n },\n {\n \"regex\": \"AM508\",\n \"model\": \"Fuego\"\n },\n {\n \"regex\": \"AM509\",\n \"model\": \"Uno\"\n },\n {\n \"regex\": \"AM515\",\n \"model\": \"D1\"\n },\n {\n \"regex\": \"AM518\",\n \"model\": \"C1\"\n },\n {\n \"regex\": \"AM520\",\n \"model\": \"Pro\"\n },\n {\n \"regex\": \"AM523\",\n \"model\": \"Plus\"\n },\n {\n \"regex\": \"AM527\",\n \"model\": \"Geo\"\n },\n {\n \"regex\": \"AM530\",\n \"model\": \"A1\"\n },\n {\n \"regex\": \"AM535\",\n \"model\": \"P1\"\n },\n {\n \"regex\": \"AM([0-9]{3})\",\n \"model\": \"AM$1\"\n }\n ]\n },\n \"Amoi\": {\n \"regex\": \"Amoi|(?:A862W|Clever[ -]?(?:Gem S52|Gleam S45|Pad P7|Wave S50|Touch S46|JOY S40|Lite S41))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Clever Pad P7\",\n \"model\": \"Clever Pad P7\"\n },\n {\n \"regex\": \"A862W\",\n \"model\": \"A862W\"\n },\n {\n \"regex\": \"CLEVER JOY S40\",\n \"model\": \"Clever Joy S40\"\n },\n {\n \"regex\": \"Clever[ -]?(Gleam S45|Gem S52|Wave S50|Touch S46|Lite S41)\",\n \"model\": \"Clever $1\"\n },\n {\n \"regex\": \"Amoi[\\\\- /]([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Amoisonic-([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ainol\": {\n \"regex\": \"Numy|novo[0-9]|Novo 10 Hero|AX10PRO|NUMY3GAX9|NOVO10 Spark|Aurora-II\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Numy 3G AX1\",\n \"model\": \"Novo 7 Numy AX1 3G\"\n },\n {\n \"regex\": \"Numy[_ ]?3G[_ ]?Sword\",\n \"model\": \"Numy 3G Sword\"\n },\n {\n \"regex\": \"NOVO10 Spark\",\n \"model\": \"Novo 10 Spark\"\n },\n {\n \"regex\": \"AX10PRO\",\n \"model\": \"Numy AX10 Pro\"\n },\n {\n \"regex\": \"Numy_3G_AX3\",\n \"model\": \"Numy AX3 Sword\"\n },\n {\n \"regex\": \"Numy3GTalos\",\n \"model\": \"Numy 3G Talos\"\n },\n {\n \"regex\": \"Numy_3G_BW1\",\n \"model\": \"Numy 3G Talos 2\"\n },\n {\n \"regex\": \"NUMY3GAX9(?:[);/ ]|$)\",\n \"model\": \"Numy 3G AX9\"\n },\n {\n \"regex\": \"Numy3G_AX10(?:[);/ ]|$)\",\n \"model\": \"Numy 3G AX10\"\n },\n {\n \"regex\": \"(Novo 10 Hero QuadCore)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Aurora-II\",\n \"model\": \"Novo 7 Aurora II\"\n },\n {\n \"regex\": \"Novo7 Flame(?:[);/ ]|$)\",\n \"model\": \"Novo 7 Flame\"\n },\n {\n \"regex\": \"NOVO7(?:[);/ ]|$)\",\n \"model\": \"Novo 7\"\n },\n {\n \"regex\": \"Numy[ _]([^;/]+) Build\",\n \"model\": \"Numy $1\"\n },\n {\n \"regex\": \"Novo([0-9]+)[ \\\\-]([^;/]+) Build\",\n \"model\": \"Novo $1 $2\"\n }\n ]\n },\n \"Archos\": {\n \"regex\": \"(?:YL-)?Archos|(?:A50TI|AC101BHE)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Archos (Oxygen (?:63|57|68XL))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"A50TI(?:[);/ ]|$)\",\n \"model\": \"50 Titanium 4G\"\n },\n {\n \"regex\": \"Archos ?5(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"5\"\n },\n {\n \"regex\": \"AC101BHE(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"101B Helium 4G\"\n },\n {\n \"regex\": \"(?:YL-)?Archos ([^/;]*(?:PAD)[^/;]*) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Archos ((?:[789]|10)[0-9]?[a-z]* ?(?:G9|G10|Helium|Titanium|Cobalt|Platinum|Xenon|Carbon|Neon|XS|IT)[^/;]*) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:YL-)?Archos ([a-z0-9 ]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:YL-)?Archos ([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Axxion\": {\n \"regex\": \"Axxion ATAB-[0-9]+(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Axxion ATAB-([0-9]+)(?:[);/ ]|$)\",\n \"model\": \"ATAB-$1\"\n }\n ]\n },\n \"MEU\": {\n \"regex\": \"MEU ([a-z0-9]+) Build\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Arnova\": {\n \"regex\": \"arnova|ARCHM901|AN7CG2|AN7G2(DTE|I)?|AN7[BCDFH]?G3|A80KSC|AN8G2|AN8[BC]?G3|AN9G2I?|AN9G3|A101[BC]|AN10G2|AN10BG2(DT|I)?|AN10BG3(DT)?|AN10[CD]G3\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"ARCHM901\",\n \"model\": \"M901\"\n },\n {\n \"regex\": \"AN7CG2\",\n \"model\": \"7c G2\"\n },\n {\n \"regex\": \"AN7G2I|AN7G2|AN7G2DTE\",\n \"model\": \"7 G2\"\n },\n {\n \"regex\": \"AN7G3\",\n \"model\": \"7 G3\"\n },\n {\n \"regex\": \"AN7BG3\",\n \"model\": \"7b G3\"\n },\n {\n \"regex\": \"AN7CG3\",\n \"model\": \"7c G3\"\n },\n {\n \"regex\": \"AN7DG3-CP\",\n \"model\": \"Childpad\"\n },\n {\n \"regex\": \"AN7DG3\",\n \"model\": \"7d G3\"\n },\n {\n \"regex\": \"AN7FG3\",\n \"model\": \"7f G3\"\n },\n {\n \"regex\": \"AN7HG3\",\n \"model\": \"7h G3\"\n },\n {\n \"regex\": \"A80KSC\",\n \"model\": \"8\"\n },\n {\n \"regex\": \"AN8G2\",\n \"model\": \"8 G2\"\n },\n {\n \"regex\": \"AN8G3\",\n \"model\": \"8 G3\"\n },\n {\n \"regex\": \"AN8BG3\",\n \"model\": \"8b G3\"\n },\n {\n \"regex\": \"AN8CG3\",\n \"model\": \"8c G3\"\n },\n {\n \"regex\": \"AN9G2I\",\n \"model\": \"9i G2\"\n },\n {\n \"regex\": \"AN9G2\",\n \"model\": \"9 G2\"\n },\n {\n \"regex\": \"AN9G3\",\n \"model\": \"9 G3\"\n },\n {\n \"regex\": \"A101B2|A101C|AN10G2\",\n \"model\": \"10 G2\"\n },\n {\n \"regex\": \"A101B\",\n \"model\": \"10\"\n },\n {\n \"regex\": \"AN10BG2|AN10BG2DT|AN10BG2I\",\n \"model\": \"10b G2\"\n },\n {\n \"regex\": \"AN10BG3|AN10BG3DT|AN10BG3-LZ\",\n \"model\": \"10b G3\"\n },\n {\n \"regex\": \"AN10CG3\",\n \"model\": \"10c G3\"\n },\n {\n \"regex\": \"AN10DG3\",\n \"model\": \"10d G3\"\n },\n {\n \"regex\": \"ARNOVA 90G3\",\n \"model\": \"90 G3\"\n },\n {\n \"regex\": \"ARNOVA 90 G4\",\n \"model\": \"90 G4\"\n },\n {\n \"regex\": \"ARNOVA 97G4\",\n \"model\": \"97 G4\"\n },\n {\n \"regex\": \"ARNOVA 101 G4\",\n \"model\": \"101 G4\"\n },\n {\n \"regex\": \"Arnova ([^/;]*) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ARRIS\": {\n \"regex\": \"ARRIS\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"ARRIS[,;] ([^),;/]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ask\": {\n \"regex\": \"ASK[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ASK[ _]791SP[ _]3G\",\n \"model\": \"791SP 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ASK[_ ]([^/;]*) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ANS\": {\n \"regex\": \"UL40 Build\",\n \"device\": \"smartphone\",\n \"model\": \"UL40\"\n },\n \"AOC\": {\n \"regex\": \"AOC,\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(LE(?:32|43)S5970(?:s)?-20|LE55U7970-30|LE43S5977-20|U60856)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Assistant\": {\n \"regex\": \"(AS[-_](?:50[123]|543[1-6]|44[12]1|541[12]|54[23]1|6431|[46]01L)|AP-(?:109|115G|721N|753G|7[25]7G|10[68]|107G|110N|941|719))[;/)_ ]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AS[-_]401L(?:[);/ ]|$)\",\n \"model\": \"Asper\"\n },\n {\n \"regex\": \"AS-5432(?:[);/ ]|$)\",\n \"model\": \"Agio\"\n },\n {\n \"regex\": \"AS[-_](?:5434|501)(?:[);/ ]|$)\",\n \"model\": \"Club\"\n },\n {\n \"regex\": \"AS_601L(?:[);/ ]|$)\",\n \"model\": \"AS-601L\"\n },\n {\n \"regex\": \"AS-5433 Secret(?:[);/ ]|$)\",\n \"model\": \"Secret\"\n },\n {\n \"regex\": \"AS-5433(?:[);/ ]|$)\",\n \"model\": \"Max Secret\"\n },\n {\n \"regex\": \"AS-5421(?:[);/ ]|$)\",\n \"model\": \"Surf\"\n },\n {\n \"regex\": \"AS-44[12]1(?:[);/ ]|$)\",\n \"model\": \"Unami\"\n },\n {\n \"regex\": \"AS-5431(?:[);/ ]|$)\",\n \"model\": \"Prima\"\n },\n {\n \"regex\": \"AS-502(?:[);/ ]|$)\",\n \"model\": \"Shot\"\n },\n {\n \"regex\": \"AS-503(?:[);/ ]|$)\",\n \"model\": \"Target\"\n },\n {\n \"regex\": \"AS-5435(?:[);/ ]|$)\",\n \"model\": \"Shine\"\n },\n {\n \"regex\": \"AS-5436[ _]\",\n \"model\": \"Grid\"\n },\n {\n \"regex\": \"AS-6431(?:[);/ ]|$)\",\n \"model\": \"Rider\"\n },\n {\n \"regex\": \"AS-5411[_ ]\",\n \"model\": \"Max Ritm\"\n },\n {\n \"regex\": \"AS-5412 Max(?:[);/ ]|$)\",\n \"model\": \"AS-5412 Max\"\n },\n {\n \"regex\": \"AP-721N(?:[);/ ]|$)\",\n \"model\": \"AP-721N Force\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AP-941(?:[);/ ]|$)\",\n \"model\": \"AP-941\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AP-108(?:[);/ ]|$)\",\n \"model\": \"Cetus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AP-106(?:[);/ ]|$)\",\n \"model\": \"AP-106 Force\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(AP-(?:109|115G|7[25]7G|753G|107G|110N|719))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ark\": {\n \"regex\": \"(ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\\\\))|EDGE A5HD|Elf_S8|ICON (R40\\\\+|R45)|Impulse[ _](P[12])|Wizard_[12](?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:ARK[_ -])?Benefit[_ -]([^/;]*)(?: Build|\\\\))\",\n \"model\": \"Benefit $1\"\n },\n {\n \"regex\": \"Impulse[ _]P1\\\\+\",\n \"model\": \"Impulse P1 Plus\"\n },\n {\n \"regex\": \"Impulse[ _](P[12])\",\n \"model\": \"Impulse $1\"\n },\n {\n \"regex\": \"EDGE (A5HD)\",\n \"model\": \"Edge $1\"\n },\n {\n \"regex\": \"ICON (R40\\\\+|R45)\",\n \"model\": \"Icon $1\"\n },\n {\n \"regex\": \"Wizard_([12])\",\n \"model\": \"Wizard $1\"\n },\n {\n \"regex\": \"Elf_S8(?:[);/ ]|$)\",\n \"model\": \"Elf S8\"\n }\n ]\n },\n \"Garmin-Asus\": {\n \"regex\": \"Garmin-Asus|Garminfone\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Garminfone[ \\\\-_]([^;/]*)Build\",\n \"model\": \"Garminfone $1\"\n },\n {\n \"regex\": \"Garmin-Asus[ \\\\-_]([^;/]+)Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Garmin-Asus[ \\\\-_]([^;/]+)[\\\\)/]\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Asus\": {\n \"regex\": \"Asus|Transformer|ZenFone Max|TF300T|Slider SL101|PadFone|ME302(?:C|KL)|ME301T|ME371MG|ME17(?:1|2V|3X)|(?:K0[01][0-9a-z]|P(?:00[18ACIL]|01[MTVWYZ]|01MA|01T_1|02[13478])(?: Build|\\\\))|X015D|X018D|X003|X00[7ABT]D|Z00D|Z00[MTY]D|Z01[7FGHKMR]D)(?:[);/ ]|$)|G55[023]KL|ZB(631|602|633|55[135]|50[01])KL|ZC(55[134]|520|600)KL|ZA550KL|ZE(5[02]0|620|55[2345])KL|ZD55[23]KL|ZS6(?:61|7[01])KS|ZS(6[0236]0|55[10])KL|ZB(500KG|601KL)|MeMo Pad FHD 10 LTE|Z00[SV]D\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ME171(?:[);/ ]|$)\",\n \"model\": \"Eee Pad MeMO 171\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ASUS Z906(?:[);/ ]|$)\",\n \"model\": \"Z906 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ME172V\",\n \"model\": \"MeMO Pad\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ME302C(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad FHD 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(ME302KL|MeMo Pad FHD 10 LTE)(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad FHD 10 LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ME301T(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad Smart 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Z101(?:[);/ ]|$)\",\n \"model\": \"Z101\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"X Pad 10 LTE(?:[);/ ]|$)\",\n \"model\": \"X Pad 10 LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:K01[3A]|K007|K00R)(?:[);/ ]|$)|MeMO Pad 7\",\n \"model\": \"MeMO Pad 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K01E(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad 10 ME103K\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K00U|ME173X(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad HD 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:K011|K00L)(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K014(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad 8.9\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K00S(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad HD 7 Dual SIM\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K00F(?:[);/ ]|$)\",\n \"model\": \"MeMO Pad 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K00C(?:[);/ ]|$)\",\n \"model\": \"Transformer Pad TF701T\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K010(?:[);/ ]|$)\",\n \"model\": \"Transformer Pad TF103C\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K018(?:[);/ ]|$)\",\n \"model\": \"Transformer Pad TF103CG\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TF300T(?:[);/ ]|$)\",\n \"model\": \"Transformer Pad TF300T\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"K01B(?:[);/ ]|$)\",\n \"model\": \"Transformer Pad TF303K\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Slider SL101\",\n \"model\": \"Eee Pad Slider SL101\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P01[YZ]\",\n \"model\": \"ZenPad C 7.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P008 Build\",\n \"model\": \"ZenPad Z8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P001\",\n \"model\": \"ZenPad Z10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:ASUS_)?P00J\",\n \"model\": \"ZenPad Z8s\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P01[VW]\",\n \"model\": \"ZenPad 7.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:P024|P00A)(?:[);/ ]|$)\",\n \"model\": \"ZenPad 8.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P01MA(?: Build|\\\\))|P01M(?: Build|\\\\))\",\n \"model\": \"ZenPad S 8.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P027\",\n \"model\": \"ZenPad 3S 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:ASUS_)?P00I\",\n \"model\": \"ZenPad 3S 10 LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:ASUS_)?P00C|P02[138]|P00L|P01T_1\",\n \"model\": \"ZenPad 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ASUS Tablet P1801-T\",\n \"model\": \"Transformer AiO P1801 18.4\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ASUS TAB A8\",\n \"model\": \"TAB A8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ME371MG(?:[);/ ]|$)\",\n \"model\": \"Fonepad\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"K00G(?:[);/ ]|$)\",\n \"model\": \"Fonepad Note 6\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:K012|K00E)(?:[);/ ]|$)\",\n \"model\": \"Fonepad 7\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"K00Z(?:[);/ ]|$)\",\n \"model\": \"Fonepad 7 Dual SIM\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"K016(?:[);/ ]|$)\",\n \"model\": \"Fonepad 8\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:ASUS_)?T00N\",\n \"model\": \"PadFone S\"\n },\n {\n \"regex\": \"(?:ASUS_)?T00[CE]\",\n \"model\": \"PadFone Mini\"\n },\n {\n \"regex\": \"(?:ASUS[-_])?T00T\",\n \"model\": \"PadFone X Mini\"\n },\n {\n \"regex\": \"PadFone T008\",\n \"model\": \"PadFone E\"\n },\n {\n \"regex\": \"PadFone T004\",\n \"model\": \"PadFone Infinity\"\n },\n {\n \"regex\": \"(?:ASUS_)?A002(A)?\",\n \"model\": \"ZenFone AR\"\n },\n {\n \"regex\": \"(?:ASUS_)?A006\",\n \"model\": \"ZenFone V\"\n },\n {\n \"regex\": \"(?:ASUS_)?A009\",\n \"model\": \"ZenFone V Live\"\n },\n {\n \"regex\": \"(?:ASUS_)?Z007\",\n \"model\": \"ZenFone C\"\n },\n {\n \"regex\": \"(?:ASUS_)?(X00P[SD]|ZB555KL)\",\n \"model\": \"ZenFone Max M1\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:ZB60[12]KL)|ZenFone Max Pro M1\",\n \"model\": \"ZenFone Max Pro M1\"\n },\n {\n \"regex\": \"(?:ASUS_)?(X01([AB]D)|ZB633KL)(?:[);/ ]|$)\",\n \"model\": \"ZenFone Max M2\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:Z00[AD]|Z008D|Z008|Z00AD[AB]?|ZE551ML)\",\n \"model\": \"ZenFone 2\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:ZenFone 2E)\",\n \"model\": \"ZenFone 2E\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:A007|Z00YD|ZA550KL|ZB553KL|ZB501KL)(?:[);/ ]|$)\",\n \"model\": \"ZenFone Live\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:X00RD|G552KL)\",\n \"model\": \"ZenFone Live L1\"\n },\n {\n \"regex\": \"G553KL\",\n \"model\": \"ZenFone Lite L1\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:Z00[ERLMTW]D|Z011D|ZE500KL)\",\n \"model\": \"ZenFone 2 Laser\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:T00[IQ1]|Z01KD)\",\n \"model\": \"ZenFone 4\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:T00[JF]|X00QD|X00QSA|ZE620KL)\",\n \"model\": \"ZenFone 5\"\n },\n {\n \"regex\": \"(?:ASUS_)?T00P\",\n \"model\": \"ZenFone 5 LTE\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:T00K|X017DA|X017D|ZC600KL)\",\n \"model\": \"ZenFone 5 Lite\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:Z01RD|ZS620KL)\",\n \"model\": \"ZenFone 5Z\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:T00G|Z002|ZS630KL|I01WD[X]?)\",\n \"model\": \"ZenFone 6\"\n },\n {\n \"regex\": \"(?:ASUS_)?ZS671KS\",\n \"model\": \"ZenFone 7 Pro\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:ZS670KS|I002D)(?:[);/ ]|$)\",\n \"model\": \"ZenFone 7\"\n },\n {\n \"regex\": \"(?:ASUS_)?Z010D\",\n \"model\": \"ZenFone Max\"\n },\n {\n \"regex\": \"(?:ASUS_)?X018D\",\n \"model\": \"ZenFone Max Plus M1\"\n },\n {\n \"regex\": \"(?:ASUS_)?X00TD?\",\n \"model\": \"ZenFone Max Pro M1\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:X01BDA|ZB631KL|Zenfone Max Pro M2)\",\n \"model\": \"ZenFone Max Pro M2\"\n },\n {\n \"regex\": \"(?:ASUS_)?X014D\",\n \"model\": \"ZenFone Go Plus\"\n },\n {\n \"regex\": \"(?:ASUS_)?(L001|X00[7AB]D|X009[DB][DA]|X009D|Z00[SV]D|ZB500K[LG]|ZB551KL)\",\n \"model\": \"ZenFone Go\"\n },\n {\n \"regex\": \"(?:ASUS_)?X013D\",\n \"model\": \"ZenFone Go Life\"\n },\n {\n \"regex\": \"(?:ASUS_)?G550KL\",\n \"model\": \"ZenFone Go TV\"\n },\n {\n \"regex\": \"(?:ASUS_)?Z00[SV]D\",\n \"model\": \"ZenFone Go\"\n },\n {\n \"regex\": \"(?:ASUS_)?(X00[23])\",\n \"model\": \"ZenFone Pegasus\"\n },\n {\n \"regex\": \"(?:ASUS_)?X005\",\n \"model\": \"ZenFone Pegasus 5000\"\n },\n {\n \"regex\": \"(?:ASUS_)?X550\",\n \"model\": \"ZenFone Pegasus 2 Plus\"\n },\n {\n \"regex\": \"(?:ASUS_)?(X00GD)\",\n \"model\": \"ZenFone Pegasus 3S Max\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:X00D[DS]|X008D)|ZC553KL\",\n \"model\": \"ZenFone 3 Max\"\n },\n {\n \"regex\": \"(?:ASUS_)?(X008)\",\n \"model\": \"ZenFone 3 Pegasus\"\n },\n {\n \"regex\": \"(?:ASUS_)?(ZE553KL|Z01HD)\",\n \"model\": \"ZenFone 3 Zoom\"\n },\n {\n \"regex\": \"(?:ASUS_)?ZS550KL\",\n \"model\": \"ZenFone 3 Deluxe\"\n },\n {\n \"regex\": \"(?:ASUS_)?Z00UD\",\n \"model\": \"ZenFone Selfie\"\n },\n {\n \"regex\": \"(?:ASUS_)?(Z016[DS]|Z01FD)\",\n \"model\": \"ZenFone 3 Deluxe\"\n },\n {\n \"regex\": \"(?:ASUS_)?(Z017DA|ZE520KL|ZE552KL|Z017D|Z012(D|S))\",\n \"model\": \"ZenFone 3\"\n },\n {\n \"regex\": \"(?:ASUS_)?Z01B[DS]|ZC551KL\",\n \"model\": \"ZenFone 3 Laser\"\n },\n {\n \"regex\": \"(?:ASUS_)?A001\",\n \"model\": \"ZenFone 3 Ultra\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:ZD552KL|Z01MDA?)(?:[);/ ]|$)\",\n \"model\": \"ZenFone 4 Selfie Pro\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:X00LDA|ZD553KL)\",\n \"model\": \"ZenFone 4 Selfie\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:X00LD|Z01KS|Z01KDA|ZE554KL)\",\n \"model\": \"ZenFone 4\"\n },\n {\n \"regex\": \"(?:ASUS_)?X00(?:[HIK]D|IS)|ZC554KL|ZC520KL\",\n \"model\": \"ZenFone 4 Max\"\n },\n {\n \"regex\": \"(?:ASUS_)?X015D\",\n \"model\": \"ZenFone 4 Max Plus\"\n },\n {\n \"regex\": \"(?:ASUS_)?(:?Z01G[DS]|ZS551KL)\",\n \"model\": \"ZenFone 4 Pro\"\n },\n {\n \"regex\": \"(?:ASUS_)?Z00XS\",\n \"model\": \"ZenFone Zoom\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:Z01QD|ZS600KL)\",\n \"model\": \"ROG Phone\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:I001D[ABCE]?|ZS660KL)\",\n \"model\": \"ROG Phone 2\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:I003DD?|ZS661KS)\",\n \"model\": \"ROG Phone 3\"\n },\n {\n \"regex\": \"(?:ASUS_)?(?:I005DA)\",\n \"model\": \"ROG Phone 5\"\n },\n {\n \"regex\": \"ZN220IC\",\n \"device\": \"desktop\",\n \"model\": \"Zen AiO ZN220IC\"\n },\n {\n \"regex\": \"(?:ASUS_)?ZenWatch( 2)?\",\n \"device\": \"wearable\",\n \"model\": \"ZenWatch$1\"\n },\n {\n \"regex\": \"Asus(?:-|;)?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(PadFone(?: [^;/]+)?) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(PadFone(?: [a-z0-9]+)?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:Asus|Transformer) ((?:Pad |Prime )?TF[0-9a-z]+)\",\n \"device\": \"tablet\",\n \"model\": \"Transformer $1\"\n },\n {\n \"regex\": \"Chromebook Flip (C10[01]PA|C302)\",\n \"device\": \"desktop\",\n \"model\": \"Chromebook Flip $1\"\n }\n ]\n },\n \"Audiovox\": {\n \"regex\": \"Audiovox|CDM|UTS(?:TARCOM)?\\\\-|audio(?!book)[a-z0-9\\\\-]+\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Audiovox[_\\\\-]([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"CDM(?:-)?([a-z0-9]+)\",\n \"model\": \"CDM-$1\"\n },\n {\n \"regex\": \"UTS(?:TARCOM)?-([a-z0-9\\\\-]+)\",\n \"model\": \"CDM-$1\"\n },\n {\n \"regex\": \"audio([a-z0-9\\\\-]+)\",\n \"model\": \"CDM-$1\"\n }\n ]\n },\n \"AVH\": {\n \"regex\": \"Excer[ _]\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Excer[ _]G5.3\",\n \"model\": \"Excer G5.3\"\n },\n {\n \"regex\": \"Excer[ _]G5\",\n \"model\": \"Excer G5\"\n },\n {\n \"regex\": \"Excer[ _]10[ _]PRO\",\n \"model\": \"Excer 10 Pro\"\n },\n {\n \"regex\": \"Excer[ _]8\",\n \"model\": \"Excer 8\"\n }\n ]\n },\n \"Avvio\": {\n \"regex\": \"Avvio[ _]?([a-z0-9\\\\-]+)|(?:CHIVAS_55|Colombia_2018|Mint_M353)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"CHIVAS_55\",\n \"model\": \"Chivas 55\"\n },\n {\n \"regex\": \"Mint_M353\",\n \"model\": \"Mint M353\"\n },\n {\n \"regex\": \"Colombia_2018\",\n \"model\": \"Colombia (2018)\"\n },\n {\n \"regex\": \"Avvio[ _]PAD\",\n \"model\": \"PAD\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Avvio[ _]?([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Azumi Mobile\": {\n \"regex\": \"Azumi[_ -]|(?:SPEED55|A50_Style_Plus)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Azumi[_ -]([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Azumi[_ -]([a-z0-9_]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SPEED55\",\n \"model\": \"Speed 5.5\\\"\"\n },\n {\n \"regex\": \"A50_Style_Plus\",\n \"model\": \"A50 Style Plus\"\n }\n ]\n },\n \"Barnes & Noble\": {\n \"regex\": \"Nook|BN[TR]V[0-9]+\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Nook([a-z0-9]+)\",\n \"model\": \"Nook $1\"\n },\n {\n \"regex\": \"Nook[ _]([^/;]+)[ _]Build\",\n \"model\": \"Nook $1\"\n },\n {\n \"regex\": \"(BN[TR]V[0-9]+)\",\n \"model\": \"Nook $1\"\n }\n ]\n },\n \"BGH\": {\n \"regex\": \"(?!Positivo )BGH ([^/;\\\\)]+)(?: Build|\\\\))\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Y([17]00|2[01]0|1010)\",\n \"device\": \"tablet\",\n \"model\": \"Y$1\"\n },\n {\n \"regex\": \"BGH (\\\\+Simple|Mini)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Y710 KIDS\",\n \"device\": \"tablet\",\n \"model\": \"Y710 Kids\"\n },\n {\n \"regex\": \"JOY X2\",\n \"model\": \"Joy X2\"\n },\n {\n \"regex\": \"BGH ([^/;\\\\)]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Bitel\": {\n \"regex\": \"Bitel[ _-]([^/;]+) Build|(?:B(?:840[5-9]|841[0456]|850[2346]|860[146]|9401|950[1-5])|S8402L?|S8501L?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(B(?:840[5789]|841[0456]|850[2346]|860[146]|9401|950[12345])|S8402L?|S8501L?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Bitel[ _-]([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Blu\": {\n \"regex\": \"BLU[ _]|(?:blu|Dash)[ _]([^/;)]+)(?: Build|[;)])|(?:Studio[ _](5.0K|5.5|View XL|Mega|C 8\\\\+8|[CGM][ _]HD|[CGX]|SELFIE|Selfie LTE|Touch|M5 Plus|J[1258]|X8 HD)|Advance (4.0 ?[LM]|5.[02](?: HD)?|A4|L[45])|ENERGY (DIAMOND|XL)|Energy X 2|LIFE XL|B110DL|Dash (?:X[2L]|L3)|PURE (?:X[LR]|MINI)|Life One X2|G90(?: PRO)?|Grand M3|GRAND (?:5.5 HD|XL LTE)|R1 (?:HD|PLUS)|Tank Xtreme [45].0|Tank Xtreme Pro|Touchbook M7 Pro|DASH X PLUS|C[456] 2019|BOLD N1|B130DL|Vivo 5 Mini)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Advance (4.0 ?[LM]|4.0|5.[02](?: HD)?|A4|L[54])\",\n \"model\": \"Advance $1\"\n },\n {\n \"regex\": \"(?:BLU[_ ])?Studio[ _](5.0 C|5.5|View XL|Mega|C 8\\\\+8|[CG][ _]HD|C|G|Touch|M HD|M5 Plus|J[1258]|X8 HD|X5|XL|X)(?:[);/ ]|$)\",\n \"model\": \"Studio $1\"\n },\n {\n \"regex\": \"(?:BLU[_ ])?Studio[ _]5.0 ?K(?:[);/ ]|$)\",\n \"model\": \"Studio 5.0 K\"\n },\n {\n \"regex\": \"STUDIO SELFIE LTE\",\n \"model\": \"Studio Selfie LTE\"\n },\n {\n \"regex\": \"STUDIO ONE\",\n \"model\": \"Studio One\"\n },\n {\n \"regex\": \"STUDIO SELFIE ([23]|LTE)\",\n \"model\": \"Studio Selfie $1\"\n },\n {\n \"regex\": \"STUDIO SELFIE\",\n \"model\": \"Studio Selfie\"\n },\n {\n \"regex\": \"(?:BLU[_ ])?NEO_ENERGY_MINI\",\n \"model\": \"Neo Energy Mini\"\n },\n {\n \"regex\": \"ENERGY DIAMOND\",\n \"model\": \"Energy Diamond\"\n },\n {\n \"regex\": \"ENERGY XL\",\n \"model\": \"Energy XL\"\n },\n {\n \"regex\": \"Energy X 2\",\n \"model\": \"Energy X 2\"\n },\n {\n \"regex\": \"ENERGY X PLUS 2\",\n \"model\": \"Energy X Plus 2\"\n },\n {\n \"regex\": \"ENERGY X PLUS\",\n \"model\": \"Energy X Plus\"\n },\n {\n \"regex\": \"LIFE XL\",\n \"model\": \"Life XL\"\n },\n {\n \"regex\": \"DASH[ _]X[ _]PLUS[ _]LTE\",\n \"model\": \"Dash X Plus LTE\"\n },\n {\n \"regex\": \"DASH X PLUS\",\n \"model\": \"Dash X Plus\"\n },\n {\n \"regex\": \"DASH 4.5\",\n \"model\": \"Dash 4.5\"\n },\n {\n \"regex\": \"Dash XL\",\n \"model\": \"Dash XL\"\n },\n {\n \"regex\": \"PURE (X[LR])\",\n \"model\": \"Pure $1\"\n },\n {\n \"regex\": \"PURE MINI\",\n \"model\": \"Pure Mini\"\n },\n {\n \"regex\": \"BOLD N1\",\n \"model\": \"Bold N1\"\n },\n {\n \"regex\": \"Life One X2\",\n \"model\": \"Life One X2\"\n },\n {\n \"regex\": \"LIFE ONE X\",\n \"model\": \"Life One X\"\n },\n {\n \"regex\": \"LIFE ONE\",\n \"model\": \"Life One\"\n },\n {\n \"regex\": \"LIFE MARK\",\n \"model\": \"Life Mark\"\n },\n {\n \"regex\": \"NEO X PLUS\",\n \"model\": \"Neo X Plus\"\n },\n {\n \"regex\": \"NEO (XL|X)\",\n \"model\": \"Neo $1\"\n },\n {\n \"regex\": \"G90 PRO\",\n \"model\": \"G90 Pro\"\n },\n {\n \"regex\": \"G90\",\n \"model\": \"G90\"\n },\n {\n \"regex\": \"GRAND 5.5 HD\",\n \"model\": \"Grand 5.5 HD\"\n },\n {\n \"regex\": \"Grand X LTE\",\n \"model\": \"Grand X LTE\"\n },\n {\n \"regex\": \"Grand XL LTE\",\n \"model\": \"Grand XL LTE\"\n },\n {\n \"regex\": \"Grand M3\",\n \"model\": \"Grand M3\"\n },\n {\n \"regex\": \"B110DL\",\n \"model\": \"View Mega\"\n },\n {\n \"regex\": \"B130DL\",\n \"model\": \"View 2\"\n },\n {\n \"regex\": \"R1 HD\",\n \"model\": \"R1 HD\"\n },\n {\n \"regex\": \"R1 PLUS\",\n \"model\": \"R1 Plus\"\n },\n {\n \"regex\": \"C([456]) (2019)\",\n \"model\": \"C$1 ($2)\"\n },\n {\n \"regex\": \"Tank Xtreme ([45]).0\",\n \"model\": \"Tank Xtreme $1.0\\\"\"\n },\n {\n \"regex\": \"Tank Xtreme Pro\",\n \"model\": \"Tank Xtreme Pro\"\n },\n {\n \"regex\": \"VIVO AIR LTE\",\n \"model\": \"Vivo Air LTE\"\n },\n {\n \"regex\": \"Touchbook G7\",\n \"model\": \"Touchbook G7\"\n },\n {\n \"regex\": \"(?:BLU[_ ])?VIVO[ _]SELFIE\",\n \"model\": \"Vivo Selfie\"\n },\n {\n \"regex\": \"(?:BLU[_ ])?Vivo 5 Mini\",\n \"model\": \"Vivo 5 Mini\"\n },\n {\n \"regex\": \"Touchbook M7 Pro\",\n \"model\": \"Touchbook M7 Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"STUDIO 7.0 II\",\n \"model\": \"Studio 7.0\\\" II\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"DASH (L[45] LTE|5.0|L[45]X|L3|X2|[LMX])(?:[);/ ]|$)\",\n \"model\": \"Dash $1\"\n },\n {\n \"regex\": \"DASH[ _]([^)/;]+)(?: Build|\\\\))\",\n \"model\": \"Dash $1\"\n },\n {\n \"regex\": \"blu[ _]([^/;]+)( Build|[);])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Bluegood\": {\n \"regex\": \"BLUEGOOD\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"V6\",\n \"model\": \"V6\"\n }\n ]\n },\n \"Blackview\": {\n \"regex\": \"Blackview|(BV([24-9]000|[46]900|(5[1589]|9[15689])00|6[138]00)(?:[ _](?:PRO))?|(P10000(?:[ _](?:PRO))?)|omega[ _]pro|Alife[ _][PS]1|Heatwave|DM550|BV9700Pro|(?<!Lenovo[_ ])A[68]0(?:Pro)?\\\\))|A[86]0Plus|BL6000Pro\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"A60Pro\\\\)\",\n \"model\": \"A60 Pro\"\n },\n {\n \"regex\": \"A60\\\\)\",\n \"model\": \"A60\"\n },\n {\n \"regex\": \"A80Pro(?:[);/ ]|$)\",\n \"model\": \"A80 Pro\"\n },\n {\n \"regex\": \"A([86]0)Plus(?:[);/ ]|$)\",\n \"model\": \"A$1 Plus\"\n },\n {\n \"regex\": \"(BV6000S)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(BV9700|BL6000)Pro\",\n \"model\": \"$1 Pro\"\n },\n {\n \"regex\": \"Blackview (A[78]|E7S)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"BV9000Pro-F\",\n \"model\": \"BV9000 Pro F\"\n },\n {\n \"regex\": \"(BV([48]000|9[56]00|6[83]00))Pro\",\n \"model\": \"$1 Pro\"\n },\n {\n \"regex\": \"(BV6[13]00)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(BV([24-9]000|6900|4900|(5[1589]|9[15689])00)(?:[ _](?:PRO))?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(P10000(?:[ _](?:PRO))?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"omega[ _]pro\",\n \"model\": \"Omega Pro\"\n },\n {\n \"regex\": \"(Alife[ _][PS]1|DM550|Heatwave)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Bluboo\": {\n \"regex\": \"Bluboo|Xfire|Picasso 4G|Maya Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Maya Build\",\n \"model\": \"Maya\"\n },\n {\n \"regex\": \"Xfire2\",\n \"model\": \"Xfire 2\"\n },\n {\n \"regex\": \"Picasso 4G\",\n \"model\": \"Picasso 4G\"\n },\n {\n \"regex\": \"Xfire\",\n \"model\": \"Xfire\"\n },\n {\n \"regex\": \"Bluboo[ _-]?([^;/)]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Bluboo[ _-]?([^;/)]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Black Fox\": {\n \"regex\": \"BMM[ _-]?(?:44[123]D|441[WB]|44[12]S|431D|533D|54[12]S|541[ABW]|54[123]D|543S|531[ABD]|532 S)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BMM443D\",\n \"model\": \"B7 Fox+\"\n },\n {\n \"regex\": \"BMM441S\",\n \"model\": \"B8 Fox\"\n },\n {\n \"regex\": \"BMM442S|BMM441B\",\n \"model\": \"B8 Fox+\"\n },\n {\n \"regex\": \"BMM441W\",\n \"model\": \"B8M\"\n },\n {\n \"regex\": \"BMM442D\",\n \"model\": \"B7\"\n },\n {\n \"regex\": \"BMM531D\",\n \"model\": \"B6\"\n },\n {\n \"regex\": \"BMM531A\",\n \"model\": \"B5\"\n },\n {\n \"regex\": \"BMM541A\",\n \"model\": \"B5+\"\n },\n {\n \"regex\": \"BMM543[DS]\",\n \"model\": \"B4\"\n },\n {\n \"regex\": \"BMM441D\",\n \"model\": \"B4 Mini\"\n },\n {\n \"regex\": \"BMM541B\",\n \"model\": \"B4 Mini NFC\"\n },\n {\n \"regex\": \"BMM531B\",\n \"model\": \"B4 Mini (2019)\"\n },\n {\n \"regex\": \"BMM542D\",\n \"model\": \"B3+\"\n },\n {\n \"regex\": \"BMM541D\",\n \"model\": \"B3\"\n },\n {\n \"regex\": \"BMM541W\",\n \"model\": \"B7R Fox\"\n },\n {\n \"regex\": \"BMM 532 S\",\n \"model\": \"BMM 532S\"\n },\n {\n \"regex\": \"BMM[ _-]?(533D|431D|54[12]S)(?:[);/ ]|$)\",\n \"model\": \"BMM $1\"\n }\n ]\n },\n \"bogo\": {\n \"regex\": \"BO-(FRSP4|LFSPBS5|LFSP4|LFSPSL4|LFSPBS5|LFSPSL6QCI)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BO-LFSP4\",\n \"model\": \"LifeStyle 4DC\"\n },\n {\n \"regex\": \"BO-LFSPSL4\",\n \"model\": \"LifeStyle 4SL\"\n },\n {\n \"regex\": \"BO-LFSPBS5\",\n \"model\": \"LifeStyle 5BS\"\n },\n {\n \"regex\": \"BO-LFSPSL6QCI\",\n \"model\": \"LifeStyle 6QC\"\n },\n {\n \"regex\": \"BO-(FRSP4)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Boway\": {\n \"regex\": \"(?:sprd-)?(BOWAY)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BOWAY[ _-]([^/;]+)[ _]Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([^/;]+) Build/BOWAY\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \".*BOWAY[ _-]([^/;]+)/\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Brondi\": {\n \"regex\": \"Brondi[ _]|(?:CENTURION|GLADIATOR| GLORY|LUXURY|SENSUELLE|VICTORY)(?:[ _-]?[2-6])?(?:[);/ ]|$)|Surfing Tab|501 SZ\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Brondi[ _])?(620 SZ|730_4G_HD|501 SZ)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"CENTURION(?:[ _-]?([2-6]))?(?:[);/ ]|$)\",\n \"model\": \"CENTURION $1\"\n },\n {\n \"regex\": \"GLADIATOR(?:[ _-]?([2-6]))?(?:[);/ ]|$)\",\n \"model\": \"GLADIATOR $1\"\n },\n {\n \"regex\": \"GLORY(?:[ _-]?([2-6]))?(?:[);/ ]|$)\",\n \"model\": \"GLORY $1\"\n },\n {\n \"regex\": \"LUXURY(?:[ _-]?([2-6]))?(?:[);/ ]|$)\",\n \"model\": \"LUXURY $1\"\n },\n {\n \"regex\": \"SENSUELLE(?:[ _-]?([2-6]))?(?:[);/ ]|$)\",\n \"model\": \"SENSUELLE $1\"\n },\n {\n \"regex\": \"VICTORY(?:[ _-]?([2-6]))?(?:[);/ ]|$)\",\n \"model\": \"VICTORY $1\"\n },\n {\n \"regex\": \"Surfing Tab ([^;/]+) Build\",\n \"model\": \"SURFING TAB $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Surfing Tab ([^;/)]+)[;/)]\",\n \"model\": \"SURFING TAB $1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"VGO TEL\": {\n \"regex\": \"(?:Venture V(?:[278]|12)|Ocean[_ ][689]|Ocean9L)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Venture V([278]|12)(?:[);/ ]|$)\",\n \"model\": \"Venture V$1\"\n },\n {\n \"regex\": \"Ocean[_ ]?([689]|9L)(?:[);/ ]|$)\",\n \"model\": \"Ocean $1\"\n }\n ]\n },\n \"Vivo\": {\n \"regex\": \"((?:VIV-|BBG-)?(?<!FBCR/)vivo(?!(?:Browser)))|(?:V1730(D[AT]|GA)|V18(18CA|01A0|13B[AT]|18T|09[AT]|1[346][AT]|[13]8[AT]|14A|24[B]?A|2[19][AT]|3[12][AT]|36[AT])|V1731CA|V1732[AT]|V1818CT|V19[01]1[AT]|V1932[AT]|V191[3469][AT]|V192[1348]A|V193[04]A|V194[15]A|V1938CT|V1955A|V1938T|V1730EA|V19[26]2A|V196[35]A|V198[16]A|V1936A[L]?|V19[59]0A|V200[125]A|1819|V201[12]A|V202[0345]C?A|V202[235-9]|V2054A|V203[026]|V204[03]|V2049A|X50 Pro\\\\+|I1927)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"V1824[B]?A(?:[);/ ]|$)\",\n \"model\": \"iQOO\"\n },\n {\n \"regex\": \"V1955A(?:[);/ ]|$)\",\n \"model\": \"iQOO 3\"\n },\n {\n \"regex\": \"I1927(?:[);/ ]|$)\",\n \"model\": \"iQOO 3 5G\"\n },\n {\n \"regex\": \"V2049A(?:[);/ ]|$)\",\n \"model\": \"iQOO 7\"\n },\n {\n \"regex\": \"V1922A(?:[);/ ]|$)\",\n \"model\": \"iQOO Pro\"\n },\n {\n \"regex\": \"V1916A(?:[);/ ]|$)\",\n \"model\": \"iQOO Pro 5G\"\n },\n {\n \"regex\": \"V1914A(?:[);/ ]|$)\",\n \"model\": \"iQOO Neo\"\n },\n {\n \"regex\": \"V1981A(?:[);/ ]|$)\",\n \"model\": \"iQOO Neo 3\"\n },\n {\n \"regex\": \"V1936A[L]?(?:[);/ ]|$)\",\n \"model\": \"iQOO Neo 855\"\n },\n {\n \"regex\": \"V1986A(?:[);/ ]|$)\",\n \"model\": \"iQOO Z1\"\n },\n {\n \"regex\": \"V2012A(?:[);/ ]|$)\",\n \"model\": \"iQOO Z1x\"\n },\n {\n \"regex\": \"V1919A(?:[);/ ]|$)\",\n \"model\": \"iQOO Z5x\"\n },\n {\n \"regex\": \"V2023A(?:[);/ ]|$)\",\n \"model\": \"iQOO U1\"\n },\n {\n \"regex\": \"V2024A(?:[);/ ]|$)\",\n \"model\": \"iQOO 5\"\n },\n {\n \"regex\": \"V2025A(?:[);/ ]|$)\",\n \"model\": \"iQOO 5 Pro\"\n },\n {\n \"regex\": \"V2025(?:[);/ ]|$)\",\n \"model\": \"V20\"\n },\n {\n \"regex\": \"V2040(?:[);/ ]|$)\",\n \"model\": \"V20 (2021)\"\n },\n {\n \"regex\": \"vivo 1805(?:[);/ ]|$)\",\n \"model\": \"Nex\"\n },\n {\n \"regex\": \"V1923A(?:[);/ ]|$)\",\n \"model\": \"Nex 3\"\n },\n {\n \"regex\": \"V1924A(?:[);/ ]|$)\",\n \"model\": \"Nex 3 5G\"\n },\n {\n \"regex\": \"V1950A(?:[);/ ]|$)\",\n \"model\": \"Nex 3S\"\n },\n {\n \"regex\": \"V1821[AT](?:[);/ ]|$)\",\n \"model\": \"Nex Dual Display\"\n },\n {\n \"regex\": \"Vivo ONE(?:[);/ ]|$)\",\n \"model\": \"One\"\n },\n {\n \"regex\": \"V1831[AT](?:[);/ ]|$)\",\n \"model\": \"S1\"\n },\n {\n \"regex\": \"V1832[AT](?:[);/ ]|$)\",\n \"model\": \"S1 Pro\"\n },\n {\n \"regex\": \"V1932[AT](?:[);/ ]|$)\",\n \"model\": \"S5\"\n },\n {\n \"regex\": \"V1962A(?:[);/ ]|$)\",\n \"model\": \"S6 5G\"\n },\n {\n \"regex\": \"V2020C?A(?:[);/ ]|$)\",\n \"model\": \"S7\"\n },\n {\n \"regex\": \"V1941A(?:[);/ ]|$)\",\n \"model\": \"U3\"\n },\n {\n \"regex\": \"V1928A(?:[);/ ]|$)\",\n \"model\": \"U3X\"\n },\n {\n \"regex\": \"vivo 1804(?:[);/ ]|$)\",\n \"model\": \"V11 Pro\"\n },\n {\n \"regex\": \"vivo 1806(?:[);/ ]|$)\",\n \"model\": \"V11i\"\n },\n {\n \"regex\": \"1819(?:[);/ ]|$)\",\n \"model\": \"V15\"\n },\n {\n \"regex\": \"vivo 1818(?:[);/ ]|$)\",\n \"model\": \"V15 Pro\"\n },\n {\n \"regex\": \"vivo 1909(?:[);/ ]|$)\",\n \"model\": \"V17 Pro\"\n },\n {\n \"regex\": \"V2022(?:[);/ ]|$)\",\n \"model\": \"V20 SE\"\n },\n {\n \"regex\": \"(?:VIV-|BBG-)?vivo[ _]1601(?:[);/ ]|$)\",\n \"model\": \"V5\"\n },\n {\n \"regex\": \"vivo 1609(?:[);/ ]|$)\",\n \"model\": \"V5 Lite\"\n },\n {\n \"regex\": \"vivo 1611(?:[);/ ]|$)\",\n \"model\": \"V5 Plus\"\n },\n {\n \"regex\": \"vivo (1713|1612)(?:[);/ ]|$)\",\n \"model\": \"V5s\"\n },\n {\n \"regex\": \"vivo 1718(?:[);/ ]|$)\",\n \"model\": \"V7\"\n },\n {\n \"regex\": \"vivo 1716(?:[);/ ]|$)\",\n \"model\": \"V7 Plus\"\n },\n {\n \"regex\": \"vivo 1723(?:[);/ ]|$)\",\n \"model\": \"V9\"\n },\n {\n \"regex\": \"vivo 1727(?:[);/ ]|$)\",\n \"model\": \"V9 Youth\"\n },\n {\n \"regex\": \"vivo 1721(?:[);/ ]|$)\",\n \"model\": \"X20\"\n },\n {\n \"regex\": \"X20Plus(?:[);/ ]|$)\",\n \"model\": \"X20 Plus\"\n },\n {\n \"regex\": \"vivo 1725(?:[);/ ]|$)\",\n \"model\": \"X21\"\n },\n {\n \"regex\": \"V1814[AT](?:[);/ ]|$)\",\n \"model\": \"X21S\"\n },\n {\n \"regex\": \"V1809[AT](?:[);/ ]|$)\",\n \"model\": \"X23\"\n },\n {\n \"regex\": \"V1816[AT](?:[);/ ]|$)\",\n \"model\": \"X23\"\n },\n {\n \"regex\": \"V18(38|29)[AT](?:[);/ ]|$)\",\n \"model\": \"X27\"\n },\n {\n \"regex\": \"V1836[AT](?:[);/ ]|$)\",\n \"model\": \"X27 Pro\"\n },\n {\n \"regex\": \"V1938CT(?:[);/ ]|$)\",\n \"model\": \"X30\"\n },\n {\n \"regex\": \"V1938T(?:[);/ ]|$)\",\n \"model\": \"X30 Pro\"\n },\n {\n \"regex\": \"V2001A(?:[);/ ]|$)\",\n \"model\": \"X50\"\n },\n {\n \"regex\": \"V2005A(?:[);/ ]|$)\",\n \"model\": \"X50 Pro\"\n },\n {\n \"regex\": \"(?:V2011A|X50 Pro\\\\+)(?:[);/ ]|$)\",\n \"model\": \"X50 Pro Plus\"\n },\n {\n \"regex\": \"X9Plus(?:[);/ ]|$)\",\n \"model\": \"X9 Plus\"\n },\n {\n \"regex\": \"vivo 1902(?:[);/ ]|$)\",\n \"model\": \"Y17\"\n },\n {\n \"regex\": \"vivo 1915(?:[);/ ]|$)\",\n \"model\": \"Y19\"\n },\n {\n \"regex\": \"V202[79](?:[);/ ]|$)\",\n \"model\": \"Y20\"\n },\n {\n \"regex\": \"V2028(?:[);/ ]|$)\",\n \"model\": \"Y11s\"\n },\n {\n \"regex\": \"V2043(?:[);/ ]|$)\",\n \"model\": \"Y20 (2021)\"\n },\n {\n \"regex\": \"V2032(?:[);/ ]|$)\",\n \"model\": \"Y20i\"\n },\n {\n \"regex\": \"V2023(?:[);/ ]|$)\",\n \"model\": \"V20 SE\"\n },\n {\n \"regex\": \"V1901[AT](?:[);/ ]|$)\",\n \"model\": \"Y3\"\n },\n {\n \"regex\": \"V1930A(?:[);/ ]|$)\",\n \"model\": \"Y3 Standard\"\n },\n {\n \"regex\": \"V2036(?:[);/ ]|$)\",\n \"model\": \"Y31\"\n },\n {\n \"regex\": \"V1934A(?:[);/ ]|$)\",\n \"model\": \"Y5s\"\n },\n {\n \"regex\": \"V1965A(?:[);/ ]|$)\",\n \"model\": \"Y50\"\n },\n {\n \"regex\": \"V2030(?:[);/ ]|$)\",\n \"model\": \"Y51\"\n },\n {\n \"regex\": \"V2054A(?:[);/ ]|$)\",\n \"model\": \"Y31s\"\n },\n {\n \"regex\": \"vivo 1606(?:[);/ ]|$)\",\n \"model\": \"Y53i\"\n },\n {\n \"regex\": \"vivo 1603(?:[);/ ]|$)\",\n \"model\": \"Y55l\"\n },\n {\n \"regex\": \"vivo 1610(?:[);/ ]|$)\",\n \"model\": \"Y55s\"\n },\n {\n \"regex\": \"vivo 1719(?:[);/ ]|$)\",\n \"model\": \"Y65\"\n },\n {\n \"regex\": \"vivo 1714(?:[);/ ]|$)\",\n \"model\": \"Y69\"\n },\n {\n \"regex\": \"V2002A(?:[);/ ]|$)\",\n \"model\": \"Y70s\"\n },\n {\n \"regex\": \"vivo 1724(?:[);/ ]|$)\",\n \"model\": \"Y71\"\n },\n {\n \"regex\": \"vivo 1801(?:[);/ ]|$)\",\n \"model\": \"Y71i\"\n },\n {\n \"regex\": \"V1731CA(?:[);/ ]|$)\",\n \"model\": \"Y73\"\n },\n {\n \"regex\": \"V1913[AT](?:[);/ ]|$)\",\n \"model\": \"Y7s\"\n },\n {\n \"regex\": \"vivo 180([38]|8i)(?:[);/ ]|$)\",\n \"model\": \"Y81\"\n },\n {\n \"regex\": \"vivo 1812(?:[);/ ]|$)\",\n \"model\": \"Y81i\"\n },\n {\n \"regex\": \"V1732[AT](?:[);/ ]|$)\",\n \"model\": \"Y81s\"\n },\n {\n \"regex\": \"vivo 1726(?:[);/ ]|$)\",\n \"model\": \"Y83 Pro\"\n },\n {\n \"regex\": \"V1730EA(?:[);/ ]|$)\",\n \"model\": \"Y89\"\n },\n {\n \"regex\": \"vivo 181[17](?:[);/ ]|$)\",\n \"model\": \"Y91\"\n },\n {\n \"regex\": \"V1945A(?:[);/ ]|$)\",\n \"model\": \"Y9s\"\n },\n {\n \"regex\": \"V2026(?:[);/ ]|$)\",\n \"model\": \"Y12s\"\n },\n {\n \"regex\": \"vivo 18(16|20)(?:[);/ ]|$)\",\n \"model\": \"Y91i\"\n },\n {\n \"regex\": \"(V1818[AT]|vivo 181[45])(?:[);/ ]|$)\",\n \"model\": \"Y93\"\n },\n {\n \"regex\": \"V1818C[AT](?:[);/ ]|$)\",\n \"model\": \"Y93s\"\n },\n {\n \"regex\": \"vivo 1807(?:[);/ ]|$)\",\n \"model\": \"Y95\"\n },\n {\n \"regex\": \"V1813[AT](?:[);/ ]|$)\",\n \"model\": \"Y97\"\n },\n {\n \"regex\": \"V1801A0(?:[);/ ]|$)\",\n \"model\": \"Z1\"\n },\n {\n \"regex\": \"V1730D[AT](?:[);/ ]|$)\",\n \"model\": \"Z1i\"\n },\n {\n \"regex\": \"vivo 1917(?:[);/ ]|$)\",\n \"model\": \"Z1x\"\n },\n {\n \"regex\": \"V1813B[AT](?:[);/ ]|$)\",\n \"model\": \"Z3\"\n },\n {\n \"regex\": \"V1730GA(?:[);/ ]|$)\",\n \"model\": \"Z3x\"\n },\n {\n \"regex\": \"V1921A(?:[);/ ]|$)\",\n \"model\": \"Z5\"\n },\n {\n \"regex\": \"V1911A(?:[);/ ]|$)\",\n \"model\": \"Z5x\"\n },\n {\n \"regex\": \"V1990A(?:[);/ ]|$)\",\n \"model\": \"Z5x (2020)\"\n },\n {\n \"regex\": \"V1963A(?:[);/ ]|$)\",\n \"model\": \"Z6\"\n },\n {\n \"regex\": \"(?:VIV-|BBG-)?vivo[ _]([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:VIV-|BBG-)?vivo[ _]([^);/]+)(?:[);/]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Vinsoc\": {\n \"regex\": \"(XA Pro) Build\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Bird\": {\n \"regex\": \"BIRD[\\\\-. _]([^;/]+)\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"BIRD[\\\\-. _]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"BIRD[\\\\-. _]([^;/]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Becker\": {\n \"regex\": \"Becker-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Beeline\": {\n \"regex\": \"Beeline\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Beeline[_ ]Pro[_ ]([2436])\",\n \"model\": \"Pro $1\"\n },\n {\n \"regex\": \"Tab (Fast|Pro)\",\n \"model\": \"Tab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Tab ([0-9])\",\n \"model\": \"Tab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Tab\",\n \"model\": \"Tab\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"E700\",\n \"model\": \"E700\"\n },\n {\n \"regex\": \"Smart2\",\n \"model\": \"Smart 2\"\n },\n {\n \"regex\": \"Smart ([0-9])\",\n \"model\": \"Smart $1\"\n },\n {\n \"regex\": \"Smart Dual\",\n \"model\": \"Smart Dual\"\n },\n {\n \"regex\": \"(?:Beeline[_ ])?Fast[_ ]2(?:[);/ ]|$)\",\n \"model\": \"Fast 2\"\n },\n {\n \"regex\": \"Fast(?:[);/ ]|$)\",\n \"model\": \"Fast\"\n }\n ]\n },\n \"Beetel\": {\n \"regex\": \"Beetel ([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"BenQ-Siemens\": {\n \"regex\": \"BENQ-SIEMENS - ([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"BenQ\": {\n \"regex\": \"BENQ(?:[ \\\\-])?([a-z0-9]+)|F52_09(?:[);/ ]|$)\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"F52_09(?:[);/ ]|$)\",\n \"model\": \"F52\"\n },\n {\n \"regex\": \"BENQ(?:[ \\\\-])?([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Blaupunkt\": {\n \"regex\": \"Blaupunkt|Soundphone S2|Atlantis[_ ](?:1001A|1010A|A10\\\\.G40[23])|SLplus02|Discovery[_ ](?:A10_302|111C|1000C|1001A?)|Endeavour[_ ](?:785|101[GLM]|1000|1001|101[03]|1100)|Polaris[_ ]803|BP_6010\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Discovery[_ ]111C\",\n \"model\": \"Discovery 111C\"\n },\n {\n \"regex\": \"Discovery[_ ]A10_302\",\n \"model\": \"Discovery A10.302\"\n },\n {\n \"regex\": \"Discovery[_ ]1000C\",\n \"model\": \"Discovery 1000C\"\n },\n {\n \"regex\": \"Discovery[_ ]1001A\",\n \"model\": \"Discovery 1001A\"\n },\n {\n \"regex\": \"Discovery[_ ]1001\",\n \"model\": \"Discovery 1001\"\n },\n {\n \"regex\": \"Soundphone S2\",\n \"model\": \"Soundphone S2\"\n },\n {\n \"regex\": \"Endeavour[_ ](101[GLM]|785|100[01]|101[03]|1100)\",\n \"model\": \"Endeavour $1\"\n },\n {\n \"regex\": \"Polaris[_ ](803)\",\n \"model\": \"Polaris $1\"\n },\n {\n \"regex\": \"Atlantis[_ ](1001A|1010A|A10\\\\.G40[23])\",\n \"model\": \"Atlantis $1\"\n },\n {\n \"regex\": \"SLplus02\",\n \"model\": \"SL Plus 02\"\n },\n {\n \"regex\": \"(BP_6010)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Blaupunkt[_ ](SL[_ ]0[124]|SM[_ ]0[12])\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(4K Android TV)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Bmobile\": {\n \"regex\": \"Bmobile[_ ]|AX-?(?:[1-9][0-9]{2,3}[eEO+]?|7OO)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AX-?([1-9][0-9]{2,3}[eEO+]?)\",\n \"model\": \"AX$1\"\n },\n {\n \"regex\": \"AX7OO\",\n \"model\": \"AX700\"\n },\n {\n \"regex\": \"Bmobile[_ ]([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Bmobile[_ ]([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"bq\": {\n \"regex\": \"Aquaris|bq [^/;]+ Build|BQS[-_]([0-9]{4})|(BQ(ru)?[_ -][0-9]{3,4})|BQ5059|BQ1008G|BQru_BQru-\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BQ(?:ru)?-(?:5209L|5044)(?:[);/ ]|$)\",\n \"model\": \"Strike LTE\"\n },\n {\n \"regex\": \"BQ(?:ru)?-(?:6035L)(?:[);/ ]|$)\",\n \"model\": \"Strike Power Max\"\n },\n {\n \"regex\": \"BQ(?:ru)?-(?:5535L)(?:[);/ ]|$)\",\n \"model\": \"Strike Power Plus\"\n },\n {\n \"regex\": \"BQ(S|ru)?-(?:5070|6040L)(?:[);/ ]|$)\",\n \"model\": \"Magic\"\n },\n {\n \"regex\": \"BQ(S|ru)?-(?:6424L)(?:[);/ ]|$)\",\n \"model\": \"Magic O\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-(?:5730L)(?:[);/ ]|$)\",\n \"model\": \"Magic C\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-(?:5731L)(?:[);/ ]|$)\",\n \"model\": \"Magic S\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-5745L(?:[);/ ]|$)\",\n \"model\": \"Clever\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-5533G(?:[);/ ]|$)\",\n \"model\": \"Fresh\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-5031G(?:[);/ ]|$)\",\n \"model\": \"Fun\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-(?:5732L)(?:[);/ ]|$)\",\n \"model\": \"Aurora SE\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-6430L(?:[);/ ]|$)\",\n \"model\": \"Aurora\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-6630L(?:[);/ ]|$)\",\n \"model\": \"Magic L\"\n },\n {\n \"regex\": \"BQ-9011[G]?(?:[);/ ]|$)\",\n \"model\": \"Vision\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-8068L(?:[);/ ]|$)\",\n \"model\": \"Hornet Plus Pro\"\n },\n {\n \"regex\": \"BQ-8067L\",\n \"model\": \"Hornet Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-8052G\",\n \"model\": \"BQ-8052G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-8041L\",\n \"model\": \"Art\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7084G\",\n \"model\": \"Simple\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7061G\",\n \"model\": \"Andros\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ(ru)?-(7082)\",\n \"model\": \"Armor\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7051G\",\n \"model\": \"Elba\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7036L\",\n \"model\": \"Hornet\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7022(G)?\",\n \"model\": \"Canion\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7021G\",\n \"model\": \"Hit\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7010G\",\n \"model\": \"Max\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7006G\",\n \"model\": \"Union\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7003\",\n \"model\": \"Jamaica\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-6200L|BQ-6000L\",\n \"model\": \"Aurora\"\n },\n {\n \"regex\": \"BQ-6631G\",\n \"model\": \"Surf\"\n },\n {\n \"regex\": \"BQ-6022G\",\n \"model\": \"Aura\"\n },\n {\n \"regex\": \"BQ(ru)?[ -]6015L\",\n \"model\": \"Universe\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-(?:5525|6030G|6010G)\",\n \"model\": \"Practic\"\n },\n {\n \"regex\": \"BQ-6001L|BQ-6050\",\n \"model\": \"Jumbo\"\n },\n {\n \"regex\": \"BQ-5707G(?:[);/ ]|$)\",\n \"model\": \"Next Music\"\n },\n {\n \"regex\": \"BQ-5702(?:[);/ ]|$)\",\n \"model\": \"Spring\"\n },\n {\n \"regex\": \"BQ-5700L(?:[);/ ]|$)\",\n \"model\": \"Space X\"\n },\n {\n \"regex\": \"BQ-(?:5591|551[89]G)(?:[);/ ]|$)\",\n \"model\": \"Jeans\"\n },\n {\n \"regex\": \"BQ-5522\",\n \"model\": \"Next\"\n },\n {\n \"regex\": \"BQ-5520L(?:[);/ ]|$)\",\n \"model\": \"Silk\"\n },\n {\n \"regex\": \"BQ-5519L(?:[);/ ]|$)\",\n \"model\": \"Fast Plus\"\n },\n {\n \"regex\": \"BQ-5540L(?:[);/ ]|$)\",\n \"model\": \"Fast Pro\"\n },\n {\n \"regex\": \"BQ-5517L(?:[);/ ]|$)\",\n \"model\": \"Twin Pro\"\n },\n {\n \"regex\": \"BQ-5516L(?:[);/ ]|$)\",\n \"model\": \"Twin\"\n },\n {\n \"regex\": \"BQS-5515(?:[);/ ]|$)\",\n \"model\": \"Wide\"\n },\n {\n \"regex\": \"BQ-5515[L]?(?:[);/ ]|$)\",\n \"model\": \"Fast\"\n },\n {\n \"regex\": \"BQ-(?:5512L|5528L)(?:[);/ ]|$)\",\n \"model\": \"Strike Forward\"\n },\n {\n \"regex\": \"BQ-5511L(?:[);/ ]|$)\",\n \"model\": \"Bliss\"\n },\n {\n \"regex\": \"BQS[_ ]5505(?:[);/ ]|$)\",\n \"model\": \"Amsterdam\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5510(?:[);/ ]|$)\",\n \"model\": \"Strike Power Max 4G\"\n },\n {\n \"regex\": \"BQ(?:ru)?-(?:5521|5594)(?:[);/ ]|$)\",\n \"model\": \"Strike Power Max\"\n },\n {\n \"regex\": \"BQ-5508L(?:[);/ ]|$)\",\n \"model\": \"Next LTE\"\n },\n {\n \"regex\": \"BQ-5507L(?:[);/ ]|$)\",\n \"model\": \"Iron Max\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5504(?:[);/ ]|$)\",\n \"model\": \"Strike Selfie Max\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5503(?:[);/ ]|$)\",\n \"model\": \"Nice 2\"\n },\n {\n \"regex\": \"BQ(?:ru)?-6045L(?:[);/ ]|$)\",\n \"model\": \"Nice\"\n },\n {\n \"regex\": \"BQ(?:ru)?-4030G(?:[);/ ]|$)\",\n \"model\": \"Nice Mini\"\n },\n {\n \"regex\": \"BQS-5502(?:[);/ ]|$)\",\n \"model\": \"Hammer\"\n },\n {\n \"regex\": \"BQS-5501(?:[);/ ]|$)\",\n \"model\": \"Kawasaki\"\n },\n {\n \"regex\": \"BQS-5500(?:[);/ ]|$)\",\n \"model\": \"Vancouver\"\n },\n {\n \"regex\": \"BQ-5500L(?:[);/ ]|$)\",\n \"model\": \"Advance\"\n },\n {\n \"regex\": \"BQ-5302G(?:[);/ ]|$)\",\n \"model\": \"Velvet 2\"\n },\n {\n \"regex\": \"BQ-5301(?:[);/ ]|$)\",\n \"model\": \"Strike View\"\n },\n {\n \"regex\": \"BQ-5300G(?:[);/ ]|$)\",\n \"model\": \"Velvet View\"\n },\n {\n \"regex\": \"BQ(ru|S)?-(?:5211|5020)(?:[);/ ]|$)\",\n \"model\": \"Strike\"\n },\n {\n \"regex\": \"BQ-5206L(?:[);/ ]|$)\",\n \"model\": \"Balance\"\n },\n {\n \"regex\": \"BQ(?:ru|S)?-(?:5204|5050)(?:[);/ ]|$)\",\n \"model\": \"Strike Selfie\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5203(?:[);/ ]|$)\",\n \"model\": \"Vision\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5202(?:[);/ ]|$)\",\n \"model\": \"Space Lite\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5201(?:[);/ ]|$)\",\n \"model\": \"Space\"\n },\n {\n \"regex\": \"BQ-5082(?:[);/ ]|$)\",\n \"model\": \"Sense 2\"\n },\n {\n \"regex\": \"BQ-5045L(?:[);/ ]|$)\",\n \"model\": \"Wallet\"\n },\n {\n \"regex\": \"BQ-5047L(?:[);/ ]|$)\",\n \"model\": \"Like\"\n },\n {\n \"regex\": \"BQ-5071(?:[);/ ]|$)\",\n \"model\": \"Belief\"\n },\n {\n \"regex\": \"BQ[S]?-(?:5065|5340)(?:[);/ ]|$)\",\n \"model\": \"Choice\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-5046L(?:[);/ ]|$)\",\n \"model\": \"Choice LTE\"\n },\n {\n \"regex\": \"BQ(?:ru)?-?(?:5059|5514G)(?:[);/ ]|$)\",\n \"model\": \"Strike Power\"\n },\n {\n \"regex\": \"(?:BQru_)?BQ(?:ru)?-5058(?:[);/ ]|$)\",\n \"model\": \"Strike Power Easy\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5057(?:[);/ ]|$)\",\n \"model\": \"Strike 2\"\n },\n {\n \"regex\": \"BQ[S]?-(?:5056|5030)(?:[);/ ]|$)\",\n \"model\": \"Fresh\"\n },\n {\n \"regex\": \"BQ-6042l(?:[);/ ]|$)\",\n \"model\": \"Magic E\"\n },\n {\n \"regex\": \"BQS-5055(?:[);/ ]|$)\",\n \"model\": \"Turbo Plus\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5054(?:[);/ ]|$)\",\n \"model\": \"Crystal\"\n },\n {\n \"regex\": \"BQ-5052(?:[);/ ]|$)\",\n \"model\": \"Sense\"\n },\n {\n \"regex\": \"BQ[S]?-5045(?:[);/ ]|$)\",\n \"model\": \"Fast\"\n },\n {\n \"regex\": \"BQ(?:ru)?-(?:5037|5514L)(?:[);/ ]|$)\",\n \"model\": \"Strike Power 4G\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5035(?:[);/ ]|$)\",\n \"model\": \"Velvet\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5033(?:[);/ ]|$)\",\n \"model\": \"Shark\"\n },\n {\n \"regex\": \"BQ-5541L(?:[);/ ]|$)\",\n \"model\": \"Shark Rush\"\n },\n {\n \"regex\": \"BQ-5032(?:[);/ ]|$)\",\n \"model\": \"Element\"\n },\n {\n \"regex\": \"BQS-5025(?:[);/ ]|$)\",\n \"model\": \"High Way\"\n },\n {\n \"regex\": \"BQ(?:ru)?-5022(?:[);/ ]|$)\",\n \"model\": \"Bond\"\n },\n {\n \"regex\": \"BQ-5015L(?:[);/ ]|$)\",\n \"model\": \"First\"\n },\n {\n \"regex\": \"BQ-5016G(?:[);/ ]|$)\",\n \"model\": \"Choice\"\n },\n {\n \"regex\": \"BQ-5012L(?:[);/ ]|$)\",\n \"model\": \"Rich\"\n },\n {\n \"regex\": \"BQ-5521L(?:[);/ ]|$)\",\n \"model\": \"Rich Max\"\n },\n {\n \"regex\": \"BQS-5011(?:[);/ ]|$)\",\n \"model\": \"Monte Carlo\"\n },\n {\n \"regex\": \"BQ-5010G(?:[);/ ]|$)\",\n \"model\": \"Spot\"\n },\n {\n \"regex\": \"BQ-5000G(?:[);/ ]|$)\",\n \"model\": \"Velvet Easy\"\n },\n {\n \"regex\": \"BQS-5010(?:[);/ ]|$)\",\n \"model\": \"Prague\"\n },\n {\n \"regex\": \"BQ-5009L(?:[);/ ]|$)\",\n \"model\": \"Trend\"\n },\n {\n \"regex\": \"BQS-500[59](?:[);/ ]|$)\",\n \"model\": \"Sydney\"\n },\n {\n \"regex\": \"BQ-5008L(?:[);/ ]|$)\",\n \"model\": \"Brave\"\n },\n {\n \"regex\": \"BQ-5007L(?:[);/ ]|$)\",\n \"model\": \"Iron\"\n },\n {\n \"regex\": \"BQS-5006(?:[);/ ]|$)\",\n \"model\": \"Los Angeles\"\n },\n {\n \"regex\": \"BQ-(?:5005L|5530L)(?:[);/ ]|$)\",\n \"model\": \"Intense\"\n },\n {\n \"regex\": \"BQS-5004(?:[);/ ]|$)\",\n \"model\": \"Paris\"\n },\n {\n \"regex\": \"BQ-5003L(?:[);/ ]|$)\",\n \"model\": \"Shark Pro\"\n },\n {\n \"regex\": \"BQ-5002G(?:[);/ ]|$)\",\n \"model\": \"Fun\"\n },\n {\n \"regex\": \"BQS-5002(?:[);/ ]|$)\",\n \"model\": \"Colombo\"\n },\n {\n \"regex\": \"BQS-5003(?:[);/ ]|$)\",\n \"model\": \"Colombo II\"\n },\n {\n \"regex\": \"BQ-5001L(?:[);/ ]|$)\",\n \"model\": \"Contact\"\n },\n {\n \"regex\": \"BQS-5001(?:[);/ ]|$)\",\n \"model\": \"Milan\"\n },\n {\n \"regex\": \"BQ(?:ru|S)?-5000(?:[);/ ]|$)\",\n \"model\": \"Tokyo\"\n },\n {\n \"regex\": \"BQS-4800(?:[);/ ]|$)\",\n \"model\": \"Blade\"\n },\n {\n \"regex\": \"BQS-4707(?:[);/ ]|$)\",\n \"model\": \"Montreal\"\n },\n {\n \"regex\": \"BQS-4702(?:[);/ ]|$)\",\n \"model\": \"\u041Esaka\"\n },\n {\n \"regex\": \"BQS-4701(?:[);/ ]|$)\",\n \"model\": \"Venice\"\n },\n {\n \"regex\": \"BQ-(?:4585|5011G)(?:[);/ ]|$)\",\n \"model\": \"Fox View\"\n },\n {\n \"regex\": \"BQ(?:ru)?-4583(?:[);/ ]|$)\",\n \"model\": \"Fox Power\"\n },\n {\n \"regex\": \"BQS-4570(?:[);/ ]|$)\",\n \"model\": \"Drive\"\n },\n {\n \"regex\": \"BQS-4560(?:[);/ ]|$)\",\n \"model\": \"Golf\"\n },\n {\n \"regex\": \"BQS-4555(?:[);/ ]|$)\",\n \"model\": \"Turbo\"\n },\n {\n \"regex\": \"BQS-4550(?:[);/ ]|$)\",\n \"model\": \"Richmond\"\n },\n {\n \"regex\": \"BQ(?:ru)?-(?:4526|5004G)(?:[);/ ]|$)\",\n \"model\": \"Fox\"\n },\n {\n \"regex\": \"BQS-4525(?:[);/ ]|$)\",\n \"model\": \"Vienna\"\n },\n {\n \"regex\": \"BQS-4516(?:[);/ ]|$)\",\n \"model\": \"Singapore\"\n },\n {\n \"regex\": \"BQS-4515(?:[);/ ]|$)\",\n \"model\": \"Moscow\"\n },\n {\n \"regex\": \"BQS-4510(?:[);/ ]|$)\",\n \"model\": \"Florence\"\n },\n {\n \"regex\": \"BQS-4505(?:[);/ ]|$)\",\n \"model\": \"Santiago\"\n },\n {\n \"regex\": \"BQS-4503(?:[);/ ]|$)\",\n \"model\": \"Dubai\"\n },\n {\n \"regex\": \"BQS-4502(?:[);/ ]|$)\",\n \"model\": \"Kingston\"\n },\n {\n \"regex\": \"BQS-4501 Bristol\",\n \"model\": \"Bristol\"\n },\n {\n \"regex\": \"BQ-4501G(?:[);/ ]|$)\",\n \"model\": \"Fox Easy\"\n },\n {\n \"regex\": \"BQ(?:ru)?-4500(?:[);/ ]|$)\",\n \"model\": \"Fox LTE\"\n },\n {\n \"regex\": \"BQ-4077(?:[);/ ]|$)\",\n \"model\": \"Shark Mini\"\n },\n {\n \"regex\": \"BQ(?:ru)?-4072(?:[);/ ]|$)\",\n \"model\": \"Strike Mini\"\n },\n {\n \"regex\": \"BQ(?:ru)?[- ]402[68](?:[);/ ]|$)\",\n \"model\": \"Up!\"\n },\n {\n \"regex\": \"BQS-4010(?:[);/ ]|$)\",\n \"model\": \"Aspen\"\n },\n {\n \"regex\": \"BQS-4009(?:[);/ ]|$)\",\n \"model\": \"Orleans\"\n },\n {\n \"regex\": \"BQS-4008(?:[);/ ]|$)\",\n \"model\": \"Shanghai\"\n },\n {\n \"regex\": \"BQS-4007(?:[);/ ]|$)\",\n \"model\": \"Valencia\"\n },\n {\n \"regex\": \"BQS-4005(?:[);/ ]|$)\",\n \"model\": \"Seoul\"\n },\n {\n \"regex\": \"BQS-4004(?:[);/ ]|$)\",\n \"model\": \"Dusseldorf\"\n },\n {\n \"regex\": \"BQS-4003(?:[);/ ]|$)\",\n \"model\": \"Verona\"\n },\n {\n \"regex\": \"BQ-4001G(?:[);/ ]|$)\",\n \"model\": \"Cool\"\n },\n {\n \"regex\": \"BQS-4001(?:[);/ ]|$)\",\n \"model\": \"Oxford\"\n },\n {\n \"regex\": \"BQS-3510(?:[);/ ]|$)\",\n \"model\": \"Aspen Mini\"\n },\n {\n \"regex\": \"BQS-3503(?:[);/ ]|$)\",\n \"model\": \"Bombay\"\n },\n {\n \"regex\": \"BQ-1085L(?:[);/ ]|$)\",\n \"model\": \"Hornet Max Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-1084L(?:[);/ ]|$)\",\n \"model\": \"Hornet Max\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-1083G(?:[);/ ]|$)\",\n \"model\": \"Armor Pro Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-1082G(?:[);/ ]|$)\",\n \"model\": \"Armor Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-1077L(?:[);/ ]|$)\",\n \"model\": \"Armor Pro LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ(?:ru)?-1057L(?:[);/ ]|$)\",\n \"model\": \"Passion\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-1051G(?:[);/ ]|$)\",\n \"model\": \"Corsika\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-1050G(?:[);/ ]|$)\",\n \"model\": \"Hawaii\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ[-]?1008G(?:[);/ ]|$)\",\n \"model\": \"Grace\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Aquaris M8\",\n \"model\": \"Aquaris M8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Aquaris_([AM])4.5\",\n \"model\": \"Aquaris $14.5\"\n },\n {\n \"regex\": \"BQ(?:ru)?[_ -](?:5590|5740G)(?:[);/ ]|$)\",\n \"model\": \"Spring\"\n },\n {\n \"regex\": \"BQ[S]?-(?:6016L|5520)(?:[);/ ]|$)\",\n \"model\": \"Mercury\"\n },\n {\n \"regex\": \"BQ(?:S|ru)?-(?:5701L|5060)(?:[);/ ]|$)\",\n \"model\": \"Slim\"\n },\n {\n \"regex\": \"(BQ-7850|BQ-700[12]G|BQ-8002G|BQ-905[12]G|BQ-9702G|BQ-7056G)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-8006G(?:[);/ ]|$)\",\n \"model\": \"Java\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7062G(?:[);/ ]|$)\",\n \"model\": \"Fiji\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ(?:ru)?-1081G(?:[);/ ]|$)\",\n \"model\": \"Grace 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7802G(?:[);/ ]|$)\",\n \"model\": \"Luzon\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7008G(?:[);/ ]|$)\",\n \"model\": \"Clarion\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7064G(?:[);/ ]|$)\",\n \"model\": \"Fusion\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7050G(?:[);/ ]|$)\",\n \"model\": \"Malta\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7000G(?:[);/ ]|$)\",\n \"model\": \"\u0421harm\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7040G(?:[);/ ]|$)\",\n \"model\": \"\u0421harm Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7038G(?:[);/ ]|$)\",\n \"model\": \"Light Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7005G(?:[);/ ]|$)\",\n \"model\": \"Maui\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7098G(?:[);/ ]|$)\",\n \"model\": \"Armor Power\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-1007(?:[);/ ]|$)\",\n \"model\": \"Necker\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-1045[G]?(?:[);/ ]|$)\",\n \"model\": \"Orion\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-(?:1054L|1020L)(?:[);/ ]|$)\",\n \"model\": \"Nexion\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-7083G(?:[);/ ]|$)\",\n \"model\": \"Light\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ-8077L(?:[);/ ]|$)\",\n \"model\": \"Exion Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ(?:ru)?-7083(?:[);/ ]|$)\",\n \"model\": \"7083\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ(?:ru)?-1056L(?:[);/ ]|$)\",\n \"model\": \"1056L\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ(?:ru)?-1022l(?:[);/ ]|$)\",\n \"model\": \"Armor Pro LTE+\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ(?:ru)?-1024L(?:[);/ ]|$)\",\n \"model\": \"Exion Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BQ(?:ru)?-7081(?:[);/ ]|$)\",\n \"model\": \"Charm\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:bq )?(Aquaris[^/;]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Aquaris (E(4.5|[56])|M(5|10)|U2 Lite|U2|U (Lite|Plus)|V Plus|X5 Plus|X2? Pro|X[25]|[CMUVX])\",\n \"model\": \"Aquaris $1\"\n },\n {\n \"regex\": \"bq ([^/;]+) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Bush\": {\n \"regex\": \"Bush[ _-]|Bush10Nou\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Bush10Nou\",\n \"device\": \"tablet\",\n \"model\": \"10Nou\"\n },\n {\n \"regex\": \"BUSH ([^;/)]+)Tablet(?: Build|[);])\",\n \"model\": \"$1Tablet\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BUSH ([^;/)]+)(?: Build|[);])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"CAGI\": {\n \"regex\": \"CAGI-\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"CAGI-OMEGA\",\n \"model\": \"Omega\"\n },\n {\n \"regex\": \"CAGI-([a-z0-9_\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Capitel\": {\n \"regex\": \"Capitel-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Captiva\": {\n \"regex\": \"Captiva[ _-]([^;/)]+)(?: Build|\\\\))\",\n \"device\": \"tablet\",\n \"model\": \"Pad $1\"\n },\n \"Casio\": {\n \"regex\": \"(C811|C7[57]1)(?: 4G)?(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"C751(?:[);/ ]|$)\",\n \"model\": \"G'zOne Ravine\"\n },\n {\n \"regex\": \"C771(?:[);/ ]|$)\",\n \"model\": \"G'zOne Commando\"\n },\n {\n \"regex\": \"C811 4G(?:[);/ ]|$)\",\n \"model\": \"G'zOne Commando 4G LTE\"\n }\n ]\n },\n \"Casper\": {\n \"regex\": \"CASPER[_ ]|VIA[- _](T7D|A[34]|E3|F[123]|G4|M4|[LS]8|S7|P2|V8C|A1_Plus(?:_64)?|A1(?:_1)?|S[13]0|S|T17_M|T1[07]|T7|T7-3G|T8B|T8D-3G|S1[78])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:CASPER[_ ])?VIA_A1_Plus(?:_64)?\",\n \"model\": \"VIA A1 Plus\"\n },\n {\n \"regex\": \"(?:CASPER[_ ])?VIA[_ ](G1_Plus|G1|E1|[AE]2|M[123]|V[35689]|V10|G3|V6X|A[34]|E3|F[123]|G4|M4|P2|S|V8C|A1(?:_1)?)(?:[);/ ]|$)\",\n \"model\": \"VIA $1\"\n },\n {\n \"regex\": \"CASPER_VIA_E1c\",\n \"model\": \"VIA E1C\"\n },\n {\n \"regex\": \"CASPER_L10_4.5G\",\n \"model\": \"L10 4.5G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"CASPER_(S[23]8)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VIA[- _](T7|T8D)-3G\",\n \"model\": \"VIA $1 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VIA[- _](T7D|S[13]0|[LS]8|S7|T17_M|T1[07]|T7|T8B|S1[78])(?:[);/ ]|$)\",\n \"model\": \"VIA $1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Cat\": {\n \"regex\": \"Cat ?(tablet|stargate|nova)|B15Q|CAT B35|CAT-B100\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"B15Q\",\n \"model\": \"B15Q\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"CAT B35\",\n \"model\": \"B35\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Cat ?(?:tablet)? ?((?:Galactica|Nova|StarGate|PHOENIX)[^/;]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Cat ?tablet\",\n \"model\": \"Nova\"\n },\n {\n \"regex\": \"CAT-(B100)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Carrefour\": {\n \"regex\": \"CT(?:10[0123]0|7[12]0|820)(?:W|FR)?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"CT820\",\n \"model\": \"Touch Tablet Neo2\"\n },\n {\n \"regex\": \"CT(10[0123]0(?:W|FR)?)\",\n \"model\": \"CT$1\"\n },\n {\n \"regex\": \"CT(7[12]0(?:W|FR)?)\",\n \"model\": \"CT$1\"\n }\n ]\n },\n \"Celkon\": {\n \"regex\": \"Celkon|Millennia Hero\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Celkon[ _*](C[78]20)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Millennia Hero\",\n \"model\": \"Millennia Hero\"\n },\n {\n \"regex\": \"Celkon[ _*](CT[^;/]+) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Celkon[ _*]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Celkon[\\\\. _*]([^;/\\\\)]+)[\\\\)/]\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Changhong\": {\n \"regex\": \"Changhong\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Changhong[ ]?(X1-K|X6|R8|Z9S?|Z1S|S18)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ChangHong Android TV\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n {\n \"regex\": \"(?:Opera TV.+)Changhong-([^);/]+)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Cherry Mobile\": {\n \"regex\": \"Cherry|Superion S1 DTV|Flare([ _])?(2X|4|A[123]|J[123568]|P[13]|S[4-8]|X2|Y[367]|S Play|HD|LITE|XL|X_V2|Y3s|Tab)(?:[ _](?:Pro|Plus|Max|LTE))?|Fusion Bolt|Omega[_ ](?:Icon 2|Icon Lite 2|lite[_ ][43][Cs]?|HD [45]|HD_Duo)|Spin Max 2|Selfie_Two\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Flare2X)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Flare[_ ]HD[_ ]([345])\",\n \"model\": \"Flare HD $1\"\n },\n {\n \"regex\": \"Flare_HD_MAX\",\n \"model\": \"Flare HD Max\"\n },\n {\n \"regex\": \"FLARE LITE\",\n \"model\": \"Flare Lite\"\n },\n {\n \"regex\": \"Flare S Play\",\n \"model\": \"Flare S Play\"\n },\n {\n \"regex\": \"Flare[_ ]J([26])S\",\n \"model\": \"Flare J$1s\"\n },\n {\n \"regex\": \"Flare_(J2|S7)_Prime\",\n \"model\": \"Flare $1 Prime\"\n },\n {\n \"regex\": \"Flare_S7_Deluxe\",\n \"model\": \"Flare S7 Deluxe\"\n },\n {\n \"regex\": \"Flare_S7_Power\",\n \"model\": \"Flare S7 Power\"\n },\n {\n \"regex\": \"Flare[_ ]Y([367])[_ ]Pro\",\n \"model\": \"Flare Y$1 Pro\"\n },\n {\n \"regex\": \"Flare XL Plus\",\n \"model\": \"Flare XL Plus\"\n },\n {\n \"regex\": \"Flare[ _]X[_ ]V2\",\n \"model\": \"Flare X V2\"\n },\n {\n \"regex\": \"Flare[ _](A2|J3|P1|S[467])[ _]Lite\",\n \"model\": \"Flare $1 Lite\"\n },\n {\n \"regex\": \"Flare[ _](J[12]|S[57]|Y3|J6)[ _]mini\",\n \"model\": \"Flare $1 Mini\"\n },\n {\n \"regex\": \"Flare_J2_2018\",\n \"model\": \"Flare J2 (2018)\"\n },\n {\n \"regex\": \"Flare S4 Max LTE\",\n \"model\": \"Flare S4 Max LTE\"\n },\n {\n \"regex\": \"Flare[_ ](S[47]|J2)[_ ]Max\",\n \"model\": \"Flare $1 Max\"\n },\n {\n \"regex\": \"FlareS5LiteDTV\",\n \"model\": \"Flare S5 Lite DTV\"\n },\n {\n \"regex\": \"Flare[_ ](S[567]|J6)[_ ]Plus\",\n \"model\": \"Flare $1 Plus\"\n },\n {\n \"regex\": \"FLARE S6 POWER\",\n \"model\": \"Flare S6 Power\"\n },\n {\n \"regex\": \"Flare(?:[ _])?(4|A[123]|J8 LTE|J[13568]|P[13]|S[4-8]|X2|Y3s|Y7_LTE|Y[673])\",\n \"model\": \"Flare $1\"\n },\n {\n \"regex\": \"OMEGA HD ([45])\",\n \"model\": \"Omega HD $1\"\n },\n {\n \"regex\": \"Omega_HD_Duo\",\n \"model\": \"Omega HD Duo\"\n },\n {\n \"regex\": \"Omega Icon Lite 2\",\n \"model\": \"Omega Icon Lite 2\"\n },\n {\n \"regex\": \"Omega Icon 2\",\n \"model\": \"Omega Icon 2\"\n },\n {\n \"regex\": \"Omega[_ ]Lite[_ ](3[Cs]|4)\",\n \"model\": \"Omega Lite $1\"\n },\n {\n \"regex\": \"Spin Max 2\",\n \"model\": \"Spin Max 2\"\n },\n {\n \"regex\": \"Selfie_Two\",\n \"model\": \"Selfie Two\"\n },\n {\n \"regex\": \"(Fusion Bolt|Flare Tab Pro|Flare Tab|Superion S1 DTV)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Cherry(?:[ _]?Mobile)?[ _]?([^/;]+)(?: Build|[);])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"China Mobile\": {\n \"regex\": \"(M812C|1501_M02|9930i|A1303|A309W|M651CY) Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"M651CY\",\n \"model\": \"A3\"\n },\n {\n \"regex\": \"(M812C|1501_M02|9930i|A1303|A309W)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Comio\": {\n \"regex\": \"Comio|CT701G PLUS|CT701W|GT100\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GT100\",\n \"model\": \"GT100\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"CT701W\",\n \"model\": \"CT701W\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"CT701G PLUS\",\n \"model\": \"CT701G Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Comio[ _-]?([^;/)]+)(?: Build|[);])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Compal\": {\n \"regex\": \"Compal-[a-z0-9]+\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Artel\": {\n \"regex\": \"Artel[_ ]|\\\\w+_ARTEL_\\\\w+|GAP YOQ(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GAP YOQ(?:[);/ ]|$)\",\n \"model\": \"Gap Yo Q\"\n },\n {\n \"regex\": \"Artel[_ ](Quadro(?: Pro)?|Tesla|Air|Tomchi|Premium|U3_4G|Z5|Sentinel (?:X 8G|X D5|X)|T10)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Artel[_ ]Komi3\",\n \"model\": \"Komi 3\"\n },\n {\n \"regex\": \"Artel[_ ](Star|Nova|Connect|Choice|Style)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:\\\\w+_)?ARTEL_([FVM]5|X[45])_\\\\w+\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ComTrade Tesla\": {\n \"regex\": \"Tesla|Impulse 7.85 3G|Impulse 10.1 OCTA|Smartphone_6.1|SP(?:6.2|6.2_Lite)|TTL(?:713G|8)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TeslaEvo5.0\",\n \"model\": \"Evo 5.0\"\n },\n {\n \"regex\": \"(Gravity 9.7 SHD)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(Impulse 7.85 3G)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Impulse 10.1 OCTA\",\n \"model\": \"Impulse 10.1\\\" OCTA\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Tesla_SP([^/;]+)L Build\",\n \"model\": \"Smartphone $1 Lite\"\n },\n {\n \"regex\": \"Smartphone_6.1\",\n \"model\": \"Smartphone 6.1\"\n },\n {\n \"regex\": \"SP6.2_Lite\",\n \"model\": \"Smartphone 6.2 Lite\"\n },\n {\n \"regex\": \"Tesla_SP([^/;]+) Build\",\n \"model\": \"Smartphone $1\"\n },\n {\n \"regex\": \"SP([^/;]+) Build\",\n \"model\": \"Smartphone $1\"\n },\n {\n \"regex\": \"Smartphone ([36])\",\n \"model\": \"Smartphone $1\"\n },\n {\n \"regex\": \"Tesla_Tablet_785\",\n \"model\": \"7.85\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TTH7\",\n \"model\": \"H7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TTL7 Build\",\n \"model\": \"L7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Tesla_Tablet_L7_3G\",\n \"model\": \"L7 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(L7.1)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TTL713G\",\n \"model\": \"L7.1 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(L7 Quad) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(L7 Quad Lite)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TTL8 Build\",\n \"model\": \"L8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(L8.1)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TESLA_TABLET_M7\",\n \"model\": \"M7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Tesla_Tablet_M8\",\n \"model\": \"M8\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"ConCorde\": {\n \"regex\": \"ConCorde ([^/;]+) Build|Concorde_Raptor_Z55(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Concorde_(Raptor_Z55)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ConCorde Tab ?([^/;]+) Build\",\n \"model\": \"Tab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ConCorde ReadMan ?([^/;]+) Build\",\n \"model\": \"ReadMan $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ConCorde ([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Condor\": {\n \"regex\": \"Allure (?:M[13]|X)|Griffe T[2356789]|TFX712G|TRA-901G|TGW[-]?(710G|709)|(?:PGN\\\\-?[456][012][0-9]|PHS\\\\-601|PHQ519|PHQ52[056]|TB105L|TB717G|PKT\\\\-301|Plume (?:H1|L[1-468]|P8|P6 PRO LTE))(?:[);/ ]|$)|CTAB[^/;]+ Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"CTAB([^/;]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"CTAB $1\"\n },\n {\n \"regex\": \"(TGW)-?(710G|709)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"(TFX712G|TB105L|TB717G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(TRA)-(901G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"PHS\\\\-601\",\n \"model\": \"C8\"\n },\n {\n \"regex\": \"PGN\\\\-?403\",\n \"model\": \"C4+ Noir\"\n },\n {\n \"regex\": \"PGN\\\\-?404\",\n \"model\": \"C7 Mini\"\n },\n {\n \"regex\": \"PGN\\\\-?409\",\n \"model\": \"Plume P4\"\n },\n {\n \"regex\": \"PKT\\\\-?301\",\n \"model\": \"C2\"\n },\n {\n \"regex\": \"PGN\\\\-?504\",\n \"model\": \"C5\"\n },\n {\n \"regex\": \"PGN\\\\-?505\",\n \"model\": \"C8S\"\n },\n {\n \"regex\": \"PGN\\\\-?506\",\n \"model\": \"C7\"\n },\n {\n \"regex\": \"(Allure (?:M[13]|X))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"PGN\\\\-?507\",\n \"model\": \"Allure A9\"\n },\n {\n \"regex\": \"PGN\\\\-?508\",\n \"model\": \"C6+\"\n },\n {\n \"regex\": \"PGN\\\\-?509\",\n \"model\": \"C6 Pro\"\n },\n {\n \"regex\": \"PGN\\\\-?511\",\n \"model\": \"Allure A9 Plus\"\n },\n {\n \"regex\": \"PGN\\\\-?513\",\n \"model\": \"Griffe G4\"\n },\n {\n \"regex\": \"PHQ519\",\n \"model\": \"Griffe G4S\"\n },\n {\n \"regex\": \"PHQ520\",\n \"model\": \"Griffe G5\"\n },\n {\n \"regex\": \"PHQ525\",\n \"model\": \"Griffe G6\"\n },\n {\n \"regex\": \"PHQ526\",\n \"model\": \"Griffe G6 Pro\"\n },\n {\n \"regex\": \"PGN\\\\-?514\",\n \"model\": \"Plume P7\"\n },\n {\n \"regex\": \"PGN\\\\-?515\",\n \"model\": \"Plume P4 Pro\"\n },\n {\n \"regex\": \"PGN\\\\-?516\",\n \"model\": \"Plume P5\"\n },\n {\n \"regex\": \"PGN\\\\-?51[78]\",\n \"model\": \"Plume P6\"\n },\n {\n \"regex\": \"PGN\\\\-?521\",\n \"model\": \"Griffe G4 Plus\"\n },\n {\n \"regex\": \"Griffe T3 ?pro\",\n \"model\": \"Griffe T3 Pro\"\n },\n {\n \"regex\": \"Griffe T([0-9]) Plus\",\n \"model\": \"Griffe T$1 Plus\"\n },\n {\n \"regex\": \"Griffe T([0-9])\",\n \"model\": \"Griffe T$1\"\n },\n {\n \"regex\": \"PGN\\\\-?522\",\n \"model\": \"P6 Plus\"\n },\n {\n \"regex\": \"PGN\\\\-?523\",\n \"model\": \"P7 Plus\"\n },\n {\n \"regex\": \"PGN\\\\-?527\",\n \"model\": \"Plume P4 Plus\"\n },\n {\n \"regex\": \"PGN\\\\-?528|PLUME P6 PRO LTE\",\n \"model\": \"Plume P6 Pro LTE\"\n },\n {\n \"regex\": \"PGN\\\\-?605\",\n \"model\": \"Plume P8\"\n },\n {\n \"regex\": \"PGN\\\\-?606\",\n \"model\": \"Allure A55\"\n },\n {\n \"regex\": \"PGN\\\\-?607\",\n \"model\": \"Allure A100\"\n },\n {\n \"regex\": \"PGN\\\\-?608\",\n \"model\": \"Allure A55 Slim\"\n },\n {\n \"regex\": \"PGN\\\\-?609\",\n \"model\": \"Allure A100 Lite\"\n },\n {\n \"regex\": \"PGN\\\\-?610\",\n \"model\": \"Plume P8 Lite\"\n },\n {\n \"regex\": \"PGN\\\\-?611\",\n \"model\": \"Allure A8\"\n },\n {\n \"regex\": \"PGN\\\\-?612\",\n \"model\": \"Allure A8 Plus\"\n },\n {\n \"regex\": \"PGN\\\\-?613\",\n \"model\": \"Allure A55 Plus\"\n },\n {\n \"regex\": \"Plume H1\",\n \"model\": \"Plume H1\"\n },\n {\n \"regex\": \"Plume L([2468]) Pro\",\n \"model\": \"Plume L$1 Pro\"\n },\n {\n \"regex\": \"Plume L3 Plus\",\n \"model\": \"Plume L3 Plus\"\n },\n {\n \"regex\": \"Plume L3 Smart\",\n \"model\": \"Plume L3 Smart\"\n },\n {\n \"regex\": \"Plume L([1-4])\",\n \"model\": \"Plume L$1\"\n },\n {\n \"regex\": \"Plume P8 Pro\",\n \"model\": \"Plume P8 Pro\"\n },\n {\n \"regex\": \"PGN\\\\-?([0-9]{3})\",\n \"model\": \"PGN-$1\"\n }\n ]\n },\n \"Coolpad\": {\n \"regex\": \"(?:YL-)?Coolpad|(?:Cool_9S|1824-S0|8190Q|1831-A0|8676-[AM]01|CP8298_I00|CP3648A|CP8676_I0[23]|REVVLPLUS C3701A|VCR-[AI]0|C105-E0|C106-[79]| C106|MTS-T0|cp3705A[S]?|ORL-C0|DLS-E0|8298-M02|5560S)(?:[);/ ]|$)|(8295|5860S) Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"VCR-[AI]0\",\n \"model\": \"Cool Play 6\"\n },\n {\n \"regex\": \"1831-A0(?:[);/ ]|$)\",\n \"model\": \"Cool Play C7\"\n },\n {\n \"regex\": \"REVVLPLUS C3701A\",\n \"model\": \"REVVL Plus\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"8190Q(?:[);/ ]|$)\",\n \"model\": \"8190Q\"\n },\n {\n \"regex\": \"DLS-E0(?:[);/ ]|$)\",\n \"model\": \"N5\"\n },\n {\n \"regex\": \"1824-S0(?:[);/ ]|$)\",\n \"model\": \"N5C\"\n },\n {\n \"regex\": \"CP3705A[S]?(?:[);/ ]|$)\",\n \"model\": \"Legacy\"\n },\n {\n \"regex\": \"CP3648A(?:[);/ ]|$)\",\n \"model\": \"Legacy S\"\n },\n {\n \"regex\": \"MTS-T0(?:[);/ ]|$)\",\n \"model\": \"N2M\"\n },\n {\n \"regex\": \"C106-[79](?:[);/ ]|$)\",\n \"model\": \"Cool 1\"\n },\n {\n \"regex\": \"C105-E0(?:[);/ ]|$)\",\n \"model\": \"Cool S1\"\n },\n {\n \"regex\": \"ORL-C0(?:[);/ ]|$)\",\n \"model\": \"Cool 9\"\n },\n {\n \"regex\": \"Cool_9S(?:[);/ ]|$)\",\n \"model\": \"Cool 9S\"\n },\n {\n \"regex\": \"5560S(?:[);/ ]|$)\",\n \"model\": \"Arise\"\n },\n {\n \"regex\": \"(5860S|8295) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"CP8676_I02(?:[);/ ]|$)\",\n \"model\": \"Note 3\"\n },\n {\n \"regex\": \"CP8676_I03(?:[);/ ]|$)\",\n \"model\": \"Note 3 Plus\"\n },\n {\n \"regex\": \"CP8298_I00(?:[);/ ]|$)\",\n \"model\": \"Note 3 Lite\"\n },\n {\n \"regex\": \"(8676-[AM]01|8298-M02)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:YL-)?Coolpad[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:YL-)?Coolpad[ _\\\\-]?([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Clarmin\": {\n \"regex\": \"Clarmin\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Clarmin[_ ](B[65]|C1)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"CORN\": {\n \"regex\": \"CORN \",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"CORN R20\",\n \"model\": \"R20\"\n }\n ]\n },\n \"Cosmote\": {\n \"regex\": \"Cosmote\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Cosmote_My_mini_Tab\",\n \"device\": \"tablet\",\n \"model\": \"My Mini Tab\"\n }\n ]\n },\n \"Cricket\": {\n \"regex\": \"Cricket-([a-z0-9]+)|U705AC(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"U705AC\",\n \"model\": \"Ovation\"\n },\n {\n \"regex\": \"Cricket-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Crius Mea\": {\n \"regex\": \"(Q7A\\\\+?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Crosscall\": {\n \"regex\": \"Crosscall|ODYSSEY_Plus|Odyssey S1|Trekker-[MSX][1234]|Action-X3|Core-X3\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Action-X3\",\n \"model\": \"Action-X3\"\n },\n {\n \"regex\": \"Core-X3\",\n \"model\": \"Core-X3\"\n },\n {\n \"regex\": \"Crosscall ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ODYSSEY_Plus\",\n \"model\": \"ODYSSEY+\"\n },\n {\n \"regex\": \"Odyssey S1\",\n \"model\": \"ODYSSEY S1\"\n },\n {\n \"regex\": \"Trekker-([MSX][1234](?: Core)?)\",\n \"model\": \"Trekker-$1\"\n }\n ]\n },\n \"AllDocube\": {\n \"regex\": \"(?:T1001XS?|T1006S?|iPlay_[24]0|U1006H?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"T1001XS(?:[);/ ]|$)\",\n \"model\": \"M5XS\"\n },\n {\n \"regex\": \"T1006S(?:[);/ ]|$)\",\n \"model\": \"M5S\"\n },\n {\n \"regex\": \"T1006(?:[);/ ]|$)\",\n \"model\": \"M5\"\n },\n {\n \"regex\": \"T1001X(?:[);/ ]|$)\",\n \"model\": \"M5X\"\n },\n {\n \"regex\": \"U1006H?(?:[);/ ]|$)\",\n \"model\": \"iPlay 10 Pro 10.1\\\"\"\n },\n {\n \"regex\": \"iPlay_([24]0)(?:[);/ ]|$)\",\n \"model\": \"iPlay $1\"\n }\n ]\n },\n \"Cube\": {\n \"regex\": \"(<!myPhone ?)Cube|(U[0-9]+GT|K8GT)|(?:T8-PLUSM?S?|T8PLUSML|I1-TF[BD]?|I1-TC|i1002S|Iwork10 Flagship|iwork10 Pro)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"U27GT\",\n \"model\": \"Talk 8\"\n },\n {\n \"regex\": \"(?:T8-PLUSM?S?|T8PLUSML)(?:[);/ ]|$)\",\n \"model\": \"T8 Ultimate\"\n },\n {\n \"regex\": \"U55GT\",\n \"model\": \"Talk 79\"\n },\n {\n \"regex\": \"U65GT\",\n \"model\": \"Talk 9X\"\n },\n {\n \"regex\": \"I1-TF[BD]?(?:[);/ ]|$)\",\n \"model\": \"iWork 8 Air\"\n },\n {\n \"regex\": \"I1-TC(?:[);/ ]|$)\",\n \"model\": \"iWork 8 Ultimate\"\n },\n {\n \"regex\": \"(?:i1002S|iwork10 Pro)(?:[);/ ]|$)\",\n \"model\": \"iWork 10 Pro\"\n },\n {\n \"regex\": \"Iwork10 Flagship(?:[);/ ]|$)\",\n \"model\": \"iWork 10 Flagship\"\n },\n {\n \"regex\": \"(U[0-9]+GT[^;/]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(U[0-9]+GT(?:[0-9]|[\\\\-_][a-z]+)?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(K8GT)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"CUBOT\": {\n \"regex\": \"CUBOT|RAINBOW 2|KING_KONG_3|ZORRO 001|KINGKONG[_ ]MINI2?|KING KONG CS|(?<!QUMO )QUEST(?!(?:[0-9]|\\\\s[0-9]))(?: LITE)?|NOTE 20 PRO\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"CHEETAH 2\",\n \"model\": \"Cheetah 2\"\n },\n {\n \"regex\": \"RAINBOW 2\",\n \"model\": \"Rainbow 2\"\n },\n {\n \"regex\": \"RAINBOW\",\n \"model\": \"Rainbow\"\n },\n {\n \"regex\": \"DINOSAUR\",\n \"model\": \"Dinosaur\"\n },\n {\n \"regex\": \"KINGKONG MINI2\",\n \"model\": \"King Kong Mini 2\"\n },\n {\n \"regex\": \"KINGKONG_MINI\",\n \"model\": \"King Kong Mini\"\n },\n {\n \"regex\": \"KING_KONG_3\",\n \"model\": \"King Kong 3\"\n },\n {\n \"regex\": \"KING KONG CS\",\n \"model\": \"King Kong CS\"\n },\n {\n \"regex\": \"KING KONG\",\n \"model\": \"King Kong\"\n },\n {\n \"regex\": \"QUEST LITE\",\n \"model\": \"Quest Lite\"\n },\n {\n \"regex\": \"QUEST\",\n \"model\": \"Quest\"\n },\n {\n \"regex\": \"ZORRO 001\",\n \"model\": \"Zorro 001\"\n },\n {\n \"regex\": \"CUBOT[ _]Echo\",\n \"model\": \"Echo\"\n },\n {\n \"regex\": \"CUBOT[ _]MANITO\",\n \"model\": \"Manito\"\n },\n {\n \"regex\": \"CUBOT[ _]MAGIC\",\n \"model\": \"Magic\"\n },\n {\n \"regex\": \"CUBOT[ _]MAX\",\n \"model\": \"Max\"\n },\n {\n \"regex\": \"NOTE Plus\",\n \"model\": \"Note Plus\"\n },\n {\n \"regex\": \"NOTE 20 PRO\",\n \"model\": \"Note 20 Pro\"\n },\n {\n \"regex\": \"CUBOT[_ ]NOTE[_ ]S\",\n \"model\": \"Note S\"\n },\n {\n \"regex\": \"CUBOT_NOVA\",\n \"model\": \"Nova\"\n },\n {\n \"regex\": \"CUBOT_POWER\",\n \"model\": \"Power\"\n },\n {\n \"regex\": \"CUBOT_X18_Plus\",\n \"model\": \"X18 Plus\"\n },\n {\n \"regex\": \"CUBOT[ _](A5|C6W|H3|J3|P7|P20|[RXJ]9|R11|X18)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"CUBOT ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([^;/]+) Build/CUBOT\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Clout\": {\n \"regex\": \"Hind[ _]5\\\\.1|X417[ _]Amaze|X418[ _]Zest|X421[ _]Nova|X422[ ]Exotic|X425[ _]Shavit|X428[ _]Astute\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Hind[ _]5\\\\.1\",\n \"model\": \"Hind 5.1\"\n },\n {\n \"regex\": \"X417[ _]Amaze\",\n \"model\": \"X417 Amaze\"\n },\n {\n \"regex\": \"X418[ _]Zest\",\n \"model\": \"X418 Zest\"\n },\n {\n \"regex\": \"X421[ _]Nova\",\n \"model\": \"X421 Nova\"\n },\n {\n \"regex\": \"X422[ _]Exotic\",\n \"model\": \"X422 Exotic\"\n },\n {\n \"regex\": \"X425[ _]Shavit\",\n \"model\": \"X425 Shavit\"\n },\n {\n \"regex\": \"X428[ _]Astute\",\n \"model\": \"X428 Astute\"\n }\n ]\n },\n \"Concord\": {\n \"regex\": \"Concord[ _-]|(?:Flyfix 6|C-721|Plus-7_C777|Plus_M19_C779|Plus-9_C778)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"M10\",\n \"model\": \"M10\"\n },\n {\n \"regex\": \"Flyfix 6\",\n \"model\": \"Flyfix 6\"\n },\n {\n \"regex\": \"C-721\",\n \"model\": \"Flyfix Q\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Plus[-_]([79]|M19)_(C77[789])(?:[);/ ]|$)\",\n \"model\": \"Plus-$1 $2\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Crescent\": {\n \"regex\": \"WING 5|WING9|Venus[ _][14]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"WING 5\",\n \"model\": \"Wing 5\"\n },\n {\n \"regex\": \"WING9\",\n \"model\": \"Wing 9\"\n },\n {\n \"regex\": \"Venus[ _]([14])\",\n \"model\": \"Venus $1\"\n }\n ]\n },\n \"Cyrus\": {\n \"regex\": \"Cyrus[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Cyrus[ _-]?([^;/)]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Cyrus[ _-]?([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Datang\": {\n \"regex\": \"DATANG\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:DATANG[ _-])+([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:DATANG[ _-])+([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Datsun\": {\n \"regex\": \"DATSUN\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"DATSUN_D5500\",\n \"model\": \"D5500\"\n },\n {\n \"regex\": \"Datsun_D5001\",\n \"model\": \"D5001\"\n }\n ]\n },\n \"Danew\": {\n \"regex\": \"Dslide ?([^;/]+) Build|Konnect_?(?:402|50[246]|60[127])|GEODROID_A5\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Konnect_?(402|50[246]|60[127])\",\n \"model\": \"Konnect $1\"\n },\n {\n \"regex\": \"Dslide ?([^;/]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"DSlide $1\"\n },\n {\n \"regex\": \"GEODROID_A5\",\n \"device\": \"tablet\",\n \"model\": \"Geodroid A5\"\n }\n ]\n },\n \"Denver\": {\n \"regex\": \"(?:TA[CDQ]-[0-9]+)|P(?:.+)TAQ-(?:[0-9]+)|SDQ[_-](?:550[24]4L|52001G|50002G|57004L)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"P(?:.+)TAQ-(10213GMK2|10172MK3|10242MK2|70242MK2|[0-9]+)(?:[);/ ]|$)\",\n \"model\": \"TAQ-$1\"\n },\n {\n \"regex\": \"(TA[CDQ]-[0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SDQ[_-](550[24]4L|52001G|50002G|57004L)\",\n \"device\": \"smartphone\",\n \"model\": \"SDQ-$1\"\n }\n ]\n },\n \"Dell\": {\n \"regex\": \"Dell[^a-z]|Venue|XCD35\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"XCD35\",\n \"model\": \"XCD35\"\n },\n {\n \"regex\": \"Venue (8 7840|10 7040|8 3830)\",\n \"model\": \"Venue $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Dell )?Venue Build\",\n \"model\": \"Venue\"\n },\n {\n \"regex\": \"Dell; Venue Pro\",\n \"model\": \"Venue Pro\"\n },\n {\n \"regex\": \"(OptiPlex (?:3050|7010))\",\n \"device\": \"desktop\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:Dell )?(Streak|Venue) ?([^/;]*) Build\",\n \"model\": \"$1 $2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Dell Inc./)?(XPS 13 9360|Latitude 7480)(?:[);/ ]|$)\",\n \"device\": \"desktop\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Dell; ((?:Streak|Venue)[^;/\\\\)]*)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Dell; ([^;/\\\\)]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Dell[ _\\\\-]([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Desay\": {\n \"regex\": \"Desay\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Desay[ _-]?([^;/)]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Desay[ _-]?([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"DEXP\": {\n \"regex\": \"DEXP|(?:Ursus|Ixion)[ _]([^;/)]+)|H135[ _]Build|Larus_TV1|Ixion(?:ML4.7|ES250)|M150Storm|(?:SENIOR|F4[38]D8000K|VA[12]10|VA170|ML450|MS[56]50|BL[123]50|BS155|BS160|BS[1256]50|AL[12]40|AL[23]50|AS155|AS260|GS15[035]| (?:N280i|P380i|R110|BL160|B450|B340|A1[45]0|A340|AS160|GL[23]55|ES750))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Ixion[_ ]([^;/]+)(?: Build|\\\\))\",\n \"model\": \"Ixion $1\"\n },\n {\n \"regex\": \"(ML450|MS[56]50|ES750)(?:[);/ ]|$)\",\n \"model\": \"Ixion $1\"\n },\n {\n \"regex\": \"IxionES250(?:[);/ ]|$)\",\n \"model\": \"Ixion ES250 Rage\"\n },\n {\n \"regex\": \"IxionML4.7(?:[);/ ]|$)\",\n \"model\": \"Ixion ML 4.7\\\"\"\n },\n {\n \"regex\": \"M150Storm(?:[);/ ]|$)\",\n \"model\": \"Ixion M150 Storm\"\n },\n {\n \"regex\": \"AL250(?:[);/ ]|$)\",\n \"model\": \"4.5\\\" AL250\"\n },\n {\n \"regex\": \"AL350(?:[);/ ]|$)\",\n \"model\": \"5.0\\\" AL350\"\n },\n {\n \"regex\": \"AS155(?:[);/ ]|$)\",\n \"model\": \"5.45\\\" AS155\"\n },\n {\n \"regex\": \"AS260(?:[);/ ]|$)\",\n \"model\": \"5.85\\\" AS260\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Ursus ([^;/)]+)(?: Build|\\\\))\",\n \"model\": \"Ursus $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(VA[21]10|VA170|R110|N280i|P380i)(?:[);/ ]|$)\",\n \"model\": \"Ursus $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \" (B450|B340|BL160|A340)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SENIOR(?:[);/ ]|$)\",\n \"model\": \"Senior\"\n },\n {\n \"regex\": \"Larus_TV1\",\n \"device\": \"feature phone\",\n \"model\": \"Larus_TV1\"\n },\n {\n \"regex\": \"H135[ _]Build\",\n \"model\": \"Atlas\",\n \"device\": \"desktop\"\n },\n {\n \"regex\": \"(BL[123]50|BS155|BS160|BS[1256]50|AL[12]40|A1[45]0|GS15[035]|AS160|GL[23]55)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"DEXP[ _]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"DEXP[ _]([^);/]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(F4[38]D8000K)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Dbtel\": {\n \"regex\": \"DBTEL(?:[\\\\-/])?([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Dialog\": {\n \"regex\": \"Dialog ?([^;/]+) Build\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Dicam\": {\n \"regex\": \"DICAM-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Digi\": {\n \"regex\": \"(?<!FBCR/)Digi[ _]([^);/]+)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Digicel\": {\n \"regex\": \"DIGICEL\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"DL810\",\n \"model\": \"DL810\"\n },\n {\n \"regex\": \"DIGICEL ([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Digiland\": {\n \"regex\": \"(?:DL1008M|DL(?:1023|9002|[78]006))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"DL1008M\",\n \"model\": \"DL1008M\"\n },\n {\n \"regex\": \"DL(1023|9002|[78]006)\",\n \"model\": \"DL$1\"\n }\n ]\n },\n \"Digma\": {\n \"regex\": \"Digma[_ ]([^;/]+) Build|HIT HT707[10]MG|CITI (?:7 E401 4G|8 E400 4G|ATL 4G|Kids|Octa [178]0|1902 3G|10 E402|Z530 3G)|(CITI[_ ](?:[A-Z0-9]+)[_ ][34]G)[ _][TC][ST](606[32]ML|111[46]ML|11[459]4MG|1117PG|1207MG|1210MG|1195MG|1196ML|3001ML|4024PG|5009PL|5021ML|5026PL|500[67]PG|7052PG|706[56]MG|709[68]PL|7097MG|720[48]MG|7140ML|7141MG|7113PL|7193MG|820[69]MG|7153MG|8139ML|8143MG|8152ML|1050PL|8205PG|7203MG|106[24]ML|1115MG)|HIT 4G|HT7074ML|IDX5|(iDx10|iDx7)|MVM900H(?:WZ|C)|MVM908HCZ|(iDxD8 3G|iDxD10 3G|iDrQ10 3G|iDxD[45]|iDxQ5|iD[nx]D7(?:[_ ]3G)?)|PS604M|PT452E|LINX B510 3G LT5037MG|LINX A452 3G LT4030PG|LINX A453 3G LT4038PG|LINX A420 3G LS4019PG|LINX A450 3G LT4028PG|Linx A400 3G LT4001PG|Linx C500 3G LT5001PG|Linx PS474S|LS504[01]PL|LT40(47|54)MG|PS1043MG|LS405[01]MG|LS5053ML|LT5048MG|HT7071MG|LT5052ML|HT5035PG|HT4039PG|LT4049PG|NS6902QL|NS9797MG|TS7854M|TS1012E 3G|TT1004PG|TT702[045]MG|TT1002MG|TT7026MW|((?:Optima|Platina|Plane)[ _](?:[EM])?(?:[0-9\\\\.ST]+|Prime)(?:[ _][43]G)?)|(VOX[ _](?:[0-9\\\\.A-Z]+)[_ ][43]G)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"HIT(?: 3G)? HT707[10]MG\",\n \"model\": \"HIT 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"iDx5\",\n \"model\": \"iDx5\"\n },\n {\n \"regex\": \"HT5035PG\",\n \"model\": \"HIT Q500 3G\"\n },\n {\n \"regex\": \"HT4039PG\",\n \"model\": \"HIT Q401 3G\"\n },\n {\n \"regex\": \"(VOX[ _](?:[0-9\\\\.A-Z]+)[_ ][43]G)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"PS604M\",\n \"model\": \"Linx 6.0\"\n },\n {\n \"regex\": \"LT4049PG\",\n \"model\": \"Linx Atom 3G\"\n },\n {\n \"regex\": \"LT5048MG\",\n \"model\": \"Linx Joy 3G\"\n },\n {\n \"regex\": \"LT5052ML\",\n \"model\": \"Linx Base 4G\"\n },\n {\n \"regex\": \"LT4047MG\",\n \"model\": \"Linx Alfa 3G\"\n },\n {\n \"regex\": \"LS4050MG\",\n \"model\": \"Linx X1 3G\"\n },\n {\n \"regex\": \"LS4051MG\",\n \"model\": \"Linx X1 Pro 3G\"\n },\n {\n \"regex\": \"LT4054MG\",\n \"model\": \"Linx Argo 3G\"\n },\n {\n \"regex\": \"LS5041PL\",\n \"model\": \"Linx Trix 4G\"\n },\n {\n \"regex\": \"LS5040PL\",\n \"model\": \"Linx Rage 4G\"\n },\n {\n \"regex\": \"LS5053ML\",\n \"model\": \"Linx Pay 4G\"\n },\n {\n \"regex\": \"Linx ([A-Z][0-9]{3}) 3G (?:LT4028PG|LS4019PG|LT4001PG|LT5001PG|LT4038PG|LT5037MG|LT4030PG)\",\n \"model\": \"Linx $1 3G\"\n },\n {\n \"regex\": \"(Linx PS474S)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"PT452E\",\n \"model\": \"Linx 4.5\"\n },\n {\n \"regex\": \"CITI ATL 4G CS5029ML\",\n \"model\": \"CITI ATL 4G\"\n },\n {\n \"regex\": \"(CITI Z530 3G)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(CITI [A-Z0-9]+ [34]G) C[ST](?:606[32]ML|4024PG|5009PL|5021ML|5026PL)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TS7854M\",\n \"model\": \"Plane 8.1\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"PS1043MG\",\n \"model\": \"Plane 10.3\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TS1012E 3G\",\n \"model\": \"Plane 10.1\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MVM900H(?:WZ|C)\",\n \"model\": \"iDx8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MVM908HCZ\",\n \"model\": \"iDx9\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(iD(?:xD10|rQ10|xD7)[_ ]3G)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(iDx10|iDx7)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(iDxD[45]|iDxQ5)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HIT 4G HT7074ML\",\n \"model\": \"HIT 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"CITI[_ ](1902 3G|Kids|8527_4G|Octa [178]0|10 E402 4G|8 E400 4G|7 E401 4G)\",\n \"model\": \"CITI $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(CITI[ _](?:[A-Z0-9]+)[ _][34]G)[ _][TC][ST](?:106[24]ML|111[46]ML|1115MG|1117PG|1207MG|1210MG|3001ML|500[67]PG|7052PG|706[567]MG|7097MG|720[48]MG|820[69]MG|11[459]4MG|1195MG|1196ML|3001ML|8152ML|1050PL|709[68]PL|7113PL|7193MG|7216MG|8205PG|7203MG|8143MG|7153MG|7141MG|7140ML)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"iDxD8 3G\",\n \"model\": \"D-Plane2 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(iDnD7)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"NS6902QL\",\n \"model\": \"Platina 7.2 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"NS9797MG\",\n \"model\": \"Platina 7.2 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TT1004PG\",\n \"model\": \"Optima 10.4\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TT1002MG\",\n \"model\": \"Optima D 10.4\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TT7025MG\",\n \"model\": \"Optima 7.5\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TT7026MW\",\n \"model\": \"Optima 7.6\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TT7020MG\",\n \"model\": \"Optima 7.3\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TT7024MG\",\n \"model\": \"Optima 7.4\\\" 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"((?:Optima|Platina|Plane)[ _](?:[EM])?(?:[0-9\\\\.STNM]+|Prime)(?:[ _][43]G)?)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Digma[_ ]([^;/]+) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"DoCoMo\": {\n \"regex\": \"DoCoMo|\\\\;FOMA|KGT/1\\\\.0\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"DoCoMo/.+MST.+(SH2101V)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"DoCoMo/[12]\\\\.0[/ ]([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([a-z0-9]+)(?:_W)?\\\\;FOMA\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"KGT/1\\\\.0 ([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Doogee\": {\n \"regex\": \"DOOGEE[ _-]|Valencia2_Y100_?(?:pro|plus)|Y100_Plus|X5max(?:[_ ]PRO)?|Shoot_[12]|x5_doogee|(KISSME|BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)(?:[);/ ]|$)|(?:BL12000|BL5500[_ ]Lite|X9 Mini|LEO_DG280|Y9Plus|Hitman_DG850|S(?:[568]8|9[056]|59|40)Pro|X95Pro|S40Lite|BL[579]000|N20Pro|(?<!Lenovo )S90C|Ibiza_F2)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Valencia2_)?Y100_Plus(?:[);/ ]|$)\",\n \"model\": \"Valencia2 Y100 Plus\"\n },\n {\n \"regex\": \"Valencia2_Y100pro\",\n \"model\": \"Valencia2 Y100 Pro\"\n },\n {\n \"regex\": \"LEO_(DG280)\",\n \"model\": \"Leo $1\"\n },\n {\n \"regex\": \"(BL[579]000|S90C)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"X95Pro(?:[);/ ]|$)\",\n \"model\": \"X95 Pro\"\n },\n {\n \"regex\": \"N20Pro(?:[);/ ]|$)\",\n \"model\": \"N20 Pro\"\n },\n {\n \"regex\": \"BL12000 PRO\",\n \"model\": \"BL12000 Pro\"\n },\n {\n \"regex\": \"BL5500[_ ]Lite\",\n \"model\": \"BL5500 Lite\"\n },\n {\n \"regex\": \"BL12000\",\n \"model\": \"BL12000\"\n },\n {\n \"regex\": \"S([568]8|9[056]|59|40)Pro\",\n \"model\": \"S$1 Pro\"\n },\n {\n \"regex\": \"S40Lite\",\n \"model\": \"S40 Lite\"\n },\n {\n \"regex\": \"KISSME-DG580\",\n \"model\": \"Kissme DG580\"\n },\n {\n \"regex\": \"Hitman_DG850\",\n \"model\": \"Hitman DG580\"\n },\n {\n \"regex\": \"X9 Mini\",\n \"model\": \"X9 Mini\"\n },\n {\n \"regex\": \"x5_doogee\",\n \"model\": \"X5\"\n },\n {\n \"regex\": \"Shoot_([12])\",\n \"model\": \"Shoot $1\"\n },\n {\n \"regex\": \"Ibiza_F2\",\n \"model\": \"Ibiza F2\"\n },\n {\n \"regex\": \"(X5max(?:[_ ]PRO)?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:DOOGEE[ _-])?(BIGBOY|COLLO[23]?|DAGGER|DISCOVERY2?|FIND|HOTWIND|LATTE|MAX|MINT|MOON|PIXELS|RAINBOX|TURBO|VALENCIA|Valencia2_Y100pro|VOYAGER2?|TITANS2?)[ -_](DG[0-9]+C?)(?:[);/ ]|$)\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"DOOGEE[ _-]([^);/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"DOOGEE[ _-]([^);/]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Y9Plus(?:[);/ ]|$)\",\n \"model\": \"Y9 Plus\"\n }\n ]\n },\n \"Doov\": {\n \"regex\": \"(?:Doov-)?Doov[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Doov-)?Doov[ _]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:Doov-)?Doov[ _]([^);/]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Dopod\": {\n \"regex\": \"Dopod(?: )?([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Doro\": {\n \"regex\": \"Doro\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Doro[ _-]?([^;/)]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Doro[ _-]([0-9a-z]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Dune HD\": {\n \"regex\": \"DuneHD|SOLO 4K(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"SOLO 4K(?:[);/ ]|$)\",\n \"model\": \"Solo 4k\"\n },\n {\n \"regex\": \"DuneHD/\\\\d.\\\\d \\\\([a-z]+__([a-z0-9_-]+);\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"DuneHD/\\\\d.\\\\d \\\\(([a-z0-9_-]+);\",\n \"model\": \"$1\"\n }\n ]\n },\n \"DNS\": {\n \"regex\": \"(?:DNS|AirTab)[ _\\\\-]([^;/)]+)|(?:S4505M|S4004M|SD01M)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:DNS[_ ])?(S4505M|S4004M|SD01M|S4502|S4003|S4003)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"AirTab[ _\\\\-]([^;/]+)(?: Build|[);])\",\n \"model\": \"AirTab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"DNS[ _\\\\-]([^;/]+)(?: Build|[);])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"E-Boda\": {\n \"regex\": \"E-Boda|Eclipse_(?:G400M|G500)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"E-Boda ((?:Revo|Izzycomm|Essential|Intelligence|Supreme)[^/;]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Eclipse_(G400M|G500)\",\n \"model\": \"Eclipse $1\"\n },\n {\n \"regex\": \"E-Boda ([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Easypix\": {\n \"regex\": \"EasyPad|EasyPhone\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(EasyPhone[^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"EasyPad ([^/;)]+)(?: Build|[;)])\",\n \"model\": \"EasyPad $1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"EBEST\": {\n \"regex\": \"EBEST\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"EBEST[ _-]?([^;/)]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"EBEST[ _-]?([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Echo Mobiles\": {\n \"regex\": \"ECHO[ _](HOLI|HORIZON|MAX|MOSS|NOTE|POWER|SMART|DUNE|JAVA|FUSION)|HORIZON_M|Stellar 3G|FEELING\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ECHO_HORIZON_LITE\",\n \"model\": \"HORIZON Lite\"\n },\n {\n \"regex\": \"(HORIZON_M|FEELING)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"STELLAR 3G\",\n \"model\": \"STELLAR 3G\"\n },\n {\n \"regex\": \"ECHO_SMART_4G\",\n \"model\": \"SMART 4G\"\n },\n {\n \"regex\": \"ECHO[ _](HOLI|MAX|MOSS|NOTE|POWER|SMART|DUNE|JAVA|FUSION)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ECS\": {\n \"regex\": \"(?:TA10CA3|TM105A?|TR10[CR]S1)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TA10CA3(?:[);/ ]|$)\",\n \"model\": \"TA10CA3\"\n },\n {\n \"regex\": \"(TR10[CR]S1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TM105A(?:[);/ ]|$)\",\n \"model\": \"TM105A\"\n },\n {\n \"regex\": \"TM105(?:[);/ ]|$)\",\n \"model\": \"TM105\"\n }\n ]\n },\n \"EE\": {\n \"regex\": \"Hawk_from_EE\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Hawk_from_EE\",\n \"model\": \"Hawk\"\n }\n ]\n },\n \"EKT\": {\n \"regex\": \"EK-(?:5040|5336|5540|5937|6020|8680|MII|T7020)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"EK-(MII|T7020)\",\n \"model\": \"EK-$1\"\n },\n {\n \"regex\": \"EK-(5040|5336|5540|5937|6020|8680)\",\n \"device\": \"smartphone\",\n \"model\": \"EK-$1\"\n }\n ]\n },\n \"Eks Mobility\": {\n \"regex\": \"S5LS|X4UPlus\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"S5LS\",\n \"model\": \"S5LS\"\n },\n {\n \"regex\": \"X4UPlus\",\n \"model\": \"X4U Plus\"\n }\n ]\n },\n \"Elephone\": {\n \"regex\": \"Elephone|P6000( ?Pro| ?Plus|\\\\+| ?02| 5.0 01)?\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Elephone Trunk(?:[);/ ]|$)\",\n \"model\": \"Trunk\"\n },\n {\n \"regex\": \"P6000(\\\\+| ?Plus)(?:[);/ ]|$)\",\n \"model\": \"P6000 Plus\"\n },\n {\n \"regex\": \"P6000 02(?:[);/ ]|$)\",\n \"model\": \"P6000 02\"\n },\n {\n \"regex\": \"P6000 5.0 01(?:[);/ ]|$)\",\n \"model\": \"P6000 01\"\n },\n {\n \"regex\": \"P6000 ?Pro(?:[);/ ]|$)\",\n \"model\": \"P6000 Pro\"\n },\n {\n \"regex\": \"(?:Elephone[ _])?(P[768]000|S2)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Elephone[ _\\\\-]([^/;]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Element\": {\n \"regex\": \"AFTRS\",\n \"model\": \"Element 4K (2017)\",\n \"device\": \"tv\"\n },\n \"Elenberg\": {\n \"regex\": \"(TAB(?:101|728)[ _]3G|TAB7(?:[03]8|16|40|3[30]))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Ericy\": {\n \"regex\": \"Ericy-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Essential\": {\n \"regex\": \"PH-1[ )]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"PH-1[ )]\",\n \"model\": \"PH-1\"\n }\n ]\n },\n \"E-tel\": {\n \"regex\": \"E-tel_i250\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"E-tel[_ ]i250\",\n \"model\": \"i250\"\n }\n ]\n },\n \"Evercoss\": {\n \"regex\": \"EVERCOSS[ _]|(A75A\\\\*|U50A_PLUS|M50 STAR|A75 MAX)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"A75A\\\\*(?:[);/ ]|$)\",\n \"model\": \"A75A Star\"\n },\n {\n \"regex\": \"A75 MAX*(?:[);/ ]|$)\",\n \"model\": \"A75 Max\"\n },\n {\n \"regex\": \"U50A_PLUS(?:[);/ ]|$)\",\n \"model\": \"U50A Plus\"\n },\n {\n \"regex\": \"M50 STAR(?:[);/ ]|$)\",\n \"model\": \"M50 Star\"\n },\n {\n \"regex\": \"EVERCOSS[ _](A7[BRLZ]|A65|A74A|A5Z)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Eurostar\": {\n \"regex\": \"(ET7002C-H12|Onyx-[13]S)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Onyx-([13]S)(?:[);/ ]|$)\",\n \"model\": \"Onyx $1\"\n },\n {\n \"regex\": \"ET7002C-H12(?:[);/ ]|$)\",\n \"model\": \"ePad 4S\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Eton\": {\n \"regex\": \"Eton\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Eton[ _-]?([^;/)]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Eton[ _-]?([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Essentielb\": {\n \"regex\": \"(?:Wooze[_ ]?(?:I55?|I45|X?L)|HEYOU(?:[135]|30))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"HEYOU([135]|30)(?:[);/ ]|$)\",\n \"model\": \"HEYou $1\"\n },\n {\n \"regex\": \"Wooze[_ ]?((?:I55?|I45|X?L))(?:[);/ ]|$)\",\n \"model\": \"Wooze $1\"\n }\n ]\n },\n \"Facebook\": {\n \"regex\": \"PortalTV\",\n \"device\": \"tv\",\n \"model\": \"Portal TV\"\n },\n \"Rikomagic\": {\n \"regex\": \"MK(80[28][^/;]*) Build\",\n \"device\": \"tv\",\n \"model\": \"MK$1\"\n },\n \"Rinno\": {\n \"regex\": \"Rinno (R(?:400|505))\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Riviera\": {\n \"regex\": \"RIVIERA \",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"F23\",\n \"model\": \"F23\"\n }\n ]\n },\n \"Senseit\": {\n \"regex\": \"SENSEIT[ _]?([^;/)]+)( Build|\\\\))\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Sony\": {\n \"regex\": \"Sony(?: ?Ericsson)?|SGP|Xperia|(?:[4-9]0[12])SO|C1[569]0[45]|C2[01]0[45]|C230[45]|C530[236]|C550[23]|C6[56]0[236]|C6616|C68(?:0[26]|[34]3)|C69(?:0[236]|16|43)|D200[45]|D21(?:0[45]|14)|D22(?:0[236]|12|43)|D230[2356]|D240[36]|D25(?:02|33)|D510[236]|D530[36]|D5316|D5322|D5503|D58[03]3|D65(?:0[23]|43|63)|D66[03458]3|D66[14]6|D6708|E(?:20[0345]3|2006|210[45]|2115|2124|230[36]|2312|23[356]3|530[36]|53[3456]3|5506|55[356]3|56[46305][36]|58[02]3|65[35]3|66[0358]3|68[358]3)|I[34]312|I4332|F311[12356]|F331[13]|F321[12356]|F5[13]21|F5122|F813[12]|F833[12]|G312[135]|G311[26]|G322[136]|G3212|G331[123]|G3412|G3416|G342[136]|G823[12]|G834[123]|G8[14]4[12]|H(?:3113|3123|3133|3213|3223|3311|3321|4113|4133|4213|4233|4311|4331|4413|4433|82[167]6|83[12]4|8416|9436)|(?:WT|LT|SO|ST|SK|MK)[0-9]+[a-z]+[0-9]*(?: Build|\\\\))|X?L39H|XM50[ht]|W960|portalmmm/2\\\\.0 K|S3[69]h|SOG01|SOL2[2346]|SOV3[1-9]|SOV4[0-3]|X10[ia]v?|E1[05][ai]v?|MT[0-9]{2}[a-z]? Build|SO-0(?:[12]C|[345]D|[234]E|[1-5]F|[1-5]G|[1-4]H|[1-4]J|[1-5]K|1M|[1-3]L)|R800[aix]|J3173|J82[17]0|J9110|J92[16]0|J81[17]0|I[34]113|I3[12]23|I42[19]3|H9493|H8296|H8166|H4493|G2299|LiveWithWalkman|BRAVIA|SGP771|E3 Dual|A001SO|I4193|E6508|SOT31|SO-[45]1A|SO-52A|XQ-A[DT]51|XQ-A[TU]42|XQ-AS[67]2|XQ-A[TSU]52|SOL25|SOG02|A002SO|NW-(A100|Z1000)Series|J3273\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E10[ai]v?\",\n \"model\": \"Xperia X10 mini\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?U20\",\n \"model\": \"Xperia X10 mini pro\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E15[ai]v?\",\n \"model\": \"Xperia X8\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(LT15[ai]?v?|SO-01C)\",\n \"model\": \"Xperia arc\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT18[ai]v?\",\n \"model\": \"Xperia arc S\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?MT11\",\n \"model\": \"Xperia neo V\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?MT15\",\n \"model\": \"Xperia neo\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?MT27\",\n \"model\": \"Xperia Sola\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?MK16[ai]\",\n \"model\": \"Xperia pro\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST15[ai]\",\n \"model\": \"Xperia mini\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST17[ai]\",\n \"model\": \"Xperia active\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SO-02L\",\n \"model\": \"Xperia Ace\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST18[ai]\",\n \"model\": \"Xperia ray\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SK17[ai]?\",\n \"model\": \"Xperia mini pro\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?X10[ai]v?\",\n \"model\": \"Xperia X10\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)M1\",\n \"model\": \"Aspen\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?R800\",\n \"model\": \"Xperia PLAY\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?WT19|LiveWithWalkman\",\n \"model\": \"Live with Walkman\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?CK13i\",\n \"model\": \"txt\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?CK15[ai]\",\n \"model\": \"txt pro\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F100i\",\n \"model\": \"Jalou\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?J105\",\n \"model\": \"Naite\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?J108\",\n \"model\": \"Cedar\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?J10\",\n \"model\": \"Elm\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?J20\",\n \"model\": \"Hazel\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?U10\",\n \"model\": \"Aino\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?U100\",\n \"model\": \"Yari\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?U1\",\n \"model\": \"Satio\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?U5\",\n \"model\": \"Vivaz\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?U8\",\n \"model\": \"Vivaz pro\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?W20\",\n \"model\": \"Zylo\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?W100\",\n \"model\": \"Spiro\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?W150\",\n \"model\": \"Yendo\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?W960\",\n \"model\": \"W960\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?WT13\",\n \"model\": \"Mix Walkman\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"SO-04F\",\n \"model\": \"Xperia A2\"\n },\n {\n \"regex\": \"G2299\",\n \"model\": \"Xperia R1 Plus\"\n },\n {\n \"regex\": \"SO-04G\",\n \"model\": \"Xperia A4\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?I(?:4113|31[12]3)\",\n \"model\": \"Xperia 10\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?J3173(?:[);/ ]|$)\",\n \"model\": \"Xperia Ace\"\n },\n {\n \"regex\": \"(?:A001SO|XQ-A[TU]52|XQ-AU42|SO-41A|SOV43)(?:[);/ ]|$)\",\n \"model\": \"Xperia 10 II\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?I(?:42[19]3|3223)\",\n \"model\": \"Xperia 10 Plus\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?I4193\",\n \"model\": \"Xperia 10 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:J(?:9110|81[17]0)|SOV40|SO-03L|802SO)\",\n \"model\": \"Xperia 1\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:SOG01|SO-51A|XQ-AT42|XQ-AT51)(?:[);/ ]|$)\",\n \"model\": \"Xperia 1 II\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT22i|Xperia P\",\n \"model\": \"Xperia P\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT25i|Xperia V\",\n \"model\": \"Xperia V\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?J92[16]0\",\n \"model\": \"Xperia 5 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:J82[17]0|SO-01M|SOV41|901SO)\",\n \"model\": \"Xperia 5\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:SOG02|A002SO|XQ-AS[567]2|SO-52A)\",\n \"model\": \"Xperia 5 II\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:SOV42|902SO)\",\n \"model\": \"Xperia 8\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?J3273\",\n \"model\": \"Xperia 8 Lite\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT26ii\",\n \"model\": \"Xperia SL\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT26i|Xperia S(?:[);/ ]|$)\",\n \"model\": \"Xperia S\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SO-02C\",\n \"model\": \"Xperia arco\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SO-03D\",\n \"model\": \"Xperia arco HD\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT26w\",\n \"model\": \"Xperia arco S\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT28[aih]\",\n \"model\": \"Xperia ion\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT29i|Xperia TX(?:[);/ ]|$)\",\n \"model\": \"Xperia TX\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT30a\",\n \"model\": \"Xperia T LTE\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?LT30p\",\n \"model\": \"Xperia T\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST21[ia]2\",\n \"model\": \"Xperia tipo dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST21[ia]\",\n \"model\": \"Xperia tipo\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST23[ia]\",\n \"model\": \"Xperia miro\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST25[ia]\",\n \"model\": \"Xperia U\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SOL22\",\n \"model\": \"Xperia UL\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST26[ia]\",\n \"model\": \"Xperia J\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?ST27[ia]\",\n \"model\": \"Xperia go\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C150[45]\",\n \"model\": \"Xperia E\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C160[45]\",\n \"model\": \"Xperia E Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:E210[45]|E2115|E2124)\",\n \"model\": \"Xperia E4\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E20[05]3|E2006\",\n \"model\": \"Xperia E4G\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C190[45]\",\n \"model\": \"Xperia M\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C200[45]\",\n \"model\": \"Xperia M Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C210[45]|S36h\",\n \"model\": \"Xperia L\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C230[45]|S39h\",\n \"model\": \"Xperia C\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C530[236]|Xperia SP(?:[);/ ]|$)\",\n \"model\": \"Xperia SP\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C550[23]\",\n \"model\": \"Xperia ZR\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?C650[236]|Xperia ZL(?:[);/ ]|$)\",\n \"model\": \"Xperia ZL\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SOL25(?:[);/ ]|$)\",\n \"model\": \"Xperia ZL2\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:C66(?:0[236]|16)|SO-02E)\",\n \"model\": \"Xperia Z\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:C68(?:0[26]|[34]3)|XL39H|SOL24)|Xperia Z Ultra(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"Xperia Z Ultra\"\n },\n {\n \"regex\": \"Xperia Z(?:[);/ ]|$)\",\n \"model\": \"Xperia Z\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D200[45]\",\n \"model\": \"Xperia E1\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D21(?:0[45]|14)\",\n \"model\": \"Xperia E1 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D22(?:0[236]|43)\",\n \"model\": \"Xperia E3\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D2212|E3 Dual\",\n \"model\": \"Xperia E3 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E20[34]3\",\n \"model\": \"Xperia E4g Dual\"\n },\n {\n \"regex\": \"H33[12]1\",\n \"model\": \"Xperia L2\"\n },\n {\n \"regex\": \"H43[13]1\",\n \"model\": \"Xperia L2 Dual\"\n },\n {\n \"regex\": \"I3312\",\n \"model\": \"Xperia L3\"\n },\n {\n \"regex\": \"I43[13]2\",\n \"model\": \"Xperia L3 Dual\"\n },\n {\n \"regex\": \"XQ-AD51\",\n \"model\": \"Xperia L4\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D2302\",\n \"model\": \"Xperia M2 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D230[356]\",\n \"model\": \"Xperia M2\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D240[36]\",\n \"model\": \"Xperia M2 Aqua\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:E230[36]|E23[35]3)\",\n \"model\": \"Xperia M4 Aqua\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:E2312|E2363)\",\n \"model\": \"Xperia M4 Aqua Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E56[05][36]\",\n \"model\": \"Xperia M5\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E56[436]3\",\n \"model\": \"Xperia M5 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D2502\",\n \"model\": \"Xperia C3 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D2533\",\n \"model\": \"Xperia C3\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E53[05]3|E5306\",\n \"model\": \"Xperia C4\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E53[0346]3\",\n \"model\": \"Xperia C4 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E5506|E5553\",\n \"model\": \"Xperia C5 Ultra\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E55[36]3\",\n \"model\": \"Xperia C5 Ultra Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D510[236]\",\n \"model\": \"Xperia T3\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:D530[36]|D5316|XM50[ht])\",\n \"model\": \"Xperia T2 Ultra\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D5322\",\n \"model\": \"Xperia T2 Ultra Dual\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?D5503|Xperia Z1 Compact\",\n \"model\": \"Xperia Z1 Compact\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:C69(?:0[236]|16|43)|SOL23|L39H|SO-0[12]F)|Xperia Z1(?:[);/ ]|$)\",\n \"model\": \"Xperia Z1\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:D58[03]3|SO-02G)|Xperia Z3 Compact(?:[);/ ]|$)\",\n \"model\": \"Xperia Z3 Compact\"\n },\n {\n \"regex\": \"Xperia Z2 Tablet Wifi\",\n \"model\": \"Xperia Z2 Tablet WiFi\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"SGP561\",\n \"model\": \"Xperia Z2 Tablet\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:D65(?:0[23]|43)|SO-03F)|Xperia Z2(?:[);/ ]|$)\",\n \"model\": \"Xperia Z2\"\n },\n {\n \"regex\": \"D6563\",\n \"model\": \"Xperia Z2a\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:D66[045]3|D66[14]6|SO-01G|SOL26|401SO)|Xperia Z3(?:[);/ ]|$)\",\n \"model\": \"Xperia Z3\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:D6633|D6683)\",\n \"model\": \"Xperia Z3 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:E65[35]3)\",\n \"model\": \"Xperia Z3+\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:D6708)\",\n \"model\": \"Xperia Z3v\"\n },\n {\n \"regex\": \"SOV31|402SO|SO-03G\",\n \"model\": \"Xperia Z4\"\n },\n {\n \"regex\": \"E6508\",\n \"model\": \"Xperia Z4v\"\n },\n {\n \"regex\": \"SGP771|SOT31|SO-05G\",\n \"model\": \"Xperia Z4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:E58[02]3|SO-02H)\",\n \"model\": \"Xperia Z5 Compact\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:E66[05]3|SOV32|501SO|SO-01H)\",\n \"model\": \"Xperia Z5\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E66[38]3\",\n \"model\": \"Xperia Z5 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:E68[58]3|SO-03H)\",\n \"model\": \"Xperia Z5 Premium\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?E6833\",\n \"model\": \"Xperia Z5 Premium Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F311[135]\",\n \"model\": \"Xperia XA\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F311[26]\",\n \"model\": \"Xperia XA Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F321[135]\",\n \"model\": \"Xperia XA Ultra\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F321[26]\",\n \"model\": \"Xperia XA Ultra Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F833[12]|SOV34|601SO|SO-01J\",\n \"model\": \"Xperia XZ\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:701SO|SOV36|G834[123]|SO-01K)\",\n \"model\": \"Xperia XZ1\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G8441|SO-02K\",\n \"model\": \"Xperia XZ1 Compact\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F331[13]\",\n \"model\": \"Xperia E5\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G312[135]|G311[26]\",\n \"model\": \"Xperia XA1\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G341[26]|G342[13]\",\n \"model\": \"Xperia XA1 Plus\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G3426\",\n \"model\": \"Xperia XA1 Plus Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G322[136]|G3212\",\n \"model\": \"Xperia XA1 Ultra\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?H31[123]3\",\n \"model\": \"Xperia XA2\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?H41[13]3\",\n \"model\": \"Xperia XA2 Dual\"\n },\n {\n \"regex\": \"H44[19]3\",\n \"model\": \"Xperia XA2 Plus Dual\"\n },\n {\n \"regex\": \"H4433\",\n \"model\": \"H4433\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?H(?:3213|3223|4213|4233)\",\n \"model\": \"Xperia XA2 Ultra\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G823[12]|SOV35|602SO|SO-03J\",\n \"model\": \"Xperia XZs\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G814[12]|SO-04[JK]\",\n \"model\": \"Xperia XZ Premium\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:H83[12]4|H82[17]6|SOV37|SO-03K|H8296|702SO)\",\n \"model\": \"Xperia XZ2\"\n },\n {\n \"regex\": \"H8266\",\n \"model\": \"Xperia XZ2 Dual\"\n },\n {\n \"regex\": \"SO-05K\",\n \"model\": \"Xperia XZ2 Compact\"\n },\n {\n \"regex\": \"(?:H8166|SOV38)(?:[);/ ]|$)\",\n \"model\": \"Xperia XZ2 Premium Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:H(8416|9436|9493)|SO-01L|SOV39|801SO)\",\n \"model\": \"Xperia XZ3\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G331[13]\",\n \"model\": \"Xperia L1\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?G3312\",\n \"model\": \"Xperia L1 Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SO-04E\",\n \"model\": \"Xperia A\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SO-04D\",\n \"model\": \"Xperia GX\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?SO-05D\",\n \"model\": \"Xperia SX\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F5121\",\n \"model\": \"Xperia X\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F5122\",\n \"model\": \"Xperia X Dual\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F5321|SO-02J\",\n \"model\": \"Xperia X Compact\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?(?:F8131|502SO|SOV33|SO-04H)\",\n \"model\": \"Xperia X Performance\"\n },\n {\n \"regex\": \"(?:Sony(?:Ericsson)?)?F8132\",\n \"model\": \"Xperia X Performance Dual\"\n },\n {\n \"regex\": \"SGP(?:311|312|321)(?:[);/ ]|$)|SO-03E\",\n \"model\": \"Xperia Tablet Z\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"SGP712(?:[);/ ]|$)\",\n \"model\": \"Xperia Tablet Z4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"SGP(?:511|512|521)(?:[);/ ]|$)|SO-05F\",\n \"model\": \"Xperia Tablet Z2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"SGP(?:6[124]1|612)(?:[);/ ]|$)\",\n \"model\": \"Xperia Tablet Z3 Compact\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"SGPT(?:12|121|122|123|13|131|132|133)(?:[);/ ]|$)\",\n \"model\": \"Xperia Tablet S\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:BRAVIA )(2K GB ATV3|4K UR2|4K GB ATV3|4K GB|4K 2015|2015)(?:[);/ ]|$)\",\n \"model\": \"Bravia $1\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"NW-A100Series\",\n \"model\": \"Walkman A100\",\n \"device\": \"portable media player\"\n },\n {\n \"regex\": \"NW-Z1000Series\",\n \"model\": \"Walkman Z1000\",\n \"device\": \"portable media player\"\n },\n {\n \"regex\": \"SonyBDP|SonyDBV\",\n \"model\": \"Blu-ray Player\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(?:Sony-)?(KDL?-?[0-9a-z]+)\",\n \"model\": \"$1\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"Opera TV Store.*(?:Sony-)([0-9a-z\\\\-_]+)\",\n \"model\": \"$1\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"((?:WT|SO|ST|SK|MK)[0-9]+[a-z]*[0-9]*)(?: Build|\\\\))\",\n \"model\": \"$1\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"(MT[0-9]{2}[a-z]?)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"portalmmm/2.0 K([a-z0-9]+)\",\n \"model\": \"K$1\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"Sony ?Ericsson?([^/;]*) Build\",\n \"model\": \"$1\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"SonyEricsson([CGJKPTWZ][0-9]+[a-z]+)/\",\n \"model\": \"$1\",\n \"brand\": \"Sony Ericsson\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"Sony ?Ericsson ?([a-z0-9\\\\-]+)\",\n \"model\": \"$1\",\n \"brand\": \"Sony Ericsson\"\n },\n {\n \"regex\": \"Sony (Tablet[^/;]*) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(SGP[^/;]*) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Xperia ([^/;]*Tablet[^/;]*) Build\",\n \"model\": \"Xperia $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Xperia ([^;/]+) Build\",\n \"model\": \"Xperia $1\"\n },\n {\n \"regex\": \"Sony[ -]?([^/;]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Sony[ -]?([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ergo\": {\n \"regex\": \"ERGO|(V550[_ ]Vision|B502 Basic|B504[_ ]Unit|A502[_ ]Aurum|A503[ _]Optima|Prime B400|A551 Sky 4G|A553 Power|A555 Universe|Force F500|GoTab GBT9|GoTab Gti8|F501_Magic|V551[ _]Aura|V540_Level|V570_BIG_BEN|B506[_ ]INTRO|A503-Optima|B505_Unit_4G)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"F501_Magic\",\n \"model\": \"F501 Magic\"\n },\n {\n \"regex\": \"B502 Basic\",\n \"model\": \"B502 Basic\"\n },\n {\n \"regex\": \"A503-Optima\",\n \"model\": \"A503 Optima\"\n },\n {\n \"regex\": \"B506[_ ]INTRO\",\n \"model\": \"B506 Intro\"\n },\n {\n \"regex\": \"V550[_ ]Vision\",\n \"model\": \"V550 Vision\"\n },\n {\n \"regex\": \"B504[_ ]Unit\",\n \"model\": \"B504 Unit\"\n },\n {\n \"regex\": \"B505_Unit_4G\",\n \"model\": \"B505 Unit 4G\"\n },\n {\n \"regex\": \"V551[ _]Aura\",\n \"model\": \"V551 Aura\"\n },\n {\n \"regex\": \"V540_Level\",\n \"model\": \"V540 Level\"\n },\n {\n \"regex\": \"V570_BIG_BEN\",\n \"model\": \"V570 Big Ben\"\n },\n {\n \"regex\": \"Ergo F502\",\n \"model\": \"F502 Platinum\"\n },\n {\n \"regex\": \"(ERGO_)?A500[ _]Best\",\n \"model\": \"A500 Best\"\n },\n {\n \"regex\": \"(ERGO_)?A550[ _]Maxx\",\n \"model\": \"A550 Maxx\"\n },\n {\n \"regex\": \"Prime B400\",\n \"model\": \"Prime B400\"\n },\n {\n \"regex\": \"A502[_ ]Aurum\",\n \"model\": \"A502 Aurum\"\n },\n {\n \"regex\": \"A503[ _]Optima\",\n \"model\": \"A503 Optima\"\n },\n {\n \"regex\": \"A551 Sky 4G\",\n \"model\": \"A551 Sky 4G\"\n },\n {\n \"regex\": \"A553 Power\",\n \"model\": \"A553 Power\"\n },\n {\n \"regex\": \"A555 Universe\",\n \"model\": \"A555 Universe\"\n },\n {\n \"regex\": \"ERGO[_ ]A556\",\n \"model\": \"A556\"\n },\n {\n \"regex\": \"ERGO[_ ]F500\",\n \"model\": \"F500\"\n },\n {\n \"regex\": \"ERGO[_ ]F501\",\n \"model\": \"F501\"\n },\n {\n \"regex\": \"B500 First\",\n \"model\": \"B500 First\"\n },\n {\n \"regex\": \"Force F500\",\n \"model\": \"Force F500\"\n },\n {\n \"regex\": \"GoTab GBT9\",\n \"model\": \"GoTab GBT9\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"GoTab Gti8\",\n \"model\": \"GoTab GTi8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ERGO[_ ]Tab[ _]Crystal[ _]Lite\",\n \"model\": \"Tab Crystal Lite\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ERGO[_ ]Tab[ _]Hero[ _]II\",\n \"model\": \"Tab Hero II\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ERGO[_ ](B700)\",\n \"model\": \"Tab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ERGO SmartBox SX\",\n \"model\": \"SmartBox SX\",\n \"device\": \"tv\"\n }\n ]\n },\n \"Ericsson\": {\n \"regex\": \"(?:Ericsson(?:/ )?[a-z0-9]+)|(?:R380 2.0 WAP1.1)\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"Ericsson(?:/ )?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"R380 2.0 WAP1.1\",\n \"model\": \"R380\"\n }\n ]\n },\n \"Energizer\": {\n \"regex\": \"PowerMax|ENERGY[_ ]?(?:[45]00|400S|S[56]00|E12|E5[02]0S?)(?:[_ ](?:LTE|EU))?\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"PowerMax(P[0-9]+S?)\",\n \"model\": \"Power Max $1\"\n },\n {\n \"regex\": \"ENERGY[_ ]([45]00|E520)[_ ]LTE\",\n \"model\": \"Energy $1 LTE\"\n },\n {\n \"regex\": \"ENERGY[_ ]400S\",\n \"model\": \"Energy 400S\"\n },\n {\n \"regex\": \"ENERGY400\",\n \"model\": \"Energy 400\"\n },\n {\n \"regex\": \"ENERGY[_ ]S([56]00)\",\n \"model\": \"Energy S$1\"\n },\n {\n \"regex\": \"ENERGY[_ ]?(E500S|E500|E12)\",\n \"model\": \"Energy $1\"\n }\n ]\n },\n \"Energy Sistem\": {\n \"regex\": \"ENERGY[ _-]?([^;/]+) Build|Energy Phone Pro 3\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Energy Phone Pro 3\",\n \"model\": \"Energy Phone Pro 3\"\n },\n {\n \"regex\": \"ENERGY[ _-]?([^;/]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"eTouch\": {\n \"regex\": \"eTouch ?([a-z0-9]+)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Etuline\": {\n \"regex\": \"(ETL-S(?:3520|4521|5042|5084|6022)|ETL-T(?:752G|882G|9[78]0))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(ETL-S(?:[^/); ]+))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(ETL-T(?:[^/); ]+))\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Storex\": {\n \"regex\": \"eZee[^a-z]*Tab ?([^;/]*) Build|STOREX LinkBox\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"eZee[^a-z]*Tab ?([^;/]*) Build\",\n \"model\": \"eZee'Tab$1\"\n },\n {\n \"regex\": \"STOREX LinkBox\",\n \"model\": \"LinkBox\",\n \"device\": \"tv\"\n }\n ]\n },\n \"Evertek\": {\n \"regex\": \"(Ever(?:Glory|Shine|Miracle|Mellow|Classic|Trendy|Fancy|Vivid|Slim|Glow|Magic|Smart|Star)[^/;]*) Build|E70[25]0HD|E805[01]HD|E9054HD|E8050HG|E7914HG\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(E70[25]0HD|E805[01]HD|E9054HD|E8050HG|E7914HG)\",\n \"device\": \"tablet\",\n \"model\": \"Everpad $1\"\n },\n {\n \"regex\": \"(Ever(?:Glory|Shine|Miracle|Mellow|Classic|Trendy|Fancy|Vivid|Slim|Glow|Magic|Smart|Star)[^/;]*) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Evolio\": {\n \"regex\": \"Evolio|M4MAGIC\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"M4MAGIC\",\n \"model\": \"M4 Magic\"\n },\n {\n \"regex\": \"Evolio_M5Pro\",\n \"model\": \"M5 Pro\"\n },\n {\n \"regex\": \"Evolio[ _](M6|S4 Cobalt|S5|X10|Yuppi)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Evolveo\": {\n \"regex\": \"EVOLVEO|StrongPhone\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"EVOLVEO MultiMedia Box M4\",\n \"device\": \"tv\",\n \"model\": \"MultiMedia Box M4\"\n },\n {\n \"regex\": \"Smart TV ([^;/]*) Build\",\n \"device\": \"tv\",\n \"model\": \"Smart TV $1\"\n },\n {\n \"regex\": \"EVOLVEO StrongPhone G([248])\",\n \"model\": \"StrongPhone G$1\"\n },\n {\n \"regex\": \"(?:EVOLVEO[ _])?StrongPhone[ _]?Q([679])(_LTE)?\",\n \"model\": \"StrongPhone Q$1$2\"\n },\n {\n \"regex\": \"EVOLVEO[ _]([^;/]*) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Explay\": {\n \"regex\": \"Explay|[\\\\w]+-EXPLAY-FIN|ActiveD[ _]|Atlant |Informer[ _][0-9]+|CinemaTV 3G|Surfer[ _][0-9\\\\.]|sQuad[ _][0-9\\\\.]|Onliner[1-3]|RioPlay|Leader|Pulsar|Infinityll|Imperium[78]|Indigo|Lagoon\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"ActiveD[ _]7.4[ _]3G\",\n \"model\": \"ActiveD 7.4 3G\"\n },\n {\n \"regex\": \"Imperium([78])(?:[);/ ]|$)\",\n \"model\": \"Imperium $1 3G\"\n },\n {\n \"regex\": \"ActiveD[ _]8.2[ _]3G\",\n \"model\": \"ActiveD 8.2 3G\"\n },\n {\n \"regex\": \"CinemaTV[ _]3G\",\n \"model\": \"CinemaTV 3G\"\n },\n {\n \"regex\": \"Infinityll\",\n \"model\": \"Infinity II\"\n },\n {\n \"regex\": \"Informer[ _]([0-9]+(?:[ _]3G)?)\",\n \"model\": \"Informer $1\"\n },\n {\n \"regex\": \"Surfer[ _]([0-9\\\\.]+(?:[ _]3G)?)\",\n \"model\": \"Surfer $1\"\n },\n {\n \"regex\": \"sQuad[ _]([0-9\\\\.]+(?:[ _]3G)?)\",\n \"model\": \"sQuad $1\"\n },\n {\n \"regex\": \"Onliner([1-3])\",\n \"model\": \"Onliner $1\"\n },\n {\n \"regex\": \"Atlant(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Atlant\"\n },\n {\n \"regex\": \"Indigo(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Indigo\"\n },\n {\n \"regex\": \"Pulsar(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Pulsar\"\n },\n {\n \"regex\": \"[\\\\w]+-EXPLAY-FIN\",\n \"device\": \"feature phone\",\n \"model\": \"Fin\"\n },\n {\n \"regex\": \"Lagoon(?:[);/ ]|$)\",\n \"model\": \"Lagoon\"\n },\n {\n \"regex\": \"Explay[ _-]([^;/]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"RioPlay(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Rio Play\"\n },\n {\n \"regex\": \"Leader\",\n \"model\": \"Leader\"\n }\n ]\n },\n \"EvroMedia\": {\n \"regex\": \"EVROMEDIA|Playpad[ _]|PLAY_PAD_PRO_XL\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Playpad 3G GOO\",\n \"model\": \"Play Pad 3G Goo\"\n },\n {\n \"regex\": \"Play Pad 3G 2Goo\",\n \"model\": \"Play Pad 3G 2Goo\"\n },\n {\n \"regex\": \"Play Pad PRO\",\n \"model\": \"Play Pad Pro\"\n },\n {\n \"regex\": \"PLAY_PAD_PRO_XL\",\n \"model\": \"Play Pad Pro XL\"\n },\n {\n \"regex\": \"PlayPad 3GTab XL\",\n \"model\": \"Play Pad 3G Tab XL\"\n }\n ]\n },\n \"EKO\": {\n \"regex\": \"EKO\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"EKO[ _-]?([^;/)]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"EKO[ _-]?([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Extrem\": {\n \"regex\": \"Rock X9+|ROCK_X11\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Rock X9+\",\n \"model\": \"Rock X9+\"\n },\n {\n \"regex\": \"ROCK_X11\",\n \"model\": \"Rock X11\"\n }\n ]\n },\n \"Ezze\": {\n \"regex\": \"EZZE-|EZ(?!Browser)[a-z0-9]+\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"EZZE-([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"EZ([a-z0-9]+)\",\n \"model\": \"EZ$1\"\n }\n ]\n },\n \"Ezio\": {\n \"regex\": \"EZIO-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Forstar\": {\n \"regex\": \"Amosta ?3G5\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Amosta ?3G5\",\n \"model\": \"Amosta 3G5\"\n }\n ]\n },\n \"Foxconn\": {\n \"regex\": \"InFocus M[0-9]+[a-z]?\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"InFocus M([0-9]+[a-z]?)\",\n \"model\": \"InFocus M$1\"\n }\n ]\n },\n \"Fondi\": {\n \"regex\": \"Fondi[- _]([^;/)]+)|(T702|Q008B|Q010B|Q718B|Q902|T602B|T707G|T708B|T725B|T725B1|T907B)(?:\\\\)| Build)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(T702|T602B)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Q008B|Q010B|Q718B|Q902|T707G|T708B|T725B|T725B1|T907B)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Fondi[- _]([^;/)]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Fairphone\": {\n \"regex\": \"(FP(?:1U?|2))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Famoco\": {\n \"regex\": \"(FX[123]00)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"FiGO\": {\n \"regex\": \"ATRIUM II F55L2|TRIO F40LT|CENTRIC S50G|EPIC F50G|Gravity X55L|Orion M50L|ULTRA M50G|M405B|VIRTUE3|F55L Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ATRIUM II F55L2\",\n \"model\": \"Atrium II\"\n },\n {\n \"regex\": \"(F55L)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TRIO F40LT\",\n \"model\": \"Trio F40LT\"\n },\n {\n \"regex\": \"EPIC F50G\",\n \"model\": \"Epic F50G\"\n },\n {\n \"regex\": \"(Gravity X55L|Orion M50L)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ULTRA M50G\",\n \"model\": \"Prime\"\n },\n {\n \"regex\": \"M405B_8GB\",\n \"model\": \"Virtue II 8GB\"\n },\n {\n \"regex\": \"M405B\",\n \"model\": \"Virtue II\"\n },\n {\n \"regex\": \"VIRTUE3\",\n \"model\": \"Virtue III\"\n },\n {\n \"regex\": \"CENTRIC S50G\",\n \"model\": \"Centric S50G\"\n }\n ]\n },\n \"FNB\": {\n \"regex\": \"ConeXis (A[12]|X[12])|SP5045V\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SP5045V\",\n \"model\": \"SP5045V\"\n },\n {\n \"regex\": \"ConeXis A1\",\n \"model\": \"ConeXis A1\"\n },\n {\n \"regex\": \"ConeXis A2\",\n \"model\": \"ConeXis A2\"\n },\n {\n \"regex\": \"ConeXis X1\",\n \"model\": \"ConeXis X1\"\n },\n {\n \"regex\": \"ConeXis X2\",\n \"model\": \"ConeXis X2\"\n }\n ]\n },\n \"Fujitsu\": {\n \"regex\": \"(?:F-01[FHJKLM]|F-02[EFGHLK]|F-03[DEFGKHL]|F-04[EGFHKJ]|F-05[DEFJG]|F-06[EF]|F-07[DE]|F-08D|F-09[DE]|F-10D|F-[45]1A|F-[45]2A|F-11D|F-12C|M532|FARTM933KZ|901FJ|arrows(?:RX|M03|M0[45](?:-PREMIUM)?)|801FJ|FJL2[12])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"F-51A(?:[);/ ]|$)\",\n \"model\": \"Arrows 5G F-51A\"\n },\n {\n \"regex\": \"F-01F(?:[);/ ]|$)\",\n \"model\": \"Arrows NX F-01F\"\n },\n {\n \"regex\": \"(F-01[LM]|F-06F|F-03K|F-42A)(?:[);/ ]|$)\",\n \"model\": \"Easy Phone $1\"\n },\n {\n \"regex\": \"F-03L(?:[);/ ]|$)\",\n \"model\": \"Arrows Phone F-03L\"\n },\n {\n \"regex\": \"F-01J(?:[);/ ]|$)\",\n \"model\": \"Arrows NX F-01J\"\n },\n {\n \"regex\": \"F-01K(?:[);/ ]|$)\",\n \"model\": \"Arrows NX F-01K\"\n },\n {\n \"regex\": \"F-01H(?:[);/ ]|$)\",\n \"model\": \"Arrows Fit F-01H\"\n },\n {\n \"regex\": \"F-02E(?:[);/ ]|$)\",\n \"model\": \"Arrows X F-02E\"\n },\n {\n \"regex\": \"F-02G(?:[);/ ]|$)\",\n \"model\": \"Arrows NX F-02G\"\n },\n {\n \"regex\": \"FJL21(?:[);/ ]|$)\",\n \"model\": \"Arrows EF FJL21\"\n },\n {\n \"regex\": \"FJL22(?:[);/ ]|$)\",\n \"model\": \"Arrows Z FJL22\"\n },\n {\n \"regex\": \"F-02H(?:[);/ ]|$)\",\n \"model\": \"Arrows NX F-02H\"\n },\n {\n \"regex\": \"F-52A(?:[);/ ]|$)\",\n \"model\": \"Arrows NX9 F-52A\"\n },\n {\n \"regex\": \"F-03D(?:[);/ ]|$)\",\n \"model\": \"Arrows Kiss F-03D\"\n },\n {\n \"regex\": \"F-03E(?:[);/ ]|$)\",\n \"model\": \"Arrows Kiss F-03E\"\n },\n {\n \"regex\": \"F-03F(?:[);/ ]|$)\",\n \"model\": \"Disney Mobile F-03F\"\n },\n {\n \"regex\": \"F-03H(?:[);/ ]|$)\",\n \"model\": \"Arrows SV F-03H\"\n },\n {\n \"regex\": \"901FJ(?:[);/ ]|$)\",\n \"model\": \"Arrows J 901FJ\"\n },\n {\n \"regex\": \"F-04E(?:[);/ ]|$)\",\n \"model\": \"Arrows V F-04E\"\n },\n {\n \"regex\": \"F-04G(?:[);/ ]|$)\",\n \"model\": \"Arrows NX F-04G\"\n },\n {\n \"regex\": \"F-05D(?:[);/ ]|$)\",\n \"model\": \"Arrows X LTE F-05D\"\n },\n {\n \"regex\": \"F-05F(?:[);/ ]|$)\",\n \"model\": \"Arrows NX F-05F\"\n },\n {\n \"regex\": \"F-05J(?:[);/ ]|$)\",\n \"model\": \"Arrows Be F-05J\"\n },\n {\n \"regex\": \"F-05G(?:[);/ ]|$)\",\n \"model\": \"Arrows K-tai\"\n },\n {\n \"regex\": \"F-04K(?:[);/ ]|$)\",\n \"model\": \"Arrows Be F-04K\"\n },\n {\n \"regex\": \"F-02L(?:[);/ ]|$)\",\n \"model\": \"Arrows Be 3 F-02L\"\n },\n {\n \"regex\": \"F-41A(?:[);/ ]|$)\",\n \"model\": \"Arrows Be 4 F-41A\"\n },\n {\n \"regex\": \"F-06E(?:[);/ ]|$)\",\n \"model\": \"Arrows NX F-06E\"\n },\n {\n \"regex\": \"F-07D(?:[);/ ]|$)\",\n \"model\": \"Arrows \u03BC F-07D\"\n },\n {\n \"regex\": \"801FJ(?:[);/ ]|$)\",\n \"model\": \"Arrows U 801FJ\"\n },\n {\n \"regex\": \"F-07E(?:[);/ ]|$)\",\n \"model\": \"Disney Mobile F-07E\"\n },\n {\n \"regex\": \"F-08D(?:[);/ ]|$)\",\n \"model\": \"Disney Mobile F-08D\"\n },\n {\n \"regex\": \"F-09D(?:[);/ ]|$)\",\n \"model\": \"ANTEPRIMA F-09D\"\n },\n {\n \"regex\": \"F-09E(?:[);/ ]|$)\",\n \"model\": \"Raku-Raku Smartphone Premium F-09E\"\n },\n {\n \"regex\": \"F-10D(?:[);/ ]|$)\",\n \"model\": \"Arrows X F-10D\"\n },\n {\n \"regex\": \"F-11D(?:[);/ ]|$)\",\n \"model\": \"Arrows Me F-11D\"\n },\n {\n \"regex\": \"F-12C(?:[);/ ]|$)\",\n \"model\": \"F-12C\"\n },\n {\n \"regex\": \"(F-04[JF])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"arrowsM03(?:[);/ ]|$)\",\n \"model\": \"Arrows M03\"\n },\n {\n \"regex\": \"arrowsRX(?:[);/ ]|$)\",\n \"model\": \"Arrows RX\"\n },\n {\n \"regex\": \"arrowsM04-PREMIUM(?:[);/ ]|$)\",\n \"model\": \"Arrows M04 Premium\"\n },\n {\n \"regex\": \"arrowsM(0[45])(?:[);/ ]|$)\",\n \"model\": \"Arrows M$1\"\n },\n {\n \"regex\": \"(F-0[32]F|F-03G|F-04H|F-05E|F-02K)(?:[);/ ]|$)\",\n \"model\": \"Arrows Tab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"FARTM933KZ\",\n \"model\": \"Arrows Tab M504/HA4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"M532(?:[);/ ]|$)\",\n \"model\": \"Stylistic\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"G-TiDE\": {\n \"regex\": \"G-TiDE\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Shining7\",\n \"model\": \"Shining 7\"\n },\n {\n \"regex\": \"G-TiDE_(A1|S[34])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"G-TiDE V6\",\n \"model\": \"V6\"\n },\n {\n \"regex\": \"E(57|60|66|72|77)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Gemini\": {\n \"regex\": \"(GEM[0-9]+[a-z]*)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"General Mobile\": {\n \"regex\": \"GM 5 Plus|GM8 go|GM [68] d|GM 8|General Mobile 4G|GM 9 (?:Pro|Plus)|e-tab 20(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GM 5 Plus\",\n \"model\": \"GM 5 Plus\"\n },\n {\n \"regex\": \"GM ([68]) d\",\n \"model\": \"GM $1D\"\n },\n {\n \"regex\": \"GM 8\",\n \"model\": \"GM 8\"\n },\n {\n \"regex\": \"GM8 go\",\n \"model\": \"GM 8 Go\"\n },\n {\n \"regex\": \"GM 9 Pro\",\n \"model\": \"GM 9 Pro\"\n },\n {\n \"regex\": \"GM 9 Plus\",\n \"model\": \"GM 9 Plus\"\n },\n {\n \"regex\": \"General Mobile 4G Dual\",\n \"model\": \"4G Dual\"\n },\n {\n \"regex\": \"General Mobile 4G\",\n \"model\": \"4G\"\n },\n {\n \"regex\": \"e-tab 20(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"E-Tab 20\"\n }\n ]\n },\n \"Geotel\": {\n \"regex\": \"GEOTEL[ _]?\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"G1\",\n \"model\": \"G1\"\n },\n {\n \"regex\": \"GEOTEL[ _]?Note\",\n \"model\": \"Note\"\n },\n {\n \"regex\": \"GEOTEL[ _]AMIGO\",\n \"model\": \"Amigo\"\n }\n ]\n },\n \"Ghia\": {\n \"regex\": \"GHIA|QS702|VECTOR10\\\\.1\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"QS702\",\n \"model\": \"QS702\"\n },\n {\n \"regex\": \"GHIA_ZEUS_3G\",\n \"model\": \"Zeus 3G\"\n },\n {\n \"regex\": \"GHIA_AXIS7\",\n \"model\": \"Axis 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VECTOR10\\\\.1\",\n \"model\": \"Vector 10.1\\\"\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Gigabyte\": {\n \"regex\": \"GSmart[ _][a-z0-9 ]+(?: Build|\\\\))|Gigabyte-[a-z0-9]+|Simba SX1|GSmart_Classic_Lite|(?<!Eagle )Classic[_ ](?:Joy|Pro)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(GSmart[ _][a-z0-9 ]+)(?: Build|[);])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Gigabyte-([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Classic[ _](?:Joy|Pro)|GSmart_Classic_Lite)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Simba SX1\",\n \"model\": \"GSmart Simba SX1\"\n }\n ]\n },\n \"Gigaset\": {\n \"regex\": \"Gigaset|(?: GS80|GS1[0189]0|GS1[89]5|GS2[89]0|GS5[357]-6|GS[23]70(?:_Plus)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Gigaset QV(1030|830)\",\n \"model\": \"Gigaset QV$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"G(S[23]70)[_ ]Plus(?:[);/ ]|$)\",\n \"model\": \"G$1 Plus\"\n },\n {\n \"regex\": \"GS([23]70|1[0189]0|1[89]5|2[89]0|80)(?:[);/ ]|$)\",\n \"model\": \"GS$1\"\n },\n {\n \"regex\": \"GS57-6\",\n \"model\": \"ME Pro\"\n },\n {\n \"regex\": \"GS55-6\",\n \"model\": \"ME\"\n },\n {\n \"regex\": \"GS53-6\",\n \"model\": \"ME Pure\"\n },\n {\n \"regex\": \"Gigaset ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Gigaset ([^;/)]+)(?:[);/]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ginzzu\": {\n \"regex\": \"GINZZU[_ ]|((?:RS(?:7[14]|81|9[67])D)|S5002|(?<!Wave Pro )S5021|S5230|S50[45]0|S5120|RS(6[12]|9[45])D|S40[23]0|RS850[12]|RS9602)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GINZZU[_ ]?(S40[17]0|S4710|ST60[14]0|ST6120)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"GINZZU[_ ]?(GT-(?:1050|7105|70[1-4]0|7115|7210|[WX]831|X[78]70|7810|8[01]10|X853))\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(RS6[12]D) ULTIMATE\",\n \"model\": \"$1 Ultimate\"\n },\n {\n \"regex\": \"(?:GINZZU[ _])?((?:RS(?:7[14]|81|9[4-7])D)|S50[45]0|S5002|S5021|S5230|S5120|S40[23]0|RS850[12]|RS9602|RS94D)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Gionee\": {\n \"regex\": \"(?:GIO-)?GIONEE[ _-]?[a-z0-9]+|(?:Dream_D1|V188S?|GN[0-9]{3,4}[a-z]?)(?:[);/ ]|$)|F103(?: Pro)?(?: Build|\\\\))|P5 mini Build|P7 Max Build|(M7 Power|F106L|F100A|F103S|F103 Pro)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GN810(?:[);/ ]|$)\",\n \"model\": \"GN810\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"GN([0-9]{3,4}[a-z]?)(?:[);/ ]|$)\",\n \"model\": \"GN$1\"\n },\n {\n \"regex\": \"(F106L|F100A|V188S|V188|F103S)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"M7 Power(?:[);/ ]|$)\",\n \"model\": \"M7 Power\"\n },\n {\n \"regex\": \"P5 mini Build\",\n \"model\": \"P5 mini\"\n },\n {\n \"regex\": \"P7 Max Build\",\n \"model\": \"P7 Max\"\n },\n {\n \"regex\": \"(S11) Lite(?:[);/ ]|$)\",\n \"model\": \"$1 Lite\"\n },\n {\n \"regex\": \"F103( Pro)?( BUILD|\\\\))\",\n \"model\": \"F103$1\"\n },\n {\n \"regex\": \"(?:(?:GIO-)?GIONEE[ _-])?Dream_D1(?:[);/ ]|$)\",\n \"model\": \"Dream D1\"\n },\n {\n \"regex\": \"(?:GIO-)?GIONEE[ _-]([a-z0-9_-]+).*Android\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Android.*(?:GIO-)?GIONEE[ _-]([a-z0-9_-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:GIO-)?GIONEE[ _-]?([a-z0-9]+)\",\n \"model\": \"$1\",\n \"device\": \"feature phone\"\n }\n ]\n },\n \"Grape\": {\n \"regex\": \"(?:Grape[ _])?GTM-5([^;/]+) Build\",\n \"device\": \"smartphone\",\n \"model\": \"GTM-5$1\"\n },\n \"Vizio\": {\n \"regex\": \"Vizio|VAP430|VTAB1008\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"VAP430\",\n \"model\": \"VAP430\"\n },\n {\n \"regex\": \"VTAB1008\",\n \"device\": \"tablet\",\n \"model\": \"VTAB1008\"\n }\n ]\n },\n \"GOCLEVER\": {\n \"regex\": \"GOCLEVER|QUANTUM_[0-9]{3}|QUANTUM [0-9]{1}|QUANTUM 700N|Quantum2 500|QUANTUM_(1010N|1010M|900)|ARIES|INSIGNIA|ORION_|ELIPSO|LIBRA[ _]97\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"QUANTUM_(1010N|1010M|900)\",\n \"model\": \"QUANTUM $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"INSIGNIA_(785_PRO|1010M|800M)\",\n \"model\": \"INSIGNIA $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(ORION|ARIES|ELIPSO)[_ ](71|101|102)\",\n \"model\": \"$1 $2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TQ700N\",\n \"model\": \"QUANTUM 700N\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Quantum2 500\",\n \"model\": \"Quantum 2 500\"\n },\n {\n \"regex\": \"((?:QUANTUM|ARIES|INSIGNIA|ORION|ELIPSO)[ _-]?[^;/]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"GOCLEVER[ _-]TAB[ _-]?([^;/]+) Build\",\n \"model\": \"TAB $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"GOCLEVER[ _-]?([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TAB ([^;/)]+) Build/GOCLEVER\",\n \"model\": \"TAB $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"([^;/)]+) Build/GOCLEVER\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"GOCLEVER[ _-]?TAB[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"TAB $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"GOCLEVER[ _-]?([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LIBRA[ _]97\",\n \"model\": \"Libra 97\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"GoMobile\": {\n \"regex\": \"GO Onyx|GO[0-9]{3,4}\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GO Onyx\",\n \"model\": \"Go Onyx\"\n },\n {\n \"regex\": \"GO([0-9]{3,4})\",\n \"model\": \"Go$1\"\n }\n ]\n },\n \"Gol Mobile\": {\n \"regex\": \"F10_PRIME\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"F10_PRIME\",\n \"model\": \"F10 Prime\"\n }\n ]\n },\n \"Goly\": {\n \"regex\": \"Goly[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Goly[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Goly[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Google\": {\n \"regex\": \"Nexus|GoogleTV|Glass(?<!Browser)|CrKey[^a-z0-9]|Pixel(?: Build|\\\\))|Pixel (?:XL|C|[2-5]|[2-4] XL)|Google 2XL|G011A\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Glass\",\n \"model\": \"Glass\"\n },\n {\n \"regex\": \"Galaxy Nexus\",\n \"model\": \"Galaxy Nexus\"\n },\n {\n \"regex\": \"(Nexus (?:S|4|5X?|One))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Nexus (?:6P?))\",\n \"device\": \"phablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Nexus (?:7|9|10))\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"CrKey[^a-z0-9]\",\n \"model\": \"Chromecast\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"GoogleTV\",\n \"device\": \"tv\",\n \"model\": \"GoogleTV\"\n },\n {\n \"regex\": \"Pixel(?: Build|\\\\))\",\n \"model\": \"Pixel\"\n },\n {\n \"regex\": \"Pixel XL\",\n \"model\": \"Pixel XL\"\n },\n {\n \"regex\": \"Pixel 3 XL\",\n \"model\": \"Pixel 3 XL\"\n },\n {\n \"regex\": \"Pixel 2 XL\",\n \"model\": \"Pixel 2 XL\"\n },\n {\n \"regex\": \"Pixel 3a XL\",\n \"model\": \"Pixel 3a XL\"\n },\n {\n \"regex\": \"Pixel 3a\",\n \"model\": \"Pixel 3a\"\n },\n {\n \"regex\": \"Pixel 4 XL\",\n \"model\": \"Pixel 4 XL\"\n },\n {\n \"regex\": \"Pixel 4a \\\\(5G\\\\)\",\n \"model\": \"Pixel 4a (5G)\"\n },\n {\n \"regex\": \"pixel 4a\",\n \"model\": \"Pixel 4a\"\n },\n {\n \"regex\": \"G011A\",\n \"model\": \"Pixel 2\"\n },\n {\n \"regex\": \"Google 2XL\",\n \"model\": \"Pixel 2 XL\"\n },\n {\n \"regex\": \"pixel ([2-5])\",\n \"model\": \"Pixel $1\"\n },\n {\n \"regex\": \"Pixel C\",\n \"device\": \"tablet\",\n \"model\": \"Pixel C\"\n }\n ]\n },\n \"Gradiente\": {\n \"regex\": \"GRADIENTE\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"GRADIENTE-([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"GRADIENTE ([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Grundig\": {\n \"regex\": \"GR?-TB[0-9]+[a-z]*|GRUNDIG|portalmmm/2\\\\.0 G|AFTEU(?:011|014|FF014)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(GR?-TB[0-9]+[a-z]*)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"GRUNDIG ([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/2\\\\.0 G([a-z0-9]+)\",\n \"model\": \"G$1\"\n },\n {\n \"regex\": \"AFTEU014\",\n \"model\": \"Vision 7 4K (2019)\"\n },\n {\n \"regex\": \"AFTEUFF014\",\n \"model\": \"OLED 4K (2019)\"\n },\n {\n \"regex\": \"AFTEU011\",\n \"model\": \"Vision 6 HD (2019)\"\n }\n ]\n },\n \"Hafury\": {\n \"regex\": \"HAFURY\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(MIX|UMAX)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Haier\": {\n \"regex\": \"Haier|I6_Infinity|Titan[ _]T[135]|(?:HW-)?W(?:71[67]|757|860|970)(?:[);/ ]|$)|S5 Silk|(?:HM-)?(N505|N700|G(?:152|303|353|552|70[01])?-FL|HM-N501-FL|G(?:303)?-W|I(?:557)?-FL)|(?:PAD[ _](?:D71|G781|d85))|A2_Lite_NFC\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"A2_Lite_NFC\",\n \"model\": \"Alpha A2 Lite NFC\"\n },\n {\n \"regex\": \"HM-N505-FL\",\n \"model\": \"I8\"\n },\n {\n \"regex\": \"S5 Silk\",\n \"model\": \"S5 Silk\"\n },\n {\n \"regex\": \"HM-N700-FL\",\n \"model\": \"L7\"\n },\n {\n \"regex\": \"HM-N501-FL\",\n \"model\": \"L56\"\n },\n {\n \"regex\": \"(?:HM-)?(G(?:152|353|552|70[01])|G(?:303)|I(?:557))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Titan[_ ]T[135]|I6_Infinity)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:HW-)?W(71[67]|757|860|970)(?:[);/ ]|$)\",\n \"model\": \"W$1\"\n },\n {\n \"regex\": \"PAD[ -_](D71|G781|d85)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Haier[ _\\\\-](H[WT]-[^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Haier[ _\\\\-](H[WT]-[a-z0-9_\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Haier[ _\\\\-](sy[0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Haier[ _\\\\-]([a-z0-9\\\\-]+)\",\n \"model\": \"$1\",\n \"device\": \"feature phone\"\n }\n ]\n },\n \"HannSpree\": {\n \"regex\": \"(HSG[0-9]{4})|SN97T41W|SN1AT71W\\\\(B\\\\)|SN70T51A|SN70T31?|T7-QC\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(HSG[0-9]{4})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SN1AT71W\\\\(B\\\\)\",\n \"model\": \"SN1AT71W(B)\"\n },\n {\n \"regex\": \"SN70T31\",\n \"model\": \"SN70T31\"\n },\n {\n \"regex\": \"SN70T3\",\n \"model\": \"SN70T3\"\n },\n {\n \"regex\": \"SN70T51A\",\n \"model\": \"SN70T51A\"\n },\n {\n \"regex\": \"SN97T41W\",\n \"model\": \"SN97T41W\"\n },\n {\n \"regex\": \"T7-QC\",\n \"model\": \"SNAT71BUE\"\n }\n ]\n },\n \"Hasee\": {\n \"regex\": \"Hasee\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Hasee ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Hasee ([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Hisense\": {\n \"regex\": \"(?:HS-)?Hisense ([^;/]+) Build|Hisense [^);/]+|HISENSE; |HS-(?:G|U|EG?|I|L|T|X)[0-9]+[a-z0-9\\\\-]*|E270BSA|HWCD100E|HITV300C|M470BS[AE]|EG98|E2281|EG680|I46D1G|HAT4KDTV|HLTE([237]00T|200M|203T|202N|21[023567]T|22[67]T|22[13]E|230E|310[TM]|31[16]T|500T|501N|510[TM]|7[23]0T)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"E270BSA\",\n \"device\": \"tablet\",\n \"model\": \"Sero 7\"\n },\n {\n \"regex\": \"M470BS[AE]\",\n \"device\": \"tablet\",\n \"model\": \"Sero 7 Pro\"\n },\n {\n \"regex\": \"E2281\",\n \"device\": \"tablet\",\n \"model\": \"Sero 8\"\n },\n {\n \"regex\": \"HLTE202N\",\n \"model\": \"A5\"\n },\n {\n \"regex\": \"HLTE203T\",\n \"model\": \"A5 Pro CC\"\n },\n {\n \"regex\": \"HLTE700T\",\n \"model\": \"A6\"\n },\n {\n \"regex\": \"HLTE730T\",\n \"model\": \"A6L\"\n },\n {\n \"regex\": \"HLTE221E\",\n \"model\": \"E Max\"\n },\n {\n \"regex\": \"HLTE501N\",\n \"model\": \"V Plus\"\n },\n {\n \"regex\": \"HLTE223E\",\n \"model\": \"H30\"\n },\n {\n \"regex\": \"I46D1G\",\n \"model\": \"Smartfren Andromax R\"\n },\n {\n \"regex\": \"EG680\",\n \"model\": \"Smartfren Andromax Z\"\n },\n {\n \"regex\": \"EG98\",\n \"model\": \"Smartfren Andromax U2\"\n },\n {\n \"regex\": \"HLTE200T(?:[);/ ]|$)\",\n \"model\": \"F26\"\n },\n {\n \"regex\": \"HLTE210T(?:[);/ ]|$)\",\n \"model\": \"F28\"\n },\n {\n \"regex\": \"HLTE215T(?:[);/ ]|$)\",\n \"model\": \"F29\"\n },\n {\n \"regex\": \"HLTE213T(?:[);/ ]|$)\",\n \"model\": \"King Kong 4\"\n },\n {\n \"regex\": \"HLTE311T(?:[);/ ]|$)\",\n \"model\": \"King Kong 4 Pro\"\n },\n {\n \"regex\": \"HLTE216T(?:[);/ ]|$)\",\n \"model\": \"King Kong 5\"\n },\n {\n \"regex\": \"HLTE316T(?:[);/ ]|$)\",\n \"model\": \"King Kong 5 Pro\"\n },\n {\n \"regex\": \"HLTE226T(?:[);/ ]|$)\",\n \"model\": \"King Kong 6\"\n },\n {\n \"regex\": \"HLTE217T(?:[);/ ]|$)\",\n \"model\": \"F30S\"\n },\n {\n \"regex\": \"HLTE227T(?:[);/ ]|$)\",\n \"model\": \"F40\"\n },\n {\n \"regex\": \"HLTE310[TM](?:[);/ ]|$)\",\n \"model\": \"H18\"\n },\n {\n \"regex\": \"HLTE510[TM](?:[);/ ]|$)\",\n \"model\": \"H20\"\n },\n {\n \"regex\": \"HLTE500T(?:[);/ ]|$)\",\n \"model\": \"H11\"\n },\n {\n \"regex\": \"HLTE230E(?:[);/ ]|$)\",\n \"model\": \"H40 Lite\"\n },\n {\n \"regex\": \"HLTE720T(?:[);/ ]|$)\",\n \"model\": \"U30\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"HWCD100E(?:[);/ ]|$)\",\n \"model\": \"U40 Lite\"\n },\n {\n \"regex\": \"(HLTE300T|HLTE200M|HLTE212T)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HITV300C(?:[);/ ]|$)\",\n \"model\": \"E9\"\n },\n {\n \"regex\": \"E260T\\\\+(?:[);/ ]|$)\",\n \"model\": \"Nana\"\n },\n {\n \"regex\": \"(HS-(?:G|U|EG?|I|L|T|X)[0-9]+[a-z0-9\\\\-]*)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(HAT4KDTV)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:HS-)?Hisense ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Hisense ([^);/]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Hi-Level\": {\n \"regex\": \"HLV-T([a-z0-9]+)\",\n \"device\": \"tablet\",\n \"model\": \"HLV-T$1\"\n },\n \"Hoffmann\": {\n \"regex\": \"(HOFFMANN|Neo[_ ]A[1379]00)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Neo[_ ](A[1379]00)\",\n \"model\": \"Neo $1\"\n },\n {\n \"regex\": \"HOFFMANN[ _]X[-_ ](Prime|Twist|Max)\",\n \"model\": \"X $1\"\n }\n ]\n },\n \"Homtom\": {\n \"regex\": \"Homtom|(?:HT[0-9]{1,2})(?: ?Pro)?(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Homtom[_ ])?HT ?([0-9]{1,2}(?: ?Pro)?)(?:[);/ ]|$)\",\n \"model\": \"HT$1\"\n },\n {\n \"regex\": \"Homtom ([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Hosin\": {\n \"regex\": \"HOSIN[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"HOSIN[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HOSIN[ _-]([^;/]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Hoozo\": {\n \"regex\": \"(?:HOOZO[_ ](MT232|MT116|MT Pad 116 LTE|X1001)|HZ0010)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"HOOZO[_ ](MT232|MT116|MT Pad 116 LTE|X1001)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(HZ0010)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Minix\": {\n \"regex\": \"NEO-(?:X8-H|U9-H|X[57]-mini|X8H-PLUS|X88-?I|X7-216A|X5-116A|X[68]|U1|Z64)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"NEO-X8-H(?:[);/ ]|$)\",\n \"model\": \"NEO X8H\"\n },\n {\n \"regex\": \"NEO-X([57])-mini(?:[);/ ]|$)\",\n \"model\": \"NEO X$1 Mini\"\n },\n {\n \"regex\": \"NEO-X8H-PLUS(?:[);/ ]|$)\",\n \"model\": \"NEO X8H Plus\"\n },\n {\n \"regex\": \"NEO-X88-?I(?:[);/ ]|$)\",\n \"model\": \"NEO X88i\"\n },\n {\n \"regex\": \"NEO-X7-216A(?:[);/ ]|$)\",\n \"model\": \"NEO X7\"\n },\n {\n \"regex\": \"NEO-X5-116A(?:[);/ ]|$)\",\n \"model\": \"NEO X5\"\n },\n {\n \"regex\": \"NEO-X([68])(?:[);/ ]|$)\",\n \"model\": \"NEO X$1\"\n },\n {\n \"regex\": \"NEO-U1(?:[);/ ]|$)\",\n \"model\": \"NEO U1\"\n },\n {\n \"regex\": \"NEO-Z64(?:[);/ ]|$)\",\n \"model\": \"NEO Z64\"\n },\n {\n \"regex\": \"NEO-U9-H(?:[);/ ]|$)\",\n \"model\": \"NEO U9H\"\n }\n ]\n },\n \"Huawei\": {\n \"regex\": \"(HW-)?(?:Huawei|MediaPad T1|Ideos|Honor[ _]?|(?:(?:AGS|AGS2|ALE|ALP|AMN|ANA|ANE|ARE|ARS|ASK|ATH|ATU|AUM|BAC|BAH[23]?|BG2|BGO|B[ZK]K|BKL|BL[ALN]|BND|BTV|CA[GMNZ]|CH[CM]|CHE[12]?|CLT|CMR|COL|COR|CPN|CRO|CRR|CUN|DIG|DLI|DRA|DUA|DUB|DUK|EDI|ELE|EML|EVA|EVR|FDR|FIG|FLA|FRD|FRL|GEM|GRA|HDN|HLK|HMA|Hol|HRY|HWI|H[36]0|INE|JAT|JEF|JDN|JDN2|JKM|JMM|JSN|KII|KIW|KNT|KOB|KSA|LDN|LEO|LIO|LLD|LND|LON|LRA|LUA|LY[AO]|MAR|MHA|MRD|MYA|NCE|NEM|NEO|NXT|PAR|PCT|PIC|PLE|PLK|POT|PPA|PRA|RIO|RNE|RVL|SCC|SCL|SCM|SEA|SHT|SLA|SNE|SPN|STF|STK|TAG|TIT|TNY|TRT|VCE|VEN|VIE|VKY|VNS|VOG|VRD|VTR|WAS|YAL|G(?:527|620S|621|630|735)|Y(?:221|330|550|6[23]5))-(?:[A-Z]{0,2}[0-9]{1,4}[A-Z]{0,3}?)|H1711|U(?:8230|8500|8661|8665|8667|8800|8818|8860|9200|9508))(?:[);/ ]|$))|hi6210sft|PE-(UL00|TL[12]0|TL00M)|T1-(A21[Lw]|A23L|701u|823L)|G7-(?:L01|TL00)|HW-01K|JNY-(LX[12]|AL10)|OXF-AN[01]0|TAS-(A[LN]00|L29|TL00)|WLZ-(AL10|AN00)|NIC-LX1A|MRX-(AL09|W09)|CDY-(?:[AT]N00|AN90|NX9A)|GLK-(?:[AT]L00|LX1U)|JER-[AT]N10|ELS-(?:[AT]N[10]0|NX9|N39|N04)|AKA-(AL10|L29)|MON-(W|AL)19|BMH-AN[12]0|AQM-([AT]L[01]0|LX1)|MOA-(AL[02]0|LX9N)|NTS-AL00|ART-(?:[AT]L00[xm]|L29N?|L28)|MED-(?:[AT]L00|LX9N?)|EBG-(?:AN[01]0|TN00)|ANA-(?:[AT]N00|NX9)|BZ[AK]-W00|BZT-(W09|AL[01]0)|HDL-(AL09|W09)|HWV3[123]|HW-02L|TEL-[AT]N(?:00a?|10)|KKG-AN00|MXW-AN00|JKM-AL00[ab]|TAH-(?:N29|AN00)m|C8817D|T1-821W|d-01[JK]|d-02[HK]|KRJ-W09|HWT31|Y320-U10|Y541-U02|VAT-L19|70[14]HW|60[58]HW|NOH-(?:NX9|AN00)|TNNH-AN00|LIO-(?:[TA]L00|[LN]29|AN00)|KOB2-[LW]09|AGS3-[WL]09|DNN-LX9|NEY-NX9|LON-AL00|HLK-L41|503HW|AGR-[LW]09|PPA-LX[12]|ANG-AN00|NOP-AN00\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"POT-[TA]L00a(?:[);/ ]|$)\",\n \"model\": \"9S\"\n },\n {\n \"regex\": \"U9500(?:[);/ ]|$)\",\n \"model\": \"Ascend D1\"\n },\n {\n \"regex\": \"Z100-UL00(?:[);/ ]|$)\",\n \"model\": \"Ascend D3\"\n },\n {\n \"regex\": \"Y320-(?:U10|T00|U05)(?:[);/ ]|$)\",\n \"model\": \"Ascend Y320\"\n },\n {\n \"regex\": \"Y330-U05(?:[);/ ]|$)\",\n \"model\": \"Ascend Y330\"\n },\n {\n \"regex\": \"Y541-U02(?:[);/ ]|$)\",\n \"model\": \"Ascend Y5C\"\n },\n {\n \"regex\": \"U8818(?:[);/ ]|$)\",\n \"model\": \"Ascend G300\"\n },\n {\n \"regex\": \"G527-U081(?:[);/ ]|$)\",\n \"model\": \"Ascend G527\"\n },\n {\n \"regex\": \"(G620S-L0[13]|C8817D)(?:[);/ ]|$)\",\n \"model\": \"Ascend G620S\"\n },\n {\n \"regex\": \"G630-U251(?:[);/ ]|$)\",\n \"model\": \"Ascend G630\"\n },\n {\n \"regex\": \"G7-(?:L01|TL00)(?:[);/ ]|$)\",\n \"model\": \"Ascend G7\"\n },\n {\n \"regex\": \"P7-L10(?:[);/ ]|$)\",\n \"model\": \"Ascend P7\"\n },\n {\n \"regex\": \"G730-C00(?:[);/ ]|$)\",\n \"model\": \"Ascend G730\"\n },\n {\n \"regex\": \"U9200(?:[);/ ]|$)\",\n \"model\": \"Ascend P1\"\n },\n {\n \"regex\": \"H1711(?:[);/ ]|$)\",\n \"model\": \"Ascend XT2\"\n },\n {\n \"regex\": \"Y221-U(?:[12]2|[0345]3)(?:[);/ ]|$)\",\n \"model\": \"Ascend Y221\"\n },\n {\n \"regex\": \"Y550-L03(?:[);/ ]|$)\",\n \"model\": \"Ascend Y550\"\n },\n {\n \"regex\": \"ART-[AT]L00[xm](?:[);/ ]|$)\",\n \"model\": \"Enjoy 10\"\n },\n {\n \"regex\": \"STK-[AT]L00(?:[);/ ]|$)\",\n \"model\": \"Enjoy 10 Plus\"\n },\n {\n \"regex\": \"MED-[AT]L00(?:[);/ ]|$)\",\n \"model\": \"Enjoy 10E\"\n },\n {\n \"regex\": \"AQM-[AT]L00(?:[);/ ]|$)\",\n \"model\": \"Enjoy 10S\"\n },\n {\n \"regex\": \"TAG-[ACT]L00(?:[);/ ]|$)\",\n \"model\": \"Enjoy 5S\"\n },\n {\n \"regex\": \"NCE-(AL[10]0|TL10)(?:[);/ ]|$)\",\n \"model\": \"Enjoy 6\"\n },\n {\n \"regex\": \"DIG-(?:TL10|AL00)(?:[);/ ]|$)\",\n \"model\": \"Enjoy 6S\"\n },\n {\n \"regex\": \"SLA-(?:AL00|TL10)(?:[);/ ]|$)\",\n \"model\": \"Enjoy 7\"\n },\n {\n \"regex\": \"FIG-(?:[AT]L[10]0)(?:[);/ ]|$)\",\n \"model\": \"Enjoy 7S\"\n },\n {\n \"regex\": \"(?:TRT-AL00[A]?|TRT-TL10A)(?:[);/ ]|$)\",\n \"model\": \"Enjoy 7 Plus\"\n },\n {\n \"regex\": \"LDN-(?:AL[12]0|TL[02]0)(?:[);/ ]|$)\",\n \"model\": \"Enjoy 8\"\n },\n {\n \"regex\": \"FLA-AL10(?:[);/ ]|$)\",\n \"model\": \"Enjoy 8 Plus\"\n },\n {\n \"regex\": \"ATU-[AT]L10(?:[);/ ]|$)\",\n \"model\": \"Enjoy 8e\"\n },\n {\n \"regex\": \"MRD-[TA]L00(?:[);/ ]|$)\",\n \"model\": \"Enjoy 9e\"\n },\n {\n \"regex\": \"DVC-TN20(?:[);/ ]|$)\",\n \"model\": \"Enjoy 20 Pro\"\n },\n {\n \"regex\": \"U8665(?:[);/ ]|$)\",\n \"model\": \"Fusion 2\"\n },\n {\n \"regex\": \"MED-LX9N?(?:[);/ ]|$)\",\n \"model\": \"Y6p\"\n },\n {\n \"regex\": \"G735-L(?:03|12|23)(?:[);/ ]|$)\",\n \"model\": \"G Play\"\n },\n {\n \"regex\": \"CHC-U(?:0[13]|23)(?:[);/ ]|$)\",\n \"model\": \"G Play Mini\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?G621-TL00M?(?:[);/ ]|$)\",\n \"model\": \"G621\"\n },\n {\n \"regex\": \"DIG-L2[12](?:[);/ ]|$)\",\n \"model\": \"GR3 (2017)\"\n },\n {\n \"regex\": \"KII-L21(?:[);/ ]|$)\",\n \"model\": \"GR5\"\n },\n {\n \"regex\": \"BLL-L2[12](?:[);/ ]|$)\",\n \"model\": \"GR5 (2017)\"\n },\n {\n \"regex\": \"RIO-L03(?:[);/ ]|$)\",\n \"model\": \"GX8\"\n },\n {\n \"regex\": \"U8860(?:[);/ ]|$)\",\n \"model\": \"Honor\"\n },\n {\n \"regex\": \"COL-(?:AL[01]0|TL[01]0|L29)(?:[);/ ]|$)\",\n \"model\": \"Honor 10\"\n },\n {\n \"regex\": \"HRY-(?:[AT]L00[A]?|LX[12]|LX1MEB)(?:[);/ ]|$)\",\n \"model\": \"Honor 10 Lite\"\n },\n {\n \"regex\": \"HRY-LX1T(?:[);/ ]|$)\",\n \"model\": \"Honor 10I\"\n },\n {\n \"regex\": \"U9508(?:[);/ ]|$)\",\n \"model\": \"Honor 2\"\n },\n {\n \"regex\": \"YAL-(?:L21|[AT]L00)(?:[);/ ]|$)\",\n \"model\": \"Honor 20\"\n },\n {\n \"regex\": \"LRA-AL00(?:[);/ ]|$)\",\n \"model\": \"Honor 20 Lite\"\n },\n {\n \"regex\": \"(HRY-AL00T[a]?)(?:[);/ ]|$)\",\n \"model\": \"Honor 20I\"\n },\n {\n \"regex\": \"YAL-(L41|AL10)(?:[);/ ]|$)\",\n \"model\": \"Honor 20 Pro\"\n },\n {\n \"regex\": \"(MAR-LX1H|YAL-AL50)(?:[);/ ]|$)\",\n \"model\": \"Honor 20S\"\n },\n {\n \"regex\": \"(?:BMH-AN[12]0|MXW-AN00)(?:[);/ ]|$)\",\n \"model\": \"Honor 30\"\n },\n {\n \"regex\": \"EBG-[AT]N00(?:[);/ ]|$)\",\n \"model\": \"Honor 30 Pro\"\n },\n {\n \"regex\": \"EBG-AN10(?:[);/ ]|$)\",\n \"model\": \"Honor 30 Pro Plus\"\n },\n {\n \"regex\": \"CDY-(?:AN90|NX9A)(?:[);/ ]|$)\",\n \"model\": \"Honor 30S\"\n },\n {\n \"regex\": \"LRA-LX1(?:[);/ ]|$)\",\n \"model\": \"Honor 30I\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?H30-(?:C00|L01M?|L02|U10|T00|T10)(?:_TD)?(?:[);/ ]|$)\",\n \"model\": \"Honor 3C\"\n },\n {\n \"regex\": \"Hol-U19(?:[);/ ]|$)\",\n \"model\": \"Honor 3C Lite\"\n },\n {\n \"regex\": \"G750-T01(?:[);/ ]|$)\",\n \"model\": \"Honor 3X\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?SCL-(?:AL00|CL00|TL00H?)(?:_TD)?(?:[);/ ]|$)\",\n \"model\": \"Honor 4A\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?CHM-U01(?:_TD)?(?:[);/ ]|$)\",\n \"model\": \"Honor 4C\"\n },\n {\n \"regex\": \"Honor 4c Pro(?:[);/ ]|$)\",\n \"model\": \"Honor 4C Pro\"\n },\n {\n \"regex\": \"AQM-AL10(?:[);/ ]|$)\",\n \"model\": \"Honor 4T Pro\"\n },\n {\n \"regex\": \"(CHE2?-[UT]L00[HM]?|CHE1-CL[12]0|CHE2-L(?:1[12]|23)|Che1-L04|CHE-TL00)(?:[);/ ]|$)\",\n \"model\": \"Honor 4X\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?CUN-[AT]L00(?:[);/ ]|$)\",\n \"model\": \"Honor 5 Play\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?CAM-(?:AL00|TL00H|TL00)(?:_TD)?(?:[);/ ]|$)\",\n \"model\": \"Honor 5A\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?NEM-(?:AL10|L51|UL10|TL00)(?:[);/ ]|$)\",\n \"model\": \"Honor 5C\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?NEM-(?:L22|TL00H)(?:[);/ ]|$)\",\n \"model\": \"Honor 5C Dual SIM\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?KIW-(?:AL10|TL00H|[TC]L00|L2[1-4]|UL00)(?:_TD)?(?:[);/ ]|$)\",\n \"model\": \"Honor 5X\"\n },\n {\n \"regex\": \"((?:Honor_|HW-)?H60-L(?:01|02|03|04|11|12)(?:_TD)?|HW-H60-J1)(?:[);/ ]|$)\",\n \"model\": \"Honor 6\"\n },\n {\n \"regex\": \"MYA-TL10(?:[);/ ]|$)\",\n \"model\": \"Honor 6 Play\"\n },\n {\n \"regex\": \"PE-(UL00|TL[12]0|TL00M)(?:[);/ ]|$)\",\n \"model\": \"Honor 6 Plus\"\n },\n {\n \"regex\": \"(?:HONOR[ _]?)?DLI-(?:AL10|L[24]2|TL20)(?:[);/ ]|$)\",\n \"model\": \"Honor 6A\"\n },\n {\n \"regex\": \"DIG-L21HN(?:[);/ ]|$)\",\n \"model\": \"Honor 6C\"\n },\n {\n \"regex\": \"JMM-L22(?:[);/ ]|$)\",\n \"model\": \"Honor 6C Pro\"\n },\n {\n \"regex\": \"(?:HONOR[ _]?)?BLN-(?:L2[124]|AL[1234]0|TL[01]0(?:[);/ ]|$))\",\n \"model\": \"Honor 6X\"\n },\n {\n \"regex\": \"(?:Honor[_]?|HW-)?PLK-(?:AL10|CL00|TL00|TL01H?|UL00|L01)(?:[);/ ]|$)\",\n \"model\": \"Honor 7\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?NEM-L21(?:[);/ ]|$)\",\n \"model\": \"Honor 7 Lite\"\n },\n {\n \"regex\": \"AUM-(?:AL[20]0|L33[A]?|TL20)(?:[);/ ]|$)\",\n \"model\": \"Honor 7A\"\n },\n {\n \"regex\": \"AUM-L29(?:[);/ ]|$)\",\n \"model\": \"Honor 7A Pro\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?(?:LND-(?:AL[34]0|L29|TL40)|AUM-L41)(?:[);/ ]|$)\",\n \"model\": \"Honor 7C\"\n },\n {\n \"regex\": \"ATH-(?:[CAU]L00|TL00H)(?:[);/ ]|$)\",\n \"model\": \"Honor 7i\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?DUA-(?:L22|LX3)(?:[);/ ]|$)\",\n \"model\": \"Honor 7S\"\n },\n {\n \"regex\": \"(?:HONOR[ _]?)?BND-(?:AL[01]0|TL10|L2[14]|L31)(?:[);/ ]|$)\",\n \"model\": \"Honor 7X\"\n },\n {\n \"regex\": \"(?:FRD-(?:AL[01]0|L0[249]|L1[49]|DL00)|VAT-L19)(?:[);/ ]|$)\",\n \"model\": \"Honor 8\"\n },\n {\n \"regex\": \"PRA-(?:AL00X|AL00|TL10)(?:[);/ ]|$)\",\n \"model\": \"Honor 8 Lite\"\n },\n {\n \"regex\": \"DUK-(?:L09|TL30)(?:[);/ ]|$)\",\n \"model\": \"Honor 8 Pro\"\n },\n {\n \"regex\": \"VEN-L22(?:[);/ ]|$)\",\n \"model\": \"Honor 8 Smart\"\n },\n {\n \"regex\": \"JAT-L(29|X[13])(?:[);/ ]|$)\",\n \"model\": \"Honor 8A\"\n },\n {\n \"regex\": \"JAT-L41(?:[);/ ]|$)\",\n \"model\": \"Honor 8A Pro\"\n },\n {\n \"regex\": \"BKK-(?:AL[10]0|L21|L22|LX2|TL00)(?:[);/ ]|$)\",\n \"model\": \"Honor 8C\"\n },\n {\n \"regex\": \"KSA-(LX[239]|AL00)(?:[);/ ]|$)\",\n \"model\": \"Honor 8S\"\n },\n {\n \"regex\": \"JSN-L(?:2[123]|42)|JSN-[TA]L00[a]?(?:[);/ ]|$)\",\n \"model\": \"Honor 8X\"\n },\n {\n \"regex\": \"ARE-(?:AL[10]0|L22(?:HN)?|TL00)(?:[);/ ]|$)\",\n \"model\": \"Honor 8X Max\"\n },\n {\n \"regex\": \"STF-(?:AL[10]0|L09S?|TL10)(?:[);/ ]|$)\",\n \"model\": \"Honor 9\"\n },\n {\n \"regex\": \"MOA-LX9N(?:[);/ ]|$)\",\n \"model\": \"Honor 9A\"\n },\n {\n \"regex\": \"AKA-L29(?:[);/ ]|$)\",\n \"model\": \"Honor 9C\"\n },\n {\n \"regex\": \"LLD-(?:AL[01]0|L[23]1|TL10)(?:[);/ ]|$)\",\n \"model\": \"Honor 9 Lite\"\n },\n {\n \"regex\": \"LLD-AL[23]0(?:[);/ ]|$)\",\n \"model\": \"Honor 9i\"\n },\n {\n \"regex\": \"DUA-LX9(?:[);/ ]|$)\",\n \"model\": \"Honor 9S\"\n },\n {\n \"regex\": \"HLK-AL00a?(?:[);/ ]|$)\",\n \"model\": \"Honor 9X\"\n },\n {\n \"regex\": \"HLK-(?:AL10|L4[12])(?:[);/ ]|$)\",\n \"model\": \"Honor 9X Pro\"\n },\n {\n \"regex\": \"CAM-UL00(?:[);/ ]|$)\",\n \"model\": \"Honor Holly 3\"\n },\n {\n \"regex\": \"NTS-AL00(?:[);/ ]|$)\",\n \"model\": \"Honor Magic\"\n },\n {\n \"regex\": \"TNY-[AT]L00(?:[);/ ]|$)\",\n \"model\": \"Honor Magic 2\"\n },\n {\n \"regex\": \"RVL-AL09(?:[);/ ]|$)\",\n \"model\": \"Honor Note 10\"\n },\n {\n \"regex\": \"EDI-AL10(?:[);/ ]|$)\",\n \"model\": \"Honor Note 8\"\n },\n {\n \"regex\": \"VKY-TL00(?:[);/ ]|$)\",\n \"model\": \"Honor P10 Plus\"\n },\n {\n \"regex\": \"VOG-AL00(?:[);/ ]|$)\",\n \"model\": \"Honor P30 Pro\"\n },\n {\n \"regex\": \"ANA-(?:[AT]N00|NX9)(?:[);/ ]|$)\",\n \"model\": \"Honor P40\"\n },\n {\n \"regex\": \"COR-(?:AL[01]0|L29|TL10)(?:[);/ ]|$)\",\n \"model\": \"Honor Play\"\n },\n {\n \"regex\": \"ASK-AL00x(?:[);/ ]|$)\",\n \"model\": \"Honor Play 3\"\n },\n {\n \"regex\": \"KSA-AL10(?:[);/ ]|$)\",\n \"model\": \"Honor Play 3E\"\n },\n {\n \"regex\": \"TNNH-AN00(?:[);/ ]|$)\",\n \"model\": \"Honor Play 4\"\n },\n {\n \"regex\": \"CHM-[CUT]L00[HM]?(?:[);/ ]|$)\",\n \"model\": \"Honor Play 4C\"\n },\n {\n \"regex\": \"AKA-AL10(?:[);/ ]|$)\",\n \"model\": \"Honor Play 4T\"\n },\n {\n \"regex\": \"DUA-[TA]L00(?:[);/ ]|$)\",\n \"model\": \"Honor Play 7\"\n },\n {\n \"regex\": \"JAT-[AT]L00(?:[);/ ]|$)\",\n \"model\": \"Honor Play 8A\"\n },\n {\n \"regex\": \"MOA-AL[02]0(?:[);/ ]|$)\",\n \"model\": \"Honor Play 9A\"\n },\n {\n \"regex\": \"BKL-(?:AL00|AL20|AL30|L09|TL10)(?:[);/ ]|$)\",\n \"model\": \"Honor V10\"\n },\n {\n \"regex\": \"PCT-[TA]L10(?:[);/ ]|$)\",\n \"model\": \"Honor V20\"\n },\n {\n \"regex\": \"KNT-(?:AL[12]0|[TU]L10)(?:[);/ ]|$)\",\n \"model\": \"Honor V8\"\n },\n {\n \"regex\": \"DUK-AL20(?:[);/ ]|$)\",\n \"model\": \"Honor V9\"\n },\n {\n \"regex\": \"JMM-[AT]L[01]0(?:[);/ ]|$)\",\n \"model\": \"Honor V9 Play\"\n },\n {\n \"regex\": \"BKL-L04(?:[);/ ]|$)\",\n \"model\": \"Honor View 10\"\n },\n {\n \"regex\": \"PCT-L29(?:[);/ ]|$)\",\n \"model\": \"Honor View 20\"\n },\n {\n \"regex\": \"OXF-AN00(?:[);/ ]|$)\",\n \"model\": \"Honor View 30\"\n },\n {\n \"regex\": \"OXF-AN10(?:[);/ ]|$)\",\n \"model\": \"Honor View 30 Pro\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?SCL-L(01|32)(?:_TD)?(?:[);/ ]|$)\",\n \"model\": \"Honor Y6\"\n },\n {\n \"regex\": \"(?:Honor_|HW-)?LYO-L21(?:[);/ ]|$)\",\n \"model\": \"Honor Y6 II Compact\"\n },\n {\n \"regex\": \"TEL-(?:AN(?:00a?|10)|TN00)(?:[);/ ]|$)\",\n \"model\": \"Honor X10\"\n },\n {\n \"regex\": \"KKG-AN00(?:[);/ ]|$)\",\n \"model\": \"Honor X10 Max\"\n },\n {\n \"regex\": \"DNN-LX9(?:[);/ ]|$)\",\n \"model\": \"Honor X10 Lite\"\n },\n {\n \"regex\": \"U8500(?:[);/ ]|$)\",\n \"model\": \"Ideos X2\"\n },\n {\n \"regex\": \"U8510(?:[);/ ]|$)\",\n \"model\": \"Ideos X3\"\n },\n {\n \"regex\": \"U8800(?:[);/ ]|$)\",\n \"model\": \"Ideos X5\"\n },\n {\n \"regex\": \"MLA-AL10(?:[);/ ]|$)\",\n \"model\": \"Maimang 5\"\n },\n {\n \"regex\": \"POT-AL10(?:[);/ ]|$)\",\n \"model\": \"Maimang 8\"\n },\n {\n \"regex\": \"TAH-(?:N29|AN00)m(?:[);/ ]|$)\",\n \"model\": \"Mate XS\"\n },\n {\n \"regex\": \"ALP-(?:[TA]L00|L[02]9)(?:[);/ ]|$)\",\n \"model\": \"Mate 10\"\n },\n {\n \"regex\": \"RNE-(?:AL00|L(?:01|03|21|23))(?:[);/ ]|$)\",\n \"model\": \"Mate 10 Lite\"\n },\n {\n \"regex\": \"BLA-(?:A09|L[02]9|[TA]L00)(?:[);/ ]|$)\",\n \"model\": \"Mate 10 Pro\"\n },\n {\n \"regex\": \"HMA-(?:[AT]L00|L[02]9)(?:[);/ ]|$)\",\n \"model\": \"Mate 20\"\n },\n {\n \"regex\": \"SNE-(?:AL00|LX[0-3])(?:[);/ ]|$)\",\n \"model\": \"Mate 20 Lite\"\n },\n {\n \"regex\": \"LYA-(?:AL[01]0|L[02]9|L0C|TL00)(?:[);/ ]|$)\",\n \"model\": \"Mate 20 Pro\"\n },\n {\n \"regex\": \"LYA-AL00P(?:[);/ ]|$)\",\n \"model\": \"Mate 20 RS\"\n },\n {\n \"regex\": \"EVR-(?:[TA]L00|L29|N29|AN00)(?:[);/ ]|$)\",\n \"model\": \"Mate 20 X\"\n },\n {\n \"regex\": \"TAS-([AT]L00|L29)(?:[);/ ]|$)\",\n \"model\": \"Mate 30\"\n },\n {\n \"regex\": \"TAS-AN00(?:[);/ ]|$)\",\n \"model\": \"Mate 30 5G\"\n },\n {\n \"regex\": \"SPN-AL00(?:[);/ ]|$)\",\n \"model\": \"Mate 30 Lite\"\n },\n {\n \"regex\": \"LIO-(?:[TA]L00|L29|AN00)(?:[);/ ]|$)\",\n \"model\": \"Mate 30 Pro\"\n },\n {\n \"regex\": \"LIO-N29(?:[);/ ]|$)\",\n \"model\": \"Mate 30 Pro 5G\"\n },\n {\n \"regex\": \"NOH-(?:NX9|AN00)(?:[);/ ]|$)\",\n \"model\": \"Mate 40 Pro\"\n },\n {\n \"regex\": \"NOP-AN00(?:[);/ ]|$)\",\n \"model\": \"Mate 40 Pro+\"\n },\n {\n \"regex\": \"NXT-(?:AL10|L29)(?:[);/ ]|$)\",\n \"model\": \"Mate 8\"\n },\n {\n \"regex\": \"MHA-(?:L[02]9|[AT]L00)(?:[);/ ]|$)\",\n \"model\": \"Mate 9\"\n },\n {\n \"regex\": \"BLL-L23(?:[);/ ]|$)\",\n \"model\": \"Mate 9 Lite\"\n },\n {\n \"regex\": \"LON-(?:AL00(?:-PD)?|L29)(?:[);/ ]|$)\",\n \"model\": \"Mate 9 Pro\"\n },\n {\n \"regex\": \"NEO-AL00(?:[);/ ]|$)\",\n \"model\": \"Mate RS\"\n },\n {\n \"regex\": \"NEO-L29(?:[);/ ]|$)\",\n \"model\": \"Mate RS Porsche Design\"\n },\n {\n \"regex\": \"CRR-(?:L09|UL00)(?:[);/ ]|$)\",\n \"model\": \"Mate S\"\n },\n {\n \"regex\": \"BND-L34(?:[);/ ]|$)\",\n \"model\": \"Mate SE\"\n },\n {\n \"regex\": \"(CAZ-(?:AL[01]0|TL[12]0)|CAN-L[01][1-3])(?:[);/ ]|$)\",\n \"model\": \"Nova\"\n },\n {\n \"regex\": \"608HW(?:[);/ ]|$)\",\n \"model\": \"Nova Lite\"\n },\n {\n \"regex\": \"(?:PIC-(?:[AT]L00|LX9)|HWV31)(?:[);/ ]|$)\",\n \"model\": \"Nova 2\"\n },\n {\n \"regex\": \"704HW(?:[);/ ]|$)\",\n \"model\": \"Nova 2 Lite\"\n },\n {\n \"regex\": \"BAC-(?:L01|TL00)(?:[);/ ]|$)\",\n \"model\": \"Nova 2 Plus\"\n },\n {\n \"regex\": \"BAC-(?:AL00|L2[12])(?:[);/ ]|$)\",\n \"model\": \"Nova 2 Plus Dual SIM\"\n },\n {\n \"regex\": \"RNE-L[02]2(?:[);/ ]|$)\",\n \"model\": \"Nova 2I\"\n },\n {\n \"regex\": \"HWI-[AT]L00(?:[);/ ]|$)\",\n \"model\": \"Nova 2S\"\n },\n {\n \"regex\": \"PAR-(?:[AT]L00|LX[19]|LX1M|TL20)(?:[);/ ]|$)\",\n \"model\": \"Nova 3\"\n },\n {\n \"regex\": \"ANE-AL00(?:[);/ ]|$)\",\n \"model\": \"Nova 3e\"\n },\n {\n \"regex\": \"INE-(?:AL00|LX[12]r|LX[12]|TL00)(?:[);/ ]|$)\",\n \"model\": \"Nova 3i\"\n },\n {\n \"regex\": \"VCE-(L22|[AT]L00)(?:[);/ ]|$)\",\n \"model\": \"Nova 4\"\n },\n {\n \"regex\": \"MAR-AL00(?:[);/ ]|$)\",\n \"model\": \"Nova 4e\"\n },\n {\n \"regex\": \"SEA-AL00(?:[);/ ]|$)\",\n \"model\": \"Nova 5\"\n },\n {\n \"regex\": \"SEA-AL10(?:[);/ ]|$)\",\n \"model\": \"Nova 5 Pro\"\n },\n {\n \"regex\": \"GLK-(?:[AT]L00|LX1U)(?:[);/ ]|$)\",\n \"model\": \"Nova 5i\"\n },\n {\n \"regex\": \"SPN-TL00(?:[);/ ]|$)\",\n \"model\": \"Nova 5i Pro\"\n },\n {\n \"regex\": \"WLZ-AL10(?:[);/ ]|$)\",\n \"model\": \"Nova 6\"\n },\n {\n \"regex\": \"WLZ-AN00(?:[);/ ]|$)\",\n \"model\": \"Nova 6 5G\"\n },\n {\n \"regex\": \"JNY-AL10(?:[);/ ]|$)\",\n \"model\": \"Nova 6 SE\"\n },\n {\n \"regex\": \"JEF-(?:[AT]N00|AN20|NX9)(?:[);/ ]|$)\",\n \"model\": \"Nova 7 5G\"\n },\n {\n \"regex\": \"JER-[AT]N10(?:[);/ ]|$)\",\n \"model\": \"Nova 7 Pro 5G\"\n },\n {\n \"regex\": \"CDY-(?:[AT]N00|NX9B)(?:[);/ ]|$)\",\n \"model\": \"Nova 7 SE 5G\"\n },\n {\n \"regex\": \"JNY-LX2(?:[);/ ]|$)\",\n \"model\": \"Nova 7i\"\n },\n {\n \"regex\": \"ANG-AN00(?:[);/ ]|$)\",\n \"model\": \"Nova 8 5G\"\n },\n {\n \"regex\": \"DIG-L01(?:[);/ ]|$)\",\n \"model\": \"Nova Smart\"\n },\n {\n \"regex\": \"WAS-AL00(?:[);/ ]|$)\",\n \"model\": \"Nova Youth\"\n },\n {\n \"regex\": \"FIG-L(?:A1|X[123])(?:[);/ ]|$)\",\n \"model\": \"P smart\"\n },\n {\n \"regex\": \"POT-(?:LX(?:[13]|1T|2J|1AF)|AL00)(?:[);/ ]|$)\",\n \"model\": \"P smart (2019)\"\n },\n {\n \"regex\": \"POT-LX1A(?:[);/ ]|$)\",\n \"model\": \"P smart (2020)\"\n },\n {\n \"regex\": \"PPA-LX[12](?:[);/ ]|$)\",\n \"model\": \"P smart (2021)\"\n },\n {\n \"regex\": \"STK-LX1(?:[);/ ]|$)\",\n \"model\": \"P smart Z\"\n },\n {\n \"regex\": \"VTR-(?:L[02]9|AL00|TL00)(?:[);/ ]|$)\",\n \"model\": \"P10\"\n },\n {\n \"regex\": \"WAS-(?:L(?:X1|X1A|X2|X2J|X3|03T)|TL10)(?:[);/ ]|$)\",\n \"model\": \"P10 Lite\"\n },\n {\n \"regex\": \"VKY-(?:AL00|L09|L29)(?:[);/ ]|$)\",\n \"model\": \"P10 Plus\"\n },\n {\n \"regex\": \"BAC-L[02]3(?:[);/ ]|$)\",\n \"model\": \"P10 Selfie\"\n },\n {\n \"regex\": \"EML-(?:[TA]L00|L[02]9)(?:[);/ ]|$)\",\n \"model\": \"P20\"\n },\n {\n \"regex\": \"(?:ANE-(?:LX[123]|LX2J|TL00)|HWV32)(?:[);/ ]|$)\",\n \"model\": \"P20 Lite\"\n },\n {\n \"regex\": \"(?:CLT-(?:AL0[01]|TL0[01]|L(?:04|[02]9))|HW-01K)(?:[);/ ]|$)\",\n \"model\": \"P20 Pro\"\n },\n {\n \"regex\": \"(ELE-L(?:04|09|29)|ELE-[AT]L00)(?:[);/ ]|$)\",\n \"model\": \"P30\"\n },\n {\n \"regex\": \"(?:MAR-(?:LX(?:1[BM]|2J?|3BM)|TL00)|NIC-LX1A|HWV33)(?:[);/ ]|$)\",\n \"model\": \"P30 Lite\"\n },\n {\n \"regex\": \"MAR-LX[13]Am?(?:[);/ ]|$)\",\n \"model\": \"P30 Lite Dual SIM\"\n },\n {\n \"regex\": \"(?:VOG-(?:L(?:04|09|29)|TL00|AL10)|HW-02L)(?:[);/ ]|$)\",\n \"model\": \"P30 Pro\"\n },\n {\n \"regex\": \"ANA-LX4(?:[);/ ]|$)\",\n \"model\": \"P40\"\n },\n {\n \"regex\": \"JNY-LX1(?:[);/ ]|$)\",\n \"model\": \"P40 Lite\"\n },\n {\n \"regex\": \"ART-L29(?:[);/ ]|$)\",\n \"model\": \"P40 Lite E\"\n },\n {\n \"regex\": \"ART-L29N(?:[);/ ]|$)\",\n \"model\": \"P40 Lite E NFC\"\n },\n {\n \"regex\": \"(?:ELS-(?:[AT]N00|NX9|N04)|NEY-NX9)(?:[);/ ]|$)\",\n \"model\": \"P40 Pro\"\n },\n {\n \"regex\": \"ELS-(?:AN10|N39)(?:[);/ ]|$)\",\n \"model\": \"P40 Pro Plus\"\n },\n {\n \"regex\": \"GRA-(?:L09|UL00)(?:[);/ ]|$)\",\n \"model\": \"P8\"\n },\n {\n \"regex\": \"(?:ALE-L(?:02|21|23)|ALE-UL00|ALE-TL00|503HW)(?:[);/ ]|$)\",\n \"model\": \"P8 Lite (2015)\"\n },\n {\n \"regex\": \"(?:PRA-L(?:A1|X2|X1|X3)|hi6210sft)(?:[);/ ]|$)\",\n \"model\": \"P8 Lite (2017)\"\n },\n {\n \"regex\": \"EVA-(?:AL[10]0|L[012]9|[TCD]L00)(?:[);/ ]|$)\",\n \"model\": \"P9\"\n },\n {\n \"regex\": \"VNS-L(?:[23]1|[26]2)(?:[);/ ]|$)\",\n \"model\": \"P9 Lite\"\n },\n {\n \"regex\": \"SLA-L(?:02|03|22|23)(?:[);/ ]|$)\",\n \"model\": \"P9 Lite Mini\"\n },\n {\n \"regex\": \"DIG-L(?:03|23)(?:[);/ ]|$)\",\n \"model\": \"P9 Lite Smart\"\n },\n {\n \"regex\": \"VIE-(?:AL10|L[02]9)(?:[);/ ]|$)\",\n \"model\": \"P9 Plus\"\n },\n {\n \"regex\": \"ATH-UL0[16](?:[);/ ]|$)\",\n \"model\": \"ShotX\"\n },\n {\n \"regex\": \"U(8230|8661|8667)(?:[);/ ]|$)\",\n \"model\": \"U$1\"\n },\n {\n \"regex\": \"ARS-([AT]L00|L22)(?:[);/ ]|$)\",\n \"model\": \"Y Max\"\n },\n {\n \"regex\": \"CRO-(?:L[02]2|U00)(?:[);/ ]|$)\",\n \"model\": \"Y3 (2017)\"\n },\n {\n \"regex\": \"CAG-L[02]2(?:[);/ ]|$)\",\n \"model\": \"Y3 (2018)\"\n },\n {\n \"regex\": \"LUA-(U22|L2[12]|U03)(?:[);/ ]|$)\",\n \"model\": \"Y3II\"\n },\n {\n \"regex\": \"MYA-(?:L(?:02|03|2[23])|U29)(?:[);/ ]|$)\",\n \"model\": \"Y5 (2017)\"\n },\n {\n \"regex\": \"DRA-L(?:01|03|21|23|X3)(?:[);/ ]|$)\",\n \"model\": \"Y5 (2018)\"\n },\n {\n \"regex\": \"AMN-LX[1239](?:[);/ ]|$)\",\n \"model\": \"Y5 (2019)\"\n },\n {\n \"regex\": \"DRA-LX5(?:[);/ ]|$)\",\n \"model\": \"Y5 lite\"\n },\n {\n \"regex\": \"DRA-LX9(?:[);/ ]|$)\",\n \"model\": \"Y5p\"\n },\n {\n \"regex\": \"CRO-L[02]3(?:[);/ ]|$)\",\n \"model\": \"Y5 Lite (2017)\"\n },\n {\n \"regex\": \"CAG-L[02]3(?:[);/ ]|$)\",\n \"model\": \"Y5 Lite (2018)\"\n },\n {\n \"regex\": \"DRA-(?:LX2|[AT]L00)(?:[);/ ]|$)\",\n \"model\": \"Y5 Prime (2018)\"\n },\n {\n \"regex\": \"MYA-L13(?:[);/ ]|$)\",\n \"model\": \"Y5 Pro (2017)\"\n },\n {\n \"regex\": \"CUN-(?:L(?:0[123]|2[123]|33)|U29)(?:[);/ ]|$)\",\n \"model\": \"Y5II\"\n },\n {\n \"regex\": \"(?:SCC-U21|SCL-U31)(?:[);/ ]|$)\",\n \"model\": \"Y6\"\n },\n {\n \"regex\": \"MYA-L11(?:[);/ ]|$)\",\n \"model\": \"Y6 (2016)\"\n },\n {\n \"regex\": \"MYA-(L41|AL10)(?:[);/ ]|$)\",\n \"model\": \"Y6 (2017)\"\n },\n {\n \"regex\": \"ATU-L(?:11|21|22|X3)(?:[);/ ]|$)\",\n \"model\": \"Y6 (2018)\"\n },\n {\n \"regex\": \"MRD-L(?:X1[NF]?|X3)(?:[);/ ]|$)\",\n \"model\": \"Y6 (2019)\"\n },\n {\n \"regex\": \"ATU-L(?:31|42)(?:[);/ ]|$)\",\n \"model\": \"Y6 Prime (2018)\"\n },\n {\n \"regex\": \"TIT-(?:AL00|L01|U02)(?:[);/ ]|$)\",\n \"model\": \"Y6 Pro\"\n },\n {\n \"regex\": \"MRD-LX2(?:[);/ ]|$)\",\n \"model\": \"Y6 Pro (2019)\"\n },\n {\n \"regex\": \"Y625-U03(?:[);/ ]|$)\",\n \"model\": \"Y625\"\n },\n {\n \"regex\": \"Y635-L0[123](?:[);/ ]|$)\",\n \"model\": \"Y635\"\n },\n {\n \"regex\": \"Y635-L21(?:[);/ ]|$)\",\n \"model\": \"Y635 Dual SIM\"\n },\n {\n \"regex\": \"CAM-L(?:03|21|23|32)(?:[);/ ]|$)\",\n \"model\": \"Y6II\"\n },\n {\n \"regex\": \"TRT-LX[123](?:[);/ ]|$)\",\n \"model\": \"Y7 (2017)\"\n },\n {\n \"regex\": \"LDN-L(?:01|X3)(?:[);/ ]|$)\",\n \"model\": \"Y7 (2018)\"\n },\n {\n \"regex\": \"(?:HUAWEI[ _]?)?DUB-(?:LX[13]|TL00)(?:[);/ ]|$)\",\n \"model\": \"Y7 (2019)\"\n },\n {\n \"regex\": \"(LDN-(?:AL00|L21)|TRT-TL10)(?:[);/ ]|$)\",\n \"model\": \"Y7 Prime\"\n },\n {\n \"regex\": \"(LDN-(?:LX2|TL10)|TRT-(?:L21A|L53))(?:[);/ ]|$)\",\n \"model\": \"Y7 Prime (2018)\"\n },\n {\n \"regex\": \"DUB-(?:LX2|AL00)(?:[);/ ]|$)\",\n \"model\": \"Y7 Pro (2019)\"\n },\n {\n \"regex\": \"DUB-AL00a(?:[);/ ]|$)\",\n \"model\": \"Enjoy 9\"\n },\n {\n \"regex\": \"DUB-AL20(?:[);/ ]|$)\",\n \"model\": \"Y7 Pro (2019)\"\n },\n {\n \"regex\": \"PPA-LX3(?:[);/ ]|$)\",\n \"model\": \"Y7a\"\n },\n {\n \"regex\": \"ART-L28(?:[);/ ]|$)\",\n \"model\": \"Y7p\"\n },\n {\n \"regex\": \"AQM-LX1(?:[);/ ]|$)\",\n \"model\": \"Y8p\"\n },\n {\n \"regex\": \"FLA-(LX[123]|AL20|TL10)(?:[);/ ]|$)\",\n \"model\": \"Y9 (2018)\"\n },\n {\n \"regex\": \"JKM-(?:[TA]L00[ab]?|LX[123])(?:[);/ ]|$)\",\n \"model\": \"Y9 (2019)\"\n },\n {\n \"regex\": \"STK-(L2[12]|LX3)(?:[);/ ]|$)\",\n \"model\": \"Y9 Prime (2019)\"\n },\n {\n \"regex\": \"FRL-L2[23](?:[);/ ]|$)\",\n \"model\": \"Y9a\"\n },\n {\n \"regex\": \"HWT31(?:[);/ ]|$)\",\n \"model\": \"Qua Tab 02 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HDN-[LW]09(?:[);/ ]|$)\",\n \"model\": \"Honor Water Play 10.1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BAH3-(?:AL00|[LW]09)(?:[);/ ]|$)\",\n \"model\": \"MatePad 10.4\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"BAH3-W59(?:[);/ ]|$)\",\n \"model\": \"MatePad 10.4\\\" WiFi\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AGS3-[WL]09(?:[);/ ]|$)\",\n \"model\": \"MatePad T10s\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HDL-(?:W09|AL09)(?:[);/ ]|$)\",\n \"model\": \"Honor Water Play 8.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"JDN-(?:AL00|W09)(?:[);/ ]|$)\",\n \"model\": \"Honor Pad 2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"KRJ-W09(?:[);/ ]|$)\",\n \"model\": \"Honor Pad V6\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MON-(W|AL)19(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MatePad C5 8\"\n },\n {\n \"regex\": \"BZA-W00(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"C3 9.6\"\n },\n {\n \"regex\": \"M2-801L(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M2 8.0\\\"\"\n },\n {\n \"regex\": \"MRX-(AL09|W09)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MatePad Pro\"\n },\n {\n \"regex\": \"CMR-(?:AL[01]9|W09)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M5 10.8\"\n },\n {\n \"regex\": \"CMR-W19(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M5 Pro 10.8\"\n },\n {\n \"regex\": \"SCM-AL09(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M5 Pro\"\n },\n {\n \"regex\": \"GEM-70[1-3]L(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad X2\"\n },\n {\n \"regex\": \"(?:JDN2-(:?[WL]09|AL[50]0)|BAH2-(?:AL[01]0|L09|W[01]9))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M5 Lite\"\n },\n {\n \"regex\": \"SHT-(?:AL|W)09(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M5 8.4\"\n },\n {\n \"regex\": \"VRD-(?:(AL|W)09|AL10|W10)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M6 8.4\"\n },\n {\n \"regex\": \"SCM-W09(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M6 10\"\n },\n {\n \"regex\": \"BTV-W09(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M3 8\"\n },\n {\n \"regex\": \"(BAH-W09|CPN-(?:L|W)09|CPN-AL00|701HW)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M3 Lite\"\n },\n {\n \"regex\": \"BAH-(?:L09|AL00)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M3 Lite 10\"\n },\n {\n \"regex\": \"BTV-DL09\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad M3\"\n },\n {\n \"regex\": \"(AGS2-AL00|JDN2-W09)HN(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Honor Tab 5\"\n },\n {\n \"regex\": \"AGS2-(?:[LW]09|W19|L03)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T5 10\"\n },\n {\n \"regex\": \"KOB2-[LW]09(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T 8.0\\\"\"\n },\n {\n \"regex\": \"AGR-[LW]09(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T 10\"\n },\n {\n \"regex\": \"AGS-(?:L0[39]|W09)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T3 10\"\n },\n {\n \"regex\": \"(KOB-(?:L|W)09|BZK-[LW]00)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T3 8\"\n },\n {\n \"regex\": \"BG2-(?:U0[13]|W09)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T3 7\"\n },\n {\n \"regex\": \"BGO-L03(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T2 7.0\"\n },\n {\n \"regex\": \"(?:BGO-DL09|PLE-70[13]L)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T2 7.0 Pro\"\n },\n {\n \"regex\": \"JDN-L01(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T2 8.0 Pro\"\n },\n {\n \"regex\": \"(?:FDR-(A01[LW]|A03L)|605HW)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T2 10.0\\\" Pro\"\n },\n {\n \"regex\": \"T1-(?:A21[LW]|A23L)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T1 10\"\n },\n {\n \"regex\": \"T1-701u(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T1 7\"\n },\n {\n \"regex\": \"(?:T1-82(?:3L|1W)|MediaPad T1 8.0)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad T1 8\"\n },\n {\n \"regex\": \"AGS2-AL00(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Enjoy Tablet 10.1\"\n },\n {\n \"regex\": \"BZT-(W09|AL[01]0)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"MediaPad C5 10.1\"\n },\n {\n \"regex\": \"(?:d-01J|d-02[HK])(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"D Tab Compact\"\n },\n {\n \"regex\": \"(d-01K)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"dtab d-01K\"\n },\n {\n \"regex\": \"LEO-BX9(?:[);/ ]|$)\",\n \"device\": \"wearable\",\n \"model\": \"Smart Watch 2\"\n },\n {\n \"regex\": \"(MediaPad[^/;]*) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Ideos([^;/]*) Build\",\n \"model\": \"Ideos$1\"\n },\n {\n \"regex\": \"(?:HUAWEI )?MT([0-9]+)\",\n \"device\": \"phablet\",\n \"model\": \"Ascend Mate $1\"\n },\n {\n \"regex\": \"Huawei[ _\\\\-]?([^/;]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:HW-)?Huawei(?!Browser)(?:/1\\\\.0/0?(?:Huawei))?[_\\\\- /]?([a-z0-9\\\\-_]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Huawei; ([a-z0-9 \\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Hyundai\": {\n \"regex\": \"Hyundai|Ultra (?:Active|Air|Charm|Dream|Energy|Latitude|Link|Live|Shadow|Shine|Storm|Style|Sync|Trend|Vision|Wave)|G(24027|2552[34])K|W25042L|HP554O|Seoul S8|L503F Plus|HT0701L16|HT0704K08|HT1004L16|HT1004LI16|Koral_8W2|Eternity[_ ]G25\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Ultra (Active|Air|Charm|Dream|Energy Lite|Energy Plus|Energy|Latitude|Link|Live II|Live|Shadow|Shine|Storm|Style|Sync|Trend|Vision|Wave)\",\n \"model\": \"Ultra $1\"\n },\n {\n \"regex\": \"Seoul S8\",\n \"model\": \"Seoul S8\"\n },\n {\n \"regex\": \"G25523K\",\n \"model\": \"Eternity G23\"\n },\n {\n \"regex\": \"Eternity[_ ]G25\",\n \"model\": \"Eternity G25\"\n },\n {\n \"regex\": \"G25524K\",\n \"model\": \"Eternity G24\"\n },\n {\n \"regex\": \"G24027K\",\n \"model\": \"Eternity G27\"\n },\n {\n \"regex\": \"W25042L\",\n \"model\": \"Eternity W42\"\n },\n {\n \"regex\": \"HP554O\",\n \"model\": \"HP554O\"\n },\n {\n \"regex\": \"L503F Plus\",\n \"model\": \"L503F Plus\"\n },\n {\n \"regex\": \"L503F Plus\",\n \"model\": \"L503F Plus\"\n },\n {\n \"regex\": \"(?:Hyundai_)?(Eternity_G57L)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HT0701L16\",\n \"model\": \"Koral 7XL\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HT1004LI16\",\n \"model\": \"Koral 10XL\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Koral_8W2\",\n \"model\": \"Koral 8W2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HT1004L16\",\n \"model\": \"Koral 10XL\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"HT0704K08\",\n \"model\": \"Koral 7M4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Hyundai ([^;/]+) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Hyundai[ _\\\\-]?([a-z0-9_-]+)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"i-Joy\": {\n \"regex\": \"i-Joy|i-Call|(?:Neon[79]|Sygnus|Deox|Elektra (?:M|L|XL|XXL))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Elektra M(?:[);/ ]|$)\",\n \"model\": \"Elektra M\"\n },\n {\n \"regex\": \"Elektra L(?:[);/ ]|$)\",\n \"model\": \"Elektra L\"\n },\n {\n \"regex\": \"Elektra XL(?:[);/ ]|$)\",\n \"model\": \"Elektra XL\"\n },\n {\n \"regex\": \"Elektra XXL(?:[);/ ]|$)\",\n \"model\": \"Elektra XXL\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Neon([79])(?:[);/ ]|$)\",\n \"model\": \"Neon $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Sygnus(?:[);/ ]|$)\",\n \"model\": \"Sygnus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Deox(?:[);/ ]|$)\",\n \"model\": \"Deox\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"i-Call ([^;/]+) Build\",\n \"model\": \"i-Call $1\"\n },\n {\n \"regex\": \"i-Joy ([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iBall\": {\n \"regex\": \"iBall[ _]([^;/)]+)[ _]Build|iBall_Slide|(?:Snap[_ ]4G2|6351-Q400i|iT-KSA0003|iT-KSA0012|iT-KSA0066|Avid|Twinkle_i5|Gorgeo[_ ]4GL|Brisk 4G2|Blaze_V4|Wondro 10|Q27 4G|Andi (?:Wink|5G Blink) 4G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Andi Wink 4G\",\n \"device\": \"smartphone\",\n \"model\": \"Andi Wink 4G\"\n },\n {\n \"regex\": \"Andi 5G Blink 4G\",\n \"device\": \"smartphone\",\n \"model\": \"Andi 5G Blink 4G\"\n },\n {\n \"regex\": \"(Snap[_ ]4G2|Avid|Twinkle_i5|Gorgeo[_ ]4GL|Blaze_V4|Wondro 10|Q27 4G|Brisk 4G2)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"6351-Q400i(?:[);/ ]|$)\",\n \"model\": \"Slide\"\n },\n {\n \"regex\": \"iT-KSA0003(?:[);/ ]|$)\",\n \"model\": \"iTAB BizniZ\"\n },\n {\n \"regex\": \"iT-KSA0066(?:[);/ ]|$)\",\n \"model\": \"iTAB BizniZ Mini\"\n },\n {\n \"regex\": \"iT-KSA0012(?:[);/ ]|$)\",\n \"model\": \"iTAB Moviez Pro\"\n },\n {\n \"regex\": \"iBall[ _]([^;/)]+)(?:[ _]Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iRola\": {\n \"regex\": \"iRola ([^/;]+) Build|(DX758|DX752|DX752|DX758[ _]?Pro) Build\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"DX758[ _]?Pro\",\n \"model\": \"DX758 Pro\"\n },\n {\n \"regex\": \"(DX758|DX752)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"iRola ([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iRulu\": {\n \"regex\": \"iRULU[ _-](X11|V[34]|U2|AL101)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"iRULU[ _-](X11|V[34]|AL101)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"iRULU[ _](U2)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Irbis\": {\n \"regex\": \"IRBIS|TZ(1(?:0[04]|42|5[01]|84|65|7[01345-89]|8[356]|9[12578])|49|55|72|22|7(?:1[124679]|2[021567]|37|4[257]|5[23457]|6[12]|72|7[17]|8[1]|9[147])|8(?:[34]1|5[3-8]|6[45]|7[2478]|8[1-5]|9[0127])|96[0-9])|TZ85|TZ13|TZ(?:one|art|HIT|81L)|(SP(?:0[56]|2[01]|4[1-36]|40[12]|45[345]|49[34]|50|51[0147]|531|54[12]|55[0124]|571))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(TZ(?:[0-9]+)|TZ(?:one|art|HIT|81L))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(SP[0-9]+)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iBerry\": {\n \"regex\": \"AUXUS ([^/;]+) Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AUXUS (Core[^/;]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"AUXUS ([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iHunt\": {\n \"regex\": \"iHunt|One_ Love_|TITAN_P11000_PRO|Like_(3|4U|3_Pro)|X300 Elite|S10_Tank_2019|S60_Discovery_2019|AlienXLite2020|Alien X Lite|Alien_X|S20 Ultra ApeX 2021\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"iHunt_Like\",\n \"model\": \"Like\"\n },\n {\n \"regex\": \"S10_Tank_2019\",\n \"model\": \"S10 Tank (2019)\"\n },\n {\n \"regex\": \"One_ Love_\",\n \"model\": \"One Love\"\n },\n {\n \"regex\": \"TITAN_P11000_PRO\",\n \"model\": \"Titan P11000 Pro\"\n },\n {\n \"regex\": \"Like_3_Pro\",\n \"model\": \"Like 3 Pro\"\n },\n {\n \"regex\": \"Like_3\",\n \"model\": \"Like 3\"\n },\n {\n \"regex\": \"Like_4U\",\n \"model\": \"Like 4U\"\n },\n {\n \"regex\": \"X300 Elite\",\n \"model\": \"X300 Elite\"\n },\n {\n \"regex\": \"S60_Discovery_2019\",\n \"model\": \"S60 Discovery (2019)\"\n },\n {\n \"regex\": \"AlienXLite2020\",\n \"model\": \"Alien X Lite (2020)\"\n },\n {\n \"regex\": \"Alien X Lite PRO\",\n \"model\": \"Alien X Lite Pro\"\n },\n {\n \"regex\": \"Alien X Lite\",\n \"model\": \"Alien X Lite\"\n },\n {\n \"regex\": \"Alien_X_ApeX\",\n \"model\": \"Alien X ApeX\"\n },\n {\n \"regex\": \"Alien_X\",\n \"model\": \"Alien X\"\n },\n {\n \"regex\": \"S20 Ultra ApeX 2021\",\n \"model\": \"S20 Ultra ApeX (2021)\"\n }\n ]\n },\n \"IconBIT\": {\n \"regex\": \"IconBIT|NT-(3506M|0704S|0909T|1009T|10[01]1T|1017T|3601P/3602P|3603P|3702S|3805C|3905T|3701S|0701S|0805C|0902S|370[23]M)|XDS[789]4K|Omnicast UHD|Movie Smart 4K|Movie IPTV Quad\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"NT-3506M\",\n \"device\": \"smartphone\",\n \"model\": \"NetTAB Mercury Quad FHD\"\n },\n {\n \"regex\": \"NT-0704S\",\n \"model\": \"NetTAB Sky LE\"\n },\n {\n \"regex\": \"NT-0909T\",\n \"model\": \"NetTAB Thor IZ\"\n },\n {\n \"regex\": \"NT-1009T\",\n \"model\": \"NetTAB Thor quad II\"\n },\n {\n \"regex\": \"NT-10[01]1T\",\n \"model\": \"NetTAB Thor LE\"\n },\n {\n \"regex\": \"NT-1017T\",\n \"model\": \"NetTAB Thor 3G quad\"\n },\n {\n \"regex\": \"NT-3601P/3602P\",\n \"model\": \"NetTAB Pocket 3G\"\n },\n {\n \"regex\": \"NT-3603P\",\n \"model\": \"NetTAB Pocket 3G Slim\"\n },\n {\n \"regex\": \"NT-3702S\",\n \"model\": \"NetTAB Sky HD 3G\"\n },\n {\n \"regex\": \"NT-3805C\",\n \"model\": \"NetTAB Skat 3G quad\"\n },\n {\n \"regex\": \"NT-3701S\",\n \"model\": \"NetTAB Sky 3G duo\"\n },\n {\n \"regex\": \"NT-3905T\",\n \"model\": \"NetTAB Thor ZX 3G\"\n },\n {\n \"regex\": \"NT-0701S\",\n \"model\": \"NetTAB Sky net\"\n },\n {\n \"regex\": \"NT-0805C\",\n \"model\": \"NetTAB Skat MX\"\n },\n {\n \"regex\": \"NT-0902S\",\n \"model\": \"NetTAB Space quad RX\"\n },\n {\n \"regex\": \"NT-3702M\",\n \"model\": \"NetTAB Matrix 3G duo\"\n },\n {\n \"regex\": \"NT-3703M\",\n \"model\": \"NetTAB Matrix 3GT\"\n },\n {\n \"regex\": \"(?:iconBIT )?(Movie Smart 4K|Movie IPTV Quad|Movie Ultra HD 4K|XDS[789]4K|Omnicast UHD)\",\n \"model\": \"$1\",\n \"device\": \"tv\"\n }\n ]\n },\n \"LYF\": {\n \"regex\": \"(LYF[ _])?LS-[456][0-9]{3}|LYF/[^/]+/\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"LS-4004\",\n \"model\": \"Flame 2\"\n },\n {\n \"regex\": \"LS-5501\",\n \"model\": \"Earth 1\"\n },\n {\n \"regex\": \"LS-5021\",\n \"model\": \"Earth 2\"\n },\n {\n \"regex\": \"LS-5505\",\n \"model\": \"Water F1\"\n },\n {\n \"regex\": \"LS-4503\",\n \"model\": \"Flame LS-4503\"\n },\n {\n \"regex\": \"LS-4001\",\n \"model\": \"Flame 3\"\n },\n {\n \"regex\": \"LS-4003\",\n \"model\": \"Flame 4\"\n },\n {\n \"regex\": \"LS-4002\",\n \"model\": \"Flame 5\"\n },\n {\n \"regex\": \"LS-4005\",\n \"model\": \"Flame 6\"\n },\n {\n \"regex\": \"(LYF[ _])?LS-4006\",\n \"model\": \"Flame 7\"\n },\n {\n \"regex\": \"LS-4008\",\n \"model\": \"Flame 7S\"\n },\n {\n \"regex\": \"LS-450[58]\",\n \"model\": \"Flame 8\"\n },\n {\n \"regex\": \"LS-5002\",\n \"model\": \"Water 1\"\n },\n {\n \"regex\": \"LS-5005\",\n \"model\": \"Water 4\"\n },\n {\n \"regex\": \"LS-5006\",\n \"model\": \"Water 6\"\n },\n {\n \"regex\": \"LS-5008\",\n \"model\": \"Water 2\"\n },\n {\n \"regex\": \"LS-5009\",\n \"model\": \"Wind 6\"\n },\n {\n \"regex\": \"LS-5013\",\n \"model\": \"Wind 5\"\n },\n {\n \"regex\": \"LS-5014\",\n \"model\": \"Wind 4\"\n },\n {\n \"regex\": \"LS-5010\",\n \"model\": \"Wind 1\"\n },\n {\n \"regex\": \"LS-5015\",\n \"model\": \"Water 8\"\n },\n {\n \"regex\": \"LS-5016\",\n \"model\": \"Wind 7\"\n },\n {\n \"regex\": \"LS-5504\",\n \"model\": \"Water 7\"\n },\n {\n \"regex\": \"LS-5507\",\n \"model\": \"Water 7S\"\n },\n {\n \"regex\": \"LS-5017\",\n \"model\": \"Water 11\"\n },\n {\n \"regex\": \"LS-5018\",\n \"model\": \"Wind 4S\"\n },\n {\n \"regex\": \"LS-5020\",\n \"model\": \"Water 10\"\n },\n {\n \"regex\": \"LS-5201\",\n \"model\": \"Water F1S\"\n },\n {\n \"regex\": \"LS-5502\",\n \"model\": \"Wind 3\"\n },\n {\n \"regex\": \"LS-5503\",\n \"model\": \"Water 3\"\n },\n {\n \"regex\": \"LS-5506\",\n \"model\": \"Water 9\"\n },\n {\n \"regex\": \"LS-6001\",\n \"model\": \"Wind 2\"\n },\n {\n \"regex\": \"LYF/([^/]+)/\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Lumus\": {\n \"regex\": \"LUMUS Shell|(?:NEO(SR620|SC600)|INNOSR545|Lumus[_ ]Ion)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NEO(SR620|SC600)(?:[);/ ]|$)\",\n \"model\": \"Neo $1\"\n },\n {\n \"regex\": \"INNO(SR545)(?:[);/ ]|$)\",\n \"model\": \"INNO $1\"\n },\n {\n \"regex\": \"Lumus[_ ]Ion(?:[);/ ]|$)\",\n \"model\": \"Ion\"\n },\n {\n \"regex\": \"LUMUS Shell [0-9A-Z]+\",\n \"device\": \"tv\",\n \"model\": \"\"\n }\n ]\n },\n \"M4tel\": {\n \"regex\": \"M4 SS[0-9]{4}(?:-R)?|M4_B[23]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SS1050\",\n \"model\": \"Joy\"\n },\n {\n \"regex\": \"SS1060\",\n \"model\": \"Live\"\n },\n {\n \"regex\": \"SS1070\",\n \"model\": \"Sense\"\n },\n {\n \"regex\": \"SS1080\",\n \"model\": \"Max One\"\n },\n {\n \"regex\": \"SS1090\",\n \"model\": \"Max Ultra\"\n },\n {\n \"regex\": \"SS4020\",\n \"model\": \"Play\"\n },\n {\n \"regex\": \"SS4040\",\n \"model\": \"In Touch\"\n },\n {\n \"regex\": \"SS4045\",\n \"model\": \"Style\"\n },\n {\n \"regex\": \"SS4345\",\n \"model\": \"Soul Mini\"\n },\n {\n \"regex\": \"SS4350\",\n \"model\": \"Soul\"\n },\n {\n \"regex\": \"SS4445\",\n \"model\": \"Style Access\"\n },\n {\n \"regex\": \"SS4450\",\n \"model\": \"Share\"\n },\n {\n \"regex\": \"SS4451\",\n \"model\": \"Believe\"\n },\n {\n \"regex\": \"SS4452\",\n \"model\": \"Dream\"\n },\n {\n \"regex\": \"SS4453\",\n \"model\": \"Inspiration\"\n },\n {\n \"regex\": \"SS4455\",\n \"model\": \"Excite\"\n },\n {\n \"regex\": \"SS4456\",\n \"model\": \"Evolution\"\n },\n {\n \"regex\": \"SS4457-R\",\n \"model\": \"Ever\"\n },\n {\n \"regex\": \"SS4457\",\n \"model\": \"Elegance\"\n },\n {\n \"regex\": \"SS4458-R\",\n \"model\": \"Feel Plus\"\n },\n {\n \"regex\": \"SS4458\",\n \"model\": \"Attitude\"\n },\n {\n \"regex\": \"M4_B([23])\",\n \"model\": \"B$1\"\n }\n ]\n },\n \"IMO Mobile\": {\n \"regex\": \"IMO[ _]\\\\w\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IMO[ _]Q([23]) Plus(?:[);/ ]|$)\",\n \"model\": \"Q$1 Plus\"\n },\n {\n \"regex\": \"IMO[ _]Q2(?:[);/ ]|$)\",\n \"model\": \"Q2\"\n },\n {\n \"regex\": \"IMO[ _]S2(?:[);/ ]|$)\",\n \"model\": \"S2\"\n },\n {\n \"regex\": \"IMO[ _]FEEL A2(?:[);/ ]|$)\",\n \"model\": \"Feel A2\"\n },\n {\n \"regex\": \"IMO[ _]S50(?:[);/ ]|$)\",\n \"model\": \"S50 Light\"\n },\n {\n \"regex\": \"IMO[ _]S80(?:[);/ ]|$)\",\n \"model\": \"S80 Hero\"\n },\n {\n \"regex\": \"IMO[ _]S89(?:[);/ ]|$)\",\n \"model\": \"S89 Miracle\"\n },\n {\n \"regex\": \"IMO[ _]S88(?:[);/ ]|$)\",\n \"model\": \"S88 Discovery\"\n },\n {\n \"regex\": \"IMO[ _]S99(?:[);/ ]|$)\",\n \"model\": \"S99 Ocean\"\n },\n {\n \"regex\": \"IMO[ _]S98(?:[);/ ]|$)\",\n \"model\": \"S98 Champion\"\n },\n {\n \"regex\": \"IMO[ _]S87(?:[);/ ]|$)\",\n \"model\": \"S87 Raptor\"\n },\n {\n \"regex\": \"IMO[ _]S67(?:[);/ ]|$)\",\n \"model\": \"S67 Blast\"\n },\n {\n \"regex\": \"IMO[ _]S78(?:[);/ ]|$)\",\n \"model\": \"S78 Glory\"\n },\n {\n \"regex\": \"IMO[ _]Q8(?:[);/ ]|$)\",\n \"model\": \"Q8 Clarity\"\n },\n {\n \"regex\": \"IMO[ _]Discovery II(?:[);/ ]|$)\",\n \"model\": \"Discovery II\"\n },\n {\n \"regex\": \"IMO[ _]Q(?:[);/ ]|$)\",\n \"model\": \"Q\"\n },\n {\n \"regex\": \"IMO[ _](Y5|Z[67])(?:[);/ ]|$)\",\n \"model\": \"Tab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IMO TAB X9(?:[);/ ]|$)\",\n \"model\": \"Tab X9\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"iLA\": {\n \"regex\": \"iLA[-_ ](Silk|X)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"iNew\": {\n \"regex\": \"iNew|(?:V7A|V3 Plus|V3-?E|V3C|FIRE_Tab_6)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"V3C(?:[);/ ]|$)\",\n \"model\": \"V3C\"\n },\n {\n \"regex\": \"V3-?E(?:[);/ ]|$)\",\n \"model\": \"V3-E\"\n },\n {\n \"regex\": \"V3 Plus(?:[);/ ]|$)\",\n \"model\": \"V3 Plus\"\n },\n {\n \"regex\": \"V7A(?:[);/ ]|$)\",\n \"model\": \"V7A\"\n },\n {\n \"regex\": \"FIRE_Tab_6(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Fire Tab 6\"\n },\n {\n \"regex\": \"iNew[ -_]([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iPro\": {\n \"regex\": \"(?:Kylin[ _]5.[05]S?|KYLIN40|Jade[78]s|Amber[67]S?|Amber5S_Pro|Phonenix50S|Zafiro)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Kylin_5.0S\",\n \"model\": \"Kylin 5.0S\"\n },\n {\n \"regex\": \"Kylin (5.[05])\",\n \"model\": \"Kylin $1\"\n },\n {\n \"regex\": \"KYLIN40\",\n \"model\": \"Kylin 40\"\n },\n {\n \"regex\": \"Jade([78])s\",\n \"model\": \"Jade $1s\"\n },\n {\n \"regex\": \"Amber7S\",\n \"model\": \"Amber 7S\"\n },\n {\n \"regex\": \"Amber5S_Pro\",\n \"model\": \"Amber 5S Pro\"\n },\n {\n \"regex\": \"Amber6\",\n \"model\": \"Amber 6\"\n },\n {\n \"regex\": \"Phonenix50S\",\n \"model\": \"Phonenix 50S\"\n },\n {\n \"regex\": \"Zafiro\",\n \"model\": \"Zafiro\"\n }\n ]\n },\n \"Infinix\": {\n \"regex\": \"Infinix\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Infinix[ _-]X260\",\n \"model\": \"Buzz\"\n },\n {\n \"regex\": \"Infinix[ _-]X502\",\n \"model\": \"Alpha Marvel\"\n },\n {\n \"regex\": \"Infinix[ _-]X570\",\n \"model\": \"Alpha\"\n },\n {\n \"regex\": \"Infinix[ _-]X350\",\n \"model\": \"Surf Smart\"\n },\n {\n \"regex\": \"Infinix[ _-]X351\",\n \"model\": \"Surf Smart 3G\"\n },\n {\n \"regex\": \"Infinix[ _-]X352\",\n \"model\": \"Surf Smart 2\"\n },\n {\n \"regex\": \"Infinix[ _-]X403\",\n \"model\": \"Surf Spice\"\n },\n {\n \"regex\": \"Infinix[ _-]X503\",\n \"model\": \"Surf Bravo\"\n },\n {\n \"regex\": \"Infinix[ _-]X511\",\n \"model\": \"Surf Noir\"\n },\n {\n \"regex\": \"Infinix[ _-]X400\",\n \"model\": \"Race\"\n },\n {\n \"regex\": \"Infinix[ _-]X401\",\n \"model\": \"Race Lite\"\n },\n {\n \"regex\": \"Infinix[ _-]X450\",\n \"model\": \"Race Bolt\"\n },\n {\n \"regex\": \"Infinix[ _-]X451\",\n \"model\": \"Race Bolt Q\"\n },\n {\n \"regex\": \"Infinix[ _-]X454\",\n \"model\": \"Race Bolt 2\"\n },\n {\n \"regex\": \"Infinix[ _-]X500\",\n \"model\": \"Race Eagle\"\n },\n {\n \"regex\": \"Infinix[ _-]X501\",\n \"model\": \"Race Jet\"\n },\n {\n \"regex\": \"Infinix[ _-]X506\",\n \"model\": \"Zero\"\n },\n {\n \"regex\": \"Infinix[ _-]X509\",\n \"model\": \"Zero 2\"\n },\n {\n \"regex\": \"Infinix[ _-]X552\",\n \"model\": \"Zero 3\"\n },\n {\n \"regex\": \"Infinix[ _-]X555\",\n \"model\": \"Zero 4\"\n },\n {\n \"regex\": \"Infinix[ _-]X(?:574|602)\",\n \"model\": \"Zero 4 Plus\"\n },\n {\n \"regex\": \"Infinix[ _-]X603\",\n \"model\": \"Zero 5\"\n },\n {\n \"regex\": \"Infinix[ _-]X603B\",\n \"model\": \"Zero 5 Pro\"\n },\n {\n \"regex\": \"Infinix[ _-]X620\",\n \"model\": \"Zero 6\"\n },\n {\n \"regex\": \"Infinix[ _-]X507\",\n \"model\": \"Hot\"\n },\n {\n \"regex\": \"Infinix[ _-]X510\",\n \"model\": \"Hot 2\"\n },\n {\n \"regex\": \"Infinix[ _-]X55[34]\",\n \"model\": \"Hot 3\"\n },\n {\n \"regex\": \"Infinix[ _-]X521\",\n \"model\": \"Hot S\"\n },\n {\n \"regex\": \"Infinix[ _-]X522\",\n \"model\": \"Hot S2\"\n },\n {\n \"regex\": \"Infinix[ _-]X557\",\n \"model\": \"Hot 4\"\n },\n {\n \"regex\": \"Infinix[ _-]X556\",\n \"model\": \"Hot 4 Pro\"\n },\n {\n \"regex\": \"Infinix[ _-]X559c\",\n \"model\": \"Hot 5\"\n },\n {\n \"regex\": \"Infinix[ _-]X559\",\n \"model\": \"Hot 5 Lite\"\n },\n {\n \"regex\": \"Infinix[ _-]X606[BC]?\",\n \"model\": \"Hot 6\"\n },\n {\n \"regex\": \"Infinix[ _-]X608\",\n \"model\": \"Hot 6 Pro\"\n },\n {\n \"regex\": \"Infinix[ _-]X624\",\n \"model\": \"Hot 7\"\n },\n {\n \"regex\": \"Infinix[ _-]X650\",\n \"model\": \"Hot 8\"\n },\n {\n \"regex\": \"Infinix[ _-]X680\",\n \"model\": \"Hot 9 Play\"\n },\n {\n \"regex\": \"Infinix[ _-]X573B?\",\n \"model\": \"Hot S3\"\n },\n {\n \"regex\": \"Infinix[ _-]X5010\",\n \"model\": \"Smart\"\n },\n {\n \"regex\": \"Infinix[ _-]X5515F\",\n \"model\": \"Smart 2\"\n },\n {\n \"regex\": \"Infinix[ _-]X5514D\",\n \"model\": \"Smart 2 Pro\"\n },\n {\n \"regex\": \"Infinix[ _-]X653\",\n \"model\": \"Smart 4\"\n },\n {\n \"regex\": \"Infinix[ _-]X626\",\n \"model\": \"S4\"\n },\n {\n \"regex\": \"Infinix[ _-]X652\",\n \"model\": \"S5\"\n },\n {\n \"regex\": \"Infinix[ _-]X660\",\n \"model\": \"S5 Pro\"\n },\n {\n \"regex\": \"Infinix[ _-]X551\",\n \"model\": \"Hot Note\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix[ _-]X600\",\n \"model\": \"Note 2\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix[ _-]X601\",\n \"model\": \"Note 3\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix[ _-]X572\",\n \"model\": \"Note 4\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix[ _-]X571\",\n \"model\": \"Note 4 Pro\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix[ _-]X604\",\n \"model\": \"Note 5\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix[ _-]X610\",\n \"model\": \"Note 6\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix[ _-]X690\",\n \"model\": \"Note 7\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix[ _-]X656\",\n \"model\": \"Note 7 Lite\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Infinix HOT ([a-z]?[1-6])( (?:Lite|Plus|Pro))?\",\n \"model\": \"Hot $1$2\"\n },\n {\n \"regex\": \"Infinix[ _-](X[78]00)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Infinix[ _-](X\\\\d+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Infinix[ _-]([a-z0-9_\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"InFocus\": {\n \"regex\": \"IF(900[1237]|902[19]|903[15])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IF9001\",\n \"model\": \"Turbo 5\"\n },\n {\n \"regex\": \"IF9007\",\n \"model\": \"A3\"\n },\n {\n \"regex\": \"IF9021\",\n \"model\": \"Turbo 5 Plus\"\n },\n {\n \"regex\": \"IF9035\",\n \"model\": \"A2\"\n },\n {\n \"regex\": \"IF9002\",\n \"model\": \"M5s\"\n },\n {\n \"regex\": \"IF9003\",\n \"model\": \"M6s\"\n },\n {\n \"regex\": \"IF9031\",\n \"model\": \"Vision 3\"\n },\n {\n \"regex\": \"IF9029\",\n \"model\": \"Vision 3 Pro\"\n }\n ]\n },\n \"InnJoo\": {\n \"regex\": \"InnJoo|(?:Halo Plus|Halo X|Halo[ _]4(?:[ _]mini[ _]LTE)?|Halo2 3G|Fire2 Plus LTE)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"InnJoo[ _]X3(?:[);/ ]|$)\",\n \"model\": \"X3\"\n },\n {\n \"regex\": \"Halo[ _]X[ _]LTE(?:[);/ ]|$)\",\n \"model\": \"Halo X LTE\"\n },\n {\n \"regex\": \"InnJoo[ _]X(?:[);/ ]|$)\",\n \"model\": \"X\"\n },\n {\n \"regex\": \"Halo Plus(?:[);/ ]|$)\",\n \"model\": \"Halo Plus\"\n },\n {\n \"regex\": \"Halo[ _]4[ _]mini[ _]LTE(?:[);/ ]|$)\",\n \"model\": \"Halo 4 Mini LTE\"\n },\n {\n \"regex\": \"Halo 4(?:[);/ ]|$)\",\n \"model\": \"Halo 4\"\n },\n {\n \"regex\": \"Halo2 3G(?:[);/ ]|$)\",\n \"model\": \"Halo 2 3G\"\n },\n {\n \"regex\": \"InnJoo[ _]Pro2(?:[);/ ]|$)\",\n \"model\": \"Pro 2\"\n },\n {\n \"regex\": \"Innjoo ONE 3G(?:[);/ ]|$)\",\n \"model\": \"One 3G\"\n },\n {\n \"regex\": \"Innjoo[ _]2[ _]LTE(?:[);/ ]|$)\",\n \"model\": \"2 LTE\"\n },\n {\n \"regex\": \"InnJoo[ _]([2-4])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Fire2 Plus LTE\",\n \"model\": \"Fire 2 Plus LTE\"\n }\n ]\n },\n \"Inkti\": {\n \"regex\": \"intki[ _]([^/;]*)[ _]Build\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Innos\": {\n \"regex\": \"Innos_?(D6000)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Innostream\": {\n \"regex\": \"INNO([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"INNO$1\"\n },\n \"Insignia\": {\n \"regex\": \"NS-(P11A8100|P10A8100|P10A6100|P16AT08|P16AT10|P16AT785HD|P08A7100|P10A7100)(?:[);/ ]|$)|AFTEAMR311|AFTJMST12\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"NS-P11A8100\",\n \"model\": \"11.6\\\"\"\n },\n {\n \"regex\": \"NS-(P10A6100|P16AT10)\",\n \"model\": \"Flex 10.1\\\"\"\n },\n {\n \"regex\": \"NS-P16AT08\",\n \"model\": \"Flex 8\\\"\"\n },\n {\n \"regex\": \"NS-P08A7100\",\n \"model\": \"8\\\"\"\n },\n {\n \"regex\": \"NS-(P10A8100|P10A7100)\",\n \"model\": \"10.1\\\"\"\n },\n {\n \"regex\": \"NS-P16AT785HD\",\n \"model\": \"Flex Elite 7.85\\\"\"\n },\n {\n \"regex\": \"AFTEAMR311\",\n \"model\": \"HD (2018)\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"AFTJMST12\",\n \"model\": \"4K (2018)\",\n \"device\": \"tv\"\n }\n ]\n },\n \"INQ\": {\n \"regex\": \"INQ[/ ]\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"INQ/([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"INQ ([^;/]+) Build\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"Intex\": {\n \"regex\": \"Intex|(Aqua|Cloud[ _][XY][0-9]{1}|Cloud (?:Fame|Glory) 4G)|IM0318ND(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IM0318ND\",\n \"model\": \"Aqua Lions 3\"\n },\n {\n \"regex\": \"Intex[ _]([^/;]*)[ _]Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Cloud (?:Fame|Glory) 4G)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Aqua|Cloud)[ _\\\\.]([^/;\\\\)]+)(?:[ _]Build|(?<!Build)/|\\\\))\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"Intex[ _]([a-z0-9_+\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"i-mate\": {\n \"regex\": \"i-mate ([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"i-mobile\": {\n \"regex\": \"i-mobile ?[a-z0-9]+|i-Style|IQ ?(9\\\\.1|5\\\\.5|5\\\\.6A?)\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"i-mobile (i-note[^/;]*) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"i-Style ?([^;/]+) Build\",\n \"model\": \"i-Style $1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"IQ ?(9\\\\.1|5\\\\.5|5\\\\.6A?)\",\n \"model\": \"IQ $1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"i-mobile (IQ[^/;]*) Build\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"i-mobile(?: )?([a-z0-9\\\\- ]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"i-mobile(?: )?([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iKoMo\": {\n \"regex\": \"iKoMo ([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"iOcean\": {\n \"regex\": \"iOCEAN|M6752|W180|X7[ _]?S|X8 mini\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"X7S-T\",\n \"model\": \"X7S-T\"\n },\n {\n \"regex\": \"X8 mini pro\",\n \"model\": \"X8 Mini Pro\"\n },\n {\n \"regex\": \"X8 mini\",\n \"model\": \"X8 Mini\"\n },\n {\n \"regex\": \"X7[ _]?S\",\n \"model\": \"X7S Elite\"\n },\n {\n \"regex\": \"(M6752|W180) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"iOCEAN[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"iOCEAN[ _\\\\-]?([^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iView\": {\n \"regex\": \"(733TPC|730TPC|769TPCII|930TPC)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Impression\": {\n \"regex\": \"(?:Impression[ _\\\\-]?([^/;]+)|A502|I10\\\\-LE|ImPad[ _]?(.*)|ImSmart[ _]?(.*))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(A502)\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"ImSmart[ _]?([^/;)]+)(?: Build|\\\\))\",\n \"model\": \"ImSmart $1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"ImPad[ _]?([^/;)]+)(?: Build|\\\\))\",\n \"model\": \"ImPad $1\"\n },\n {\n \"regex\": \"(I10\\\\-LE)\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Impression[ _\\\\-]?([^/;)]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iLife\": {\n \"regex\": \"(ITELL[_ ](?:K3300|K3500N?|K4700))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"iTel\": {\n \"regex\": \"itel|iNote|GP10X2019(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"W6502\",\n \"device\": \"phablet\",\n \"model\": \"S16\"\n },\n {\n \"regex\": \"W5505\",\n \"model\": \"A36\"\n },\n {\n \"regex\": \"W6002E?\",\n \"model\": \"S15\"\n },\n {\n \"regex\": \"L5502\",\n \"model\": \"A44 Air\"\n },\n {\n \"regex\": \"L5505\",\n \"model\": \"A47\"\n },\n {\n \"regex\": \"L6006\",\n \"model\": \"A48\"\n },\n {\n \"regex\": \"L6003P\",\n \"model\": \"A55 LTE\"\n },\n {\n \"regex\": \"L6002P\",\n \"model\": \"S15 Pro\"\n },\n {\n \"regex\": \"L5002\",\n \"model\": \"A22\"\n },\n {\n \"regex\": \"L5503\",\n \"model\": \"A46\"\n },\n {\n \"regex\": \"L6004\",\n \"model\": \"A56 LTE\"\n },\n {\n \"regex\": \"W6004P\",\n \"model\": \"A56 Pro\"\n },\n {\n \"regex\": \"W6001\",\n \"model\": \"P33 Plus\"\n },\n {\n \"regex\": \"W6003\",\n \"model\": \"A55\"\n },\n {\n \"regex\": \"L6005\",\n \"model\": \"Vision 1\"\n },\n {\n \"regex\": \"L6501\",\n \"model\": \"Vision 1 Plus\"\n },\n {\n \"regex\": \"L6502\",\n \"model\": \"Vision 1 Pro\"\n },\n {\n \"regex\": \"GP10X2019\",\n \"model\": \"GP10X2019\"\n },\n {\n \"regex\": \"iNote ([^/;]*)Build\",\n \"model\": \"iNote $1\"\n },\n {\n \"regex\": \"iNote_([a-z0-9\\\\-_]+)\",\n \"model\": \"iNote $1\"\n },\n {\n \"regex\": \"itel-it(1410|1512|1520)(?:[);/ ]|$)\",\n \"model\": \"it$1\"\n },\n {\n \"regex\": \"itel-it1553(?:[);/ ]|$)\",\n \"model\": \"Power Pro\"\n },\n {\n \"regex\": \"itel[- ](A14|A16 Plus|A44 Power|A23S|A52 Lite)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"itel it1701\",\n \"device\": \"tablet\",\n \"model\": \"iNote Prime\"\n },\n {\n \"regex\": \"itel it170([23])\",\n \"device\": \"tablet\",\n \"model\": \"iNote Prime $1\"\n },\n {\n \"regex\": \"iTel ([^/;]*)Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"iTel[_ ]([a-z0-9\\\\-_]*)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iZotron\": {\n \"regex\": \"(Mi7_HERO_(?:BETA|TAB))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Mi7[_ ]HERO[_ ]BETA(?:[);/ ]|$)\",\n \"model\": \"MI7 Hero Beta\"\n },\n {\n \"regex\": \"Mi7[_ ]HERO[_ ]TAB(?:[);/ ]|$)\",\n \"model\": \"MI7 Hero Tab\"\n }\n ]\n },\n \"JAY-Tech\": {\n \"regex\": \"TPC-[A-Z0-9]+|TPCY-TX[TE][^);/ ]+\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TPC-([A-Z0-9]+)\",\n \"model\": \"Tablet PC $1\"\n },\n {\n \"regex\": \"(TPCY-TX[TE][^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Jiayu\": {\n \"regex\": \"JIAYU[ _-]|(?:JY-G4[\\\\\\\\_]G5|(?:JY-[a-z0-9]+)|JY_G4C)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:JIAYU G4_G5|JY-G4[\\\\\\\\_]G5)(?:[);/ ]|$)\",\n \"model\": \"G4/G5\"\n },\n {\n \"regex\": \"JIAYU[ _-](G4[S]?|G2F|G3[S]?|S[23])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"JY[-_]([a-z0-9]+|G4C)(?:[);/ ]|$)\",\n \"model\": \"JY-$1\"\n }\n ]\n },\n \"Jolla\": {\n \"regex\": \"Jolla\",\n \"device\": \"smartphone\",\n \"model\": \"\"\n },\n \"Just5\": {\n \"regex\": \"JUST5(-)?SPACER(s)?|COSMO[_ ](L707|L808)|BLASTER|FREEDOM[ _](C100|M303|X1)|Freedom\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"COSMO[_ ](L707|L808)\",\n \"model\": \"Cosmo $1\"\n },\n {\n \"regex\": \"FREEDOM[ _](C100|M303|X1)\",\n \"model\": \"Freedom $1\"\n },\n {\n \"regex\": \"Freedom\",\n \"model\": \"Freedom\"\n },\n {\n \"regex\": \"JUST5(-)?SPACER2s\",\n \"model\": \"Spacer 2S\"\n },\n {\n \"regex\": \"JUST5(-)?SPACER2\",\n \"model\": \"Spacer 2\"\n },\n {\n \"regex\": \"JUST5SPACER\",\n \"model\": \"Spacer\"\n },\n {\n \"regex\": \"BLASTER 2\",\n \"model\": \"Blaster 2\"\n },\n {\n \"regex\": \"BLASTER\",\n \"model\": \"Blaster\"\n }\n ]\n },\n \"Kalley\": {\n \"regex\": \"KALLEY|(?:ELEMENT (?:MAX|Q)|ELEMENT_PRO_2|K-BOOK(?:8MG|73G))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ELEMENT MAX\",\n \"model\": \"Element Max\"\n },\n {\n \"regex\": \"ELEMENT Q\",\n \"model\": \"Element Q\"\n },\n {\n \"regex\": \"ELEMENT_PRO_2\",\n \"model\": \"Element Pro 2\"\n },\n {\n \"regex\": \"K-BOOK(8MG|73G)\",\n \"device\": \"tablet\",\n \"model\": \"K-BOOK$1\"\n },\n {\n \"regex\": \"KALLEY,(55D1240)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Kaan\": {\n \"regex\": \"KAAN[ _](N[12]|A1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Kazam\": {\n \"regex\": \"Kazam|Trooper_X[0-9][0-9](?:[);/ ]|$)|Tornado 348|TROOPER 4\\\\.0\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Tornado 348\",\n \"model\": \"Tornado 348\"\n },\n {\n \"regex\": \"Thunder 450W\",\n \"model\": \"Thunder 450W\"\n },\n {\n \"regex\": \"TROOPER 4\\\\.0\",\n \"model\": \"Trooper X4.0\"\n },\n {\n \"regex\": \"Trooper_X([0-9])([0-9])(?:[);/ ]|$)\",\n \"model\": \"Trooper X$1.$2\"\n },\n {\n \"regex\": \"Kazam[; _]([^;/)]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Keneksi\": {\n \"regex\": \"KENEKSI|(?:Hemera|Teta Dual|Helios)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Hemera|Teta Dual|Helios)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"KENEKSI[ _-]liberty\",\n \"model\": \"Liberty\"\n },\n {\n \"regex\": \"KENEKSI[ _-]FLASH\",\n \"model\": \"Flash\"\n },\n {\n \"regex\": \"KENEKSI[ _-]SUN\",\n \"model\": \"Sun\"\n },\n {\n \"regex\": \"KENEKSI[ _-]ZETA\",\n \"model\": \"Zeta\"\n },\n {\n \"regex\": \"KENEKSI[ _-]SIGMA\",\n \"model\": \"Sigma\"\n },\n {\n \"regex\": \"KENEKSI[ _-](Moon|Libra_Dual|Glass|Amber|Chance|Amulet|Choice|Crystal|Dream|Delta[_ ]Dual|Norma 2|Norma|Sky|Fire 2|Fire|Flame|Flora|Rock|Solo|Soul|Step|Smart|Star|Storm|Wind)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Kempler & Strauss\": {\n \"regex\": \"Alumini_?3_?Plus|Alumini ?[23]|KEMPLER_(?:P1|TV|X|8_PLUS)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Alumini ?2\",\n \"model\": \"Alumini 2\"\n },\n {\n \"regex\": \"Alumini_?3_?Plus\",\n \"model\": \"Alumini 3 Plus\"\n },\n {\n \"regex\": \"Alumini3\",\n \"model\": \"Alumini 3\"\n },\n {\n \"regex\": \"KEMPLER_P1\",\n \"model\": \"P1\"\n },\n {\n \"regex\": \"KEMPLER_TV\",\n \"model\": \"TV\"\n },\n {\n \"regex\": \"KEMPLER_X\",\n \"model\": \"X\"\n },\n {\n \"regex\": \"KEMPLER_8_PLUS\",\n \"model\": \"8 Plus\"\n }\n ]\n },\n \"Kiano\": {\n \"regex\": \"Kiano|Elegance_[45]_[015](?:_PRO)?|Elegance 6|CORE 10.1 DUAL 3G|Intelect ?(7|8|10)|Slim ?Tab ?\\\\d+(?:[_ ]3GR?)?(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Slim ?Tab ?(\\\\d+)(?:[_ ]3GR?)?\",\n \"model\": \"Slim Tab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"CORE 10.1 DUAL 3G\",\n \"model\": \"CORE 10.1 DUAL 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Elegance_(5)_([51])_Pro\",\n \"model\": \"Elegance $1.$2\\\" Pro\"\n },\n {\n \"regex\": \"Elegance_([45])_([015])\",\n \"model\": \"Elegance $1.$2\\\"\"\n },\n {\n \"regex\": \"Elegance 6\",\n \"model\": \"Elegance 6 5.85\\\"\"\n },\n {\n \"regex\": \"(Kiano)?(Intelect|Elegance) ?(7|8|10)?\",\n \"model\": \"$2 $3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Kiano[ _]([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Kingsun\": {\n \"regex\": \"Kingsun[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Kingsun[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Kingsun[ -]((?!Build)[a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Kocaso\": {\n \"regex\": \"Kocaso|M(?:729|7[357][026][hw]?|76[01236][bw]?|83[016]|8[567]0|1050s|106[012368]w?|1070|X736(?:-kit)?|X780)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"M729(?:[);/ ]|$)\",\n \"model\": \"M729\"\n },\n {\n \"regex\": \"M(7[357][026])[hw]?(?:[);/ ]|$)\",\n \"model\": \"M$1\"\n },\n {\n \"regex\": \"M(76[01236])[bw]?(?:[);/ ]|$)\",\n \"model\": \"M$1\"\n },\n {\n \"regex\": \"MX780(?:[);/ ]|$)\",\n \"model\": \"MX780\"\n },\n {\n \"regex\": \"M(83[016])(?:[);/ ]|$)\",\n \"model\": \"M$1\"\n },\n {\n \"regex\": \"M(8[567]0)(?:[);/ ]|$)\",\n \"model\": \"M$1\"\n },\n {\n \"regex\": \"M851(?:[);/ ]|$)\",\n \"model\": \"M851\"\n },\n {\n \"regex\": \"M1050S(?:[);/ ]|$)\",\n \"model\": \"M1050s\"\n },\n {\n \"regex\": \"M(106[012368])W?(?:[);/ ]|$)\",\n \"model\": \"M$1\"\n },\n {\n \"regex\": \"M1070(?:[);/ ]|$)\",\n \"model\": \"M1070\"\n },\n {\n \"regex\": \"MX736(?:-kit)?(?:[);/ ]|$)\",\n \"model\": \"MX736\"\n },\n {\n \"regex\": \"MX780(?:[);/ ]|$)\",\n \"model\": \"MX780\"\n },\n {\n \"regex\": \"Kocaso[ _\\\\-]?([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Kocaso[ _\\\\-]?([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Kogan\": {\n \"regex\": \"Kogan\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Kogan[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Kogan[ _-]([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Komu\": {\n \"regex\": \"Komu[ -]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Komu[ -]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Komu[ -]([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Koobee\": {\n \"regex\": \"Koobee\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Koobee[ _\\\\-]?([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Koobee[ _\\\\-]?([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Kumai\": {\n \"regex\": \"(?:KM-)?Kumai\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:KM-)?Kumai[ _\\\\-]?([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:KM-)?Kumai[ _\\\\-]?([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"KT-Tech\": {\n \"regex\": \"(KM-[a-z0-9]+|EV-[a-z0-9]+)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"KDDI\": {\n \"regex\": \"kddi-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Kodak\": {\n \"regex\": \"KODAK|(?:IM5|Ektra|Smartway_T1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IM5\",\n \"model\": \"IM5\"\n },\n {\n \"regex\": \"Ektra(?:[);/ ]|$)\",\n \"model\": \"Ektra\"\n },\n {\n \"regex\": \"(?:KODAK[_ ])?SMARTWAY[_ ]([MTX]1)\",\n \"model\": \"Smartway $1\"\n },\n {\n \"regex\": \"Tablet (7|10)\",\n \"device\": \"tablet\",\n \"model\": \"Tablet $1\"\n }\n ]\n },\n \"KOPO\": {\n \"regex\": \"KOPO[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"KOPO[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"KOPO[ _\\\\-]?([^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Koridy\": {\n \"regex\": \"KORIDY[ _-]([^/;]+) Build\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"KRONO\": {\n \"regex\": \"NET1100|NET_(?:TITAN|VOLT)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NET1100\",\n \"model\": \"NET 1100\"\n },\n {\n \"regex\": \"NET_(TITAN|VOLT)\",\n \"model\": \"NET $1\"\n }\n ]\n },\n \"K-Touch\": {\n \"regex\": \"K-?Touch[ _][a-z0-9]+\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"K-?Touch[ _]([^/;]*)[ _]Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"K-?Touch[ _]([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Diva\": {\n \"regex\": \"(QC-(?:703GN|704GA|803GN|1013G|7BHD))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Kyocera\": {\n \"regex\": \"Kyocera|KWC-|QC-[0-9]{4}|(?:QC6035|NP501KC|302KC|503KC|602KC|705KC|901KC|C51[27]0|C5155|C5215|C67[35]0|C6522N?|C6530N|C6740N?|C6743|E6[89]10|KYL2[13]|KYV3[13-9]|KYT3[123]|KYF3[123579]|KYF40|KYX31|KYG01|KYY2[1-4]|S2151|KC-S701|S[468]-KC|KYV40U?|KYV4[1-8]|KYV4[47]|KC-S301AE|X3-KC|E6560[CT]|E6782[L]?|E6790(?:TM)?|[47]04KC|A001KC|WX10K|URBANO PROGRESSO|E7110)(?:[-_]u2?)?(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"C5120(?:[);/ ]|$)\",\n \"model\": \"Milano\"\n },\n {\n \"regex\": \"S4-KC(?:[);/ ]|$)\",\n \"model\": \"One S4\"\n },\n {\n \"regex\": \"S6-KC(?:[);/ ]|$)\",\n \"model\": \"One S6\"\n },\n {\n \"regex\": \"S8-KC(?:[);/ ]|$)\",\n \"model\": \"One S8\"\n },\n {\n \"regex\": \"C5155(?:[);/ ]|$)\",\n \"model\": \"Rise\"\n },\n {\n \"regex\": \"602KC(?:[);/ ]|$)\",\n \"model\": \"Digno G\"\n },\n {\n \"regex\": \"503KC(?:[);/ ]|$)\",\n \"model\": \"Digno E\"\n },\n {\n \"regex\": \"404KC(?:[);/ ]|$)\",\n \"model\": \"Digno C\"\n },\n {\n \"regex\": \"704KC(?:[);/ ]|$)\",\n \"model\": \"Digno J\"\n },\n {\n \"regex\": \"302KC(?:[);/ ]|$)\",\n \"model\": \"Digno T\"\n },\n {\n \"regex\": \"NP501KC(?:[);/ ]|$)\",\n \"model\": \"Digno\"\n },\n {\n \"regex\": \"WX10K(?:[);/ ]|$)\",\n \"model\": \"Digno Dual 2\"\n },\n {\n \"regex\": \"KYV36(?:[);/ ]|$)\",\n \"model\": \"Digno Rafre\"\n },\n {\n \"regex\": \"901KC(?:[);/ ]|$)\",\n \"model\": \"Digno BX\"\n },\n {\n \"regex\": \"KYV39(?:[);/ ]|$)\",\n \"model\": \"Miraie F\"\n },\n {\n \"regex\": \"KYX31(?:[);/ ]|$)\",\n \"model\": \"Infobar XV\"\n },\n {\n \"regex\": \"C5170(?:[);/ ]|$)\",\n \"model\": \"Hydro\"\n },\n {\n \"regex\": \"C5215(?:[);/ ]|$)\",\n \"model\": \"Hydro EDGE\"\n },\n {\n \"regex\": \"C6522N?\",\n \"model\": \"Hydro XTRM\"\n },\n {\n \"regex\": \"C6730\",\n \"model\": \"Hydro ICON\"\n },\n {\n \"regex\": \"C6750\",\n \"model\": \"Hydro ELITE\"\n },\n {\n \"regex\": \"C6530N\",\n \"model\": \"Hydro LIFE\"\n },\n {\n \"regex\": \"C6740(N)?\",\n \"model\": \"Hydro WAVE\"\n },\n {\n \"regex\": \"C6743\",\n \"model\": \"Hydro Reach\"\n },\n {\n \"regex\": \"E6560[CT]\",\n \"model\": \"DuraForce\"\n },\n {\n \"regex\": \"E6810\",\n \"model\": \"DuraForce Pro\"\n },\n {\n \"regex\": \"E6910\",\n \"model\": \"DuraForce Pro 2\"\n },\n {\n \"regex\": \"E7110\",\n \"model\": \"DuraForce Ultra 5G\"\n },\n {\n \"regex\": \"KC-S701\",\n \"model\": \"Torque\"\n },\n {\n \"regex\": \"KYG01\",\n \"model\": \"Torque 5G\"\n },\n {\n \"regex\": \"KYL21(?:[);/ ]|$)\",\n \"model\": \"Digno S\"\n },\n {\n \"regex\": \"KYL23(?:[);/ ]|$)\",\n \"model\": \"Miraie\"\n },\n {\n \"regex\": \"KYY24(?:[);/ ]|$)\",\n \"model\": \"Torque G01\"\n },\n {\n \"regex\": \"KYF32(?:[);/ ]|$)\",\n \"model\": \"Easy Mobile Phone\"\n },\n {\n \"regex\": \"KYF35(?:[);/ ]|$)\",\n \"model\": \"Marvera\"\n },\n {\n \"regex\": \"KYF40(?:[);/ ]|$)\",\n \"model\": \"Mamorino 5\"\n },\n {\n \"regex\": \"KYF3[179](?:[);/ ]|$)\",\n \"model\": \"Gratina 4G\"\n },\n {\n \"regex\": \"KYV48(?:[);/ ]|$)\",\n \"model\": \"Gratina KYV48\"\n },\n {\n \"regex\": \"KYF33(?:[);/ ]|$)\",\n \"model\": \"Torque X01\"\n },\n {\n \"regex\": \"KYV35(?:[);/ ]|$)\",\n \"model\": \"Torque G02\"\n },\n {\n \"regex\": \"KYV41(?:[);/ ]|$)\",\n \"model\": \"Torque G03\"\n },\n {\n \"regex\": \"KYV46(?:[);/ ]|$)\",\n \"model\": \"Torque G04\"\n },\n {\n \"regex\": \"KYV47(?:-u)?(?:[);/ ]|$)\",\n \"model\": \"Basio 4\"\n },\n {\n \"regex\": \"KYV43(?:[);/ ]|$)\",\n \"model\": \"Basio 3\"\n },\n {\n \"regex\": \"705KC(?:[);/ ]|$)\",\n \"model\": \"Kantan Sumaho\"\n },\n {\n \"regex\": \"KYV37(?:[);/ ]|$)\",\n \"model\": \"Qua Phone\"\n },\n {\n \"regex\": \"KYV42(?:_u)?(?:[);/ ]|$)\",\n \"model\": \"Qua Phone QX\"\n },\n {\n \"regex\": \"KYV44(?:_u2?)?(?:[);/ ]|$)\",\n \"model\": \"Qua Phone QZ\"\n },\n {\n \"regex\": \"KYT33(?:[);/ ]|$)\",\n \"model\": \"Qua Tab QZ10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"KYT32(?:[);/ ]|$)\",\n \"model\": \"Qua Tab QZ8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"KYT31(?:[);/ ]|$)\",\n \"model\": \"Qua Tab 01\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"KYV40U?(?:[);/ ]|$)\",\n \"model\": \"Rafre\"\n },\n {\n \"regex\": \"KYV33(?:[);/ ]|$)\",\n \"model\": \"Infobar A03\"\n },\n {\n \"regex\": \"KYY21(?:[);/ ]|$)\",\n \"model\": \"Urbano L01\"\n },\n {\n \"regex\": \"KYY22(?:[);/ ]|$)\",\n \"model\": \"Urbano L02\"\n },\n {\n \"regex\": \"KYY23(?:[);/ ]|$)\",\n \"model\": \"Urbano L03\"\n },\n {\n \"regex\": \"KYV31(?:[);/ ]|$)\",\n \"model\": \"Urbano V01\"\n },\n {\n \"regex\": \"KYV34(?:[);/ ]|$)\",\n \"model\": \"Urbano V02\"\n },\n {\n \"regex\": \"KYV(?:45|38)(?:[);/ ]|$)\",\n \"model\": \"Urbano V03\"\n },\n {\n \"regex\": \"(?:Kyocera-)?E6790(?:TM)?\",\n \"model\": \"DuraForce XD\"\n },\n {\n \"regex\": \"X3-KC(?:[);/ ]|$)\",\n \"model\": \"One X3\"\n },\n {\n \"regex\": \"E6782(?:[);/ ]|$)\",\n \"model\": \"Brigadier\"\n },\n {\n \"regex\": \"E6782L(?:[);/ ]|$)\",\n \"model\": \"DuraScout\"\n },\n {\n \"regex\": \"(KC-S301AE)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"A001KC(?:[);/ ]|$)\",\n \"model\": \"Katan Sumaho 2\"\n },\n {\n \"regex\": \"URBANO PROGRESSO(?:[);/ ]|$)\",\n \"model\": \"Urbano Progresso\"\n },\n {\n \"regex\": \"S2151\",\n \"model\": \"Coast\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"Kyocera-KZ-([a-z0-9]+)\",\n \"model\": \"KZ $1\"\n },\n {\n \"regex\": \"Kyocera(?:[\\\\-/])?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(KWC|QC)-?([a-z0-9]+)\",\n \"model\": \"$1-$2\"\n }\n ]\n },\n \"Kr\u00FCger&Matz\": {\n \"regex\": \"Kruger[ _&]Matz|KrugerMatz[ _]|FLOW ?5PLUS|FLOW_5|FLOW7|FLOW6(?:S|Lite)|DRIVE[_ ]6S?|MOVE8mini|MOVE_|LIVE_6plus|LIVE 5 PLUS|LIVE4_KM043[89]|LIVE 7S|KM(?:106[67]|1065G|0701_1|0702|0805_1)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MOVE8mini\",\n \"model\": \"MOVE 8 Mini\"\n },\n {\n \"regex\": \"MOVE_6_mini\",\n \"model\": \"MOVE 6 Mini\"\n },\n {\n \"regex\": \"MOVE[_ ]([78]|6S)\",\n \"model\": \"MOVE $1\"\n },\n {\n \"regex\": \"DRIVE 4 mini LTE\",\n \"model\": \"DRIVE 4 mini LTE\"\n },\n {\n \"regex\": \"DRIVE[ _]([456][S]?)(?:[);/ ]|$)\",\n \"model\": \"DRIVE $1\"\n },\n {\n \"regex\": \"FLOW ?5PLUS(?:[);/ ]|$)\",\n \"model\": \"FLOW 5 Plus\"\n },\n {\n \"regex\": \"FLOW6Lite(?:[);/ ]|$)\",\n \"model\": \"FLOW 6 Lite\"\n },\n {\n \"regex\": \"FLOW[ _]?([4-7][S]?)(?:[);/ ]|$)\",\n \"model\": \"FLOW $1\"\n },\n {\n \"regex\": \"LIVE4_(KM043[89])(?:[);/ ]|$)\",\n \"model\": \"LIVE 4 $1\"\n },\n {\n \"regex\": \"KrugerMatz_LIVE4(?:[);/ ]|$)\",\n \"model\": \"LIVE 4\"\n },\n {\n \"regex\": \"_LIVE5_(KM0450)(?:[);/ ]|$)\",\n \"model\": \"LIVE 5 $1\"\n },\n {\n \"regex\": \"LIVE 5 PLUS(?:[);/ ]|$)\",\n \"model\": \"LIVE 5 Plus\"\n },\n {\n \"regex\": \"LIVE_6plus(?:[);/ ]|$)\",\n \"model\": \"LIVE 6 Plus\"\n },\n {\n \"regex\": \"LIVE 7S(?:[);/ ]|$)\",\n \"model\": \"LIVE 7S\"\n },\n {\n \"regex\": \"KM(106[67])(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"EAGLE $1 10.1\\\"\"\n },\n {\n \"regex\": \"KM(1065G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"EAGLE $1 10.1\\\"\"\n },\n {\n \"regex\": \"KM0(701)_1(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"EAGLE $1 7.1\\\"\"\n },\n {\n \"regex\": \"KM0(805)_1(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"EAGLE $1 8.0\\\"\"\n },\n {\n \"regex\": \"KM0(702)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"EAGLE $1 7.0\\\"\"\n }\n ]\n },\n \"LAIQ\": {\n \"regex\": \"LAIQ\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Glam|New York|Dubai)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"AIS\": {\n \"regex\": \"iris708|Kingcomm C500\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"iris708\",\n \"model\": \"LAVA PRO 4.5\"\n },\n {\n \"regex\": \"Kingcomm C500\",\n \"model\": \"Super Smart Plus X3\"\n }\n ]\n },\n \"Lava\": {\n \"regex\": \"Lava[ _]|LAVAA1|(?:DISCOVER136|KKT QUADRA)|iris[ _]?([^/;]+)(?:\\\\)| Build)|A(?:67|76) Build|X1 Selfie Build|X41 Plus Build|(?:Flair Z1|PixelV1|Pixel V2|Z61_2GB|A97 IPS|A97 2GB PLUS|L[EH]9920(?:[_ ]P)?|L[NEH]9910|LH9810|Ivory(?:S1|S4G)?|A76Plus)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Flair Z1(?:[);/ ]|$)\",\n \"model\": \"Flair Z1\"\n },\n {\n \"regex\": \"A97 IPS(?:[);/ ]|$)\",\n \"model\": \"A97 IPS\"\n },\n {\n \"regex\": \"A97 2GB PLUS(?:[);/ ]|$)\",\n \"model\": \"A97 2GB Plus\"\n },\n {\n \"regex\": \"A76Plus(?:[);/ ]|$)\",\n \"model\": \"A76 Plus\"\n },\n {\n \"regex\": \"Pixel ?V([12])(?:[);/ ]|$)\",\n \"model\": \"Pixel V$1\"\n },\n {\n \"regex\": \"X1 Selfie(?:[);/ ]|$)\",\n \"model\": \"Iris X1 Selfie\"\n },\n {\n \"regex\": \"X41 Plus(?:[);/ ]|$)\",\n \"model\": \"X41 Plus\"\n },\n {\n \"regex\": \"(?:LAVA[_ ]?)?A([13]|67|76)(?:[);/ ]|$)\",\n \"model\": \"A$1\"\n },\n {\n \"regex\": \"LAVA_R1\",\n \"model\": \"R1\"\n },\n {\n \"regex\": \"Z61_2GB(?:[);/ ]|$)\",\n \"model\": \"Z61\"\n },\n {\n \"regex\": \"LE9920[ _]P(?:[);/ ]|$)\",\n \"model\": \"V7\"\n },\n {\n \"regex\": \"LE9920(?:[);/ ]|$)\",\n \"model\": \"Z53\"\n },\n {\n \"regex\": \"LH9910(?:[);/ ]|$)\",\n \"model\": \"Z52\"\n },\n {\n \"regex\": \"LH9810(?:[);/ ]|$)\",\n \"model\": \"Iris 52\"\n },\n {\n \"regex\": \"LN9910(?:[);/ ]|$)\",\n \"model\": \"Z41\"\n },\n {\n \"regex\": \"LE9910(?:[);/ ]|$)\",\n \"model\": \"V8\"\n },\n {\n \"regex\": \"LH9920(?:[);/ ]|$)\",\n \"model\": \"V+6\"\n },\n {\n \"regex\": \"DISCOVER136\",\n \"device\": \"feature phone\",\n \"model\": \"Discover 136\"\n },\n {\n \"regex\": \"KKT QUADRA\",\n \"device\": \"feature phone\",\n \"model\": \"KKT Quadra\"\n },\n {\n \"regex\": \"KKT40[ ]?Power[P\\\\+]\",\n \"device\": \"feature phone\",\n \"model\": \"KKT40 Power Plus\"\n },\n {\n \"regex\": \"Ivory(S1|S4G)?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Ivory $1\"\n },\n {\n \"regex\": \"iris[ _]?([^/;]+)(?:\\\\)| Build)\",\n \"model\": \"Iris $1\"\n },\n {\n \"regex\": \"Lava[ _]?([^/;]+)(?:/| Build)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"SKG\": {\n \"regex\": \"(Modern[ _](?:S10?|S[3679]))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Landvo\": {\n \"regex\": \"XM[123]00|(?<!Blade )S6 Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"S6 Build\",\n \"model\": \"S6\"\n },\n {\n \"regex\": \"XM([123])00([^/;]*) Build\",\n \"model\": \"XM$100$2\"\n }\n ]\n },\n \"Land Rover\": {\n \"regex\": \"Land[ ]?Rover[d]?[ _-](?:X1[0-9]|Explore|T878|L15\\\\+|V18|V[168]|X)(?:[);/ ]|$)|Polar3\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Land[ ]?Rover[d]?[ _-](X1[0-9]|Explore|T878|L15\\\\+|V18|V[168]|X)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Polar3\",\n \"model\": \"Ioutdoor Polar 3\"\n }\n ]\n },\n \"Lanix\": {\n \"regex\": \"LANIX-([a-z0-9]+)|Ilium[ _]|IliumPad|X120C|Alpha 950\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ILIUM[ _]?PAD[ _]?([^;/]+)(?: Build|[;)])\",\n \"model\": \"Ilium Pad $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"X120C\",\n \"model\": \"Ilium X120C\"\n },\n {\n \"regex\": \"Ilium[ _](Alpha [15]s|Alpha [379]|L(?:200|6[12]0|9[0125]0|1[0124]00|1050|1120)|LT5[012]0|M[13579]|S(?:106|520|6[27]0)|X(?:1[12]0|2[0126]0|5[12]0|500B|710)|M[579]s)(?:[);/ ]|$)\",\n \"model\": \"Ilium $1\"\n },\n {\n \"regex\": \"ILIUM[ _]([^;/]+) Build\",\n \"model\": \"Ilium $1\"\n },\n {\n \"regex\": \"Alpha 950\",\n \"model\": \"Ilium Alpha 950\"\n },\n {\n \"regex\": \"LANIX-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Lark\": {\n \"regex\": \"(Lark|Cumulus|Evolution|FreeMe|Ultimate (?:X4|7i))[ _-]|Build/Lark|Bjorn[_ ]SP-500|FreeBird 5WiFi\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Cumulus[ _](5\\\\.5|[56])[ _]HD\",\n \"model\": \"Cumulus $1 HD\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"FreeMe X2 ([79]) (?:ver|v)?\\\\.([23])\",\n \"model\": \"FreeMe X2 $1 Version $2\"\n },\n {\n \"regex\": \"FreeMe X4 7 3G HD\",\n \"model\": \"FreeMe X4 7HD 3G\"\n },\n {\n \"regex\": \"FreeMe[ _]X2[ _]([7-9])\",\n \"model\": \"FreeMe X2 $1\"\n },\n {\n \"regex\": \"FreeMe X4[ _]7[_ ]HD\",\n \"model\": \"FreeMe X4 7HD\"\n },\n {\n \"regex\": \"FreeMe X4[ _]9\",\n \"model\": \"FreeMe X4 9\"\n },\n {\n \"regex\": \"FreeBird 5WiFi\",\n \"model\": \"FreeBird 5 WiFi\"\n },\n {\n \"regex\": \"(?:Lark[ _-])?Evolution[ _](X2 7 3G-GPS|X4[_ ]10\\\\.1|10|X4[_ ]7[ _]IPS)\",\n \"model\": \"Evolution $1\"\n },\n {\n \"regex\": \"Ul(?:ti|it)mate (X4 10\\\\.1 3G IPS|X4 8s 3G|7i)\",\n \"model\": \"Ultimate $1\"\n },\n {\n \"regex\": \"PHABLET 7\",\n \"model\": \"Phablet 7\"\n },\n {\n \"regex\": \"Phablet 6\\\\.0\",\n \"model\": \"Phablet 6.0\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Bjorn[_ ]SP-500\",\n \"model\": \"Bjorn SP-500\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Cirrus[ _](4\\\\.5|[45])\",\n \"model\": \"Cirrus $1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Lark[ _](Stratus[_ ]5)\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"LCT\": {\n \"regex\": \"LCT_([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Le Pan\": {\n \"regex\": \"Le ?Pan|TC970 ([^;/]+)Build\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TC802A\",\n \"model\": \"Le Pan Mini\"\n },\n {\n \"regex\": \"TC970 ([^;/]+)Build\",\n \"model\": \"TC970 $1\"\n },\n {\n \"regex\": \"Le ?Pan ?(II|S)(?:[);/ ]|$)\",\n \"model\": \"Le Pan $1\"\n },\n {\n \"regex\": \"Le ?Pan ?([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Leagoo\": {\n \"regex\": \"(?:MY)?LEAGOO[ _-]?|(?:M5 EDGE|KIICAA (POWER|MIX)|Leapad[ _](?:X|7s)|Elite [15]|Venture 1|Z10-E)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"LEAGOO[- _]M8[_-]?Pro(?:[);/ ]|$)\",\n \"model\": \"M8 Pro\"\n },\n {\n \"regex\": \"LEAGOO[- _](Z[156]|M[58]|T1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"M5 EDGE\",\n \"model\": \"M5 Edge\"\n },\n {\n \"regex\": \"LEAGOO[_ ]Lead([57])\",\n \"model\": \"Lead $1\"\n },\n {\n \"regex\": \"KIICAA POWER\",\n \"model\": \"KICCAA Power\"\n },\n {\n \"regex\": \"KIICAA MIX\",\n \"model\": \"KICCAA Mix\"\n },\n {\n \"regex\": \"Elite ([15])(?:[);/ ]|$)\",\n \"model\": \"Elite $1\"\n },\n {\n \"regex\": \"Venture 1(?:[);/ ]|$)\",\n \"model\": \"Venture 1\"\n },\n {\n \"regex\": \"(?:LEAGOO[- _])?(Z10-E|M6)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:My)?Leagoo[- _](E4)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:Leapad[ _])(7s|10|X)\",\n \"model\": \"LeaPad $1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Ledstar\": {\n \"regex\": \"(?:Ledstar[_ ])?(?:Trendy 5.0|Novus_Premium_6.0)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Trendy 5.0\",\n \"model\": \"Trendy 5.0\"\n },\n {\n \"regex\": \"Ledstar_Novus_Premium_6.0(?:[);/ ]|$)\",\n \"model\": \"Novus Premium 6.0\\\"\"\n }\n ]\n },\n \"LeEco\": {\n \"regex\": \"Letv|LeEco|Le ?X[0-9][^;/]+|Le Max|Le [12]|Le2[_ ]x527|X900 Build|(?:X[89]00\\\\+|X52[67])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"X800\\\\+\",\n \"model\": \"Le 1 Pro\"\n },\n {\n \"regex\": \"X900\\\\+\",\n \"model\": \"Max X900+\"\n },\n {\n \"regex\": \"X50[10]\",\n \"model\": \"Le 1S\"\n },\n {\n \"regex\": \"(X910)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"X900 Build\",\n \"model\": \"Le X900\"\n },\n {\n \"regex\": \"(?:Le ?X526|Le2[_ ]x527|Le 2|X52[67])(?:[);/ ]|$)\",\n \"model\": \"Le 2\"\n },\n {\n \"regex\": \"Le ?X([^;/]+) Build\",\n \"model\": \"Le X$1\"\n },\n {\n \"regex\": \"Le ?X([^) ;/]+)\",\n \"model\": \"Le X$1\"\n },\n {\n \"regex\": \"Le ?([12][^;/]+) Build\",\n \"model\": \"Le $1\"\n },\n {\n \"regex\": \"Le Max([^;/]*) Build\",\n \"model\": \"Le Max$1\"\n },\n {\n \"regex\": \"Le Max([^ ;/]*)\",\n \"model\": \"Le Max$1\"\n },\n {\n \"regex\": \"LeEco ([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Leotec\": {\n \"regex\": \"LESPH501[14]|LESPH5003B|SUPERNOVA (Qi16|Qi32|i3G96[X]?)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"LESPH5011\",\n \"model\": \"Argon e250\"\n },\n {\n \"regex\": \"LESPH5003B\",\n \"model\": \"Argon A250B\"\n },\n {\n \"regex\": \"LESPH5014\",\n \"model\": \"Krypton K150\"\n },\n {\n \"regex\": \"SUPERNOVA (Qi16|Qi32|i3G96[X]?)\",\n \"device\": \"tablet\",\n \"model\": \"Supernova $1\"\n }\n ]\n },\n \"Lephone\": {\n \"regex\": \"lephone[ _]|lephoneP1\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"lephone[ _](K7|K10)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"lephone(?:[ _])?(W(1[0125]|[279])|T2|P1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"lephone_W7_plus\",\n \"model\": \"W7 Plus\"\n }\n ]\n },\n \"Lenco\": {\n \"regex\": \"Lenco ([^/;]*) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Lenovo\": {\n \"regex\": \"(?:LNV-)?Lenovo|IdeaTab|IdeaPad|Thinkpad|Yoga Tablet|Tab2A[0-9]-[0-9]{2}[a-z]?|ZUK[ -_]|(?:TB2-X30L|TB3-710I|YT3-X50[ML]|K50a40|TB-(?:X103F|8504F|X304F|X704V|X704A)|A5500-H|A2107A-H|A3500-HV|A2109A|S6000|Z2 Plus|Vibe[ _](?:P1|S6i Plus|S[23567]i|C|[ZX]2|K5(?: Plus)?|V7)|P2A42|L38011|L18011|[5-8]01LV|[67]02LV|Z2131|K350t|K31-t3|TAB 2 A8-50LC|S90-A|P70-A|VR-1541F)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Lenovo ?G780\",\n \"model\": \"G780\",\n \"device\": \"desktop\"\n },\n {\n \"regex\": \"Lenovo ?A3500-FL\",\n \"model\": \"IdeaTab A7-40\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Lenovo ?)?A3500-(?:H|HV|F)\",\n \"model\": \"IdeaTab A7-50\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Lenovo[ _])?A5500-[HF]\",\n \"model\": \"IdeaTab A8-50\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Lenovo ?A7600-[HF]\",\n \"model\": \"IdeaTab A10-70\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A2107A-H\",\n \"model\": \"A2107\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"A2109A\",\n \"model\": \"IdeaTab A2109A\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB2-X30[FL]\",\n \"model\": \"Tab 2 A10-30\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"YT3-X50[FLM]\",\n \"model\": \"Yoga Tab 3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB3-730X\",\n \"model\": \"TAB3 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB3-710[IF]\",\n \"model\": \"TAB3 7 Essential\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-7703X\",\n \"model\": \"TAB3 7 Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB3-X70L\",\n \"model\": \"TAB3 10 Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-8703X\",\n \"model\": \"TAB3 8 Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TAB 2 A8-50LC\",\n \"model\": \"TAB2 A8-50LC\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"501LV(?:[);/ ]|$)\",\n \"model\": \"TAB2 8.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TAB 2 A10-70L(?:[);/ ]|$)\",\n \"model\": \"TAB 2 A10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:TB3-850[FM]|601LV)(?:[);/ ]|$)\",\n \"model\": \"TAB3 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"602LV(?:[);/ ]|$)\",\n \"model\": \"TAB3 8 Dual\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X304[FL]\",\n \"model\": \"TAB4 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-8504X\",\n \"model\": \"TAB4 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-8704X\",\n \"model\": \"TAB4 8 Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:TB-X704[FVL]|70[12]LV)(?:[);/ ]|$)\",\n \"model\": \"TAB4 10 Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"801LV(?:[);/ ]|$)\",\n \"model\": \"TAB5 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X103F(?:[);/ ]|$)\",\n \"model\": \"TAB10 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X704A(?:[);/ ]|$)\",\n \"model\": \"Moto Tab\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X605F(?:[);/ ]|$)\",\n \"model\": \"Tab M10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X705F(?:[);/ ]|$)\",\n \"model\": \"Tab P10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X705F(?:[);/ ]|$)\",\n \"model\": \"Tab P10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-7104I(?:[);/ ]|$)\",\n \"model\": \"Tab E7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-8304F1(?:[);/ ]|$)\",\n \"model\": \"Tab E8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-7304X(?:[);/ ]|$)\",\n \"model\": \"Tab 7 Essential\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-7504X(?:[);/ ]|$)\",\n \"model\": \"Tab 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X606[FXV](?:[);/ ]|$)\",\n \"model\": \"Tab M10 FHD Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Lenovo ?B8000(-[FH])?\",\n \"model\": \"Yoga Tablet 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"YOGA Tablet 2 Pro-1380[FL]\",\n \"model\": \"Yoga Tablet 2 Pro 13.3\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"YOGA Tablet 2-1050[FL]\",\n \"model\": \"Yoga Tablet 2 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"YOGA Tablet 2-830(?:[FL]|LC)\",\n \"model\": \"Yoga Tablet 2 8.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Lenovo ?B6000(-[FH])?\",\n \"model\": \"Yoga Tablet 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"YT3-X90(L|F|X)\",\n \"model\": \"Yoga 3 Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"YT3-850[FL]\",\n \"model\": \"Yoga Tab 3 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"YT3-850M\",\n \"model\": \"Yoga Tab 3 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"YT-X703L\",\n \"model\": \"Yoga Tab 3 Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"S6000(?:[);/ ]|$)\",\n \"model\": \"IdeaTab S6000\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Lenovo ([ASB][0-9]{4})[A-Z]?\\\\-[EHF]\",\n \"model\": \"IdeaTab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ThinkPadTablet_(A[0-9]{3})_\",\n \"model\": \"ThinkPad Tablet $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ThinkPad ?Tablet([^;/]*) Build\",\n \"model\": \"ThinkPad Tablet$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Lenovo ?A3300-(?:GV|H)\",\n \"model\": \"TAB 2 A7-30\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TAB 2 A7-30[HGD]C\",\n \"model\": \"TAB 2 A7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-8504F\",\n \"model\": \"TAB 4 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X304X\",\n \"model\": \"Tab 4 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X304X\",\n \"model\": \"Tab 4 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X304F\",\n \"model\": \"TAB4 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X505[FX]\",\n \"model\": \"M10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-X104[FXL]\",\n \"model\": \"E10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Tab2A([0-9]-[0-9]{2}[a-z]?)\",\n \"model\": \"TAB 2 A$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IdeaTab[ \\\\-_]?([a-z0-9]+)\",\n \"model\": \"IdeaTab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Yoga Tablet([^;/]+) Build\",\n \"model\": \"Yoga Tablet$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-8505F\",\n \"model\": \"Tab M8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-8705F\",\n \"model\": \"Tab M8 FHD\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TB-8705F\",\n \"model\": \"Tab M8 FHD\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Lenovo (TB[0-9]?\\\\-[a-z0-9\\\\-]+) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"L18011(?:[);/ ]|$)\",\n \"model\": \"A5\"\n },\n {\n \"regex\": \"Z2 Plus\",\n \"model\": \"Z2 Plus\"\n },\n {\n \"regex\": \"Z2151\",\n \"model\": \"ZUK Edge\"\n },\n {\n \"regex\": \"Z213[12]\",\n \"model\": \"ZUK Z2\"\n },\n {\n \"regex\": \"Z2121\",\n \"model\": \"ZUK Z2 Pro\"\n },\n {\n \"regex\": \"ZUK[ -_]([^/;]*)(?: Build|\\\\))\",\n \"model\": \"ZUK $1\"\n },\n {\n \"regex\": \"K10a40(?:[);/ ]|$)\",\n \"model\": \"C2\"\n },\n {\n \"regex\": \"k50a40(?:[);/ ]|$)\",\n \"model\": \"K3 Note\"\n },\n {\n \"regex\": \"A7010a48(?:[);/ ]|$)\",\n \"model\": \"K4 Note\"\n },\n {\n \"regex\": \"K350t(?:[);/ ]|$)\",\n \"model\": \"K5\"\n },\n {\n \"regex\": \"L38011(?:[);/ ]|$)\",\n \"model\": \"K5 Play\"\n },\n {\n \"regex\": \"A7020a4[08](?:[);/ ]|$)\",\n \"model\": \"K5 Note\"\n },\n {\n \"regex\": \"K31-t3(?:[);/ ]|$)\",\n \"model\": \"K31\"\n },\n {\n \"regex\": \"(?:A6020a46|Vibe K5 Plus)(?:[);/ ]|$)\",\n \"model\": \"Vibe K5 Plus\"\n },\n {\n \"regex\": \"(?:Lenovo-)?(?:A6020(?:a40|l36)|Vibe K5)(?:[);/ ]|$)\",\n \"model\": \"Vibe K5\"\n },\n {\n \"regex\": \"VIBE Z2(?:[);/ ]|$)\",\n \"model\": \"Vibe Z2\"\n },\n {\n \"regex\": \"VIBE C(?:[);/ ]|$)\",\n \"model\": \"Vibe C\"\n },\n {\n \"regex\": \"VIBE X2(?:[);/ ]|$)\",\n \"model\": \"Vibe X2\"\n },\n {\n \"regex\": \"VIBE V7(?:[);/ ]|$)\",\n \"model\": \"Vibe V7\"\n },\n {\n \"regex\": \"VIBE S6i Plus(?:[);/ ]|$)\",\n \"model\": \"Vibe S6i Plus\"\n },\n {\n \"regex\": \"VIBE[ _]S([23567])i(?:[);/ ]|$)\",\n \"model\": \"Vibe S$1i\"\n },\n {\n \"regex\": \"k33a48(?:[);/ ]|$)\",\n \"model\": \"K6\"\n },\n {\n \"regex\": \"P2A42(?:[);/ ]|$)\",\n \"model\": \"P2\"\n },\n {\n \"regex\": \"k53a48(?:[);/ ]|$)\",\n \"model\": \"K6 Note\"\n },\n {\n \"regex\": \"K33a42(?:[);/ ]|$)\",\n \"model\": \"K6 Power\"\n },\n {\n \"regex\": \"P1ma40(?:[);/ ]|$)\",\n \"model\": \"Vibe P1m\"\n },\n {\n \"regex\": \"Vibe P1 Turbo(?:[);/ ]|$)\",\n \"model\": \"Vibe P1 Turbo\"\n },\n {\n \"regex\": \"(?:P1(?:a42|c72)|Vibe P1)(?:[);/ ]|$)\",\n \"model\": \"Vibe P1\"\n },\n {\n \"regex\": \"A2016a40(?:[);/ ]|$)\",\n \"model\": \"Vibe B\"\n },\n {\n \"regex\": \"A1010a20(?:[);/ ]|$)\",\n \"model\": \"A Plus\"\n },\n {\n \"regex\": \"Z90a40(?:[);/ ]|$)\",\n \"model\": \"Vibe Shot\"\n },\n {\n \"regex\": \"S1a40(?:[);/ ]|$)\",\n \"model\": \"Vibe S1\"\n },\n {\n \"regex\": \"L78071(?:[);/ ]|$)\",\n \"model\": \"Z5s\"\n },\n {\n \"regex\": \"L58041(?:[);/ ]|$)\",\n \"model\": \"S5 Pro\"\n },\n {\n \"regex\": \"L18021(?:[);/ ]|$)\",\n \"model\": \"A3\"\n },\n {\n \"regex\": \"PB2-670M(?:[);/ ]|$)\",\n \"model\": \"Phab 2\"\n },\n {\n \"regex\": \"(S90-A|P70-A)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"IdeaPad ?([^;/]*) Build\",\n \"model\": \"IdeaPad $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VR-1541F\",\n \"device\": \"wearable\",\n \"model\": \"Mirage Solo\"\n },\n {\n \"regex\": \"LENOVO/81W8(?:[);/ ]|$)\",\n \"device\": \"desktop\",\n \"model\": \"IdeaPad S145-15IIL\"\n },\n {\n \"regex\": \"LENOVO/81MV(?:[);/ ]|$)\",\n \"device\": \"desktop\",\n \"model\": \"IdeaPad S145-15IWL\"\n },\n {\n \"regex\": \"LENOVO/81SS(?:[);/ ]|$)\",\n \"device\": \"desktop\",\n \"model\": \"Flex 14API 81SS\"\n },\n {\n \"regex\": \"Lenovo TAB ?([^/;]*) Build\",\n \"model\": \"TAB $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Lenovo ([^/;]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:LNV-|Lenovo-)?Lenovo[ \\\\-_]?([a-z0-9_+\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Lexand\": {\n \"regex\": \"(?:SC7 PRO HD|S5A[1-4]|S4A[1-5]|S6A1|A811|A802)(?:[);/ ]|$)|Lexand ([^;/]+) Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"A(811|802)\",\n \"device\": \"tablet\",\n \"model\": \"A$1\"\n },\n {\n \"regex\": \"S4A1\",\n \"model\": \"Vega\"\n },\n {\n \"regex\": \"S4A2\",\n \"model\": \"Irida\"\n },\n {\n \"regex\": \"S4A3\",\n \"model\": \"Pallada\"\n },\n {\n \"regex\": \"S4A5\",\n \"model\": \"Oxygen\"\n },\n {\n \"regex\": \"S4A4 NEON\",\n \"model\": \"S4A4 Neon\"\n },\n {\n \"regex\": \"S5A1\",\n \"model\": \"Callisto\"\n },\n {\n \"regex\": \"S5A2\",\n \"model\": \"Overon\"\n },\n {\n \"regex\": \"S5A3\",\n \"model\": \"Capella\"\n },\n {\n \"regex\": \"S5A4\",\n \"model\": \"Argon\"\n },\n {\n \"regex\": \"S6A1\",\n \"model\": \"Antares\"\n },\n {\n \"regex\": \"SC7 PRO HD\",\n \"model\": \"SC7 PRO HD\"\n },\n {\n \"regex\": \"Lexand ([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Lexibook\": {\n \"regex\": \"(MFC[0-9]{3}[a-z]{2,})\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"MFC191FR\",\n \"model\": \"Tablet Ultra 3 XL\"\n },\n {\n \"regex\": \"MFC045FR\",\n \"model\": \"TabTab\"\n },\n {\n \"regex\": \"MFC163FR\",\n \"model\": \"Tablet Master 3\"\n },\n {\n \"regex\": \"MFC142FR\",\n \"model\": \"Tablet Kids\"\n },\n {\n \"regex\": \"MFC250FR\",\n \"model\": \"Tablet Junior\"\n },\n {\n \"regex\": \"MFC270FR\",\n \"model\": \"Tablet Junior Power Touch\"\n },\n {\n \"regex\": \"MFC280FR\",\n \"model\": \"Tablet Junior 2\"\n },\n {\n \"regex\": \"MFC156FR\",\n \"model\": \"Tablet One\"\n },\n {\n \"regex\": \"MFC155FR\",\n \"model\": \"Tablet Master\"\n },\n {\n \"regex\": \"MFC157FR\",\n \"model\": \"Tablet Master 2\"\n },\n {\n \"regex\": \"MFC17[05]FR\",\n \"model\": \"Tablet Ultra\"\n },\n {\n \"regex\": \"MFC375FR\",\n \"model\": \"Tablet Ultra 2\"\n },\n {\n \"regex\": \"MFC162FR\",\n \"model\": \"Power Tablet\"\n },\n {\n \"regex\": \"MFC180FR\",\n \"model\": \"Tablet Advanced\"\n },\n {\n \"regex\": \"MFC181FR\",\n \"model\": \"Tablet Advanced 2\"\n },\n {\n \"regex\": \"MFC500FR\",\n \"model\": \"Tablet XL\"\n },\n {\n \"regex\": \"MFC190BBFR\",\n \"model\": \"Barbie Tablet\"\n },\n {\n \"regex\": \"MFC195DCFR\",\n \"model\": \"Tablet Disney Cars HD\"\n },\n {\n \"regex\": \"MFC195FUFR\",\n \"model\": \"Furby Tablet\"\n },\n {\n \"regex\": \"MFC195DPFR\",\n \"model\": \"Tablet Disney Princesse HD\"\n },\n {\n \"regex\": \"MFC140FR\",\n \"model\": \"LapTab\"\n },\n {\n \"regex\": \"MFC141FR\",\n \"model\": \"LapTab 2\"\n },\n {\n \"regex\": \"(MFC[0-9]{3}[a-z]{2,})\",\n \"model\": \"$1\"\n }\n ]\n },\n \"LG\": {\n \"regex\": \"LG|Web0S; Linux/SmartTV|portalmmm/2\\\\.0 (?:KE|KG|KP|L3)|(?:VX[0-9]+|L-0[12]D|L-07C|P713|(LM-[A-Z][0-9]{3}[A-Z]{0,3}(?:\\\\(FGN?\\\\)|\\\\(G\\\\)|\\\\.FN|\\\\.F(?:GN?)?)?)|LM-(X625N1|G820QM[0127]))(?:[);/ ]|$)|NetCast|RS98[78]|RS500|VS(?:50[01]|835|876|880|98[0578]|99[056]|(410|415|425|500|880)PP)|VS820|VS870 4G|Nexsus 5|LML(41[34]D|211B|713D|212V)L|VK810 4G|VK815|X5-LG|L-05[DE]|L-03K|L-01[LJK]|L-52A|L-[45]1A|901LG|A001LG|80[12]LG|402LG|LGT32|L-02K|L-01F|LM-V40|DM-01K|LMX130IM\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"DM-01K\",\n \"model\": \"Disney Mobile DM-01K\"\n },\n {\n \"regex\": \"LG-D325\",\n \"model\": \"L70\"\n },\n {\n \"regex\": \"LG-D340F8\",\n \"model\": \"L70 Tri\"\n },\n {\n \"regex\": \"LM-X210APM\",\n \"model\": \"Phoenix 4\"\n },\n {\n \"regex\": \"LG-P505R\",\n \"model\": \"Phoenix\"\n },\n {\n \"regex\": \"LM-X210VPP\",\n \"model\": \"Zone 4\"\n },\n {\n \"regex\": \"LM-X220PM\",\n \"model\": \"Tribute Empire\"\n },\n {\n \"regex\": \"VS980|L-01F\",\n \"model\": \"G2\"\n },\n {\n \"regex\": \"LG-D6(?:18|20)\",\n \"model\": \"G2 Mini\"\n },\n {\n \"regex\": \"LG-D85[01258]|VS985\",\n \"model\": \"G3\"\n },\n {\n \"regex\": \"LG-D72[2458]\",\n \"model\": \"G3 Beat\"\n },\n {\n \"regex\": \"LG-H81[158]\",\n \"model\": \"G4\"\n },\n {\n \"regex\": \"LG-H525n?\",\n \"model\": \"G4c\"\n },\n {\n \"regex\": \"LG-(?:H540|H542|H630)\",\n \"model\": \"G4 Stylus\"\n },\n {\n \"regex\": \"LG-H736\",\n \"model\": \"G4s\"\n },\n {\n \"regex\": \"LG-H735\",\n \"model\": \"G4 Beat\"\n },\n {\n \"regex\": \"LG-H8(?:20|3[01]|5[08]|6[08])|VS987|RS988\",\n \"model\": \"G5\"\n },\n {\n \"regex\": \"LG-H84[05]\",\n \"model\": \"G5 SE\"\n },\n {\n \"regex\": \"VS988|LG-H87(?:0DS|3)\",\n \"model\": \"G6\"\n },\n {\n \"regex\": \"LM-Q850\",\n \"model\": \"G7 Fit\"\n },\n {\n \"regex\": \"LM-Q910\",\n \"model\": \"G7 One\"\n },\n {\n \"regex\": \"LM-G820(N|QM[0127]|UMB)?\",\n \"model\": \"G8\"\n },\n {\n \"regex\": \"LM-G850\",\n \"model\": \"G8X ThinQ\"\n },\n {\n \"regex\": \"LM-G810\",\n \"model\": \"G8S ThinQ\"\n },\n {\n \"regex\": \"901LG(?:[);/ ]|$)\",\n \"model\": \"G8X ThinQ\"\n },\n {\n \"regex\": \"VS501|LM-X120\",\n \"model\": \"K20\"\n },\n {\n \"regex\": \"(?:LG-)?H502\",\n \"model\": \"Magna\"\n },\n {\n \"regex\": \"(?:LG-)?H343\",\n \"model\": \"Risio\"\n },\n {\n \"regex\": \"(?:LG-)?H650\",\n \"model\": \"Zero\"\n },\n {\n \"regex\": \"(?:LG-)?M154\",\n \"model\": \"Risio 2\"\n },\n {\n \"regex\": \"(?:LG-)?P500H\",\n \"model\": \"Optimus One\"\n },\n {\n \"regex\": \"(L-05[DE])(?:[);/ ]|$)\",\n \"model\": \"Optimus it $1\"\n },\n {\n \"regex\": \"LG-L160L(?:[);/ ]|$)\",\n \"model\": \"Optimus LTE 2\"\n },\n {\n \"regex\": \"P713(?:[);/ ]|$)\",\n \"model\": \"Optimus L7II\"\n },\n {\n \"regex\": \"L-01D(?:[);/ ]|$)\",\n \"model\": \"Optimus LTE L-01D\"\n },\n {\n \"regex\": \"L-02D(?:[);/ ]|$)\",\n \"model\": \"PRADA phone L-02D\"\n },\n {\n \"regex\": \"L-07C\",\n \"model\": \"Optimus Bright L-07C\"\n },\n {\n \"regex\": \"(?:LG-)?F800(?:S|K|L)?\",\n \"model\": \"V20\"\n },\n {\n \"regex\": \"LM-Q710(?:\\\\(FGN\\\\)|[\\\\.]?FGN)\",\n \"model\": \"Q Stylus Plus\"\n },\n {\n \"regex\": \"801LG\",\n \"model\": \"Q Stylus\"\n },\n {\n \"regex\": \"LM-Q[67]10\\\\.FG(?:[);/ ]|$)\",\n \"model\": \"Q7\"\n },\n {\n \"regex\": \"LM-(Q725[KL]|Q610.FGN)(?:[);/ ]|$)\",\n \"model\": \"Q7+\"\n },\n {\n \"regex\": \"LM-Q815[SL](?:[);/ ]|$)\",\n \"model\": \"Q8+\"\n },\n {\n \"regex\": \"LM-Q925L(?:[);/ ]|$)\",\n \"model\": \"Q9\"\n },\n {\n \"regex\": \"LM-Q730N(?:[);/ ]|$)\",\n \"model\": \"Q70\"\n },\n {\n \"regex\": \"LGV33(?:[);/ ]|$)\",\n \"model\": \"Qua Phone PX\"\n },\n {\n \"regex\": \"L-03K(?:[);/ ]|$)\",\n \"model\": \"Style\"\n },\n {\n \"regex\": \"L-01L(?:[);/ ]|$)\",\n \"model\": \"Style 2\"\n },\n {\n \"regex\": \"VS835(?:[);/ ]|$)\",\n \"model\": \"Stylo 2 V\"\n },\n {\n \"regex\": \"L-41A(?:[);/ ]|$)\",\n \"model\": \"Style 3\"\n },\n {\n \"regex\": \"LM-Q710|LML713DL\",\n \"model\": \"Stylo 4\"\n },\n {\n \"regex\": \"(?:LM-Q720|LGL722DL)(?:[);/ ]|$)\",\n \"model\": \"Stylo 5\"\n },\n {\n \"regex\": \"LM-Q730(?:[);/ ]|$)\",\n \"model\": \"Stylo 6\"\n },\n {\n \"regex\": \"LM-G710(N|VM)?\",\n \"model\": \"G7 ThinQ\"\n },\n {\n \"regex\": \"LM-X210CM\",\n \"model\": \"Fortune 2\"\n },\n {\n \"regex\": \"LM-X410\\\\.F(?:[);/ ]|$)\",\n \"model\": \"Premier Pro\"\n },\n {\n \"regex\": \"LML41[34]DL(?:[);/ ]|$)\",\n \"model\": \"Premier Pro LTE\"\n },\n {\n \"regex\": \"LM-X525\",\n \"model\": \"Q60\"\n },\n {\n \"regex\": \"LM-X210K\",\n \"model\": \"X2\"\n },\n {\n \"regex\": \"LG-K580\",\n \"model\": \"X Cam\"\n },\n {\n \"regex\": \"LM-X510WM\",\n \"model\": \"X Power 3\"\n },\n {\n \"regex\": \"LM-X(?:41[05]K|410S)\",\n \"model\": \"X4\"\n },\n {\n \"regex\": \"LM-X(415[LS]|410L)\",\n \"model\": \"X4+\"\n },\n {\n \"regex\": \"LM-X410(?:\\\\.FN|\\\\(FG\\\\))\",\n \"model\": \"K11\"\n },\n {\n \"regex\": \"LM-X(?:320|410[UP]M)\",\n \"model\": \"K30\"\n },\n {\n \"regex\": \"LMX130IM\",\n \"model\": \"W10\"\n },\n {\n \"regex\": \"LM-X410\",\n \"model\": \"LM-X410\"\n },\n {\n \"regex\": \"LM-X420N\",\n \"model\": \"X4 (2019)\"\n },\n {\n \"regex\": \"LG-X230\",\n \"model\": \"K4\"\n },\n {\n \"regex\": \"LM-X420\",\n \"model\": \"K40\"\n },\n {\n \"regex\": \"LM-X430(?:[);/ ]|$)\",\n \"model\": \"K40S\"\n },\n {\n \"regex\": \"LG-X220\",\n \"model\": \"K5\"\n },\n {\n \"regex\": \"LM-X540\",\n \"model\": \"K50S\"\n },\n {\n \"regex\": \"(?:802LG|LM-X520)(?:[);/ ]|$)\",\n \"model\": \"K50\"\n },\n {\n \"regex\": \"402LG\",\n \"model\": \"Spray\"\n },\n {\n \"regex\": \"L-02K\",\n \"model\": \"JoJo\"\n },\n {\n \"regex\": \"(?:LM-X510[KLS]|X5-LG)\",\n \"model\": \"X5\"\n },\n {\n \"regex\": \"LM-X625N1\",\n \"model\": \"X6\"\n },\n {\n \"regex\": \"LM-X625N\",\n \"model\": \"X6 (2019)\"\n },\n {\n \"regex\": \"LGMS210\",\n \"model\": \"Aristo\"\n },\n {\n \"regex\": \"LM-X210[G]?\",\n \"model\": \"Aristo 2\"\n },\n {\n \"regex\": \"LM-X220\",\n \"model\": \"Aristo 3\"\n },\n {\n \"regex\": \"LM-V40(?:5|9N)?(?:[);/ ]|$)\",\n \"model\": \"V40 ThinQ\"\n },\n {\n \"regex\": \"LM-(?:V500N|V450)(?:[);/ ]|$)\",\n \"model\": \"V50 ThinQ\"\n },\n {\n \"regex\": \"LM-V510N\",\n \"model\": \"V50S ThinQ\"\n },\n {\n \"regex\": \"LM-Q920N\",\n \"model\": \"Q92\"\n },\n {\n \"regex\": \"LM-Q927L\",\n \"model\": \"Q9 One\"\n },\n {\n \"regex\": \"(?:LG-)?(?:RS987|H901|H96[0128]|VS990)\",\n \"model\": \"V10\"\n },\n {\n \"regex\": \"LG-X240\",\n \"model\": \"K8 (2017)\"\n },\n {\n \"regex\": \"(?:LG-)?RS500\",\n \"model\": \"K8 4G\"\n },\n {\n \"regex\": \"(?:LG-)?VS500\",\n \"model\": \"K8 V\"\n },\n {\n \"regex\": \"LM-X212\\\\(G\\\\)\",\n \"model\": \"K8 (2018)\"\n },\n {\n \"regex\": \"(?:LG-)?H91[058]\",\n \"model\": \"V20\"\n },\n {\n \"regex\": \"(?:LG-)?H990(?:DS|N|T)?\",\n \"model\": \"V20\"\n },\n {\n \"regex\": \"(?:LG-)?LS997\",\n \"model\": \"V20\"\n },\n {\n \"regex\": \"(?:LG-)?VS995\",\n \"model\": \"V20\"\n },\n {\n \"regex\": \"(?:LG-)?US999\",\n \"model\": \"V20\"\n },\n {\n \"regex\": \"(?:VS996|LG-(?:H933|H93[012]|H932PR|[LU]S998|AS998)|LGM-V300[KLS])(?:[);/ ]|$)\",\n \"model\": \"V30\"\n },\n {\n \"regex\": \"L-01J(?:[);/ ]|$)\",\n \"model\": \"V20 Pro\"\n },\n {\n \"regex\": \"(?:L-01K|LGV35)(?:[);/ ]|$)\",\n \"model\": \"V30 Plus\"\n },\n {\n \"regex\": \"L-51A(?:[);/ ]|$)\",\n \"model\": \"V60\"\n },\n {\n \"regex\": \"(?:L-52A|LM-G900N?)(?:[);/ ]|$)\",\n \"model\": \"Velvet 5G\"\n },\n {\n \"regex\": \"(?:LM-G910)(?:[);/ ]|$)\",\n \"model\": \"Velvet 4G\"\n },\n {\n \"regex\": \"(?:A001LG|LM-V600)(?:[);/ ]|$)\",\n \"model\": \"V60 ThinQ 5G\"\n },\n {\n \"regex\": \"(?:LG-)?VS410PP\",\n \"model\": \"Optimus Zone\"\n },\n {\n \"regex\": \"LM-V350[N]?\",\n \"model\": \"V35\"\n },\n {\n \"regex\": \"(?:LG-)?VS415PP\",\n \"model\": \"Optimus Zone 2\"\n },\n {\n \"regex\": \"(?:LG-)?VS425PP\",\n \"model\": \"Optimus Zone 3\"\n },\n {\n \"regex\": \"(?:LG-)?K100\",\n \"model\": \"K3\"\n },\n {\n \"regex\": \"(?:LG-?)?(?:K|MS)33[02]\",\n \"model\": \"K7\"\n },\n {\n \"regex\": \"(?:LG-?)?(?:K|MS)350\",\n \"model\": \"K8\"\n },\n {\n \"regex\": \"VS500PP\",\n \"model\": \"K8 V\"\n },\n {\n \"regex\": \"(?:LG-)?K420(?:N)?\",\n \"model\": \"K10\"\n },\n {\n \"regex\": \"(?:LG-)?K430(?:DS|DSF|DSY)?\",\n \"model\": \"K10\"\n },\n {\n \"regex\": \"(?:LG-)?M250N?\",\n \"model\": \"K10 (2017)\"\n },\n {\n \"regex\": \"(?:LG-)?F670[KLS]?\",\n \"model\": \"K10\"\n },\n {\n \"regex\": \"(?:LG-)?M255\",\n \"model\": \"K20\"\n },\n {\n \"regex\": \"(?:LG-?)?[MT]P260\",\n \"model\": \"K20 Plus\"\n },\n {\n \"regex\": \"LM-K200(?:[);/ ]|$)\",\n \"model\": \"K22\"\n },\n {\n \"regex\": \"LM-K300(?:[);/ ]|$)\",\n \"model\": \"K31\"\n },\n {\n \"regex\": \"LM-K420(?:[);/ ]|$)\",\n \"model\": \"K42\"\n },\n {\n \"regex\": \"LM-K500(?:[);/ ]|$)\",\n \"model\": \"K51\"\n },\n {\n \"regex\": \"LM-K520(?:[);/ ]|$)\",\n \"model\": \"K52\"\n },\n {\n \"regex\": \"LM-Q510N(?:[);/ ]|$)\",\n \"model\": \"Q51\"\n },\n {\n \"regex\": \"LM-Q630N?(?:[);/ ]|$)\",\n \"model\": \"Q61\"\n },\n {\n \"regex\": \"(?:LG-)?M700(?:N|A|DSK|AN)?\",\n \"model\": \"Q6\"\n },\n {\n \"regex\": \"LM-X440IM\",\n \"model\": \"W30\"\n },\n {\n \"regex\": \"(?:LG-?)?K220\",\n \"model\": \"X Power\"\n },\n {\n \"regex\": \"(?:LG-?)?M320\",\n \"model\": \"X Power 2\"\n },\n {\n \"regex\": \"(?:LG-)?K371\",\n \"model\": \"Phoenix 2\"\n },\n {\n \"regex\": \"(?:LG-)?M150\",\n \"model\": \"Phoenix 3\"\n },\n {\n \"regex\": \"(?:LG-)?F100[SL]\",\n \"model\": \"Optimus Vu\"\n },\n {\n \"regex\": \"(?:LG-)?P880\",\n \"model\": \"Optimus 4X HD\"\n },\n {\n \"regex\": \"(?:LG-)?(H340n?|H324)\",\n \"model\": \"Leon\"\n },\n {\n \"regex\": \"(?:LG-)?H342\",\n \"model\": \"Leon 4G LTE\"\n },\n {\n \"regex\": \"(?:LG-)?H422\",\n \"model\": \"Spirit\"\n },\n {\n \"regex\": \"(?:LG)?C660\",\n \"model\": \"Optimus Pro\"\n },\n {\n \"regex\": \"LML21(?:1B|2V)L\",\n \"model\": \"Rebel 4\"\n },\n {\n \"regex\": \"VS876\",\n \"model\": \"Lucid 3\"\n },\n {\n \"regex\": \"VS880(PP)?\",\n \"model\": \"G Vista\"\n },\n {\n \"regex\": \"VS820\",\n \"model\": \"Lancet\"\n },\n {\n \"regex\": \"VS870 4G\",\n \"model\": \"Lucid 2\"\n },\n {\n \"regex\": \"LM-F100N?(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"WING\"\n },\n {\n \"regex\": \"LGUK410\",\n \"model\": \"G Pad 7.0\\\" LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LGLK430\",\n \"model\": \"G Pad F 7.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LGLK430\",\n \"model\": \"G Pad F 7.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LG-V490\",\n \"model\": \"G Pad 8.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LGT01\",\n \"model\": \"G Pad 8.0\\\" LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LG-V500\",\n \"model\": \"G Pad 8.3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LG-V700\",\n \"model\": \"G Pad 10.1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LG-V935\",\n \"model\": \"G Pad II 10.1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LG-V521\",\n \"model\": \"G Pad X 8.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VK810\",\n \"model\": \"G Pad 8.3 LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VK815\",\n \"model\": \"G Pad X 8.3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LGT32\",\n \"model\": \"Qua Tad PZ\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"LGT31\",\n \"model\": \"Qua Tad PX\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"webOS.TV\",\n \"device\": \"tv\",\n \"model\": \"WebOS TV\"\n },\n {\n \"regex\": \"LGE_DLNA_SDK|NetCast\",\n \"device\": \"tv\",\n \"model\": \"NetCast\"\n },\n {\n \"regex\": \"LG Watch Urbane\",\n \"device\": \"wearable\",\n \"model\": \"Watch Urbane\"\n },\n {\n \"regex\": \"(LM-[A-Z]{1}[0-9]{3}([A-Z]{1,3})?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LGE(?: |-LG| LG-AX|-)([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"FBDV/LG-([a-z0-9]+);FBSV\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LGE;([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LG[ _\\\\-](V90.*|Optimus[ _\\\\-]Pad.*) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LG(?:/|-LG| |-)?([^/;]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LG(?:/|-LG| |-)?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LG; ([a-z0-9 ]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/2.0 ((?:KE|KG|KP|L3)[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(VX[0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Web0S; Linux/SmartTV\",\n \"device\": \"tv\",\n \"model\": \"\"\n }\n ]\n },\n \"Lingwin\": {\n \"regex\": \"Lingwin[ _\\\\-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Lingwin[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Lingwin[ _\\\\-]?([^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Logicom\": {\n \"regex\": \"LOGICOM[_ ]|(TAB950|TAB1062|E731|E812|E912|E1031|POWER BOT|La[ _]Tab[ _](?:7[24]|10[57]|114)|(?:B|C|M|ID|VR)[ _]?BOT[ _]?(?:TAB[ _])?([0-9]+\\\\+?)(?:PLUS)?|KT712A_4\\\\.4|L-?IXIR[0-9]*|L-ITE|L-EGANTONE(?:-R)?|L-?EMENT.+|Le[ _]?(?:Hop|Hello|Lift|Hola|Moov[2]?|Must(?: 2)?|Starter L|Fit FR|Spark|Prime|Smooth(?: FR)?))[_);/ ]\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"La[ _]Tab[ _](7[24]|10[57]|114)(?:[);/ ]|$)\",\n \"model\": \"La Tab $1\"\n },\n {\n \"regex\": \"LOGICOM_LA_TAB_LINK_71\",\n \"model\": \"La Tab Link 71\"\n },\n {\n \"regex\": \"KT712A_4.4|L-IXIR TAB 701 3G\",\n \"model\": \"L-ixir Tab 701 3G\"\n },\n {\n \"regex\": \"LIXIR1041\",\n \"model\": \"L-ixir Tab 1041\"\n },\n {\n \"regex\": \"L-?IXIR[ _]TAB[ _]([^);/]+)( Build|[);])\",\n \"model\": \"L-ixir Tab $1\"\n },\n {\n \"regex\": \"L-ITE[ _](400M|452|50[46] HD|506R HD|552 HD)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"L-ite $1\"\n },\n {\n \"regex\": \"L-ITE[ _]([^;/]+) Build\",\n \"model\": \"L-ite Tab $1\"\n },\n {\n \"regex\": \"L-?EMENT[ _]?(350|451|40[103]|55[013]|50[15]|500L?)(?:[);/ ]|$)\",\n \"model\": \"L-ement $1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"L-?EMENT[ _](?:TAB)[ )]?([^);/]+)(?: Build|[);])\",\n \"model\": \"L-ement Tab $1\"\n },\n {\n \"regex\": \"L-?EMENT[ _]?(74[01])(?:[);/ ]|$)\",\n \"model\": \"L-ement Tab $1\"\n },\n {\n \"regex\": \"(TAB950|TAB1062|E731|E812|E912|E1031)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"POWER BOT\",\n \"model\": \"POWER BOT\"\n },\n {\n \"regex\": \"((?:B|C|M|ID|VR))[ _]?BOT[ _]?((?:TAB[ _])?([0-9]+\\\\+?)(?:PLUS)?)\",\n \"model\": \"$1 BOT $2\"\n },\n {\n \"regex\": \"Le Lift\",\n \"model\": \"Le Lift\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le Hola FR(?:[);/ ]|$)\",\n \"model\": \"Le Hola FR\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le[ _]Hola(?:[);/ ]|$)\",\n \"model\": \"Le Hola\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"LeMoov2(?:[);/ ]|$)\",\n \"model\": \"Le Moov 2\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"LeMoov(?:[);/ ]|$)\",\n \"model\": \"Le Moov\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le Fit FR(?:[);/ ]|$)\",\n \"model\": \"Le Fit FR\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le Hop(?:[);/ ]|$)\",\n \"model\": \"Le Hop\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le[ _]Hello(?:[);/ ]|$)\",\n \"model\": \"Le Hello\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le Smooth FR(?:[);/ ]|$)\",\n \"model\": \"Le Smooth FR\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le Smooth(?:[);/ ]|$)\",\n \"model\": \"Le Smooth\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le Must 2(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Le Must 2\"\n },\n {\n \"regex\": \"Le Must(?:[);/ ]|$)\",\n \"model\": \"Le Must\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le Starter L(?:[);/ ]|$)\",\n \"model\": \"Le Starter L\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le[ _]Spark(?:[);/ ]|$)\",\n \"model\": \"Le Spark\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Le[ _]Prime(?:[);/ ]|$)\",\n \"model\": \"Le Prime\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"L-EGANTONE-R\",\n \"model\": \"L-Egant One R\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"L-EGANTONE\",\n \"model\": \"L-Egant One\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"Konka\": {\n \"regex\": \"KONKA[_ ]([a-z0-9]+)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"E5660S\",\n \"model\": \"Viva 5660s\"\n },\n {\n \"regex\": \"W830\",\n \"model\": \"Tango 830\"\n },\n {\n \"regex\": \"W(9[67]0)\",\n \"model\": \"Expose $1\"\n },\n {\n \"regex\": \"W990\",\n \"model\": \"Tuxedo 990\"\n },\n {\n \"regex\": \"KONKA[_ ]([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Konrow\": {\n \"regex\": \"(?:BIGCOOL|COOLFIVE|COOL-K|Just5|Link5|EASY(?:5|62)|CITY55|Cool55)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BIGCOOL(?:[);/ ]|$)\",\n \"model\": \"BigCool\"\n },\n {\n \"regex\": \"COOL-K(?:[);/ ]|$)\",\n \"model\": \"Cool-K\"\n },\n {\n \"regex\": \"Cool55(?:[);/ ]|$)\",\n \"model\": \"Cool 55\"\n },\n {\n \"regex\": \"COOLFIVE(?:[);/ ]|$)\",\n \"model\": \"Cool Five\"\n },\n {\n \"regex\": \"Just5(?:[);/ ]|$)\",\n \"model\": \"Just 5\"\n },\n {\n \"regex\": \"Link5(?:[);/ ]|$)\",\n \"model\": \"Link 5\"\n },\n {\n \"regex\": \"EASY(5|62)(?:[);/ ]|$)\",\n \"model\": \"Easy $1\"\n },\n {\n \"regex\": \"CITY55(?:[);/ ]|$)\",\n \"model\": \"City 55\"\n }\n ]\n },\n \"Karbonn\": {\n \"regex\": \"(?:Browser-)?Karbonn|K9 Kavach 4G|K9[_ ]Viraat[_ ]Plus|K9 Music 4G|K9 Smart|K9 VIRAAT 4G|Aura (?:Sleek Plus|Power 4G Plus|Note Play)|Titanium[ _](?:3D-Plex|Octane Plus|Vista 4G|Jumbo|S360|S1[059]|S35|S20[13]|S22|S[15]|S200 HD|Frames S7|MOGHUL|S9)|K-lite F3|Sparkle V|Alfa A114 Quad|Quattro L55 HD\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"K9 Kavach 4G\",\n \"model\": \"K9 Kavach 4G\"\n },\n {\n \"regex\": \"K9 Music 4G\",\n \"model\": \"K9 Music 4G\"\n },\n {\n \"regex\": \"K9 Smart 1GB\",\n \"model\": \"K9 Smart\"\n },\n {\n \"regex\": \"K9 Smart 4G\",\n \"model\": \"K9 Smart 4G\"\n },\n {\n \"regex\": \"K9 Smart Grand\",\n \"model\": \"K9 Smart Grand\"\n },\n {\n \"regex\": \"K9 Smart Yuva\",\n \"model\": \"K9 Smart Yuva\"\n },\n {\n \"regex\": \"K9 Smart\",\n \"model\": \"K9 Smart\"\n },\n {\n \"regex\": \"K9[_ ]Viraat[_ ]Plus\",\n \"model\": \"K9 Viraat Plus\"\n },\n {\n \"regex\": \"Aura Sleek Plus\",\n \"model\": \"Aura Sleek Plus\"\n },\n {\n \"regex\": \"Aura Power 4G Plus\",\n \"model\": \"Aura Power 4G Plus\"\n },\n {\n \"regex\": \"Aura Note Play\",\n \"model\": \"Aura Note Play\"\n },\n {\n \"regex\": \"Alfa A114 Quad\",\n \"model\": \"Alfa A114 Quad\"\n },\n {\n \"regex\": \"karbonnK9 Viraat 4G|K9 VIRAAT 4G\",\n \"model\": \"K9 Viraat 4G\"\n },\n {\n \"regex\": \"Titanium[ _]S2[ _]Plus\",\n \"model\": \"Titanium S2 Plus\"\n },\n {\n \"regex\": \"Titanium_S9Plus\",\n \"model\": \"Titanium S9 Plus\"\n },\n {\n \"regex\": \"Titanium[_ ]S(99|360|1[059]|109|35|200 HD|20[13]|22|[15])(?:[);/ ]|$)\",\n \"model\": \"Titanium S$1\"\n },\n {\n \"regex\": \"Titanium Vista 4G\",\n \"model\": \"Titanium Vista 4G\"\n },\n {\n \"regex\": \"Titanium Jumbo 2\",\n \"model\": \"Titanium Jumbo 2\"\n },\n {\n \"regex\": \"Titanium Jumbo\",\n \"model\": \"Titanium Jumbo\"\n },\n {\n \"regex\": \"Titanium[ _]MOGHUL\",\n \"model\": \"Titanium Moghul\"\n },\n {\n \"regex\": \"Titanium Frames S7\",\n \"model\": \"Titanium Frames S7\"\n },\n {\n \"regex\": \"Titanium Octane Plus\",\n \"model\": \"Titanium Octane Plus\"\n },\n {\n \"regex\": \"Titanium[ _]3D-Plex\",\n \"model\": \"Titanium 3D Plex\"\n },\n {\n \"regex\": \"K-lite F3\",\n \"model\": \"K-Lite F3\"\n },\n {\n \"regex\": \"Sparkle V\",\n \"model\": \"Sparkle V\"\n },\n {\n \"regex\": \"Quattro L55 HD\",\n \"model\": \"Quattro L55 HD\"\n },\n {\n \"regex\": \"Karbonn ([a-z0-9]+) WAP-Browser\",\n \"model\": \"$1\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"WAP Browser-Karbonn ([a-z0-9]+)/\",\n \"model\": \"$1\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"Karbonn_([^;/)]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Karbonn ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Karbonn ([^;/]+)/\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sagem\": {\n \"regex\": \"SAGEM|portalmmm/2.0 (?:SG|my)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SAGEM-(my[a-z0-9\\\\-]+)\",\n \"model\": \"$1\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"SAGEM ([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SAGEM-([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/2.0 ((?:SG|my)[a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Coby Kyros\": {\n \"regex\": \"(MID(?:1024|1125|1126|1045|1048|1060|1065|4331|7012|7015A?|7016|7022|7032|7035|7036|7042|7047|7048|7052|7065|7120|8024|8042|8048|8065|8125|8127|8128|9724|9740|9742))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Mpman\": {\n \"regex\": \"(?:MPQC|MPDC)[0-9]+|PH(?:150|340|350|360|451|500|520|544|604)|(?:MID(?:7C|74C|82C|84C|801|811|701|711|170|77C|43C|102C|103C|104C|114C)|MP100i OCTA|MP(?:843|717|718|1010|7007|7008|843|888|959|969)|MGP7)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"((?:MPQC|MPDC)[0-9]+[^/;)]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MP100i OCTA(?:[);/ ]|$)\",\n \"model\": \"MP100i OCTA\"\n },\n {\n \"regex\": \"(MID(?:7C|74C|82C|84C|801|811|701|711|170|77C|43C|102C|103C|104C|114C)|MP(?:843|717|718|1010|7007|7008|843|888|959|969)|MGP7)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(PH(?:150|340|350|360|451|500|520|544|604))\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"Majestic\": {\n \"regex\": \"MAJESTIC[ _-]|CRONO ?[0-9]+|TAB (?:647|411) 3G|URANO 77LTE\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"URANO 77LTE(?:[);/ ]|$)\",\n \"model\": \"Urano 77 LTE\"\n },\n {\n \"regex\": \"TAB (647|411) 3G\",\n \"model\": \"Tab $1 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MAJESTIC[ _]Tab([^;/]+)Build\",\n \"model\": \"Tab$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MAJESTIC[ _]Tab([^);/]+)(?:[);/]|$)\",\n \"model\": \"Tab$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MAJESTIC[ _]([^;/]+)Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MAJESTIC[ _]([^);/]+)(?:(?:[);/ ]|$)|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"CRONO ?([0-9]+) Build\",\n \"model\": \"Crono $1\"\n },\n {\n \"regex\": \"CRONO ?([0-9]+)(?:[);/]|$)\",\n \"model\": \"Crono $1\"\n }\n ]\n },\n \"Manta Multimedia\": {\n \"regex\": \"MSP950(1[245]|2[01])|MSP96017|((?<!/)MID713|MID(?:06[SN]|08[S]?|12|13|14|15|701|702|703|704|705(?:DC)?|706[AS]?|707|708|709|711|712|714|717|781|801|802|901|1001|1002|1003|1004(?: 3G)?|1005|1009|1010|7802|9701|9702))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"((?<!/)MID713|MID(?:06[SN]|08[S]?|12|13|14|15|701|702|703|704|705(?:DC)?|706[AS]?|707|708|709|711|712|714|717|781|801|802|901|1001|1002|1003|1004(?: 3G)?|1005|1009|1010|7802|9701|9702))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MSP95012\",\n \"model\": \"Titano 1\"\n },\n {\n \"regex\": \"MSP95014\",\n \"model\": \"Titano 3\"\n },\n {\n \"regex\": \"MSP95015\",\n \"model\": \"Mezo 2\"\n },\n {\n \"regex\": \"MSP95020\",\n \"model\": \"Rocky 2\"\n },\n {\n \"regex\": \"MSP95021\",\n \"model\": \"Rocky 3 Pro\"\n },\n {\n \"regex\": \"MSP96017\",\n \"model\": \"Forto 2\"\n }\n ]\n },\n \"Masstel\": {\n \"regex\": \"Masstel\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Masstel[_ ](Juno[_ ]Q3|X9|N4[56]0|N5[2458]0|N536|M05|M1[29]0|M1[125]|M250|M25)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Masstel[_ ]\\\\((M18)\\\\)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Masstel_Tab7LTE(?:[);/ ]|$)\",\n \"model\": \"Tab 7 LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Masstel Tab (840|700i)(?:[);/ ]|$)\",\n \"model\": \"Tab $1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Maxwest\": {\n \"regex\": \"(?:Astro[_ ](?:5N_LTE|X4|5_GO_LTE|X55s)|Virtue Z5|Nitro[_ ](?:4S?|55R|5[XR]|[45] GO|4s LTE)|Gravity_55?_GO|Nitro_Phablet_9s)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Astro_5N_LTE\",\n \"model\": \"Astro 5N LTE\"\n },\n {\n \"regex\": \"Astro_5_GO_LTE\",\n \"model\": \"Astro 5 Go LTE\"\n },\n {\n \"regex\": \"Virtue Z5\",\n \"model\": \"Virtue Z5\"\n },\n {\n \"regex\": \"Astro X55s\",\n \"model\": \"Astro X55s\"\n },\n {\n \"regex\": \"Astro[_ ]X4\",\n \"model\": \"Astro X4\"\n },\n {\n \"regex\": \"Nitro ([45]) GO\",\n \"model\": \"Nitro $1 GO\"\n },\n {\n \"regex\": \"Nitro 4s LTE\",\n \"model\": \"Nitro 4s LTE\"\n },\n {\n \"regex\": \"Nitro[ _]4s\",\n \"model\": \"Nitro 4s\"\n },\n {\n \"regex\": \"Nitro_(4|55R|5[XR])\",\n \"model\": \"Nitro $1\"\n },\n {\n \"regex\": \"Gravity_(55?)_GO\",\n \"model\": \"Gravity $1 GO\"\n },\n {\n \"regex\": \"Nitro_Phablet_9s\",\n \"device\": \"tablet\",\n \"model\": \"Nitro Phablet 9s\"\n }\n ]\n },\n \"True Slim\": {\n \"regex\": \"(SSB-508[ED])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Maze Speed\": {\n \"regex\": \"(SSB-(?:500|508)|SSB408D|SSB504R)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SSB-?(500|508|408D|504R)(?:[);/ ]|$)\",\n \"model\": \"SSB-$1\"\n }\n ]\n },\n \"Maze\": {\n \"regex\": \"(?:Alpha[_ ]X|Maze Alpha)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Alpha[_ ]X(?:[);/ ]|$)\",\n \"model\": \"Alpha X\"\n },\n {\n \"regex\": \"Maze Alpha(?:[);/ ]|$)\",\n \"model\": \"Alpha\"\n }\n ]\n },\n \"Mediacom\": {\n \"regex\": \"(?:SmartPad7503G|M-SP10MXA|M-PPAB500|SmartPad970s2(?:3G)?|M[_-][MPS]P[0-9a-z]+|M-IPRO[0-9a-z]+|1AEC)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"SmartPad7503G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 750 3G\"\n },\n {\n \"regex\": \"SmartPad970s23G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 970 S2 3G\"\n },\n {\n \"regex\": \"SmartPad970s2(?:[);/ ]|$)\",\n \"model\": \"SmartPad 970 S2\"\n },\n {\n \"regex\": \"M-MP84[02]M(?:[);/ ]|$)\",\n \"model\": \"SmartPad 8.0\\\" Mobile\"\n },\n {\n \"regex\": \"M-MP940M(?:[);/ ]|$)\",\n \"model\": \"SmartPad 9.7\\\" Mobile\"\n },\n {\n \"regex\": \"M-SP10MXA(?:[);/ ]|$)\",\n \"model\": \"SmartPad MX 10.1\\\"\"\n },\n {\n \"regex\": \"M-SP8MXA(?:[);/ ]|$)\",\n \"model\": \"SmartPad MX 8.0\\\"\"\n },\n {\n \"regex\": \"M-SP7HXAH(?:[);/ ]|$)\",\n \"model\": \"SmartPad HX 7.0\\\"\"\n },\n {\n \"regex\": \"M-SP8HXAH(?:[);/ ]|$)\",\n \"model\": \"SmartPad HX 8.0\\\" HD\"\n },\n {\n \"regex\": \"M-MP(?:710|720|725|726|740)GOx?(?:[);/ ]|$)\",\n \"model\": \"SmartPad 7.0\\\" Go\"\n },\n {\n \"regex\": \"M-MP876S2(?:[);/ ]|$)\",\n \"model\": \"SmartPad 8.0\\\" S2\"\n },\n {\n \"regex\": \"M-MP8S2[AB]?3G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 8.0\\\" S2 3G\"\n },\n {\n \"regex\": \"M-MP(101|102|860|875)S2[BW]?(?:[);/ ]|$)\",\n \"model\": \"SmartPad $1 S2\"\n },\n {\n \"regex\": \"M-MP85S23G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 875 S2 3G\"\n },\n {\n \"regex\": \"M-SP1AGO3G\",\n \"model\": \"SmartPad 10 Go 3G\"\n },\n {\n \"regex\": \"M-SP7xGO3G\",\n \"model\": \"SmartPad 10.1\\\" iPro 3G\"\n },\n {\n \"regex\": \"1AEC\",\n \"model\": \"SmartPad 10 Eclipse\"\n },\n {\n \"regex\": \"M-MP10[45][01]S2(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" S2\"\n },\n {\n \"regex\": \"M-MP1S2[AB]3G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" S2 3G\"\n },\n {\n \"regex\": \"M-MP8[24]S4(?:[);/ ]|$)\",\n \"model\": \"SmartPad 8.0\\\" S4\"\n },\n {\n \"regex\": \"M-MP8S4[AB]3G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 8.0\\\" S4 3G\"\n },\n {\n \"regex\": \"M-MP9S4A3G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 9.7\\\" S4 3G\"\n },\n {\n \"regex\": \"M-MP1[02]S4(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" S4\"\n },\n {\n \"regex\": \"M-MP1040MC?(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" HD S4 3G\"\n },\n {\n \"regex\": \"M-MP1S4[AB]3G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" S4 3G\"\n },\n {\n \"regex\": \"M-SP10HXxH(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" HX HD\"\n },\n {\n \"regex\": \"M-SP10MXHA(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" MX\"\n },\n {\n \"regex\": \"M-SP10MXHL(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" MX Lite\"\n },\n {\n \"regex\": \"M-MP8PA3G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 8.0\\\" HD Pro 3G\"\n },\n {\n \"regex\": \"M-MP10PA(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" HD Pro\"\n },\n {\n \"regex\": \"M-MP10PA3G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 10.1\\\" HD Pro 3G\"\n },\n {\n \"regex\": \"M-IPRO([18][01]0)[BW](?:[);/ ]|$)\",\n \"model\": \"SmartPad 8.0\\\" HD iPro$1 3G\"\n },\n {\n \"regex\": \"(?:M-MP75S23G|M-MP72[01]M)(?:[);/ ]|$)\",\n \"model\": \"SmartPad 7.0\\\" Mobile\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-MP7S2[ABDK]3G(?:[);/ ]|$)\",\n \"model\": \"SmartPad 7.0\\\" S2 3G\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-MP5303G(?:[);/ ]|$)\",\n \"model\": \"SmartPad Mini Mobile\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PPxB400(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo B400\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PPAG550(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo G550\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PPAB500(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo B500\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PP2G530(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo G530\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PPG700(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo G700\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PPxS531(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo S531\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PP2S550(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo S550\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PP2S650C?(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo S650\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PPxS551U(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo S551U\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M-PPAG4(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo G4\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"M-PP[ABC]G500(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo G500\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"M-PP2S500[BC]?(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo S500\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"M[_-]PP[Ax]X(470|510|520)U(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo X$1U\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"M-PPxG(400|501|[457][PM]?)(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo G$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"M-PPxS(532[LU]|470|501|5P?|7P?)(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo S$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"M-PPxG(450)(?:[);/ ]|$)\",\n \"model\": \"PhonePad Duo G$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"M-MP([0-9a-z]+)\",\n \"model\": \"SmartPad $1\"\n }\n ]\n },\n \"Medion\": {\n \"regex\": \"Medion|(?:MD_)?LIFETAB|([SPX]10[0-9]{2}X|E10[45]1X|X5001|P851X|P850X|E691X|E1050X)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:MD_)?LIFETAB_([a-z0-9]+)\",\n \"device\": \"tablet\",\n \"model\": \"Lifetab $1\"\n },\n {\n \"regex\": \"(E450[46]|E5004|S5004|X5001|E5020|P5015)(?:[);/ ]|$)\",\n \"model\": \"Life $1\"\n },\n {\n \"regex\": \"(B5530)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(E10[45]1X)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([SPX]10[0-9]{2}X|P851X|P850X|E691X|E1050X)(?:[);/ ]|$)\",\n \"model\": \"Lifetab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Medion(?: Smartphone)? ([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"MEEG\": {\n \"regex\": \"MEEG[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MEEG[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MEEG[ _\\\\-]?([^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Fourel\": {\n \"regex\": \"(?:EASYSMARTM3|EasySmart M2)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"EASY ?SMART ?M([32])\",\n \"model\": \"Easy Smart M$1\"\n }\n ]\n },\n \"Meizu\": {\n \"regex\": \"Meizu|MZ-[a-z]|(?<!POCO )(M04[05]|MZ-16th(?: Plus)?|MZ-16[st]|M7[12]1C|M35[1356]|M612C|M578CA|M181[36]|M1822|M681C|M6T|MX[ -]?[2345](?: Pro)?|(?:MZ-)?m[1-6] note|M621C|M1852|M57[18]C|M3[ESX]|M031|m1 metal|M1 E|M2|M2 E|M5s Build|PRO [67]|PRO 7-[HS]| 15 Lite| 16th|MZ-15 (?:Lite|Plus)|MZ-16 X)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:MZ-)?M571C\",\n \"device\": \"phablet\",\n \"model\": \"M2 Note\"\n },\n {\n \"regex\": \"(?:MZ-|Meizu-)?m([1-6])[_ ]note(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"M$1 Note\"\n },\n {\n \"regex\": \"M1 E(?:[);/ ]|$)\",\n \"model\": \"M1E\"\n },\n {\n \"regex\": \"M2 E(?:[);/ ]|$)\",\n \"model\": \"M2E\"\n },\n {\n \"regex\": \"(?:MZ-)?M578C[A]?|M2(?:[);/ ]|$)\",\n \"model\": \"M2\"\n },\n {\n \"regex\": \"M681C(?:[);/ ]|$)\",\n \"model\": \"M3 Note\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M621C(?:[);/ ]|$)\",\n \"model\": \"M5 Note\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M711C(?:[);/ ]|$)\",\n \"model\": \"M6\"\n },\n {\n \"regex\": \"M721C(?:[);/ ]|$)\",\n \"model\": \"M6 Note\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M6T\",\n \"model\": \"M6T\"\n },\n {\n \"regex\": \"M3E\",\n \"model\": \"M3E\"\n },\n {\n \"regex\": \"M3S\",\n \"model\": \"M3S\"\n },\n {\n \"regex\": \"M3X\",\n \"model\": \"M3X\"\n },\n {\n \"regex\": \"M5S|M612C\",\n \"model\": \"M5S\"\n },\n {\n \"regex\": \"(M04[05]|MX[ -]?2)(?:[);/ ]|$)\",\n \"model\": \"MX2\"\n },\n {\n \"regex\": \"(M35[1356]|MX[ -]?3)(?:[);/ ]|$)\",\n \"model\": \"MX3\"\n },\n {\n \"regex\": \"MX[ -]?4 Pro(?:[);/ ]|$)\",\n \"model\": \"MX4 Pro\"\n },\n {\n \"regex\": \"MX[ -]?4(?:[);/ ]|$)\",\n \"model\": \"MX4\"\n },\n {\n \"regex\": \"(Meizu[- _])?MX[ -]?5(?:[);/ ]|$)\",\n \"model\": \"MX5\"\n },\n {\n \"regex\": \"m1 metal\",\n \"model\": \"M1 Metal\"\n },\n {\n \"regex\": \"M1813(?:[);/ ]|$)\",\n \"model\": \"M8\"\n },\n {\n \"regex\": \"M1816(?:[);/ ]|$)\",\n \"model\": \"M8 Lite\"\n },\n {\n \"regex\": \"PRO 7-[HS](?:[);/ ]|$)\",\n \"model\": \"PRO 7\"\n },\n {\n \"regex\": \"PRO 7 Plus(?:[);/ ]|$)\",\n \"model\": \"Pro 7 Plus\"\n },\n {\n \"regex\": \"PRO ([67])\",\n \"model\": \"PRO $1\"\n },\n {\n \"regex\": \"M031(?:[);/ ]|$)\",\n \"model\": \"MX Dual Core\"\n },\n {\n \"regex\": \"M1852(?:[);/ ]|$)\",\n \"model\": \"X8\"\n },\n {\n \"regex\": \"M1822(?:[);/ ]|$)\",\n \"model\": \"Note 8\"\n },\n {\n \"regex\": \"MZ-16T(?:[);/ ]|$)\",\n \"model\": \"16T\"\n },\n {\n \"regex\": \"(?:MZ-)?16th Plus(?:[);/ ]|$)\",\n \"model\": \"16th Plus\"\n },\n {\n \"regex\": \"MZ-15 Plus(?:[);/ ]|$)\",\n \"model\": \"15 Plus\"\n },\n {\n \"regex\": \"(?:MZ-15 Lite| 15 Lite)(?:[);/ ]|$)\",\n \"model\": \"15 Lite\"\n },\n {\n \"regex\": \"MZ-16th| 16th(?:[);/ ]|$)\",\n \"model\": \"16th\"\n },\n {\n \"regex\": \"MZ-16 X(?:[);/ ]|$)\",\n \"model\": \"16X\"\n },\n {\n \"regex\": \"Meizu[_ ]note([89])(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"Note $1\"\n },\n {\n \"regex\": \"(?:MZ-)?Meizu[_ ]([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:MZ-)?Meizu[_ ]([a-z0-9_]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MZ-([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Meitu\": {\n \"regex\": \"(?:(?<!MI CC 9 )Meitu[2]?|MP1503|MP1512|MP160[235]|MP170[19]|MP171[138])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MP1503(?:[);/ ]|$)\",\n \"model\": \"M6\"\n },\n {\n \"regex\": \"MP1512(?:[);/ ]|$)\",\n \"model\": \"M6s\"\n },\n {\n \"regex\": \"MP1602(?:[);/ ]|$)\",\n \"model\": \"T8\"\n },\n {\n \"regex\": \"MP1605(?:[);/ ]|$)\",\n \"model\": \"V6\"\n },\n {\n \"regex\": \"MP17(?:01|13)(?:[);/ ]|$)\",\n \"model\": \"T8s\"\n },\n {\n \"regex\": \"MP1718(?:[);/ ]|$)\",\n \"model\": \"T9\"\n },\n {\n \"regex\": \"MP1603(?:[);/ ]|$)\",\n \"model\": \"M8\"\n },\n {\n \"regex\": \"MP17(?:09|11)(?:[);/ ]|$)\",\n \"model\": \"M8s\"\n },\n {\n \"regex\": \"Meitu2(?:[);/ ]|$)\",\n \"model\": \"2\"\n },\n {\n \"regex\": \"Meitu (Kiss|[MV]4)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Memup\": {\n \"regex\": \"SlidePad ?([^;/]*) Build|SPNG?[0-9]{2,4}[a-z]{0,2}(?:[);/ ]|$)|SP704CE?|SP-NG708-3G\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"SlidePad ?([^;/]*) Build\",\n \"model\": \"SlidePad $1\"\n },\n {\n \"regex\": \"SPNG([0-9]{2,4}[a-z]{0,2})(?:[);/ ]|$)\",\n \"model\": \"SlidePad NG$1\"\n },\n {\n \"regex\": \"SP-NG(708)-3G(?:[);/ ]|$)\",\n \"model\": \"SlidePad NG$1 3G\"\n },\n {\n \"regex\": \"SP704(CE?)\",\n \"model\": \"SlidePad 704$1\"\n }\n ]\n },\n \"Mecer\": {\n \"regex\": \"(M785|800P3[12]C|101P51C|X1010)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"M785(?:[);/ ]|$)\",\n \"model\": \"Xpress Smartlife M785\"\n },\n {\n \"regex\": \"X1010(?:[);/ ]|$)\",\n \"model\": \"X1010\"\n },\n {\n \"regex\": \"800P31C(?:[);/ ]|$)\",\n \"model\": \"Xpress Smartlife 800P31C\"\n },\n {\n \"regex\": \"800P32C(?:[);/ ]|$)\",\n \"model\": \"Xpress Smartlife 800P32C\"\n },\n {\n \"regex\": \"101P51C(?:[);/ ]|$)\",\n \"model\": \"Xpress Smartlife 101P51C\"\n }\n ]\n },\n \"Mio\": {\n \"regex\": \"MIO(?:/)?([a-z0-9]+)|(?:MOBIX M6|Mio TouchPad 7 Quad Core)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MOBIX M6(?:[);/ ]|$)\",\n \"model\": \"Mobix M6\"\n },\n {\n \"regex\": \"MIO(?:/)?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Mio TouchPad 7 Quad Core\",\n \"device\": \"tablet\",\n \"model\": \"TouchPad 7 Quad Core\"\n }\n ]\n },\n \"Miray\": {\n \"regex\": \"MIDM[_-]|MPM[_-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MIDM[_-]([a-z0-9]+)\",\n \"model\": \"MIDM $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MPM[_-]([a-z0-9]+)\",\n \"model\": \"MPM $1\"\n }\n ]\n },\n \"Mitsubishi\": {\n \"regex\": \"MITSU|portalmmm/[12]\\\\.0 M\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"MITSU/[a-z0-9.]+ \\\\(([a-z0-9]+)\\\\)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MITSU[ \\\\-]?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/[12]\\\\.0 (M[a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"MIXC\": {\n \"regex\": \"(M35|M20|G7106|G7108)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(M[0-9]{1,2})(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(G[0-9]{4})(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Mobiola\": {\n \"regex\": \"(MS5[50]X6|MS55X5|MS55L1|MS50L1|MS43A3000|MS45A4000|MS50A4000|MS50A4500|MS50A5000|MS50A6000|MS50B11000|MB-2900 QUATTRO|POLYS[_ ]MS45L1|Wave5)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MS50X6\",\n \"model\": \"Atmos II\"\n },\n {\n \"regex\": \"POLYS[_ ]MS45L1\",\n \"model\": \"Polys MS45L1\"\n },\n {\n \"regex\": \"MS55X6\",\n \"model\": \"Atmos Pro II\"\n },\n {\n \"regex\": \"MS55X5\",\n \"model\": \"Atmos Pro\"\n },\n {\n \"regex\": \"MS55L1\",\n \"model\": \"GAIA\"\n },\n {\n \"regex\": \"MS50L1\",\n \"model\": \"Inti\"\n },\n {\n \"regex\": \"MB-2900 QUATTRO\",\n \"model\": \"MB-2900 Quattro\"\n },\n {\n \"regex\": \"MS43A3000\",\n \"model\": \"MS43A3000\"\n },\n {\n \"regex\": \"MS45A4000\",\n \"model\": \"eOn 45\"\n },\n {\n \"regex\": \"MS50A4000\",\n \"model\": \"eOn 50\"\n },\n {\n \"regex\": \"MS50A4500\",\n \"model\": \"eOn 50 Elegance\"\n },\n {\n \"regex\": \"MS50A5000\",\n \"model\": \"eOn 50 Quad 8\"\n },\n {\n \"regex\": \"MS50A6000\",\n \"model\": \"eOn 50 Quad 16\"\n },\n {\n \"regex\": \"MS50B11000\",\n \"model\": \"MS50B11000\"\n },\n {\n \"regex\": \"Wave5\",\n \"model\": \"Wave 5\"\n }\n ]\n },\n \"Mobicel\": {\n \"regex\": \"Mobicel_(R1)|(?:HYPE|DANDY(?:_ZAM)?|(?<!SMADL )Matrix|TRENDY PLUS|FENDY_DS|TANGO_LITE|BLINK|BERRY[_ ]?(?:[12]|PLUS))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Matrix\",\n \"model\": \"Matrix\"\n },\n {\n \"regex\": \"BLINK\",\n \"model\": \"Blink\"\n },\n {\n \"regex\": \"BERRY1\",\n \"model\": \"Berry 1\"\n },\n {\n \"regex\": \"BERRY 2\",\n \"model\": \"Berry 2\"\n },\n {\n \"regex\": \"BERRY[_ ]PLUS\",\n \"model\": \"Berry Plus\"\n },\n {\n \"regex\": \"TRENDY PLUS\",\n \"model\": \"Trendy Plus\"\n },\n {\n \"regex\": \"HYPE\",\n \"model\": \"Hype\"\n },\n {\n \"regex\": \"DANDY_ZAM\",\n \"model\": \"Dandy Zam\"\n },\n {\n \"regex\": \"DANDY\",\n \"model\": \"Dandy\"\n },\n {\n \"regex\": \"TANGO_LITE\",\n \"model\": \"Tango Lite\"\n },\n {\n \"regex\": \"FENDY_DS\",\n \"model\": \"Fendy DS\"\n },\n {\n \"regex\": \"Mobicel_(R1)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Mobiistar\": {\n \"regex\": \"Mobiistar|Zumbo[ _]S|PRIME X MAX|X1 Notch|E1 Selfie\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"X1 Notch(?:[);/ ]|$)\",\n \"model\": \"X1 Notch\"\n },\n {\n \"regex\": \"E1 Selfie(?:[);/ ]|$)\",\n \"model\": \"E1 Selfie\"\n },\n {\n \"regex\": \"mobiistar_LAI_Zumbo(?:[);/ ]|$)\",\n \"model\": \"Zumbo\"\n },\n {\n \"regex\": \"Zumbo[_ ]S[_ ]2017[_ ]Lite(?:[);/ ]|$)\",\n \"model\": \"Lai Zumbo S Lite (2017)\"\n },\n {\n \"regex\": \"Zumbo[_ ]S[_ ]2017(?:[);/ ]|$)\",\n \"model\": \"Lai Zumbo S (2017)\"\n },\n {\n \"regex\": \"mobiistar ZUMBO S2( Dual)\",\n \"model\": \"Zumbo S2\"\n },\n {\n \"regex\": \"Mobiistar_LAI_Zumbo_J_2017(?:[);/ ]|$)\",\n \"model\": \"Lai Zumbo J (2017)\"\n },\n {\n \"regex\": \"Mobiistar_LAI_Zumbo_J(?:[);/ ]|$)\",\n \"model\": \"Lai Zumbo J\"\n },\n {\n \"regex\": \"Mobiistar_Zumbo_J2\",\n \"model\": \"Lai Zumbo J2\"\n },\n {\n \"regex\": \"Mobiistar[_ ]Zumbo[_ ]S2\",\n \"model\": \"Zumbo S2\"\n },\n {\n \"regex\": \"mobiistar ZUMBO Power\",\n \"model\": \"Zumbo Power\"\n },\n {\n \"regex\": \"mobiistar[ _]LAI[ _]YUNA[ _]([1XCS])\",\n \"model\": \"Lai Yuna $1\"\n },\n {\n \"regex\": \"mobiistar LAI Yuki\",\n \"model\": \"Lai Yuki\"\n },\n {\n \"regex\": \"mobiistar[ _]LAI[ _]ZORO[ _]([23])\",\n \"model\": \"Lai Zoro $1\"\n },\n {\n \"regex\": \"mobiistar[ _]LAI[ _]Zena\",\n \"model\": \"Lai Zena\"\n },\n {\n \"regex\": \"mobiistar[ _]LAI[ _]Z([12])?\",\n \"model\": \"Lai Z$1\"\n },\n {\n \"regex\": \"mobiistar_ZORO_4G\",\n \"model\": \"Zoro 4G\"\n },\n {\n \"regex\": \"mobiistar touch LAI 512\",\n \"model\": \"Touch Lai 512\"\n },\n {\n \"regex\": \"mobiistar LAI 504([KC])\",\n \"model\": \"Lai 504$1\"\n },\n {\n \"regex\": \"mobiistar LAI Y\",\n \"model\": \"Lai Y\"\n },\n {\n \"regex\": \"mobiistar PRIME X 2017\",\n \"model\": \"Prime X\"\n },\n {\n \"regex\": \"mobiistar[ _]PRIME[ _](X1|558|X[ _]Plus|X[ _]Grand) Build\",\n \"model\": \"Prime $1\"\n },\n {\n \"regex\": \"PRIME X MAX 2018\",\n \"model\": \"Prime X Max\"\n },\n {\n \"regex\": \"mobiistar[ _]KOOL([ _]Lite)?\",\n \"model\": \"Kool$1\"\n },\n {\n \"regex\": \"mobiistar KAT 452 Build\",\n \"model\": \"Kat 452\"\n },\n {\n \"regex\": \"mobiistar_LAI_YOLLO Build\",\n \"model\": \"Lai Yollo\"\n },\n {\n \"regex\": \"Mobiistar[ _]([^;/)]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"MSI\": {\n \"regex\": \"Primo ?(?:9[13]|81|76)|Enjoy 7 Plus\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Primo ?(9[13]|76|81)\",\n \"model\": \"Primo $1\"\n },\n {\n \"regex\": \"Enjoy 7 Plus\",\n \"model\": \"Enjoy 7 Plus\"\n }\n ]\n },\n \"MLLED\": {\n \"regex\": \"MLLED[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MLLED[ _]([^;/]+)Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MLLED[ _]([^);/]+)(?:[);/]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Mobistel\": {\n \"regex\": \"(Cynus[ _][^/;)]+)( Build|\\\\))\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Mecool\": {\n \"regex\": \"(?:KM9PRO|BB2 PRO|K[I]{1,3} PRO|KI PLUS|KM9_TV_BOX|M8SPROW|M8S (?:PLUS|PRO) (?:DVB|[LW]|PLUS)|M8S (?:MAX|PRO))(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"KM9PRO(?:[);/ ]|$)\",\n \"model\": \"KM9 Pro\"\n },\n {\n \"regex\": \"KM9_TV_BOX(?:[);/ ]|$)\",\n \"model\": \"KM9 TV Box\"\n },\n {\n \"regex\": \"BB2 PRO(?:[);/ ]|$)\",\n \"model\": \"BB2 Pro\"\n },\n {\n \"regex\": \"(K[I]{1,3}) PRO(?:[);/ ]|$)\",\n \"model\": \"$1 Pro\"\n },\n {\n \"regex\": \"KI PLUS(?:[);/ ]|$)\",\n \"model\": \"KI Plus\"\n },\n {\n \"regex\": \"M8SPROW(?:[);/ ]|$)\",\n \"model\": \"M8S Pro W\"\n },\n {\n \"regex\": \"M8S PLUS DVB(?:[);/ ]|$)\",\n \"model\": \"M8S Plus DVB\"\n },\n {\n \"regex\": \"M8S PLUS ([LW])(?:[);/ ]|$)\",\n \"model\": \"M8S Plus $1\"\n },\n {\n \"regex\": \"M8S PRO ([LW])(?:[);/ ]|$)\",\n \"model\": \"M8S Pro $1\"\n },\n {\n \"regex\": \"M8S PRO PLUS(?:[);/ ]|$)\",\n \"model\": \"M8S Pro Plus\"\n },\n {\n \"regex\": \"M8S PRO(?:[);/ ]|$)\",\n \"model\": \"M8S Pro\"\n },\n {\n \"regex\": \"M8S MAX(?:[);/ ]|$)\",\n \"model\": \"M8S Max\"\n }\n ]\n },\n \"Modecom\": {\n \"regex\": \"Modecom|Free(?:Way )?Tab|xino z[\\\\d]+ x[\\\\d]+\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"xino Z([\\\\d]+) X([\\\\d]+)\",\n \"model\": \"Xino Z$1 X$2\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"FreeTab[ _\\\\-]?([^/;]+)? Build\",\n \"model\": \"FreeTab $1\"\n },\n {\n \"regex\": \"FreeTab[ _\\\\-]?((?!Build)[^);/ ]+)?\",\n \"model\": \"FreeTab $1\"\n },\n {\n \"regex\": \"FreeWay Tab[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"FreeWay Tab $1\"\n },\n {\n \"regex\": \"FreeWay Tab[ _\\\\-]?((?!Build)[^);/ ]+)\",\n \"model\": \"FreeWay Tab $1\"\n }\n ]\n },\n \"Mofut\": {\n \"regex\": \"Mofut\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Mofut[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Mofut[ _\\\\-]?((?!Build)[^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"BrightSign\": {\n \"regex\": \"BrightSign\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(HD1023|XD233|XD230|XD1030|XT114[34]|4K1142|LS424)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Motorola\": {\n \"regex\": \"MOT(?!TO)|(?<!AN)DROID ?(?:Build|[a-z0-9]+)|portalmmm/2.0 (?:E378i|L6|L7|v3)|XOOM [^;/]*Build|XT1941-2|XT1924-9|XT1925-10|XT1965-6|XT1970-5|XT1799-2|XT1021|XT1710-08|XT180[3-5]|XT194[23]-1|XT1929-15|(?:XT|MZ|MB|ME)[0-9]{3,4}[a-z]?(?:\\\\(Defy\\\\)|-0[1-5])?(?:[;]? Build|\\\\))\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MOT-V360\",\n \"model\": \"V360\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT300\",\n \"model\": \"Spice\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT30[35]\",\n \"model\": \"Motosmart ME\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT31[16]\",\n \"model\": \"Fire\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT32[01]\",\n \"model\": \"Defy Mini\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT3(?:89|90)\",\n \"model\": \"Motosmart\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT502\",\n \"model\": \"Quench\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT531\",\n \"model\": \"Fire XT\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT535\",\n \"model\": \"Defy\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT55[567]C?\",\n \"model\": \"Defy XT\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT603\",\n \"model\": \"Admiral\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT610\",\n \"model\": \"Droid Pro\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT615\",\n \"model\": \"Motoluxe\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT621\",\n \"model\": \"Primus\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT626\",\n \"model\": \"IronRock\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT682\",\n \"model\": \"Atrix\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT685\",\n \"model\": \"Motoluxe Dual-SIM\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT687\",\n \"model\": \"Atrix TV\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT720\",\n \"model\": \"Milestone\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT800W\",\n \"model\": \"Glam\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT860\",\n \"model\": \"Milestone 3\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT881\",\n \"model\": \"Electrify 2\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT882\",\n \"model\": \"Moto XT882\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT88[56]\",\n \"model\": \"Droid RAZR V\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT890\",\n \"model\": \"Droid RAZR i\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT894\",\n \"model\": \"Droid 4\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT897\",\n \"model\": \"Photon Q\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT901\",\n \"model\": \"Electrify M\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT90[567]\",\n \"model\": \"Droid RAZR M\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT910S?\",\n \"model\": \"Droid RAZR\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT91[4568]\",\n \"model\": \"Droid RAZR D1\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT9(?:19|20)\",\n \"model\": \"Droid RAZR D3\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT925\",\n \"model\": \"Droid RAZR HD\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT102[12]\",\n \"model\": \"Moto E\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1706\",\n \"model\": \"Moto E3 Power\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1924-9|moto e5 plus\",\n \"model\": \"Moto E5 Plus\"\n },\n {\n \"regex\": \"Moto E5 Play\",\n \"model\": \"Moto E5 Play\"\n },\n {\n \"regex\": \"Moto E5 go(?:[);/ ]|$)\",\n \"model\": \"Moto E5 Go\"\n },\n {\n \"regex\": \"Moto E6(?:[);/ ]|$)\",\n \"model\": \"Moto E6\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1030\",\n \"model\": \"Droid Mini\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1096\",\n \"model\": \"Moto X2\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1254\",\n \"model\": \"Droid Turbo\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT10(?:28|3[1234]|68|69)\",\n \"model\": \"Moto G\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1799-2\",\n \"model\": \"Moto G5s\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT180[3-5]\",\n \"model\": \"Moto G5s Plus\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT168[57]\",\n \"model\": \"Moto G5 Plus\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1670\",\n \"model\": \"Moto G5\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1925-10\",\n \"model\": \"Moto G6\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1965-6\",\n \"model\": \"Moto G7 Plus\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT10(?:49|5[23568]|60|9[23457])\",\n \"model\": \"Moto X\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1562\",\n \"model\": \"Moto X Play\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1572\",\n \"model\": \"Moto X Style\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1080\",\n \"model\": \"Droid Ultra\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1650-05\",\n \"model\": \"Moto Z\"\n },\n {\n \"regex\": \"moto z4(?:[);/ ]|$)\",\n \"model\": \"Moto Z4\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1635(?:-0[1-3])?\",\n \"model\": \"Moto Z Play\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1710-(?:-0[28])?\",\n \"model\": \"Moto Z2 Play\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1789-05\",\n \"model\": \"Moto Z2 Force\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1929-15\",\n \"model\": \"Moto Z3\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1663\",\n \"model\": \"Moto M\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1943-1\",\n \"model\": \"P30\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1941-2\",\n \"model\": \"P30 Play\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1942-1\",\n \"model\": \"P30 Note\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?XT1970-5\",\n \"model\": \"One Vision\"\n },\n {\n \"regex\": \"(?:MOT-|Motorola-)?one zoom\",\n \"model\": \"One Zoom\"\n },\n {\n \"regex\": \"motorola one action\",\n \"model\": \"One Action\"\n },\n {\n \"regex\": \"motorola one macro\",\n \"model\": \"One Macro\"\n },\n {\n \"regex\": \"motorola one 5G UW\",\n \"model\": \"One 5G UW\"\n },\n {\n \"regex\": \"moto g power\",\n \"model\": \"Moto G Power\"\n },\n {\n \"regex\": \"moto g\\\\(([0-9])\\\\) power lite\",\n \"model\": \"Moto G$1 Power Lite\"\n },\n {\n \"regex\": \"moto g\\\\(([0-9])\\\\) power\",\n \"model\": \"Moto G$1 Power\"\n },\n {\n \"regex\": \"moto g\\\\(([0-9])\\\\) supra\",\n \"model\": \"Moto G$1 Supra\"\n },\n {\n \"regex\": \"moto g\\\\(([0-9])\\\\) plus\",\n \"model\": \"Moto G$1 Plus\"\n },\n {\n \"regex\": \"moto g\\\\(([0-9]+)\\\\) play\",\n \"model\": \"Moto G$1 Play\"\n },\n {\n \"regex\": \"moto g\\\\(([0-9]+)\\\\)\",\n \"model\": \"Moto G$1\"\n },\n {\n \"regex\": \"Moto ([CGEXZ]) ?\\\\(([a-z0-9]+)\\\\)( Plus| Play)?\",\n \"model\": \"Moto $1$2$3\"\n },\n {\n \"regex\": \"Moto ?([CGEXZ])([0-9]+)( Plus| Play)?\",\n \"model\": \"Moto $1$2$3\"\n },\n {\n \"regex\": \"(?:Motorola-)?Moto[ _]?([CGEXZ])([ _](?:Plus|Play))?\",\n \"model\": \"Moto $1$2\"\n },\n {\n \"regex\": \"MotoroiX\",\n \"model\": \"MotoroiX\"\n },\n {\n \"regex\": \"Motorola[ _\\\\-]([^/;]+)(?: Build|[);])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MOTORAZR[ _\\\\-]([a-z0-9]+)\",\n \"model\": \"RAZR $1\"\n },\n {\n \"regex\": \"MOTORIZR[ _\\\\-]([a-z0-9]+)\",\n \"model\": \"RIZR $1\"\n },\n {\n \"regex\": \"MOT(?!OROLA)[O]?[_\\\\-]?([a-z0-9.]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?<!AN)DROID ?([a-z0-9 ]*) Build\",\n \"model\": \"DROID $1\"\n },\n {\n \"regex\": \"(?<!AN)DROID ?([a-z0-9]+)\",\n \"model\": \"DROID $1\"\n },\n {\n \"regex\": \"portalmmm/2.0 ((?:E378i|L6|L7|V3)[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(XOOM [^;/]*)Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(MZ[0-9]{3})(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"((?:ME|MB|XT)[0-9]{3,4}(?:\\\\(Defy\\\\))?)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Movic\": {\n \"regex\": \"MOVIC\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MOVIC[ -]W([2345])\",\n \"model\": \"W$1\"\n }\n ]\n },\n \"MTN\": {\n \"regex\": \"MTN-\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MTN-(L860|S620)\",\n \"model\": \"Sm@rt Mini $1\"\n },\n {\n \"regex\": \"MTN-8978P\",\n \"device\": \"tablet\",\n \"model\": \"Steppa\"\n },\n {\n \"regex\": \"MTN-([a-z0-9_\\\\-]+)\",\n \"model\": \"MTN-$1\"\n }\n ]\n },\n \"MyTab\": {\n \"regex\": \"MyTAB[ _-](?:8 MINI Dual Core|U55GT)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"MyTAB[ _-]8 MINI Dual Core(?:[);/ ]|$)\",\n \"model\": \"8 Mini Dual Core\"\n },\n {\n \"regex\": \"MyTAB-U55GT(?:[);/ ]|$)\",\n \"model\": \"U55GT\"\n }\n ]\n },\n \"MyPhone\": {\n \"regex\": \"(?:MyPhone|MyPad|MyTab)[ _][^;/)]+( Build|\\\\))|Cube_LTE|myTab10II|HAMMER[ _](Blade2_PRO|IRON_3|Explorer|ENERGY|Titan 2|AXE[_ ](?:M[_ ]LTE|Pro)|Iron 2|Active[2]?(_LTE)?)|C-Smart_pix|myPhone_Fun_8|FUN_18x9|MyPhoneMY27|Prime_4_Lite|myA17|myX12|Pocket_2|Prime_18x9|Prime3Lite|myT6 DTV|myXI1 (?:Plus|Pro)|myXI3|Q_Smart_BE\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MyPad[ _]([^;/]+) Build\",\n \"model\": \"MyPad $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MyTab[ _]([^;/]+) Build\",\n \"model\": \"MyTab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"myTab_10III\",\n \"model\": \"MyTab 10 III\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"myTab10II\",\n \"model\": \"MyTab 10 II\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"myT6 DTV\",\n \"model\": \"myT6 DTV\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Cube_LTE\",\n \"model\": \"Cube LTE\"\n },\n {\n \"regex\": \"Prime_4_Lite\",\n \"model\": \"Prime 4 Lite\"\n },\n {\n \"regex\": \"HAMMER[ _]ENERGY\",\n \"model\": \"Hammer Energy\"\n },\n {\n \"regex\": \"HAMMER_AXE[_ ]M[_ ]LTE\",\n \"model\": \"Hammer Axe M LTE\"\n },\n {\n \"regex\": \"Hammer Titan 2\",\n \"model\": \"Hammer Titan 2\"\n },\n {\n \"regex\": \"Hammer[ _]Iron[ _](2|3)\",\n \"model\": \"Hammer Iron $1\"\n },\n {\n \"regex\": \"Hammer[ _]Explorer\",\n \"model\": \"Hammer Explorer\"\n },\n {\n \"regex\": \"Hammer Active(?:[);/ ]|$)\",\n \"model\": \"Hammer Active\"\n },\n {\n \"regex\": \"Hammer_Active2(?:[);/ ]|$)\",\n \"model\": \"Hammer Active 2\"\n },\n {\n \"regex\": \"Hammer_Active2_LTE(?:[);/ ]|$)\",\n \"model\": \"Hammer Active 2 LTE\"\n },\n {\n \"regex\": \"Hammer AXE Pro\",\n \"model\": \"Hammer Axe Pro\"\n },\n {\n \"regex\": \"Hammer_Blade2_PRO\",\n \"model\": \"Hammer Blade 2 Pro\"\n },\n {\n \"regex\": \"C-Smart_pix\",\n \"model\": \"C-Smart Pix\"\n },\n {\n \"regex\": \"Pocket_2(?:[);/ ]|$)\",\n \"model\": \"Pocket 2\"\n },\n {\n \"regex\": \"myA17(?:[);/ ]|$)\",\n \"model\": \"myA17\"\n },\n {\n \"regex\": \"(?:myPhone_)?Fun_(8|18x9)\",\n \"model\": \"FUN $1\"\n },\n {\n \"regex\": \"MyPhoneMY27\",\n \"model\": \"my27\"\n },\n {\n \"regex\": \"myX12(?:[);/ ]|$)\",\n \"model\": \"myX12\"\n },\n {\n \"regex\": \"myXI1 Plus(?:[);/ ]|$)\",\n \"model\": \"myXI1 Plus\"\n },\n {\n \"regex\": \"myXI1 Pro(?:[);/ ]|$)\",\n \"model\": \"myXI1 Pro\"\n },\n {\n \"regex\": \"myXI3(?:[);/ ]|$)\",\n \"model\": \"myXI3\"\n },\n {\n \"regex\": \"Q_Smart_BE(?:[);/ ]|$)\",\n \"model\": \"Q-Smart BE\"\n },\n {\n \"regex\": \"Prime_18x9(_LTE)?(?:[);/ ]|$)\",\n \"model\": \"Prime 18x9$1\"\n },\n {\n \"regex\": \"Prime3Lite(?:[);/ ]|$)\",\n \"model\": \"Prime 3 Lite\"\n },\n {\n \"regex\": \"MyPhone[ _]([^;/)]+)( Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"MyWigo\": {\n \"regex\": \"MyWigo \",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"City3\",\n \"model\": \"City 3\"\n }\n ]\n },\n \"Myros\": {\n \"regex\": \"(E70 Ultra)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Myria\": {\n \"regex\": \" (Myria_[^/;]+|502M|Cozy|Easy tab 9|Grand) Build|Myria_FIVE|Myria_Grand_4G|Myria_Wide_2|Myria_Wide_4G\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Myria_([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Myria_FIVE\",\n \"model\": \"Five\"\n },\n {\n \"regex\": \"(502M|Grand)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Myria_Grand_4G\",\n \"model\": \"Grand 4G\"\n },\n {\n \"regex\": \"Myria_Wide_4G\",\n \"model\": \"Wide 4G\"\n },\n {\n \"regex\": \"Myria_Wide_2\",\n \"model\": \"Wide 2\"\n },\n {\n \"regex\": \"(Cozy|Easy tab 9)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"M.T.T.\": {\n \"regex\": \"M.T.T.\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"M.T.T. ?Tablet([^;/]+)? Build\",\n \"device\": \"tablet\",\n \"model\": \"Tablet$1\"\n },\n {\n \"regex\": \"M.T.T. ?([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Navon\": {\n \"regex\": \"Navon[_ ]|(?:Vision_Tab_(?:7|10)|Superme_Max|Predator (?:10|3G)|Platinum[_ ]10[_ ]3G(?:_V2)?|Supreme[_ ](?:Fine(?:[_ ]Micro)?|Chief|Pure|Pro)(?:[_ ](?:Mini|Plus))?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"M505 LTE(?:[);/ ]|$)\",\n \"model\": \"Mizu M505 LTE\"\n },\n {\n \"regex\": \"(F552|D504)(?:[);/ ]|$)\",\n \"model\": \"Mizu $1\"\n },\n {\n \"regex\": \"Superme_Max(?:[);/ ]|$)\",\n \"model\": \"Supreme Max\"\n },\n {\n \"regex\": \"Supreme_Fine_Mini(?:[);/ ]|$)\",\n \"model\": \"Supreme Fine Mini\"\n },\n {\n \"regex\": \"Supreme_Fine_Micro(?:[);/ ]|$)\",\n \"model\": \"Supreme Fine Micro\"\n },\n {\n \"regex\": \"Supreme[_ ]Fine[_ ]Plus(?:[);/ ]|$)\",\n \"model\": \"Supreme Fine Plus\"\n },\n {\n \"regex\": \"Supreme_Fine(?:[);/ ]|$)\",\n \"model\": \"Supreme Fine\"\n },\n {\n \"regex\": \"Supreme[_ ]Chief(?:[);/ ]|$)\",\n \"model\": \"Supreme Chief\"\n },\n {\n \"regex\": \"Supreme[_ ]Pure[ _]Plus(?:[);/ ]|$)\",\n \"model\": \"Supreme Pure Plus\"\n },\n {\n \"regex\": \"Supreme Pure(?:[);/ ]|$)\",\n \"model\": \"Supreme Pure\"\n },\n {\n \"regex\": \"Supreme[_ ]Pro(?:[);/ ]|$)\",\n \"model\": \"Supreme Pro\"\n },\n {\n \"regex\": \"Navon[_ ]Infinity(?:[);/ ]|$)\",\n \"model\": \"Infinity\"\n },\n {\n \"regex\": \"(?:Navon[_ ])?Platinum[ _]10[ _]3G(_V2)?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Platinum 10.1\\\" 3G$1\"\n },\n {\n \"regex\": \"(?:Navon[_ ])?Orpheus[ _]3G(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Orpheus 3G\"\n },\n {\n \"regex\": \"Predator (3G|10)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Predator $1\"\n },\n {\n \"regex\": \"Vision_Tab_(7|10)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Vision Tab $1\"\n }\n ]\n },\n \"NOA\": {\n \"regex\": \"(?:NOA-)?NOA[ _]|Hummer(?:_2019_R|LE)|NextSE\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NOA[_ ]CORE[_ ]FORTE\",\n \"model\": \"Core Forte\"\n },\n {\n \"regex\": \"HummerLE\",\n \"model\": \"Hummer LE\"\n },\n {\n \"regex\": \"Hummer_2019_R\",\n \"model\": \"Hummer R (2019)\"\n },\n {\n \"regex\": \"NOA[_ ]Hummer[_ ]Lite\",\n \"model\": \"Hummer Lite\"\n },\n {\n \"regex\": \"NOA[_ ]MOVEse\",\n \"model\": \"Move SE\"\n },\n {\n \"regex\": \"NextSE\",\n \"model\": \"Next SE\"\n },\n {\n \"regex\": \"NOA[_ ]NEXT\",\n \"model\": \"Next\"\n },\n {\n \"regex\": \"NOA[_ ]VISION[_ ]H3SE\",\n \"model\": \"Vision H3SE\"\n },\n {\n \"regex\": \"NOA[_ ]VISION[_ ]H3\",\n \"model\": \"Vision H3\"\n },\n {\n \"regex\": \"NOA[_ ]LOOP\",\n \"model\": \"Loop\"\n },\n {\n \"regex\": \"(?:NOA-)?NOA[_ ]H4se\",\n \"model\": \"H4SE\"\n },\n {\n \"regex\": \"NOA[_ ]Mg12\",\n \"model\": \"MG12\"\n },\n {\n \"regex\": \"NOA[_ ]H44SE\",\n \"model\": \"H44SE\"\n },\n {\n \"regex\": \"NOA[_ ]H10LE\",\n \"model\": \"H10LE\"\n },\n {\n \"regex\": \"NOA[_ ]([^;)/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Nobby\": {\n \"regex\": \"Nobby[ ](S500|X800|S300(?: Pro)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"NEC\": {\n \"regex\": \"NEC[ _\\\\-]|KGT/2\\\\.0|PC-TE508(?:S1|[BH]AW)|PC-TE510(?:HAW|BAL|S1)|PC-TS708T1W|PC-TS507N1S|PC-TE507JAW|portalmmm/1\\\\.0 (?:DB|N)|(?:portalmmm|o2imode)/2.0[ ,]N|(?:N-06C|N-02E|LAVIE Tab E (?:10|8)FHD1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"N-06C(?:[);/ ]|$)\",\n \"model\": \"Medias Amadana\"\n },\n {\n \"regex\": \"N-02E(?:[);/ ]|$)\",\n \"model\": \"Medias U\"\n },\n {\n \"regex\": \"(?:NEC[ _\\\\-]|KGT/2\\\\.0 )([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/1\\\\.0 ((?:DB|N)[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:portalmmm|o2imode)/2\\\\.0[ ,](N[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"PC-TE508[BH]AW(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"LAVIE Tab E TE508\"\n },\n {\n \"regex\": \"PC-TE510(?:BAL|HAW|S1)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"LAVIE Tab E TE510\"\n },\n {\n \"regex\": \"PC-TS507N1S(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"LAVIE Tab S TS507\"\n },\n {\n \"regex\": \"PC-TS708T1W(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"LAVIE Tab S TS708\"\n },\n {\n \"regex\": \"PC-TE507JAW(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"LAVIE Tab E TS507\"\n },\n {\n \"regex\": \"PC-TE508S1(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"LAVIE Tab E TE508\"\n },\n {\n \"regex\": \"(LAVIE Tab E (?:10|8)FHD1)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Neffos\": {\n \"regex\": \"Neffos|(TP601A)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TP601A(?:[);/ ]|$)\",\n \"model\": \"C5L\"\n },\n {\n \"regex\": \"Neffos[_ ]Y50\",\n \"model\": \"Y50\"\n },\n {\n \"regex\": \"Neffos X20 Pro\",\n \"model\": \"X20 Pro\"\n },\n {\n \"regex\": \"Neffos[_ ]((?:[YNCXA])[0-9][A-Z]?(?: Max| Lite)?)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Nextbit\": {\n \"regex\": \"Nextbit|(?:Robin)(?: Build|\\\\))\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Robin)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Newgen\": {\n \"regex\": \"NEWGEN\\\\-([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Netgear\": {\n \"regex\": \"GTV100\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"GTV100\",\n \"model\": \"NeoTV Prime\"\n }\n ]\n },\n \"NeuImage\": {\n \"regex\": \"NIM-\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NIM-(450D|550O|600Q)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"NextBook\": {\n \"regex\": \"Next[0-9]|NX(?:785QC8G|M900MC|008HD8G|010HI8G|M908HC|M726|16A8116K|A8QC116|16A10132S|16A11264)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"NX008HD8G\",\n \"model\": \"Premium 8 HD\"\n },\n {\n \"regex\": \"NXA8QC116\",\n \"model\": \"Ares 8\"\n },\n {\n \"regex\": \"NX16A8116K\",\n \"model\": \"Ares A8\"\n },\n {\n \"regex\": \"NX16A10132S\",\n \"model\": \"Ares A10\"\n },\n {\n \"regex\": \"NX16A11264\",\n \"model\": \"Ares A11\"\n },\n {\n \"regex\": \"NXM908HC\",\n \"model\": \"Premium 9\"\n },\n {\n \"regex\": \"NX010HI8G\",\n \"model\": \"Premium 10 Hi\"\n },\n {\n \"regex\": \"NX785QC8G\",\n \"model\": \"8\"\n },\n {\n \"regex\": \"NXM900MC\",\n \"model\": \"8 HD\"\n },\n {\n \"regex\": \"NXM726\",\n \"model\": \"Premium 7\"\n },\n {\n \"regex\": \"Next([0-9]+[^;/]+) Build\",\n \"model\": \"Next $1\"\n }\n ]\n },\n \"NGM\": {\n \"regex\": \"NGM[_ ][a-z0-9]+|(Forward|Dynamic)[ _]?[^/;]+(?:Build|/)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Forward|Dynamic)[ _]?([^/;]+) Build\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"(Forward|Dynamic)[ _]?([^/;]+)/\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"NGM ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"NGM_([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Nexian\": {\n \"regex\": \"S?Nexian\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"S?Nexian[ ]?([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"S?Nexian-([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Noain\": {\n \"regex\": \"NOAIN\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NOAIN[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"NOAIN[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Noblex\": {\n \"regex\": \"Noblex|NBX-\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Noblex|NBX)[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:Noblex|NBX)[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Nomu\": {\n \"regex\": \"Nomu[ _-](?:T18|S30mini|S10)(?:[);/ ]|$)|V1600S(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Nomu[ _-]T18(?:[);/ ]|$)\",\n \"model\": \"T18\"\n },\n {\n \"regex\": \"Nomu[ _-]s10(?:[);/ ]|$)\",\n \"model\": \"S10\"\n },\n {\n \"regex\": \"Nomu[ _-]S30mini(?:[);/ ]|$)\",\n \"model\": \"S30 Mini\"\n },\n {\n \"regex\": \"(V1600S)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Nomi\": {\n \"regex\": \"Nomi[ _-]|(C101010 Ultra2|i501[234]|i5032|i50[57]0|i5510|i5532|C0(700(?:[02358]|2HD)|7850)|C1010[0-3])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"i501[23](?:[);/ ]|$)\",\n \"model\": \"Evo M2\"\n },\n {\n \"regex\": \"I5070(?:[);/ ]|$)\",\n \"model\": \"Iron-X\"\n },\n {\n \"regex\": \"i5014(?:[);/ ]|$)\",\n \"model\": \"Evo M4\"\n },\n {\n \"regex\": \"i5032(?:[);/ ]|$)\",\n \"model\": \"Evo X2\"\n },\n {\n \"regex\": \"i5050(?:[);/ ]|$)\",\n \"model\": \"Evo Z\"\n },\n {\n \"regex\": \"Nomi_i4510(?:[);/ ]|$)\",\n \"model\": \"Beat M\"\n },\n {\n \"regex\": \"i5532(?:[);/ ]|$)\",\n \"model\": \"Space X2\"\n },\n {\n \"regex\": \"i5510(?:[);/ ]|$)\",\n \"model\": \"Space M\"\n },\n {\n \"regex\": \"C101010 Ultra2\",\n \"model\": \"Ultra 2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(C0(?:700(?:[02358]|2HD)|7850)|C1010[0-3])(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Nomi[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Nomi[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"NUU Mobile\": {\n \"regex\": \"NUU_|(?:(?:N(5702|5001)L|S6001L)|A6L-[CG])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NUU_A([13])\",\n \"model\": \"A$1\"\n },\n {\n \"regex\": \"NUU_M([32])(?:[);/ ]|$)\",\n \"model\": \"M$1\"\n },\n {\n \"regex\": \"NUU_X5(?:[);/ ]|$)\",\n \"model\": \"X5\"\n },\n {\n \"regex\": \"S6001L\",\n \"model\": \"G2\"\n },\n {\n \"regex\": \"N5702L\",\n \"model\": \"G3\"\n },\n {\n \"regex\": \"(N5001L|A6L-[CG])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"NYX Mobile\": {\n \"regex\": \"NYX[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NYX_A1\",\n \"model\": \"A1\"\n },\n {\n \"regex\": \"NYX_Blink\",\n \"model\": \"Blink\"\n },\n {\n \"regex\": \"NYX_EGO\",\n \"model\": \"Ego\"\n },\n {\n \"regex\": \"NYX_FENIX\",\n \"model\": \"Fenix\"\n },\n {\n \"regex\": \"NYX_FLY_II\",\n \"model\": \"Fly II\"\n },\n {\n \"regex\": \"NYX_FLY_MINI\",\n \"model\": \"Fly Mini\"\n },\n {\n \"regex\": \"NYX_FLY\",\n \"model\": \"Fly\"\n },\n {\n \"regex\": \"NYX_HIT\",\n \"model\": \"Hit\"\n },\n {\n \"regex\": \"NYX_JAK\",\n \"model\": \"Jak\"\n },\n {\n \"regex\": \"NYX_JOIN\",\n \"model\": \"Join\"\n },\n {\n \"regex\": \"NYX_NOBA_II\",\n \"model\": \"Noba II\"\n },\n {\n \"regex\": \"NYX_NOBA\",\n \"model\": \"Noba\"\n },\n {\n \"regex\": \"NYX_ORBIS\",\n \"model\": \"Orbis\"\n },\n {\n \"regex\": \"NYX[ _]REX\",\n \"model\": \"Rex\"\n },\n {\n \"regex\": \"NYX_SHADE\",\n \"model\": \"Shade\"\n },\n {\n \"regex\": \"NYX_SKY\",\n \"model\": \"Sky\"\n },\n {\n \"regex\": \"NYX_SPARK\",\n \"model\": \"Spark\"\n },\n {\n \"regex\": \"NYX_VOX\",\n \"model\": \"Vox\"\n },\n {\n \"regex\": \"NYX_ZEUZ_HD\",\n \"model\": \"Zeus HD\"\n }\n ]\n },\n \"Nous\": {\n \"regex\": \"(?:NS(?:[356]|500[2-68]|5511|5502)|NS 5511)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NS 5511(?:[);/ ]|$)\",\n \"model\": \"NS5511\"\n },\n {\n \"regex\": \"(NS[0-9]{1,4})(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Nvidia\": {\n \"regex\": \"NVIDIA|SHIELD Tablet K1|SHIELD Android TV|Tegra(Note-P1640| Note 7)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TegraNote-P1640\",\n \"model\": \"Tegra Note P1640\"\n },\n {\n \"regex\": \"(SHIELD Tablet K1|Tegra Note 7)(?: Build|[;)])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SHIELD Android TV\",\n \"model\": \"SHIELD Android TV\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"NVIDIA_SHIELD_PRO_2019\",\n \"model\": \"SHIELD TV Pro\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"NVIDIA Shield\",\n \"model\": \"SHIELD TV\",\n \"device\": \"tv\"\n }\n ]\n },\n \"O+\": {\n \"regex\": \"O\\\\+[ _](Air|Crunch|Ultra|Upsized|Venti|360 ALPHA PLUS 2.0)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"O\\\\+[ _](Crunch|Ultra 2.0|Ultra|Upsized|Venti 4G)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"O\\\\+_AIR\",\n \"model\": \"Air\"\n },\n {\n \"regex\": \"O\\\\+ 360 ALPHA PLUS 2.0\",\n \"model\": \"360 Alpha Plus 2.0\"\n }\n ]\n },\n \"O2\": {\n \"regex\": \"Xda|(?<!FBCR/)O2[ \\\\-]|COCOON\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Xda[ _][a-z0-9_]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(COCOON)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"O2 ([a-z0-9 ]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"O2-([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Odys\": {\n \"regex\": \"ODYS[ _-]|IEOS[_ ]([^/;]+)|NOON(?:_PRO)? Build|SPACE10_(?:PLUS|PRO)_3G|THOR_?10|TAO_X10|RAPID_?(?:10|7)_?LTE|MAVEN_?10_|CONNECT[78]|ELEMENT10_PLUS_3G|XELIO[_0-9P]|ADM816HC|ADM8000KP|NEO6_LTE|EOS10|AEON|FALCON_10_PLUS_3G|FUSION|THANOS_10|MAVEN_X10_HD(?:_LTE)?|JUNIOR_8_PRO|JuniorT8Pro|(?:NOVA|PYRO)_X?7_PLUS_3G|UNO_X8|SLADE_X55|XELIO_PRO_10_LTE|NOTOSplus3G\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"XELIO[_ ]A10\",\n \"model\": \"Xelio A10\"\n },\n {\n \"regex\": \"XELIOPHONETAB3\",\n \"model\": \"Xelio Phonetab 3\"\n },\n {\n \"regex\": \"THANOS_10\",\n \"model\": \"Thanos 10\"\n },\n {\n \"regex\": \"XELIO_NEXT_10_PLUS_3G\",\n \"model\": \"Xelio Next 10 Plus 3G\"\n },\n {\n \"regex\": \"XELIO_PHONE_TAB7_3G\",\n \"model\": \"Xelio Phonetab 7 3G\"\n },\n {\n \"regex\": \"XELIO10EXTREME\",\n \"model\": \"Xelio 10 Xtreme\"\n },\n {\n \"regex\": \"XELIO10_PLUS_3G\",\n \"model\": \"Xelio 10 Plus 3G\"\n },\n {\n \"regex\": \"XELIO10_HD_PLUS_3G\",\n \"model\": \"Xelio 10 HD Plus 3G\"\n },\n {\n \"regex\": \"XELIO_10_HD\",\n \"model\": \"Xelio 10 HD\"\n },\n {\n \"regex\": \"XELIO_PRO_10_LTE\",\n \"model\": \"Xelio Pro 10 LTE\"\n },\n {\n \"regex\": \"ELEMENT10_PLUS_3G\",\n \"model\": \"Element 10 Plus 3G\"\n },\n {\n \"regex\": \"CONNECT8PLUS\",\n \"model\": \"Connect 8 Plus\"\n },\n {\n \"regex\": \"CONNECT7PRO\",\n \"model\": \"Connect 7 Pro\"\n },\n {\n \"regex\": \"MAVEN_X10_HD_LTE\",\n \"model\": \"Maven X10 HD LTE\"\n },\n {\n \"regex\": \"MAVEN_X10_HD\",\n \"model\": \"Maven X10 HD\"\n },\n {\n \"regex\": \"MAVEN_?10_PRO_PLUS_3G\",\n \"model\": \"Maven 10 Pro Plus 3G\"\n },\n {\n \"regex\": \"MAVEN_?10_?PLUS\",\n \"model\": \"Maven 10 Plus\"\n },\n {\n \"regex\": \"MAVEN_?10_?PRO\",\n \"model\": \"Maven 10 Pro\"\n },\n {\n \"regex\": \"MAVEN_?10_?HD\",\n \"model\": \"Maven 10 HD\"\n },\n {\n \"regex\": \"RAPID_?7_?LTE\",\n \"model\": \"Rapid 7 LTE\"\n },\n {\n \"regex\": \"RAPID_?10_?LTE\",\n \"model\": \"Rapid 10 LTE\"\n },\n {\n \"regex\": \"TAO_X10\",\n \"model\": \"Tao X10\"\n },\n {\n \"regex\": \"SPACE10_PLUS_3G\",\n \"model\": \"Space 10 Plus 3G\"\n },\n {\n \"regex\": \"SPACE10_PRO_3G\",\n \"model\": \"Space 10 Pro 3G\"\n },\n {\n \"regex\": \"THOR_?10 Build\",\n \"model\": \"Thor 10\"\n },\n {\n \"regex\": \"JuniorT8Pro\",\n \"model\": \"Junior T8 Pro\"\n },\n {\n \"regex\": \"JUNIOR_8_PRO\",\n \"model\": \"Junior 8 Pro\"\n },\n {\n \"regex\": \"ADM816HC\",\n \"model\": \"Neo X\"\n },\n {\n \"regex\": \"EOS10\",\n \"model\": \"EOS 10\"\n },\n {\n \"regex\": \"AEON\",\n \"model\": \"Aeon\"\n },\n {\n \"regex\": \"FALCON_10_PLUS_3G\",\n \"model\": \"Falcon 10 Plus 3G\"\n },\n {\n \"regex\": \"FUSION\",\n \"model\": \"Fusion 7\"\n },\n {\n \"regex\": \"UNO_X8\",\n \"model\": \"Uno X8\"\n },\n {\n \"regex\": \"ADM8000KP\",\n \"model\": \"Titan\"\n },\n {\n \"regex\": \"PYRO_7_PLUS_3G\",\n \"model\": \"Pyro 7 Plus 3G\"\n },\n {\n \"regex\": \"NOVA_X7_PLUS_3G\",\n \"model\": \"Nova X7 Plus 3G\"\n },\n {\n \"regex\": \"ODYS_NOVA_X7\",\n \"model\": \"Nova X7\"\n },\n {\n \"regex\": \"THOR_?10_PLUS_3G\",\n \"model\": \"Thor 10 Plus 3G\"\n },\n {\n \"regex\": \"NOTOSplus3G\",\n \"model\": \"Notos Plus 3G\"\n },\n {\n \"regex\": \"NEO6[_ ]LTE\",\n \"model\": \"Neo 6 LTE\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"SLADE_X55\",\n \"model\": \"Slade X55\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"IEOS[ _]([^/;]+) Build\",\n \"model\": \"Ieos $1\"\n },\n {\n \"regex\": \"(?:ODYS[ _-])?NOON Build\",\n \"model\": \"Noon\"\n },\n {\n \"regex\": \"(?:ODYS[ _-])?NOON_PRO Build\",\n \"model\": \"Noon Pro\"\n },\n {\n \"regex\": \"Odys[ _-]([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Obi\": {\n \"regex\": \"Obi[ _-]|(SJ1\\\\.5|SJ2\\\\.6|S400|S452\\\\+|S451|S453|S501|S502|S503\\\\+?|S507|S520|S550|S551|falcon)[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SJ2\\\\.6\",\n \"model\": \"SJ2.6\"\n },\n {\n \"regex\": \"SJ1\\\\.5\",\n \"model\": \"SJ1.5\"\n },\n {\n \"regex\": \"(?:Obi_)?S400\",\n \"model\": \"Skipper\"\n },\n {\n \"regex\": \"(?:Obi_)?S451|falcon\",\n \"model\": \"Flacon\"\n },\n {\n \"regex\": \"(?:Obi_)?S452\\\\+\",\n \"model\": \"Python\"\n },\n {\n \"regex\": \"(?:Obi_)?S453\",\n \"model\": \"Fox\"\n },\n {\n \"regex\": \"(?:Obi_)?S501\",\n \"model\": \"Wolverine\"\n },\n {\n \"regex\": \"(?:Obi_)?S502\",\n \"model\": \"Leopard\"\n },\n {\n \"regex\": \"(?:Obi_)?S503\\\\+\",\n \"model\": \"Boa Plus\"\n },\n {\n \"regex\": \"(?:Obi_)?S503\",\n \"model\": \"Boa\"\n },\n {\n \"regex\": \"(?:Obi_)?S507\",\n \"model\": \"Pelican\"\n },\n {\n \"regex\": \"(?:Obi_)?S520\",\n \"model\": \"Octopus\"\n },\n {\n \"regex\": \"(?:Obi_)?S550\",\n \"model\": \"Crane\"\n },\n {\n \"regex\": \"(?:Obi_)?S551\",\n \"model\": \"Hornbill\"\n },\n {\n \"regex\": \"(?:Obi_)?S454\",\n \"model\": \"Alligator\"\n },\n {\n \"regex\": \"Obi[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Obi[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Okapia\": {\n \"regex\": \"Signature (?:L|Pro|Touch)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Signature (L|Pro|Touch)\",\n \"model\": \"Signature $1\"\n }\n ]\n },\n \"Onda\": {\n \"regex\": \"Onda|(?:(?:V820w|V891[w]?|V919(?: 3G)? Air)[ _-]DualOS|(?:V919 4G Air|V989 Air|V972) Core[48]|T2101L2B1C| V10 4G|OBOOK (?:20 SE|20 PLUS DUALOS)|OBOOK10 SE|V919 Air CH DualOS)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ONDA[ _]MID\",\n \"model\": \"MID\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V820w[ _-]DualOS\",\n \"model\": \"V820W Dual OS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V891W[ _-]DualOS\",\n \"model\": \"V891W Dual OS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V891[ _-]DualOS\",\n \"model\": \"V891 Dual OS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V919 3G Air[ _-]DualOS\",\n \"model\": \"V919 3G Air Dual OS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V919 Air[ _-]DualOS\",\n \"model\": \"V919 Air Dual OS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V919 Air CH DualOS\",\n \"model\": \"V919 Air CH Dual OS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V919 4G Air Core8\",\n \"model\": \"V919 4G Air Core 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V972 Core4\",\n \"model\": \"V919 Core 4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V989 Air Core8\",\n \"model\": \"V989 Air Core 8\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"T2101L2B1C|OBOOK 20 PLUS DUALOS\",\n \"model\": \"oBook 20 Plus Dual OS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \" V10 4G(?:[);/ ]|$)\",\n \"model\": \"V10 10.1\\\" 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"OBOOK 20 SE(?:[);/ ]|$)\",\n \"model\": \"oBook 20 SE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"OBOOK10 SE(?:[);/ ]|$)\",\n \"model\": \"oBook 10 SE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"([a-z0-9]+)[ _]Onda\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Onda ([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"OnePlus\": {\n \"regex\": \"(?:du_)?ONEPLUS|(?:A0001|A200[135]|AC200[13]|A300[03]|A3010|A5000|A600[03]|A601[03]|BE201[1235]|BE2025|BE202[89]|E100[135]|GM191[03517]|GM190[0135]|GM192[05]|HD191[013]|HD190[01357]|HD1925|IN201[013579]|IN202[0135]|KB200[01357]|LE2117|LE212[03])(?: Build|\\\\))\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AC200[13](?:[);/ ]|$)\",\n \"model\": \"Nord 5G\"\n },\n {\n \"regex\": \"BE2012(?:[);/ ]|$)\",\n \"model\": \"Clover\"\n },\n {\n \"regex\": \"BE201[135](?:[);/ ]|$)\",\n \"model\": \"Nord N100\"\n },\n {\n \"regex\": \"BE2025(?:[);/ ]|$)\",\n \"model\": \"Nord N10\"\n },\n {\n \"regex\": \"BE2029(?:[);/ ]|$)\",\n \"model\": \"Nord N10 5G\"\n },\n {\n \"regex\": \"BE2028(?:[);/ ]|$)\",\n \"model\": \"Nord N10 Lite\"\n },\n {\n \"regex\": \"IN202[0135](?:[);/ ]|$)\",\n \"model\": \"8 Pro\"\n },\n {\n \"regex\": \"KB2000(?:[);/ ]|$)\",\n \"model\": \"8T\"\n },\n {\n \"regex\": \"IN201[01357](?:[);/ ]|$)\",\n \"model\": \"8\"\n },\n {\n \"regex\": \"IN2019(?:[);/ ]|$)\",\n \"model\": \"8 5G UW\"\n },\n {\n \"regex\": \"LE2117(?:[);/ ]|$)\",\n \"model\": \"9\"\n },\n {\n \"regex\": \"LE212[03](?:[);/ ]|$)\",\n \"model\": \"9 Pro\"\n },\n {\n \"regex\": \"(?:GM191[01357]|OnePlus 7 Pro)(?:[);/ ]|$)\",\n \"model\": \"7 Pro\"\n },\n {\n \"regex\": \"GM190[0135](?:[);/ ]|$)\",\n \"model\": \"7\"\n },\n {\n \"regex\": \"HD190[01357](?:[);/ ]|$)\",\n \"model\": \"7T\"\n },\n {\n \"regex\": \"(?:HD191[013]|OnePlus 7T Pro)(?:[);/ ]|$)\",\n \"model\": \"7T Pro\"\n },\n {\n \"regex\": \"(?:HD1925|GM192[05])(?:[);/ ]|$)\",\n \"model\": \"7T Pro 5G\"\n },\n {\n \"regex\": \"KB200[1357](?:[);/ ]|$)\",\n \"model\": \"8T\"\n },\n {\n \"regex\": \"A0001(?:[);/ ]|$)\",\n \"model\": \"One\"\n },\n {\n \"regex\": \"A200[135]|OnePlus2\",\n \"model\": \"2\"\n },\n {\n \"regex\": \"E100[135](?:[);/ ]|$)\",\n \"model\": \"X\"\n },\n {\n \"regex\": \"A3010|OnePlus3T\",\n \"model\": \"3T\"\n },\n {\n \"regex\": \"A300[03]|OnePlus3\",\n \"model\": \"3\"\n },\n {\n \"regex\": \"A5010|OnePlus[ ]?5T\",\n \"model\": \"5T\"\n },\n {\n \"regex\": \"A5000|OnePlus5\",\n \"model\": \"5\"\n },\n {\n \"regex\": \"A600[03]|OnePlus6\",\n \"model\": \"6\"\n },\n {\n \"regex\": \"A601[03](?:[);/ ]|$)\",\n \"model\": \"6T\"\n },\n {\n \"regex\": \"(?:du_)?ONEPLUS ?([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Realme\": {\n \"regex\": \"Realme[ _]|(?:RMX(?:19(03|4[1235]|19|9[23]|2[157]|[01379]1|73)|20(?:[025-7]1|[037]2|2[57]|63|7[56]|8[156]|[2-5]0)|21(?:0[13]|17|[12]1|4[24]|5[15]|6[13]|7[60]|8[059]|9[35])|2200|18(0[1579]|11|3[13]|2[157]|[45]1|45)|3201|30[38]1|3063)|(?:OPPO[ _]?)?CPH1861)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1861(?:[);/ ]|$)\",\n \"model\": \"1\"\n },\n {\n \"regex\": \"RMX180[59]\",\n \"model\": \"2\"\n },\n {\n \"regex\": \"RMX180[17]\",\n \"model\": \"2 Pro\"\n },\n {\n \"regex\": \"RMX(1833|182[15])\",\n \"model\": \"3\"\n },\n {\n \"regex\": \"RMX1827\",\n \"model\": \"3i\"\n },\n {\n \"regex\": \"RMX1851\",\n \"model\": \"3 Pro\"\n },\n {\n \"regex\": \"RMX190[13]|Realme X(?:[);/ ]|$)\",\n \"model\": \"X\"\n },\n {\n \"regex\": \"RMX199[12]\",\n \"model\": \"X2\"\n },\n {\n \"regex\": \"RMX1993\",\n \"model\": \"X2 Dual\"\n },\n {\n \"regex\": \"RMX1931|Realme X2 Pro(?:[);/ ]|$)\",\n \"model\": \"X2 Pro\"\n },\n {\n \"regex\": \"RMX2117\",\n \"model\": \"Q2 5G\"\n },\n {\n \"regex\": \"RMX2176(?:[);/ ]|$)\",\n \"model\": \"X7 5G\"\n },\n {\n \"regex\": \"RMX2121(?:[);/ ]|$)\",\n \"model\": \"X7 Pro 5G\"\n },\n {\n \"regex\": \"RMX1921|Realme XT(?:[);/ ]|$)\",\n \"model\": \"XT\"\n },\n {\n \"regex\": \"RMX19(1[19]|27)\",\n \"model\": \"5\"\n },\n {\n \"regex\": \"RMX197[13]\",\n \"model\": \"5 Pro\"\n },\n {\n \"regex\": \"RMX203[02]\",\n \"model\": \"5i\"\n },\n {\n \"regex\": \"RMX2001\",\n \"model\": \"6\"\n },\n {\n \"regex\": \"RMX2040\",\n \"model\": \"6I\"\n },\n {\n \"regex\": \"RMX2002\",\n \"model\": \"6S\"\n },\n {\n \"regex\": \"RMX206[13](?:[);/ ]|$)\",\n \"model\": \"6 Pro\"\n },\n {\n \"regex\": \"RMX215[15]\",\n \"model\": \"7\"\n },\n {\n \"regex\": \"RMX2103\",\n \"model\": \"7I\"\n },\n {\n \"regex\": \"RMX2170\",\n \"model\": \"7 Pro\"\n },\n {\n \"regex\": \"RMX3081\",\n \"model\": \"8 Pro\"\n },\n {\n \"regex\": \"RMX1925(?:[);/ ]|$)\",\n \"model\": \"5S\"\n },\n {\n \"regex\": \"RMX1811(?:[);/ ]|$)\",\n \"model\": \"C1\"\n },\n {\n \"regex\": \"RMX194[1235](?:[);/ ]|$)\",\n \"model\": \"C2\"\n },\n {\n \"regex\": \"RMX202[107](?:[);/ ]|$)\",\n \"model\": \"C3\"\n },\n {\n \"regex\": \"RMX2185(?:[);/ ]|$)\",\n \"model\": \"C11\"\n },\n {\n \"regex\": \"RMX2189(?:[);/ ]|$)\",\n \"model\": \"C12\"\n },\n {\n \"regex\": \"RMX2180(?:[);/ ]|$)\",\n \"model\": \"C15\"\n },\n {\n \"regex\": \"RMX2195(?:[);/ ]|$)\",\n \"model\": \"C15 Qualcomm Edition\"\n },\n {\n \"regex\": \"RMX2101(?:[);/ ]|$)\",\n \"model\": \"C17\"\n },\n {\n \"regex\": \"RMX3063(?:[);/ ]|$)\",\n \"model\": \"C20\"\n },\n {\n \"regex\": \"RMX3031(?:[);/ ]|$)\",\n \"model\": \"GT Neo\"\n },\n {\n \"regex\": \"RMX216[13](?:[);/ ]|$)\",\n \"model\": \"Narzo 20 Pro\"\n },\n {\n \"regex\": \"RMX2193(?:[);/ ]|$)\",\n \"model\": \"Narzo 20\"\n },\n {\n \"regex\": \"RMX2050(?:[);/ ]|$)\",\n \"model\": \"Narzo 20A\"\n },\n {\n \"regex\": \"RMX1831(?:[);/ ]|$)\",\n \"model\": \"U1\"\n },\n {\n \"regex\": \"RMX(?:20(?:51|[2]5)|2144)(?:[);/ ]|$)\",\n \"model\": \"X50 5G\"\n },\n {\n \"regex\": \"RMX2071(?:[);/ ]|$)\",\n \"model\": \"X50 Pro\"\n },\n {\n \"regex\": \"RMX207[56](?:[);/ ]|$)\",\n \"model\": \"X50 Pro 5G\"\n },\n {\n \"regex\": \"RMX2072(?:[);/ ]|$)\",\n \"model\": \"X50 Pro Player\"\n },\n {\n \"regex\": \"RMX(2142|2081)(?:[);/ ]|$)\",\n \"model\": \"X3\"\n },\n {\n \"regex\": \"RMX208[56](?:[);/ ]|$)\",\n \"model\": \"X3 Super Zoom\"\n },\n {\n \"regex\": \"RMX2111\",\n \"model\": \"V5 5G\"\n },\n {\n \"regex\": \"RMX2200\",\n \"model\": \"V3 5G\"\n },\n {\n \"regex\": \"RMX3201\",\n \"model\": \"C21\"\n },\n {\n \"regex\": \"Realme[ _]([1-9])[ _]Pro(?:[);/ ]|$)\",\n \"model\": \"$1 Pro\"\n }\n ]\n },\n \"OPPO\": {\n \"regex\": \"(?:OB-)?OPPO[ _]?([a-z0-9]+)|N1T|R8001|OPG01|A00[12]OP|(?:X90[07][0679]|U70[57]T?|X909T?|R(?:10[01]1|2001|201[07]|6007|7005|7007|80[13579]|81[13579]|82[01379]|83[013]|800[067]|8015|810[679]|811[13]|820[057])[KLSTW]?|N520[79]|N5117|A33f|A33fw|A37fw?|PAAM00|PAAT00|PAC[TM]00)(?:[);/ ]|$)|R7kf|R7plusf|R7Plusm|A1601|CPH[0-9]{4}|CPH19(69|79|23|1[179])|PB(A[TM]00|CT10|BT30|CM[13]0|[FD]M00)|P(DAM10|ADM00|AF[TM]00|ADT00|AHM00|BBM[03]0|BBT00|BDT00|BFT00|[CB]E[MT]00|CA[MT]00|C[CDG]M00|CA[MT]10|[CD]PM00|CRM00|CDT00|CD[TM]10|CHM[013]0|CKM[08]0|CLM[15]0|DEM[13]0|DHM00|DK[TM]00|DPT00|DB[TM]00|DCM00|[CD]NM00|DVM00|DY[TM]20|DNT00|EA[TM]00)|PDSM00\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"PCHM10(?:[);/ ]|$)\",\n \"model\": \"A11\"\n },\n {\n \"regex\": \"(?:CPH2083|CPH2077)(?:[);/ ]|$)\",\n \"model\": \"A12\"\n },\n {\n \"regex\": \"PCHM00(?:[);/ ]|$)\",\n \"model\": \"A11x\"\n },\n {\n \"regex\": \"CPH1923(?:[);/ ]|$)\",\n \"model\": \"A1K\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(CPH1837|PAD[TM]00)(?:[);/ ]|$)\",\n \"model\": \"A3\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?A37f(w)(?:[);/ ]|$)\",\n \"model\": \"A37f$1\"\n },\n {\n \"regex\": \"A37f(?:[);/ ]|$)\",\n \"model\": \"A37f\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1605(?:[);/ ]|$)\",\n \"model\": \"A39\"\n },\n {\n \"regex\": \"CPH20(?:81|73|31|15)(?:[);/ ]|$)\",\n \"model\": \"A31\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH18(?:0[35]|53)|PBBM30)(?:[);/ ]|$)\",\n \"model\": \"A3s\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH1809|PBA[TM]00|PBBT30)(?:[);/ ]|$)\",\n \"model\": \"A5\"\n },\n {\n \"regex\": \"CPH19(?:3[13]|43)(?:[);/ ]|$)\",\n \"model\": \"A5 (2020)\"\n },\n {\n \"regex\": \"PDVM00(?:[);/ ]|$)\",\n \"model\": \"A32\"\n },\n {\n \"regex\": \"(?:PDAM10|CPH2069|CPH2061)(?:[);/ ]|$)\",\n \"model\": \"A52\"\n },\n {\n \"regex\": \"CPH2127(?:[);/ ]|$)\",\n \"model\": \"A53\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH170[15](?:[);/ ]|$)\",\n \"model\": \"A57\"\n },\n {\n \"regex\": \"CPH19(?:09|1[02])(?:[);/ ]|$)\",\n \"model\": \"A5S\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH190[15]|PBF[TM]00)(?:[);/ ]|$)\",\n \"model\": \"A7\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(CPH1801|CPH1717)(?:[);/ ]|$)\",\n \"model\": \"A71\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:PDY[TM]20|CPH2067)(?:[);/ ]|$)\",\n \"model\": \"A72\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1715(?:[);/ ]|$)\",\n \"model\": \"A77\"\n },\n {\n \"regex\": \"PCD[TM]00(?:[);/ ]|$)\",\n \"model\": \"A7n\"\n },\n {\n \"regex\": \"(PBBT00|PBBM00)(?:[);/ ]|$)\",\n \"model\": \"A7x\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:PDBM00)(?:[);/ ]|$)\",\n \"model\": \"A8\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1729(?:[);/ ]|$)\",\n \"model\": \"A83\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1827(?:[);/ ]|$)\",\n \"model\": \"A83 (2018)\"\n },\n {\n \"regex\": \"PCA[TM]10(?:[);/ ]|$)\",\n \"model\": \"A9\"\n },\n {\n \"regex\": \"(CPH1937|CPH1941|PCHM30)(?:[);/ ]|$)\",\n \"model\": \"A9 (2020)\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1938(?:[);/ ]|$)\",\n \"model\": \"A9 (EN)\"\n },\n {\n \"regex\": \"(?:PCPM00|CPH20[02]1)(?:[);/ ]|$)\",\n \"model\": \"A91\"\n },\n {\n \"regex\": \"CPH2059(?:[);/ ]|$)\",\n \"model\": \"A92\"\n },\n {\n \"regex\": \"PDKT00(?:[);/ ]|$)\",\n \"model\": \"A92s\"\n },\n {\n \"regex\": \"PDKM00(?:[);/ ]|$)\",\n \"model\": \"A93s\"\n },\n {\n \"regex\": \"PCE[TM]00(?:[);/ ]|$)\",\n \"model\": \"A9x\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1851(?:[);/ ]|$)\",\n \"model\": \"AX5\"\n },\n {\n \"regex\": \"CPH1920(?:[);/ ]|$)\",\n \"model\": \"AX5s\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1903(?:[);/ ]|$)\",\n \"model\": \"AX7\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?X9009(?:[);/ ]|$)\",\n \"model\": \"F1 Plus\"\n },\n {\n \"regex\": \"CPH191[135](?:[);/ ]|$)\",\n \"model\": \"F11\"\n },\n {\n \"regex\": \"CPH19(?:69|87)(?:[);/ ]|$)\",\n \"model\": \"F11 Pro\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH2119)(?:[);/ ]|$)\",\n \"model\": \"F17 Pro\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?A1601(?:[);/ ]|$)\",\n \"model\": \"F1s\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1609(?:[);/ ]|$)\",\n \"model\": \"F3\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1613(?:[);/ ]|$)\",\n \"model\": \"F3 Plus\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH172[37](?:[);/ ]|$)\",\n \"model\": \"F5\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1725(?:[);/ ]|$)\",\n \"model\": \"F5 Youth\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH(1859|18(?:19|21))(?:[);/ ]|$)\",\n \"model\": \"F7\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH1825|CPH1881)(?:[);/ ]|$)\",\n \"model\": \"F9\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1823(?:[);/ ]|$)\",\n \"model\": \"F9 Pro\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?X909T?(?:[);/ ]|$)\",\n \"model\": \"Find 5\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R827T?(?:[);/ ]|$)\",\n \"model\": \"Find 5 Mini\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?X907[067](?:[);/ ]|$)\",\n \"model\": \"Find 7\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?X900[067](?:[);/ ]|$)\",\n \"model\": \"Find 7a\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R815[TW]?(?:[);/ ]|$)\",\n \"model\": \"Find Clover\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R8015(?:[);/ ]|$)\",\n \"model\": \"Find Guitar\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R8111(?:[);/ ]|$)\",\n \"model\": \"Find Melody\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R821T?(?:[);/ ]|$)\",\n \"model\": \"Find Muse\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?U707T?(?:[);/ ]|$)\",\n \"model\": \"Find Way S\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?U705T(?:[);/ ]|$)\",\n \"model\": \"Ulike 2\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH187[15]|PAF[MT]00)(?:[);/ ]|$)\",\n \"model\": \"Find X\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:PAHM00)(?:[);/ ]|$)\",\n \"model\": \"Find X Lamborghini\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:PDEM10|CPH2023)(?:[);/ ]|$)\",\n \"model\": \"Find X2\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH2005(?:[);/ ]|$)\",\n \"model\": \"Find X2 Lite\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:PDEM30|OPG01|CPH2025)(?:[);/ ]|$)\",\n \"model\": \"Find X2 Pro\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R1011 Build\",\n \"model\": \"Joy Plus\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(PBC(?:M30|T10))(?:[);/ ]|$)\",\n \"model\": \"K1\"\n },\n {\n \"regex\": \"CPH1955(?:[);/ ]|$)\",\n \"model\": \"K3\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(PCNM00)(?:[);/ ]|$)\",\n \"model\": \"K5\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(PCLM50)(?:[);/ ]|$)\",\n \"model\": \"K7\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?N5117(?:[);/ ]|$)\",\n \"model\": \"N1 Mini\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?N520[79](?:[);/ ]|$)\",\n \"model\": \"N3\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R831T?(?:[);/ ]|$)\",\n \"model\": \"Neo\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R831K(?:[);/ ]|$)\",\n \"model\": \"Neo 3\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R831[SL](?:[);/ ]|$)\",\n \"model\": \"Neo 5\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?A33f(?:[);/ ]|$)\",\n \"model\": \"Neo 7\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?A33fw(?:[);/ ]|$)\",\n \"model\": \"Neo 7s\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R8113(?:[);/ ]|$)\",\n \"model\": \"Piano\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1707(?:[);/ ]|$)\",\n \"model\": \"R11\"\n },\n {\n \"regex\": \"R8001(?:[);/ ]|$)\",\n \"model\": \"R1K\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1719(?:[);/ ]|$)\",\n \"model\": \"R11s\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1721(?:[);/ ]|$)\",\n \"model\": \"R11s Plus\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH1835|PAC[TM]00|PAAM00)(?:[);/ ]|$)\",\n \"model\": \"R15\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH183[13]|PAAT00)(?:[);/ ]|$)\",\n \"model\": \"R15 Pro\"\n },\n {\n \"regex\": \"PBCM10(?:[);/ ]|$)\",\n \"model\": \"R15x\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH1879|PBE[MT]00)(?:[);/ ]|$)\",\n \"model\": \"R17\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH1893)(?:[);/ ]|$)\",\n \"model\": \"R17 Neo\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH1877|PBD[MT]00)(?:[);/ ]|$)\",\n \"model\": \"R17 Pro\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R8006(?:[);/ ]|$)\",\n \"model\": \"R1L\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R800[07](?:[);/ ]|$)\",\n \"model\": \"R1S\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R810[679](?:[);/ ]|$)\",\n \"model\": \"R5\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R7kf(?:[);/ ]|$)\",\n \"model\": \"R7 Lite\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R7Plusm(?:[);/ ]|$)\",\n \"model\": \"R7 Plus\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?R7Plusf(?:[);/ ]|$)\",\n \"model\": \"R7 Plus F\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?X9079(?:[);/ ]|$)\",\n \"model\": \"R9 Plus\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?CPH1607(?:[);/ ]|$)\",\n \"model\": \"R9s\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH1611|R9s Plus)(?:[);/ ]|$)\",\n \"model\": \"R9s Plus\"\n },\n {\n \"regex\": \"(?:CPH1917|PCA[MT]00)(?:[);/ ]|$)\",\n \"model\": \"Reno\"\n },\n {\n \"regex\": \"CPH1983(?:[);/ ]|$)\",\n \"model\": \"Reno A\"\n },\n {\n \"regex\": \"PCCM00(?:[);/ ]|$)\",\n \"model\": \"Reno 10X\"\n },\n {\n \"regex\": \"CPH1919(?:[);/ ]|$)\",\n \"model\": \"Reno 10X Zoom\"\n },\n {\n \"regex\": \"(?:PCKM00|CPH1907)(?:[);/ ]|$)\",\n \"model\": \"Reno 2\"\n },\n {\n \"regex\": \"CPH1989(?:[);/ ]|$)\",\n \"model\": \"Reno 2F\"\n },\n {\n \"regex\": \"(?:PCKM80|CPH1945|CPH1951)(?:[);/ ]|$)\",\n \"model\": \"Reno 2Z\"\n },\n {\n \"regex\": \"CPH2043(?:[);/ ]|$)\",\n \"model\": \"Reno 3\"\n },\n {\n \"regex\": \"(?:CPH2013|A002OP)(?:[);/ ]|$)\",\n \"model\": \"Reno 3A\"\n },\n {\n \"regex\": \"(?:PDCM00|A001OP)(?:[);/ ]|$)\",\n \"model\": \"Reno 3 5G\"\n },\n {\n \"regex\": \"(?:PCRM00|CPH203[57]|CPH2009)\",\n \"model\": \"Reno 3 Pro\"\n },\n {\n \"regex\": \"CPH2113(?:[);/ ]|$)\",\n \"model\": \"Reno 4 4G\"\n },\n {\n \"regex\": \"CPH2125(?:[);/ ]|$)\",\n \"model\": \"Reno 4 Lite\"\n },\n {\n \"regex\": \"CPH2109(?:[);/ ]|$)\",\n \"model\": \"Reno 4 Pro 4G\"\n },\n {\n \"regex\": \"PDP[TM]00(?:[);/ ]|$)\",\n \"model\": \"Reno 4 5G\"\n },\n {\n \"regex\": \"PEA[TM]00(?:[);/ ]|$)\",\n \"model\": \"Reno 4 SE 5G \"\n },\n {\n \"regex\": \"PDN[TM]00(?:[);/ ]|$)\",\n \"model\": \"Reno 4 Pro 5G\"\n },\n {\n \"regex\": \"PDSM00(?:[);/ ]|$)\",\n \"model\": \"Reno 5 Pro 5G\"\n },\n {\n \"regex\": \"CPH192[15]\",\n \"model\": \"Reno 5G\"\n },\n {\n \"regex\": \"PCLM10(?:[);/ ]|$)\",\n \"model\": \"Reno Ace\"\n },\n {\n \"regex\": \"PDHM00(?:[);/ ]|$)\",\n \"model\": \"Reno Ace 2\"\n },\n {\n \"regex\": \"PCGM00(?:[);/ ]|$)\",\n \"model\": \"Reno K3\"\n },\n {\n \"regex\": \"(?:OPPO[ _]?)?(?:CPH1979|PCD[TM]10)(?:[);/ ]|$)\",\n \"model\": \"Reno Z\"\n },\n {\n \"regex\": \"N1T?(?:[);/ ]|$)\",\n \"model\": \"N1T\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"R([0-9]{3,4}[KSTW]?)(?:[);/ ]|$)\",\n \"model\": \"R$1\"\n },\n {\n \"regex\": \"(CPH[0-9]{4})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:OB-)?OPPO[ _]?((?!Browser)[a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Opsson\": {\n \"regex\": \"Opsson|IUSAI\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IUSAI[ _]([^/;]+) Build\",\n \"model\": \"Iusai $1\"\n },\n {\n \"regex\": \"IUSAI[ _]([^/;\\\\)]+)[/;\\\\)]\",\n \"model\": \"Iusai $1\"\n },\n {\n \"regex\": \"Opsson[ _]([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:Opsson-)?Opsson[ -_]([^/;]+)/\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Orange\": {\n \"regex\": \"SPV[ \\\\-]?([a-z0-9]+)|(?<!FBCR/)Orange[ _-](?!Tahiti-LS\\\\))([^/;]+)( Build|\\\\))(?<!Tahiti-LS\\\\))|SC/IHD92|Nura 2|FunTab ([^/;]+) Build|Orange Mahpee\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SC/IHD92\",\n \"model\": \"Livebox Play\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"Nura 2\",\n \"model\": \"Nura 2\"\n },\n {\n \"regex\": \"Sego\",\n \"model\": \"Sego\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"FunTab ([^/;]+) Build\",\n \"model\": \"FunTab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Orange[ _-](Rise)(3[12]|5[12])(?:[);/ ]|$)\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"Orange[ _-](Dive)72(?:[);/ ]|$)\",\n \"model\": \"$1 72\"\n },\n {\n \"regex\": \"Orange[ _-](Daytona|Dive (30|7[13])|Dublin|Fova|Gova|Hi 4G|Hiro|Kivo|Monte Carlo|Neva 80|Neva play|Nura|Reyo|Rise[_ ](3[034]|40|5[345])|Rono|Roya|San Francisco|Tactile internet 2|Tado|Yomi|Yumo|Zali|Mahpee)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SPV[ \\\\-]?([a-z0-9]+)\",\n \"model\": \"SPV $1\"\n }\n ]\n },\n \"Oukitel\": {\n \"regex\": \"OUKITEL|(?:(?:C15|C16|K10000|K[46]000)(?:[ _]Pro)|K4000Pro|U16 Max|U7 Max|U7 Plus|U11[_ ]Plus|U20_Plus|OK6000 Plus|WP5000|WP[58] Pro|K[46]000[ _](?:Plus|Lite)|Y4800|K10000|K[4-8]000| WP[5-7])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(C15|C16|K10000|K[46]000|WP[258]|U15)[ _]?Pro(?:[);/ ]|$)\",\n \"model\": \"$1 Pro\"\n },\n {\n \"regex\": \"OUKITEL K([37])(?:[);/ ]|$)\",\n \"model\": \"K$1\"\n },\n {\n \"regex\": \"(K10000|U16|U7)[ _]Max(?:[);/ ]|$)\",\n \"model\": \"$1 Max\"\n },\n {\n \"regex\": \"(U20|K[46]000|U7|U11|OK6000)[_ ]?Plus(?:[);/ ]|$)\",\n \"model\": \"$1 Plus\"\n },\n {\n \"regex\": \"(K4000)[_ ]Lite(?:[);/ ]|$)\",\n \"model\": \"$1 Lite\"\n },\n {\n \"regex\": \"(Y4800|K10000|K[4-8]000|WP2|WP5000|[CU]2|U10)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \" (WP[5-7])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"OUKITEL; ([^;]+);\",\n \"model\": \"$1\"\n }\n ]\n },\n \"OKWU\": {\n \"regex\": \"OKWU SIGMA(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Sigma\"\n },\n \"Ouki\": {\n \"regex\": \"OUKI|OK[AU][0-9]+[a-z]* Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"OUKI[ _-]?([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([^;/)]+) Build/OUKI\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"OUKI[ _-]?([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(OK[AU][0-9]+[a-z]*) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Overmax\": {\n \"regex\": \"OV-[a-z]+(?:[^;(/]*)[();/ ]|Qualcore 10(?:10|27)|Vertis 5021 Aim|OV1027[34]G\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"OV-V10\",\n \"model\": \"Vertis Yard\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Vertis 5021 Aim\",\n \"model\": \"Vertis 5021 Aim\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"OV-Vertis[ _-]([^;/]+) Build\",\n \"model\": \"Vertis $1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Qualcore 1010\",\n \"model\": \"Qualcore 1010\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Qualcore 1027 4G\",\n \"model\": \"Qualcore 1027 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"OV1027([34])G\",\n \"model\": \"Qualcore 1027 $1G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(OV-[a-z]+(?:[^;(/]*))(?<!Build)[();/ ]\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Oysters\": {\n \"regex\": \"Oysters|T84ERI[ _]3G|T72HM(s_)?3G|T102MS_3G|T102ER3G|(T74HMi|T84Bi)[_ ]4G|T74MR4G|T84Ni[_ ][34]G|Pacific[ ]?800i|T104B_[34]G|IndianV|T72HA_3G|T74D_3G|T74N_3G|T74SC_3G|T74Mai_3G|T104MBi_3G|T104SCi_3G|T104ER4G|Atlantic4G|AntarcticE|T7V 3G\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Pacific[ ]?800i\",\n \"device\": \"smartphone\",\n \"model\": \"Pacific 800i\"\n },\n {\n \"regex\": \"Atlantic4G\",\n \"device\": \"smartphone\",\n \"model\": \"Atlantic 4G\"\n },\n {\n \"regex\": \"AntarcticE\",\n \"device\": \"smartphone\",\n \"model\": \"Antarctic E\"\n },\n {\n \"regex\": \"IndianV\",\n \"device\": \"smartphone\",\n \"model\": \"Indian V\"\n },\n {\n \"regex\": \"Oysters[_ ]PacificV\",\n \"device\": \"smartphone\",\n \"model\": \"Pacific V\"\n },\n {\n \"regex\": \"Oysters ((?:Arctic|Indian|Atlantic|Pacific)[^/;]+) Build\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(T84ERI[ _]3G|T72HM(s_)?3G|(?:(T74HMi|T84Bi)[_ ]4G)|T84Ni[_ ][34]G)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(T74MR|T102MS|T104B|T74SC|T74[DN]|T72HA|T102ER|T104SCi|T104MBi|T104ER|T7V)[ _]?([34]G)\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"T74Mai_3G\",\n \"model\": \"T74MAi 3G\"\n },\n {\n \"regex\": \"Oysters ([^/;]+)( Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"\u00F6wn\": {\n \"regex\": \"OWN[ _]|(?:S4035[ _][34]G|Smart8|SMART PLUS LTE)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"FUN ([67])\",\n \"model\": \"Fun $1\"\n },\n {\n \"regex\": \"FUN 5\\\\(4G\\\\)\",\n \"model\": \"Fun 5 4G\"\n },\n {\n \"regex\": \"(?:OWN[ _])?(S3000D|S3010|S3020D|S4010|S4025|S4035[ _][34]G)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"One Plus\",\n \"model\": \"One Plus\"\n },\n {\n \"regex\": \"One\",\n \"model\": \"One\"\n },\n {\n \"regex\": \"SMART 9\",\n \"model\": \"Smart 9\"\n },\n {\n \"regex\": \"Smart8(?:[);/ ]|$)\",\n \"model\": \"Smart 8\"\n },\n {\n \"regex\": \"SMART PLUS LTE(?:[);/ ]|$)\",\n \"model\": \"Smart Plus LTE\"\n }\n ]\n },\n \"Panacom\": {\n \"regex\": \"T-i708D\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"T-i708D\",\n \"device\": \"tablet\",\n \"model\": \"T-i708D\"\n }\n ]\n },\n \"Panasonic\": {\n \"regex\": \"Panasonic|PANATV[0-9]+|Viera/|(?:P902i|P-0[28]D|FZ-B2D|FZ-[NX]1|DMC-CM1|P-01J|P-03E)(?:[);/ ]|$)|Eluga[ _]|P55 Novo 4G\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"P-01J(?:[);/ ]|$)\",\n \"model\": \"P-smart Keitai\"\n },\n {\n \"regex\": \"P-03E(?:[);/ ]|$)\",\n \"model\": \"Eluga P\"\n },\n {\n \"regex\": \"Eluga[ _-]([^;/]+) Build\",\n \"model\": \"Eluga $1\"\n },\n {\n \"regex\": \"Eluga[ _-]([^);/]+)[;/)]\",\n \"model\": \"Eluga $1\"\n },\n {\n \"regex\": \"(DMC-CM1)\",\n \"model\": \"Lumix $1\",\n \"device\": \"camera\"\n },\n {\n \"regex\": \"P-02D(?:[);/ ]|$)\",\n \"model\": \"Lumix Phone P-02D\"\n },\n {\n \"regex\": \"(FZ-[XN]1)(?:[);/ ]|$)\",\n \"model\": \"Toughpad $1\"\n },\n {\n \"regex\": \"FZ-B2D(?:[);/ ]|$)\",\n \"model\": \"Toughpad FZ-B2D\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"P55 Novo 4G\",\n \"model\": \"P55 Novo 4G\"\n },\n {\n \"regex\": \"P902i(?:[);/ ]|$)\",\n \"device\": \"feature phone\",\n \"model\": \"P902i\"\n },\n {\n \"regex\": \"Panasonic MIL DLNA\",\n \"device\": \"tv\",\n \"model\": \"Viera Cast\"\n },\n {\n \"regex\": \"PANATV[0-9]+|Viera/\",\n \"device\": \"tv\",\n \"model\": \"Smart TV\"\n },\n {\n \"regex\": \"(43D1200|(?:32|43)D1270|32D1280)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Panasonic[ _\\\\-]?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/2.0 (P[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"P-08D(?:[);/ ]|$)\",\n \"model\": \"Eluga Live 10.1\\\"\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"PCBOX\": {\n \"regex\": \"Art-PCB-V116|Bee-PCB-V216|Clap-PCB-I316|PCB-T(103|715)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Art-PCB-V116\",\n \"model\": \"Art\"\n },\n {\n \"regex\": \"Bee-PCB-V216\",\n \"model\": \"Bee\"\n },\n {\n \"regex\": \"Clap-PCB-I316\",\n \"model\": \"Clap\"\n },\n {\n \"regex\": \"PCB-T103\",\n \"device\": \"tablet\",\n \"model\": \"Curi Lite\"\n },\n {\n \"regex\": \"PCB-T715\",\n \"device\": \"tablet\",\n \"model\": \"T715\"\n }\n ]\n },\n \"PCD\": {\n \"regex\": \"PH4001\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"PH4001\",\n \"model\": \"PH4001\"\n }\n ]\n },\n \"PCD Argentina\": {\n \"regex\": \"PCD[ ]?50[689]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"PCD[ ]?(50[689])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ArmPhone\": {\n \"regex\": \"(TSD Octa A0520P|TSD Quadra A050[59]P)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Pentagram\": {\n \"regex\": \"Pentagram|Quadra|Monster X5\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(?:PENTAGRAM[_ ])?EON[_ ]PRIX\",\n \"model\": \"Eon Prix\"\n },\n {\n \"regex\": \"Quadra 7(?: UltraSlim)?\",\n \"model\": \"Quadra 7 UltraSlim\"\n },\n {\n \"regex\": \"Monster X5?\",\n \"model\": \"Monster X5\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Quadra ?([^);/]*) Build\",\n \"model\": \"Quadra $1\"\n },\n {\n \"regex\": \"Pentagram ?TAB ?([^);/]*) Build\",\n \"model\": \"Tab $1\"\n },\n {\n \"regex\": \"Pentagram ?([^);/]*) Build\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"TCL\": {\n \"regex\": \"TCL,|TCL[_ -][a-z0-9]+|(?:TCL[_ -][^;/]+ Build)|(?:TCLGalaG60(?:\\\\(9108A\\\\))?|A502DL|T78[02]H|5199I|7040N|5133A|5159[AJ]|5152D|T770H|T671H|T790Y|T766H_EEA|T766A|T799[BH]|Percee TV)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TCLGalaG60(?:\\\\(9108A\\\\))?(?:[);/ ]|$)\",\n \"model\": \"Gala G60\"\n },\n {\n \"regex\": \"5199I(?:[);/ ]|$)\",\n \"model\": \"C9\"\n },\n {\n \"regex\": \"5152D(?:[);/ ]|$)\",\n \"model\": \"C5\"\n },\n {\n \"regex\": \"5133A(?:[);/ ]|$)\",\n \"model\": \"L5\"\n },\n {\n \"regex\": \"T780H(?:[);/ ]|$)\",\n \"model\": \"Plex\"\n },\n {\n \"regex\": \"T782H(?:[);/ ]|$)\",\n \"model\": \"10 Plus\"\n },\n {\n \"regex\": \"T790Y(?:[);/ ]|$)\",\n \"model\": \"10 5G\"\n },\n {\n \"regex\": \"TCL[_ -]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TCL[_ -]([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(7040N)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"A502DL(?:[);/ ]|$)\",\n \"model\": \"LX\"\n },\n {\n \"regex\": \"5159[AJ](?:[);/ ]|$)\",\n \"model\": \"L9\"\n },\n {\n \"regex\": \"T770H(?:[);/ ]|$)\",\n \"model\": \"10L\"\n },\n {\n \"regex\": \"T766[HA](?:_EEA)?(?:[);/ ]|$)\",\n \"model\": \"10 SE\"\n },\n {\n \"regex\": \"T671H(?:_EEA)?(?:[);/ ]|$)\",\n \"model\": \"20 SE\"\n },\n {\n \"regex\": \"T799[BH](?:[);/ ]|$)\",\n \"model\": \"10 Pro\"\n },\n {\n \"regex\": \"(Percee TV)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"((?:43|55)S62FS|(?:43|50)P65US|U(?:43|60)P60|65P4USM|(?:40|49)S62|L32S6|55P610|50P8S|55S62|(?:43|50)P6US|55DP60)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"JVC\": {\n \"regex\": \"JVC[;,]|JVC Shell\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"JVC Shell [0-9A-Z]+\",\n \"model\": \"\"\n },\n {\n \"regex\": \"JVC[;,](32D1290)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"phoneOne\": {\n \"regex\": \"phoneOne[ \\\\-]?([a-z0-9]+)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Primepad\": {\n \"regex\": \"PD\\\\-(3127NC|3127) Build\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"PD\\\\-3127NC Build\",\n \"model\": \"PD-3127NC\"\n },\n {\n \"regex\": \"PD\\\\-3127 Build\",\n \"model\": \"PD-3127\"\n }\n ]\n },\n \"Pioneer\": {\n \"regex\": \"Pioneer|.*; R1 Build|dvr700pi|XDP-300R\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \".*; R1 Build\",\n \"model\": \"R1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Pioneer[ _-]?([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Pioneer[ _-]?([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"dvr700pi\",\n \"model\": \"DVR700PI 7.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(XDP-300R)\",\n \"device\": \"portable media player\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Pixus\": {\n \"regex\": \"Pixus|(hiPower|Ride[_ ][34]G|Play[ _]Three[ _]v(?:[24].0|3.1))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Ride[_ ]([34])G\",\n \"model\": \"Ride $1G\"\n },\n {\n \"regex\": \"Play[ _]Three[ _]v([24].0|3.1)\",\n \"model\": \"Play Three v$1\"\n },\n {\n \"regex\": \"Play Two\",\n \"model\": \"Play Two\"\n },\n {\n \"regex\": \"Play Five\",\n \"model\": \"Play Five\"\n },\n {\n \"regex\": \"hiPower\",\n \"model\": \"hiPower\"\n },\n {\n \"regex\": \"Pixus[ _]Sprint\",\n \"model\": \"Sprint\"\n },\n {\n \"regex\": \"Touch 7 3G\",\n \"model\": \"Touch 7 3G\"\n },\n {\n \"regex\": \"Pixus[ _]hiMax\",\n \"model\": \"HiMax 9.6\\\"\"\n },\n {\n \"regex\": \"Pixus[ _]Blast\",\n \"model\": \"Blast 10.1\\\"\"\n },\n {\n \"regex\": \"Pixus[ _]Joker\",\n \"model\": \"Joker 10.1\\\"\"\n },\n {\n \"regex\": \"Pixus Blaze 10.1 3G\",\n \"model\": \"Blaze 10.1\\\" 3G\"\n },\n {\n \"regex\": \"Raze\",\n \"model\": \"Raze\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Pixus_Jet\",\n \"model\": \"Jet\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"pixus hit 2\",\n \"model\": \"Hit 2\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"PULID\": {\n \"regex\": \"PULID[ _]|F1[01357]\\\\+? Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"F(1[01357]\\\\+?) Build\",\n \"model\": \"F$1\"\n },\n {\n \"regex\": \"PULID[ _]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"PULID[ _]([a-z0-9_]+)\\\\)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Point of View\": {\n \"regex\": \"POV_TV|POV_TAB|MOB-5045\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"POV_TV-HDMI-KB-01\",\n \"model\": \"HDMI Smart TV Dongle\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"POV_TV-HDMI-200BT\",\n \"model\": \"Mini PC HDMI Dongle\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"MOB-5045\",\n \"model\": \"Mobii Phone 5045\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"POV_TAB-P506\",\n \"model\": \"ONYX 506 Navi\"\n },\n {\n \"regex\": \"POV_TAB[_-]NAVI7[_-]3G[_-]M\",\n \"model\": \"ONYX 507 Navi\"\n },\n {\n \"regex\": \"POV_TAB-P527S\",\n \"model\": \"ONYX 527S\"\n },\n {\n \"regex\": \"POV_TAB-P547\",\n \"model\": \"ONYX 547 Navi\"\n },\n {\n \"regex\": \"POV_TAB-PROTAB26\",\n \"model\": \"ProTab 26 XXL IPS\"\n },\n {\n \"regex\": \"POV_TAB-PROTAB25XXL8?\",\n \"model\": \"ProTab 25XXL\"\n },\n {\n \"regex\": \"POV_TAB-PL1015\",\n \"model\": \"Mobii 1015\"\n },\n {\n \"regex\": \"POV_TAB-PROTAB([a-z0-9]+)\",\n \"model\": \"ProTab $1\"\n },\n {\n \"regex\": \"POV_TAB-P?([a-z0-9]+)\",\n \"model\": \"Mobii $1\"\n }\n ]\n },\n \"Pomp\": {\n \"regex\": \"POMP[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"POMP[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"POMP[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"PPTV\": {\n \"regex\": \"(KING 7S?)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"ProScan\": {\n \"regex\": \"PLT([^;/]+) Build|PLT(?:777[45]|9774|1074)G(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"PLT([^;/]+) Build\",\n \"model\": \"PLT$1\"\n },\n {\n \"regex\": \"PLT(777[45]|9774|1074)G\",\n \"model\": \"PLT$1G\"\n }\n ]\n },\n \"RCA Tablets\": {\n \"regex\": \"RCT([^;/]+) Build|RCA RLTP4028|RCT6513W87|RCT6973W43(?:MD)?|RCT6703W12|RCT(?:6A06P22|6603W47M7|6303W87(?:DK|M)|6773W22B|6203W46L|6873W42M|6K03W13)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"RCA RLTP4028\",\n \"model\": \"RLTP4028\"\n },\n {\n \"regex\": \"RCT6513W87\",\n \"device\": \"tablet\",\n \"model\": \"Galileo Pro 11.5\\\"\"\n },\n {\n \"regex\": \"RCT6873W42M\",\n \"device\": \"tablet\",\n \"model\": \"Voyager 7.0\\\"\"\n },\n {\n \"regex\": \"RCT6973W43(?:MD)?\",\n \"device\": \"tablet\",\n \"model\": \"Voyager III 7.0\\\"\"\n },\n {\n \"regex\": \"RCT6773W22B\",\n \"device\": \"tablet\",\n \"model\": \"Voyager II 7.0\\\"\"\n },\n {\n \"regex\": \"RCT6703W12\",\n \"device\": \"tablet\",\n \"model\": \"Atlas 10.0\\\"\"\n },\n {\n \"regex\": \"RCT6203W46L\",\n \"device\": \"tablet\",\n \"model\": \"Pro 10 Edition II\"\n },\n {\n \"regex\": \"RCT6A06P22\",\n \"device\": \"tablet\",\n \"model\": \"Endeavor 10.0\\\" HD\"\n },\n {\n \"regex\": \"RCT(?:6303W87(?:DK|M)|6K03W13)\",\n \"device\": \"tablet\",\n \"model\": \"Viking Pro 10.0\\\"\"\n },\n {\n \"regex\": \"RCT6603W47M7\",\n \"device\": \"tablet\",\n \"model\": \"Viking II 10.0\\\"\"\n },\n {\n \"regex\": \"RCT([^;/)]+)(?: Build|[;)])\",\n \"device\": \"tablet\",\n \"model\": \"RCT$1\"\n }\n ]\n },\n \"Readboy\": {\n \"regex\": \"Readboy[ _-]\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Readboy[ _-]([^;/)]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Roku\": {\n \"regex\": \"Roku/DVP\",\n \"device\": \"tv\",\n \"model\": \"Digital Video Player\"\n },\n \"Rokit\": {\n \"regex\": \"IO Pro\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IO Pro\",\n \"model\": \"IO Pro\"\n }\n ]\n },\n \"Rombica\": {\n \"regex\": \"(Rombica|SSQ-A0500|Smart Box v[0-9]+)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"SSQ-A0500(?:[);/ ]|$)\",\n \"model\": \"Smart Stick 4K\"\n },\n {\n \"regex\": \"(Infinity K8|Smart Box (?:v00[345789]|Quad|Ultra HD v002|4K V001))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Rover\": {\n \"regex\": \"Rover ([0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"RoverPad\": {\n \"regex\": \"(?:Rover[ ]?Pad|RoverPhone|Sky 7.85 3G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"RoverPhone(?:[);/ ]|$)\",\n \"model\": \"\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Rover[ ]?Pad)?sky 7.85(?: 3G)?(?:[);/ ]|$)\",\n \"model\": \"Sky 7.85\\\" 3G\"\n },\n {\n \"regex\": \"RoverPad (10.4|Air S70|9.7 3G|Sky 9.7|3W A73|3W7|3WT70|3W9.4)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Roadrover\": {\n \"regex\": \"Roadrover ChangAn S\",\n \"device\": \"tablet\",\n \"model\": \"ChangAn S\"\n },\n \"RT Project\": {\n \"regex\": \"Shock 5\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Shock 5\",\n \"model\": \"Shock 5\"\n }\n ]\n },\n \"S-TELL\": {\n \"regex\": \"S-TELL\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:S-TELL[ _])?M4(61|77|80)\",\n \"model\": \"M4$1\"\n }\n ]\n },\n \"Safaricom\": {\n \"regex\": \"NEON_RAY\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NEON_RAY\",\n \"model\": \"Neon Ray\"\n }\n ]\n },\n \"Santin\": {\n \"regex\": \"(?:SANTIN|BiTBiZ_V58|ACTOMA ACE|DREAMPLUS03A|Candy U7 Pro)[);/_ ]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BiTBiZ_V58(?:[);/ ]|$)\",\n \"model\": \"BiTBiZ V58\"\n },\n {\n \"regex\": \"Candy U7 Pro(?:[);/ ]|$)\",\n \"model\": \"Candy U7 Pro\"\n },\n {\n \"regex\": \"DREAMPLUS03A(?:[);/ ]|$)\",\n \"model\": \"Dream Plus 03A\"\n },\n {\n \"regex\": \"GreenOrange(?:[);/ ]|$)\",\n \"model\": \"Green Orange\"\n },\n {\n \"regex\": \"halove(?:[);/ ]|$)\",\n \"model\": \"Halove\"\n },\n {\n \"regex\": \"ACTOMA ACE(?:[);/ ]|$)\",\n \"model\": \"Actoma Ace\"\n },\n {\n \"regex\": \"monica(?:[);/ ]|$)\",\n \"model\": \"Monica\"\n },\n {\n \"regex\": \"POWER(?:[);/ ]|$)\",\n \"model\": \"Power\"\n },\n {\n \"regex\": \"GALAZ(?:[);/ ]|$)\",\n \"model\": \"Galaz\"\n },\n {\n \"regex\": \"NEWDUN(?:[);/ ]|$)\",\n \"model\": \"Newdun\"\n },\n {\n \"regex\": \"SANTIN[ _][#]?(Dante|Candy U7|Armor|YSL-Y7|ANT.W|N[13]|JS|S6|V9|Life Shine)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Siemens\": {\n \"regex\": \"SIEMENS|SIE-|portalmmm/2\\\\.0 SI|(?:S55|SL45i)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:SIE-)?(S[56]5|S40|C45|ME45|SLIK)(?:[);/ ]|$)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SIEMENS[ \\\\-]([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SIE(?:MENS )?[\\\\-]?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:SIE-)?(SL45i)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/2.0 (SI[a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Soundmax\": {\n \"regex\": \"((?:SM-LED32M(?:11|04)S)(?:_-Ver01)?|SM-LED40M04S)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Samsung\": {\n \"regex\": \"SAMSUNG(?! ?Browser)|Maple (?!III)|SC-(?:01[FGHKLM]|02[CGHJKLM]|03[JKL]|04[EJL]|05[GL]|(?:4[12]|5[1234])A)|N[57]100|N5110|N9100|S(?:CH|GH|PH|EC|AM|HV|HW|M)-|SMART-TV|GT-|(?<!GOG|GOG )Galaxy|(?:portalmmm|o2imode)/2\\\\.0 [SZ]|sam[rua]|vollo Vi86(?:[);/ ]|$)|(?:OTV-)?SMT-E5015|ISW11SC|SCV4[0-9]|SCV3[1-9]|40[34]SC|SCL2[234]|SCG0[1-7]|SCT21\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GT-B9150\",\n \"device\": \"tv\",\n \"model\": \"Home Sync\"\n },\n {\n \"regex\": \"(?:OTV-)?SMT-E5015\",\n \"device\": \"tv\",\n \"model\": \"SMT-E5015\"\n },\n {\n \"regex\": \"Maple \",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT-)?N5100\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 8.0\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T677(?:[ATV]|N[KL])?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy View 18.4\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T670(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy View 18.4\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT-)?N5110\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 8.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-N5120\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 8.0\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT|SM)-N8000\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 10.1\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-N8010\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 10.1\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-N8020\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 10.1\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P1000M?|SCH-I800\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P3100B?\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 2 7\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P311[03]\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 2 7\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P5100|SCH-I915\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 2 10.1\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P511[03]\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 2 10.1\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T217T\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 7.0\\\" 4G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P5200\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 10.1\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P5210\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 10.1\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P5220\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 10.1\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P6200\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 7\\\" Plus\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P6201\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 7\\\" Plus N\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P6810\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 7.7\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P7100\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 10.1v\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-P75[01]0\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 10.1\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P600\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 10.1\\\" 2014 Edition WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P60[12]\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 10.1\\\" 2014 Edition\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:P605|P607T)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note 10.1\\\" 2014 Edition LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P900\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy NotePRO 12.2\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P901\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy NotePRO 12.2\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P905\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy NotePRO 12.2\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:P587|P588C)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 10.1\\\" with S Pen (2016) LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P583(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 10.1\\\" with S Pen (2016) WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P205(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 8.0\\\" with S Pen (2019) LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P200(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 8.0\\\" with S Pen (2019) WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T307U(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 8.4\\\" (2020) LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T505[CN]?|T507)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A7 10.4\\\" (2020) LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T500(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A7 10.4\\\" (2020) WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T11[03]\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 Lite 7.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T830[X]?|T837R4)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S4 10.5\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T837P(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S4 10.5\\\" with S Pen\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T835[CN]?|T837[VTA]?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S4 10.5\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T725[CN]?|T720X|T727(?:R4|[AUV])?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S5e 10.5\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T720(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S5e 10.5\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T865N?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S6 10.5\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T867(?:R4|[VU])?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S6 10.5\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:P615[CN]?|P617)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S6 Lite 10.4\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-P610X?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S6 Lite 10.4\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T860(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S6 10.5\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T866N(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S6 10.5\\\" 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T111[M]?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 Lite 7.0\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T116(?:BU|NU|NY)?\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 V\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T2105|T212)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 7.0\\\" Kids\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T210R?\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 7.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T21(?:[15]|7[AS])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 7.0\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T230(?:NU)?\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 7.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T23[15]|403SC\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 7.0\\\" 3G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T239|T237[PV])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 7.0\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T232(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 7.0\\\" WiFi + 3G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T310\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 8.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T311\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 8.0\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T315\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 3 8.0\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T330\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 8.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T33[215]|T337[AVT])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 8.0\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T520\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy TabPRO 10.1\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T53[15]|T537[AV])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 10.1\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T536(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 10.1\\\" Advanced\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T532(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 10.1\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T320\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy TabPRO 8.4\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T325\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy TabPRO 8.4\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T525\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy TabPRO 10.1\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T530(?:NU)?|T533)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab 4 10.1\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T700\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S 8.4\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T705|T707[AV])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S 8.4\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T800\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S 10.5\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-(?:T805|T807[PV]?)|SCT21)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S 10.5\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T813|T810)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S2 9.7\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T719[CY]?|T715(?:N0|[CY])?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S2 8.0\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T71[03]|T710X)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S2 8.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T815|T817[ATW]?|T818[ATVW]?|T819[Y]?)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S2 9.7\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T820\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S3 9.7\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T82[57]\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S3 9.7\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T975N?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S7+ 12.4\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T970(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S7+ 12.4\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T976[BN]|T978U)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S7+ 12.4\\\" 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T870(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S7 11.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T875N?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S7 11.0\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T878U(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab S7 11.0\\\" 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T900\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy TabPRO 12.2\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T280\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 7.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T285\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 7.0\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T3[58]0\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 8.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:P350|T3[58]5|T357[TW])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 8.0\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T387(?:AA|R4|VK|[TVW])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 8.0\\\" LTE (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T295\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 8.0\\\" LTE (2019)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T290\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 8.0\\\" WiFi (2019)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:P355([MY])?|T550)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 9.7\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:P550|P555(M)?|T555)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 9.7\\\" LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T58[05]|P58[05])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 10.1\\\" WiFi (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T587[P]?\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 10.1\\\" LTE (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T59[057]\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 10.5\\\" LTE (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T51(?:7P|[057])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab A 10.1\\\" (2019)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T37[57]|T378[KLSV])\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab E 8.0\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T56[02]\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab E 9.6\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T561\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab E 9.6\\\" 3G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T567V\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab E 9.6\\\" 4G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T365(?:F0|[MY])?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab Active 8.0\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T360(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab Active 8.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T395[CN]?|T397U)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab Active 2 8.0\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T390(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab Active 2 8.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T575N?|T577U?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab Active 3 8.0\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T570(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab Active 3 8.0\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:T545|T547U?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab Active Pro 10.1\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-T540(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Tab Active Pro 10.1\\\" WiFi\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:P902|P907A)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Galaxy Note Pro 12.2\\\"\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?SM-T2519\",\n \"model\": \"Galaxy Tab Q\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG )?SM-R820\",\n \"device\": \"wearable\",\n \"model\": \"Galaxy Watch Active 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G850(?:8S|[AFKLMSWXY])\",\n \"model\": \"Galaxy Alpha\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-B5330\",\n \"model\": \"Galaxy Chat\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A605K\",\n \"model\": \"Galaxy Jean\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A202K\",\n \"model\": \"Galaxy Jean 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-B5510\",\n \"model\": \"Galaxy Y Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-B5512\",\n \"model\": \"Galaxy Y Pro Duos\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-B7510\",\n \"model\": \"Galaxy Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I5700\",\n \"model\": \"Galaxy Spica\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I5801\",\n \"model\": \"Galaxy Apollo\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I5800\",\n \"model\": \"Galaxy 3\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I8000\",\n \"model\": \"Omnia II\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT-I8150|SM-T255S)\",\n \"model\": \"Galaxy W\"\n },\n {\n \"regex\": \"SC-01H(?:[);/ ]|$)\",\n \"model\": \"Galaxy Active Neo\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5830\",\n \"model\": \"Galaxy Ace\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G357(?:FZ|M)|G310HN)\",\n \"model\": \"Galaxy Ace Style\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I8160\",\n \"model\": \"Galaxy Ace 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G313(?:HY|M[LUY]|[FM])\",\n \"model\": \"Galaxy Ace 4\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G316M\",\n \"model\": \"Galaxy Ace 4 Duos\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G313[HU]\",\n \"model\": \"Galaxy Ace 4 Lite\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G316U|G318(?:H|ML))(?:[);/ ]|$)\",\n \"model\": \"Galaxy Ace 4 Neo\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G9100(?:[);/ ]|$)\",\n \"model\": \"Galaxy S II\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SHV-E120S(?:[);/ ]|$)\",\n \"model\": \"Galaxy S II HD LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I8190\",\n \"model\": \"Galaxy S III mini\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I8200\",\n \"model\": \"Galaxy S III mini Value Edition\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I826[02]\",\n \"model\": \"Galaxy Core\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G386W\",\n \"model\": \"Galaxy Core LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G3589W\",\n \"model\": \"Galaxy Core Lite LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I8320\",\n \"model\": \"H1\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I85[23]0\",\n \"model\": \"Galaxy Beam\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G3858\",\n \"model\": \"Galaxy Beam 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G600S\",\n \"model\": \"Galaxy Wide\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I855[028]\",\n \"model\": \"Galaxy Win\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G381[28]\",\n \"model\": \"Galaxy Win Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I8580\",\n \"model\": \"Galaxy Core Advance\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I8730\",\n \"model\": \"Galaxy Express\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:E500(?:HQ|YZ|[0FHM])|S978L)\",\n \"model\": \"Galaxy E5\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-E700[09FHM]\",\n \"model\": \"Galaxy E7\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I90(?:00|08|18|88)\",\n \"model\": \"Galaxy S\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9001\",\n \"model\": \"Galaxy S Plus\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9003\",\n \"model\": \"Galaxy SL\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9010\",\n \"model\": \"Galaxy S Giorgio Armani\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9070\",\n \"model\": \"Galaxy S Advance\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I910[08]\",\n \"model\": \"Galaxy S II\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?ISW11SC\",\n \"model\": \"Galaxy S II WiMAX\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9103\",\n \"model\": \"Galaxy R\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9105\",\n \"model\": \"Galaxy S II Plus\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G730(?:W8|[AV])\",\n \"model\": \"Galaxy S3 mini\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT-I919[025]|SCH-I435)\",\n \"model\": \"Galaxy S4 mini\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9515\",\n \"model\": \"Galaxy S4 Value Edition\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9295\",\n \"model\": \"Galaxy S4 ACTIVE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT-I9300|SCH-(?:I535|I939|L710))\",\n \"model\": \"Galaxy S III\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT-I9305|SCH-R530)\",\n \"model\": \"Galaxy S III LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-S975L|GT-I950[025]|SC-04E|SCH-(?:I545|I959|R970)|SGH-M919N?|Galaxy-S4)\",\n \"model\": \"Galaxy S4\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9506\",\n \"model\": \"Galaxy S4 with LTE+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5280\",\n \"model\": \"Galaxy STAR\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5301\",\n \"model\": \"Galaxy POCKET Plus\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5310\",\n \"model\": \"Galaxy POCKET Neo\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G110[BHM]\",\n \"model\": \"Galaxy POCKET 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5360\",\n \"model\": \"Galaxy Y Hello Kitty\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S6310\",\n \"model\": \"Galaxy Young\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S6312\",\n \"model\": \"Galaxy Young DUOS\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G130(?:BT|HN|[EHMU])\",\n \"model\": \"Galaxy Young 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G130BU\",\n \"model\": \"Galaxy Young 2 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S6790\",\n \"model\": \"Galaxy FAME Lite with NFC\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S6810\",\n \"model\": \"Galaxy FAME\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S6812\",\n \"model\": \"Galaxy FAME Duos\"\n },\n {\n \"regex\": \"SC-04J(?:[);/ ]|$)\",\n \"model\": \"Galaxy Feel\"\n },\n {\n \"regex\": \"SC-02L(?:[);/ ]|$)\",\n \"model\": \"Galaxy Feel 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S7275\",\n \"model\": \"Galaxy ACE 3\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S7500\",\n \"model\": \"Galaxy ACE Plus\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT-S7560|SCH-I699)\",\n \"model\": \"Galaxy Trend\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S7390\",\n \"model\": \"Galaxy Trend Lite\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S7580\",\n \"model\": \"Galaxy Trend Plus\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SCH-I739\",\n \"model\": \"Galaxy Trend 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:GT-S7562|SCH-I919)\",\n \"model\": \"Galaxy S DUOS\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S7582\",\n \"model\": \"Galaxy S DUOS 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G31[36]HU|G313HZ)\",\n \"model\": \"Galaxy S DUOS 3\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S7710\",\n \"model\": \"Galaxy Xcover 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G388F\",\n \"model\": \"Galaxy Xcover 3\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G389F\",\n \"model\": \"Galaxy Xcover 3 VE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G390[FWY]\",\n \"model\": \"Galaxy Xcover 4\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G398FN\",\n \"model\": \"Galaxy Xcover 4s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G715(?:FN|U1|[AUW])\",\n \"model\": \"Galaxy Xcover Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G889(?:YB|[AFG])\",\n \"model\": \"Galaxy Xcover FieldPro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S8500\",\n \"model\": \"Wave\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S8530\",\n \"model\": \"Wave II\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S8600\",\n \"model\": \"Wave 3\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5380\",\n \"model\": \"Wave Y\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S7250\",\n \"model\": \"Wave M\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5250\",\n \"model\": \"Wave 525\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5330\",\n \"model\": \"Wave 533\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S5780\",\n \"model\": \"Wave 578\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-S7230\",\n \"model\": \"Wave 723\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:C101|C105([AL])?)\",\n \"model\": \"Galaxy S4 zoom\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:C111(M)?|C115)\",\n \"model\": \"Galaxy K zoom\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G318[HM]Z\",\n \"model\": \"Galaxy V Plus\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G355(?:6D|[89HM])\",\n \"model\": \"Galaxy Core 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G350\",\n \"model\": \"Galaxy Core Plus\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G360[FH]?|S820L)\",\n \"model\": \"Galaxy Core Prime\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G361[FH]?\",\n \"model\": \"Galaxy Core Prime Value Edition\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G386F|G3518(?:_TD)?|G3586V)\",\n \"model\": \"Galaxy Core LTE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G3568V\",\n \"model\": \"Galaxy Core Mini 4G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G5108Q?\",\n \"model\": \"Galaxy Core Max\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G3815\",\n \"model\": \"Galaxy EXPRESS II\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G800\",\n \"model\": \"Galaxy S5 mini\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G9009D\",\n \"model\": \"Galaxy S5 Dual-SIM\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G900|G906[KLS]|S902L|S903VL)|Galaxy-S5|SCL23\",\n \"model\": \"Galaxy S5\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G901F\",\n \"model\": \"Galaxy S5 LTE+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G870[AFW]|SC-02G\",\n \"model\": \"Galaxy S5 Active\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G903[FMW]\",\n \"model\": \"Galaxy S5 Neo\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G860P\",\n \"model\": \"Galaxy S5 K Sport\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-G920(?:F[DQ]|W8|[089AFIKLPRSTVX])?|SM-S906L|SM-S907VL)|SC-05G\",\n \"model\": \"Galaxy S6\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G890A\",\n \"model\": \"Galaxy S5 Active\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G925[0ADFIKLPRSTVWX]|SCV31|404SC\",\n \"model\": \"Galaxy S6 Edge\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G928(?:7C|N0|R4|W8|[07ACFGIKLPSTVX])\",\n \"model\": \"Galaxy S6 Edge+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G930(?:AZ|FD|R[467]|T1|V[CL]|W8|[0AFKLPRSTUVX8])?(?:[);/ ]|$)\",\n \"model\": \"Galaxy S7\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G935(?:R4|W8|[0AFKLPSTUVX])|SC-02H|SCV33\",\n \"model\": \"Galaxy S7 Edge\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G891A\",\n \"model\": \"Galaxy S7 Active\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G950[08FNUW]?|SCV36|SC-02J\",\n \"model\": \"Galaxy S8\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G8750\",\n \"model\": \"Galaxy S8 Lite\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G892[AU]\",\n \"model\": \"Galaxy S8 Active\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G955[0AFKLNPRTUVWX]?|SCV35|SC-03J\",\n \"model\": \"Galaxy S8+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G960[0FNUWX]?|SCV38|SC-02K\",\n \"model\": \"Galaxy S9\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G965[0FNUWX]|SCV39|SC-03K\",\n \"model\": \"Galaxy S9+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-(?:G973|G977[BNPTU])|SCV41|SC-03L)\",\n \"model\": \"Galaxy S10\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:S10 Lite|G770(?:U1|F))\",\n \"model\": \"Galaxy S10 Lite\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-G975[08FUNWX]|SCV42|SC-04L)\",\n \"model\": \"Galaxy S10+\"\n },\n {\n \"regex\": \"SC-05L\",\n \"model\": \"Galaxy S10+ Olympic Games Edition\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G970(?:U1|[08FUNWX])(?:[);/ ]|$)\",\n \"model\": \"Galaxy S10e\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G980F\",\n \"model\": \"Galaxy S20\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G981(?:U1|[0BNUVW])|SCG01|SC-51A\",\n \"model\": \"Galaxy S20 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G780F\",\n \"model\": \"Galaxy S20 FE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G781(?:U1|[0BNUVW])\",\n \"model\": \"Galaxy S20 FE 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G988(?:U1|[0BNQUW])|SCG03\",\n \"model\": \"Galaxy S20 Ultra 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G985F|SCG02\",\n \"model\": \"Galaxy S20+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G986(?:U1|[0BNUW])|SC-52A\",\n \"model\": \"Galaxy S20+ 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G991(?:U1|[0BNW])\",\n \"model\": \"Galaxy S21 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G998(?:U1|[0BNUW])\",\n \"model\": \"Galaxy S21 Ultra 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G996(?:U1|[0BNWU])\",\n \"model\": \"Galaxy S21+ 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-F700(?:U1|[0FNUW])|SCV47\",\n \"model\": \"Galaxy Z Flip\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-F707(?:U1|[0BNUW])|SCG04\",\n \"model\": \"Galaxy Z Flip 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SCH-I200\",\n \"model\": \"Galaxy Stellar\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SCH-I829\",\n \"model\": \"Galaxy Style Duos\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SCH-R740|SGH-S730)\",\n \"model\": \"Galaxy Discover\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SCH-S738\",\n \"model\": \"Galaxy Centura\"\n },\n {\n \"regex\": \"vollo Vi86(?:[);/ ]|$)\",\n \"model\": \"Vollo Vi86\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G386(?:T1|T)\",\n \"model\": \"Galaxy Avant\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A716S\",\n \"model\": \"Galaxy A Quantum\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:A015(?:DL|[TU]1|[AFGMUV])|S111DL)\",\n \"model\": \"Galaxy A01\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A013[FGM]\",\n \"model\": \"Galaxy A01 Core\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A025[FGM]\",\n \"model\": \"Galaxy A02s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A022G\",\n \"model\": \"Galaxy A02\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A260[FG]\",\n \"model\": \"Galaxy A2 Core\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A300(?:FU|YZ|XU|XZ|[09FGHMXY])\",\n \"model\": \"Galaxy A3 (2015)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A310(?:N0|[FMXY])\",\n \"model\": \"Galaxy A3 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A320(?:FL|[FXY])\",\n \"model\": \"Galaxy A3 (2017)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A430F\",\n \"model\": \"Galaxy A4\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A500(?:YZ|[9LSWY])?(?:[);/ ]|$)\",\n \"model\": \"Galaxy A5\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A500[0FGHKM]\",\n \"model\": \"Galaxy A5 Duos\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A500(?:FU|X)\",\n \"model\": \"Galaxy A5 (2015)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A510[08FKLMSXY]\",\n \"model\": \"Galaxy A5 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A520[FKLSWX]\",\n \"model\": \"Galaxy A5 (2017)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A525F\",\n \"model\": \"Galaxy A52\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A600(?:AZ|FN|GN|T1|[AFGNPTUX])\",\n \"model\": \"Galaxy A6\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A605(?:[FG]N|[08FGX])\",\n \"model\": \"Galaxy A6+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G6200\",\n \"model\": \"Galaxy A6s (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A606[0Y]\",\n \"model\": \"Galaxy A60\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A700(?:YD|[09FHKLSX])\",\n \"model\": \"Galaxy A7\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A710[08FKLMSXY]\",\n \"model\": \"Galaxy A7 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A720[FMSX]\",\n \"model\": \"Galaxy A7 (2017)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A750(?:GN|[CFGNX])\",\n \"model\": \"Galaxy A7 (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A71(?:5[FW])?(?:[);/ ]|$)\",\n \"model\": \"Galaxy A71\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A725F(?:[);/ ]|$)\",\n \"model\": \"Galaxy A72\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A716(?:U1|[0BUV])(?:[);/ ]|$)\",\n \"model\": \"Galaxy A71 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A(?:530F|800[0FISXY])|SCV32\",\n \"model\": \"Galaxy A8\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G885[FSY]\",\n \"model\": \"Galaxy A8 Star\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A810(?:YZ|[FS])\",\n \"model\": \"Galaxy A8 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:A8s|G887[0F])\",\n \"model\": \"Galaxy A8s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A530[MNWX]\",\n \"model\": \"Galaxy A8 (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A730[FX]\",\n \"model\": \"Galaxy A8+ (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A900[0F]\",\n \"model\": \"Galaxy A9\"\n },\n {\n \"regex\": \"SM-A9\\\\[7\\\\]\",\n \"model\": \"Galaxy A9 7\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A920[0FXN]\",\n \"model\": \"Galaxy A9 (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G885[08]\",\n \"model\": \"Galaxy A9 Star\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:A9 Pro|A910[0F]|G887N)\",\n \"model\": \"Galaxy A9 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A105[FGMN]\",\n \"model\": \"Galaxy A10\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A107[FM]\",\n \"model\": \"Galaxy A10s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:S102DL|A102[NUW])\",\n \"model\": \"Galaxy A10e\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A115(?:A[PZ]|U1|[AFMUW])\",\n \"model\": \"Galaxy A11\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A125[FM]\",\n \"model\": \"Galaxy A12\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:A205(?:U1|YN|[FGSWU])|S205DL)|SC-02M|SCV46\",\n \"model\": \"Galaxy A20\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-A215(?:DL|U1|[UW])|SC-42A|SCV49)(?:[);/ ]|$)\",\n \"model\": \"Galaxy A21\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A217[FMN](?:[);/ ]|$)\",\n \"model\": \"Galaxy A21s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A202[FG]\",\n \"model\": \"Galaxy A20e\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A207[0FM]\",\n \"model\": \"Galaxy A20s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-A305(?:[FGY]N|GT|[FGN])|SCV43)\",\n \"model\": \"Galaxy A30\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A307(?:FN|GN|GT|[FG])\",\n \"model\": \"Galaxy A30s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A315[FGN](?:[);/ ]|$)\",\n \"model\": \"Galaxy A31\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A325F(?:[);/ ]|$)\",\n \"model\": \"Galaxy A32\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A326(?:BR|B)\",\n \"model\": \"Galaxy A32 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A405(?:F[NM]|S)\",\n \"model\": \"Galaxy A40\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A305[018](?:[);/ ]|$)\",\n \"model\": \"Galaxy A40s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-A415F|SC-41A|SCV48)(?:[);/ ]|$)\",\n \"model\": \"Galaxy A41\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A426[0BN](?:[);/ ]|$)\",\n \"model\": \"Galaxy A42 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:A505(?:F[GN]|U1|YN|[FGNUWX])|S506DL|505FN)\",\n \"model\": \"Galaxy A50\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A5070(?:[);/ ]|$)\",\n \"model\": \"Galaxy A50s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A507FN\",\n \"model\": \"Galaxy A50s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:A515[FUW]|S515DL)\",\n \"model\": \"Galaxy A51\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-A516(?:U1|[0BNUV])|SC-54A|SCG07)\",\n \"model\": \"Galaxy A51 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A705(?:GM|[MYF]N|[0FUWX])\",\n \"model\": \"Galaxy A70\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A707[0F]\",\n \"model\": \"Galaxy A70s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A805[0FNX]\",\n \"model\": \"Galaxy A80\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A908[BN]\",\n \"model\": \"Galaxy A90\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-A9080\",\n \"model\": \"Galaxy A90 5G\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-F127G(?:[);/ ]|$)\",\n \"model\": \"Galaxy F12\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-F415F(?:[);/ ]|$)\",\n \"model\": \"Galaxy F41\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9301I\",\n \"model\": \"Galaxy S III Neo\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-S120VL(?:[);/ ]|$)\",\n \"model\": \"Galaxy Luna\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J100(?:FN|VPP|MU|[FGHMY])|S777C)\",\n \"model\": \"Galaxy J1\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J105[BFHYM]\",\n \"model\": \"Galaxy J1 Mini\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J106[BFHM]\",\n \"model\": \"Galaxy J1 mini Prime\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J120(?:ZN|[AFGHMPTW])|J05H)\",\n \"model\": \"Galaxy J1 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J110[FGHLM]|J111[FM])\",\n \"model\": \"Galaxy J1 Ace\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J200[FGHMY]\",\n \"model\": \"Galaxy J2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J200BT\",\n \"model\": \"Galaxy J2 Duos\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J260AZ\",\n \"model\": \"Galaxy J2 Pure\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J260([AFGMY]|T1)|S260DL)\",\n \"model\": \"Galaxy J2 Core\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J(?:210F|250[FGMNY])\",\n \"model\": \"Galaxy J2 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:S367VL|S357BL)\",\n \"model\": \"Galaxy J3 Orbit\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J311(?:[09]|9S)\",\n \"model\": \"Galaxy J3 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-S320VL(?:[);/ ]|$)\",\n \"model\": \"Galaxy J3 Sky\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-S327VL(?:[);/ ]|$)\",\n \"model\": \"Galaxy J3 Luna Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J327(?:T1|[ATW])(?:[);/ ]|$)\",\n \"model\": \"Galaxy J3 Prime\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J327(?:[FP]|R4)\",\n \"model\": \"Galaxy J3 Emerge\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J337R4(?:[);/ ]|$)\",\n \"model\": \"Galaxy J3 Aura\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J337T(?:[);/ ]|$)\",\n \"model\": \"Galaxy J3 Star\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J327V\",\n \"model\": \"Galaxy J3 Eclipse\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-S337TL\",\n \"model\": \"Galaxy J3 Luna Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J3109\",\n \"model\": \"Galaxy J3 (2015)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J300H|J320(?:[ZF]N|R4|W8|YZ|[AFGHMNPVY]))\",\n \"model\": \"Galaxy J3 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J330(?:FN|[08FGLN])|J327(?:R7|U))(?:[);/ ]|$)\",\n \"model\": \"Galaxy J3 (2017)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J337(?:VPP|[AWPUV])(?:[);/ ]|$)\",\n \"model\": \"Galaxy J3 (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G400[FG]|J400[FGM])\",\n \"model\": \"Galaxy J4\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J500(?:FN|N0|[78FGHMY])(?:[);/ ]|$)\",\n \"model\": \"Galaxy J5 (2015)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J510(?:[FGMU]N|FQ|[8FGHKLSY])|5108|G510H)(?:[);/ ]|$)\",\n \"model\": \"Galaxy J5 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J530\",\n \"model\": \"Galaxy J5 (2017)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G570[0FMY]\",\n \"model\": \"Galaxy J5 Prime\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J600[FGLN]\",\n \"model\": \"Galaxy J6\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J610[FG]\",\n \"model\": \"Galaxy J6+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J410[FG]\",\n \"model\": \"Galaxy J4 Core\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J415(?:[FG]N|[FGN])\",\n \"model\": \"Galaxy J4+\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J7[01]0(?:FN|MN|[8FHKM])\",\n \"model\": \"Galaxy J7\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J700P\",\n \"model\": \"Galaxy J7 (2015)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J700(?:T1|T)|J710GN|J7109)\",\n \"model\": \"Galaxy J7 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J730[K]|J727(?:R4|[AFSU]))(?:[);/ ]|$)\",\n \"model\": \"Galaxy J7 (2017)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J737(?:R4|T1|VPP|[APSTUV])(?:[);/ ]|$)\",\n \"model\": \"Galaxy J7 (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-C710F\",\n \"model\": \"Galaxy J7+ (C7)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G610[FMY]\",\n \"model\": \"Galaxy J7 Prime\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G611(?:FF|MT|M)\",\n \"model\": \"Galaxy J7 Prime 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G615F\",\n \"model\": \"Galaxy J7 Max\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:S727VL|S737TL)\",\n \"model\": \"Galaxy J7 Sky Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:J7 Pro|J730(?:GM|[FG]))\",\n \"model\": \"Galaxy J7 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J701[FM]\",\n \"model\": \"Galaxy J7 Core\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J720[FM]\",\n \"model\": \"Galaxy J7 Duo\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:S767VL|S757BL)\",\n \"model\": \"Galaxy J7 Crown\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J727[PTV]\",\n \"model\": \"Galaxy J7 V\"\n },\n {\n \"regex\": \"SM-J7\\\\[7\\\\]\",\n \"model\": \"Galaxy J7 7\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J810\",\n \"model\": \"Galaxy J8\"\n },\n {\n \"regex\": \"SM-J8 Plus\",\n \"model\": \"Galaxy J8 Plus\"\n },\n {\n \"regex\": \"SM-J8 Pro\",\n \"model\": \"Galaxy J8 Pro\"\n },\n {\n \"regex\": \"SM-J9\\\\[7\\\\] Prime\",\n \"model\": \"Galaxy J9 7 Prime\"\n },\n {\n \"regex\": \"SM-J9\\\\[8\\\\] Pro\",\n \"model\": \"Galaxy J9 8 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M015[FG]\",\n \"model\": \"Galaxy M01\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M013F\",\n \"model\": \"Galaxy M01 Core\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M017F\",\n \"model\": \"Galaxy M01s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M025F\",\n \"model\": \"Galaxy M02s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M105[FGMY]\",\n \"model\": \"Galaxy M10\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M107F\",\n \"model\": \"Galaxy M10s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M115[FM]\",\n \"model\": \"Galaxy M11\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M127[FG]\",\n \"model\": \"Galaxy M12\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:M205(?:[FGMN]|FN)|M20)(?:[);/ ]|$)\",\n \"model\": \"Galaxy M20\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M215F\",\n \"model\": \"Galaxy M21\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:M307(?:FN|[0F])|M30s)\",\n \"model\": \"Galaxy M30s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M305?\",\n \"model\": \"Galaxy M30\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M315F\",\n \"model\": \"Galaxy M31\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M317F\",\n \"model\": \"Galaxy M31s\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M405\",\n \"model\": \"Galaxy M40\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-M515F\",\n \"model\": \"Galaxy M51\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-W201([689])\",\n \"model\": \"Galaxy W201$1\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-W2015\",\n \"model\": \"Galaxy Golden 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G910S\",\n \"model\": \"Galaxy Round\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G550(?:FY|T[12]?)|S550TL|G55[01]0|G5520)\",\n \"model\": \"Galaxy On5\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G5528\",\n \"model\": \"Galaxy On5 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G600(?:FY|[0F])\",\n \"model\": \"Galaxy On7\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G610[0KLS]\",\n \"model\": \"Galaxy On7 (2016)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G611[FKLS]\",\n \"model\": \"Galaxy On7 Prime\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-C500[0X]\",\n \"model\": \"Galaxy C5\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-C501[08]\",\n \"model\": \"Galaxy C5 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-C700[0X]\",\n \"model\": \"Galaxy C7\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-C701[08FX]\",\n \"model\": \"Galaxy C7 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-C710[08]\",\n \"model\": \"Galaxy C8\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-C900[08FY]\",\n \"model\": \"Galaxy C9 Pro\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-Z130H\",\n \"model\": \"Galaxy Z1\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-Z200[FMY]\",\n \"model\": \"Galaxy Z2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-Z300H\",\n \"model\": \"Galaxy Z3\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-Z400[FY]\",\n \"model\": \"Galaxy Z4\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G150(?:N[0KLS])?|G155S)(?:[);/ ]|$)\",\n \"model\": \"Galaxy Folder\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-G16(?:0N|[05]0?|5N))(?:[);/ ]|$)\",\n \"model\": \"Galaxy Folder 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J321AZ(?:[);/ ]|$)\",\n \"model\": \"Galaxy Sol\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J326AZ(?:[);/ ]|$)\",\n \"model\": \"Galaxy Sol 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J336AZ(?:[);/ ]|$)\",\n \"model\": \"Galaxy Sol 3\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J727AZ(?:[);/ ]|$)\",\n \"model\": \"Galaxy Halo\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J327AZ\",\n \"model\": \"Galaxy Amp Prime 2\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-J337AZ\",\n \"model\": \"Galaxy Amp Prime 3 (2018)\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:F900[0FUW]|F907[BN])|SCV44\",\n \"model\": \"Galaxy Fold\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-F916(?:U1|[0BNQUW])|SCG05\",\n \"model\": \"Galaxy Z Fold 2 5G\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9060(?:[);/ ]|$)\",\n \"model\": \"Galaxy Grand Neo\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9063\",\n \"model\": \"Galaxy Grand Neo Duos\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9(?:080|128)\",\n \"model\": \"Galaxy Grand\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9168\",\n \"model\": \"Galaxy Grand Neo+\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I9082\",\n \"model\": \"Galaxy Grand Duos\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-N7000\",\n \"model\": \"Galaxy Note\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SC-01G|SCL24)(?:[);/ ]|$)\",\n \"model\": \"Galaxy Note Edge\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-N935[FSLK](?:[);/ ]|$)\",\n \"model\": \"Galaxy Note Fan Edition\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:(?:GT-)?N7100|SCH-(?:I605|N719|R950)|SPH-L900)(?:[);/ ]|$)\",\n \"model\": \"Galaxy Note II\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-N7105\",\n \"model\": \"Galaxy Note II LTE\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G710(?:2T|5[HL]|[25689KLS])?(?:[);/ ]|$)\",\n \"model\": \"Galaxy Grand 2\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G720(?:AX|N0|[02])(?:[);/ ]|$)\",\n \"model\": \"Galaxy Grand Max\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:G530(?:[689]W|[AF]Z|BT|MU|R[47]|[AFHMPTWY])|G531[FH]|S920L)(?:[);/ ]|$)\",\n \"model\": \"Galaxy Grand Prime\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G531(?:BT|[MY])(?:[);/ ]|$)\",\n \"model\": \"Galaxy Grand Prime VE Duos\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G532F(?:[);/ ]|$)\",\n \"model\": \"Galaxy Grand Prime Plus\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G532MT(?:[);/ ]|$)\",\n \"model\": \"Galaxy J2 Prime (TV)\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G532[MG](?:[);/ ]|$)\",\n \"model\": \"Galaxy J2 Prime\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-N7502(?:[);/ ]|$)\",\n \"model\": \"Galaxy Note 3 Neo Duos\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-N750[05LQ]?\",\n \"model\": \"Galaxy Note 3 Neo\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-N9002(?:[);/ ]|$)\",\n \"model\": \"Galaxy Note 3 Duos\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-9005(?:[);/ ]|$)\",\n \"model\": \"Galaxy Note 3 LTE\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-N900(?:W8|[05689][VQ]?|[AKLPSTV])?|SCL22|SC-01F(?:[);/ ]|$))\",\n \"model\": \"Galaxy Note 3\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-(?:N910|910U)|N9100(?:[);/ ]|$)\",\n \"model\": \"Galaxy Note 4\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-N916[KLS]\",\n \"model\": \"Galaxy Note 4 LTE\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-N915\",\n \"model\": \"Galaxy Note 4 Edge\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-N920(?:R[467]|W8|[0ACFGIKLPSTVX])\",\n \"model\": \"Galaxy Note 5\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-N9208\",\n \"model\": \"Galaxy Note 5 Duos\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G750(?:8Q|[9AFH])\",\n \"model\": \"Galaxy Mega 2\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I915[028]\",\n \"model\": \"Galaxy Mega 5.8\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-I920[05]\",\n \"model\": \"Galaxy Mega 6.3\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(?:SM-N930(?:R[467]|W8|[0AFKLPSTUVX])|SCV34)\",\n \"model\": \"Galaxy Note 7\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?SM-N950|SCV37|SC-01K\",\n \"model\": \"Galaxy Note 8\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?(?:SM-N960|SCV40|SC-01L)\",\n \"model\": \"Galaxy Note 9\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?SM-(?:N970(?:U1|W8|[089DFJKLSUWX])|N971N)\",\n \"model\": \"Galaxy Note 10\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?SM-N770[FX]\",\n \"model\": \"Galaxy Note 10 Lite\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?(?:SM-N975(?:U1|XU|[0CFUWX])|SM-N976[0BVNQU]|SC-01M|SCV45)\",\n \"model\": \"Galaxy Note 10+\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?(?:SM-N980(?:F/DS|F))\",\n \"model\": \"Galaxy Note 20\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?(?:SM-N981(?:B/DS|U1|[0BNUW]))\",\n \"model\": \"Galaxy Note 20 5G\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?(?:SM-N985(?:F/DS|F))\",\n \"model\": \"Galaxy Note 20 Ultra\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG[- ])?(?:SM-N986(?:B/DS|U1|[0BNUW])|SC-53A|SCG06)\",\n \"model\": \"Galaxy Note 20 Ultra 5G\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-W750V\",\n \"model\": \"Ativ SE\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?SM-G310R5\",\n \"model\": \"GreatCall Touch 3\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?GT-E2152\",\n \"model\": \"E2152\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?(GT-(P|N8|N5)[0-9]+[a-z]?)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SC-02C\",\n \"model\": \"Galaxy S II\"\n },\n {\n \"regex\": \"(?:SAMSUNG-)?((?:SM-[TNP]|GT-P)[a-z0-9_\\\\-]+)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"((?:SCH|SGH|SPH|SHV|SHW|GT|SM)-[a-z0-9_\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SMART-TV\",\n \"device\": \"tv\",\n \"model\": \"Smart TV\"\n },\n {\n \"regex\": \"Galaxy ([^/;]+) Build\",\n \"model\": \"Galaxy $1\"\n },\n {\n \"regex\": \"Galaxy ([a-z0-9]+)\",\n \"model\": \"Galaxy $1\"\n },\n {\n \"regex\": \"SAMSUNG[\\\\-][ ]?([a-z0-9]+[\\\\-_][a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SAMSUNG;[ ]?([a-z0-9]+[\\\\-_][a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SAMSUNG[ _/\\\\-]?([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SAMSUNG;[ ]?([a-z0-9 ]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SEC-([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SAM-([a-z0-9]+)\",\n \"model\": \"SCH-$1\"\n },\n {\n \"regex\": \"(?:portalmmm|o2imode)/2\\\\.0 ([SZ][a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"sam([rua][0-9]+)\",\n \"model\": \"SCH-$1\"\n }\n ]\n },\n \"Sanei\": {\n \"regex\": \"(?:8312D|G(60[25]|70[3568]G?|785|803)|N83(?:-2cpu)?|N91) Build\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"N83\",\n \"model\": \"N83\"\n },\n {\n \"regex\": \"N91\",\n \"model\": \"N91\"\n },\n {\n \"regex\": \"8312D\",\n \"model\": \"G101\"\n },\n {\n \"regex\": \"G(60[25]|70[3568]G?|785|803)\",\n \"model\": \"G$1\"\n }\n ]\n },\n \"Selfix\": {\n \"regex\": \"SELFIX\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SELFIX_SLASH6\",\n \"model\": \"Slash 6\"\n },\n {\n \"regex\": \"VOYAGER-V45\",\n \"model\": \"Voyager V45\"\n }\n ]\n },\n \"Sencor\": {\n \"regex\": \"Sencor|ELEMENT[ _]?(?:7|8|9\\\\.7|10[ _]1)(?:[ _]?V[23])?(?:[);/ ]|$)|ELEMENT[ _]?(?:P[0-9]+|10.1 Q001)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(?:SENCOR[ _])?Element (10\\\\.1) (Q001)\",\n \"model\": \"Element $1\\\" $2\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]?7[ _]?V3\",\n \"model\": \"Element 7 V3\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]?7[ _]?V2[ _]BASIC\",\n \"model\": \"Element 7 V2 Basic\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]?7[ _]?V2\",\n \"model\": \"Element 7 V2\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]8[ _]?V3\",\n \"model\": \"Element 8 V3\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]8[ _]?V2\",\n \"model\": \"Element 8 V2\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT8\",\n \"model\": \"Element 8\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]9\\\\.7[ _]?V3\",\n \"model\": \"Element 9.7 V3\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]9\\\\.7[ _]?V2\",\n \"model\": \"Element 9.7 V2\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]9\\\\.7\",\n \"model\": \"Element 9.7\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT10[ _]1\",\n \"model\": \"Element 10.1\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?(7Q105)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:SENCOR[ _])?ELEMENT[ _]?P([0-9]+)\",\n \"model\": \"Element P$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Sencor[ _]([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Senwa\": {\n \"regex\": \"Senwa|(?:S\\\\-?(?:471|7[12]5|6[01]5|915|905TL|1000|5018)|V705B|LS50F| LS50?|LS5518H|LS5718)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"S-?471(?:[);/ ]|$)\",\n \"model\": \"Jazz\"\n },\n {\n \"regex\": \"S-?605(?:[);/ ]|$)\",\n \"model\": \"City\"\n },\n {\n \"regex\": \"S-?905TL(?:[);/ ]|$)\",\n \"model\": \"Odin\"\n },\n {\n \"regex\": \"S-?1000(?:[);/ ]|$)\",\n \"model\": \"Odin\"\n },\n {\n \"regex\": \"S-?5018(?:[);/ ]|$)\",\n \"model\": \"Inizio\"\n },\n {\n \"regex\": \"S-?(615|7[12]5|915)(?:[);/ ]|$)\",\n \"model\": \"S$1\"\n },\n {\n \"regex\": \"V705B(?:[);/ ]|$)\",\n \"model\": \"V705B\"\n },\n {\n \"regex\": \"LS50F(?:[);/ ]|$)\",\n \"model\": \"Evolution\"\n },\n {\n \"regex\": \" LS50(?:[);/ ]|$)\",\n \"model\": \"Pegasus\"\n },\n {\n \"regex\": \" LS5(?:[);/ ]|$)\",\n \"model\": \"Thor\"\n },\n {\n \"regex\": \"LS5518H(?:[);/ ]|$)\",\n \"model\": \"Sparkly\"\n },\n {\n \"regex\": \"LS5718(?:[);/ ]|$)\",\n \"model\": \"Diamond\"\n },\n {\n \"regex\": \"Senwa[ _-]*([^;/]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sky\": {\n \"regex\": \"(?:SKY|Elite|Fuego)[_ ][3-7]\\\\.[05](?:[A-Z]{1,2})?|Elite[ _](?:5_0T|M45|[45]T|45T|GO|M5Plus|T55|T[46]|[AB]5|5_5_Octa)|Platinum[_ ](?:5.0M|5\\\\.5C|5\\\\.0+|M5|[ABCM]4|[ACG]55|[ABDEFG]5|A57|P9|X|UNO|VIEW2|O|4\\\\.0|4_0Plus)|PLATINUMVIEW|SKY[ _](?:55M|Pro_III)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Platinum[_ ](?:5\\\\.0M|M5)\",\n \"model\": \"Platinum 5.0M\"\n },\n {\n \"regex\": \"Platinum[_ ]5\\\\.5C\",\n \"model\": \"Platinum 5.5C\"\n },\n {\n \"regex\": \"Platinum[_ ]5\\\\.0\\\\+\",\n \"model\": \"Platinum 5.0 Plus\"\n },\n {\n \"regex\": \"Platinum_4_0Plus\",\n \"model\": \"Platinum 4.0 Plus\"\n },\n {\n \"regex\": \"Platinum[ _]4\\\\.0\",\n \"model\": \"Platinum 4.0\"\n },\n {\n \"regex\": \"Platinum[_ ](P9) Pro(?:[);/ ]|$)\",\n \"model\": \"Platinum $1 Pro\"\n },\n {\n \"regex\": \"Platinum[_ ]([ABCM]4|[ACG]55|[ABDEFG]5|A57|P9|X|UNO|O)(?:[);/ ]|$)\",\n \"model\": \"Platinum $1\"\n },\n {\n \"regex\": \"Platinum[_ ]?VIEW(2)?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Platinum View$1\"\n },\n {\n \"regex\": \"Elite_5_5_Octa\",\n \"model\": \"Elite 5.5 Octa\"\n },\n {\n \"regex\": \"Elite M5Plus\",\n \"model\": \"Elite M5 Plus\"\n },\n {\n \"regex\": \"Elite[ _](M45|Go|[45]T|T[46]|T55|[AB]5|A55|45T)(?:[);/ ]|$)\",\n \"model\": \"Elite $1\"\n },\n {\n \"regex\": \"Elite[_ ]([3-7])[\\\\._]([05](?:[A-Z]{1,2})?\\\\+?)\",\n \"model\": \"Elite $1.$2\"\n },\n {\n \"regex\": \"Fuego[_ ]([3-7]\\\\.[05](?:[A-Z]{1,2})?\\\\+?)\",\n \"model\": \"Fuego $1\"\n },\n {\n \"regex\": \"SKY_Pro_III\",\n \"model\": \"Pro III\"\n },\n {\n \"regex\": \"SKY 55M\",\n \"model\": \"55M\"\n },\n {\n \"regex\": \"SKY[_ ]([3-7]\\\\.[05](?:[A-Z]{1,2})?)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Skyworth\": {\n \"regex\": \"Sky_?worth\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Sky_?worth ([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Smartfren\": {\n \"regex\": \"Smartfren|Androtab|Andromax|PD6D1J|AD682J|AD68[89]G|AD6B1H|AD9A1H|AD682H|AD683G\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"S7 Build\",\n \"model\": \"Andromax Tab 7.0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"PD6D1J\",\n \"model\": \"Andromax V3s\"\n },\n {\n \"regex\": \"AD682J\",\n \"model\": \"Andromax T\"\n },\n {\n \"regex\": \"AD688G\",\n \"model\": \"Andromax C2\"\n },\n {\n \"regex\": \"AD689G\",\n \"model\": \"Andromax i3\"\n },\n {\n \"regex\": \"AD682H\",\n \"model\": \"Andromax i3s\"\n },\n {\n \"regex\": \"AD6B1H\",\n \"model\": \"Andromax G2 Hot\"\n },\n {\n \"regex\": \"AD9A1H\",\n \"model\": \"Andromax G2\"\n },\n {\n \"regex\": \"AD683G\",\n \"model\": \"Andromax I\"\n },\n {\n \"regex\": \"New Andromax-i\",\n \"model\": \"New Andromax I\"\n },\n {\n \"regex\": \"Andromax[ _\\\\-]([^/;]+) Build\",\n \"model\": \"Andromax $1\"\n },\n {\n \"regex\": \"Andromax[ _\\\\-]([a-z0-9]+)\",\n \"model\": \"Andromax $1\"\n },\n {\n \"regex\": \"Smartfren[ _\\\\-]([^/;\\\\)]+)(?: Build|[/;\\\\)])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Androtab[^/;]+) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Smartisan\": {\n \"regex\": \"(SM(?:70[15]|[89]01|919)|OD10[35]|YQ60[1357]|DE106|DT1901A|O[CE]106|OS103|O[CS]105)[ /;\\\\)]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SM70[15]\",\n \"model\": \"T1\"\n },\n {\n \"regex\": \"SM801\",\n \"model\": \"T2\"\n },\n {\n \"regex\": \"SM901\",\n \"model\": \"M1\"\n },\n {\n \"regex\": \"SM919\",\n \"model\": \"M1L\"\n },\n {\n \"regex\": \"YQ60[1357]\",\n \"model\": \"U1\"\n },\n {\n \"regex\": \"OD10[35]\",\n \"model\": \"Pro\"\n },\n {\n \"regex\": \"OS105[ /;\\\\)]\",\n \"model\": \"Pro 2\"\n },\n {\n \"regex\": \"DE106[ /;\\\\)]\",\n \"model\": \"R1\"\n },\n {\n \"regex\": \"OE106[ /;\\\\)]\",\n \"model\": \"Nut Pro 2s\"\n },\n {\n \"regex\": \"OC10[56][ /;\\\\)]\",\n \"model\": \"Nut 3\"\n },\n {\n \"regex\": \"DT1901A[ /;\\\\)]\",\n \"model\": \"Nut Pro 3\"\n },\n {\n \"regex\": \"OS103[ /;\\\\)]\",\n \"model\": \"JianGuo Pro 2\"\n }\n ]\n },\n \"STF Mobile\": {\n \"regex\": \"(?:Fractal|AERIAL PLUS|Origins Pro|BLOCK_MINI|BLOCK GO|BLOCK 3|SLAY II)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Fractal\",\n \"model\": \"Fractal\"\n },\n {\n \"regex\": \"Origins Pro\",\n \"model\": \"Origins Pro\"\n },\n {\n \"regex\": \"AERIAL PLUS\",\n \"model\": \"Aerial Plus\"\n },\n {\n \"regex\": \"BLOCK_MINI\",\n \"model\": \"Block Mini\"\n },\n {\n \"regex\": \"BLOCK 3 mini\",\n \"model\": \"Block 3 Mini\"\n },\n {\n \"regex\": \"BLOCK 3\",\n \"model\": \"Block 3\"\n },\n {\n \"regex\": \"BLOCK GO\",\n \"model\": \"Block Go\"\n },\n {\n \"regex\": \"SLAY II\",\n \"model\": \"Slay II\"\n }\n ]\n },\n \"STK\": {\n \"regex\": \"STK[_ ]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"STK[_ ]([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"STK[_ ]([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Stonex\": {\n \"regex\": \"STX[ -]([^;/]+)|STONE EVO\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"STX[ -]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"STX[ -]([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"SuperSonic\": {\n \"regex\": \"(SC-[0-9]+[a-z]+)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Supra\": {\n \"regex\": \"SUPRA|NVTAB 7.0 3G\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SUPRA[ _]([^;/)]+)(?: Build|[;)])\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(NVTAB 7.0 3G)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sumvision\": {\n \"regex\": \"(Cyclone [^/;]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"SunVan\": {\n \"regex\": \"SUNVAN[ _\\\\-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SUNVAN[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SUNVAN[ _\\\\-]?([^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"SWISSMOBILITY\": {\n \"regex\": \"(?:SCHR9GR|PRA(?:U8|100)|ZUR(?:722M|70016W?|700[RW]|805A))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SCHR9GR\",\n \"model\": \"SCHON R9\"\n },\n {\n \"regex\": \"PRA(U8|100)\",\n \"model\": \"PRA$1\"\n },\n {\n \"regex\": \"ZUR722M\",\n \"device\": \"phablet\",\n \"model\": \"Z72 go\"\n },\n {\n \"regex\": \"ZUR(70016W?|700[RW]|805A)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"ZUR$1\"\n }\n ]\n },\n \"Thomson\": {\n \"regex\": \"(?:Primo(7|8)|QM73[45]-8G|QM734-2|QM736-8G\\\\(HD\\\\)|(?<!\\\\.)8950|MID1002|5014G|TEO7RK|Friendly_TH101|Delight TH201)(?:[);/ ]|$)|(?:Tlink|Every)[0-9]+|THOMSON,\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Primo(7|8)\",\n \"model\": \"Primo $1\"\n },\n {\n \"regex\": \"QM734-2\",\n \"model\": \"QM734-2\"\n },\n {\n \"regex\": \"QM734-8G\",\n \"model\": \"QM734-8G\"\n },\n {\n \"regex\": \"QM735-8G\",\n \"model\": \"QM735-8G\"\n },\n {\n \"regex\": \"QM736-8G\\\\(HD\\\\)\",\n \"model\": \"QM736-8G (HD)\"\n },\n {\n \"regex\": \"(?<!\\\\.)8950(?:[);/ ]|$)\",\n \"model\": \"3G 8950\"\n },\n {\n \"regex\": \"TEO7RK(?:[);/ ]|$)\",\n \"model\": \"TEO7RK\"\n },\n {\n \"regex\": \"5014G(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"5014G\"\n },\n {\n \"regex\": \"Tlink([0-9]+)\",\n \"device\": \"smartphone\",\n \"model\": \"Tlink$1\"\n },\n {\n \"regex\": \"Every([0-9]+)\",\n \"device\": \"smartphone\",\n \"model\": \"Every$1\"\n },\n {\n \"regex\": \"Delight TH201\",\n \"device\": \"smartphone\",\n \"model\": \"Delight TH201\"\n },\n {\n \"regex\": \"Friendly_TH101\",\n \"device\": \"smartphone\",\n \"model\": \"Friendly TH101\"\n },\n {\n \"regex\": \"((?:49|55)UC6306|55UC63|32HD55|40FD54|55UD63)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Tanix\": {\n \"regex\": \"TX5 MAX(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"TX5 Max\"\n },\n \"Pantech\": {\n \"regex\": \"Pantech|P[GN]-|PT-[a-z0-9]{3,}|(?<!Winmax )TX[T]?[0-9]+|IM-[a-z0-9]+(?:[);/ ]|$)|ADR910L\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ADR910L\",\n \"model\": \"Star Q\"\n },\n {\n \"regex\": \"IM-A870K\",\n \"model\": \"Vega Iron\"\n },\n {\n \"regex\": \"Pantech[ \\\\-]?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Pantech_([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(P[GTN]-[a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(TX[T]?[0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(IM-[a-z0-9]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ployer\": {\n \"regex\": \"MOMO([0-9]|[ ]?mini[ ]?(?:S|3GS)?)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"MOMOminiS\",\n \"model\": \"MOMO mini S\"\n },\n {\n \"regex\": \"momo mini 3GS\",\n \"model\": \"MOMO Mini 3GS\"\n },\n {\n \"regex\": \"MOMO([0-9][^);/]*) Build\",\n \"model\": \"MOMO $1\"\n },\n {\n \"regex\": \"MOMO([0-9][^);/]*)(?:[);/]|$)\",\n \"model\": \"MOMO $1\"\n }\n ]\n },\n \"Plum\": {\n \"regex\": \"PLUM[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Z405\",\n \"model\": \"Gator 3\"\n },\n {\n \"regex\": \"Z407\",\n \"model\": \"Axe 4\"\n },\n {\n \"regex\": \"Z516\",\n \"model\": \"Compass\"\n },\n {\n \"regex\": \"Z811\",\n \"device\": \"tablet\",\n \"model\": \"Optimax 11\"\n },\n {\n \"regex\": \"Z709\",\n \"device\": \"tablet\",\n \"model\": \"Optimax 7\"\n },\n {\n \"regex\": \"Z712\",\n \"device\": \"tablet\",\n \"model\": \"Optimax 12\"\n }\n ]\n },\n \"Polaroid\": {\n \"regex\": \"Polaroid|(?:PMID|MIDC)[0-9a-z]+(?:[);/ ]|$)|MID(?:1014|0714)|PRO[VG]?(?:[0-9]{3,}[a-z]*|[0-9]{2}[a-z])|(?:P(?:400[56]|4526|500[56]|502[56]|504[67]|552[56])A|P902/A900|PSPC(?:505|550|[MZL]20A0|K2[01]NA)|SIGMA 5|MIDS145PXE|MIDS747PX|MID4004JBL|MIDS185PR|PSPTD21NA)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"P4005A\",\n \"model\": \"Turbo C4\"\n },\n {\n \"regex\": \"P5005A\",\n \"model\": \"Turbo C5\"\n },\n {\n \"regex\": \"P4006A\",\n \"model\": \"Turbo D4\"\n },\n {\n \"regex\": \"PSPTD21NA\",\n \"model\": \"Turbo D2 Plus\"\n },\n {\n \"regex\": \"P4526A\",\n \"model\": \"Turbo E\"\n },\n {\n \"regex\": \"PSPC(505|550)\",\n \"model\": \"Cosmo $1\"\n },\n {\n \"regex\": \"P5006A\",\n \"model\": \"Cosmo K\"\n },\n {\n \"regex\": \"P5526A\",\n \"model\": \"Cosmo K Plus\"\n },\n {\n \"regex\": \"PSPCK20NA\",\n \"model\": \"Cosmo K2\"\n },\n {\n \"regex\": \"PSPCK21NA\",\n \"model\": \"Cosmo K2 Plus\"\n },\n {\n \"regex\": \"P5026A\",\n \"model\": \"Cosmo L\"\n },\n {\n \"regex\": \"PSPCL20A0\",\n \"model\": \"Cosmo L2\"\n },\n {\n \"regex\": \"PSPCM20A0\",\n \"model\": \"Cosmo M2\"\n },\n {\n \"regex\": \"P5046A\",\n \"model\": \"Cosmo P5s\"\n },\n {\n \"regex\": \"P5525A\",\n \"model\": \"Cosmo Q5s\"\n },\n {\n \"regex\": \"P5047A\",\n \"model\": \"Cosmo Z\"\n },\n {\n \"regex\": \"PSPCZ20A0\",\n \"model\": \"Cosmo Z2\"\n },\n {\n \"regex\": \"P5025A\",\n \"model\": \"L5s\"\n },\n {\n \"regex\": \"PRO4611(?:PR201)?\",\n \"model\": \"Pro4611\"\n },\n {\n \"regex\": \"PROV400\",\n \"model\": \"Agate\"\n },\n {\n \"regex\": \"PROV350\",\n \"model\": \"ProV350\"\n },\n {\n \"regex\": \"SIGMA 5(?:[);/ ]|$)\",\n \"model\": \"Sigma 5\"\n },\n {\n \"regex\": \"PRO([VG]?(?:[0-9]{3,}[a-z]*|[0-9]{2}[a-z]))\",\n \"model\": \"Pro$1\"\n },\n {\n \"regex\": \"PSPT350\",\n \"model\": \"Turbo 350 Gris\"\n },\n {\n \"regex\": \"MIDS185PR\",\n \"model\": \"Pure 10.1\\\"\"\n },\n {\n \"regex\": \"(MID(?:1014|0714|S145PXE|S747PX|4004JBL))\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"((?:PMID|MIDC)[0-9a-z]+)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(P902/A900)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Polaroid\",\n \"model\": \"\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"PolyPad\": {\n \"regex\": \"POLY ?PAD\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"POLY ?PAD[_ \\\\.]([a-z0-9]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"POLY ?PAD[_\\\\.]([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Polytron\": {\n \"regex\": \"POLYTRON|W8480|W7430|PW1100S|W7550|W7531|W8570|R2401\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"R2508\",\n \"model\": \"Rocket\"\n },\n {\n \"regex\": \"POLYTRON[ _]R1500\",\n \"model\": \"Rocket Q-Five\"\n },\n {\n \"regex\": \"R2401\",\n \"model\": \"Rocket 2X\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2402\",\n \"model\": \"Rocket R2402\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2403\",\n \"model\": \"Rocket R1\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2406\",\n \"model\": \"Rocket R2\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2407\",\n \"model\": \"Rocket R3\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2452\",\n \"model\": \"Rocket S1\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2457\",\n \"model\": \"Rocket S2\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2501\",\n \"model\": \"Rocket T1\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2507\",\n \"model\": \"Rocket T3\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2509SE\",\n \"model\": \"Rocket T6 SE\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2509\",\n \"model\": \"Rocket T6\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R250A\",\n \"model\": \"Rocket T7\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R2506\",\n \"model\": \"Rocket T4\"\n },\n {\n \"regex\": \"POLYTRON[ _-](?:R3450|W1400)\",\n \"model\": \"Rocket Jetz\"\n },\n {\n \"regex\": \"POLYTRON[ _-]R3500\",\n \"model\": \"Rocket Jetz 5.0\"\n },\n {\n \"regex\": \"4G450\",\n \"model\": \"Zap 5\"\n },\n {\n \"regex\": \"W6500\",\n \"model\": \"Quadra Rocket\"\n },\n {\n \"regex\": \"W7452\",\n \"model\": \"Quadra S2\"\n },\n {\n \"regex\": \"W7550\",\n \"model\": \"Quadra V5\"\n },\n {\n \"regex\": \"W8570\",\n \"model\": \"Quadra V7\"\n },\n {\n \"regex\": \"POLYTRON[ _]L501\",\n \"model\": \"Rocket L501\"\n },\n {\n \"regex\": \"POLYTRON[ _]P520\",\n \"model\": \"Prime 7S\"\n },\n {\n \"regex\": \"POLYTRON[ _]P552\",\n \"model\": \"Prime 7 Pro\"\n },\n {\n \"regex\": \"4G500\",\n \"model\": \"Zap 6 Cleo\"\n },\n {\n \"regex\": \"W8480\",\n \"model\": \"Crystal 4 W8480\"\n },\n {\n \"regex\": \"W7531\",\n \"model\": \"Wizard V\"\n },\n {\n \"regex\": \"W7430\",\n \"model\": \"Quadra Mini W7430\"\n },\n {\n \"regex\": \"POLYTRON[ _]4G501\",\n \"model\": \"Zap 6 Posh\"\n },\n {\n \"regex\": \"POLYTRON[ _]4G502\",\n \"model\": \"Zap 6 Power\"\n },\n {\n \"regex\": \"POLYTRON[ _]4G503\",\n \"model\": \"Zap 6 Flaz\"\n },\n {\n \"regex\": \"POLYTRON[_ ]?[ _]4G550\",\n \"model\": \"Zap 6 Note\"\n },\n {\n \"regex\": \"POLYTRON[ _]4G551\",\n \"model\": \"Zap 6 Posh Note\"\n },\n {\n \"regex\": \"PW1100S\",\n \"model\": \"PW1100S\"\n },\n {\n \"regex\": \"Q2352\",\n \"model\": \"Q2352\"\n },\n {\n \"regex\": \"POLYTRON[ _]T7800\",\n \"model\": \"Cosmica T7800\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"POLYTRON[ _]T7700\",\n \"model\": \"Rocket Pad\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Positivo\": {\n \"regex\": \"YPY_S450\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"YPY_S450\",\n \"model\": \"YPY S450\"\n }\n ]\n },\n \"Prestigio\": {\n \"regex\": \"Prestigio 5500 DUO|(?:PMP|PAP|PMT|PSP|PGPS)[0-9]+[a-z0-9_]+(?:[);/ ]|$)|Muze C3\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"PMT3277_3G\",\n \"model\": \"MultiPad Ranger 7.0 3G\"\n },\n {\n \"regex\": \"PGPS7799CIS08GBPG(?:[);/ ]|$)\",\n \"model\": \"Geo Vision Tour 3\"\n },\n {\n \"regex\": \"PGPS7797(?:[);/ ]|$)\",\n \"model\": \"Geo Vision Tour 2\"\n },\n {\n \"regex\": \"PMT3201_4G\",\n \"model\": \"Grace 4G\"\n },\n {\n \"regex\": \"PSP5551DUO\",\n \"model\": \"Grace S5\"\n },\n {\n \"regex\": \"PMT3287_3G\",\n \"model\": \"MultiPad Ranger 8.0 3G\"\n },\n {\n \"regex\": \"Prestigio 5500 DUO\",\n \"model\": \"MultiPhone 5500 Duo\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"PMT3208[_ ]3G\",\n \"model\": \"MultiPad Wize 8.0 3G\"\n },\n {\n \"regex\": \"PSP7546DUO([ _][A-Z]{2})?\",\n \"model\": \"X Pro\"\n },\n {\n \"regex\": \"PSP7610DUO([ _][A-Z]{2})?\",\n \"model\": \"S Max\"\n },\n {\n \"regex\": \"(PM[PT][0-9]+[a-z0-9_]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"((?:PAP|PSP)[0-9]+[a-z0-9_]+(?: DUO)?)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"Muze C3(?:[);/ ]|$)\",\n \"model\": \"Muze C3\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"Sanyo\": {\n \"regex\": \"Sanyo|MobilePhone[ ;]\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"SCP-?6750\",\n \"model\": \"Katana Eclipse X\"\n },\n {\n \"regex\": \"SCP-?6760\",\n \"model\": \"Incognito\"\n },\n {\n \"regex\": \"SCP-?6780\",\n \"model\": \"Innuendo\"\n },\n {\n \"regex\": \"SANYO[ /_-]([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MobilePhone ([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Qilive\": {\n \"regex\": \"Qilive [0-9][^;/]*|Q(7S5[5]?IN4G|7T10INP|8T10IN|8S55IN4G2|8S[56]IN4G|9T9IN|9T(?:7|10)IN4G|9S55IN4G|10S5[37]IN4G|10S[56]IN4G|10S[56]IN4GR|9S5IN4G|6T7IN)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Q7S5IN4G\",\n \"model\": \"Q7 5.0\\\" 4G\"\n },\n {\n \"regex\": \"Q7S55IN4G\",\n \"model\": \"Q7 5.5\\\" 4G\"\n },\n {\n \"regex\": \"Q8S55IN4G2\",\n \"model\": \"Q8 5.5\\\" 4G\"\n },\n {\n \"regex\": \"Q8S6IN4G\",\n \"model\": \"Q8 6.0\\\" 4G\"\n },\n {\n \"regex\": \"Q8S5IN4GP\",\n \"model\": \"Q8 5.1\\\" 4G\"\n },\n {\n \"regex\": \"Q9S5IN4G\",\n \"model\": \"Q9 5.0\\\" 4G\"\n },\n {\n \"regex\": \"Q9S55IN4G\",\n \"model\": \"Q9 5.5\\\" 4G\"\n },\n {\n \"regex\": \"Q10S53IN4G\",\n \"model\": \"Q10 5.3\\\" 4G\"\n },\n {\n \"regex\": \"Q10S57IN4G\",\n \"model\": \"Q10 5.7\\\" 4G\"\n },\n {\n \"regex\": \"Q10S5IN4G[R]?\",\n \"model\": \"Q10 5.0\\\" 4G\"\n },\n {\n \"regex\": \"Q10S6IN4G\",\n \"model\": \"Q10 6.0\\\" 4G\"\n },\n {\n \"regex\": \"Q6T7IN\",\n \"model\": \"Q6\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Q7T10INP\",\n \"model\": \"Q7 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Q8T10IN\",\n \"model\": \"Q8 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Q9T7IN4G\",\n \"model\": \"Q9 7.0\\\" 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Q9T9IN\",\n \"model\": \"Q9 9.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Q9T10IN4G\",\n \"model\": \"Q9 10.1\\\" 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Qilive ([0-5][^;/]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Qilive ([0-5][^;/]*)/\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Qilive ([6-9][^;/]*) Build\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Qilive ([6-9][^;/]*)/\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"QMobile\": {\n \"regex\": \"QMobile|QTab(?!10EW)|Q-Smart|(?:E2 Noir|Noir X1S|LUNA PRO|NICE S|JazzX JS(?:[27]|10)(?: PRO)?|LT[57]00 PRO|LT950|Q Infinity|Hot Pro 2)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"JazzX JS7 PRO\",\n \"model\": \"Jazz X JS7 Pro\"\n },\n {\n \"regex\": \"JazzX JS(2|10)\",\n \"model\": \"Jazz X JS$1\"\n },\n {\n \"regex\": \"Noir X1S\",\n \"model\": \"Noir X1S\"\n },\n {\n \"regex\": \"E2 Noir\",\n \"model\": \"E2 Noir\"\n },\n {\n \"regex\": \"Hot Pro 2\",\n \"model\": \"Hot Pro 2\"\n },\n {\n \"regex\": \"LT([57]00) PRO\",\n \"model\": \"Noir LT$1 Pro\"\n },\n {\n \"regex\": \"LUNA PRO\",\n \"model\": \"Luna Pro\"\n },\n {\n \"regex\": \"NICE S\",\n \"model\": \"Nice S\"\n },\n {\n \"regex\": \"Q Infinity PRO\",\n \"model\": \"Q Infinity Pro\"\n },\n {\n \"regex\": \"Q Infinity E Lite\",\n \"model\": \"Q Infinity E Lite\"\n },\n {\n \"regex\": \"Q Infinity ([FCB])\",\n \"model\": \"Q Infinity $1\"\n },\n {\n \"regex\": \"(LT950)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"QTab[ _-]([^;/]+) Build\",\n \"model\": \"$1 Tab\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"QTab[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1 Tab\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:QMobile|Q-Smart)[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:QMobile|Q-Smart)[ _-]([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Q Infinity\",\n \"model\": \"Q Infinity\"\n }\n ]\n },\n \"Maximus\": {\n \"regex\": \"Maximus[ _]|(Noir X)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Maximus[ _])?(Noir X|D1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Maximus_(T2)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Quantum\": {\n \"regex\": \"Quantum (?:Fit|MUV (?:PRO|UP)|Go|Mini|V|You [2E])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Quantum (Fit|Go|Mini|V|You [2E])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Quantum MUV PRO(?:[);/ ]|$)\",\n \"model\": \"MUV Pro\"\n },\n {\n \"regex\": \"Quantum MUV UP(?:[);/ ]|$)\",\n \"model\": \"MUV Up\"\n }\n ]\n },\n \"Quechua\": {\n \"regex\": \"Quechua Phone 5\",\n \"device\": \"smartphone\",\n \"model\": \"Quechua Phone 5\"\n },\n \"Ramos\": {\n \"regex\": \"Ramos ?([^/;]+) Build|MOS1(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(MOS1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Ramos ?([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Razer\": {\n \"regex\": \"Phone 2\",\n \"device\": \"smartphone\",\n \"model\": \"Phone 2\"\n },\n \"Sendo\": {\n \"regex\": \"Sendo([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Turbo-X\": {\n \"regex\": \"Turbo-X|Hive V 3G|Turbox_S3\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Turbox_S3\",\n \"model\": \"S3\"\n },\n {\n \"regex\": \"Turbo-X_A2(?:[);/ ]|$)\",\n \"model\": \"A2\"\n },\n {\n \"regex\": \"Turbo-X_e3(?:[);/ ]|$)\",\n \"model\": \"E3\"\n },\n {\n \"regex\": \"Turbo-X Ice(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Ice\"\n },\n {\n \"regex\": \"Hive V 3G(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Hive V 3G\"\n },\n {\n \"regex\": \"Turbo-X Tablet([^;/]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"Tablet$1\"\n },\n {\n \"regex\": \"Turbo-X ([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Turbo\": {\n \"regex\": \"Turbo[_ ]?(?:X5[_ ]?(?:Max|Black|Space|Hero)|X8|X6[ _]Z|X[ _]Ray)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TurboX5Space(?:[);/ ]|$)\",\n \"model\": \"X5 Space\"\n },\n {\n \"regex\": \"TurboX5Hero(?:[);/ ]|$)\",\n \"model\": \"X5 Hero\"\n },\n {\n \"regex\": \"TurboX[ _]Ray(?:[);/ ]|$)\",\n \"model\": \"X Ray\"\n },\n {\n \"regex\": \"Turbo[ _]?X5[ _]?Black(?:[);/ ]|$)\",\n \"model\": \"X5 Black\"\n },\n {\n \"regex\": \"Turbo[ _]X5[ _]Max(?:[);/ ]|$)\",\n \"model\": \"X5 Max\"\n },\n {\n \"regex\": \"Turbo[ _]X6[ _]Z(?:[);/ ]|$)\",\n \"model\": \"X6 Z\"\n },\n {\n \"regex\": \"Turbo[ _]X8(?:[);/ ]|$)\",\n \"model\": \"X8\"\n }\n ]\n },\n \"Silent Circle\": {\n \"regex\": \"Blackphone 2\",\n \"device\": \"smartphone\",\n \"model\": \"Blackphone 2\"\n },\n \"Sigma\": {\n \"regex\": \"Sigma(?!Designs)|(X[_-]Style[ _]?Tab[_ ]A([0-9]{2,3})|X[-_ ]?treme[-_ ]?PQ[0-9]{2}|X-Style_S5501)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Sigma[ _])?X[-_ ]?treme[-_ ]?PQ([0-9]{2})(?:[);/ ]|$)\",\n \"model\": \"X-Treme PQ$1\"\n },\n {\n \"regex\": \"X[_-]Style[ _]?Tab[_ ]A([0-9]{2,3})(?:[);/ ]|$)\",\n \"model\": \"X-Style Tab A$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Sigma[ _])?X[-_ ]?Style[-_ ]S([0-9]+)(?:[);/ ]|$)\",\n \"model\": \"X-Style S$1\"\n }\n ]\n },\n \"Spice\": {\n \"regex\": \"(?<![\\\\d];)Spice\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Spice[ _\\\\-]?([^/;]+)(?:[\\\\)]| Build)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Spice[ _\\\\-]?([^/;]+)(?:/|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sharp\": {\n \"regex\": \"SHARP|SBM|SH-?[0-9]+[a-z]?(?:[);/ ]|$)|AQUOS|(?:SH-M0[14-9]|SH-M1[1-6](?:-y)?|S[357]-SH|SH-[MZ](10|01)|SH-[CL]02|SH-RM(?:1[125]|02)|[34]04SH|401SH|[45]02SH|306SH|[36]05SH|70[1246]SH|80[138]SH|90[1678]SH|50[3679]SH|SHL2[25]|SHV4[0-8]|SHV3[1-9](?:[-_]u)?|FS80(?:1[08]|32|28|0[29])|TG-L900S|NP601SH|403SH|603SH|SHF3[134]|SHV4[035][-_]u|SW001SH|SHG0[123]|X4-SH|A002SH|SH-A01|DM-01J|SH-D01|A001SH|606SH|FS801[56]|d-41A|NP80[567]SH|NP501SH)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"506SH(?:[);/ ]|$)\",\n \"model\": \"Aquos Xx3\"\n },\n {\n \"regex\": \"603SH(?:[);/ ]|$)\",\n \"model\": \"Aquos Xx3 Mini\"\n },\n {\n \"regex\": \"50[23]SH(?:[);/ ]|$)\",\n \"model\": \"Aquos Xx2\"\n },\n {\n \"regex\": \"[34]04SH(?:[);/ ]|$)\",\n \"model\": \"Aquos Xx\"\n },\n {\n \"regex\": \"606SH(?:[);/ ]|$)\",\n \"model\": \"Aquos ea\"\n },\n {\n \"regex\": \"507SH(?:[);/ ]|$)\",\n \"model\": \"Android One\"\n },\n {\n \"regex\": \"S3-SH(?:[);/ ]|$)\",\n \"model\": \"Android One S3\"\n },\n {\n \"regex\": \"S5-SH(?:[);/ ]|$)\",\n \"model\": \"Android One S5\"\n },\n {\n \"regex\": \"S7-SH(?:[);/ ]|$)\",\n \"model\": \"Android One S7\"\n },\n {\n \"regex\": \"X4-SH(?:[);/ ]|$)\",\n \"model\": \"Android One X4\"\n },\n {\n \"regex\": \"SH-M04(?:[);/ ]|$)\",\n \"model\": \"Aquos SH-M04\"\n },\n {\n \"regex\": \"SH-M05(?:[);/ ]|$)\",\n \"model\": \"Aquos Sense Lite\"\n },\n {\n \"regex\": \"SH-M07(?:[);/ ]|$)\",\n \"model\": \"Aquos Sense Plus\"\n },\n {\n \"regex\": \"SHG03(?:[);/ ]|$)\",\n \"model\": \"Aquos Sense 5G\"\n },\n {\n \"regex\": \"SH-D01(?:[);/ ]|$)\",\n \"model\": \"Aquos D10\"\n },\n {\n \"regex\": \"SH-M12(?:-y)?(?:[);/ ]|$)\",\n \"model\": \"Aquos S3 Dual SIM\"\n },\n {\n \"regex\": \"(?:SH-[MZ]10|801SH)(?:[);/ ]|$)\",\n \"model\": \"Aquos Zero\"\n },\n {\n \"regex\": \"(?:SH-M13|906SH)(?:[);/ ]|$)\",\n \"model\": \"Aquos Zero 2\"\n },\n {\n \"regex\": \"(?:SHG02|A002SH)(?:[);/ ]|$)\",\n \"model\": \"Aquos Zero 5G Basic\"\n },\n {\n \"regex\": \"SH-Z01(?:[);/ ]|$)\",\n \"model\": \"Aquos S2 (C10)\"\n },\n {\n \"regex\": \"(?:SH-02E|SH-01[GH]|SH-04H)(?:[);/ ]|$)\",\n \"model\": \"Aquos Phone Zeta\"\n },\n {\n \"regex\": \"SH-?06D(?:[);/ ]|$)\",\n \"model\": \"Aquos Phone SH-06D\"\n },\n {\n \"regex\": \"(SHL2[25]|SH-M01)(?:[);/ ]|$)\",\n \"model\": \"Aquos Phone $1\"\n },\n {\n \"regex\": \"SH-L02(?:[);/ ]|$)\",\n \"model\": \"Aquos L2\"\n },\n {\n \"regex\": \"(?:605SH|SH-03J|SHV39)(?:[);/ ]|$)\",\n \"model\": \"Aquos R\"\n },\n {\n \"regex\": \"(?:605SH|SH-03J|SHV39)(?:[);/ ]|$)\",\n \"model\": \"Aquos R\"\n },\n {\n \"regex\": \"(?:701SH|SHV41|SH-M06)(?:[);/ ]|$)\",\n \"model\": \"Aquos R Compact\"\n },\n {\n \"regex\": \"(?:SH-M09|SHV42|706SH|SH-03K)(?:[);/ ]|$)\",\n \"model\": \"Aquos R2\"\n },\n {\n \"regex\": \"803SH(?:[);/ ]|$)\",\n \"model\": \"Aquos R2 Compact\"\n },\n {\n \"regex\": \"(?:908SH|SHG01|SH-M14)(?:[);/ ]|$)\",\n \"model\": \"Aquos R5G\"\n },\n {\n \"regex\": \"SH-M16(?:[);/ ]|$)\",\n \"model\": \"Aquos S4 Plus\"\n },\n {\n \"regex\": \"SH-M15(?:[);/ ]|$)\",\n \"model\": \"Aquos S4 SIM\"\n },\n {\n \"regex\": \"SH-C02(?:[);/ ]|$)\",\n \"model\": \"Aquos V\"\n },\n {\n \"regex\": \"(SHF3[134])(?:[);/ ]|$)\",\n \"model\": \"Aquos K $1\"\n },\n {\n \"regex\": \"704SH(?:[);/ ]|$)\",\n \"model\": \"Simple Smartphone 4\"\n },\n {\n \"regex\": \"(?:SH-02J|SH-04G)(?:[);/ ]|$)\",\n \"model\": \"Aquos Ever\"\n },\n {\n \"regex\": \"SH-02H(?:[);/ ]|$)\",\n \"model\": \"Aquos Compact\"\n },\n {\n \"regex\": \"30[56]SH(?:[);/ ]|$)\",\n \"model\": \"Aquos Crystal\"\n },\n {\n \"regex\": \"402SH(?:[);/ ]|$)\",\n \"model\": \"Aquos Crystal X\"\n },\n {\n \"regex\": \"403SH(?:[);/ ]|$)\",\n \"model\": \"Aquos Crystal 2\"\n },\n {\n \"regex\": \"509SH(?:[);/ ]|$)\",\n \"model\": \"Aquos 3\"\n },\n {\n \"regex\": \"NP601SH(?:[);/ ]|$)\",\n \"model\": \"Aquos 2\"\n },\n {\n \"regex\": \"(?:SHV40|SHV3[24])(?:_u)?(?:[);/ ]|$)\",\n \"model\": \"Aquos S\"\n },\n {\n \"regex\": \"702SH(?:[);/ ]|$)\",\n \"model\": \"Aquos S Basic\"\n },\n {\n \"regex\": \"SHV3[183](?:[);/ ]|$)\",\n \"model\": \"Aquos S Mini\"\n },\n {\n \"regex\": \"(?:FS8010|SH-M08|SHV43(?:-u)?|SH-01[KL])(?:[);/ ]|$)\",\n \"model\": \"Aquos S2\"\n },\n {\n \"regex\": \"FS8016(?:[);/ ]|$)\",\n \"model\": \"Aquos S2 Plus\"\n },\n {\n \"regex\": \"(?:SHV46|SH-R?M11|901SH)(?:[);/ ]|$)\",\n \"model\": \"Aquos S3 Plus\"\n },\n {\n \"regex\": \"(?:SHV44|808SH|SH-04L|SH-03G)(?:[);/ ]|$)\",\n \"model\": \"Aquos R3\"\n },\n {\n \"regex\": \"(?:FS8032|FS8015|SH-02M|SHV45(?:-U)?)(?:[);/ ]|$)\",\n \"model\": \"Aquos S3\"\n },\n {\n \"regex\": \"FS8018(?:[);/ ]|$)\",\n \"model\": \"Aquos S3 Mini\"\n },\n {\n \"regex\": \"(?:SHV48|907SH)(?:[);/ ]|$)\",\n \"model\": \"Aquos S3 Basic\"\n },\n {\n \"regex\": \"SH-RM12(?:[);/ ]|$)\",\n \"model\": \"Aquos S3 Lite\"\n },\n {\n \"regex\": \"SH-RM15(?:[);/ ]|$)\",\n \"model\": \"Aquos S4 Lite\"\n },\n {\n \"regex\": \"SH-51A(?:[);/ ]|$)\",\n \"model\": \"Aquos R5G\"\n },\n {\n \"regex\": \"SHV3[57](?:_u)?(?:[);/ ]|$)\",\n \"model\": \"Aquos U\"\n },\n {\n \"regex\": \"TG-L900S(?:[);/ ]|$)\",\n \"model\": \"Luna S\"\n },\n {\n \"regex\": \"SH-A01(?:[);/ ]|$)\",\n \"model\": \"B10\"\n },\n {\n \"regex\": \"(?:FS8002|SHV47)(?:[);/ ]|$)\",\n \"model\": \"Z2\"\n },\n {\n \"regex\": \"FS8009(?:[);/ ]|$)\",\n \"model\": \"Z3\"\n },\n {\n \"regex\": \"FS8028(?:[);/ ]|$)\",\n \"model\": \"R1S\"\n },\n {\n \"regex\": \"SHV36(?:[);/ ]|$)\",\n \"model\": \"Basio 2\"\n },\n {\n \"regex\": \"SW001SH(?:[);/ ]|$)\",\n \"model\": \"Star Wars\"\n },\n {\n \"regex\": \"SH-RM02\",\n \"model\": \"Aquos SH-RM02\"\n },\n {\n \"regex\": \"401SH\",\n \"model\": \"Aquos 401SH\"\n },\n {\n \"regex\": \"DM-01J\",\n \"model\": \"Disney Mobile DM-01J\"\n },\n {\n \"regex\": \"A001SH\",\n \"model\": \"Simple Sumaho 5\"\n },\n {\n \"regex\": \"NP80[56]SH\",\n \"model\": \"Aquos Keitai 3\"\n },\n {\n \"regex\": \"NP807SH\",\n \"model\": \"Aquos Keitai 10\"\n },\n {\n \"regex\": \"NP501SH\",\n \"model\": \"Aquos Keitai\"\n },\n {\n \"regex\": \"SH-08E(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Sharp Aquos Pad\"\n },\n {\n \"regex\": \"d-41A(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"dtab d-41A\"\n },\n {\n \"regex\": \"(LC-(?:[0-9]{2})[a-z0-9]+)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SHARP-AQUOS|AQUOSBrowser\",\n \"device\": \"tv\",\n \"model\": \"Aquos Net Plus\"\n },\n {\n \"regex\": \"SHARP[ \\\\-]([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:SHARP|SBM)([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(SH-?[0-9]+[a-z]?)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Simply\": {\n \"regex\": \"(NP602SI)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Softbank\": {\n \"regex\": \"Softbank|J-PHONE\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Softbank/[12]\\\\.0/([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([a-z0-9]+);Softbank;\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"J-PHONE/[0-9]\\\\.[0-9]/([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sonim\": {\n \"regex\": \"Sonim[ -]|XP(?:[67]7|88)00(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Sonim-XP3400\",\n \"model\": \"XP3400\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"XP6700(?:[);/ ]|$)\",\n \"model\": \"XP6700\"\n },\n {\n \"regex\": \"XP7700(?:[);/ ]|$)\",\n \"model\": \"XP7700\"\n },\n {\n \"regex\": \"XP8800(?:[);/ ]|$)\",\n \"model\": \"XP8\"\n }\n ]\n },\n \"Star\": {\n \"regex\": \"N(9[5678]00|8800|9000|9977)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"N9000\",\n \"model\": \"Note 3\"\n },\n {\n \"regex\": \"N(9[5678]00|8800|9977)(?:[);/ ]|$)\",\n \"model\": \"N$1\"\n }\n ]\n },\n \"Starmobile\": {\n \"regex\": \"(?:Starmobile (?:Play (?:Neo|Spark|GO|Click))|UP[_ ](?:Sense|Rave|Groove|Prime|Selfie|Xtreme|XL))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Starmobile PLAY GO(?:[);/ ]|$)\",\n \"model\": \"Play Go\"\n },\n {\n \"regex\": \"Starmobile Play (Neo|Spark|Click)(?:[);/ ]|$)\",\n \"model\": \"Play $1\"\n },\n {\n \"regex\": \"UP[_ ](Sense|Rave|Groove|Prime|Selfie|Xtreme|XL)(?:[);/ ]|$)\",\n \"model\": \"UP $1\"\n }\n ]\n },\n \"Amazon\": {\n \"regex\": \"KF(?:OT|ONWI|TT|JWI|JWA|[DFS]OWI|A[PRSU]WI|T[BH]WI|SAW[IA]|GIWI|KAWI|MAWI|MEWI|MUWI|SUWI)(?:[);/ ]|$)|Kindle|Silk/\\\\d+\\\\.\\\\d+|AlexaMediaPlayer|Amazon (?:Tate|Jem)|AFT[ABMNRST]|SD4930UR|AEO(BC|KN)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"AFTA\",\n \"model\": \"Fire TV Cube (Gen 1)\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"AFTR\",\n \"model\": \"Fire TV Cube (Gen 2)\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"AFTN\",\n \"model\": \"Fire TV (Gen 3)\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"AFTB\",\n \"model\": \"Fire TV\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"AFT[MST]\",\n \"model\": \"Fire TV stick\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"KFFOWI(?:[);/ ]|$)\",\n \"model\": \"Fire 7\\\"\"\n },\n {\n \"regex\": \"KFMUWI(?:[);/ ]|$)\",\n \"model\": \"Fire 7\\\" (2019)\"\n },\n {\n \"regex\": \"KFTT(?:[);/ ]|$)\",\n \"model\": \"Kindle Fire HD\"\n },\n {\n \"regex\": \"KFJWI(?:[);/ ]|$)|Amazon Jem\",\n \"model\": \"Kindle Fire HD 8.9\\\" WiFi\"\n },\n {\n \"regex\": \"KFJWA(?:[);/ ]|$)\",\n \"model\": \"Kindle Fire HD 8.9\\\" 4G\"\n },\n {\n \"regex\": \"KFSOWI(?:[);/ ]|$)|Amazon Tate\",\n \"model\": \"Kindle Fire HD 7\\\" WiFi\"\n },\n {\n \"regex\": \"KFTHWI(?:[);/ ]|$)\",\n \"model\": \"Kindle Fire HDX 7\\\" WiFi\"\n },\n {\n \"regex\": \"KFTHWA(?:[);/ ]|$)\",\n \"model\": \"Kindle Fire HDX 7\\\" 4G\"\n },\n {\n \"regex\": \"KFAPWI(?:[);/ ]|$)\",\n \"model\": \"Kindle Fire HDX 8.9\\\" WiFi\"\n },\n {\n \"regex\": \"KFAPWA(?:[);/ ]|$)\",\n \"model\": \"Kindle Fire HDX 8.9\\\" 4G\"\n },\n {\n \"regex\": \"KFARWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 6\"\n },\n {\n \"regex\": \"KFASWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 7\"\n },\n {\n \"regex\": \"KFAUWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 7 (2017)\"\n },\n {\n \"regex\": \"KFMEWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 8 (2015)\"\n },\n {\n \"regex\": \"KFGIWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 8 (2016)\"\n },\n {\n \"regex\": \"KFDOWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 8 (2017)\"\n },\n {\n \"regex\": \"KFKAWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 8 (2018)\"\n },\n {\n \"regex\": \"KFONWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 8 (2020)\"\n },\n {\n \"regex\": \"KFSAWI(?:[);/ ]|$)\",\n \"model\": \"Fire HDX 8.9\"\n },\n {\n \"regex\": \"KFSAWA(?:[);/ ]|$)\",\n \"model\": \"Fire HDX 8.9 4G\"\n },\n {\n \"regex\": \"KFTBWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 10\"\n },\n {\n \"regex\": \"KFSUWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 10 (2017)\"\n },\n {\n \"regex\": \"KFMAWI(?:[);/ ]|$)\",\n \"model\": \"Fire HD 10 (2019)\"\n },\n {\n \"regex\": \"SD4930UR\",\n \"model\": \"Fire Phone\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"KFOT|Kindle Fire|Silk/\\\\d+\\\\.\\\\d+\",\n \"model\": \"Kindle Fire\"\n },\n {\n \"regex\": \"Kindle\",\n \"model\": \"Kindle\"\n },\n {\n \"regex\": \"AEO(BC|KN)(?:[);/ ]|$)\",\n \"model\": \"Echo\",\n \"device\": \"smart speaker\"\n },\n {\n \"regex\": \"AlexaMediaPlayer\",\n \"model\": \"Alexa\",\n \"device\": \"smart speaker\"\n }\n ]\n },\n \"Symphony\": {\n \"regex\": \"SYMPHONY[ \\\\_]([a-z0-9]+)|(?:roar[ _](?:V20|V78|E80|V150))|roarV95|ZVIII(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ZVIII\",\n \"model\": \"ZVIII\"\n },\n {\n \"regex\": \"roar[ _]?(V20|E80|V78|V95|V150)(?:[);/ ]|$)\",\n \"model\": \"Roar $1\"\n },\n {\n \"regex\": \"SYMPHONY[ \\\\_]([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Helio\": {\n \"regex\": \"Helio (S60|S5)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Syrox\": {\n \"regex\": \"(SYX-(?:T70[04]|T10[12]))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Qtek\": {\n \"regex\": \"Qtek[ _]?([a-z0-9]+)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Q-Touch\": {\n \"regex\": \"( Q09|QS701|Q05A)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"G-Touch\": {\n \"regex\": \"GTouch[_ ]|(?:Stella (?:XS?|Omega))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Stella (XS?|Omega)\",\n \"model\": \"Stella $1\"\n },\n {\n \"regex\": \"GTouch[_ ]STELLA\",\n \"model\": \"Stella\"\n }\n ]\n },\n \"T-Mobile\": {\n \"regex\": \"T-Mobile[ _][a-z0-9 ]+|(?:REVVLRY|REVVL 2(?: PLUS)?|5062[ZW]|5007[ZW])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"5062[ZW]\",\n \"model\": \"REVVL 4 Plus\"\n },\n {\n \"regex\": \"5007[ZW]\",\n \"model\": \"REVVL 4\"\n },\n {\n \"regex\": \"REVVL 2 PLUS\",\n \"model\": \"REVVL 2 Plus\"\n },\n {\n \"regex\": \"REVVLRY\",\n \"model\": \"REVVL Plus\"\n },\n {\n \"regex\": \"REVVL 2(?:[);/ ]|$)\",\n \"model\": \"REVVL 2\"\n },\n {\n \"regex\": \"T-Mobile[ _]([a-z0-9_ ]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"T-Mobile[ _]([a-z0-9_ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"TB Touch\": {\n \"regex\": \"Ignis [89]\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Ignis ([89])\",\n \"model\": \"Ignis $1\"\n }\n ]\n },\n \"Teclast\": {\n \"regex\": \"Teclast|TLA002|TLA016|X98 Air III|M20_4G|X98 Air II\\\\(HG5N\\\\)|Tbook|X80 Power\\\\(B2N4\\\\)|(?:T30|P80X|P20HD|P10_HD|M40)_(?:ROW|EEA)|T10\\\\(E3C6\\\\)|P10S\\\\(N4H5\\\\)|98\\\\(M1E[45789]\\\\)|98\\\\(M3E3\\\\)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Tbook[_ -]([^;/]+) Build\",\n \"model\": \"Tbook $1\"\n },\n {\n \"regex\": \"T10\\\\(E3C6\\\\)\",\n \"model\": \"T10\"\n },\n {\n \"regex\": \"T30_(ROW|EEA)\",\n \"model\": \"T30 $1\"\n },\n {\n \"regex\": \"P80X_(ROW|EEA)\",\n \"model\": \"P80X $1\"\n },\n {\n \"regex\": \"P10S\\\\(N4H5\\\\)\",\n \"model\": \"P10S\"\n },\n {\n \"regex\": \"P20HD_(?:ROW|EEA)\",\n \"model\": \"P20HD\"\n },\n {\n \"regex\": \"M40_(?:ROW|EEA)\",\n \"model\": \"M40\"\n },\n {\n \"regex\": \"P10_HD_(?:ROW|EEA)\",\n \"model\": \"P10HD\"\n },\n {\n \"regex\": \"M20_4G\",\n \"model\": \"M20 4G\"\n },\n {\n \"regex\": \"TLA002\",\n \"model\": \"M30 4G\"\n },\n {\n \"regex\": \"TLA016\",\n \"model\": \"M16\"\n },\n {\n \"regex\": \"98\\\\(M1E[45789]\\\\)|98\\\\(M3E3\\\\)\",\n \"model\": \"TPad 98 10.1\\\" 4G\"\n },\n {\n \"regex\": \"X80 Power\\\\(B2N4\\\\)(?:[);/ ]|$)\",\n \"model\": \"X98 Power\"\n },\n {\n \"regex\": \"X98 Air III(?:[);/ ]|$)\",\n \"model\": \"X98 Air III\"\n },\n {\n \"regex\": \"X98 Air II\\\\(HG5N\\\\)(?:[);/ ]|$)\",\n \"model\": \"X98 Air II\"\n },\n {\n \"regex\": \"Teclast[_ -]([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Tecno Mobile\": {\n \"regex\": \"Tecno|Phantom6|Phantom6-Plus|DP7C Pro-SGA1\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Phantom6-Plus\",\n \"model\": \"Phantom 6 Plus\"\n },\n {\n \"regex\": \"Phantom6\",\n \"model\": \"Phantom 6\"\n },\n {\n \"regex\": \"TECNO-W3\",\n \"model\": \"W3\"\n },\n {\n \"regex\": \"TECNO[ _]F4 Pro(?:[);/ ]|$)\",\n \"model\": \"F4 Pro\"\n },\n {\n \"regex\": \"TECNO[ _]KE5j(?:[);/ ]|$)\",\n \"model\": \"Spark 6 Go\"\n },\n {\n \"regex\": \"TECNO[ _]ID6(?:[);/ ]|$)\",\n \"model\": \"Camon iClick 2\"\n },\n {\n \"regex\": \"Tecno[ _]7C(?:[);/ ]|$)\",\n \"model\": \"DroidPad 7C\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"DP7C Pro-SGA1(?:[);/ ]|$)\",\n \"model\": \"DroidPad 7C Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TECNO[ _]DP10A Pro(?:[);/ ]|$)\",\n \"model\": \"DroidPad 10A Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TECNO[ _]P904(?:[);/ ]|$)\",\n \"model\": \"DroidPad 10D 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Tecno[ _]CB7[j]?\",\n \"model\": \"Camon i4\"\n },\n {\n \"regex\": \"Tecno[ _]CF7(?:[);/ ]|$)\",\n \"model\": \"Camon 11\"\n },\n {\n \"regex\": \"Tecno[ _]CC6(?:[);/ ]|$)\",\n \"model\": \"Camon 12 Air\"\n },\n {\n \"regex\": \"Tecno[ _]CC7(?:[);/ ]|$)\",\n \"model\": \"Camon 12\"\n },\n {\n \"regex\": \"Tecno[ _]KC8(?:[);/ ]|$)\",\n \"model\": \"Spark 4\"\n },\n {\n \"regex\": \"Tecno[ _]BB4k(?:[);/ ]|$)\",\n \"model\": \"Spark 4 Lite\"\n },\n {\n \"regex\": \"Tecno[ _]KD7(?:[);/ ]|$)\",\n \"model\": \"Spark 5 Pro\"\n },\n {\n \"regex\": \"Tecno[ _]DP8D(?:[);/ ]|$)\",\n \"model\": \"DroidPad 8D\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Tecno[ _]LB8\",\n \"model\": \"Pouvoir 3 Plus\"\n },\n {\n \"regex\": \"TECNO S9\",\n \"device\": \"phablet\",\n \"model\": \"S9\"\n },\n {\n \"regex\": \"Tecno ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Tecno[ _]?([a-z0-9_\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"TechPad\": {\n \"regex\": \"Tech ?pad|XTAB[ _-]|Dual C1081HD|S813G\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"S813G\",\n \"model\": \"S813G\"\n },\n {\n \"regex\": \"TechPad10QC\",\n \"model\": \"10QC\"\n },\n {\n \"regex\": \"TechPad_10xx\",\n \"model\": \"10XX\"\n },\n {\n \"regex\": \"TechPad703\",\n \"model\": \"703\"\n },\n {\n \"regex\": \"TechPad[_ ](10Y|9x|i700)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TechPad[_ ]3Gx\",\n \"model\": \"3Gx\"\n },\n {\n \"regex\": \"Dual C1081HD\",\n \"model\": \"XTAB C1081HD\"\n },\n {\n \"regex\": \"XTAB[ _-]([^/;]+) Build\",\n \"model\": \"XTAB $1\"\n },\n {\n \"regex\": \"Tech ?pad[ _-]([^/;)]+)(?: Build|[;)])\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"Tesco\": {\n \"regex\": \"Hudl (?:[^/;]+)(?: Build|[;)])|W032i-C3(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Hudl ([^/;]+)(?: Build|[;)])\",\n \"model\": \"Hudl $1\"\n },\n {\n \"regex\": \"W032i-C3(?:[);/ ]|$)\",\n \"model\": \"Op3n Dott\"\n }\n ]\n },\n \"teXet\": {\n \"regex\": \"Texet|(NaviPad [^/;]*) Build|TM-(?:1046|1058|1057|1067|3000|3200R|3500|4003|4071|450[34]|451[30]|4377|4082R|508[34]|550[358]|5010|5017|507[4-7]|5[23]77|6003|6906|702[13]|7055HD|709[69]|9747BT|9758|9751HD|9767|5513|520[410]|507[13]|558[134]|570[23]|7859|8044|9748[ _]3G|9720|7047HD[ _]3G|9757|9740|4982|4515|4083|500[3567]|5571|3204R|5016|8043|7047HD[ _]3G|8041HD|8066|705[23]|7041|8041HD|8051|8048|974[96]|973[78]W|974[170]|9743W|9750HD|7043XD|7049|7887|7037W|702[46])|TB-(771A|711A)|X-Force[\\\\(-]?TM-5009\\\\)?|X-Plus[\\\\(-]?TM-5577\\\\)?|TM_5011|X-pad (?:AIR 8|iX 7|NAVI 7.[35]|NAVI 10|SKY 8.1|STYLE 8|STYLE 10.1|HIT|LITE 7.[12]|QUAD (?:7.2|10|7)|SHINE 8.1)(?: 3G)?\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TM-9749\",\n \"model\": \"X-pad Plus 7.1 3G\"\n },\n {\n \"regex\": \"TM-9746\",\n \"model\": \"X-pad Plus 7 3G\"\n },\n {\n \"regex\": \"TM-8051\",\n \"model\": \"X-pad Force 8i 3G\"\n },\n {\n \"regex\": \"TM-1058\",\n \"model\": \"X-Force 10 3G\"\n },\n {\n \"regex\": \"TM-8048\",\n \"model\": \"X-pad Force 8 3G\"\n },\n {\n \"regex\": \"(NaviPad [^/;]*) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TM-7055HD\",\n \"model\": \"NaviPad 3G\"\n },\n {\n \"regex\": \"TM-9758\",\n \"model\": \"X-pad Style 10.0\\\"\"\n },\n {\n \"regex\": \"X-pad SHINE 8.1 3G\",\n \"model\": \"X-pad Shine 8.1\\\" 3G\"\n },\n {\n \"regex\": \"X-pad QUAD 10 3G\",\n \"model\": \"X-pad Quad 10.0\\\" 3G\"\n },\n {\n \"regex\": \"X-pad QUAD 7 3G\",\n \"model\": \"X-pad Quad 7.0\\\" 3G\"\n },\n {\n \"regex\": \"X-pad QUAD 7.2 3G\",\n \"model\": \"X-pad Quad 7.2\\\" 3G\"\n },\n {\n \"regex\": \"X-pad STYLE 8 3G\",\n \"model\": \"X-pad Style 8.0\\\" 3G\"\n },\n {\n \"regex\": \"X-pad HIT 3G\",\n \"model\": \"X-pad Hit 3G\"\n },\n {\n \"regex\": \"X-pad LITE (7.[12])\",\n \"model\": \"X-pad Lite $1\\\"\"\n },\n {\n \"regex\": \"TM-9767\",\n \"model\": \"X-pad Style 10.0\\\" 3G\"\n },\n {\n \"regex\": \"X-pad STYLE 10.1 3G\",\n \"model\": \"X-pad Style 10.1\\\" 3G\"\n },\n {\n \"regex\": \"(X-pad (?:AIR 8|iX 7) 3G)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TM-7096|X-pad NAVI 7.3 3G\",\n \"model\": \"X-pad NAVI 7.3\\\" 3G\"\n },\n {\n \"regex\": \"TM-7099\",\n \"model\": \"X-pad NAVI 7.4\\\" 3G\"\n },\n {\n \"regex\": \"X-pad NAVI 7.5 3G\",\n \"model\": \"X-pad NAVI 7.5\\\" 3G\"\n },\n {\n \"regex\": \"X-pad SKY 8.1 3G\",\n \"model\": \"X-pad Sky 8.1\\\" 3G\"\n },\n {\n \"regex\": \"TM-1046|X-pad NAVI 10 3G\",\n \"model\": \"X-pad NAVI 10.0\\\" 3G\"\n },\n {\n \"regex\": \"TM-7859\",\n \"model\": \"X-pad NAVI 8.2\\\" 3G\"\n },\n {\n \"regex\": \"TM-7049\",\n \"model\": \"NaviPad TM-7049 3G\"\n },\n {\n \"regex\": \"TM-7887\",\n \"model\": \"NaviPad TM-7887 3G\"\n },\n {\n \"regex\": \"TM-8066\",\n \"model\": \"X-pad Rapid 8.2\\\" 4G\"\n },\n {\n \"regex\": \"(TM-(?:1057|1067|6906|8043|9748[_ ]3G|9740|9757(?:[_ ]3G)?|7047HD[ _]3G|9747BT|9751HD|702[13]|705[23]|7041|9720|7047HD[_ ]3G|8044|8041HD|973[78]W|9743W|974[710]|9750HD|7043XD|7037W|702[46])|TB-(?:771A|711A|8041HD))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TM-4503\",\n \"device\": \"smartphone\",\n \"model\": \"X-Quad\"\n },\n {\n \"regex\": \"(TM-(?:3000|3200R|4003|4083|4377|4504|451[30]|500[35]|5[23]77|5571|3204R|520[04]|5581|5505|5017|507[13-7]|5081|6003|5513))\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TM-5006\",\n \"device\": \"smartphone\",\n \"model\": \"X-Line\"\n },\n {\n \"regex\": \"TM-5007\",\n \"device\": \"smartphone\",\n \"model\": \"X-Shine\"\n },\n {\n \"regex\": \"TM_5011\",\n \"device\": \"smartphone\",\n \"model\": \"X-Omega\"\n },\n {\n \"regex\": \"TM-508(3|4)\",\n \"device\": \"smartphone\",\n \"model\": \"Pay $1G\"\n },\n {\n \"regex\": \"TM-558(3|4)\",\n \"device\": \"smartphone\",\n \"model\": \"Pay 5.5\\\" $1G\"\n },\n {\n \"regex\": \"TM-5702\",\n \"device\": \"smartphone\",\n \"model\": \"Pay 5.7\\\" 3G\"\n },\n {\n \"regex\": \"TM-5703\",\n \"device\": \"smartphone\",\n \"model\": \"Pay 5.7\\\" Pro\"\n },\n {\n \"regex\": \"TM-5201\",\n \"device\": \"smartphone\",\n \"model\": \"Rock\"\n },\n {\n \"regex\": \"TM-4515\",\n \"device\": \"smartphone\",\n \"model\": \"X-Style\"\n },\n {\n \"regex\": \"TM-(5016|3500)\",\n \"device\": \"smartphone\",\n \"model\": \"X-Maxi 2\"\n },\n {\n \"regex\": \"TM-4071\",\n \"device\": \"smartphone\",\n \"model\": \"X-Smart\"\n },\n {\n \"regex\": \"TM-4982\",\n \"device\": \"smartphone\",\n \"model\": \"iX-Maxi\"\n },\n {\n \"regex\": \"TEXET[_ ]IX-MINI\",\n \"device\": \"smartphone\",\n \"model\": \"iX-Mini\"\n },\n {\n \"regex\": \"TM-5010\",\n \"device\": \"smartphone\",\n \"model\": \"X-Selfie\"\n },\n {\n \"regex\": \"TM-4082R\",\n \"device\": \"smartphone\",\n \"model\": \"X-Driver Quad\"\n },\n {\n \"regex\": \"TM-5503\",\n \"device\": \"smartphone\",\n \"model\": \"X-Mage\"\n },\n {\n \"regex\": \"TM-5508\",\n \"device\": \"smartphone\",\n \"model\": \"X-Cosmo\"\n },\n {\n \"regex\": \"X-Force[\\\\(-]?TM-5009\\\\)?\",\n \"device\": \"smartphone\",\n \"model\": \"X-Force\"\n },\n {\n \"regex\": \"X-Plus[\\\\(-]?TM-5577\\\\)?\",\n \"device\": \"smartphone\",\n \"model\": \"X-Plus\"\n },\n {\n \"regex\": \"teXet[_ ]X-medium[_ ]plus\",\n \"device\": \"smartphone\",\n \"model\": \"X-Medium Plus\"\n }\n ]\n },\n \"Telefunken\": {\n \"regex\": \"TELEFUNKEN|Foxtrot|TEL-1013GIQA|TF-SP(?:500[12]|4002)|(TF-MID(?:[78]02G|70[78]G|80[46]G|9705RG|9707G|7805G|100[57]G|1010G))|(TF-LED(?:65S75T2SU|32S39T2S|32S5[289]T2S|32S70T2S|40S63T2S))\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TEL-1013GIQA\",\n \"model\": \"Giqa 10.1 3G\"\n },\n {\n \"regex\": \"Foxtrot2\",\n \"model\": \"Foxtrot 2\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:TELEFUNKEN)?(TF-SP(?:500[12]|4002)|Outdoor LTE|Foxtrot)\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(TF-MID(?:[78]02G|70[78]G|80[46]G|9705RG|9707G|7805G|100[57]G|1010G))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(TF-LED(?:65S75T2SU|32S39T2S|32S5[289]T2S|32S70T2S|40S63T2S))\",\n \"model\": \"$1\",\n \"device\": \"tv\"\n }\n ]\n },\n \"Telego\": {\n \"regex\": \"TELEGO\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TELEGO-W503\",\n \"model\": \"W503\"\n },\n {\n \"regex\": \"Telego_JOY2\",\n \"model\": \"Joy 2\"\n },\n {\n \"regex\": \"Telego[ _]Mate\",\n \"model\": \"Mate\"\n }\n ]\n },\n \"Telenor\": {\n \"regex\": \"(?<!FBCR/)Telenor|Infinity E5\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Telenor[ _]([^;/]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Infinity E5\",\n \"model\": \"Infinity E5\"\n }\n ]\n },\n \"Telit\": {\n \"regex\": \"Telit\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"Telit_Mobile_Terminals-([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Telit[\\\\-_]?([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ThL\": {\n \"regex\": \"ThL[ _-]|Knight 2\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Knight 2\",\n \"model\": \"Knight 2\"\n },\n {\n \"regex\": \"ThL[ _-]*([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ThL[ _-]*([^ ;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"TIANYU\": {\n \"regex\": \"TIANYU\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"TIANYU ([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TIANYU-KTOUCH/([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Timovi\": {\n \"regex\": \"Tmovi[ _]|(?:Infinit_Lite_2|Vision_PRO|VISION ULTRA|Epix)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Tmovi[ _]Prime\",\n \"model\": \"Prime\"\n },\n {\n \"regex\": \"TMOVI_YEAH_BEAT\",\n \"model\": \"Yeah Beat\"\n },\n {\n \"regex\": \"YeahLIVE\",\n \"model\": \"Yeah LIVE\"\n },\n {\n \"regex\": \"Infinit Lite\",\n \"model\": \"Infinit Lite\"\n },\n {\n \"regex\": \"Infinit_Lite_2\",\n \"model\": \"Infinit Lite 2\"\n },\n {\n \"regex\": \"Vision_PRO\",\n \"model\": \"Vision Pro\"\n },\n {\n \"regex\": \"VISION ULTRA\",\n \"model\": \"Vision Ultra\"\n },\n {\n \"regex\": \"Epix\",\n \"model\": \"Epix\"\n }\n ]\n },\n \"Tooky\": {\n \"regex\": \"TOOKY\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TOOKY (A19|W1|T8[368]|T1982)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TOOKY A9PLUS(?:[);/ ]|$)\",\n \"model\": \"A9 Plus\"\n }\n ]\n },\n \"Tolino\": {\n \"regex\": \"Tolino Tab ([^/;]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"Tolino Tab $1\"\n },\n \"Top House\": {\n \"regex\": \"Coto[_ ]|X1013\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Coto W418\",\n \"model\": \"Coto W418\"\n },\n {\n \"regex\": \"COTO_T117\",\n \"model\": \"Coto T117\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"X1013\",\n \"model\": \"X1013\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"COTO_T40017\",\n \"model\": \"T40017\"\n }\n ]\n },\n \"Toplux\": {\n \"regex\": \"Toplux ([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Touchmate\": {\n \"regex\": \"TOUCHMATE|(TM-(?:MID1050WKD|MID1020A|MID794C|MID795|MID710|MID798|MID792|MID788D|SM500N|SM410|MID1010))\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(TM-(?:MID1020A|MID794C|MID795|MID710|MID798|MID792|MID788D|MID1010))\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TM-MID1050WKD\",\n \"device\": \"tablet\",\n \"model\": \"Mega Matrix 10.1\\\" 3G\"\n },\n {\n \"regex\": \"(TM-(?:SM500N|SM410))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Touchmate ([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"TrekStor\": {\n \"regex\": \"(?:TrekStor|Surftab) ([^/;]+)(?: Build|\\\\))|Surftab[^;\\\\)]*(?:[;\\\\)]|$)|ST10216-2A|ST13416-1|VT10416-[12]|TFMTKAW01232\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"ST10216-2A|VT10416-[12]\",\n \"model\": \"SurfTab 10.1\"\n },\n {\n \"regex\": \"ST13416-1\",\n \"model\": \"SurfTab Theatre 13.4\\\"\"\n },\n {\n \"regex\": \"PrimeTab P10\",\n \"model\": \"PrimeTab P10\"\n },\n {\n \"regex\": \"TrekStor ([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Surftab ([^/;]+) Build\",\n \"model\": \"SurfTab $1\"\n },\n {\n \"regex\": \"Surftab[ _]([^;\\\\)]*)(?:[;\\\\)]|$)\",\n \"model\": \"SurfTab $1\"\n },\n {\n \"regex\": \"TFMTKAW01232\",\n \"model\": \"SurfTab L15\"\n }\n ]\n },\n \"Trevi\": {\n \"regex\": \"Trevi[ _]|TAB[ _]10[ _]3G[ _]V16|TAB[ _](7|8)[ _]3G[ _]V8|TAB9 3G|MINITAB 3GV|Phablet[ _](?:4|4\\\\.5|5|5\\\\,3|6)[ _]?[CSQ]|REVERSE[ _]5\\\\.5[ _]?Q\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TAB[ _]?(7|8)[ _]3G[ _]V8\",\n \"model\": \"TAB $1 3G V8\"\n },\n {\n \"regex\": \"TAB[ _]?9[ _]3G[ _]V8\",\n \"model\": \"TAB 9 3G V8\"\n },\n {\n \"regex\": \"TAB[ _]?9[ _]3G\",\n \"model\": \"TAB 9 3G\"\n },\n {\n \"regex\": \"TAB[ _]10[ _]3G[ _]V16\",\n \"model\": \"TAB 10 3G V16\"\n },\n {\n \"regex\": \"MINITAB 3GV\",\n \"model\": \"MINITAB 3G V\"\n },\n {\n \"regex\": \"(?:Trevi_)?Phablet[ _]4[ _]?C\",\n \"model\": \"Phablet 4 C\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Trevi_)?Phablet[ _]4[ _]?S\",\n \"model\": \"Phablet 4 S\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Trevi_)?Phablet[ _]4.5[ _]?Q\",\n \"model\": \"Phablet 4.5Q\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Trevi_)?PHABLET[ _]5[ _]?S\",\n \"model\": \"Phablet 5 S\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Trevi_)?PHABLET[ _]5,3[ _]?Q\",\n \"model\": \"Phablet 5.3 Q\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Trevi_)?REVERSE[ _]5.5[ _]?Q\",\n \"model\": \"Phablet 5.5 Q REVERSE\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(?:Trevi_)?PHABLET[ _]6[ _]?S\",\n \"model\": \"Phablet 6 S\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Trevi[_]([^;/]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"TVC\": {\n \"regex\": \"(NuclearSX-SP5)\",\n \"device\": \"smartphone\",\n \"model\": \"Nuclear SX-SP5\"\n },\n \"U.S. Cellular\": {\n \"regex\": \"USCC-\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"USCC-E6762\",\n \"model\": \"Kyocera DuraForce\"\n },\n {\n \"regex\": \"(USCC-[a-z0-9_\\\\-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Uhappy\": {\n \"regex\": \"Uhappy|UP?580|UP350|UP[35679]20\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"UP([35679]20)\",\n \"model\": \"UP$1\"\n },\n {\n \"regex\": \"UP350\",\n \"model\": \"UP350\"\n },\n {\n \"regex\": \"UP580\",\n \"model\": \"UP580\"\n },\n {\n \"regex\": \"U580\",\n \"model\": \"U580\"\n },\n {\n \"regex\": \"Uhappy[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Uhappy[ _-]?([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Unimax\": {\n \"regex\": \"U((?:67[013]|680)C|(?:452|504)TL|683CL|693CL)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"U$1\"\n },\n \"Unowhy\": {\n \"regex\": \"QOOQ \",\n \"device\": \"tablet\",\n \"model\": \"QOOQ\"\n },\n \"UTStarcom\": {\n \"regex\": \"utstar[ _-]?([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Ulefone\": {\n \"regex\": \"Ulefone|Gemini Pro|Power_[356]|S10_Pro|(?:Note [89]P|Armor(?:[ _](?:[2367]|2S|X[236]|6[SE]|3WT|3W|X))?|U00[78][ _]Pro|Be[ _]X|Be[ _]Touch(?:[ _][23])?|Be[ _](?:One|Pure)(?:[ _]Lite)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"S10_Pro\",\n \"model\": \"S10 Pro\"\n },\n {\n \"regex\": \"Be[ _]Touch([ _][23])?\",\n \"model\": \"Be Touch$1\"\n },\n {\n \"regex\": \"Be[ _]Pure[ _]Lite\",\n \"model\": \"Be Pure Lite\"\n },\n {\n \"regex\": \"Be[ _]Pure\",\n \"model\": \"Be Pure\"\n },\n {\n \"regex\": \"Be[ _]One[ _]Lite\",\n \"model\": \"Be One Lite\"\n },\n {\n \"regex\": \"Be[ _]One\",\n \"model\": \"Be One\"\n },\n {\n \"regex\": \"Be[ _]X\",\n \"model\": \"Be X\"\n },\n {\n \"regex\": \"U007 Pro\",\n \"model\": \"U007 Pro\"\n },\n {\n \"regex\": \"U008 Pro\",\n \"model\": \"U008 Pro\"\n },\n {\n \"regex\": \"Armor[ _]X([236])(?:[);/ ]|$)\",\n \"model\": \"Armor X$1\"\n },\n {\n \"regex\": \"Armor[ _]6S(?:[);/ ]|$)\",\n \"model\": \"Armor 6S\"\n },\n {\n \"regex\": \"Armor[ _]([679])E(?:[);/ ]|$)\",\n \"model\": \"Armor $1E\"\n },\n {\n \"regex\": \"Armor[ _]X([57]) Pro(?:[);/ ]|$)\",\n \"model\": \"Armor X$1 Pro\"\n },\n {\n \"regex\": \"Armor[ _]X([578])(?:[);/ ]|$)\",\n \"model\": \"Armor X$1\"\n },\n {\n \"regex\": \"Armor[ _]([25])S(?:[);/ ]|$)\",\n \"model\": \"Armor $1S\"\n },\n {\n \"regex\": \"Armor[ _]X(?:[);/ ]|$)\",\n \"model\": \"Armor X\"\n },\n {\n \"regex\": \"Armor[ _]3W(?:[);/ ]|$)\",\n \"model\": \"Armor 3W\"\n },\n {\n \"regex\": \"Armor[ _]3WT(?:[);/ ]|$)\",\n \"model\": \"Armor 3WT\"\n },\n {\n \"regex\": \"Armor[ _]([236789])(?:[);/ ]|$)\",\n \"model\": \"Armor $1\"\n },\n {\n \"regex\": \"Armor(?:[);/ ]|$)\",\n \"model\": \"Armor\"\n },\n {\n \"regex\": \"Gemini Pro(?:[);/ ]|$)\",\n \"model\": \"Gemini Pro\"\n },\n {\n \"regex\": \"Power[_ ]([356])\",\n \"model\": \"Power $1\"\n },\n {\n \"regex\": \"Note 8P(?:[);/ ]|$)\",\n \"model\": \"Note 8P\"\n },\n {\n \"regex\": \"Note 9P(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"Note 9P\"\n },\n {\n \"regex\": \"Ulefone[_ ](X|S1[ _]Pro|S[17])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Ulefone[ _-]?([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Ulefone[ _-]?([^;/)]+)(?:[;/)]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"UMIDIGI\": {\n \"regex\": \"UMI(?:DIGI)?[ _]|(?:A5_Pro|ROME[_ ]X|BISON|hammer_S)(?:[;/) ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"A5_Pro\",\n \"model\": \"A5 Pro\"\n },\n {\n \"regex\": \"UMI TOUCH X\",\n \"model\": \"Touch X\"\n },\n {\n \"regex\": \"UMI TOUCH\",\n \"model\": \"Touch\"\n },\n {\n \"regex\": \"ROME[_ ]X\",\n \"model\": \"Rome X\"\n },\n {\n \"regex\": \"BISON\",\n \"model\": \"Bison\"\n },\n {\n \"regex\": \"hammer_S\",\n \"model\": \"Hammer S\"\n },\n {\n \"regex\": \"UMI_(London|Diamond(?:_X)?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"UMI(?:DIGI)?[ _]([^/;)]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Uniscope\": {\n \"regex\": \"Uniscope\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Uniscope[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Uniscope[ _\\\\-]?([^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Unnecto\": {\n \"regex\": \"Unnecto|(?:U513|U5151|U61[1356]|U7[12]0|U-830|U90[35])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"U513\",\n \"model\": \"Drone XT\"\n },\n {\n \"regex\": \"U5151\",\n \"model\": \"Bolt\"\n },\n {\n \"regex\": \"U611\",\n \"model\": \"Quattro X\"\n },\n {\n \"regex\": \"U613\",\n \"model\": \"Quattro S\"\n },\n {\n \"regex\": \"U615\",\n \"model\": \"Quattro M\"\n },\n {\n \"regex\": \"U616\",\n \"model\": \"U616\"\n },\n {\n \"regex\": \"U710\",\n \"model\": \"Quattro U710\"\n },\n {\n \"regex\": \"U720\",\n \"model\": \"Quattro Z\"\n },\n {\n \"regex\": \"U-830\",\n \"model\": \"Rush\"\n },\n {\n \"regex\": \"U903\",\n \"model\": \"Air\"\n },\n {\n \"regex\": \"U905\",\n \"model\": \"Air 5.5\"\n }\n ]\n },\n \"Unonu\": {\n \"regex\": \"Unonu[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Unonu[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Unonu[ _-]?([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"UTOK\": {\n \"regex\": \"UTOK (45[01]D)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Vastking\": {\n \"regex\": \"(M910A|M783K|M783K-16G|M1072R-3G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"ViewSonic\": {\n \"regex\": \"ViewSonic|VSD[0-9]+(?:[);/ ]|$)|ViewPad|ViewPhone\",\n \"device\": \"smart display\",\n \"models\": [\n {\n \"regex\": \"(?:ViewSonic-)?V500(?:[);/ ]|$)\",\n \"model\": \"V500\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"ViewSonic A8\\\\+(?:[);/ ]|$)\",\n \"model\": \"A8 Plus\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:ViewSonic-)?ViewPhone ?([^;/]+) Build\",\n \"model\": \"ViewPhone $1\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:ViewSonic-)?ViewPad ?([^;/]+) Build\",\n \"model\": \"ViewPad $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(VSD[0-9]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Vitelcom\": {\n \"regex\": \"Vitelcom|portalmmm/[12].0 TSM\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"TSM-([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TSM([a-z0-9\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/[12].0 (TSM[a-z0-9 ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Fengxiang\": {\n \"regex\": \"(vKB011B|vKB004L)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"VK Mobile\": {\n \"regex\": \"VK-VK([79]00)(?:[);/ ]|$)\",\n \"device\": \"feature phone\",\n \"model\": \"VK$1\"\n },\n \"Vernee\": {\n \"regex\": \"Vernee|Mars Pro|Apollo[ _](?:Lite|X)|Thor (?:E|Plus)|X2_euro\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Apollo[ _]Lite\",\n \"model\": \"Apollo Lite\"\n },\n {\n \"regex\": \"Apollo[ _]X\",\n \"model\": \"Apollo X\"\n },\n {\n \"regex\": \"Mars Pro\",\n \"model\": \"Mars Pro\"\n },\n {\n \"regex\": \"Thor E\",\n \"model\": \"Thor E\"\n },\n {\n \"regex\": \"Thor Plus\",\n \"model\": \"Thor Plus\"\n },\n {\n \"regex\": \"Vernee_M5\",\n \"model\": \"M5\"\n },\n {\n \"regex\": \"X2_euro\",\n \"model\": \"X2\"\n },\n {\n \"regex\": \"Vernee[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Vernee[ _-]([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Vertu\": {\n \"regex\": \"Vertu[ ]?([a-z0-9]+)|(?:ASTER P|CONSTELLATION X)(?:[);/ ]|$)\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"ASTER P(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Aster P\"\n },\n {\n \"regex\": \"CONSTELLATION X(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Constellation X\"\n },\n {\n \"regex\": \"Vertu[ ]?([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Venso\": {\n \"regex\": \"(?:CX-508|CX-551|Reiv 500|Creon F5|Isprit U50|Isprit-U50-LTE)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Isprit U50|Isprit-U50-LTE\",\n \"model\": \"Isprit U50\"\n },\n {\n \"regex\": \"(CX-508|CX-551|Reiv 500|Creon F5)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Verizon\": {\n \"regex\": \"QTA(SUN[12]|XIA1|QZ3|QZ3KID|IR7)|QMV7B\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"QTAXIA1|QTAIR7\",\n \"model\": \"Ellipsis 10\"\n },\n {\n \"regex\": \"QTASUN1\",\n \"model\": \"Ellipsis 8 HD\"\n },\n {\n \"regex\": \"QTASUN2\",\n \"model\": \"Ellipsis 8 HD 4G LTE\"\n },\n {\n \"regex\": \"QTAQZ3KID\",\n \"model\": \"Ellipsis Kids LTE\"\n },\n {\n \"regex\": \"QTAQZ3\",\n \"model\": \"Ellipsis 8\"\n },\n {\n \"regex\": \"QMV7B\",\n \"model\": \"Ellipsis 7\"\n }\n ]\n },\n \"Verykool\": {\n \"regex\": \"verykool\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"verykoolS5004\",\n \"model\": \"Lotus JR.\"\n },\n {\n \"regex\": \"verykoolS5005\",\n \"model\": \"Lotus II\"\n },\n {\n \"regex\": \"verykool[ _]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"verykool[ _]?([^/;]+);\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Vestel\": {\n \"regex\": \"Vestel[ _]|Venus[ _](GO|E[2-5]|V[1-9]|Z[1-9]0)|(?<!Winnovo )V_?TAB|VP74|VT97PRO|VSP145M|VSP250[GS]|VSP355[GS]|V3_5580_Dual\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"VT97PRO\",\n \"model\": \"VTab 9.7 Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VP74\",\n \"model\": \"VTab Lite II\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VTAB10\",\n \"model\": \"VTab 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V_TAB_7_ECO_III \",\n \"model\": \"VTab 7 Eco 3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V_TAB_([0-9]{4}[A-Z]?)\",\n \"model\": \"VTab $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V3_5580_Dual\",\n \"model\": \"Venus V3 5580 Dual\"\n },\n {\n \"regex\": \"VSP145M\",\n \"model\": \"Venus 4.5\"\n },\n {\n \"regex\": \"VSP250G\",\n \"model\": \"Venus 5.0V\"\n },\n {\n \"regex\": \"VSP250S\",\n \"model\": \"Venus 5.0X\"\n },\n {\n \"regex\": \"VSP355G\",\n \"model\": \"Venus 5.5V\"\n },\n {\n \"regex\": \"VSP355S\",\n \"model\": \"Venus 5.5X\"\n },\n {\n \"regex\": \"Venus[ _]V([1-9])\",\n \"model\": \"Venus V$1\"\n },\n {\n \"regex\": \"Venus[ _]Z([1-9]0)\",\n \"model\": \"Venus Z$1\"\n },\n {\n \"regex\": \"Venus[ _]GO\",\n \"model\": \"Venus Go\"\n },\n {\n \"regex\": \"Venus E2 Plus Dual\",\n \"model\": \"Venus E2 Plus Dual\"\n },\n {\n \"regex\": \"Venus[ _]E2 Plus\",\n \"model\": \"Venus E2 Plus\"\n },\n {\n \"regex\": \"Venus[ _]E([345])\",\n \"model\": \"Venus E$1\"\n },\n {\n \"regex\": \"Vestel_5000_Dual\",\n \"model\": \"5000 Dual\"\n },\n {\n \"regex\": \"Vestel_5000_2gb\",\n \"model\": \"5000 2GB\"\n },\n {\n \"regex\": \"Vestel[ _](5000|5530)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Videocon\": {\n \"regex\": \"Videocon[_ \\\\-]|(?:VT75C|V406018|V512930|V50(?:2430|3630|5024|5430|4630|5[98]20)|Z45_(?:Dazzle|Amaze)|Z45Q Star|Z50 Nova)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Videocon_V1585\",\n \"device\": \"feature phone\",\n \"model\": \"V1585\"\n },\n {\n \"regex\": \"Videocon[_ \\\\-]([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"VT75C(?:[);/ ]|$)\",\n \"model\": \"VT75C\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"V502430(?:[);/ ]|$)\",\n \"model\": \"Kryton 3\"\n },\n {\n \"regex\": \"V505024(?:[);/ ]|$)\",\n \"model\": \"Kryton 22 Plus\"\n },\n {\n \"regex\": \"V503630(?:[);/ ]|$)\",\n \"model\": \"Delite 11\"\n },\n {\n \"regex\": \"V505920(?:[);/ ]|$)\",\n \"model\": \"Metal Pro 2\"\n },\n {\n \"regex\": \"V505820(?:[);/ ]|$)\",\n \"model\": \"Metal Pro 1\"\n },\n {\n \"regex\": \"V406018(?:[);/ ]|$)\",\n \"model\": \"Starr 100\"\n },\n {\n \"regex\": \"V512930(?:[);/ ]|$)\",\n \"model\": \"Ultra 50\"\n },\n {\n \"regex\": \"(V505430|V504630)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Z45_(Dazzle|Amaze)(?:[);/ ]|$)\",\n \"model\": \"Infinium Z45 $1\"\n },\n {\n \"regex\": \"Z45Q Star(?:[);/ ]|$)\",\n \"model\": \"Infinium Z45Q Star\"\n },\n {\n \"regex\": \"Z50 Nova(?:[);/ ]|$)\",\n \"model\": \"Infinium Z50 Nova\"\n }\n ]\n },\n \"Vodafone\": {\n \"regex\": \"(?<!FBCR/)Vodafone[ _-]|Smart ?Tab ?(?:III? ?)?(?:|4G|7|10)[);/ -]|VodafoneSmartChat|VFD[ _][0-9]+(?:[);/ ]|$)|VFD320|VF6[89]5|VF-(696|1397|795|895N|1497)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"VFD 100\",\n \"model\": \"Smart Mini\"\n },\n {\n \"regex\": \"VF685\",\n \"model\": \"Smart Kicka\"\n },\n {\n \"regex\": \"VF695\",\n \"model\": \"Smart First 6\"\n },\n {\n \"regex\": \"VFD 200\",\n \"model\": \"Smart First 7\"\n },\n {\n \"regex\": \"VFD 300\",\n \"model\": \"Smart Mini 7\"\n },\n {\n \"regex\": \"VFD 50[02]\",\n \"model\": \"Smart Turbo 7\"\n },\n {\n \"regex\": \"VFD 51[013]\",\n \"model\": \"Smart E8\"\n },\n {\n \"regex\": \"VFD 600\",\n \"model\": \"Smart Prime 7\"\n },\n {\n \"regex\": \"VFD320\",\n \"model\": \"Smart C9\"\n },\n {\n \"regex\": \"VFD 820\",\n \"model\": \"Smart X9\"\n },\n {\n \"regex\": \"VFD 610\",\n \"model\": \"Smart N8\"\n },\n {\n \"regex\": \"Smart ultra 6\",\n \"model\": \"Smart Ultra 6\"\n },\n {\n \"regex\": \"VFD 700\",\n \"model\": \"Smart Ultra 7\"\n },\n {\n \"regex\": \"VFD 720\",\n \"model\": \"Smart N9\"\n },\n {\n \"regex\": \"VFD 900\",\n \"model\": \"Smart Platinum 7\"\n },\n {\n \"regex\": \"Vodafone[ _]875(?:[);/ ]|$)\",\n \"model\": \"Smart Mini\"\n },\n {\n \"regex\": \"Vodafone[ _]975N?(?:[);/ ]|$)\",\n \"model\": \"Smart 3\"\n },\n {\n \"regex\": \"Vodafone[ _]785(?:[);/ ]|$)\",\n \"model\": \"Smart 4 Mini\"\n },\n {\n \"regex\": \"Vodafone[ _]890N(?:[);/ ]|$)\",\n \"model\": \"Smart 4 Turbo\"\n },\n {\n \"regex\": \"Vodafone[ _]985N(?:[);/ ]|$)\",\n \"model\": \"Smart 4 Power\"\n },\n {\n \"regex\": \"VodafoneSmartChat\",\n \"model\": \"Smart Chat\"\n },\n {\n \"regex\": \"VF-696\",\n \"model\": \"Smart Grand 6\"\n },\n {\n \"regex\": \"VF-795\",\n \"model\": \"Smart Speed 6\"\n },\n {\n \"regex\": \"VF-895N\",\n \"model\": \"Smart Prime 6\"\n },\n {\n \"regex\": \"VF-1397\",\n \"model\": \"Tab Speed 6\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VF-1497\",\n \"model\": \"Tab Prime 6\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VFD 1100\",\n \"device\": \"tablet\",\n \"model\": \"Tab Mini 7\"\n },\n {\n \"regex\": \"VFD 1300\",\n \"device\": \"tablet\",\n \"model\": \"Smart Tab N8\"\n },\n {\n \"regex\": \"VFD 1400\",\n \"device\": \"tablet\",\n \"model\": \"Tab Prime 7\"\n },\n {\n \"regex\": \"Smart ?Tab ?3G\",\n \"device\": \"tablet\",\n \"model\": \"Smart Tab 3G\"\n },\n {\n \"regex\": \"Smart ?Tab ?4G\",\n \"device\": \"tablet\",\n \"model\": \"Smart Tab 4G\"\n },\n {\n \"regex\": \"Smart ?Tab ?4\",\n \"model\": \"Smart Tab 4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"SmartTab7[);/ -]\",\n \"model\": \"Smart Tab 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"SmartTab10[);/ -]\",\n \"model\": \"Smart Tab 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Smart ?Tab ?II ?7\",\n \"model\": \"Smart Tab II 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Smart ?Tab ?II ?10\",\n \"model\": \"Smart Tab II 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Smart ?Tab ?III ?7\",\n \"model\": \"Smart Tab III 7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Smart ?Tab ?III ?10\",\n \"model\": \"Smart Tab III 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"VFD[ _]([0-9]+)(?:[);/ ]|$)\",\n \"model\": \"VFD $1\"\n },\n {\n \"regex\": \"Vodafone[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Vodafone[ _-]([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Vonino\": {\n \"regex\": \"Vonino|Epic (?:E8|P7)|Gyga[ _](?:X|S|QS|XS)|Jax[ _](?:QS|[SXQN]|Mini)|Magnet[ _]M[19]|Navo_QS|Onyx_(QS|Z)|Orin_QS|Pluri[ _](?:[BCMQ]7|[CQM]8)|Sirius_QS|Volt[ _][XS]|Xavy_(T7|L8)|Xylo[ _][XSPQT]|Zun[ _]X[OS]?|JAX_N\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Zun[ _]XO\",\n \"model\": \"Zun XO\"\n },\n {\n \"regex\": \"Zun[ _]XS\",\n \"model\": \"Zun XS\"\n },\n {\n \"regex\": \"Zun[ _]X\",\n \"model\": \"Zun X\"\n },\n {\n \"regex\": \"Xylo[ _]([PSXQT])\",\n \"model\": \"Xylo $1\"\n },\n {\n \"regex\": \"Volt[ _]S_A7\",\n \"model\": \"Volt S A7\"\n },\n {\n \"regex\": \"Volt[ _]S\",\n \"model\": \"Volt S\"\n },\n {\n \"regex\": \"Volt[ _]X\",\n \"model\": \"Volt X\"\n },\n {\n \"regex\": \"Gyga[ _]QS\",\n \"model\": \"Gyga QS\"\n },\n {\n \"regex\": \"Gyga[ _]XS\",\n \"model\": \"Gyga XS\"\n },\n {\n \"regex\": \"Gyga[ _](S|X)\",\n \"model\": \"Gyga $1\"\n },\n {\n \"regex\": \"Jax[ _]QS\",\n \"model\": \"Jax QS\"\n },\n {\n \"regex\": \"Jax[ _]S_A7\",\n \"model\": \"Jax S A7\"\n },\n {\n \"regex\": \"Jax[ _]([SQXN])\",\n \"model\": \"Jax $1\"\n },\n {\n \"regex\": \"Jax[ _]Mini\",\n \"model\": \"Jax Mini\"\n },\n {\n \"regex\": \"Epic (E8|P7)\",\n \"model\": \"Epic $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Pluri[ _](B|C|M|Q)7\",\n \"model\": \"Pluri $17\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Pluri[ _]([CQM])8\",\n \"model\": \"Pluri $18\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Magnet[ _]M([19])\",\n \"model\": \"Magnet M$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Navo_QS\",\n \"model\": \"Navo QS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Onyx_(QS|Z)\",\n \"model\": \"Onyx $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Orin_QS\",\n \"model\": \"Orin QS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Sirius_QS\",\n \"model\": \"Sirius QS\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Xavy_T7\",\n \"model\": \"Xavy T7\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Xavy_L8\",\n \"model\": \"Xavy L8\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Vorago\": {\n \"regex\": \"VORAGO\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"CELL-500\",\n \"model\": \"CELL-500\"\n }\n ]\n },\n \"Voto\": {\n \"regex\": \"VOTO[ _\\\\-]|VT8[89]8(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"VOTO[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"VOTO[ _\\\\-]?([^);/ ]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(VT8[89]8)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Voxtel\": {\n \"regex\": \"Voxtel_([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Vulcan\": {\n \"regex\": \"(?:VP5004A|HT0704W08|VS5513|VS4011|VR6031)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(VP5004A|VR6031)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"VS5513(?:[);/ ]|$)\",\n \"model\": \"Tempo S13\"\n },\n {\n \"regex\": \"VS4011(?:[);/ ]|$)\",\n \"model\": \"Tempo S11\"\n },\n {\n \"regex\": \"HT0704W08\",\n \"model\": \"Koral 7W4\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Walton\": {\n \"regex\": \"Walton|Walpad|Primo[ _](C[1234]?|D[1-689]|E[1-589]|F8s|S7|EF[23]?|EM|F[1-79]i?|G[1-9]|GF[234]?|GH[23]?|GM|H[2-689M]|H7s|N[F1]?|NX2?|R[1-46]|R[HM]2?|RX[23]?|S[1-6]|V1|X[1-4]|Z|ZX)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Walpad ([^;/]+) Build\",\n \"device\": \"tablet\",\n \"model\": \"Primo Walpad $1\"\n },\n {\n \"regex\": \"Primo S6 infinity\",\n \"model\": \"Primo S6 Infinity\"\n },\n {\n \"regex\": \"Primo H8 Pro(?:[);/ ]|$)\",\n \"model\": \"Primo H8 Pro\"\n },\n {\n \"regex\": \"Primo H8(?:[);/ ]|$)\",\n \"model\": \"Primo H8 Turbo\"\n },\n {\n \"regex\": \"Primo[ _]([^;/)]+)(?: Build|[;)])\",\n \"model\": \"Primo $1\"\n },\n {\n \"regex\": \"Walton[ _]([^;/)]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"WellcoM\": {\n \"regex\": \"WELLCOM[ _\\\\-/]([a-z0-9]+)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Wexler\": {\n \"regex\": \"Wexler|(?:ULTIMA 7 TWIST PLUS|TAB10iQ3G|TAB[ _]10Q)(?:[);/ ]|$)|ZEN[ _](?:4\\\\.[57]|5)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(?:Wexler[ _\\\\-\\\\.])?ZEN[ _]4\\\\.5(?:[);/ ]|$)\",\n \"model\": \"ZEN 4.5\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Wexler[ _\\\\-\\\\.])?ZEN[ _]4\\\\.7(?:[);/ ]|$)\",\n \"model\": \"ZEN 4.7\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Wexler[ _\\\\-\\\\.])?ZEN[ _]5(?:[);/ ]|$)\",\n \"model\": \"ZEN 5\",\n \"device\": \"smartphone\"\n },\n {\n \"regex\": \"(?:Wexler[ _\\\\-\\\\.])?TAB[ _]10Q(?:[);/ ]|$)\",\n \"model\": \"TAB 10Q\"\n },\n {\n \"regex\": \"TAB10iQ3G(?:[);/ ]|$)\",\n \"model\": \"TAB 10iQ 3G\"\n },\n {\n \"regex\": \"Wexler[ _\\\\-\\\\.]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Wexler[ _\\\\-\\\\.]([^);/]+)(?:[);/]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(ULTIMA 7 TWIST PLUS)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Inco\": {\n \"regex\": \"(?:Inco[ _](Aurora II|Sphere|Plain[_ ]2S?|Plain2 S|Flex 2S|S4|Bloom 2)|(Horizon_S|Horizon \\\\+))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Inco[ _])?(Plain[_ ]2S?|Horizon_S|Horizon \\\\+|Aurora II|Flex 2S|S4|Bloom 2)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Plain2 S\",\n \"model\": \"Plain 2S\"\n },\n {\n \"regex\": \"Inco Sphere(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Sphere\"\n }\n ]\n },\n \"Wink\": {\n \"regex\": \"(?<!mismart )Wink[_ ]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Wink[_ ]((?:Glory|World|Share|City)(?:[_ ](?:SE|S))?)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Wink[ _](Primo|Highway)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Wiko\": {\n \"regex\": \"(?:WIKO[_ -])|(?:WIKO-)?CINK_[a-z0-9_]+|(?:WIKO-)?HIGHWAY_[a-z0-9_]+|(?:WIKO-)?(?:Cink([^/;]*)|Highway([^/;]*)|Iggy|Stairway|Rainbow ?(Jam|Lite|Up)?|Darkside|Darkmoon|Darkfull|Darknight|Freddy|FEVER|Jerry[2]?|Sublim|Ozzy|JIMMY|Barry|Birdy|Bloom|Getaway|Goa(?!nna)|Kite|Robby|Lenny[2-9]?|Slide|Sunset[2-9]?|Sunny[2-9]?|Tommy[2-9]?|PULP(?: Fab)?|Wax|HARRY|Ridge(?: Fab)?|U FEEL(?: Prime| Lite)?|U PULSE(?: LITE)?|View2 Go|View XL|View Prime)(?: Plus)?(?: 4G)?(?: Build|$)?|W_(?:C8[06]0|K[346]00|P130|P200|C200SN)|WC300|W-(?:V7[23]0|V8[30]0|P[36]11|K420|K510S?|K130)-(?:TMV|TIM|TVM|EEA|SUN|SWI|OPE|BYT|DU|TH)|WIM Lite|W-K360-TV|W-V600|W-K200|W-U300|U307AS|CINK PEAX 2|HIGHWAY PURE|C210AE|v3913\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:WIKO-)?Cink Peax 2\",\n \"model\": \"Cink Peax 2\"\n },\n {\n \"regex\": \"(?:Wiko-)?Cink([^/;]*) Build\",\n \"model\": \"Cink$1\"\n },\n {\n \"regex\": \"(?:WIKO-)?CINK_([a-z0-9_]+)\",\n \"model\": \"Cink $1\"\n },\n {\n \"regex\": \"(?:WIKO-)?HIGHWAY PURE\",\n \"model\": \"Highway Pure\"\n },\n {\n \"regex\": \"(?:WIKO-)?HIGHWAY STAR\",\n \"model\": \"Highway Star\"\n },\n {\n \"regex\": \"(?:Wiko-)?Highway([^/;]*) Build\",\n \"model\": \"Highway$1\"\n },\n {\n \"regex\": \"(?:WIKO-)?HIGHWAY_([a-z0-9_]+)\",\n \"model\": \"Highway $1\"\n },\n {\n \"regex\": \"(?:WIKO-)?Iggy\",\n \"model\": \"Iggy\"\n },\n {\n \"regex\": \"(?:WIKO-)?FEVER\",\n \"model\": \"Fever\"\n },\n {\n \"regex\": \"(?:WIKO-)?Stairway\",\n \"model\": \"Stairway\"\n },\n {\n \"regex\": \"(?:WIKO-)?Ridge Fab 4G\",\n \"model\": \"Ridge Fab 4G\"\n },\n {\n \"regex\": \"(?:WIKO-)?Ridge 4G\",\n \"model\": \"Ridge 4G\"\n },\n {\n \"regex\": \"(?:WIKO-)?Ridge\",\n \"model\": \"Ridge\"\n },\n {\n \"regex\": \"(?:WIKO-)?Rainbow ([^/;]+) Build\",\n \"model\": \"Rainbow $1\"\n },\n {\n \"regex\": \"(?:WIKO-)?Rainbow\",\n \"model\": \"Rainbow\"\n },\n {\n \"regex\": \"(?:WIKO-)?Darkside\",\n \"model\": \"Darkside\"\n },\n {\n \"regex\": \"(?:WIKO-)?Darkmoon\",\n \"model\": \"Darkmoon\"\n },\n {\n \"regex\": \"(?:WIKO-)?Darkfull\",\n \"model\": \"Darkfull\"\n },\n {\n \"regex\": \"(?:WIKO-)?Darknight\",\n \"model\": \"Darknight\"\n },\n {\n \"regex\": \"(?:WIKO-)?Sublim\",\n \"model\": \"Sublim\"\n },\n {\n \"regex\": \"(?:WIKO-)?Ozzy\",\n \"model\": \"Ozzy\"\n },\n {\n \"regex\": \"(?:WIKO-)?Barry\",\n \"model\": \"Barry\"\n },\n {\n \"regex\": \"(?:WIKO-)?Birdy\",\n \"model\": \"Birdy\"\n },\n {\n \"regex\": \"(?:WIKO-)?Bloom\",\n \"model\": \"Bloom\"\n },\n {\n \"regex\": \"(?:WIKO-)?JIMMY\",\n \"model\": \"Jimmy\"\n },\n {\n \"regex\": \"JERRY MAX\",\n \"model\": \"Jerry Max\"\n },\n {\n \"regex\": \"W_K300\",\n \"model\": \"Jerry 3\"\n },\n {\n \"regex\": \"W-K420-TVM\",\n \"model\": \"Jerry 4\"\n },\n {\n \"regex\": \"(?:WIKO-)?Jerry2\",\n \"model\": \"Jerry 2\"\n },\n {\n \"regex\": \"(?:WIKO-)?Jerry\",\n \"model\": \"Jerry\"\n },\n {\n \"regex\": \"(?:WIKO-)?Getaway\",\n \"model\": \"Getaway\"\n },\n {\n \"regex\": \"(?:WIKO-)?Goa(?!nna)\",\n \"model\": \"Goa\"\n },\n {\n \"regex\": \"(?:WIKO-)?Freddy\",\n \"model\": \"Freddy\"\n },\n {\n \"regex\": \"(?:WIKO-)?Kite\",\n \"model\": \"Kite\"\n },\n {\n \"regex\": \"W_K400\",\n \"model\": \"Lenny 5\"\n },\n {\n \"regex\": \"C210AE(?:[);/ ]|$)\",\n \"model\": \"Life\"\n },\n {\n \"regex\": \"U307AS(?:[);/ ]|$)\",\n \"model\": \"Life 2\"\n },\n {\n \"regex\": \"v3913(?:[);/ ]|$)\",\n \"model\": \"Kenny\"\n },\n {\n \"regex\": \"(?:WIKO-)?Lenny[ -_]?3 Max\",\n \"model\": \"Lenny 3 Max\"\n },\n {\n \"regex\": \"(?:WIKO-)?Lenny[ -_]?4 Plus\",\n \"model\": \"Lenny 4 Plus\"\n },\n {\n \"regex\": \"(?:WIKO-)?Lenny[ -_]?([2-9])\",\n \"model\": \"Lenny $1\"\n },\n {\n \"regex\": \"(?:WIKO-)?Lenny\",\n \"model\": \"Lenny\"\n },\n {\n \"regex\": \"(?:WIKO-)?Slide\",\n \"model\": \"Slide\"\n },\n {\n \"regex\": \"(?:WIKO-)?Sunset2\",\n \"model\": \"Sunset 2\"\n },\n {\n \"regex\": \"(?:WIKO-)?Sunset\",\n \"model\": \"Sunset\"\n },\n {\n \"regex\": \"(?:WIKO-)?Sunny3\",\n \"model\": \"Sunny 3\"\n },\n {\n \"regex\": \"W-K200\",\n \"model\": \"Sunny 3 Plus\"\n },\n {\n \"regex\": \"(?:WIKO-)?Sunny2 Plus\",\n \"model\": \"Sunny 2 Plus\"\n },\n {\n \"regex\": \"(?:WIKO-)?Sunny2\",\n \"model\": \"Sunny 2\"\n },\n {\n \"regex\": \"W-K360-TV\",\n \"model\": \"Sunny 4 Plus\"\n },\n {\n \"regex\": \"W-K130-TMV\",\n \"model\": \"Sunny 4\"\n },\n {\n \"regex\": \"(?:WIKO-)?Sunny\",\n \"model\": \"Sunny\"\n },\n {\n \"regex\": \"(?:W_K600|Tommy3|W_C200SN)\",\n \"model\": \"Tommy 3\"\n },\n {\n \"regex\": \"(?:WIKO-)?Tommy2 Plus\",\n \"model\": \"Tommy 2 Plus\"\n },\n {\n \"regex\": \"(?:WIKO-)?Tommy2\",\n \"model\": \"Tommy 2\"\n },\n {\n \"regex\": \"(?:WIKO-)?Tommy\",\n \"model\": \"Tommy\"\n },\n {\n \"regex\": \"(?:WIKO-)?Wax\",\n \"model\": \"Wax\"\n },\n {\n \"regex\": \"(?:WIKO-)?HARRY\",\n \"model\": \"Harry\"\n },\n {\n \"regex\": \"W-V600\",\n \"model\": \"Harry 2\"\n },\n {\n \"regex\": \"(?:WIKO-)?WIM Lite\",\n \"model\": \"WIM Lite\"\n },\n {\n \"regex\": \"(?:WIKO-)?Pulp Fab 4G\",\n \"model\": \"Pulp Fab 4G\"\n },\n {\n \"regex\": \"(?:WIKO-)?Pulp Fab\",\n \"model\": \"Pulp Fab\"\n },\n {\n \"regex\": \"(?:WIKO-)?Pulp 4G\",\n \"model\": \"Pulp 4G\"\n },\n {\n \"regex\": \"(?:WIKO-)?Pulp\",\n \"model\": \"Pulp\"\n },\n {\n \"regex\": \"(?:WIKO-)?Robby\",\n \"model\": \"Robby\"\n },\n {\n \"regex\": \"(?:WIKO-)?U PULSE LITE\",\n \"model\": \"U Pulse Lite\"\n },\n {\n \"regex\": \"(?:WIKO-)?U PULSE\",\n \"model\": \"U Pulse\"\n },\n {\n \"regex\": \"(?:WIKO-)?U FEEL LITE\",\n \"model\": \"U Feel Lite\"\n },\n {\n \"regex\": \"(?:WIKO-)?U FEEL PRIME\",\n \"model\": \"U Feel Prime\"\n },\n {\n \"regex\": \"(?:WIKO-)?U FEEL\",\n \"model\": \"U Feel\"\n },\n {\n \"regex\": \"(?:WIKO-)?View2 Go\",\n \"model\": \"View 2 Go\"\n },\n {\n \"regex\": \"(?:WIKO-)?View XL\",\n \"model\": \"View XL\"\n },\n {\n \"regex\": \"(?:WIKO-)?View Prime\",\n \"model\": \"View Prime\"\n },\n {\n \"regex\": \"WC300\",\n \"model\": \"View Lite\"\n },\n {\n \"regex\": \"W_C800\",\n \"model\": \"View 2\"\n },\n {\n \"regex\": \"W_C860\",\n \"model\": \"View 2 Pro\"\n },\n {\n \"regex\": \"W_P200\",\n \"model\": \"View Max\"\n },\n {\n \"regex\": \"W_P130\",\n \"model\": \"View Go\"\n },\n {\n \"regex\": \"W-V800-(TVM|TIM|EEA|OPE|DU)\",\n \"model\": \"View 3 Lite\"\n },\n {\n \"regex\": \"W-K130-(?:OPE|EEA)\",\n \"model\": \"Y50\"\n },\n {\n \"regex\": \"W-K420-EEA\",\n \"model\": \"Y50\"\n },\n {\n \"regex\": \"W-K510-(?:TVM|EEA|OPE|SUN|BYT|TH)|W-K510S-SWI\",\n \"model\": \"Y60\"\n },\n {\n \"regex\": \"W-V720-(?:EEA|OPE|SUN)\",\n \"model\": \"Y80\"\n },\n {\n \"regex\": \"W-P311-(?:EEA|OPE|TVM)\",\n \"model\": \"View 3\"\n },\n {\n \"regex\": \"W-P611-(?:EEA|OPE)\",\n \"model\": \"View 3 Pro\"\n },\n {\n \"regex\": \"W-V830-EEA\",\n \"model\": \"View 4\"\n },\n {\n \"regex\": \"W-V730-EEA\",\n \"model\": \"View 4 Lite\"\n },\n {\n \"regex\": \"W-U300(?:[);/ ]|$)\",\n \"model\": \"Ride\"\n },\n {\n \"regex\": \"Wiko ([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Wiko ([^/; ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Wieppo\": {\n \"regex\": \"Wieppo (S6 Lite|S[658]|E1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Weimei\": {\n \"regex\": \"weplus_3\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"weplus_3\",\n \"model\": \"WePlus 3\"\n }\n ]\n },\n \"Wileyfox\": {\n \"regex\": \"(?:Wileyfox [^/]+)|Swift 2(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Wileyfox Spark \\\\+\",\n \"model\": \"Spark +\"\n },\n {\n \"regex\": \"Wileyfox Spark X\",\n \"model\": \"Spark X\"\n },\n {\n \"regex\": \"Wileyfox (Spark|Swift)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Wileyfox ([^/)]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Swift 2 (X|Plus)(?:[);/ ]|$)\",\n \"model\": \"Swift 2 $1\"\n },\n {\n \"regex\": \"Swift 2(?:[);/ ]|$)\",\n \"model\": \"Swift 2\"\n }\n ]\n },\n \"Wolder\": {\n \"regex\": \"miSmart|miTab|WIAM \\\\#24|WOLDER\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"WIAM \\\\#24\",\n \"model\": \"Wiam #24\"\n },\n {\n \"regex\": \"WOLDER_WIAM_65\",\n \"model\": \"Wiam #65\"\n },\n {\n \"regex\": \"miSmart[ \\\\-_]?([^/]+) Build\",\n \"model\": \"miSmart $1\"\n },\n {\n \"regex\": \"miTab[ \\\\-_]?([^/)]+)(?: Build|\\\\))\",\n \"device\": \"tablet\",\n \"model\": \"miTab $1\"\n }\n ]\n },\n \"Wolfgang\": {\n \"regex\": \"AT[ _-]AS([0-9A-Z]+)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"AT-AS$1\"\n },\n \"Wonu\": {\n \"regex\": \"Wonu ([a-z0-9]+)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n },\n \"Woo\": {\n \"regex\": \"SP5026i-Scorpio\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SP5026i-Scorpio\",\n \"model\": \"Scorpio\"\n }\n ]\n },\n \"Woxter\": {\n \"regex\": \"Woxter[ _]([^/;)]+)(?: Build|\\\\))|Nimbus 101Q\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Nimbus 101Q\",\n \"model\": \"Nimbus 101Q\"\n },\n {\n \"regex\": \"Woxter[ _]([^/;)]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"X-View\": {\n \"regex\": \"ZEN_U5\\\\+|AMBER_KIDS|Proton_Amber_HD|PROTON_JADE_2_PRO\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ZEN_U5\\\\+\",\n \"model\": \"ZEN U5+\"\n },\n {\n \"regex\": \"AMBER_KIDS\",\n \"device\": \"tablet\",\n \"model\": \"Amber Kids\"\n },\n {\n \"regex\": \"Proton_Amber_HD\",\n \"device\": \"tablet\",\n \"model\": \"Proton Amber HD\"\n },\n {\n \"regex\": \"PROTON_JADE_2_PRO\",\n \"device\": \"tablet\",\n \"model\": \"Proton Jade 2 Pro\"\n }\n ]\n },\n \"POCO\": {\n \"regex\": \"(?:POCO[ _](?:X[23]|F2 PRO|M[32])|M2010J19C[GI]|M2007J20C[ITG]|M2012K11AG|M2006C3MI|M2004J19PI|M2102J20SG)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"POCO X2(?:[);/ ]|$)\",\n \"model\": \"X2\"\n },\n {\n \"regex\": \"(?:M2010J19C[GI]|POCO M3)(?:[);/ ]|$)\",\n \"model\": \"M3\"\n },\n {\n \"regex\": \"M2012K11AG(?:[);/ ]|$)\",\n \"model\": \"F3\"\n },\n {\n \"regex\": \"M2004J19PI(?:[);/ ]|$)\",\n \"model\": \"M2\"\n },\n {\n \"regex\": \"POCO M2 Pro(?:[);/ ]|$)\",\n \"model\": \"M2 Pro\"\n },\n {\n \"regex\": \"(?:M2007J20C[GT]|POCO X3 NFC)(?:[);/ ]|$)\",\n \"model\": \"X3 NFC\"\n },\n {\n \"regex\": \"(?:M2007J20CI|POCO X3)(?:[);/ ]|$)\",\n \"model\": \"X3\"\n },\n {\n \"regex\": \"M2102J20SG(?:[);/ ]|$)\",\n \"model\": \"X3 Pro\"\n },\n {\n \"regex\": \"M2006C3MI(?:[);/ ]|$)\",\n \"model\": \"C3\"\n },\n {\n \"regex\": \"POCO F2 PRO(?:[);/ ]|$)\",\n \"model\": \"F2 Pro\"\n }\n ]\n },\n \"Xiaomi\": {\n \"regex\": \"Xiaomi(?!/(?:Miui|Mint[ ])Browser)|Mi9 Pro 5G|(?:MI [a-z0-9]+|Mi-4c|MI-One[ _]?[a-z0-9]+|MIX(?: 2S?)?)(?:[);/ ]|$)|HM (?:[^/;]+) (?:Build|MIUI)|(?:2014501|2014011|201481[12378]|201302[23]|2013061) Build|Redmi|POCOPHONE|(?:SHARK )?(KLE|MBU)-[AH]0|SKR-[AH]0|SKW-[AH]0|POCO F1|DLT-[AH]0|MIBOX[234]([_ ]PRO)?|MiTV4[CSX]?|MiTV-(MSSP[01]|AXSO0)|AWM-A0|MI CC 9 Meitu Edition|MiBOX1S|MiTV4A|M2006J10C|M2006C3(?:L[IGC]|LVG|MN?G)|M2007J1(?:7[CGI]|SC)|M2002J9[EG]|HM2014819|WT88047|M2004J(?:7[AB]|19)C|M2012K11C|M2011K2[CG]|M2006C3[ML]II|M2003J15SC|M2007J3S[ICYGP]|M2007J22[CG]|M2101K6[GI]|M2101K(?:[79]AG|7AI)|M2010J19S[CGYI]|HM NOTE 1(?:LTE|W)|MI[_ ]PLAY|XIG01|MI_(NOTE_Pro|5X|4i|(?:A2|8)_Lite)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SKR-[AH]0\",\n \"model\": \"Black Shark\"\n },\n {\n \"regex\": \"AWM-A0\",\n \"model\": \"Black Shark Helo\"\n },\n {\n \"regex\": \"SKW-[AH]0\",\n \"model\": \"Black Shark 2\"\n },\n {\n \"regex\": \"DLT-[AH]0\",\n \"model\": \"Black Shark 2 Pro\"\n },\n {\n \"regex\": \"(?:SHARK )?KLE-A0\",\n \"model\": \"Black Shark 3\"\n },\n {\n \"regex\": \"(?:SHARK )?KLE-H0\",\n \"model\": \"Black Shark 3 5G\"\n },\n {\n \"regex\": \"(?:SHARK )?MBU-H0\",\n \"model\": \"Black Shark 3 Pro 5G\"\n },\n {\n \"regex\": \"(?:SHARK )?MBU-A0\",\n \"model\": \"Black Shark 3 Pro\"\n },\n {\n \"regex\": \"Xiaomi_2014501|2014501 Build\",\n \"model\": \"Hongmi 4G\"\n },\n {\n \"regex\": \"Xiaomi_2014011|2014011 Build\",\n \"model\": \"Hongmi 1S\"\n },\n {\n \"regex\": \"Xiaomi_201302[23]|201302[23] Build\",\n \"model\": \"Hongmi\"\n },\n {\n \"regex\": \"Xiaomi[_-]2014818|2014818 Build\",\n \"model\": \"Hongmi 2 3G\"\n },\n {\n \"regex\": \"Xiaomi_2014817|2014817 Build\",\n \"model\": \"Hongmi 2\"\n },\n {\n \"regex\": \"Xiaomi[_-]201481[123]|201481[123] Build\",\n \"model\": \"Hongmi 2 4G\"\n },\n {\n \"regex\": \"MI[_ ]PLAY(?:[);/ ]|$)\",\n \"model\": \"MI Play\"\n },\n {\n \"regex\": \"Mi 9 SE(?:[);/ ]|$)\",\n \"model\": \"MI 9 SE\"\n },\n {\n \"regex\": \"MI CC 9 Meitu Edition(?:[);/ ]|$)\",\n \"model\": \"MI CC 9\"\n },\n {\n \"regex\": \"Xiaomi_M2001J2E_TD-LTE(?:[);/ ]|$)\",\n \"model\": \"MI 10\"\n },\n {\n \"regex\": \"M2011K2[CG](?:[);/ ]|$)\",\n \"model\": \"MI 11\"\n },\n {\n \"regex\": \"M2007J3S[CYP](?:[);/ ]|$)\",\n \"model\": \"MI 10T 5G\"\n },\n {\n \"regex\": \"M2007J3S[GI](?:[);/ ]|$)\",\n \"model\": \"MI 10T Pro 5G\"\n },\n {\n \"regex\": \"M2007J17G(?:[);/ ]|$)\",\n \"model\": \"MI 10T Lite 5G\"\n },\n {\n \"regex\": \"M2007J1SC(?:[);/ ]|$)\",\n \"model\": \"MI 10 Ultra 5G\"\n },\n {\n \"regex\": \"(?:M2002J9[EG]|XIG01)(?:[);/ ]|$)\",\n \"model\": \"MI 10 Lite 5G\"\n },\n {\n \"regex\": \"M2007J17I(?:[);/ ]|$)\",\n \"model\": \"MI 10i\"\n },\n {\n \"regex\": \"M2101K9AG(?:[);/ ]|$)\",\n \"model\": \"MI 11 Lite\"\n },\n {\n \"regex\": \"MI[ _]8[ _]Lite(?:[);/ ]|$)\",\n \"model\": \"MI 8 Lite\"\n },\n {\n \"regex\": \"Mi 9T Pro(?:[);/ ]|$)\",\n \"model\": \"MI 9T Pro\"\n },\n {\n \"regex\": \"Mi9 Pro 5G(?:[);/ ]|$)\",\n \"model\": \"MI 9 Pro 5G\"\n },\n {\n \"regex\": \"MI ([89]) Lite(?:[);/ ]|$)\",\n \"model\": \"MI $1 Lite\"\n },\n {\n \"regex\": \"MI 5s Plus(?:[);/ ]|$)\",\n \"model\": \"MI 5s Plus\"\n },\n {\n \"regex\": \"Xiaomi_2013061|2013061 Build\",\n \"model\": \"MI 3\"\n },\n {\n \"regex\": \"Mi-4c(?:[);/ ]|$)\",\n \"model\": \"MI 4C\"\n },\n {\n \"regex\": \"MI 4W(?:[);/ ]|$)\",\n \"model\": \"MI 4W\"\n },\n {\n \"regex\": \"Mi_4i(?:[);/ ]|$)\",\n \"model\": \"MI 4i\"\n },\n {\n \"regex\": \"MI MAX 3(?:[);/ ]|$)\",\n \"model\": \"MI MAX 3\"\n },\n {\n \"regex\": \"MI MAX 2(?:[);/ ]|$)\",\n \"model\": \"MI MAX 2\"\n },\n {\n \"regex\": \"Mi[ _]A2[ _]Lite(?:[);/ ]|$)\",\n \"model\": \"MI A2 Lite\"\n },\n {\n \"regex\": \"MIX 3(?:[);/ ]|$)\",\n \"model\": \"MI MIX 3\"\n },\n {\n \"regex\": \"MIX 2S(?:[);/ ]|$)\",\n \"model\": \"MI MIX 2S\"\n },\n {\n \"regex\": \"MIX 2(?:[);/ ]|$)\",\n \"model\": \"MI MIX 2\"\n },\n {\n \"regex\": \"MIX(?:[);/ ]|$)\",\n \"model\": \"MI MIX\"\n },\n {\n \"regex\": \"POCOPHONE[ _]F1|POCO F1\",\n \"model\": \"Pocophone F1\"\n },\n {\n \"regex\": \"Redmi 5 Plus\",\n \"model\": \"Redmi 5 Plus\"\n },\n {\n \"regex\": \"WT88047(?:[);/ ]|$)\",\n \"model\": \"Redmi 2\"\n },\n {\n \"regex\": \"HM2014819(?:[);/ ]|$)\",\n \"model\": \"Redmi 2 Pro\"\n },\n {\n \"regex\": \"HM 2A(?:[);/ ]|$)\",\n \"model\": \"Redmi 2A\"\n },\n {\n \"regex\": \"HM 1S[CW]?(?:[);/ ]|$)\",\n \"model\": \"Redmi 1S\"\n },\n {\n \"regex\": \"HM 1(?:[);/ ]|$)\",\n \"model\": \"Redmi 1\"\n },\n {\n \"regex\": \"M2004J7AC(?:[);/ ]|$)\",\n \"model\": \"Redmi 10X\"\n },\n {\n \"regex\": \"(?:M2004J19C|M2006C3MII)(?:[);/ ]|$)\",\n \"model\": \"Redmi 9\"\n },\n {\n \"regex\": \"M2010J19SI(?:[);/ ]|$)\",\n \"model\": \"Redmi 9 Power\"\n },\n {\n \"regex\": \"M2006C3L[GCI](?:[);/ ]|$)\",\n \"model\": \"Redmi 9A\"\n },\n {\n \"regex\": \"M2006C3LII(?:[);/ ]|$)\",\n \"model\": \"Redmi 9i\"\n },\n {\n \"regex\": \"M2006C3MG(?:[);/ ]|$)\",\n \"model\": \"Redmi 9C\"\n },\n {\n \"regex\": \"M2006C3LVG(?:[);/ ]|$)\",\n \"model\": \"Redmi 9AT\"\n },\n {\n \"regex\": \"M2010J19S[GY](?:[);/ ]|$)\",\n \"model\": \"Redmi 9T\"\n },\n {\n \"regex\": \"M2006C3MNG(?:[);/ ]|$)\",\n \"model\": \"Redmi 9C NFC\"\n },\n {\n \"regex\": \"M2004J7BC(?:[);/ ]|$)\",\n \"model\": \"Redmi 10X Pro\"\n },\n {\n \"regex\": \"Redmi K20 Pro(?:[);/ ]|$)\",\n \"model\": \"Redmi K20 Pro\"\n },\n {\n \"regex\": \"Redmi K30 5G(?:[);/ ]|$)\",\n \"model\": \"Redmi K30 5G\"\n },\n {\n \"regex\": \"M2012K11C(?:[);/ ]|$)\",\n \"model\": \"Redmi K40 Pro\"\n },\n {\n \"regex\": \"M2006J10C(?:[);/ ]|$)\",\n \"model\": \"Redmi K30 Ultra\"\n },\n {\n \"regex\": \"Redmi Y1 Lite(?:[);/ ]|$)\",\n \"model\": \"Redmi Y1 Lite\"\n },\n {\n \"regex\": \"MI PAD 4 PLUS(?:[);/ ]|$)\",\n \"model\": \"Mi Pad 4 Plus\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MI PAD 4(?:[);/ ]|$)\",\n \"model\": \"Mi Pad 4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MI PAD 3(?:[);/ ]|$)\",\n \"model\": \"Mi Pad 3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MI PAD 2(?:[);/ ]|$)\",\n \"model\": \"Mi Pad 2\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MI PAD(?:[);/ ]|$)\",\n \"model\": \"Mi Pad\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MIBOX3[ _]Pro(?:[);/ ]|$)\",\n \"model\": \"Mi Box 3 Pro\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"MIBOX([234])(?:[);/ ]|$)\",\n \"model\": \"Mi Box $1\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"MiBOX1S(?:[);/ ]|$)\",\n \"model\": \"Mi Box 1S\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"MiTV-MSSP1(?:[);/ ]|$)\",\n \"model\": \"MiTV 4S\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(?:MiTV-AXSO0|MiTV4(?:A|-ANSM0)|MiTV-MSSP0)(?:[);/ ]|$)\",\n \"model\": \"MiTV 4A\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(MiTV)(4[CSX]|4)(?:[);/ ]|$)\",\n \"model\": \"$1 $2\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"HM NOTE 1W(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"Redmi Note\"\n },\n {\n \"regex\": \"HM NOTE 1TD (?:Build|MIUI)\",\n \"device\": \"phablet\",\n \"model\": \"Hongmi Note 1TD\"\n },\n {\n \"regex\": \"HM NOTE 1(?:LTE|S)(?:W|GLOBAL|TD)? (?:Build|MIUI)|HM NOTE 1LTE\",\n \"device\": \"phablet\",\n \"model\": \"Redmi Note 4G\"\n },\n {\n \"regex\": \"Redmi Note 5A Prime\",\n \"model\": \"Redmi Note 5A Prime\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M2010J19SC(?:[);/ ]|$)\",\n \"model\": \"Redmi Note 9\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M2003J15SC(?:[);/ ]|$)\",\n \"model\": \"Redmi Note 10X\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M2007J22G(?:[);/ ]|$)\",\n \"model\": \"Redmi Note 9T 5G\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M2007J22C(?:[);/ ]|$)\",\n \"model\": \"Redmi Note 9 5G\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M2007J17C(?:[);/ ]|$)\",\n \"model\": \"Redmi Note 9 Pro 5G\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M2101K7A[GI]\",\n \"model\": \"Redmi Note 10\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"M2101K6[GI]\",\n \"model\": \"Redmi Note 10 Pro\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Redmi Note ([5-9]) Pro(?:[);/ ]|$)\",\n \"model\": \"Redmi Note $1 Pro\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Redmi[ _]Note[ _]([^;/) ]+)?\",\n \"model\": \"Redmi Note $1\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Redmi[ _]([^;/) ]+)?\",\n \"model\": \"Redmi $1\"\n },\n {\n \"regex\": \"MI_NOTE_Pro\",\n \"model\": \"MI Note Pro\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"Mi Note 10 Pro\",\n \"model\": \"Mi Note 10 Pro\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"MI[ _]Note[ _]([^;/) ]+)?\",\n \"model\": \"MI Note $1\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"(MI(?:-One)?[ _](?:[^;/]*))Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(MI[ _][a-z0-9]+|MI-One[ _]?[a-z0-9]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HM Note ([^/;]+) (?:Build|MIUI)\",\n \"device\": \"phablet\",\n \"model\": \"Note\"\n },\n {\n \"regex\": \"HM ([^/;]+) (?:Build|MIUI)\",\n \"model\": \"HM $1\"\n },\n {\n \"regex\": \"Xiaomi[ _-]([^/;]+)(?: Build|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Xion\": {\n \"regex\": \"XI-CE(?:655|U[48])\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"XI-CE(655|U[48])\",\n \"model\": \"CE$1\"\n }\n ]\n },\n \"Xolo\": {\n \"regex\": \"Xolo|(?:Q600|Q700s?|Q800|Q1000s|Q1000[ _]Opus|Q1010i|Q2000|Omega[ _]5.[05]|Era5X|Era[ _]2V|Era_4X(?:_2GB)?)(?:[);/ ]|$)|BLACK-1XM\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"BLACK-1XM\",\n \"model\": \"Black 1X\"\n },\n {\n \"regex\": \"Era_?([45])X(?:[);/ ]|$)\",\n \"model\": \"Era $1X\"\n },\n {\n \"regex\": \"Era_4X_2GB(?:[);/ ]|$)\",\n \"model\": \"Era 4X 2GB\"\n },\n {\n \"regex\": \"Era[ _]2V(?:[);/ ]|$)\",\n \"model\": \"Era 2V\"\n },\n {\n \"regex\": \"(Q600 Club|Q600|Q700s?|Q800|Q1000s Plus|Q1000s|Q1000[ _]Opus|Q1010i|Q2000|Omega[ _]5.[05])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Xolo[ _]?([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Xolo[ _]?([a-z0-9_-]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Yarvik\": {\n \"regex\": \"Xenta[ \\\\-]Tab|Luna TAB|TAB09-410|TAB10-410|TAB07-485|TAB0[78]-200|TAB08-201-3G|TAB9-200|TAB09-211|TAB10-2[01]1|TAB13-201\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Luna TAB07-920N\",\n \"model\": \"Luna 7\"\n },\n {\n \"regex\": \"Luna TAB07-10[01]\",\n \"model\": \"Luna 7c\"\n },\n {\n \"regex\": \"Luna TAB274\",\n \"model\": \"Luna 7c\"\n },\n {\n \"regex\": \"Luna TAB474\",\n \"model\": \"Luna 10\"\n },\n {\n \"regex\": \"Luna TAB10-150\",\n \"model\": \"Luna 10c\"\n },\n {\n \"regex\": \"TAB09-410\",\n \"model\": \"Noble 9.7\"\n },\n {\n \"regex\": \"TAB10-410\",\n \"model\": \"Noble 10.1\"\n },\n {\n \"regex\": \"TAB07-485\",\n \"model\": \"Noble Mini\"\n },\n {\n \"regex\": \"Xenta-TAB07-21[01]\",\n \"model\": \"Xenta 7c\"\n },\n {\n \"regex\": \"TAB07-200\",\n \"model\": \"Xenta 7ic\"\n },\n {\n \"regex\": \"TAB08-200\",\n \"model\": \"Xenta 8ic\"\n },\n {\n \"regex\": \"TAB08-201-3G\",\n \"model\": \"Xenta 8c\"\n },\n {\n \"regex\": \"TAB9-200\",\n \"model\": \"Xenta 9.7ic\"\n },\n {\n \"regex\": \"TAB09-211\",\n \"model\": \"Xenta 9.7ic+\"\n },\n {\n \"regex\": \"TAB10-2[01]1\",\n \"model\": \"Xenta 10ic\"\n },\n {\n \"regex\": \"TAB13-201\",\n \"model\": \"Xenta 13c\"\n }\n ]\n },\n \"Yes\": {\n \"regex\": \"M631Y|M685Y4|M651G_MY|YES (MPY(?:48|54))\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"M631Y\",\n \"model\": \"Altitude\"\n },\n {\n \"regex\": \"M651G_MY\",\n \"model\": \"Altitude 2\"\n },\n {\n \"regex\": \"M685Y4\",\n \"model\": \"Altitude 3\"\n },\n {\n \"regex\": \"YES (MPY(?:48|54))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Yezz\": {\n \"regex\": \"Yezz|ANDY[ _]|(?:4E4|A5EI|LIV1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"4E4\",\n \"model\": \"Andy 4E4\"\n },\n {\n \"regex\": \"Yezz-AC4EI\",\n \"model\": \"Andy 4EI\"\n },\n {\n \"regex\": \"YEZZ-A4M\",\n \"model\": \"Andy A4M\"\n },\n {\n \"regex\": \"A5EI\",\n \"model\": \"Andy A5EI\"\n },\n {\n \"regex\": \"LIV1\",\n \"model\": \"LIV1\"\n },\n {\n \"regex\": \"Andy[ _]([A-Z]*[0-9]\\\\.[0-9][A-Z0-9]*)(?:[ _](LTE))?\",\n \"model\": \"Andy $1 $2\"\n },\n {\n \"regex\": \"Andy[ _]([A-Z]*[0-9])([0-9][A-Z0-9]*)(?:[ _](LTE))?\",\n \"model\": \"Andy $1.$2 $3\"\n },\n {\n \"regex\": \"Andy[ _]([A-Z]*[0-9][A-Z0-9]+)(?:[ _](LTE))?\",\n \"model\": \"Andy $1 $2\"\n }\n ]\n },\n \"Yu\": {\n \"regex\": \"(?:YU5[05]10[A]?|YU4711|AO5510|YU5050|YU501[14]|YU5551)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"YU5010[A]?(?:[);/ ]|$)\",\n \"model\": \"Yuphoria\"\n },\n {\n \"regex\": \"YU5011(?:[);/ ]|$)\",\n \"model\": \"Yunique 2\"\n },\n {\n \"regex\": \"YU5050(?:[);/ ]|$)\",\n \"model\": \"Yutopia\"\n },\n {\n \"regex\": \"AO5510(?:[);/ ]|$)\",\n \"model\": \"Yureka\"\n },\n {\n \"regex\": \"YU5551(?:[);/ ]|$)\",\n \"model\": \"Yureka 2\"\n },\n {\n \"regex\": \"YU5510[A]?(?:[);/ ]|$)\",\n \"model\": \"Yureka Plus\"\n },\n {\n \"regex\": \"YU4711(?:[);/ ]|$)\",\n \"model\": \"Yunique\"\n },\n {\n \"regex\": \"YU5014(?:[);/ ]|$)\",\n \"model\": \"Ace\"\n }\n ]\n },\n \"Yuandao\": {\n \"regex\": \"N101[ _]DUAL(?:[ _]CORE)?(?:[ _]?2|\\\\|\\\\|)?(?:[ _]V11)?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"N101\"\n },\n \"Yusun\": {\n \"regex\": \"Yusun|LA2-T\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"LA2-T\",\n \"model\": \"LA2-T\"\n },\n {\n \"regex\": \"Yusun ([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Yusun ([a-z0-9_\\\\-\\\\+]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ytone\": {\n \"regex\": \"YTONE[ _\\\\-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"YTONE[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"YTONE[ _\\\\-]?([^);/ ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Zonda\": {\n \"regex\": \"(ZM(?:CK|EM|TFTV|TN)[a-z0-9]+)|ZA409\",\n \"device\": \"feature phone\",\n \"models\": [\n {\n \"regex\": \"ZA409\",\n \"device\": \"smartphone\",\n \"model\": \"Muzic\"\n },\n {\n \"regex\": \"(ZM(?:CK|EM|TFTV|TN)[a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ZYQ\": {\n \"regex\": \"ZYQ-Q88|(Q(?:2602|262[436]|638|2688|272[89]|3022|3623|TAB Tab4|328 m9|328|668)|J77|Q[._](?:Up|Boss P99|Dee R09|Good M9|Hi|Hot|Me|Mate R99|Next|TOP-X8|You))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Q638\",\n \"model\": \"I7\"\n },\n {\n \"regex\": \"Q2624\",\n \"model\": \"Cheer 3G\"\n },\n {\n \"regex\": \"Q2602\",\n \"model\": \"TV Next\"\n },\n {\n \"regex\": \"Q2728\",\n \"model\": \"Zone 3G\"\n },\n {\n \"regex\": \"Q2729\",\n \"model\": \"Q2729\"\n },\n {\n \"regex\": \"Q2688\",\n \"model\": \"Q2688\"\n },\n {\n \"regex\": \"Q2623\",\n \"model\": \"Win 3G\"\n },\n {\n \"regex\": \"Q2626\",\n \"model\": \"Care 3G\"\n },\n {\n \"regex\": \"Q3623\",\n \"model\": \"Braw 3G\"\n },\n {\n \"regex\": \"Q3022\",\n \"model\": \"Q3022\"\n },\n {\n \"regex\": \"Q328 m9\",\n \"model\": \"Q328 M9\"\n },\n {\n \"regex\": \"Q328\",\n \"model\": \"Speed 3G\"\n },\n {\n \"regex\": \"Q668\",\n \"model\": \"TV I4\"\n },\n {\n \"regex\": \"J77\",\n \"model\": \"Q.Dee\"\n },\n {\n \"regex\": \"Q\\\\.Up C5\",\n \"model\": \"Q.Up C5\"\n },\n {\n \"regex\": \"Q\\\\.Up\",\n \"model\": \"Q.Up\"\n },\n {\n \"regex\": \"Q\\\\.Boss P99\",\n \"model\": \"Q.Boss P99\"\n },\n {\n \"regex\": \"Q[._]Dee R09\",\n \"model\": \"Q.Dee R09\"\n },\n {\n \"regex\": \"Q\\\\.Good M9\",\n \"model\": \"Q.Good M9\"\n },\n {\n \"regex\": \"Q[._]Hi S1\",\n \"model\": \"Q.Hi S1\"\n },\n {\n \"regex\": \"Q[._]Hi\",\n \"model\": \"Q.Hi\"\n },\n {\n \"regex\": \"Q[._]Hot P7 3G\",\n \"model\": \"Q.Hot P7 3G\"\n },\n {\n \"regex\": \"Q[._]Hot\",\n \"model\": \"Q.Hot\"\n },\n {\n \"regex\": \"Q[._]Me Phone7 3G\",\n \"model\": \"Q.Me Phone 7 3G\"\n },\n {\n \"regex\": \"Q[._]Me Plus7\",\n \"model\": \"Q.Me Plus 7\"\n },\n {\n \"regex\": \"Q[._]Me\",\n \"model\": \"Q.Me\"\n },\n {\n \"regex\": \"Q[._]Mate R99\",\n \"model\": \"Q.Mate R99\"\n },\n {\n \"regex\": \"Q[._]Next B7\",\n \"model\": \"Q.Next B7\"\n },\n {\n \"regex\": \"Q[._]Next J2\",\n \"model\": \"Q.Next J2\"\n },\n {\n \"regex\": \"Q[._]TOP-X8\",\n \"model\": \"Q.Top X8\"\n },\n {\n \"regex\": \"Q[._]You\",\n \"model\": \"Q.You\"\n },\n {\n \"regex\": \"QTAB Tab4\",\n \"model\": \"QTab Tab4\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ZYQ-Q88\",\n \"model\": \"Q88\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Toshiba\": {\n \"regex\": \"Toshiba|TSBNetTV/|portalmmm/[12].0 TS|T-01C|T-0[12]D|IS04|IS11T|AT1S0|AT300SE|AT(7-C|10-A|10[PL]E-A|100|200|270|300|330|374|400|470|500|503|570|703|830)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"T-01C\",\n \"model\": \"Regza T-01C\"\n },\n {\n \"regex\": \"T-01D\",\n \"model\": \"Regza T-01D\"\n },\n {\n \"regex\": \"T-02D\",\n \"model\": \"Regza T-02D\"\n },\n {\n \"regex\": \"IS04\",\n \"model\": \"Regza IS04\"\n },\n {\n \"regex\": \"IS11T\",\n \"model\": \"Regza IS11T\"\n },\n {\n \"regex\": \"AT7-C\",\n \"model\": \"Excite\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AT1S0\",\n \"model\": \"Regza AT1S0\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AT300SE\",\n \"model\": \"Regza AT300SE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AT500a\",\n \"model\": \"Regza AT500a\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AT(100|200|270|300|330|374|400|470|500|503|570|703|830)\",\n \"model\": \"Regza AT$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AT10([PL])E-A\",\n \"model\": \"Excite AT10$1-A\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"AT10-A\",\n \"model\": \"Excite AT10-A\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"TSBNetTV/\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n {\n \"regex\": \"Toshiba[ /_\\\\-]?([a-z0-9_ \\\\-]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Toshiba[ /_\\\\-]?([a-z0-9_\\\\-]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"portalmmm/[12].0 (TS[a-z0-9 ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Vivax\": {\n \"regex\": \"VIVAX|(?:Fly5[_ ]Lite|Fun[_ ]S500|Point_(?:X[12]|X501)|PRO3|32LE77SM|40LE77SM|FUN S1|FUN_S20)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Fly5[_ ]Lite(?:[);/ ]|$)\",\n \"model\": \"Fly 5 Lite\"\n },\n {\n \"regex\": \"Point_X([12])(?:[);/ ]|$)\",\n \"model\": \"Point X$1\"\n },\n {\n \"regex\": \"Fun[_ ]S500(?:[);/ ]|$)\",\n \"model\": \"Fun S500\"\n },\n {\n \"regex\": \"FUN[ _]S(1|20)(?:[);/ ]|$)\",\n \"model\": \"Fun S$1\"\n },\n {\n \"regex\": \"VIVAX[ _]Fly3(?:[);/ ]|$)\",\n \"model\": \"Fly 3\"\n },\n {\n \"regex\": \"VIVAX[ _]Fly[ _]V1(?:[);/ ]|$)\",\n \"model\": \"Fly V1\"\n },\n {\n \"regex\": \"(?:VIVAX )?(Point[ _](?:X551|X501))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SMART Point X5010(?:[);/ ]|$)\",\n \"model\": \"Smart Point X5010\"\n },\n {\n \"regex\": \"VIVAX[_ ]PRO3\",\n \"model\": \"Pro 3\"\n },\n {\n \"regex\": \"VIVAX TABLET TPC 802 3G(?:[);/ ]|$)\",\n \"model\": \"TPC-802 3G\"\n },\n {\n \"regex\": \"(32LE77SM|40LE77SM)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"MLS\": {\n \"regex\": \"IQ(?:0705|L550|1010w?|1012N?|1019N|1025|1380|1401|1436|1452a|1453|1470|1502a|1511|1552|1553|1568|1570|1805N|1806|1808|1810B_M|1832|1850|1890|5017|9610|181011N|E[12]00|EL41|G550|GW516|L30|L5[01]|M801|M1001|N700|P50|R300|S300|S1001|W503|W511T|W553N?|W60[38]|W626|M960|D700|9013_4N)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IQ0705(?:[);/ ]|$)\",\n \"model\": \"iQTalk Twist\"\n },\n {\n \"regex\": \"IQL550(?:[);/ ]|$)\",\n \"model\": \"Notch Lite\"\n },\n {\n \"regex\": \"IQ1010W?(?:[);/ ]|$)\",\n \"model\": \"iQTab 10\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQ1012N?(?:[);/ ]|$)\",\n \"model\": \"iQTab Brave 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQ1025(?:[);/ ]|$)\",\n \"model\": \"iQTab Action 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"iQ9013_4N(?:[);/ ]|$)\",\n \"model\": \"Life 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQ1019N(?:[);/ ]|$)\",\n \"model\": \"Alu Plus 4G 10.1\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"iQ1805N(?:[);/ ]|$)\",\n \"model\": \"iQTab Ideal 8.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"iQ181011N(?:[);/ ]|$)\",\n \"model\": \"iQTab Care 8.0\\\"\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQ1380(?:[);/ ]|$)\",\n \"model\": \"Brain 3G\"\n },\n {\n \"regex\": \"IQ1401(?:[);/ ]|$)\",\n \"model\": \"iQTalk Verse 4G\"\n },\n {\n \"regex\": \"IQ1436(?:[);/ ]|$)\",\n \"model\": \"Color mini 4G\"\n },\n {\n \"regex\": \"IQ1452a(?:[);/ ]|$)\",\n \"model\": \"TOP-S 4G\"\n },\n {\n \"regex\": \"IQ1453(?:[);/ ]|$)\",\n \"model\": \"Trend 4G\"\n },\n {\n \"regex\": \"IQ1470(?:[);/ ]|$)\",\n \"model\": \"iQTalk Onyx\"\n },\n {\n \"regex\": \"IQ1502a(?:[);/ ]|$)\",\n \"model\": \"iQTalk Flame\"\n },\n {\n \"regex\": \"IQ1511(?:[);/ ]|$)\",\n \"model\": \"iQTalk Spicy\"\n },\n {\n \"regex\": \"IQ1552(?:[);/ ]|$)\",\n \"model\": \"iQTalk Titan 4G\"\n },\n {\n \"regex\": \"IQ1553(?:[);/ ]|$)\",\n \"model\": \"Color 3 4G\"\n },\n {\n \"regex\": \"IQ1568(?:[);/ ]|$)\",\n \"model\": \"Range 4G\"\n },\n {\n \"regex\": \"IQ1570(?:[);/ ]|$)\",\n \"model\": \"iQTalk Color 5.5 4G\"\n },\n {\n \"regex\": \"IQ1806(?:[);/ ]|$)\",\n \"model\": \"iQTab Rose\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQ1808(?:[);/ ]|$)\",\n \"model\": \"iQTab Master\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQ1810B_M(?:[);/ ]|$)\",\n \"model\": \"iQTab Novel 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQ1832(?:[);/ ]|$)\",\n \"model\": \"Jet 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQ1850(?:[);/ ]|$)\",\n \"model\": \"Diamond 5.2 4G\"\n },\n {\n \"regex\": \"IQ1890(?:[);/ ]|$)\",\n \"model\": \"iQTalk Aura\"\n },\n {\n \"regex\": \"IQ5017(?:[);/ ]|$)\",\n \"model\": \"Slice 4G\"\n },\n {\n \"regex\": \"IQ9610(?:[);/ ]|$)\",\n \"model\": \"Angel 3G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"iQM960(?:[);/ ]|$)\",\n \"model\": \"Angel 3G (2018)\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQG550(?:[);/ ]|$)\",\n \"model\": \"Style 4G\"\n },\n {\n \"regex\": \"IQGW516(?:[);/ ]|$)\",\n \"model\": \"F5\"\n },\n {\n \"regex\": \"IQE100(?:[);/ ]|$)\",\n \"model\": \"Energy 4G\"\n },\n {\n \"regex\": \"iQE200(?:[);/ ]|$)\",\n \"model\": \"MX 4G\"\n },\n {\n \"regex\": \"IQEL41(?:[);/ ]|$)\",\n \"model\": \"Fab 4G\"\n },\n {\n \"regex\": \"IQL30(?:[);/ ]|$)\",\n \"model\": \"Status 4G\"\n },\n {\n \"regex\": \"IQL50(?:[);/ ]|$)\",\n \"model\": \"More 4G\"\n },\n {\n \"regex\": \"IQL51(?:[);/ ]|$)\",\n \"model\": \"Wave 4G\"\n },\n {\n \"regex\": \"IQM801(?:[);/ ]|$)\",\n \"model\": \"Brace 2018 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQM1001(?:[);/ ]|$)\",\n \"model\": \"Level 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQN700(?:[);/ ]|$)\",\n \"model\": \"Inspire 4G\"\n },\n {\n \"regex\": \"IQP50(?:[);/ ]|$)\",\n \"model\": \"Ruby 4G\"\n },\n {\n \"regex\": \"IQS300(?:[);/ ]|$)\",\n \"model\": \"DX 4G\"\n },\n {\n \"regex\": \"IQS1001(?:[);/ ]|$)\",\n \"model\": \"Vista 4G\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"IQR300(?:[);/ ]|$)\",\n \"model\": \"R3 4G\"\n },\n {\n \"regex\": \"IQW608(?:[);/ ]|$)\",\n \"model\": \"Regal\"\n },\n {\n \"regex\": \"iQW603(?:[);/ ]|$)\",\n \"model\": \"Phab 6.0\\\"\",\n \"device\": \"phablet\"\n },\n {\n \"regex\": \"IQW626(?:[);/ ]|$)\",\n \"model\": \"D6 4G\"\n },\n {\n \"regex\": \"IQW511T(?:[);/ ]|$)\",\n \"model\": \"Liberal\"\n },\n {\n \"regex\": \"IQW553N?(?:[);/ ]|$)\",\n \"model\": \"Alu 5.5\\\"\"\n },\n {\n \"regex\": \"IQW503(?:[);/ ]|$)\",\n \"model\": \"Flame 4G (2018)\"\n },\n {\n \"regex\": \"iQD700(?:[);/ ]|$)\",\n \"model\": \"Color Fingerprint 4G\"\n }\n ]\n },\n \"Fly\": {\n \"regex\": \"Fly(?!Flow|touch)|Power Plus 5000|Photo Pro|Slimline|Life (?:Ace|Jet|Sky|Compact 4G|Geo)|FS50[1-9]|FS51[0-8]|FS52[0-9]|FS530|FS55[134]|FS40[1-9]|FS45[1-9]|4FS06|MERIDIAN-|(?:IQ(?!10[134]0)[0-9]{3,}[i]?)[ _]?(?:Quad|Firebird|Quattro|Turbo|Magic)?(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Fly_)?IQ310(?:[);/ ]|$)\",\n \"model\": \"Panorama\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ236(?:[);/ ]|$)\",\n \"model\": \"Victory\"\n },\n {\n \"regex\": \"Slimline(?:[);/ ]|$)\",\n \"model\": \"Slimline\"\n },\n {\n \"regex\": \"Power Plus 5000(?:[);/ ]|$)\",\n \"model\": \"Power Plus 5000\"\n },\n {\n \"regex\": \"Photo Pro(?:[);/ ]|$)\",\n \"model\": \"Photo Pro\"\n },\n {\n \"regex\": \"Life Ace(?:[);/ ]|$)\",\n \"model\": \"Life Ace\"\n },\n {\n \"regex\": \"Life Jet(?:[);/ ]|$)\",\n \"model\": \"Life Jet\"\n },\n {\n \"regex\": \"Life Sky(?:[);/ ]|$)\",\n \"model\": \"Life Sky\"\n },\n {\n \"regex\": \"Life Geo(?:[);/ ]|$)\",\n \"model\": \"Life Geo\"\n },\n {\n \"regex\": \"Life Compact 4G(?:[);/ ]|$)\",\n \"model\": \"Life Compact 4G\"\n },\n {\n \"regex\": \"FS506\",\n \"model\": \"Cirrus 3\"\n },\n {\n \"regex\": \"FS403\",\n \"model\": \"Cumulus 1\"\n },\n {\n \"regex\": \"FS508\",\n \"model\": \"Cirrus 6\"\n },\n {\n \"regex\": \"FS511\",\n \"model\": \"Cirrus 7\"\n },\n {\n \"regex\": \"FS509\",\n \"model\": \"Nimbus 9\"\n },\n {\n \"regex\": \"FS406\",\n \"model\": \"Stratus 5\"\n },\n {\n \"regex\": \"FS404\",\n \"model\": \"Stratus 3\"\n },\n {\n \"regex\": \"FS504\",\n \"model\": \"Cirrus 2\"\n },\n {\n \"regex\": \"FS407\",\n \"model\": \"Stratus 6\"\n },\n {\n \"regex\": \"FS401\",\n \"model\": \"Stratus 1\"\n },\n {\n \"regex\": \"FS402\",\n \"model\": \"Stratus 2\"\n },\n {\n \"regex\": \"FS501\",\n \"model\": \"Nimbus 3\"\n },\n {\n \"regex\": \"FS502\",\n \"model\": \"Cirrus 1\"\n },\n {\n \"regex\": \"FS507\",\n \"model\": \"Cirrus 4\"\n },\n {\n \"regex\": \"FS505\",\n \"model\": \"Nimbus 7\"\n },\n {\n \"regex\": \"FS551\",\n \"model\": \"Nimbus 4\"\n },\n {\n \"regex\": \"FS514\",\n \"model\": \"Cirrus 8\"\n },\n {\n \"regex\": \"FS553\",\n \"model\": \"Cirrus 9\"\n },\n {\n \"regex\": \"FS554\",\n \"model\": \"Power Plus FHD\"\n },\n {\n \"regex\": \"FS517\",\n \"model\": \"Cirrus 11\"\n },\n {\n \"regex\": \"FS516\",\n \"model\": \"Cirrus 12\"\n },\n {\n \"regex\": \"FS518\",\n \"model\": \"Cirrus 13\"\n },\n {\n \"regex\": \"FS520\",\n \"model\": \"Selfie 1\"\n },\n {\n \"regex\": \"FS521\",\n \"model\": \"Power Plus 1\"\n },\n {\n \"regex\": \"FS522\",\n \"model\": \"Cirrus 14\"\n },\n {\n \"regex\": \"FS523\",\n \"model\": \"Cirrus 16\"\n },\n {\n \"regex\": \"FS524\",\n \"model\": \"Knockout\"\n },\n {\n \"regex\": \"FS526\",\n \"model\": \"Power Plus 2\"\n },\n {\n \"regex\": \"FS527\",\n \"model\": \"Nimbus 17\"\n },\n {\n \"regex\": \"FS528\",\n \"model\": \"Memory Plus\"\n },\n {\n \"regex\": \"FS529\",\n \"model\": \"\u0421hamp\"\n },\n {\n \"regex\": \"FS530\",\n \"model\": \"Power Plus XXL\"\n },\n {\n \"regex\": \"FS454\",\n \"model\": \"Nimbus 8\"\n },\n {\n \"regex\": \"FS452\",\n \"model\": \"Nimbus 2\"\n },\n {\n \"regex\": \"FS512\",\n \"model\": \"Nimbus 10\"\n },\n {\n \"regex\": \"FS510\",\n \"model\": \"Nimbus 12\"\n },\n {\n \"regex\": \"FS451\",\n \"model\": \"Nimbus 1\"\n },\n {\n \"regex\": \"FS405\",\n \"model\": \"Stratus 4\"\n },\n {\n \"regex\": \"FS408\",\n \"model\": \"Stratus 8\"\n },\n {\n \"regex\": \"FS409\",\n \"model\": \"Stratus 9\"\n },\n {\n \"regex\": \"FS455\",\n \"model\": \"Nimbus 11\"\n },\n {\n \"regex\": \"FS456\",\n \"model\": \"Nimbus 14\"\n },\n {\n \"regex\": \"FS457\",\n \"model\": \"Nimbus 15\"\n },\n {\n \"regex\": \"FS459\",\n \"model\": \"Nimbus 16\"\n },\n {\n \"regex\": \"FS458\",\n \"model\": \"Stratus 7\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ237(?:[);/ ]|$)\",\n \"model\": \"Dynamic\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ238(?:[);/ ]|$)\",\n \"model\": \"Jazz\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ240(?:[);/ ]|$)\",\n \"model\": \"Whizz\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ255(?:[);/ ]|$)\",\n \"model\": \"Pride\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ270(?: Firebird)?(?:[);/ ]|$)\",\n \"model\": \"Firebird\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ275(?:[);/ ]|$)\",\n \"model\": \"Marathon\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ285(?: Turbo)?(?:[);/ ]|$)\",\n \"model\": \"Turbo\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ430(?:[);/ ]|$)\",\n \"model\": \"Evoke\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ431(?:[);/ ]|$)\",\n \"model\": \"Glory\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ432(?:[);/ ]|$)\",\n \"model\": \"Era Nano 1\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ436(?:[);/ ]|$)\",\n \"model\": \"Era Nano 3\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4490(?:[);/ ]|$)\",\n \"model\": \"Era Nano 4\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ434(?:[);/ ]|$)\",\n \"model\": \"Era Nano 5\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4406(?:[);/ ]|$)\",\n \"model\": \"Era Nano 6\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ436i(?:[);/ ]|$)\",\n \"model\": \"Era Nano 9\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ440(?:[);/ ]|$)\",\n \"model\": \"Energy\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4401(?:[);/ ]|$)\",\n \"model\": \"Era Energy 2\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ441(?:[);/ ]|$)\",\n \"model\": \"Radiance\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ442 Quad(?:[);/ ]|$)\",\n \"model\": \"Miracle 2\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ442(?:[);/ ]|$)\",\n \"model\": \"Miracle\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ443(?:[);/ ]|$)\",\n \"model\": \"Trend\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ444(?: Quattro)?(?:[);/ ]|$)\",\n \"model\": \"Diamond 2\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ445(?:[);/ ]|$)\",\n \"model\": \"Genius\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ446(?: Magic)?(?:[);/ ]|$)\",\n \"model\": \"Magic\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ447(?:[);/ ]|$)\",\n \"model\": \"Era Life 1\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ456(?:[);/ ]|$)\",\n \"model\": \"Era Life 2\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4409 Quad(?:[);/ ]|$)\",\n \"model\": \"Era Life 4\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ448(?:[);/ ]|$)\",\n \"model\": \"Chic\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ449(?:[);/ ]|$)\",\n \"model\": \"Pronto\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ450(?:[);/ ]|$)\",\n \"model\": \"Horizon\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ450[ _]Quattro(?:[);/ ]|$)\",\n \"model\": \"Horizon 2\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ451(?:[);/ ]|$)\",\n \"model\": \"Vista\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ452 Quad(?:[);/ ]|$)\",\n \"model\": \"Ego Vision 1\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ454(?:[);/ ]|$)\",\n \"model\": \"Evo Tech 1\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4403(?:[);/ ]|$)\",\n \"model\": \"Energy 3\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4404(?:[);/ ]|$)\",\n \"model\": \"Spark\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4410 Quad(?:[);/ ]|$)\",\n \"model\": \"Phoenix\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4411(?:[);/ ]|$)\",\n \"model\": \"Energy 2\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4412 Quad(?:[);/ ]|$)\",\n \"model\": \"Coral\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4413[ _]Quad(?:[);/ ]|$)\",\n \"model\": \"Evo Chic 3\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4414 Quad(?:[);/ ]|$)\",\n \"model\": \"Evo Tech 3\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4415 Quad(?:[);/ ]|$)\",\n \"model\": \"Era Style 3\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ4504 Quad(?:[);/ ]|$)\",\n \"model\": \"Evo Energy 5\"\n },\n {\n \"regex\": \"(?:Fly_)?IQ([0-9]+[i]? ?(?:Quad|Firebird|Quattro)?)(?:[);/ ]|$)\",\n \"model\": \"IQ$1\"\n },\n {\n \"regex\": \"Fly[ _\\\\-]?([a-z0-9_]+)/\",\n \"model\": \"$1\",\n \"device\": \"feature phone\"\n },\n {\n \"regex\": \"Flylife[ _\\\\-]?([^/;]+) Build\",\n \"model\": \"Flylife $1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Fly[ _\\\\-]?([a-z0-9]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MERIDIAN-([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"FinePower\": {\n \"regex\": \"FinePower[_ ]?([AB][1-9]|[CD][1-9])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"FinePower[_ ]?([AB][1-9])(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"FinePower[_ ]?([CD][1-9])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Freetel\": {\n \"regex\": \"(?:FTJ17[AC]00|FTJ152[ABCD]|FTU18A00|FT141B|FT142D(?:_LTEXM)?|FT142A?|FTJ161[AB]|FTJ1[56]2E|FTJ162[BD]|FTE161[GE])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"FTJ152C\",\n \"model\": \"Samurai Miyabi\"\n },\n {\n \"regex\": \"FTJ17A00(?:[);/ ]|$)\",\n \"model\": \"Rei 2 Dual\"\n },\n {\n \"regex\": \"FTJ17C00(?:[);/ ]|$)\",\n \"model\": \"Priori 5\"\n },\n {\n \"regex\": \"FTU18A00(?:[);/ ]|$)\",\n \"model\": \"Cricket Wave\"\n },\n {\n \"regex\": \"FTJ161A\",\n \"model\": \"Musashi\"\n },\n {\n \"regex\": \"FTE161E\",\n \"model\": \"Ice 2\"\n },\n {\n \"regex\": \"FTE161G\",\n \"model\": \"Ice 2 Plus\"\n },\n {\n \"regex\": \"FTJ162E\",\n \"model\": \"Raijin\"\n },\n {\n \"regex\": \"FT141B\",\n \"model\": \"Nico\"\n },\n {\n \"regex\": \"FT142D(?:_LTEXM)?(?:[);/ ]|$)\",\n \"model\": \"XM\"\n },\n {\n \"regex\": \"FT142A?\",\n \"model\": \"Priori 2\"\n },\n {\n \"regex\": \"FTJ152A\",\n \"model\": \"Priori 3\"\n },\n {\n \"regex\": \"FTJ162D\",\n \"model\": \"Priori 4\"\n },\n {\n \"regex\": \"FTJ152B\",\n \"model\": \"Priori 3S LTE\"\n },\n {\n \"regex\": \"FTJ152D\",\n \"model\": \"Samurai Kiwami\"\n },\n {\n \"regex\": \"FTJ162B\",\n \"model\": \"Samurai Kiwami 2\"\n },\n {\n \"regex\": \"FTJ161B\",\n \"model\": \"Samurai Rei\"\n },\n {\n \"regex\": \"FTJ152E\",\n \"model\": \"Katana 1\"\n }\n ]\n },\n \"Western Digital\": {\n \"regex\": \"Westerndigital|WDSimpleBrowser\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Streamer2010\",\n \"model\": \"Streamer (2010)\"\n }\n ]\n },\n \"Zeemi\": {\n \"regex\": \"ZEEMI[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ZEEMI[ _-]([^/;]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ZEEMI[ _-]([^/;)]+)(?:[);/]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Zenek\": {\n \"regex\": \"Z5007|Z551[679]|Z6001\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Z5517\",\n \"model\": \"Leopardo\"\n },\n {\n \"regex\": \"Z6001\",\n \"model\": \"Libelula\"\n },\n {\n \"regex\": \"Z5007\",\n \"model\": \"Oso\"\n },\n {\n \"regex\": \"Z5519\",\n \"model\": \"Ping\u00FBino\"\n },\n {\n \"regex\": \"Z5516\",\n \"model\": \"Zebra\"\n }\n ]\n },\n \"Zopo\": {\n \"regex\": \"ZOPO|(?:ZOPO[_ ])?(Flash X3|ZP[0-9]{2,}[^/;]+)(?:\\\\)| Build)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:ZOPO_C2_MOD|ZP998)(?:[);/ ]|$)\",\n \"model\": \"C2 II\"\n },\n {\n \"regex\": \"ZOPO 9xxQuad(?:[);/ ]|$)\",\n \"model\": \"9XX Quad\"\n },\n {\n \"regex\": \"(?:ZOPO_)?ZP980[+](?:[);/ ]|$)\",\n \"model\": \"ZP980+\"\n },\n {\n \"regex\": \"(?:ZOPO_)?ZP980(?:[);/ ]|$)\",\n \"model\": \"Scorpio\"\n },\n {\n \"regex\": \"ZP952(?:[);/ ]|$)\",\n \"model\": \"Speed 7 Plus\"\n },\n {\n \"regex\": \"ZP951(?:[);/ ]|$)\",\n \"model\": \"Speed 7\"\n },\n {\n \"regex\": \"ZP955(?:[);/ ]|$)\",\n \"model\": \"Speed 8\"\n },\n {\n \"regex\": \"ZP950[+h]?(?:[);/ ]|$)\",\n \"model\": \"Leader Max\"\n },\n {\n \"regex\": \"ZP(?:900H?|910)(?:[);/ ]|$)\",\n \"model\": \"Leader\"\n },\n {\n \"regex\": \"ZP(?:800H|810)(?:[);/ ]|$)\",\n \"model\": \"Libero HD\"\n },\n {\n \"regex\": \"ZP500[+]?(?:[);/ ]|$)\",\n \"model\": \"Libero\"\n },\n {\n \"regex\": \"ZP330(?:[);/ ]|$)\",\n \"model\": \"Color C\"\n },\n {\n \"regex\": \"ZP370(?:[);/ ]|$)\",\n \"model\": \"Color S\"\n },\n {\n \"regex\": \"ZP5(63|86)(?:[);/ ]|$)\",\n \"model\": \"Color X\"\n },\n {\n \"regex\": \"ZP567(?:[);/ ]|$)\",\n \"model\": \"Color C5i\"\n },\n {\n \"regex\": \"ZP300[S+]?(?:[);/ ]|$)\",\n \"model\": \"Field\"\n },\n {\n \"regex\": \"ZP200[+]?(?:[);/ ]|$)\",\n \"model\": \"Shining\"\n },\n {\n \"regex\": \"ZP100(?:[);/ ]|$)\",\n \"model\": \"Pilot\"\n },\n {\n \"regex\": \"ZP1790(?:[);/ ]|$)\",\n \"model\": \"Flash X2\"\n },\n {\n \"regex\": \"ZP781(?:[);/ ]|$)\",\n \"model\": \"Flash G5 Plus\"\n },\n {\n \"regex\": \"(?:ZOPO_)?(Flash X3|X1i|ZP[0-9]{2,}[^/;)]+)(?: Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ZTE\": {\n \"regex\": \"ZTE|AxonPhone|([a-z0-9]+)_USA_Cricket|(?:Blade (?:V0820|L110|L[2357]|L7A|S6|V[6789]|V8Q|V8 SE|V9 VITA|X7|A(310|460|465|475|520|530|602)|V580|V Ultra|Q Lux)|N9[15]8St|NX(?:403A|404H|406E|40[X2]|507J|503A|505J|506J|508J|510J|512J|511J|513J|521J|523J_V1|529J|531J|541J|5[48]9J|551J|563J|569[HJ]|573J|575J|59[157]J|60[1689]J|61[12679]J|62[79]J|65[19]J|907J)|N818S|N951[0579]|N91[38]0|N9101|N913[267]|N952[01]|N9560|N9810|N799D|[UV]9180|[UV]9815|Z(?:233V|331|5031O|559DL|6621O|667T|768G|792|81[25]|818L|82[08]|83[12359]|85[125]|851M|992|(557|71[67]|798|836|861|916)BL|986DL|(232|718|828)TL|(?:233|353|558|717|799|837|862|899|917|963)VL|955A|95[678]|965|97[018]|98[1237]|986U|999|936L)|V769M|Apex2|G (LTE|Lux)|Vec|Z959|V865M|Z3001S|902ZT|KIS II Max|Kis 3|K3DX-V5G|Z930L|Optus X|Blade[ _](A510|A[357] 2019-T|A6 MAX|A0622|X9)|Z3153V|Z836F|Nubia Z(?:9|11)|Ctyon-A9|602ZT|MO-01[JK]|Z963U|402ZT|P545|P609|dandelion|901ZT|A001ZT|Z-01K|UZTE V808|ZR01|ZTG01|K8[37]CA)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"602ZT(?:[);/ ]|$)\",\n \"model\": \"Libero 2\"\n },\n {\n \"regex\": \"A001ZT(?:[);/ ]|$)\",\n \"model\": \"Libero 3\"\n },\n {\n \"regex\": \"901ZT(?:[);/ ]|$)\",\n \"model\": \"Libero S10\"\n },\n {\n \"regex\": \"ZR01(?:[);/ ]|$)\",\n \"model\": \"Rakuten Big\"\n },\n {\n \"regex\": \"ZTG01(?:[);/ ]|$)\",\n \"model\": \"A1\"\n },\n {\n \"regex\": \"A7020(?:[);/ ]|$)\",\n \"model\": \"Blade A7s (2020)\"\n },\n {\n \"regex\": \"ZTE 2050(?:RU)?\",\n \"model\": \"Blade 20 Smart\"\n },\n {\n \"regex\": \"902ZT(?:[);/ ]|$)\",\n \"model\": \"Axon 10 Pro 5G\"\n },\n {\n \"regex\": \"N799D(?:[);/ ]|$)\",\n \"model\": \"Blade Eg\"\n },\n {\n \"regex\": \"Z818L(?:[);/ ]|$)\",\n \"model\": \"Allstar\"\n },\n {\n \"regex\": \"Z3001S(?:[);/ ]|$)\",\n \"model\": \"Quest Plus\"\n },\n {\n \"regex\": \"Ctyon-A9(?:[);/ ]|$)\",\n \"model\": \"Ctyon A9\"\n },\n {\n \"regex\": \"K3DX-V5G(?:[);/ ]|$)\",\n \"model\": \"V5G\"\n },\n {\n \"regex\": \"N918St(?:[);/ ]|$)\",\n \"model\": \"V5S\"\n },\n {\n \"regex\": \"N958St(?:[);/ ]|$)\",\n \"model\": \"V5 Max\"\n },\n {\n \"regex\": \"N9101(?:[);/ ]|$)\",\n \"model\": \"Imperial\"\n },\n {\n \"regex\": \"Z963U(?:[);/ ]|$)\",\n \"model\": \"Imperial Max\"\n },\n {\n \"regex\": \"N9120(?:[);/ ]|$)\",\n \"model\": \"Avid\"\n },\n {\n \"regex\": \"N9130(?:[);/ ]|$)\",\n \"model\": \"Speed\"\n },\n {\n \"regex\": \"N9132(?:[);/ ]|$)\",\n \"model\": \"Prestige\"\n },\n {\n \"regex\": \"N9136(?:[);/ ]|$)\",\n \"model\": \"Prestige 2\"\n },\n {\n \"regex\": \"N9137(?:[);/ ]|$)\",\n \"model\": \"Tempo X\"\n },\n {\n \"regex\": \"N9180(?:[);/ ]|$)\",\n \"model\": \"V5\"\n },\n {\n \"regex\": \"N9510(?:[);/ ]|$)\",\n \"model\": \"Warp 4G\"\n },\n {\n \"regex\": \"N9517(?:[);/ ]|$)\",\n \"model\": \"Blade Force\"\n },\n {\n \"regex\": \"Z559DL(?:[);/ ]|$)\",\n \"model\": \"Blade T2\"\n },\n {\n \"regex\": \"402ZT(?:[);/ ]|$)\",\n \"model\": \"Blade Q+\"\n },\n {\n \"regex\": \"Blade Q Lux(?:[);/ ]|$)\",\n \"model\": \"Blade Q Lux\"\n },\n {\n \"regex\": \"N9515(?:[);/ ]|$)\",\n \"model\": \"Warp Sync\"\n },\n {\n \"regex\": \"N9519(?:[);/ ]|$)\",\n \"model\": \"Warp 7\"\n },\n {\n \"regex\": \"N9520(?:[);/ ]|$)\",\n \"model\": \"Boost Max\"\n },\n {\n \"regex\": \"N9521(?:[);/ ]|$)\",\n \"model\": \"Boost Max+\"\n },\n {\n \"regex\": \"N9560(?:[);/ ]|$)\",\n \"model\": \"Max XL\"\n },\n {\n \"regex\": \"N9810(?:[);/ ]|$)\",\n \"model\": \"Vital\"\n },\n {\n \"regex\": \"NX40[X2](?:[);/ ]|$)\",\n \"model\": \"Nubia Z5 Mini\"\n },\n {\n \"regex\": \"NX(403[AE]|406E|404H)(?:[);/ ]|$)\",\n \"model\": \"Nubia Z5S Mini\"\n },\n {\n \"regex\": \"NX503A(?:[);/ ]|$)\",\n \"model\": \"Nubia Z5S\"\n },\n {\n \"regex\": \"NX506J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z7\"\n },\n {\n \"regex\": \"NX507J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z7 Mini\"\n },\n {\n \"regex\": \"NX505J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z7 Max\"\n },\n {\n \"regex\": \"NX508J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z9\"\n },\n {\n \"regex\": \"(NX5[12]1J|Nubia Z9 mini)(?:[);/ ]|$)\",\n \"model\": \"Nubia Z9 Mini\"\n },\n {\n \"regex\": \"(NX510J|Nubia Z9 Max)(?:[);/ ]|$)\",\n \"model\": \"Nubia Z9 Max\"\n },\n {\n \"regex\": \"NX512J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z9 Max Dual\"\n },\n {\n \"regex\": \"NX531J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z11\"\n },\n {\n \"regex\": \"NX523J_V1\",\n \"model\": \"Nubia Z11 Max\"\n },\n {\n \"regex\": \"(?:NX549J|Nubia Z11 mini S)(?:[);/ ]|$)\",\n \"model\": \"Nubia Z11 Mini S\"\n },\n {\n \"regex\": \"(?:NX529J|Nubia Z11 mini)(?:[);/ ]|$)\",\n \"model\": \"Nubia Z11 Mini\"\n },\n {\n \"regex\": \"NX606J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z18\"\n },\n {\n \"regex\": \"NX616J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z18S\"\n },\n {\n \"regex\": \"NX611J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z18 Mini\"\n },\n {\n \"regex\": \"NX551J(?:[);/ ]|$)\",\n \"model\": \"Nubia M2\"\n },\n {\n \"regex\": \"NX563J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z17\"\n },\n {\n \"regex\": \"NX569[HJ](?:[);/ ]|$)\",\n \"model\": \"Nubia Z17 Mini\"\n },\n {\n \"regex\": \"NX589J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z17 Mini S\"\n },\n {\n \"regex\": \"NX591J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z17 Lite\"\n },\n {\n \"regex\": \"NX595J(?:[);/ ]|$)\",\n \"model\": \"Nubia Z17S\"\n },\n {\n \"regex\": \"NX612J(?:[);/ ]|$)\",\n \"model\": \"Nubia V18\"\n },\n {\n \"regex\": \"NX627J\",\n \"model\": \"Nubia Z20\"\n },\n {\n \"regex\": \"NX513J(?:[);/ ]|$)\",\n \"model\": \"Nubia My Prague\"\n },\n {\n \"regex\": \"NX601J(?:[);/ ]|$)\",\n \"model\": \"Nubia X6\"\n },\n {\n \"regex\": \"NX609J(?:[);/ ]|$)\",\n \"model\": \"Nubia Red Magic\"\n },\n {\n \"regex\": \"NX659J(?:[);/ ]|$)\",\n \"model\": \"Nubia Red Magic 5G\"\n },\n {\n \"regex\": \"NX651J(?:[);/ ]|$)\",\n \"model\": \"Nubia Play\"\n },\n {\n \"regex\": \"NX619J(?:[);/ ]|$)\",\n \"model\": \"Nubia Red Magic Mars\"\n },\n {\n \"regex\": \"NX629J(?:[);/ ]|$)\",\n \"model\": \"Nubia Red Magic 3\"\n },\n {\n \"regex\": \"NX573J\",\n \"model\": \"Nubia M2 Lite\"\n },\n {\n \"regex\": \"NX907J(?:[);/ ]|$)\",\n \"model\": \"Nubia M2 Play\"\n },\n {\n \"regex\": \"NX541J\",\n \"model\": \"Nubia N1\"\n },\n {\n \"regex\": \"NX597J\",\n \"model\": \"Nubia N1 Lite\"\n },\n {\n \"regex\": \"NX575J\",\n \"model\": \"Nubia N2\"\n },\n {\n \"regex\": \"NX6(08|17)J(?:[);/ ]|$)\",\n \"model\": \"Nubia N3\"\n },\n {\n \"regex\": \"[UV]9180(?:[);/ ]|$)\",\n \"model\": \"V5 Red Bull\"\n },\n {\n \"regex\": \"[UV]9815(?:[);/ ]|$)\",\n \"model\": \"Grand Memo LTE\"\n },\n {\n \"regex\": \"V779M\",\n \"model\": \"Joey Jump 2\"\n },\n {\n \"regex\": \"V807\",\n \"model\": \"Blade C\"\n },\n {\n \"regex\": \"V809\",\n \"model\": \"Blade C2\"\n },\n {\n \"regex\": \"ZTE_Blade_C2_Plus\",\n \"model\": \"Blade C2 Plus\"\n },\n {\n \"regex\": \"Blade G Plus\",\n \"model\": \"Blade G Plus\"\n },\n {\n \"regex\": \"ZTE_Blade_III\",\n \"model\": \"Blade III\"\n },\n {\n \"regex\": \"(?:ZTE_)?V829\",\n \"model\": \"Blade G Pro\"\n },\n {\n \"regex\": \"V882\",\n \"model\": \"Lord\"\n },\n {\n \"regex\": \"V967S\",\n \"model\": \"Grand X2\"\n },\n {\n \"regex\": \"V970M?|V987\",\n \"model\": \"Grand X\"\n },\n {\n \"regex\": \"Z959(?:[);/ ]|$)\",\n \"model\": \"Grand X3\"\n },\n {\n \"regex\": \"V8000\",\n \"model\": \"Nova 4\"\n },\n {\n \"regex\": \"Z95[67]\",\n \"model\": \"Grand X4\"\n },\n {\n \"regex\": \"Z987\",\n \"model\": \"Grand X Max+\"\n },\n {\n \"regex\": \"(?:ZTE_)?Grand[ _]Era\",\n \"model\": \"Grand Era\"\n },\n {\n \"regex\": \"V788D\",\n \"model\": \"Kis Plus\"\n },\n {\n \"regex\": \"Z331(?:[);/ ]|$)\",\n \"model\": \"Z331\"\n },\n {\n \"regex\": \"N818S(?:[);/ ]|$)\",\n \"model\": \"N818S\"\n },\n {\n \"regex\": \"Z5031O(?:[);/ ]|$)\",\n \"model\": \"Optus X Spirit 2\"\n },\n {\n \"regex\": \"P545(?:[);/ ]|$)\",\n \"model\": \"Optus X Power 2\"\n },\n {\n \"regex\": \"P609(?:[);/ ]|$)\",\n \"model\": \"Optus X Wave\"\n },\n {\n \"regex\": \"Optus X Start(?:[);/ ]|$)\",\n \"model\": \"Optus X Start\"\n },\n {\n \"regex\": \"BA520(?:[);/ ]|$)\",\n \"model\": \"Blade A520\"\n },\n {\n \"regex\": \"Blade (A(0620|310|321|452|460|462|465|475|510|512|52[012]|530|531|602|612|910)|L[12]10|L130|V0730|V0800|V580|V1000)(?:[);/ ]|$)\",\n \"model\": \"Blade $1\"\n },\n {\n \"regex\": \"Blade L2 Plus(?:[);/ ]|$)\",\n \"model\": \"Blade L2 Plus\"\n },\n {\n \"regex\": \"(?:ZTE_)?Blade[ _]L2(?:[);/ ]|$)\",\n \"model\": \"Blade L2\"\n },\n {\n \"regex\": \"Blade L3 Plus(?:[);/ ]|$)\",\n \"model\": \"Blade L3 Plus\"\n },\n {\n \"regex\": \"Blade L3 Apex(?:[);/ ]|$)\",\n \"model\": \"Blade L3 Apex\"\n },\n {\n \"regex\": \"Blade L3(?:[);/ ]|$)\",\n \"model\": \"Blade L3\"\n },\n {\n \"regex\": \"Blade L5 Plus(?:[);/ ]|$)\",\n \"model\": \"Blade L5 Plus\"\n },\n {\n \"regex\": \"Blade L5(?:[);/ ]|$)\",\n \"model\": \"Blade L5\"\n },\n {\n \"regex\": \"Blade L6(?:[);/ ]|$)\",\n \"model\": \"Blade L6\"\n },\n {\n \"regex\": \"Blade L7A(?:[);/ ]|$)\",\n \"model\": \"Blade L7A\"\n },\n {\n \"regex\": \"Blade L7(?:[);/ ]|$)\",\n \"model\": \"Blade L7\"\n },\n {\n \"regex\": \"Blade L8(?:RU)?(?:[);/ ]|$)\",\n \"model\": \"Blade L8\"\n },\n {\n \"regex\": \"Blade A([357]) (20(?:19|20))\",\n \"model\": \"Blade A$1 ($2)\"\n },\n {\n \"regex\": \"Blade A3 Lite(?:[);/ ]|$)\",\n \"model\": \"Blade A3 Lite\"\n },\n {\n \"regex\": \"BLADE A0622(?:[);/ ]|$)\",\n \"model\": \"Blade A6\"\n },\n {\n \"regex\": \"BLADE A6 MAX(?:[);/ ]|$)\",\n \"model\": \"Blade A6 Max\"\n },\n {\n \"regex\": \"Blade S6 Plus(?:[);/ ]|$)\",\n \"model\": \"Blade S6 Plus\"\n },\n {\n \"regex\": \"Blade S6(?:[);/ ]|$)\",\n \"model\": \"Blade S6\"\n },\n {\n \"regex\": \"T920(?:[);/ ]|$)\",\n \"model\": \"Blade S7\"\n },\n {\n \"regex\": \"BLADE V Ultra(?:[);/ ]|$)\",\n \"model\": \"Blade V Ultra\"\n },\n {\n \"regex\": \"Blade V6 MAX(?:[);/ ]|$)\",\n \"model\": \"Blade V6 Max\"\n },\n {\n \"regex\": \"Blade V6 Plus(?:[);/ ]|$)\",\n \"model\": \"Blade V6 Plus\"\n },\n {\n \"regex\": \"Blade (?:V7 Lite|V0720)(?:[);/ ]|$)\",\n \"model\": \"Blade V7 Lite\"\n },\n {\n \"regex\": \"Blade V([67])(?:[);/ ]|$)\",\n \"model\": \"Blade V$1\"\n },\n {\n \"regex\": \"Blade X([79])(?:[);/ ]|$)\",\n \"model\": \"Blade X$1\"\n },\n {\n \"regex\": \"Blade V8Q(?:[);/ ]|$)\",\n \"model\": \"Blade V8Q\"\n },\n {\n \"regex\": \"Blade V8 SE(?:[);/ ]|$)\",\n \"model\": \"Blade V8 SE\"\n },\n {\n \"regex\": \"Blade V(9|10) Vita(?:[);/ ]|$)\",\n \"model\": \"Blade V$1 Vita\"\n },\n {\n \"regex\": \"Blade V([89]|10)(?:[);/ ]|$)\",\n \"model\": \"Blade V$1\"\n },\n {\n \"regex\": \"BLADE V0820(?:[);/ ]|$)\",\n \"model\": \"Blade V8 Lite\"\n },\n {\n \"regex\": \"BLADE V0850(?:[);/ ]|$)\",\n \"model\": \"Blade V8 Mini\"\n },\n {\n \"regex\": \"(?:Blade[ _])?(Apex2|G (LTE|Lux)|Vec|A510)\",\n \"model\": \"Blade $1\"\n },\n {\n \"regex\": \"Z768G(?:[);/ ]|$)\",\n \"model\": \"Midnight\"\n },\n {\n \"regex\": \"Z820\",\n \"model\": \"Obsidian\"\n },\n {\n \"regex\": \"Z986U\",\n \"model\": \"Blade Max 3\"\n },\n {\n \"regex\": \"Z971\",\n \"model\": \"Blade Spark\"\n },\n {\n \"regex\": \"Z978\",\n \"model\": \"Blade V8 Pro\"\n },\n {\n \"regex\": \"Z839\",\n \"model\": \"Blade Vantage\"\n },\n {\n \"regex\": \"Z3153V\",\n \"model\": \"Blade Vantage 2\"\n },\n {\n \"regex\": \"Z930L\",\n \"model\": \"Unico LTE\"\n },\n {\n \"regex\": \"Z965\",\n \"model\": \"Blade X\"\n },\n {\n \"regex\": \"Z981\",\n \"model\": \"Blade Z Max Pro\"\n },\n {\n \"regex\": \"Z982\",\n \"model\": \"Blade Z Max\"\n },\n {\n \"regex\": \"Z983\",\n \"model\": \"Blade X Max\"\n },\n {\n \"regex\": \"Z717[BV]L(?:[);/ ]|$)\",\n \"model\": \"Citrine LTE\"\n },\n {\n \"regex\": \"Z233VL(?:[);/ ]|$)\",\n \"model\": \"Cymbal-C LTE\"\n },\n {\n \"regex\": \"Z233V\",\n \"model\": \"Cymbal LTE\"\n },\n {\n \"regex\": \"Z232TL\",\n \"model\": \"Cymbal-G LTE\"\n },\n {\n \"regex\": \"Z353VL\",\n \"model\": \"Cymbal-T LTE\"\n },\n {\n \"regex\": \"Z718TL\",\n \"model\": \"Jasper LTE\"\n },\n {\n \"regex\": \"KIS II Max\",\n \"model\": \"Kis II Max\"\n },\n {\n \"regex\": \"Kis 3\",\n \"model\": \"Kis 3\"\n },\n {\n \"regex\": \"(?:Z798BL|Z799VL)(?:[);/ ]|$)\",\n \"model\": \"Majesty Pro LTE\"\n },\n {\n \"regex\": \"Z899VL\",\n \"model\": \"Majesty Pro Plus LTE\"\n },\n {\n \"regex\": \"Z828TL\",\n \"model\": \"Midnight Pro LTE\"\n },\n {\n \"regex\": \"(?:ZTE-)?Z792\",\n \"model\": \"Fanfare\"\n },\n {\n \"regex\": \"(?:ZTE-)?Z812\",\n \"model\": \"Maven\"\n },\n {\n \"regex\": \"Z815\",\n \"model\": \"Fanfare 2\"\n },\n {\n \"regex\": \"Z831\",\n \"model\": \"Maven 2\"\n },\n {\n \"regex\": \"Z832\",\n \"model\": \"Sonata 3\"\n },\n {\n \"regex\": \"Z835\",\n \"model\": \"Maven 3\"\n },\n {\n \"regex\": \"Z851(?:[);/ ]|$)\",\n \"model\": \"Prelude Plus\"\n },\n {\n \"regex\": \"Z851M\",\n \"model\": \"Overture 3\"\n },\n {\n \"regex\": \"Z852\",\n \"model\": \"Fanfare 3\"\n },\n {\n \"regex\": \"Z828\",\n \"model\": \"Avid Plus\"\n },\n {\n \"regex\": \"Z855\",\n \"model\": \"Avid 4\"\n },\n {\n \"regex\": \"Z833\",\n \"model\": \"Avid TRIO\"\n },\n {\n \"regex\": \"(?:Z836BL|Z837VL|Z836F)(?:[);/ ]|$)\",\n \"model\": \"ZFive 2 LTE\"\n },\n {\n \"regex\": \"Z558VL\",\n \"model\": \"ZFive C LTE\"\n },\n {\n \"regex\": \"Z557BL\",\n \"model\": \"ZFive G LTE\"\n },\n {\n \"regex\": \"(?:Z861BL|Z862VL)(?:[);/ ]|$)\",\n \"model\": \"ZFive L LTE\"\n },\n {\n \"regex\": \"Z916BL\",\n \"model\": \"ZMax Grand LTE\"\n },\n {\n \"regex\": \"Z917VL\",\n \"model\": \"ZMax Champ LTE\"\n },\n {\n \"regex\": \"(?:Z958|Z955A)(?:[);/ ]|$)\",\n \"model\": \"ZMax 2\"\n },\n {\n \"regex\": \"dandelion(?:[);/ ]|$)\",\n \"model\": \"ZMax 3\"\n },\n {\n \"regex\": \"Z963VL\",\n \"model\": \"Max Duo LTE\"\n },\n {\n \"regex\": \"Z970\",\n \"model\": \"ZMax Z970\"\n },\n {\n \"regex\": \"Z986DL\",\n \"model\": \"MAX Blue LTE\"\n },\n {\n \"regex\": \"(?:ZTE[-_])?Z992\",\n \"model\": \"Avail 2\"\n },\n {\n \"regex\": \"(?:Z999|Z-01K)(?:[);/ ]|$)\",\n \"model\": \"Axon M\"\n },\n {\n \"regex\": \"B2016\",\n \"model\": \"Axon Mini\"\n },\n {\n \"regex\": \"A2015\",\n \"model\": \"Axon Tianji\"\n },\n {\n \"regex\": \"A2017[GU]?\",\n \"model\": \"Axon 7\"\n },\n {\n \"regex\": \"A2018\",\n \"model\": \"Axon 7s\"\n },\n {\n \"regex\": \"A2019G Pro\",\n \"model\": \"Axon Pro\"\n },\n {\n \"regex\": \"B2017G\",\n \"model\": \"Axon 7 Mini\"\n },\n {\n \"regex\": \"A2020G? Pro(?:[);/ ]|$)\",\n \"model\": \"Axon 10 Pro\"\n },\n {\n \"regex\": \"Z667T\",\n \"model\": \"Zinger\"\n },\n {\n \"regex\": \"V?975|geek\",\n \"model\": \"Geek\"\n },\n {\n \"regex\": \"Z716BL\",\n \"model\": \"Citrine LTE\"\n },\n {\n \"regex\": \"X500\",\n \"model\": \"Score\"\n },\n {\n \"regex\": \"X501\",\n \"model\": \"Groove\"\n },\n {\n \"regex\": \"(?:ZTE-)?G-X991\",\n \"model\": \"Rio\"\n },\n {\n \"regex\": \"F-450\",\n \"model\": \"Adamant\"\n },\n {\n \"regex\": \"Z936L(?:[);/ ]|$)\",\n \"model\": \"Lever\"\n },\n {\n \"regex\": \"MO-01[JK](?:[);/ ]|$)\",\n \"model\": \"Mono\"\n },\n {\n \"regex\": \"V865M(?:[);/ ]|$)\",\n \"model\": \"V865M\"\n },\n {\n \"regex\": \"Z6621O(?:[);/ ]|$)\",\n \"model\": \"Optus X Vista\"\n },\n {\n \"regex\": \"V769M(?:[);/ ]|$)\",\n \"model\": \"Leo Q2\"\n },\n {\n \"regex\": \"K83CA(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Grand X View 3\"\n },\n {\n \"regex\": \"K87CA(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Grand X View 4\"\n },\n {\n \"regex\": \"AxonPhone ([^;/]+) Build\",\n \"model\": \"AxonPhone $1\"\n },\n {\n \"regex\": \"([a-z0-9]+)_USA_Cricket\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ZTE[- ](V98|V96A|V81|V70)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"ZTE[- ]([a-z0-9\\\\-_ ]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ZTE-(?:G |G-)?([a-z0-9 _]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"U?ZTE[ _]([a-z0-9]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Zuum\": {\n \"regex\": \"Zuum[ _-]|(?:Akus Z|COVET|MAGNO|ONIX S|STEDI|STELLAR(?:[ _](?:Z|PRO|[MP]1))?|GRAVITY Z|AURA X|COVET_PRO_LITE|RONI)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Akus Z\",\n \"model\": \"Akus Z\"\n },\n {\n \"regex\": \"COVET_PRO_LITE\",\n \"model\": \"Covet Pro Lite\"\n },\n {\n \"regex\": \"COVET PRO\",\n \"model\": \"Covet Pro\"\n },\n {\n \"regex\": \"COVET( Z)?\",\n \"model\": \"Covet$1\"\n },\n {\n \"regex\": \"MAGNO PLUS\",\n \"model\": \"Magno Plus\"\n },\n {\n \"regex\": \"MAGNO( C)?\",\n \"model\": \"Magno$1\"\n },\n {\n \"regex\": \"ONIX S\",\n \"model\": \"Onix S\"\n },\n {\n \"regex\": \"STEDI\",\n \"model\": \"Stedi\"\n },\n {\n \"regex\": \"STELLAR PRO\",\n \"model\": \"Stellar Pro\"\n },\n {\n \"regex\": \"STELLAR PLUS\",\n \"model\": \"Stellar Plus\"\n },\n {\n \"regex\": \"STELLAR ([MP]1|Z)\",\n \"model\": \"Stellar $1\"\n },\n {\n \"regex\": \"STELLAR MINI\",\n \"model\": \"Stellar Mini\"\n },\n {\n \"regex\": \"STELLAR MINI\",\n \"model\": \"Stellar Mini\"\n },\n {\n \"regex\": \"STELLAR\",\n \"model\": \"Stellar\"\n },\n {\n \"regex\": \"GRAVITY Z\",\n \"model\": \"Gravity Z\"\n },\n {\n \"regex\": \"AURA X\",\n \"model\": \"Aura X\"\n },\n {\n \"regex\": \"RONI\",\n \"model\": \"Roni\"\n },\n {\n \"regex\": \"Zuum[ _-]([^;/]+) Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Zuum[ _-]?([^;/)]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Zen\": {\n \"regex\": \"(Admire[_ ][^/;]+|Cinemax[^/;)]+)(?:Build|\\\\))|AdmireGlam\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AdmireGlam(?:[);/ ]|$)\",\n \"model\": \"Admire Glam\"\n },\n {\n \"regex\": \"(Admire[_ ][^/;]+|Cinemax[^/;)]+)(?:Build|\\\\))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Zync\": {\n \"regex\": \"ZYNC|(Cloud Z5|Z1000|Z18|Z99|Z99[_ ][23]G|Z99|Z900[_ ]Plus|Z909|Z930[+]|Z930)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(Z18| DuZ99al Core|Z99[_ ][23]G|Z99 Dual Core|Z99|Z900[_ ]Plus|Z909|Z930[+]|Z930)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Z1000[^/;]+)Build\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Cloud (Z5)\",\n \"model\": \"Cloud $1\"\n },\n {\n \"regex\": \"ZYNC Cloud[ _]([^;]+)Build\",\n \"model\": \"Cloud $1\"\n },\n {\n \"regex\": \"ZYNC[ _]([^;]+)Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Lemhoov\": {\n \"regex\": \"Lemhoov\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Lemhoov[ _-]([^/;]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"MTC\": {\n \"regex\": \"MTC[ _](968|97[82]|970|982[OT]?|1078)|(?:MTC[_ ])?SMART[ _]?(?:Race[2]?|Sprint|Run|Surf[2]?)[ _]4G|MTC975|Smart_(?:LINE|Light)|MTC[ _]SMART[ _](?:Run|Start_2)|Redbox Mini 5\\\\(MTS\\\\)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MTC[ _]?(97[258]|970[H]?|982[OT]?|968)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MTC[ _](1078)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"SMART[ _]Race[ _]4G\",\n \"model\": \"Smart Race 4G\"\n },\n {\n \"regex\": \"SMART[ _]Race2[ _]4G\",\n \"model\": \"Smart Race 2 4G\"\n },\n {\n \"regex\": \"(?:MTC_)?SMART[ _]Sprint[ _]4G\",\n \"model\": \"Smart Sprint 4G\"\n },\n {\n \"regex\": \"(?:MTC_)?SMART[ _]Start_2\",\n \"model\": \"Smart Start 2\"\n },\n {\n \"regex\": \"Smart_LINE\",\n \"model\": \"Smart Line\"\n },\n {\n \"regex\": \"Smart_Light\",\n \"model\": \"Smart Light\"\n },\n {\n \"regex\": \"SMART[ _]?Run(?:[ _]4G)?\",\n \"model\": \"Smart Run 4G\"\n },\n {\n \"regex\": \"SMART[ _]Surf2[ _]4G\",\n \"model\": \"Smart Surf 2 4G\"\n },\n {\n \"regex\": \"SMART[ _]Surf[ _]4G\",\n \"model\": \"Smart Surf 4G\"\n },\n {\n \"regex\": \"Redbox Mini 5\\\\(MTS\\\\)\",\n \"device\": \"tv\",\n \"model\": \"Redbox Mini 5\"\n }\n ]\n },\n \"MegaFon\": {\n \"regex\": \"MegaFon|MFLoginPh|MegLogPh|(MFLogin[34]T?|MS3B|SP-A5|SP-A20i)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MFLoginPh|MegLogPh\",\n \"model\": \"Login+\"\n },\n {\n \"regex\": \"MFLogin4\",\n \"model\": \"Login 4 LTE\"\n },\n {\n \"regex\": \"MFLogin3T|MegaFon Login 3\",\n \"model\": \"Login 3\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"MS3B|Megafon Optima\",\n \"model\": \"Optima\"\n },\n {\n \"regex\": \"SP-A20i\",\n \"model\": \"Mint\"\n },\n {\n \"regex\": \"(SP-A5)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Inoi\": {\n \"regex\": \"INOI\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"INOI 2 Lite 2019\",\n \"model\": \"2 Lite (2019)\"\n },\n {\n \"regex\": \"INOI ([257]) (2019|202[01])(?:[);/ ]|$)\",\n \"model\": \"$1 ($2)\"\n },\n {\n \"regex\": \"INOI[_ ]([^);/]+)(?: Build|[;)])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Vertex\": {\n \"regex\": \"(?:Luck|Lion_Dual|V709X|Tab [43]G (?:7-2|8-1|10-1)|Pro_P3[01]0_4G|Lion_DC|Baccara|Eagle[ _]4G|ImpressMAX)(?:[);/ ]|$)|Impress[ _]([^;/]+)(?:Build|\\\\))\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Lion_Dual|Lion_DC|Baccara|Eagle[ _]4G|Luck)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ImpressMAX(?:[);/ ]|$)\",\n \"model\": \"Impress Max\"\n },\n {\n \"regex\": \"Pro_P(3[01]0)_4G(?:[);/ ]|$)\",\n \"model\": \"Pro P$1 4G\"\n },\n {\n \"regex\": \"(Impress[ _]([^;/]+))(?:Build|\\\\))\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(V709X)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Tab ([43])G ([78]|10)-([21])\",\n \"device\": \"tablet\",\n \"model\": \"Tab $1G $2.$3\\\"\"\n }\n ]\n },\n \"Unknown\": {\n \"regex\": \"WebTV/(\\\\d+\\\\.\\\\d+)\",\n \"device\": \"tv\",\n \"model\": \"Web TV\"\n },\n \"Starway\": {\n \"regex\": \"Andromeda[ _]S(707|84[05]|850|8)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Andromeda S$1\"\n },\n \"Savio\": {\n \"regex\": \" (TB-PO1|TB-B01|TB-G01)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Simbans\": {\n \"regex\": \"TangoTab|Presto[ )]|Ultimax|Valumax|S72-B|SX2W\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TangoTab\",\n \"model\": \"TangoTab\"\n },\n {\n \"regex\": \"Ultimax\",\n \"model\": \"Ultimax\"\n },\n {\n \"regex\": \"Valumax\",\n \"model\": \"Valumax\"\n },\n {\n \"regex\": \"Presto\",\n \"model\": \"Presto\"\n },\n {\n \"regex\": \"S72-B\",\n \"model\": \"S72-B\"\n },\n {\n \"regex\": \"SX2W\",\n \"model\": \"SX2W\"\n }\n ]\n },\n \"MYFON\": {\n \"regex\": \"MYPAD7s\",\n \"device\": \"tablet\",\n \"model\": \"My Pad 7s\"\n },\n \"X-TIGI\": {\n \"regex\": \"X[-_]TIGI|Hope7[_ ]Mate|Photo_P15_Lite\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"X-TIGI_JOY10_PRO\",\n \"model\": \"Joy 10 Pro\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Hope7[_ ]Mate\",\n \"model\": \"Hope 7 Mate\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"X-TIGI_JOY7_MAX\",\n \"model\": \"Joy 7 Max\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"X-TIGI[_ ]V28[_ ]LTE\",\n \"model\": \"V28 LTE\"\n },\n {\n \"regex\": \"X[-_]TIGI[_ ]V19\",\n \"model\": \"V19\"\n },\n {\n \"regex\": \"X-TIGI[_ ]Photo[_ ]P11\",\n \"model\": \"Photo P11\"\n },\n {\n \"regex\": \"Photo_P15_Lite\",\n \"model\": \"Photo P15 Lite\"\n },\n {\n \"regex\": \"X[-_]TIGI[ _-]([^/;)]+) Build\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Xiaolajiao\": {\n \"regex\": \"(LA2-(?:L|S[N]?)|HLA Note3|20190416Q|20170608S|20180322D)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"HLA Note3(?:[);/ ]|$)\",\n \"model\": \"Red Pepper Note 3\"\n },\n {\n \"regex\": \"(LA2-(?:L|S[N]?))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(20190416Q)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"20170608S(?:[);/ ]|$)\",\n \"model\": \"Red Pepper Plus\"\n },\n {\n \"regex\": \"20180322D(?:[);/ ]|$)\",\n \"model\": \"E Sports\"\n }\n ]\n },\n \"Ritmix\": {\n \"regex\": \"(RMD[-_](?:10(?:2[689]|30|5[089])|1121|75[017]|726|85[57]|870)|RMP-(?:450|50[56]|530|600))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"RMD[-_](10(?:2[689]|30|5[089])|1121|75[017]|726|85[57]|870)(?:[);/ ]|$)\",\n \"model\": \"RMD-$1\"\n },\n {\n \"regex\": \"RMP[-_](450|50[56]|530|600)(?:[);/ ]|$)\",\n \"model\": \"RMP-$1\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"Ross&Moor\": {\n \"regex\": \"RMD[-_](974R|600)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"RMD-$1\"\n },\n \"R-TV\": {\n \"regex\": \"R-TV BOX[ _]?(MINI\\\\+|X99|X10 PRO|[RXS]10)\",\n \"device\": \"tv\",\n \"model\": \"Box $1\"\n },\n \"NEXBOX\": {\n \"regex\": \"(MXQ|MXQ-Pro)-NEXBOX|NEXBOX-([^) ]+)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"MXQ-Pro-NEXBOX\",\n \"model\": \"MXQ Pro\"\n },\n {\n \"regex\": \"MXQ-NEXBOX\",\n \"model\": \"MXQ\"\n },\n {\n \"regex\": \"NEXBOX-([^) ]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"True\": {\n \"regex\": \" TRUE BEYOND TAB 3G|SMART[ _](MAX 4.0 PLUS|4G[ _](?:GEN C [45].[05]|Champion|Speedy 5.0 Plus|Speedy[_ ]5inch|P1))\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SMART MAX 4.0 PLUS\",\n \"model\": \"Smart Max 4.0 Plus\"\n },\n {\n \"regex\": \"SMART 4G Gen C ([45].[05])\",\n \"model\": \"Smart 4G Gen C $1\\\"\"\n },\n {\n \"regex\": \"SMART 4G Speedy 5.0 Plus\",\n \"model\": \"Smart 4G Speedy 5.0 Plus\"\n },\n {\n \"regex\": \"SMART[ _]4G[_ ]Speedy[_ ]5inch\",\n \"model\": \"Smart 4G Speedy 5\"\n },\n {\n \"regex\": \"SMART[ _]4G[_ ]Champion\",\n \"model\": \"Smart 4G Champion\"\n },\n {\n \"regex\": \"SMART[ _]4G[_ ]P1 Prime\",\n \"model\": \"Smart 4G P1 Prime\"\n },\n {\n \"regex\": \"SMART[ _]4G[_ ]P1\",\n \"model\": \"Smart 4G P1\"\n },\n {\n \"regex\": \"TRUE BEYOND TAB 3G\",\n \"model\": \"Beyond Tab 3G\"\n }\n ]\n },\n \"Yandex\": {\n \"regex\": \"(YNDX-?000SB)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"YNDX-000SB\"\n },\n \"FORME\": {\n \"regex\": \"FORME[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"FORME[ _-]F520(?:[);/ ]|$)\",\n \"model\": \"Forever\"\n },\n {\n \"regex\": \"FORME[ _-](A[35]7|R7S?|P6)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Shuttle\": {\n \"regex\": \"(PNT-704[025])(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"BDF\": {\n \"regex\": \"(BDF[- ](?:819|P10|K107H|KT107|MT6753|X20)|K960N_MT(?:6580|6753)(?:_32_N)?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"BDF[- ](819|P10|K107H|KT107|MT6753|X20)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"K960N_MT(6580|6753)(_32_N)?(?:[);/ ]|$)\",\n \"model\": \"BK960N MT$1\"\n }\n ]\n },\n \"Highscreen\": {\n \"regex\": \"HIGHSCREEN|(Easy[- ]Power(?:[- ]Pro)?|Pure[_ ](?:Power|F)|Power Ice(?: Max)?|Easy[_ ]([SFL]|XL)(?:_Pro)?|Razar_Pro|Power Rage(?: Evo)?|Zera-S-Power|Zera[ _][UFS]|Power[ _]?Five[ matrixstyle _]?(?:Pro|Evo|Max|Max(?:Lite|2))|PowerFour|BOOST II(?:se)?|Fest(?:XL)?(?:-Pro)?|Tasty|Boost3|Boost 3(?: Pro)? SE|Expanse|Hercules|Alpha Rage|VergeM)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Power Ice(?:[ ](?:Max|Evo))?|Power Rage(?: Evo)?|Zera[ _][UFS])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"PowerFivePro(?:[);/ ]|$)\",\n \"model\": \"Power Five Pro\"\n },\n {\n \"regex\": \"PowerFiveMaxLite(?:[);/ ]|$)\",\n \"model\": \"Power Five Max Lite\"\n },\n {\n \"regex\": \"PowerFiveMax2(?:[);/ ]|$)\",\n \"model\": \"Power Five Max 2\"\n },\n {\n \"regex\": \"Power Five Evo(?:[);/ ]|$)\",\n \"model\": \"Power Five Evo\"\n },\n {\n \"regex\": \"Power Five Max(?:[);/ ]|$)\",\n \"model\": \"Power Five Max\"\n },\n {\n \"regex\": \"FestXL-Pro(?:[);/ ]|$)\",\n \"model\": \"Fest XL Pro\"\n },\n {\n \"regex\": \"FestXL(?:[);/ ]|$)\",\n \"model\": \"Fest XL\"\n },\n {\n \"regex\": \"Fest-Pro(?:[);/ ]|$)\",\n \"model\": \"Fest Pro\"\n },\n {\n \"regex\": \"Fest(?:[);/ ]|$)\",\n \"model\": \"Fest\"\n },\n {\n \"regex\": \"PowerFour(?:[);/ ]|$)\",\n \"model\": \"Power Four\"\n },\n {\n \"regex\": \"Pure[_ ]Power(?:[);/ ]|$)\",\n \"model\": \"Pure Power\"\n },\n {\n \"regex\": \"Pure[ _]F(?:[);/ ]|$)\",\n \"model\": \"Pure F\"\n },\n {\n \"regex\": \"Razar_Pro(?:[);/ ]|$)\",\n \"model\": \"Razar Pro\"\n },\n {\n \"regex\": \"Easy[_ ]([SLF]|XL)[_ ]Pro(?:[);/ ]|$)\",\n \"model\": \"Easy $1 Pro\"\n },\n {\n \"regex\": \"Easy[_ ]([SFL]|XL)(?:[);/ ]|$)\",\n \"model\": \"Easy $1\"\n },\n {\n \"regex\": \"(?:HIGHSCREEN )?Easy[- ]Power[- ]Pro(?:[);/ ]|$)\",\n \"model\": \"Easy Power Pro\"\n },\n {\n \"regex\": \"(?:HIGHSCREEN )?Easy-Power(?:[);/ ]|$)\",\n \"model\": \"Easy Power\"\n },\n {\n \"regex\": \"BOOST II(?:[);/ ]|$)\",\n \"model\": \"Boost 2\"\n },\n {\n \"regex\": \"BOOST IIse(?:[);/ ]|$)\",\n \"model\": \"Boost 2 SE\"\n },\n {\n \"regex\": \"Boost 3 SE(?:[);/ ]|$)\",\n \"model\": \"Boost 3 SE\"\n },\n {\n \"regex\": \"Boost 3 Pro SE(?:[);/ ]|$)\",\n \"model\": \"Boost 3 Pro SE\"\n },\n {\n \"regex\": \"BOOST3(?:[);/ ]|$)\",\n \"model\": \"Boost 3\"\n },\n {\n \"regex\": \"Zera-S-Power(?:[);/ ]|$)\",\n \"model\": \"Zera S Power\"\n },\n {\n \"regex\": \"Tasty(?:[);/ ]|$)\",\n \"model\": \"Tasty\"\n },\n {\n \"regex\": \"VergeM(?:[);/ ]|$)\",\n \"model\": \"Verge M\"\n },\n {\n \"regex\": \"WinWin(?:[);/ ]|$)\",\n \"model\": \"WinWin\"\n },\n {\n \"regex\": \"Expanse(?:[);/ ]|$)\",\n \"model\": \"Expanse\"\n },\n {\n \"regex\": \"Hercules(?:[);/ ]|$)\",\n \"model\": \"Hercules\"\n },\n {\n \"regex\": \"Alpha Rage(?:[);/ ]|$)\",\n \"model\": \"Alpha Rage\"\n }\n ]\n },\n \"CVTE\": {\n \"regex\": \"CVTE[_ ](MSD338_(:?1G|512M))(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Globex\": {\n \"regex\": \"(GU1011C|GU8012C|GU7013C|GU730C|GU-6012B)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"GU8012C(?:[);/ ]|$)\",\n \"model\": \"X8\"\n },\n {\n \"regex\": \"GU-6012B(?:[);/ ]|$)\",\n \"model\": \"GU6012B\"\n },\n {\n \"regex\": \"(GU1011C|GU7013C|GU730C)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Atom\": {\n \"regex\": \"ATOM-(108AM|216RK|216AM)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Qumo\": {\n \"regex\": \"QUMO[ _]?|(?:Quest[ _]?(?:408|410|45[56]|50[679])|Vega[ _]?78[23]|Sirius[ _]?(?:1001|890))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(?:QUMO[ _]?)?Vega[ _]?(78[23]|8002)(?:[);/ ]|$)\",\n \"model\": \"Vega $1\"\n },\n {\n \"regex\": \"Yooda(?:[);/ ]|$)\",\n \"model\": \"Yooda\"\n },\n {\n \"regex\": \"Sirius[ _]?(1001|890)(?:[);/ ]|$)\",\n \"model\": \"Sirius $1\"\n },\n {\n \"regex\": \"(?:QUMO)?(Sirius 101-4G 8GB Black|Altair 701 8GB Black|Altair 71 4GB Black|Altair 700[24]|Altair 706)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:QUMO[ _])?Quest[ _]?(35[34]|40[268]|410|45[2568]|47[46]|50[679]|5[17]0|600)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Quest $1\"\n }\n ]\n },\n \"Umax\": {\n \"regex\": \"VisionBook[ _]|[78]Qa_3G(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(VisionBook[ _](?:10Qi|7Q[i]?|8Q[ei]?|P70|8Qi_3G)(?:[ _](?:[34]G|Plus|LTE))?)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([78])Qa_3G(?:[);/ ]|$)\",\n \"model\": \"VisionBook $1Qa 3G\"\n },\n {\n \"regex\": \"VisionBook_10Q_LTE(?:[);/ ]|$)\",\n \"model\": \"VisionBook 10Q LTE\"\n },\n {\n \"regex\": \"VisionBook_P50Plus_LTE(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"VisionBook P50 Plus LTE\"\n },\n {\n \"regex\": \"(VisionBook[ _](?:P50 LTE|P55 X2 LTE|P55 LTE(?: Pro)?))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Mann\": {\n \"regex\": \"(ZUG 3|ZUG 5S(?: Q)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Unihertz\": {\n \"regex\": \"(Titan|Jelly-Pro|Atom_X?L)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Jelly)-(Pro)(?:[);/ ]|$)\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"(Titan|Atom_X?L)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Chuwi\": {\n \"regex\": \"(?:CW-(Hi8-super|Hi12|V99i?|V17HD3G|VX8-3G|V88-QUAD|V9-DUAL|V88S|Vi[78]|[HV]i10 (?:pro|plus))|Hi10 (?:Pro|plus)|HiPad X|HiBox-hero|HiBook(?: pro)?|Hi[89] ?(?:Air|Pro)|Hi8SE|Vi10(?: ?Pro)?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(CW-Hi8-super)(?:[);/ ]|$)\",\n \"model\": \"Hi8\"\n },\n {\n \"regex\": \"(?:CW-)?(Vi10|Hi10) plus(?:[);/ ]|$)\",\n \"model\": \"$1 Plus\"\n },\n {\n \"regex\": \"CW-(V88)-QUAD(?:[);/ ]|$)\",\n \"model\": \"$1 Quad\"\n },\n {\n \"regex\": \"CW-(V9)-DUAL(?:[);/ ]|$)\",\n \"model\": \"$1 Dual\"\n },\n {\n \"regex\": \"CW-(V17HD|VX8)-?(3G)(?:[);/ ]|$)\",\n \"model\": \"$1 $2\"\n },\n {\n \"regex\": \"(?:CW-)?(Hi10) pro(?:[);/ ]|$)\",\n \"model\": \"$1 Pro\"\n },\n {\n \"regex\": \"HiBook pro(?:[);/ ]|$)\",\n \"model\": \"HiBook Pro\"\n },\n {\n \"regex\": \"HiBook(?:[);/ ]|$)\",\n \"model\": \"HiBook\"\n },\n {\n \"regex\": \"HiPad X(?:[);/ ]|$)\",\n \"model\": \"HiPad X\"\n },\n {\n \"regex\": \"Hi([89]) ?Air(?:[);/ ]|$)\",\n \"model\": \"Hi$1 Air\"\n },\n {\n \"regex\": \"Hi8SE(?:[);/ ]|$)\",\n \"model\": \"Hi8 SE\"\n },\n {\n \"regex\": \"Hi([89]) ?pro(?:[);/ ]|$)\",\n \"model\": \"Hi$1 Pro\"\n },\n {\n \"regex\": \"Vi10 Plus(?:[);/ ]|$)\",\n \"model\": \"Vi10 Plus\"\n },\n {\n \"regex\": \"Vi10 ?Pro(?:[);/ ]|$)\",\n \"model\": \"Vi10 Pro\"\n },\n {\n \"regex\": \"Vi10(?:[);/ ]|$)\",\n \"model\": \"Vi10\"\n },\n {\n \"regex\": \"HiBox-hero(?:[);/ ]|$)\",\n \"model\": \"HiBox Hero\",\n \"device\": \"desktop\"\n },\n {\n \"regex\": \"CW-(Vi[78]|Hi12|V99i?|V88S)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Bezkam\": {\n \"regex\": \"BEZKAM (BK-RAM2)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"NG Optics\": {\n \"regex\": \"(NG3128HD)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"KATV1\": {\n \"regex\": \"(KATV-01) PRO(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1 Pro\"\n },\n \"Ghong\": {\n \"regex\": \"GHONG(V10)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Xoro\": {\n \"regex\": \"(?:TelePAD(?:795|731|1032|10A3|7A3)|Era 2X|HMT(?:390Q?|400)|HST 260)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TelePAD(7|10)A3 4G(?:[);/ ]|$)\",\n \"model\": \"TelePad $1 A3 4G\"\n },\n {\n \"regex\": \"TelePAD(795|731|1032)(?:[);/ ]|$)\",\n \"model\": \"TelePad $1\"\n },\n {\n \"regex\": \"HMT(390Q?|400)(?:[);/ ]|$)\",\n \"model\": \"HMT $1\",\n \"device\": \"portable media player\"\n },\n {\n \"regex\": \"HST 260(?:[);/ ]|$)\",\n \"model\": \"HST 260\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(Era 2X)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"smartphone\"\n }\n ]\n },\n \"Vinga\": {\n \"regex\": \"VMP-(015-162|021-82|041-162|011-81|025-324|045-664)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"VMP-021-82\",\n \"model\": \"021\"\n },\n {\n \"regex\": \"VMP-025-324\",\n \"model\": \"025\"\n },\n {\n \"regex\": \"VMP-015-162\",\n \"model\": \"015\"\n },\n {\n \"regex\": \"VMP-041-162\",\n \"model\": \"041\"\n },\n {\n \"regex\": \"VMP-045-664\",\n \"model\": \"045\"\n },\n {\n \"regex\": \"VMP-011-81\",\n \"model\": \"011\"\n }\n ]\n },\n \"Viumee\": {\n \"regex\": \"SMART[_ ](EV[56])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Smart $1\"\n },\n \"Nuvo\": {\n \"regex\": \"Nuvo[_ ](NS35|Blue ND40|Green[_ ]ND[_ ]45)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Nuvo[_ ](NS35)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Blue (ND40)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Green[_ ]ND[_ ]45(?:[);/ ]|$)\",\n \"model\": \"ND45\"\n }\n ]\n },\n \"Sunvell\": {\n \"regex\": \"(?:T95ZPLUS|T95[KU]PRO)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"T95ZPLUS\",\n \"model\": \"T95Z Plus\"\n },\n {\n \"regex\": \"(T95[KU])PRO\",\n \"model\": \"$1 Pro\"\n }\n ]\n },\n \"Ugoos\": {\n \"regex\": \"UGOOS-AM6(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"AM6\"\n },\n \"Yxtel\": {\n \"regex\": \"YXTEL_([HU]1|U3)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Proline\": {\n \"regex\": \"(H10882M-TN)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Yota\": {\n \"regex\": \"(YD20[16]|YOTA 3[+])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"YD20[16](?:[);/ ]|$)\",\n \"model\": \"Phone 2\"\n },\n {\n \"regex\": \"YOTA 3[+](?:[);/ ]|$)\",\n \"model\": \"Phone 3 Plus\"\n }\n ]\n },\n \"Mystery\": {\n \"regex\": \"MYSTERY|(MID-(?:123G|72[12]|7[01348]3G|753G|8[23]3G))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"MID-(123G|72[12]|7[01348]3G|753G|8[23]3G)(?:[);/ ]|$)\",\n \"model\": \"MID-$1\"\n },\n {\n \"regex\": \"MYSTERY_TV_(D3155CH31)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ritzviva\": {\n \"regex\": \"(RITZVIVA[_ ]S500C)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"S500C\"\n },\n \"DeWalt\": {\n \"regex\": \"DeWalt (MD501)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Runbo\": {\n \"regex\": \"Runbo|F1-TT(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Runbo[ _-]?(X5-W|F1 Plus|F1-TT|F1-EN|F1|TT|Q5-S|X5-King|X6|Q5)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"F1-TT\",\n \"model\": \"F1-TT\"\n }\n ]\n },\n \"NewsMy\": {\n \"regex\": \"(CarPad-(?:II|III)-P)(?:[);/ ]|$)\",\n \"device\": \"car browser\",\n \"model\": \"$1\"\n },\n \"Newsday\": {\n \"regex\": \"Newsday[_ ](E1|A[12])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Daewoo\": {\n \"regex\": \"Daewoo|(DTA-07IDRF)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(DTA-07IDRF)(?:[);/ ]|$)\",\n \"model\": \"Archive 7P\"\n },\n {\n \"regex\": \"Daewoo (Android TV 638)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"tv\"\n }\n ]\n },\n \"Vesta\": {\n \"regex\": \"VESTA32LD86(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"SmartT V2.0 32LD86S\"\n },\n \"Spectrum\": {\n \"regex\": \"(CARBONO_5|CUARZO_6|DIAMANTE_5|VULCANO_55)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"VULCANO_55(?:[);/ ]|$)\",\n \"model\": \"Vulcano 5.5\\\"\"\n },\n {\n \"regex\": \"CARBONO_5(?:[);/ ]|$)\",\n \"model\": \"Carbono 5.0\\\"\"\n },\n {\n \"regex\": \"CUARZO_6(?:[);/ ]|$)\",\n \"model\": \"Cuarzo 6.0\\\"\"\n },\n {\n \"regex\": \"DIAMANTE_5(?:[);/ ]|$)\",\n \"model\": \"Diamante 5.0\\\"\"\n }\n ]\n },\n \"Kivi\": {\n \"regex\": \"(?:24H600G[RU]|24FR50WU|24HK30B|32HR55GU|4[39]UP50GU|40UR50G[RU]|40U600G[RU]|55U600G[RU]|65UP50GU|55U[PC]50G[RU]|50U600G[RU]|50UX10S|55UR50G[RU]|40FK30G|40FR50BR|43UK35G|50FK30G|50UK35G|32HR50GR|55UC30G|32HK30G|40FK30G|32HR50GU|43UK30G|32FR50(?:WR|BU)|32FK3[02]G)(?:_-Ver0[0-9])?(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(24H600G[RU]|24FR50WU|24HK30B|32HR55GU|4[39]UP50GU|40UR50G[RU]|40U600G[RU]|55U600G[RU]|65UP50GU|55U[PC]50G[RU]|50UX10S|50U600G[RU]|55UR50G[RU]|40FK30G|40FR50BR|43UK35G|50FK30G|50UK35G|32HR50GR|32FR50(?:WR|BU)|32FK3[02]G)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(55UC30G|40FK30G|43UK30G|32HR50G[RU]|32HK30G|32FK32G)_-Ver0([0-9])(?:[);/ ]|$)\",\n \"model\": \"$1 v$2\"\n }\n ]\n },\n \"Divisat\": {\n \"regex\": \"(Divisat)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(J-Link)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Kanji\": {\n \"regex\": \"KJ-(OB03|YUBI)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"KJ-OB03(?:[);/ ]|$)\",\n \"model\": \"Cata 7\"\n },\n {\n \"regex\": \"KJ-YUBI(?:[);/ ]|$)\",\n \"model\": \"Yubi 3G\"\n }\n ]\n },\n \"Kaiomy\": {\n \"regex\": \"KaiCloud[ ]?(7[48]4|942)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"KaiCloud $1\"\n },\n \"National\": {\n \"regex\": \"(NX-32THS100)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Vsun\": {\n \"regex\": \"(?:VSUN (?:ILLUSION|RACE|V9)|MARS TOUCH|MARS NOTE|MARS NOCAM|SATURN SELFIE)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ILLUSION(?:[);/ ]|$)\",\n \"model\": \"Illusion\"\n },\n {\n \"regex\": \"MARS TOUCH(?:[);/ ]|$)\",\n \"model\": \"Mars Touch\"\n },\n {\n \"regex\": \"MARS NOTE(?:[);/ ]|$)\",\n \"model\": \"Mars Note\"\n },\n {\n \"regex\": \"MARS NOCAM(?:[);/ ]|$)\",\n \"model\": \"Mars Nocam\"\n },\n {\n \"regex\": \"SATURN SELFIE(?:[);/ ]|$)\",\n \"model\": \"Saturn Selfie\"\n },\n {\n \"regex\": \"RACE(?:[);/ ]|$)\",\n \"model\": \"Race\"\n },\n {\n \"regex\": \"(V9)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Shift Phones\": {\n \"regex\": \"(SHIFT6m)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"RugGear\": {\n \"regex\": \"(RugGear|RG(?:310|500|65[05]|702|7[13]0|850))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(RG[0-9]+)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Aligator\": {\n \"regex\": \"ALIGATOR[_ ]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ALIGATOR[ _](S4080|S50(?:6[56]|[678]0)|S5540|RX510|S6500|RX710|RX800|S5520)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Maxcom\": {\n \"regex\": \"(MS(?:45[036]|505|514)|MS457(?:PLUS)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(MS457)PLUS(?:[);/ ]|$)\",\n \"model\": \"$1 Plus\"\n },\n {\n \"regex\": \"MS(45[0367]|505|514)(?:[);/ ]|$)\",\n \"model\": \"MS$1\"\n }\n ]\n },\n \"Luna\": {\n \"regex\": \"(?:LUNA[ _](?:V55|G[56]0)|TG-L800S)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"LUNA[ _](V55|G[56]0)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(TG-L800S)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Protruly\": {\n \"regex\": \"PROTRULY[ _](D[78]|V10S)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"JFone\": {\n \"regex\": \"JFone[ _](JS501)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Uhans\": {\n \"regex\": \"(A101S)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Soyes\": {\n \"regex\": \"SOYES[ _]([67]S|XS)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Zidoo\": {\n \"regex\": \"ZIDOO[ _](H6 Pro|X6 Pro|X9S|Z10|X[158]|X20 Pro|Z9S)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Zfiner\": {\n \"regex\": \"ZFINERY900(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Y900\"\n },\n \"iGet\": {\n \"regex\": \"SMART[_ ](G10[12]|S7[02]|G71|G81[H]?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Smart $1\"\n },\n \"iVA\": {\n \"regex\": \"(LAMCY (?:L3[05]0|C100|L400)|IVA S6)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"LAMCY (L3[05]0|C100|L400)(?:[);/ ]|$)\",\n \"model\": \"Lamcy $1\"\n },\n {\n \"regex\": \"IVA S6(?:[);/ ]|$)\",\n \"model\": \"S6\"\n }\n ]\n },\n \"Phicomm\": {\n \"regex\": \"(PHICOMM)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"C630 \\\\(CLUE L\\\\)(?:[);/ ]|$)\",\n \"model\": \"Clue L\"\n },\n {\n \"regex\": \"E653\\\\(ENERGY L\\\\)(?:[);/ ]|$)\",\n \"model\": \"Energy L\"\n },\n {\n \"regex\": \"PHICOMM ENERGY 3\\\\+(?:[);/ ]|$)\",\n \"model\": \"Energy 3+\"\n },\n {\n \"regex\": \"CLUE (2S|M)(?:[);/ ]|$)\",\n \"model\": \"Clue $1\"\n }\n ]\n },\n \"Huadoo\": {\n \"regex\": \"Huadoo[ _](HG0[46]|HG11|V[34])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Gome\": {\n \"regex\": \"(?:GOME[_ ](?:201[678].+|C7_Note(?:_Plus)?|U9|S[17])|Fenmmy_Note)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GOME[_ ](?:2018X38A)(?:[);/ ]|$)\",\n \"model\": \"C72\"\n },\n {\n \"regex\": \"GOME[_ ](?:2018X07A)(?:[);/ ]|$)\",\n \"model\": \"C7\"\n },\n {\n \"regex\": \"GOME[_ ](?:2017X05A)(?:[);/ ]|$)\",\n \"model\": \"C71\"\n },\n {\n \"regex\": \"GOME[_ ](?:2016G68A)(?:[);/ ]|$)\",\n \"model\": \"K1\"\n },\n {\n \"regex\": \"GOME[_ ](?:2016M25A)(?:[);/ ]|$)\",\n \"model\": \"U1\"\n },\n {\n \"regex\": \"GOME[_ ](?:2017M27A)(?:[);/ ]|$)\",\n \"model\": \"U7\"\n },\n {\n \"regex\": \"GOME[_ ](C7_Note(?:_Plus)?|U9|S[17])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(?:GOME[_ ])?(Fenmmy_Note)(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Voyo\": {\n \"regex\": \"(?:VOYO[_ ](?:A15)|i8-Max|Q101-4G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"i8-Max(?:[);/ ]|$)\",\n \"model\": \"i8 Max\"\n },\n {\n \"regex\": \"(Q101)-4G(?:[);/ ]|$)\",\n \"model\": \"$1 4G\"\n },\n {\n \"regex\": \"VOYO[_ ](A15)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ryte\": {\n \"regex\": \"RYTE (U55 LTE)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Vontar\": {\n \"regex\": \"(HK1 (?:Max|MINI|PLUS|PRO)|VONTAR[ -](?:Z[58]|V1|KIII|MX-4K|X3))(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"VONTAR[ -](Z[58]|V1|KIII|MX-4K|X3)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HK1 Max(?:[);/ ]|$)\",\n \"model\": \"HK1 Max\"\n },\n {\n \"regex\": \"HK1 MINI(?:[);/ ]|$)\",\n \"model\": \"HK1 Mini\"\n },\n {\n \"regex\": \"HK1 PLUS(?:[);/ ]|$)\",\n \"model\": \"HK1 Plus\"\n },\n {\n \"regex\": \"HK1 PRO(?:[);/ ]|$)\",\n \"model\": \"HK1 Pro\"\n }\n ]\n },\n \"Vorke\": {\n \"regex\": \"VORKE (Z[157]|Z6(?: Plus)?)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Wigor\": {\n \"regex\": \"Wigor (V4)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"NEXON\": {\n \"regex\": \"NEXON (X[1589])(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"ONN\": {\n \"regex\": \"(ONA19TB00[327]|10000520[6-9]|O8HD)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"EXO\": {\n \"regex\": \"(Wave_i101G|Wave i101[Hb])(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Q.Bell\": {\n \"regex\": \"(QPHONE[_ ](?:10.1|9.[12]|7.1|5.[46])|QTAB10EW)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(QPHONE[_ ](?:10.1|9.[12]|7.1|5.[46]))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"QTAB10EW\",\n \"device\": \"tablet\",\n \"model\": \"QTAB10EW\"\n }\n ]\n },\n \"Datawind\": {\n \"regex\": \"DW-[A-Z0-9]{5}(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(DW-PS3G5)(?:[);/ ]|$)\",\n \"model\": \"Pocket Surfer 3G5\"\n },\n {\n \"regex\": \"DW-UBT7W\",\n \"device\": \"tablet\",\n \"model\": \"Ubislate 7W\"\n }\n ]\n },\n \"Droxio\": {\n \"regex\": \"DROXIO (C40|B45)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Goophone\": {\n \"regex\": \"Goophone[ _]|(?:M(G492|L7[JK]2)CH|MN(4A2|8J2)ZP|MGA92ZP|MKU82ZP|MNGW2CH|MNH02CH|MNRM2CH)[/]A(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:MG492CH|MGA92ZP)[/]A(?:[);/ ]|$)\",\n \"model\": \"I6 Plus\"\n },\n {\n \"regex\": \"ML7[JK]2CH[/]A(?:[);/ ]|$)\",\n \"model\": \"I6\"\n },\n {\n \"regex\": \"MKU82ZP[/]A(?:[);/ ]|$)\",\n \"model\": \"I6S\"\n },\n {\n \"regex\": \"MNGW2CH[/]A(?:[);/ ]|$)\",\n \"model\": \"I6S Plus\"\n },\n {\n \"regex\": \"(?:MN4A2ZP|MNH02CH)[/]A(?:[);/ ]|$)\",\n \"model\": \"I7\"\n },\n {\n \"regex\": \"(?:MN8J2ZP|MNRM2CH)[/]A(?:[);/ ]|$)\",\n \"model\": \"I7 Plus\"\n },\n {\n \"regex\": \"S4 MEGA(?:[);/ ]|$)\",\n \"model\": \"S4 Mega\"\n },\n {\n \"regex\": \"Goophone i([69])(?:[);/ ]|$)\",\n \"model\": \"I$1\"\n }\n ]\n },\n \"PocketBook\": {\n \"regex\": \"PocketBook[ _/]\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"PocketBook SURFpad 3 \\\\(([\\\\d]+).([\\\\d]+)[\\\"]?\\\\)(?:[);/ ]|$)\",\n \"model\": \"Surfpad 3 $1.$2\\\"\"\n },\n {\n \"regex\": \"PocketBook/(62[67]|63[12]|740|840)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Bitmore\": {\n \"regex\": \"(?:Mobitab10c-3G|Tab1011Q_II)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(Mobitab)(10)c-3G(?:[);/ ]|$)\",\n \"model\": \"$1 $2C 3G\"\n },\n {\n \"regex\": \"Tab1011Q_II(?:[);/ ]|$)\",\n \"model\": \"Tab1011Q II\"\n }\n ]\n },\n \"Kuliao\": {\n \"regex\": \"KULIAO (K10)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Sugar\": {\n \"regex\": \"SUGAR[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SUGAR Y([78]) MAX(?:[);/ ]|$)\",\n \"model\": \"Y$1 Max\"\n },\n {\n \"regex\": \"SUGAR F7 Mini(?:[);/ ]|$)\",\n \"model\": \"F7 Mini\"\n },\n {\n \"regex\": \"SUGAR (C[12]1|C1[23]|S11|C11s|[SF]20s?|[YF]11|[YFS]9|C[679]|[FY]7|Y12s|Y1[256]|P1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Subor\": {\n \"regex\": \"SUBOR[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SUBOR[ _](S5|2019)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"SUBOR[_ ]K10PLUS(?:[);/ ]|$)\",\n \"model\": \"K10 Plus\"\n }\n ]\n },\n \"Xshitou\": {\n \"regex\": \"Xshitou[_ ](P7)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"JKL\": {\n \"regex\": \"JKL[_ ](A28)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Gree\": {\n \"regex\": \"(G0215D|G0245D|G0335D)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Vodacom\": {\n \"regex\": \"(?:Vodacom)[ _](Power Tab 10)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"VKworld\": {\n \"regex\": \"(?:(?:VK700)-MAX|VK700 Pro|T5SE|VK700X|vk6050|vk6735|vk700)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(VK700)-MAX(?:[);/ ]|$)\",\n \"model\": \"$1 Max\"\n },\n {\n \"regex\": \"(VK700) Pro(?:[);/ ]|$)\",\n \"model\": \"$1 Pro\"\n },\n {\n \"regex\": \"T5SE(?:[);/ ]|$)\",\n \"model\": \"T5 SE\"\n },\n {\n \"regex\": \"VK(700X|6050|6735|700)(?:[);/ ]|$)\",\n \"model\": \"VK$1\"\n }\n ]\n },\n \"Mito\": {\n \"regex\": \"MITO[- _](A(?:1[0678]|19_[12]GB|21|3[59]|55|180|2[36]0|313|322|33|3[136]0|[35]50|6[89]|7[235]|82|[356]0|810|950)|T(?:8|10|35|3[03]0|510|888)|311)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MITO[- _](A(?:1[0678]|19_[12]GB|21|3[59]|55|180|2[36]0|33|322|313|3[136]0|[35]50|6[89]|7[235]|82|[356]0|810|950)|311)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MITO[ _](T(?:8|10|35|3[03]0|510|888))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"TWM\": {\n \"regex\": \"Amazing[ _](X[35]s|X[123567]|A5S|A3[025]|A[468]|A4S|A5[057]|P6)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Amazing[ _](X[35])s(?:[);/ ]|$)\",\n \"model\": \"Amazing $1S\"\n },\n {\n \"regex\": \"Amazing[ _](A5S|X[123567]|A[468]|A4S|A5[057]|A3[025])(?:[);/ ]|$)\",\n \"model\": \"Amazing $1\"\n },\n {\n \"regex\": \"Amazing[ _](P6)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Amazing $1\"\n }\n ]\n },\n \"TWZ\": {\n \"regex\": \"TWZ[-_ ](?:TabPlay|Y6[08]|Y52|A49|A[59]5|A567|AA8|QQ[12])|TWZQQ1\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TWZ[_ ]TabPlay[_ ](12[56])\",\n \"device\": \"tablet\",\n \"model\": \"TabPlay $1\"\n },\n {\n \"regex\": \"TWZ[-_ ]?(Y6[08]|Y52|A49|A[59]5|A567|AA8|QQ[12])\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Onix\": {\n \"regex\": \"(?:ONIX S405|AT101-1116)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(AT101-1116)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(S405)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Oale\": {\n \"regex\": \"Apex([13])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Apex $1\"\n },\n \"Mobo\": {\n \"regex\": \"(?:(?:MOBO[_ ]MB7005|MT7-421HD)|(?:MT7-442D|MT7-411D))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(?:MOBO[_ ])?(MB7005|MT7-421HD|MT7-442D|MT7-411D)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Macoox\": {\n \"regex\": \"(MC-X7MINI)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"MC-X7 Mini\"\n },\n \"Prixton\": {\n \"regex\": \"PRIXTON |(T7012Q)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"PRIXTON (C18)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(T7012Q)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Magnus\": {\n \"regex\": \"Magnus[ _](?:bravoZ[23]0|Infinity_?(?:G8|G11))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"bravo(Z[23]0)\",\n \"model\": \"Bravo $1\"\n },\n {\n \"regex\": \"(?:Magnus[ _])?Infinity_?(G8|G11)\",\n \"model\": \"Infinity $1\"\n }\n ]\n },\n \"Newland\": {\n \"regex\": \"(?:NLS-MT90)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"MT90 Orca\"\n },\n \"Orbic\": {\n \"regex\": \"(?:RC555L|RC501L)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"RC555L(?:[);/ ]|$)\",\n \"model\": \"Wonder\"\n },\n {\n \"regex\": \"RC501L(?:[);/ ]|$)\",\n \"model\": \"Slim\"\n }\n ]\n },\n \"RED\": {\n \"regex\": \"(?:H1A1000)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Hydrogen One\"\n },\n \"Contixo\": {\n \"regex\": \"Contixo|(?:CX-1045 3G|KT995 3G|CX1045)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"CX-?1045(?: 3G)?(?:[);/ ]|$)\",\n \"model\": \"CX-1045 3G\"\n },\n {\n \"regex\": \"CONTIXO GX 1035(?:[);/ ]|$)\",\n \"model\": \"GX-1035 4G 10.1\\\"\"\n },\n {\n \"regex\": \"Contixo GT1160 4G(?:[);/ ]|$)\",\n \"model\": \"GT1160 4G 10.1\\\"\"\n },\n {\n \"regex\": \"B105(?:[);/ ]|$)\",\n \"model\": \"B105 3G 10.1\\\"\"\n },\n {\n \"regex\": \"B108(?:[);/ ]|$)\",\n \"model\": \"B108 4G 10.1\\\"\"\n },\n {\n \"regex\": \"KT107(?: 3G)?(?:[);/ ]|$)\",\n \"model\": \"KT107 3G 10.1\\\"\"\n },\n {\n \"regex\": \"K109(?:[);/ ]|$)\",\n \"model\": \"KT109 4G 10.1\\\"\"\n },\n {\n \"regex\": \"KT715 3G(?:[);/ ]|$)\",\n \"model\": \"KT715 3G 7.0\\\"\"\n },\n {\n \"regex\": \"KT995(?:[);/ ]|$)\",\n \"model\": \"KT995 3G 10.1\\\"\"\n },\n {\n \"regex\": \"KT1100GT(?:[);/ ]|$)\",\n \"model\": \"KT1100GT\"\n }\n ]\n },\n \"E-Ceros\": {\n \"regex\": \"(?:CT9716(?:-B)?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"CT9716(?:[);/ ]|$)\",\n \"model\": \"Revolution\"\n },\n {\n \"regex\": \"CT9716-B(?:[);/ ]|$)\",\n \"model\": \"Revolution HD\"\n }\n ]\n },\n \"How\": {\n \"regex\": \"(?:HT-705XS|705-G Go|1001-G Go)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(HT-705XS)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(1001-G Go)(?:[);/ ]|$)\",\n \"model\": \"HT-1001G Go Kids\"\n },\n {\n \"regex\": \"(705-G Go)(?:[);/ ]|$)\",\n \"model\": \"HT-$1\"\n }\n ]\n },\n \"Multilaser\": {\n \"regex\": \"(?:Multilaser[ _](?:[FEGH])(?:[_ ](?:Pro|Max|Lite))?|MS50[LGX]|M7[_-]3G[_-]PLUS|MS5\\\\.V2|MS45S_A6|ML([02]1|12)-M7s[- ]?Quad-?Core| ML01-M7-SD|MS45S|MS50S|MS60[XZ]|M7SQC_Plus|MS80X|MS40[GS]|MS55M|MS70|M7-3G QUAD CORE|M7sLite|MS50L_4G|MS60F(?:_PLUS)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Multilaser[ _]G[_ ]Pro(?:[);/ ]|$)\",\n \"model\": \"G Pro\"\n },\n {\n \"regex\": \"Multilaser[ _]F[_ ]Pro(?:[);/ ]|$)\",\n \"model\": \"F Pro\"\n },\n {\n \"regex\": \"Multilaser[ _]G[_ ]Max(?:[);/ ]|$)\",\n \"model\": \"G Max\"\n },\n {\n \"regex\": \"Multilaser[ _]G(?:[);/ ]|$)\",\n \"model\": \"G\"\n },\n {\n \"regex\": \"Multilaser[ _]E[_ ]Lite(?:[);/ ]|$)\",\n \"model\": \"E Lite\"\n },\n {\n \"regex\": \"Multilaser[ _]([FEH])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MS60F_PLUS(?:[);/ ]|$)\",\n \"model\": \"MS60F Plus\"\n },\n {\n \"regex\": \"(MS50[LGX]|MS45S_A6|MS40[GS]|MS55M|MS60F|MS70|MS60[XZ]|MS45S|MS80X|MS50L_4G|MS50S|MS5\\\\.V2)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"M7[_-]3G[_-]PLUS(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"M7 3G Plus\"\n },\n {\n \"regex\": \"M7SQC_PLUS(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"M7SQC Plus\"\n },\n {\n \"regex\": \"M7-3G QUAD CORE(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"M7 3G Quad Core\"\n },\n {\n \"regex\": \"ML([02]1|12)-M7s[- ]?Quad-?Core(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"ML$1-M7s Quad Core\"\n },\n {\n \"regex\": \"M7sLite(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"M7s Lite\"\n },\n {\n \"regex\": \"ML01-M7-SD(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"ML01-M7 SD\"\n }\n ]\n },\n \"Positivo BGH\": {\n \"regex\": \"(?:T1060B|S455|Positivo (?:Twist|Ypy|Mini I)|Twist[ _](?:\\\\(2018\\\\)|2 (?:Fit|Pro)|Mini|Tab|Metal(?: 32GB)?|Max|XL|SE|[23SM]))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"S455(?:[);/ ]|$)\",\n \"model\": \"Selfie\"\n },\n {\n \"regex\": \"Twist \\\\(2018\\\\)(?:[);/ ]|$)\",\n \"model\": \"Twist (2018)\"\n },\n {\n \"regex\": \"Twist Metal 32GB(?:[);/ ]|$)\",\n \"model\": \"Twist Metal 32GB\"\n },\n {\n \"regex\": \"Twist Metal(?:[);/ ]|$)\",\n \"model\": \"Twist Metal\"\n },\n {\n \"regex\": \"Twist Max(?:[);/ ]|$)\",\n \"model\": \"Twist Max\"\n },\n {\n \"regex\": \"Twist[ _]Mini(?:[);/ ]|$)\",\n \"model\": \"Twist Mini\"\n },\n {\n \"regex\": \"Twist 2 Fit(?:[);/ ]|$)\",\n \"model\": \"Twist 2 Fit\"\n },\n {\n \"regex\": \"Twist 2 Pro(?:[);/ ]|$)\",\n \"model\": \"Twist 2 Pro\"\n },\n {\n \"regex\": \"Twist XL(?:[);/ ]|$)\",\n \"model\": \"Twist XL\"\n },\n {\n \"regex\": \"Twist SE(?:[);/ ]|$)\",\n \"model\": \"Twist SE\"\n },\n {\n \"regex\": \"(?:Positivo )?Twist ([23SM])(?:[);/ ]|$)\",\n \"model\": \"Twist $1\"\n },\n {\n \"regex\": \"(?:Positivo )Mini I(?:[);/ ]|$)\",\n \"model\": \"Mini I\"\n },\n {\n \"regex\": \"T1060B(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"T1060B\"\n },\n {\n \"regex\": \"Positivo Ypy (AB7F|AB10H|L1050E)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Ypy $1\"\n },\n {\n \"regex\": \"Twist Tab(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Twist Tab\"\n }\n ]\n },\n \"Maxtron\": {\n \"regex\": \"Maxtron[ _-](V[327]|S[89]|T1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Maxtron[ _-](V[327]|S[89])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Maxtron[ _-](T1)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Philco\": {\n \"regex\": \"PHILCO |(PCS01|PH350B|PTB7R|PTB7PAP_PTB7PAB_PTB7PAR)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(PCS01|PH350B)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(PTB7R)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"PHILCO Android TV(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n {\n \"regex\": \"PTB7PAP_PTB7PAB_PTB7PAR(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"PTB7PA\"\n }\n ]\n },\n \"SEMP TCL\": {\n \"regex\": \"(?:GO[35]E|5101J|GO3C(?: Plus)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"5101J(?:[);/ ]|$)\",\n \"model\": \"L9 Plus\"\n },\n {\n \"regex\": \"GO3C Plus(?:[);/ ]|$)\",\n \"model\": \"GO! 3C Plus\"\n },\n {\n \"regex\": \"GO3C(?:[);/ ]|$)\",\n \"model\": \"GO! 3C\"\n },\n {\n \"regex\": \"(GO[35]E)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Newman\": {\n \"regex\": \"Newman[ _](P308|K1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Swipe\": {\n \"regex\": \"(Elite Sense|Elite_VR)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Owwo\": {\n \"regex\": \"(?:OWWO[ _]?(?:[1457]S|Q[78])|CARNIVAL B5)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"OWWO[ _]?([1457]S|Q[78])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"CARNIVAL B5(?:[);/ ]|$)\",\n \"model\": \"Carnival B5\"\n }\n ]\n },\n \"TD Systems\": {\n \"regex\": \"(K32DLX9HS|K40DLM8FS|K40DLX9FS)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Ravoz\": {\n \"regex\": \"RAVOZ[ _](Z5 (?:Lite|Pro)|Z[3-7]|R[478])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Tone\": {\n \"regex\": \"TONE (e19|m15|e20)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"AT&T\": {\n \"regex\": \"(?:U304AA|QS5509A|U705AA)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"U304AA(?:[);/ ]|$)\",\n \"model\": \"Radiant Core\"\n },\n {\n \"regex\": \"U705AA(?:[);/ ]|$)\",\n \"model\": \"Radiant Max\"\n },\n {\n \"regex\": \"QS5509A(?:[);/ ]|$)\",\n \"model\": \"Axia\"\n }\n ]\n },\n \"BIHEE\": {\n \"regex\": \"(ZBH-)?BIHEE\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(A1[12]|A[78]\\\\+|A[56])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Enot\": {\n \"regex\": \"Enot[ _-](E102|J101)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Kooper\": {\n \"regex\": \"Kooper-mobile-W502(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Mobile W502\"\n },\n \"Lesia\": {\n \"regex\": \"ANOVA A5(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Anova A5\"\n },\n \"Anry\": {\n \"regex\": \"ANRY-(RS10|[SX]20)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Tinai\": {\n \"regex\": \"Tinai (K[12])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Winds\": {\n \"regex\": \"NOTE GRACE V(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Note Grace V\"\n },\n \"Asano\": {\n \"regex\": \"32LF7130S(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"32LF7130S 32.0\\\"\"\n },\n \"Phonemax\": {\n \"regex\": \"PHONEMAX[_ ](Saturn(?:[_ ]X)?|Mars|Venus X)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"PHONEMAX[_ ]Saturn[_ ]X(?:[);/ ]|$)\",\n \"model\": \"Saturn X\"\n },\n {\n \"regex\": \"PHONEMAX[_ ]Saturn(?:[);/ ]|$)\",\n \"model\": \"Saturn\"\n },\n {\n \"regex\": \"PHONEMAX[_ ]Mars(?:[);/ ]|$)\",\n \"model\": \"Mars\"\n },\n {\n \"regex\": \"PHONEMAX[_ ]Venus X(?:[);/ ]|$)\",\n \"model\": \"Venus X\"\n }\n ]\n },\n \"Vipro\": {\n \"regex\": \"VIPRO(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"VIPRO PRO2X(?:[);/ ]|$)\",\n \"model\": \"Pro 2X\"\n },\n {\n \"regex\": \"VIPRO PRO[ _-]?([0-9])(?:[);/ ]|$)\",\n \"model\": \"Pro $1\"\n }\n ]\n },\n \"OzoneHD\": {\n \"regex\": \"Ozone HD|OzoneHD[ _](T2 WiFi|4K(?: TV)?|Fun)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Kzen\": {\n \"regex\": \"(?:Ureki_U1|Victor V1|DART KZ07)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Ureki_U1\",\n \"model\": \"Ureki U1\"\n },\n {\n \"regex\": \"Victor V1\",\n \"model\": \"Victor V1\"\n },\n {\n \"regex\": \"DART KZ07\",\n \"device\": \"tablet\",\n \"model\": \"Dart KZ07\"\n }\n ]\n },\n \"Melrose\": {\n \"regex\": \"MELROSE_(?:S9|2019)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MELROSE_S9(?:[);/ ]|$)\",\n \"model\": \"S9\"\n },\n {\n \"regex\": \"MELROSE_2019(?:[);/ ]|$)\",\n \"model\": \"2019 Ultra Slim 3.4\\\"\"\n }\n ]\n },\n \"Crony\": {\n \"regex\": \"CRONY-7021(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"7021\"\n },\n \"Takara\": {\n \"regex\": \"(MID211H)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Tronsmart\": {\n \"regex\": \"(Orion R68G|Draco AW80|Draco H3|Vega S95_(?:Meta|Pro|Telos))(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Amigoo\": {\n \"regex\": \"AMIGOO (R300|R9 Max|M1 Max|X15)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Lumigon\": {\n \"regex\": \"Lumigon[ _](T3)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Neomi\": {\n \"regex\": \"NEO[ ]?(90[689])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Neo $1\"\n },\n \"Eltex\": {\n \"regex\": \"(?:NV5(?:01|10)WAC|NV501|NV510WB)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"NV5(01|10)WAC(?:[);/ ]|$)\",\n \"model\": \"NV-5$1-Wac\"\n },\n {\n \"regex\": \"NV501(?:[);/ ]|$)\",\n \"model\": \"NV-501\"\n },\n {\n \"regex\": \"NV510WB(?:[);/ ]|$)\",\n \"model\": \"NV-510-WB\"\n }\n ]\n },\n \"Senkatel\": {\n \"regex\": \"Senkatel[ _](T1009|T8002|T701[12]|T9702)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Bobarry\": {\n \"regex\": \"(?:K10[ ]?SE)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"K10 SE\"\n },\n \"Wortmann\": {\n \"regex\": \"TERRA[ _]PAD[ _](100[45])(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Terra Pad $1\"\n },\n \"BB Mobile\": {\n \"regex\": \"Techno[-_ ](8\\\\.0|9\\\\.7|TQ863Q|X595BT|S700BF|I700AJ|10.1 LTE TQ060X|7.0 LTE TQ763I|I785AP|I101BI)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Techno[_ ]S700BF(?:[);/ ]|$)\",\n \"model\": \"Techno 7.0\\\" Pioneer LTE S700BF\"\n },\n {\n \"regex\": \"Techno[_ ]10.1 LTE TQ060X(?:[);/ ]|$)\",\n \"model\": \"Techno 10.0\\\" LTE TQ060X\"\n },\n {\n \"regex\": \"Techno[_ ]TQ863Q(?:[);/ ]|$)\",\n \"model\": \"Techno 8.0\\\" Poplar LTE TQ863Q\"\n },\n {\n \"regex\": \"Techno[_ ]I700AJ(?:[);/ ]|$)\",\n \"model\": \"Techno 7.0\\\" Mozg LTE I700AJ\"\n },\n {\n \"regex\": \"Techno[-_ ]I785AP(?:[);/ ]|$)\",\n \"model\": \"Techno 7.85\\\" Mozg I785AP\"\n },\n {\n \"regex\": \"Techno[-_ ]I101BI(?:[);/ ]|$)\",\n \"model\": \"Techno 10.1\\\" Mozg I101BI\"\n },\n {\n \"regex\": \"Techno[_ ]7.0 LTE TQ763I(?:[);/ ]|$)\",\n \"model\": \"Techno 7.0\\\" Kalash LTE TQ763I\"\n },\n {\n \"regex\": \"Techno[_ ](9\\\\.7|8\\\\.0) 3G(?:[);/ ]|$)\",\n \"model\": \"Techno $1\\\" 3G\"\n },\n {\n \"regex\": \"Techno[_ ](?:X595BT)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Techno Spark 3G X595BT\"\n }\n ]\n },\n \"2E\": {\n \"regex\": \"(?:E500A_2019|2E E450 2018)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"E500A_2019(?:[);/ ]|$)\",\n \"model\": \"E500A (2019)\"\n },\n {\n \"regex\": \"2E E450 2018(?:[);/ ]|$)\",\n \"model\": \"E450 (2018)\"\n }\n ]\n },\n \"Billion\": {\n \"regex\": \"Capture\\\\+(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Capture Plus\"\n },\n \"Tele2\": {\n \"regex\": \"Tele2[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Tele2[ _](Mi[dn]i)[ _]1.1(?:[);/ ]|$)\",\n \"model\": \"$1 1.1\"\n },\n {\n \"regex\": \"Tele2[ _]Midi[ _]2.0(?:[);/ ]|$)\",\n \"model\": \"Midi 2.0\"\n },\n {\n \"regex\": \"Tele2[ _]((?:Maxi|Midi)(?:[_ ](?:Plus|LTE))?)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Tele2[ _](Mi[dn]i)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Alfawise\": {\n \"regex\": \"(?:Alfawise (?:A9)|(?:A95X_R1))(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(A95X_R1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Alfawise (A9)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Klipad\": {\n \"regex\": \"KLIPAD_|(?:KL-V905|KL4889|KL9878|7589AN)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:KLIPAD_)?(V355B?|KL600|KL-V905)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(KL4889|7589AN|KL9878)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"SQOOL\": {\n \"regex\": \"SQOOL-V(41?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"V$1\"\n },\n \"TurboKids\": {\n \"regex\": \"Turbokids[-_ ]?(TMNT|3G|S4)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Jinga\": {\n \"regex\": \"Jinga[-_ ]|(?:(?:Fresh|Optim)4G|Pass(?:Plus|3G)|PicassoNote|Hotz[_ ]M1|WinPRO|Touch4G|Start3G|IGO[ _]L[41]|Basco (?:L3|L[45]00|XS1|S2))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Optim4G(?:[);/ ]|$)\",\n \"model\": \"Optim 4G\"\n },\n {\n \"regex\": \"Fresh4G(?:[);/ ]|$)\",\n \"model\": \"Fresh 4G\"\n },\n {\n \"regex\": \"Hotz[_ ]M1(?:[);/ ]|$)\",\n \"model\": \"Hotz M1\"\n },\n {\n \"regex\": \"PassPlus(?:[);/ ]|$)\",\n \"model\": \"Pass Plus\"\n },\n {\n \"regex\": \"Pass3G(?:[);/ ]|$)\",\n \"model\": \"Pass 3G\"\n },\n {\n \"regex\": \"WinPRO(?:[);/ ]|$)\",\n \"model\": \"Win Pro\"\n },\n {\n \"regex\": \"Touch4G(?:[);/ ]|$)\",\n \"model\": \"Touch 4G\"\n },\n {\n \"regex\": \"Start3G(?:[);/ ]|$)\",\n \"model\": \"Start 4G\"\n },\n {\n \"regex\": \"PicassoNote(?:[);/ ]|$)\",\n \"model\": \"Picasso Note\"\n },\n {\n \"regex\": \"Jinga Iron(?:[);/ ]|$)\",\n \"model\": \"Iron\"\n },\n {\n \"regex\": \"Jinga Basco neo(?:[);/ ]|$)\",\n \"model\": \"Basco Neo\"\n },\n {\n \"regex\": \"(?:Jinga )?Basco (L3|L[45]00|XS1|S2)(?:[);/ ]|$)\",\n \"model\": \"Basco $1\"\n },\n {\n \"regex\": \"Jinga Trezor S1 Plus(?:[);/ ]|$)\",\n \"model\": \"Trezor S1 Plus\"\n },\n {\n \"regex\": \"JINGA_IGO_L2(?:[);/ ]|$)\",\n \"model\": \"IGO L2\"\n },\n {\n \"regex\": \"(?:JINGA[_ ])?IGO[_ ]([ML]1|L4)(?:[);/ ]|$)\",\n \"model\": \"IGO $1\"\n },\n {\n \"regex\": \"Jinga Trezor S1 Plus(?:[);/ ]|$)\",\n \"model\": \"Trezor S1 Plus\"\n }\n ]\n },\n \"Twoe\": {\n \"regex\": \"(?:TWOE[-_ ]E450R|F534L|F572L|E500A)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TWOE[-_ ](E450R)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(F534L|F572L|E500A)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"iTruck\": {\n \"regex\": \"iTRUCK 7 3G(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"7.0\\\" 3G\"\n },\n \"Torex\": {\n \"regex\": \"TOREX[- ](?:PS12|S18|S27)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"TOREX-(PS12)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"TOREX[- ](S18|S27)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Doffler\": {\n \"regex\": \"(24DHS54)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Oyyu\": {\n \"regex\": \"OYYUT11(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"T11 3G\"\n },\n \"Primux\": {\n \"regex\": \"Primux\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Primux_ioxphone(?:[);/ ]|$)\",\n \"model\": \"IOX Phone\"\n },\n {\n \"regex\": \"PrimuxDelta6(?:[);/ ]|$)\",\n \"model\": \"Delta 6\"\n },\n {\n \"regex\": \"PrimuxKappa(P50[01])(?:[);/ ]|$)\",\n \"model\": \"Kappa $1\"\n },\n {\n \"regex\": \"PrimuxKappa(?:[);/ ]|$)\",\n \"model\": \"Kappa\"\n },\n {\n \"regex\": \"Primux_Beta2(?:[);/ ]|$)\",\n \"model\": \"Beta 2\"\n },\n {\n \"regex\": \"Primux_?Omega([57])(?:[);/ ]|$)\",\n \"model\": \"Omega $1\"\n },\n {\n \"regex\": \"PrimuxUP(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"UP\"\n },\n {\n \"regex\": \" PrimuxZonda4(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Zonda 4\"\n },\n {\n \"regex\": \"Primux_Siroco6(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Siroco 6\"\n }\n ]\n },\n \"iMars\": {\n \"regex\": \"(?:IMARS VEGA X7|VIVI_8)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IMARS VEGA X7\",\n \"model\": \"Vega X7\"\n },\n {\n \"regex\": \"VIVI_8\",\n \"model\": \"VIVI 8\"\n }\n ]\n },\n \"Logic\": {\n \"regex\": \"LOGIC[_ ](X[135]|X4M|L5D|X5[AFT]|X60G|L61|X60_PLUS)(:?[_ ]LITE2?)?(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"LOGIC[_ ]X60_PLUS(?:[);/ ]|$)\",\n \"model\": \"X60 Plus\"\n },\n {\n \"regex\": \"LOGIC[_ ](X5|X4M)[_ ]LITE(?:[);/ ]|$)\",\n \"model\": \"$1 Lite\"\n },\n {\n \"regex\": \"LOGIC[_ ](X5)[_ ]LITE2(?:[);/ ]|$)\",\n \"model\": \"$1 Lite 2\"\n },\n {\n \"regex\": \"LOGIC[_ ](X[13]|X4M|L5D|X5[AFT]|X60G|L61)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Cloudpad\": {\n \"regex\": \"\\\\+VT(?:107C|Q007C)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"\\\\+VT(107C)\",\n \"model\": \"+VT$1\"\n },\n {\n \"regex\": \"\\\\+VTQ(007C)\",\n \"model\": \"+VTQ$1\"\n }\n ]\n },\n \"Cloudfone\": {\n \"regex\": \"(?:Thrill (?:Boost[ ]?(2|3)?|Snap|Access)|Excite Prime 2 Pro|NBA Edition)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Thrill Boost (2|3)(?:[);/ ]|$)\",\n \"model\": \"Thrill Boost $1\"\n },\n {\n \"regex\": \"Thrill Boost(?:[);/ ]|$)\",\n \"model\": \"Thrill Boost\"\n },\n {\n \"regex\": \"Thrill Snap(?:[);/ ]|$)\",\n \"model\": \"Thrill Snap\"\n },\n {\n \"regex\": \"Thrill Access(?:[);/ ]|$)\",\n \"model\": \"Thrill Access\"\n },\n {\n \"regex\": \"Excite Prime 2 Pro(?:[);/ ]|$)\",\n \"model\": \"Excite Prime 2 Pro\"\n },\n {\n \"regex\": \"NBA Edition(?:[);/ ]|$)\",\n \"model\": \"NBA Edition\"\n }\n ]\n },\n \"Vsmart\": {\n \"regex\": \"(?:Joy 1\\\\+|Active 1\\\\+|Bee 3|Active 3)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Joy 1\\\\+(?:[);/ ]|$)\",\n \"model\": \"Joy 1 Plus\"\n },\n {\n \"regex\": \"Active 1\\\\+(?:[);/ ]|$)\",\n \"model\": \"Active 1 Plus\"\n },\n {\n \"regex\": \"Bee 3(?:[);/ ]|$)\",\n \"model\": \"Bee 3\"\n },\n {\n \"regex\": \"Active 3(?:[);/ ]|$)\",\n \"model\": \"Active 3\"\n }\n ]\n },\n \"MiXzo\": {\n \"regex\": \"(?:MiXzo[ _])?(?:ME1023|ME1030|MX1037|MX1024|MX10[24]1|MX1397)([ _][34]G)?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"MiXzo[_ ]ME(1023|1030)(?:[_ ]3G)(?:[);/ ]|$)\",\n \"model\": \"ME$1 3G\"\n },\n {\n \"regex\": \"MiXzo[_ ]MX1021(?:[_ ]3G)?(?:[);/ ]|$)\",\n \"model\": \"MX1021 3G\"\n },\n {\n \"regex\": \"(?:MiXzo[ _])?MX(1037|1041|1024|1397)[ _]4G(?:[);/ ]|$)\",\n \"model\": \"MX$1 4G\"\n }\n ]\n },\n \"Openbox\": {\n \"regex\": \"Openbox (A[34](?: (?:Pro|Lite))?)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Ziox\": {\n \"regex\": \"ZIOX[_ ]|(?:Astra Viva 4G|Astra NXT Pro|Duopix F9)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ZIOX[_ ]F9[_ ]PRO(?:[);/ ]|$)\",\n \"model\": \"F9 Pro\"\n },\n {\n \"regex\": \"Astra Viva 4G(?:[);/ ]|$)\",\n \"model\": \"Astra Viva 4G\"\n },\n {\n \"regex\": \"Astra NXT Pro(?:[);/ ]|$)\",\n \"model\": \"Astra NXT Pro\"\n },\n {\n \"regex\": \"Duopix F9(?:[);/ ]|$)\",\n \"model\": \"Duopix F9\"\n }\n ]\n },\n \"iDroid\": {\n \"regex\": \"APACHE G6(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Apache G6\"\n },\n \"Aoson\": {\n \"regex\": \"aoson(?:R10[1-3]|S[78]|M707TG)(?:[_ ]?Pro)?(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"aosonR10([1-3])(?:[);/ ]|$)\",\n \"model\": \"R10$1 10.1\\\"\"\n },\n {\n \"regex\": \"aosonS7_Pro(?:[);/ ]|$)\",\n \"model\": \"S7 Pro 7.0\\\"\"\n },\n {\n \"regex\": \"aosonS7(?:[);/ ]|$)\",\n \"model\": \"S7 7.0\\\"\"\n },\n {\n \"regex\": \"aosonS8Pro(?:[);/ ]|$)\",\n \"model\": \"S8 Pro 8.0\\\"\"\n },\n {\n \"regex\": \"aoson(M707TG)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"FireFly Mobile\": {\n \"regex\": \"(?:AURII[ _](?:Passion|Virtuoso|ULTRA|Secret Lite|AMUSE[_ ]3G|FORCE|FUSION|F8[_ ]Premium|XCITE|DELIGHT|DREAM[_ ](?:MINI|One))|SECRET_XR|INTENSE[ _](?:POWER|METAL_2|XT)|SUPER SWEET|SWEET MINI)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AURII[ _]FORCE(?:[);/ ]|$)\",\n \"model\": \"Aurii Force\"\n },\n {\n \"regex\": \"AURII[ _]DELIGHT(?:[);/ ]|$)\",\n \"model\": \"Aurii Delight\"\n },\n {\n \"regex\": \"AURII[ _]DREAM[_ ]MINI(?:[);/ ]|$)\",\n \"model\": \"Aurii Dream Mini\"\n },\n {\n \"regex\": \"AURII[ _]DREAM[_ ]One(?:[);/ ]|$)\",\n \"model\": \"Aurii Dream One\"\n },\n {\n \"regex\": \"AURII[ _]ULTRA(?:[);/ ]|$)\",\n \"model\": \"Aurii Ultra\"\n },\n {\n \"regex\": \"AURII[ _]AMUSE[_ ]3G(?:[);/ ]|$)\",\n \"model\": \"Aurii Amuse 3G\"\n },\n {\n \"regex\": \"AURII[ _]FUSION(?:[);/ ]|$)\",\n \"model\": \"Aurii Fusion\"\n },\n {\n \"regex\": \"AURII[ _]XCITE(?:[);/ ]|$)\",\n \"model\": \"Aurii xCite\"\n },\n {\n \"regex\": \"SECRET_XR(?:[);/ ]|$)\",\n \"model\": \"Aurii Secret XR\"\n },\n {\n \"regex\": \"AURII[ _]((?:Passion|Virtuoso|Secret Lite|F8[_ ]Premium))(?:[);/ ]|$)\",\n \"model\": \"Aurii $1\"\n },\n {\n \"regex\": \"INTENSE POWER(?:[);/ ]|$)\",\n \"model\": \"Intense Power\"\n },\n {\n \"regex\": \"INTENSE_XT(?:[);/ ]|$)\",\n \"model\": \"Intense XT\"\n },\n {\n \"regex\": \"INTENSE_METAL_2(?:[);/ ]|$)\",\n \"model\": \"Intense Metal 2\"\n },\n {\n \"regex\": \"SUPER SWEET(?:[);/ ]|$)\",\n \"model\": \"Super Sweet\"\n },\n {\n \"regex\": \"SWEET MINI(?:[);/ ]|$)\",\n \"model\": \"Sweet Mini\"\n }\n ]\n },\n \"i-Cherry\": {\n \"regex\": \"iCherry_?\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"iCherry[ _](C(?:25[1258]|21[16]|110|121|22[0379]|23[03])|X1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"iCherry-C256\",\n \"device\": \"tablet\",\n \"model\": \"C256 Nano 3G\"\n }\n ]\n },\n \"NextTab\": {\n \"regex\": \"TAB (A40[13]0)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Time2\": {\n \"regex\": \"(TC1050G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1 10.1\\\"\"\n },\n \"Sunstech\": {\n \"regex\": \"(TAB2323GMQC)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Hotwav\": {\n \"regex\": \"(?:Venus[_ ]X1[024569]|Cosmos[ _](?:V8_lite|V19_Plus|V2[0-3]|U2|V19|V[569])|Pearl K2|Magic Q8|Magic 5 Plus|Magic (?:[89]|1[13])|Hot[_ ]6)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Cosmos[ _]V8_lite(?:[);/ ]|$)\",\n \"model\": \"Cosmos V8 Lite\"\n },\n {\n \"regex\": \"Hot[_ ]6?(?:[);/ ]|$)\",\n \"model\": \"Hot 6\"\n },\n {\n \"regex\": \"(Venus[_ ]X1[024569]|Cosmos[ _](?:V19_Plus|V2[0-3]|U2|V19|V[569])|Pearl K2|Magic Q8|Magic 5 Plus|Magic (?:[89]|1[13]))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Tetratab\": {\n \"regex\": \"CASEBOOK_3(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Casebook 3\"\n },\n \"Dolamee\": {\n \"regex\": \"Dolamee[_ -](D[56])(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Invin\": {\n \"regex\": \"INVIN[ _-]|KM5PRO(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"INVIN[ _-](X[24]|KM[678])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"KM5PRO\",\n \"model\": \"KM5 Pro\"\n }\n ]\n },\n \"Doopro\": {\n \"regex\": \"Doopro P3(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"P3\"\n },\n \"IQM\": {\n \"regex\": \"IQM (?:picasso|vivaldi|newton)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IQM picasso(?:[);/ ]|$)\",\n \"model\": \"Picasso\"\n },\n {\n \"regex\": \"IQM vivaldi(?:[);/ ]|$)\",\n \"model\": \"Vivaldi\"\n },\n {\n \"regex\": \"IQM newton(?:[);/ ]|$)\",\n \"model\": \"Newton\"\n }\n ]\n },\n \"Nos\": {\n \"regex\": \"Nos (?:FIVE|NOVU|NEVA|Roya)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NOS FIVE(?:[);/ ]|$)\",\n \"model\": \"Five\"\n },\n {\n \"regex\": \"NOS NOVU III(?:[);/ ]|$)\",\n \"model\": \"Novu III\"\n },\n {\n \"regex\": \"NOS NOVU II(?:[);/ ]|$)\",\n \"model\": \"Novu II\"\n },\n {\n \"regex\": \"NOS NOVU(?:[);/ ]|$)\",\n \"model\": \"Novu\"\n },\n {\n \"regex\": \"NOS NEVA 80(?:[);/ ]|$)\",\n \"model\": \"Neva 80\"\n },\n {\n \"regex\": \"NOS Roya(?:[);/ ]|$)\",\n \"model\": \"Roya\"\n }\n ]\n },\n \"Accent\": {\n \"regex\": \"(?:ACCENT[_ ]NEON|FAST73G|PEARL[_ ]A[24567]|TANK_P55|CAMELEON[_ ](?:C[456]|A1)(?:[_ ]PLUS)?|Speed[- ](?:[AXYM]2|X2\\\\+))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ACCENT[_ ]NEON(?:[);/ ]|$)\",\n \"model\": \"Neon\"\n },\n {\n \"regex\": \"CAMELEON[_ ]C6[_ ]PLUS(?:[);/ ]|$)\",\n \"model\": \"Cameleon C6 Plus\"\n },\n {\n \"regex\": \"Speed[- ]([AXYM]2)(?:[);/ ]|$)\",\n \"model\": \"Speed $1\"\n },\n {\n \"regex\": \"Speed-X2\\\\+(?:[);/ ]|$)\",\n \"model\": \"Speed X2 Plus\"\n },\n {\n \"regex\": \"CAMELEON[_ ](C[456]|A1)(?:[);/ ]|$)\",\n \"model\": \"Cameleon $1\"\n },\n {\n \"regex\": \"PEARL A4 Lite(?:[);/ ]|$)\",\n \"model\": \"Pearl A4 Lite\"\n },\n {\n \"regex\": \"PEARL[_ ]A([2567])(?:[);/ ]|$)\",\n \"model\": \"Pearl A$1\"\n },\n {\n \"regex\": \"TANK_P55(?:[);/ ]|$)\",\n \"model\": \"Tank P55\"\n },\n {\n \"regex\": \"FAST73G(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"FAST7 3G\"\n }\n ]\n },\n \"Avenzo\": {\n \"regex\": \"Avenzo(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MOB4 4G(?:[);/ ]|$)\",\n \"model\": \"Mob 4 4G\"\n },\n {\n \"regex\": \"MOB4PRO 4G(?:[);/ ]|$)\",\n \"model\": \"Mob 4 Pro 4G\"\n }\n ]\n },\n \"Beelink\": {\n \"regex\": \"(?:Beelink (?:G[ST]1|LAKE I|SEA I|A1)|GTKing|GT1mini-2|GT1-mini(?:-AT)?)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Beelink (G[ST]1|LAKE I|SEA I|A1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"GT1-mini(?:-AT)?(?:[);/ ]|$)\",\n \"model\": \"GT1 Mini\"\n },\n {\n \"regex\": \"GT1mini-2(?:[);/ ]|$)\",\n \"model\": \"GT1 Mini 2\"\n },\n {\n \"regex\": \"GTKing(?:[);/ ]|$)\",\n \"model\": \"GT King\"\n }\n ]\n },\n \"MAXVI\": {\n \"regex\": \"MAXVI[ _](?:MS401)(?:[);/ ]|$)|(?:\\\\w+)?_MAXVI_\\\\w+|MS502[_ ]Orion|MS531\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"MAXVI[ _](MS401)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MS531\",\n \"model\": \"MS531 Vega\"\n },\n {\n \"regex\": \"MS502[_ ]Orion\",\n \"model\": \"MS502 Orion\"\n },\n {\n \"regex\": \"(?:\\\\w+)?MAXVI_(P11|K10|X[358]00)_\\\\w+\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"MDC Store\": {\n \"regex\": \"Prime_S(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Prime_S(?:[);/ ]|$)\",\n \"model\": \"Prime S\"\n }\n ]\n },\n \"meanIT\": {\n \"regex\": \"meanIT[ _](?:C[12]|X10|X[126]|MG430|Q[145])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"meanIT[ _]Q1 plus(?:[);/ ]|$)\",\n \"model\": \"Q1 Plus\"\n },\n {\n \"regex\": \"meanIT[ _](C[12]|X[126]|MG430|Q[145])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"meanIT[ _]X10(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"X10\"\n }\n ]\n },\n \"Kenxinda\": {\n \"regex\": \"Three[_ ]Proofings[_ ]W([5-9])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Three Proofings W$1\"\n },\n \"X-BO\": {\n \"regex\": \"X[-]?BO (V[78]|V1[01]|V[89]\\\\+)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Xgody\": {\n \"regex\": \"XGODY\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"XGODY Y17(?:[);/ ]|$)\",\n \"model\": \"Y17\"\n },\n {\n \"regex\": \"XGODY_X96(?:[);/ ]|$)\",\n \"model\": \"X96\",\n \"device\": \"tv\"\n }\n ]\n },\n \"Alcor\": {\n \"regex\": \"(Access_Q784C)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"iBrit\": {\n \"regex\": \"IBRIT_|(?:SI5[12])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IBRIT_I([57])(?:[);/ ]|$)\",\n \"model\": \"I$1\"\n },\n {\n \"regex\": \"iBRIT_POWER6(?:[);/ ]|$)\",\n \"model\": \"Power 6\"\n },\n {\n \"regex\": \"iBRIT_Speed Pro(?:[);/ ]|$)\",\n \"model\": \"Speed Pro\"\n },\n {\n \"regex\": \"SI51(?:[);/ ]|$)\",\n \"model\": \"Speed\"\n },\n {\n \"regex\": \"SI52(?:[);/ ]|$)\",\n \"model\": \"Speed Plus\"\n }\n ]\n },\n \"Ovvi\": {\n \"regex\": \"Jumbo X1\",\n \"device\": \"smartphone\",\n \"model\": \"Jumbo X1\"\n },\n \"Fero\": {\n \"regex\": \"Fero[_ ]|Royale[_ ](?:[YX]2|A1)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Fero_Y1\",\n \"model\": \"Y1\"\n },\n {\n \"regex\": \"Royale Y2 Lite\",\n \"model\": \"Royale Y2 Lite\"\n },\n {\n \"regex\": \"Royale[_ ]([YX]2|A1)\",\n \"model\": \"Royale $1\"\n },\n {\n \"regex\": \"FERO PACE\",\n \"model\": \"Pace\"\n },\n {\n \"regex\": \"Fero[ _](A4001|A450[23]|A5001|L100|Iris|Power|Mega LTE|Vibe)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ruio\": {\n \"regex\": \"Ruio[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Ruio[ _](S4)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Ruio[ _](S5)Plus(?:[);/ ]|$)\",\n \"model\": \"$1 Plus\"\n }\n ]\n },\n \"Transpeed\": {\n \"regex\": \"Transpeed_|(?:TR99 MINI\\\\+|TR99)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"TR99 MINI\\\\+\",\n \"model\": \"TR99 Mini Plus\"\n },\n {\n \"regex\": \"(?:Transpeed_)?(TR99|H616|6K)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"VVETIME\": {\n \"regex\": \"ZYVV1(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"V1\"\n },\n \"A1\": {\n \"regex\": \"A1 (?:Alpha|Alpha 20\\\\+)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"A1 Alpha 20\\\\+\",\n \"model\": \"Alpha 20 Plus\"\n },\n {\n \"regex\": \"A1 Alpha\",\n \"model\": \"Alpha\"\n }\n ]\n },\n \"Swisstone\": {\n \"regex\": \"swisstone (SD 5[13]0)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"P-UP\": {\n \"regex\": \"MD-04P(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"model\": \"Mode 1 RR\"\n },\n \"iVooMi\": {\n \"regex\": \"(?:Innelo_1|iV 505)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Innelo_1\",\n \"model\": \"Innelo 1\"\n },\n {\n \"regex\": \"iV 505\",\n \"model\": \"Me 1\"\n }\n ]\n },\n \"Pixelphone\": {\n \"regex\": \"Pixelphone S1(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"S1\"\n },\n \"Pixela\": {\n \"regex\": \"Infineum[_ ](Z4?5)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Infineum $1\"\n },\n \"Iris\": {\n \"regex\": \"(?:Vox[_ ](?:[45]S|Alpha|POP|STEEL Plus|Energy)|IS2_?Plus|IS2S|Next_P_PRO|IRS002-16)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Vox[_ ]([45])S\",\n \"model\": \"Vox $1S\"\n },\n {\n \"regex\": \"VOX Alpha Plus\",\n \"model\": \"Vox Alpha Plus\"\n },\n {\n \"regex\": \"VOX STEEL Plus\",\n \"model\": \"Vox Steel Plus\"\n },\n {\n \"regex\": \"VOX Alpha\",\n \"model\": \"Vox Alpha\"\n },\n {\n \"regex\": \"VOX Energy\",\n \"model\": \"Vox Energy\"\n },\n {\n \"regex\": \"VOX POP plus\",\n \"model\": \"Vox Pop Plus\"\n },\n {\n \"regex\": \"VOX POP Pro\",\n \"model\": \"Vox Pop Pro\"\n },\n {\n \"regex\": \"Next_P_PRO\",\n \"model\": \"Next P Pro\"\n },\n {\n \"regex\": \"IS2_?Plus\",\n \"model\": \"IS2 Plus\"\n },\n {\n \"regex\": \"IRS002-16\",\n \"model\": \"I-S6\"\n },\n {\n \"regex\": \"IS2S\",\n \"model\": \"IS2S\"\n }\n ]\n },\n \"Fonos\": {\n \"regex\": \"Fonos-(O1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Xtouch\": {\n \"regex\": \"Xtouch[ _](X10|A5)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Conquest\": {\n \"regex\": \"Conquest[-_](?:S(?:[68]|1[0126])|F2)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Conquest[-_]S([68]|1[0126])\",\n \"model\": \"S$1\"\n },\n {\n \"regex\": \"Conquest-F2\",\n \"model\": \"F2\"\n }\n ]\n },\n \"Zatec\": {\n \"regex\": \"ZATEC[_ ]|(?:[ ]WIND|ZPLAY1_2018|Zpower_(?:Plus|2018))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ZATEC[_ ]GRAVITY(?:[);/ ]|$)\",\n \"model\": \"Gravity\"\n },\n {\n \"regex\": \"[ ]WIND(?:[);/ ]|$)\",\n \"model\": \"Wind\"\n },\n {\n \"regex\": \"ZPLAY1_2018\",\n \"model\": \"Zplay (2018)\"\n },\n {\n \"regex\": \"Zpower_2018\",\n \"model\": \"Zpower (2018)\"\n },\n {\n \"regex\": \"Zpower_Plus\",\n \"model\": \"Zpower Plus\"\n }\n ]\n },\n \"Selenga\": {\n \"regex\": \"Selenga[ _](A[134])(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Starlight\": {\n \"regex\": \"Starlight|(?:My_Star_X|RIO STAR|C_Note_Pro|Star_Mix_2)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"My_Star_X\",\n \"model\": \"My Star X\"\n },\n {\n \"regex\": \"RIO STAR\",\n \"model\": \"Rio Star\"\n },\n {\n \"regex\": \"C_Note_Pro\",\n \"model\": \"C Note Pro\"\n },\n {\n \"regex\": \"Star_Mix_2\",\n \"model\": \"Star Mix 2\"\n },\n {\n \"regex\": \"Starlight_ROME_X\",\n \"model\": \"Rome X\"\n }\n ]\n },\n \"GEOFOX\": {\n \"regex\": \"GEOFOX[_](MID743)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Tinmo\": {\n \"regex\": \"TiNMO[- _](A11|K3)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Matrix\": {\n \"regex\": \"(7116-A5)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Verico\": {\n \"regex\": \"(RP-UDM0[12]A|RP-UDP05A)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Uni Pad $1\"\n },\n \"TTEC\": {\n \"regex\": \"(Magictab (?:9GX|7GE|718))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"eSTAR\": {\n \"regex\": \"eSTAR[_ ](?:Grand|GO\\\\!?|Zoom Quad|Gemini|MINI[_ ]3G|BEAUTY|MOON)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"eSTAR (Grand|GO\\\\!?) (HD Intel|IPS Intel|IPS|HD|Intel) Quad Core 3G\",\n \"model\": \"$1 $2 Quad Core 3G\"\n },\n {\n \"regex\": \"eSTAR (Zoom Quad|Gemini|GO)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"eSTAR GRAND HD quad core( [34]G)?\",\n \"model\": \"Grand HD Quad Core$1\"\n },\n {\n \"regex\": \"eSTAR GRAND\",\n \"model\": \"Grand\"\n },\n {\n \"regex\": \"eSTAR BEAUTY HD Quad core\",\n \"model\": \"Beauty HD Quad Core\"\n },\n {\n \"regex\": \"eSTAR MOON HD Quad core\",\n \"model\": \"Moon HD Quad Core 3G\"\n },\n {\n \"regex\": \"eSTAR BEAUTY 2 HD Quad core\",\n \"model\": \"Beauty 2 HD Quad Core\"\n },\n {\n \"regex\": \"eSTAR[_ ]MINI[_ ]3G\",\n \"model\": \"Mini 3G\"\n }\n ]\n },\n \"Hometech\": {\n \"regex\": \"(?:Ideal (?:10S|Tab [79])|ALFA10TB|ALFA[_ ](?:10RC|10TM?|7RS|[78]RC|7M)|HT[ _](?:7RT|8MZ))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(Ideal (?:10S|Tab 9))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"ALFA[_ ]?(10RC|10T[BM]?|7RS|[78]RC|7M)(?:[);/ ]|$)\",\n \"model\": \"ALFA $1\"\n },\n {\n \"regex\": \"Ideal Tab 7 Ips( 3G)?\",\n \"model\": \"Ideal Tab 7 IPS$1\"\n },\n {\n \"regex\": \"HT[ _](7RT|8MZ)(?:[);/ ]|$)\",\n \"model\": \"HT $1\"\n }\n ]\n },\n \"ExMobile\": {\n \"regex\": \"EX(29|45)i(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"EX $1i\"\n },\n \"Hipstreet\": {\n \"regex\": \"10DTB12(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Phoenix\"\n },\n \"Navitech\": {\n \"regex\": \"(NeoTab)[ _-]((?:S1[23]0|S125|H85|H11[05]|KID741|S9700))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1 $2\"\n },\n \"NorthTech\": {\n \"regex\": \"(NT-TP10)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"TouchPad 10.0\\\"\"\n },\n \"UNIWA\": {\n \"regex\": \"UNIWA[ _](X5)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Andowl\": {\n \"regex\": \"ANDOWL-(Q[45])(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Silelis\": {\n \"regex\": \"Silelis[ _](T-1)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Bluedot\": {\n \"regex\": \"BLUEDOT[_ ]|(?:BNT-71)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"(?:BLUEDOT[_ ])?(BNP-500)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(BNT-71)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Planet Computers\": {\n \"regex\": \"(Cosmo_Communicator)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Reach\": {\n \"regex\": \"(Allure[_ ](?:Ultra(?:[_]Curve)?|Secure|Admire|Rise))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"MobiWire\": {\n \"regex\": \"(?:Kiona|KANUNA|Halona|Kicka[_ ][45][ _]Plus|Kohana|Kosumi|KWANITA|Lonan|Hotah|Kicka 5|Kiona)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"KANUNA\",\n \"model\": \"Kanuna\"\n },\n {\n \"regex\": \"KWANITA\",\n \"model\": \"Kwanita\"\n },\n {\n \"regex\": \"(Kiona|Kicka[_ ][45][ _]Plus|Kohana|Kosumi|Lonan|Halona|Hotah|Kicka 5|Kiona)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Hezire\": {\n \"regex\": \"(HTB801)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Hurricane\": {\n \"regex\": \"Hurricane[ _]|(?:Flame_Plus)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Hurricane[ _]IGNITE\",\n \"model\": \"Ignite\"\n },\n {\n \"regex\": \"Hurricane[ _]Bolt\",\n \"model\": \"Bolt\"\n },\n {\n \"regex\": \"Hurricane[ _]VORTEX\",\n \"model\": \"Vortex\"\n },\n {\n \"regex\": \"Hurricane[ _]GIGA\",\n \"model\": \"Giga\"\n },\n {\n \"regex\": \"Flame_Plus\",\n \"model\": \"Flame Plus\"\n }\n ]\n },\n \"iSWAG\": {\n \"regex\": \"ISWAG[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ISWAG[_ ]VIPER\",\n \"model\": \"Viper\"\n },\n {\n \"regex\": \"iSWAG[_ ]Lynx\",\n \"model\": \"Lynx\"\n },\n {\n \"regex\": \"iSWAG[_ ]MANTRA\",\n \"model\": \"Mantra\"\n },\n {\n \"regex\": \"iSWAG[_ ]MEGA\",\n \"model\": \"Mega\"\n },\n {\n \"regex\": \"iSWAG[_ ]NEMESIS\",\n \"model\": \"Nemesis\"\n }\n ]\n },\n \"Reeder\": {\n \"regex\": \"(?:reeder[_ ](?:3G_Tablet|A7iC|A[78]i[_ ]Quad|A8i Q2|M8 Plus|[TM]8|M10 Plus|P11SE)|P12Curve)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"reeder[_ ](3G_Tablet|A7iC|A[78]i[_ ]Quad|A8i Q2|M8 Plus|[TM]8|M10 Plus|P11SE)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"P12Curve\",\n \"device\": \"smartphone\",\n \"model\": \"P12 Curve\"\n }\n ]\n },\n \"ELARI\": {\n \"regex\": \"KidPhone4G(?:[);/ ]|$)\",\n \"device\": \"wearable\",\n \"model\": \"KidPhone 4G\"\n },\n \"Epik One\": {\n \"regex\": \"(K501 Plus|[ ]K5(?:0[0-4]|1[01]|03T|3[456]|4[05]|73)|[ ]K60[01]|[ ]X507T|[ ]K40[56]|[ ]T700)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"K501 Plus\",\n \"model\": \"Leo Plus\"\n },\n {\n \"regex\": \"K501\",\n \"model\": \"Leo\"\n },\n {\n \"regex\": \"K500\",\n \"model\": \"Omega Lite\"\n },\n {\n \"regex\": \"K502\",\n \"model\": \"Omega\"\n },\n {\n \"regex\": \"K503T\",\n \"model\": \"Leo Turbo\"\n },\n {\n \"regex\": \"K503\",\n \"model\": \"Leo Max\"\n },\n {\n \"regex\": \"K504\",\n \"model\": \"Titan 3G\"\n },\n {\n \"regex\": \"X507T\",\n \"model\": \"Titan II\"\n },\n {\n \"regex\": \"K510\",\n \"model\": \"Bolt\"\n },\n {\n \"regex\": \"K511\",\n \"model\": \"Bolt Pro\"\n },\n {\n \"regex\": \"K534\",\n \"model\": \"Hada\"\n },\n {\n \"regex\": \"K535\",\n \"model\": \"Hada Turbo\"\n },\n {\n \"regex\": \"K545\",\n \"model\": \"Rocket\"\n },\n {\n \"regex\": \"K536\",\n \"model\": \"Royal\"\n },\n {\n \"regex\": \"K540\",\n \"model\": \"Excalibur\"\n },\n {\n \"regex\": \"K573\",\n \"model\": \"Panther\"\n },\n {\n \"regex\": \"K600\",\n \"model\": \"Jupiter\"\n },\n {\n \"regex\": \"K601\",\n \"model\": \"Jupiter One\"\n },\n {\n \"regex\": \"K406\",\n \"model\": \"Pebble Plus\"\n },\n {\n \"regex\": \"K405\",\n \"model\": \"Pebble II\"\n },\n {\n \"regex\": \"T700\",\n \"model\": \"Palette\",\n \"device\": \"tablet\"\n }\n ]\n },\n \"Altice\": {\n \"regex\": \"Altice[ _](S62|S31|S43)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Kult\": {\n \"regex\": \"(Ambition|Beyond)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Beyond\": {\n \"regex\": \"SURVE(10|[26-8]|[12] PRO)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SURVE([12]) PRO\",\n \"model\": \"Surve $1 Pro\"\n },\n {\n \"regex\": \"SURVE(10|[26-8])\",\n \"model\": \"Surve $1\"\n }\n ]\n },\n \"BioRugged\": {\n \"regex\": \"(?:BioWolf 8-F30|BIOWOLF8F30|Ruggbo 20 Lite)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"BioWolf 8-F30|BIOWOLF8F30\",\n \"model\": \"BioWolf 8-F30\"\n },\n {\n \"regex\": \"Ruggbo 20 Lite\",\n \"model\": \"Ruggbo 20 Lite\"\n }\n ]\n },\n \"VAIO\": {\n \"regex\": \"(?:VPA051|VA-10J)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"VPA051\",\n \"model\": \"Phone A\"\n },\n {\n \"regex\": \"(VA-10J)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Spark\": {\n \"regex\": \"Spark Plus 3(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Plus 3\",\n \"model\": \"Plus 3\"\n }\n ]\n },\n \"SPC\": {\n \"regex\": \"(?:Gravity Max|GRAVITY_OCTACORE|SPC SMART LITE|SPC_ALIEN(?:_STICK)?|SPC Glow9.7)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"GRAVITY_OCTACORE\",\n \"model\": \"Gravity OctaCore\"\n },\n {\n \"regex\": \"Gravity Max\",\n \"model\": \"Gravity Max\"\n },\n {\n \"regex\": \"SPC Glow9.7\",\n \"model\": \"Glow 9.7\\\"\"\n },\n {\n \"regex\": \"SPC SMART LITE\",\n \"device\": \"smartphone\",\n \"model\": \"Smart Lite\"\n },\n {\n \"regex\": \"SPC_ALIEN_STICK\",\n \"device\": \"tv\",\n \"model\": \"Alien Stick\"\n },\n {\n \"regex\": \"SPC_ALIEN\",\n \"device\": \"tv\",\n \"model\": \"Alien\"\n }\n ]\n },\n \"Winmax\": {\n \"regex\": \"Winmax[ _](?:XC14|XC[46]|TX30)(?:[);/ ]|$)|MAUI.+Winmax_BD45\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Winmax[ _](XC14|XC[46])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Winmax[ _](TX30)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"MAUI.+Winmax_(BD45)\",\n \"device\": \"feature phone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Zebra\": {\n \"regex\": \" (TC5[16]|TC2[05]|TC75|TC7[05]x|TC700H)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Thuraya\": {\n \"regex\": \"Thuraya[ _](X5-Touch)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Bkav\": {\n \"regex\": \"Bphone[ _](B111[45]|B2017)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Bphone $1\"\n },\n \"Brandt\": {\n \"regex\": \"(BPRIME|BSTAR\\\\+?|BPRIMES|B-ONE)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Bigben\": {\n \"regex\": \"GAMETAB-ONE(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"GameTab-One\"\n },\n \"SMARTEC\": {\n \"regex\": \"(Atractivo)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Asanzo\": {\n \"regex\": \"ASANZO[ _](?:A2|S[23]|[SZ]5|S3_PLUS)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ASANZO[ _]S3[ _]PLUS\",\n \"model\": \"S3 Plus\"\n },\n {\n \"regex\": \"ASANZO[ _](A2|S[23]|[SZ]5)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Artizlee\": {\n \"regex\": \"Artizlee[ _]S9|ATL-(?:16|21(?:PLUS|[XT])?|31|26)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"ATL-21PLUS(?:[);/ ]|$)\",\n \"model\": \"ATL-21 Plus\"\n },\n {\n \"regex\": \"(ATL-(?:16|21[XT]?|31|26))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Artizlee[ _]S9\",\n \"device\": \"smartphone\",\n \"model\": \"S9\"\n }\n ]\n },\n \"Mintt\": {\n \"regex\": \"(?:Coolmintt(?:A3|M2)?|Ultramintt(?:S2)?|FRESHMINTT(?:A7|A10)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Coolmintt ?([PM]1|P3|A3|M2)(?:[);/ ]|$)\",\n \"model\": \"CoolMintt $1\"\n },\n {\n \"regex\": \"Ultramintt ?([SR]1|S2)(?:[);/ ]|$)\",\n \"model\": \"UltraMintt $1\"\n },\n {\n \"regex\": \"FRESHMINTT ?(A7|A10)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"FreshMintt $1\"\n }\n ]\n },\n \"Premio\": {\n \"regex\": \"(?:186HS2080531|186HS1050531|186HS1050232|186FT1080231|185FT5050231|PREMIO[ _](?:S50|P420|P451))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"186HS2080531\",\n \"model\": \"X1\"\n },\n {\n \"regex\": \"186HS1050531\",\n \"model\": \"P541\"\n },\n {\n \"regex\": \"185FT5050231\",\n \"model\": \"P511\"\n },\n {\n \"regex\": \"186FT1080231\",\n \"model\": \"P571\"\n },\n {\n \"regex\": \"186HS1050232\",\n \"model\": \"P630\"\n },\n {\n \"regex\": \"PREMIO[ _](S50|P420|P451)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Trifone\": {\n \"regex\": \"Passion[-_](?:1S|PRO|PLUS)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Passion-1S\",\n \"model\": \"Passion 1S\"\n },\n {\n \"regex\": \"Passion-Plus\",\n \"model\": \"Passion Plus\"\n },\n {\n \"regex\": \"Passion_Pro\",\n \"model\": \"Passion Pro\"\n }\n ]\n },\n \"Bluewave\": {\n \"regex\": \"(?:33GT HD|WV8R-M|WV8R[_-]N)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"33GT HD\",\n \"model\": \"Wave 8 HD+\"\n },\n {\n \"regex\": \"WV8R-M\",\n \"model\": \"Wave 8 Red Marshmallow\"\n },\n {\n \"regex\": \"WV8R[_-]N\",\n \"model\": \"Wave 8 Red Nougat\"\n }\n ]\n },\n \"Siragon\": {\n \"regex\": \"Siragon|(?:SP-(?:5250|5400|5050))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Siragon[_ ])?(SP-(?:5[12]50|5400|5050))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Poppox\": {\n \"regex\": \"Poppox P3\",\n \"device\": \"smartphone\",\n \"model\": \"P3\"\n },\n \"Zentality\": {\n \"regex\": \"C-723ULTRA(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"C-723 Ultra\"\n },\n \"Black Bear\": {\n \"regex\": \"(B6 Master|B6 Note X)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Fortis\": {\n \"regex\": \"(Apollo 5 Neo)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"OpelMobile\": {\n \"regex\": \" OpelMobile_(SmartJX)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"NuAns\": {\n \"regex\": \"NEO \\\\[Reloaded\\\\](?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"NEO Reloaded\"\n },\n \"Koolnee\": {\n \"regex\": \"(K1 Trio)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Sansui\": {\n \"regex\": \"Sansui[_ ]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Sansui[_ ](Switch|Play|Fun|SA4[01]|U4[56]|U3[02]|Nova)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sico\": {\n \"regex\": \"SICO[_ ](?:PLUS|e1002)|Express3-Max|SSR3-1-51-5M|SSD-1-53-13M\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"SICO[_ ]PLUS2\",\n \"model\": \"Plus 2\"\n },\n {\n \"regex\": \"SICO[_ ]PLUS\",\n \"model\": \"Plus\"\n },\n {\n \"regex\": \"SSR3-1-51-5M\",\n \"model\": \"Pro 3\"\n },\n {\n \"regex\": \"SSD-1-53-13M\",\n \"model\": \"Diamond\"\n },\n {\n \"regex\": \"SICO[_ ]e1002\",\n \"device\": \"tablet\",\n \"model\": \"E1002\"\n },\n {\n \"regex\": \"Express3-Max\",\n \"device\": \"tablet\",\n \"model\": \"Express 3 Max\"\n }\n ]\n },\n \"Smadl\": {\n \"regex\": \"Android.+(?:Safari)(?!/[\\\\d.]+)(?: Build|\\\\) AppleWebKit)|SMADL[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Android.+(?:Safari)(?!/[\\\\d.]+)(?: Build|\\\\) AppleWebKit)\",\n \"model\": \"Safari\"\n },\n {\n \"regex\": \"SMADL[ _]Matri([2X])\",\n \"model\": \"Matri $1\"\n }\n ]\n },\n \"EXCEED\": {\n \"regex\": \"(EX7SL?4|EX10S4)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Tymes\": {\n \"regex\": \"Tymes[ _](V5)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Solone\": {\n \"regex\": \"SOLONE|(?:E1457|W145[02])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"E1457\",\n \"model\": \"Earth Iron E1457\"\n },\n {\n \"regex\": \"W1450\",\n \"model\": \"Wind Breeze W1450\"\n },\n {\n \"regex\": \"W1452\",\n \"model\": \"Wind Air W1452\"\n },\n {\n \"regex\": \"SOLONE A47\",\n \"model\": \"SL-A47\"\n },\n {\n \"regex\": \"SOLONE[ _]Elite[ _]L5501\",\n \"model\": \"Elite L5501\"\n },\n {\n \"regex\": \"SOLONE[ _]SUMO[_ ]S5001\",\n \"model\": \"Sumo S5001\"\n },\n {\n \"regex\": \"SOLONE[ _](SL-K40|S5002)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"FarEasTone\": {\n \"regex\": \"Smart ?(601|550|50[59])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Smart $1\"\n },\n \"Smailo\": {\n \"regex\": \"Smailo_(2GO)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Colors\": {\n \"regex\": \"(?:Colors[ _](S(?:[19]|11)|P70|P[456]5|P32|E15|P50 Plus)|Pride_1A|P52_Pride5C|P90_Pride5X)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Pride_1A(?:[);/ ]|$)\",\n \"model\": \"Pride 1A\"\n },\n {\n \"regex\": \"P52_Pride5C(?:[);/ ]|$)\",\n \"model\": \"Pride 5C\"\n },\n {\n \"regex\": \"P90_Pride5X(?:[);/ ]|$)\",\n \"model\": \"Pride 5X\"\n },\n {\n \"regex\": \"Colors[ _](S(?:[19]|11)|P70|E15|P[456]5|P32|P50 Plus)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Honeywell\": {\n \"regex\": \"(EDA50K?|EDA70|EDA51)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"ScanPal $1\"\n },\n \"Electroneum\": {\n \"regex\": \"electroneum(M1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"High Q\": {\n \"regex\": \"(ELT070[46]H|ELT0802H)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Pluzz\": {\n \"regex\": \"Pluzz[_-](Z552|PL5[05]10|PL4010|PL501[46]|Elite_Dual)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"IKU Mobile\": {\n \"regex\": \"(Powerful_K55i|Curvy C50L)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"IKI Mobile\": {\n \"regex\": \"(?:GO5_55|BLESS_GO55|BLESSPLUS|KF4Go|KF5bless)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GO5_55\",\n \"model\": \"Go 5.5\\\"\"\n },\n {\n \"regex\": \"BLESS_GO55\",\n \"model\": \"Bless Go 5.5\\\"\"\n },\n {\n \"regex\": \"BLESSPLUS\",\n \"model\": \"Bless Plus\"\n },\n {\n \"regex\": \"(KF4Go|KF5bless)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"CG Mobile\": {\n \"regex\": \"(?:CG_OMEGA6|Omega (?:[38])|CG_EON_Blaze_Pro|CG\\\\|EON Blaze GOLD)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Omega ([38])(?:[);/ ]|$)\",\n \"model\": \"Omega $1\"\n },\n {\n \"regex\": \"CG_OMEGA6(?:[);/ ]|$)\",\n \"model\": \"Omega 6\"\n },\n {\n \"regex\": \"CG_EON_Blaze_Pro(?:[);/ ]|$)\",\n \"model\": \"EON Blaze Pro\"\n },\n {\n \"regex\": \"CG\\\\|EON Blaze GOLD(?:[);/ ]|$)\",\n \"model\": \"EON Blaze Gold\"\n }\n ]\n },\n \"IUNI\": {\n \"regex\": \"IUNI[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"IUNI[ _](U3|i1|N1)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ZH&K\": {\n \"regex\": \"(?:ODYSSEY O2|ODYSSEY RANGE)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ODYSSEY O2\",\n \"model\": \"Odyssey O2\"\n },\n {\n \"regex\": \"ODYSSEY RANGE\",\n \"model\": \"Odyssey Range\"\n }\n ]\n },\n \"Ordissimo\": {\n \"regex\": \"(LeNumero1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Necnot\": {\n \"regex\": \"(M002[DGQK]-2|M002N|M002N-3T|M002W-2T|6M-3T)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Einstein\": {\n \"regex\": \"Einstein(T3)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"AfriOne\": {\n \"regex\": \"(CYGNUSX?|Gravity Z2|ChampionPro)(?:[);/ ]|$)\",\n \"device\": \"phablet\",\n \"models\": [\n {\n \"regex\": \"CYGNUSX(?:[);/ ]|$)\",\n \"model\": \"Cygnus X\"\n },\n {\n \"regex\": \"CYGNUS(?:[);/ ]|$)\",\n \"model\": \"Cygnus\"\n },\n {\n \"regex\": \"Gravity Z2(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Gravity Z2\"\n },\n {\n \"regex\": \"ChampionPro(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Champion Pro\"\n }\n ]\n },\n \"Connex\": {\n \"regex\": \"(CTAB1044hn|CTAB-1044)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Connectce\": {\n \"regex\": \"(?:CP6001A)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Connect Core 6\"\n },\n \"Clementoni\": {\n \"regex\": \"(?:CLEMPAD[_ ](?:6_XL|HR_Plus|HR|[68]|7_S|201[89])|ClemPhone_7|MFC_(?:2018|8))(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"CLEMPAD_(201[89])\",\n \"model\": \"Clempad ($1)\"\n },\n {\n \"regex\": \"MFC_2018\",\n \"model\": \"Clempad (2018)\"\n },\n {\n \"regex\": \"MFC_8\",\n \"model\": \"Clempad 8\"\n },\n {\n \"regex\": \"CLEMPAD_7_S\",\n \"model\": \"Clempad 7S\"\n },\n {\n \"regex\": \"Clempad[_ ](6_XL|HR_Plus|HR|[68])\",\n \"model\": \"Clempad $1\"\n },\n {\n \"regex\": \"ClemPhone[ _](7)\",\n \"device\": \"smartphone\",\n \"model\": \"Clemphone $1\"\n }\n ]\n },\n \"Cell-C\": {\n \"regex\": \"Cell_?C_\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Cell_C_(Summit_Plus|Fame|Evolve)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"CELLC_Evolve\",\n \"device\": \"tablet\",\n \"model\": \"Evolve\"\n }\n ]\n },\n \"VC\": {\n \"regex\": \"(?:Camellia_II|Cactus II|Maple III|Maple-II|Cactus-Pro|LavenderII|Jasmine-II)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Camellia_II|Cactus II|Maple III)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Cactus-Pro\",\n \"model\": \"Cactus Pro\"\n },\n {\n \"regex\": \"(Maple|Jasmine|Lavender)-?II(?:[);/ ]|$)\",\n \"model\": \"$1 II\"\n }\n ]\n },\n \"CellAllure\": {\n \"regex\": \"(?:Cool_Extreme_2|Earn|Fashion2Plus|Fashion[ _]C|Cool Duo|CHIC_X1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Cool_Extreme_2|Earn|Fashion[ _]C|Cool Duo)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Fashion2Plus\",\n \"model\": \"Fashion 2 Plus\"\n },\n {\n \"regex\": \"CHIC_X1\",\n \"model\": \"Chic X1\"\n }\n ]\n },\n \"Eagle\": {\n \"regex\": \"Eagle[ _](Classic Pro|Elite|Gold)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Invens\": {\n \"regex\": \"(Fighter|Eager)(?: Build|[;)])\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Chico Mobile\": {\n \"regex\": \"(?:ALTO (?:Bombo|classic|Estrella|JUEGO|SUBIR|[235])|FUEGO MAX|OJOS[ _](?:CAMBIO|NUBE|[68i]|ORO))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ALTO Bombo\",\n \"model\": \"Alto Bombo\"\n },\n {\n \"regex\": \"ALTO classic\",\n \"model\": \"Alto Classic\"\n },\n {\n \"regex\": \"ALTO Estrella\",\n \"model\": \"Alto Estrella\"\n },\n {\n \"regex\": \"ALTO JUEGO\",\n \"model\": \"Alto Juego\"\n },\n {\n \"regex\": \"ALTO SUBIR\",\n \"model\": \"Alto Subir\"\n },\n {\n \"regex\": \"ALTO ([235])\",\n \"model\": \"Alto $1\"\n },\n {\n \"regex\": \"OJOS[ _]([68i])\",\n \"model\": \"Ojos $1\"\n },\n {\n \"regex\": \"OJOS NUBE\",\n \"model\": \"Ojos Nube\"\n },\n {\n \"regex\": \"OJOS CAMBIO\",\n \"model\": \"Ojos Cambio\"\n },\n {\n \"regex\": \"OJOS ORO\",\n \"model\": \"Ojos Oro\"\n },\n {\n \"regex\": \"FUEGO MAX\",\n \"device\": \"tablet\",\n \"model\": \"Fuego Max\"\n }\n ]\n },\n \"Claresta\": {\n \"regex\": \"Claresta[ _]|(?:AirPhoneS[56]|AirPhone K6)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"AirPhone ?(S[56]|K6)\",\n \"model\": \"AirPhone $1\"\n },\n {\n \"regex\": \"Claresta (F3) PRO\",\n \"model\": \"$1 Pro\"\n },\n {\n \"regex\": \"Claresta[ _](F4)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Camfone\": {\n \"regex\": \"(?:Camfone (?:SE)|Hero[_ ](?:H5\\\\+|SE2|H9|(?:H7|XR)_Plus|SX|1[123]|SE3[ _]Max)|Honey (?:Y1|Y2s))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Hero[_ ](?:H5\\\\+|SE2|H9|(?:H7|XR)_Plus|SX|1[123]|SE3[ _]Max)|Honey (?:Y1|Y2s))(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Camfone (SE)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Bellphone\": {\n \"regex\": \"Bp100 X-Plus(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"BP 100 X-Plus\"\n },\n \"Gini\": {\n \"regex\": \"Gini[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Gini[ _]W(7)\",\n \"model\": \"W$1\"\n },\n {\n \"regex\": \"Gini[ _]n(8)\",\n \"model\": \"N$1\"\n },\n {\n \"regex\": \"Gini[ _]s5Pro\",\n \"model\": \"S5 Pro\"\n },\n {\n \"regex\": \"Gini[ _]Tab[ _](V[78])\",\n \"device\": \"tablet\",\n \"model\": \"Tab $1\"\n }\n ]\n },\n \"MIVO\": {\n \"regex\": \"(Caryota [1245789]|Jazz J[13] 2018)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(Caryota [1245789])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Jazz (J[13]) 2018\",\n \"model\": \"Jazz $1 (2018)\"\n }\n ]\n },\n \"Jesy\": {\n \"regex\": \"Jesy_(J7)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Teknosa\": {\n \"regex\": \"Preo[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Preo Teknosa P1\",\n \"model\": \"Preo P1\"\n },\n {\n \"regex\": \"Preo[ _]P([23])\",\n \"model\": \"Preo P$1\"\n }\n ]\n },\n \"Hyve\": {\n \"regex\": \"(?:Pryme 01|ST01)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Pryme 01\",\n \"model\": \"Pryme 01\"\n },\n {\n \"regex\": \"ST01\",\n \"model\": \"Storm ST01\"\n }\n ]\n },\n \"EWIS\": {\n \"regex\": \"OCTA T720Q(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Octa T720Q\"\n },\n \"Leader Phone\": {\n \"regex\": \"(Vyper|N-5[07]|N-45)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"N-45 light\",\n \"model\": \"N-45 Light\"\n },\n {\n \"regex\": \"(Vyper|N-5[07]|N-45)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Cavion\": {\n \"regex\": \"(?:Cavion[_ ](?:Solid[_ ]4[\\\\._]5|Base[ _](?:7|7_3G_Silver|5\\\\.0|10|7.2 Quad)|10_3GRQ)|Cavion7.1quad)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Cavion[_ ]Solid[_ ]4[\\\\._]5\",\n \"model\": \"Solid 4.5\\\"\"\n },\n {\n \"regex\": \"Cavion BASE 5.0\",\n \"model\": \"Base 5.0\\\"\"\n },\n {\n \"regex\": \"CAVION_10_3GRQ\",\n \"device\": \"tablet\",\n \"model\": \"Base 10 3GR Quad\"\n },\n {\n \"regex\": \"Cavion(?:7.1quad)\",\n \"device\": \"tablet\",\n \"model\": \"Base 7.1\\\" Quad\"\n },\n {\n \"regex\": \"Cavion Base 7.2 Quad\",\n \"device\": \"tablet\",\n \"model\": \"Base 7.2\\\" Quad\"\n },\n {\n \"regex\": \"Cavion Base 10\",\n \"device\": \"tablet\",\n \"model\": \"Base 10\"\n },\n {\n \"regex\": \"Cavion Base 7 Dual\",\n \"device\": \"tablet\",\n \"model\": \"Base 7.0\\\" Dual\"\n },\n {\n \"regex\": \"Cavion Base 7 Quad\",\n \"device\": \"tablet\",\n \"model\": \"Base 7.0\\\" Quad\"\n },\n {\n \"regex\": \"Cavion_Base_7_3G_Silver\",\n \"device\": \"tablet\",\n \"model\": \"Base 7.0\\\" 3G Silver\"\n }\n ]\n },\n \"GLX\": {\n \"regex\": \"GLX (?:Aria|Dorna|Taban|Shine|Spark|ASA)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"GLX ASA\",\n \"model\": \"Asa\"\n },\n {\n \"regex\": \"GLX (Aria|Taban|Shine|Spark)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"GLX (Dorna)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Seeken\": {\n \"regex\": \"Seeken[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Seeken[_ -](SG1|SJ1)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Seeken[_ -](ST-101)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Jivi\": {\n \"regex\": \"(?:Revolution TnT3|Xtreme_(?:[37]|3x)|Xtreme (?:XT84|XT309 Plus|1))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Revolution (TnT3)\",\n \"model\": \"Revolution $1\"\n },\n {\n \"regex\": \"Xtreme (XT84)\",\n \"model\": \"Xtreme Klick $1\"\n },\n {\n \"regex\": \"Xtreme (XT309) Plus\",\n \"model\": \"Xtreme View Pro $1Plus\"\n },\n {\n \"regex\": \"Xtreme[ _]([137]|3x)(?:[);/ ]|$)\",\n \"model\": \"Xtreme $1\"\n }\n ]\n },\n \"Winnovo\": {\n \"regex\": \"Winnovo[ _]\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Winnovo[ _](M866|M798|VTab|750[PK])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Winnovo[ _](K5[46]|K43)[a-z]{2}\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n }\n ]\n },\n \"WE\": {\n \"regex\": \"WE (A[15]0|B3|F[12]0|E[12]|L[3469]|R[34]|V[34]|S1|X[13]|T1)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Trio\": {\n \"regex\": \"Trio V51 DT(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"V51DT\"\n },\n \"Seuic\": {\n \"regex\": \"(AUTOID9N)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Centric\": {\n \"regex\": \"(?:Centric[- ]CM(?:5001|33[23]1|3321Plus)|CM4331)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Centric[- ])?CM5001\",\n \"model\": \"A1\"\n },\n {\n \"regex\": \"(?:Centric[- ])?CM3321Plus\",\n \"model\": \"P1 Plus\"\n },\n {\n \"regex\": \"(?:Centric[- ])?CM3321\",\n \"model\": \"P1\"\n },\n {\n \"regex\": \"(?:Centric[- ])?CM3331\",\n \"model\": \"L3\"\n },\n {\n \"regex\": \"(?:Centric[- ])?CM4331\",\n \"model\": \"G1\"\n }\n ]\n },\n \"Kata\": {\n \"regex\": \"Kata[ _-]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Kata[ _-](C3|L1|M3s|M4|V[56])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Kata[ _-]i5-\\\\w\",\n \"model\": \"I5\"\n },\n {\n \"regex\": \"Kata-(T5)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Kata-Tmini4(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"T Mini 4\"\n },\n {\n \"regex\": \"Kata Box 2(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"Box 2\"\n }\n ]\n },\n \"Leff\": {\n \"regex\": \"Leff Shell (?:HV320WHB-N55|LC390TA2A)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Hardkernel\": {\n \"regex\": \"ODROID[-]?(C2|U2|XU[34])(?:[);/ ]|$)\",\n \"device\": \"peripheral\",\n \"model\": \"ODROID $1\"\n },\n \"Wiseasy\": {\n \"regex\": \"WISENET5(?:[);/ ]|$)\",\n \"device\": \"peripheral\",\n \"model\": \"WISENET5\"\n },\n \"Shtrikh-M\": {\n \"regex\": \"SHTRIH-SMARTPOS-F2(?:[);/ ]|$)\",\n \"device\": \"peripheral\",\n \"model\": \"Smartpos F2\"\n },\n \"BBK\": {\n \"regex\": \"([65]5|4[03]|3[29]|28)LEX[-_](81(?:27|39|45|58|61)|71(?:[23]7|4[345]|5[45]|6[368]|[57]8))[_/]([FU]?TS2C)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1LEX-$2/$3\"\n },\n \"4ife\": {\n \"regex\": \"4ife (4K Smart TV Box)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Westpoint\": {\n \"regex\": \"WESTPOINT[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(TETS-4919SM)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Wintouch\": {\n \"regex\": \"Q93S\",\n \"device\": \"tablet\",\n \"model\": \"Q93S\"\n },\n \"Aiuto\": {\n \"regex\": \"(AT702)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Seatel\": {\n \"regex\": \"Seatel\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Seatel[ _](L2|V8[AE]|T[5-8]|R6|V[89])(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Ditecma\": {\n \"regex\": \"(M1092R(?:-[12]|V[45])?)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Datamini\": {\n \"regex\": \"(K908H4G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"3GNET\": {\n \"regex\": \"(?<!NetType/)3GNET[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"3GNET[ _](U8|T800|U6s)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"3GNET[ _]T ?900\",\n \"model\": \"T900\"\n }\n ]\n },\n \"Yoka TV\": {\n \"regex\": \"KB2 PRO(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"KB2 Pro\"\n },\n \"Formuler\": {\n \"regex\": \"Formuler[ _]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Formuler[ _](Z8(?: Pro)?)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Malata\": {\n \"regex\": \"(?:Build/)?Malata[ _]?([a-z0-9]+)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"IT\": {\n \"regex\": \"IT-(?:1101S?|1101-QUAD)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"IT-1101-QUAD\",\n \"model\": \"1101 Quad\"\n },\n {\n \"regex\": \"IT-(1101S?)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Navcity\": {\n \"regex\": \"NP-752Go(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"NP-752Go\",\n \"model\": \"NP-752 Go\"\n }\n ]\n },\n \"Jiake\": {\n \"regex\": \"(?:JK(?:960|103) 3G|JK-?760)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"JK-?(760)(?:[);/ ]|$)\",\n \"model\": \"JK-$1\"\n },\n {\n \"regex\": \"JK(960|103) 3G(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"JK-$1 3G\"\n }\n ]\n },\n \"iQ&T\": {\n \"regex\": \"(IFoo (?:U200|H55))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Mantra\": {\n \"regex\": \"(MFSTAB(?:_74G)?)(?:[);/ ]|$)\",\n \"device\": \"peripheral\",\n \"model\": \"$1\"\n },\n \"Datalogic\": {\n \"regex\": \"(?:MEMOR 10)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Memor 10\"\n },\n \"Naomi Phone\": {\n \"regex\": \"NAOMIPHONE Ambar(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Ambar\"\n },\n \"Navitel\": {\n \"regex\": \"NAVITEL[ _]\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"NAVITEL[ _](T70[07]) 3G(?:[);/ ]|$)\",\n \"model\": \"$1 3G\"\n },\n {\n \"regex\": \"NAVITEL[ _](T757)LTE(?:[);/ ]|$)\",\n \"model\": \"$1 LTE\"\n },\n {\n \"regex\": \"NAVITEL[ _](A73[0157]|A650)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"RE900 Full HD(?:[);/ ]|$)\",\n \"model\": \"RE900 Full HD\"\n }\n ]\n },\n \"Linnex\": {\n \"regex\": \"LI(22)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Li $1\"\n },\n \"Smartab\": {\n \"regex\": \"(ST1009)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"SuperTab\": {\n \"regex\": \"SuperTab(A10|K7|S7G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Suzuki\": {\n \"regex\": \"SUZUKI[ _]|(?:ECOPAD7|SUMOPad10)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"SUMOPAD(8100|10)(?:[);/ ]|$)\",\n \"model\": \"SumoPad $1\"\n },\n {\n \"regex\": \"ECOPAD7\",\n \"model\": \"ECOPad 7\"\n }\n ]\n },\n \"Philips\": {\n \"regex\": \"Philips|AND1E(?:[);/ ]|$)|NETTV/|PI3210G|TLE(821L|722G)|TPM1[79]1E|70PUH6774_96|QM16[134]E|Xenium S[25]66|S397|W5510\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"(?:Philips[_ ])?Xenium[ _](S[25]66|V787)(?:[);/ ]|$)\",\n \"model\": \"Xenium $1\"\n },\n {\n \"regex\": \"(?:Philips[_ ])?(S397|W5510)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"AND1E(?: TV)?(?:[);/ ]|$)\",\n \"model\": \"Android TV\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(PI3210G)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(TPM1[79]1E)\",\n \"model\": \"$1\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(QM16[134]E)\",\n \"model\": \"$1\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(70PUH6774)_96\",\n \"model\": \"$1/96 4K UHD\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(TLE821L)(?:[);/ ]|$)\",\n \"model\": \"$1 4G LTE\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"(TLE722G)(?:[);/ ]|$)\",\n \"model\": \"$1\",\n \"device\": \"tablet\"\n },\n {\n \"regex\": \"Philips, BDP([0-9]{4})\",\n \"model\": \"Blu-ray Player (BDP$1)\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"Philips, ([a-z0-9-]+)\",\n \"model\": \"$1\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"(NETTV/[0-9\\\\.]{5})\",\n \"model\": \"NetTV Series\",\n \"device\": \"tv\"\n },\n {\n \"regex\": \"Philips-FISIO ([a-z0-9]+)\",\n \"model\": \"Fisio $1\"\n },\n {\n \"regex\": \"Philips[ _-]?([a-z0-9\\\\-@]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"INCAR\": {\n \"regex\": \"(KZCAR)(?:[);/ ]|$)\",\n \"device\": \"car browser\",\n \"model\": \"$1\"\n },\n \"FaRao Pro\": {\n \"regex\": \"(FTRW100)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"Nabi\": {\n \"regex\": \"(?:DMTAB-(?:IN08A|NV08B|NV2[04]A)|NBTY07SMKG|NBFP07PMKG|SNB02-NV7A|NABI2-NV7A)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"DMTAB-(?:IN08A|NV08B)\",\n \"model\": \"Dream Tab HD 8.0\\\"\"\n },\n {\n \"regex\": \"DMTAB-NV(2[04])A\",\n \"model\": \"Big Tab HD $1.0\\\"\"\n },\n {\n \"regex\": \"NBTY07SMKG\",\n \"model\": \"Barbie Tab 7.0\\\"\"\n },\n {\n \"regex\": \"NBFP07PMKG\",\n \"model\": \"Fisher Price Learning Tab 7.0\\\"\"\n },\n {\n \"regex\": \"SNB02-NV7A\",\n \"model\": \"2S Tab\"\n },\n {\n \"regex\": \"NABI2-NV7A\",\n \"model\": \"2 Tab\"\n }\n ]\n },\n \"StrawBerry\": {\n \"regex\": \"StrawBerry[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"StrawBerry[ _](SX|QX15)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Gresso\": {\n \"regex\": \"Gresso[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Gresso[ _]Regal(?:[);/ ]|$)\",\n \"model\": \"Regal\"\n }\n ]\n },\n \"Pendoo\": {\n \"regex\": \"Pendoo|A5X MAX(?:[\\\\.-]\\\\w+)?\\\\.01\\\\.d4\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Pendoo ?(T95Z|X10) PLUS\",\n \"model\": \"$1 Plus\"\n },\n {\n \"regex\": \"Pendoo ?X8PRO+\",\n \"model\": \"X8 Pro+\"\n },\n {\n \"regex\": \"Pendoo[ \\\\.]?(X9[29])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"pendoo mini\",\n \"model\": \"Mini\"\n },\n {\n \"regex\": \"A5X MAX(?:[\\\\.-]\\\\w+)?\\\\.01\\\\.d4\",\n \"model\": \"A5X Max\"\n }\n ]\n },\n \"PiPO\": {\n \"regex\": \"Pipo[_ ]|PipoM9Pro\",\n \"device\": \"tablet\",\n \"models\": [\n {\n \"regex\": \"Pipo[_ ]([TP]9)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"PipoM9Pro\",\n \"model\": \"M9 Pro\"\n },\n {\n \"regex\": \"PIPO[_ ](X10|X9S)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Engel\": {\n \"regex\": \"(EN1007Q)plus(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1 Plus\"\n },\n \"Genesis\": {\n \"regex\": \"(SK-Mtek GT730[15])(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"InfoKit\": {\n \"regex\": \"(TVB-906X)(?:[);/ ]|$)\",\n \"device\": \"tv\",\n \"model\": \"$1\"\n },\n \"Blloc\": {\n \"regex\": \"(Zero18)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Huskee\": {\n \"regex\": \"VULKANO(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Vulkano\"\n },\n \"SOLE\": {\n \"regex\": \"SOLE[_ ]POP[_ ]S([45]0)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Pop S$1\"\n },\n \"SOLO\": {\n \"regex\": \"SOLO[_ ](Aspire(?: M)?)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"OINOM\": {\n \"regex\": \"OINOM[_ ](V9D|V7H|V[679])(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"Singtech\": {\n \"regex\": \"Singtech|(?:Sapphire[_ ](?:H50S|H7S?|H90))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Sapphire[_ ](H50S|H7S?|H90)(?:[);/ ]|$)\",\n \"model\": \"Sapphire $1\"\n },\n {\n \"regex\": \"Singtech[ _](Q2|S1)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sunny\": {\n \"regex\": \"(SS4G9 Mira|SS4G7 Sole|SS4G1 Luna|SS4G8 Nora|SS4G6 Lola)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"TEENO\": {\n \"regex\": \"TEENO\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"TEENO[_ ](S9|A1|S11)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"v-mobile\": {\n \"regex\": \"Vmobile[ _]\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Vmobile[ _](J7)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Vmobile XS Pro(?:[);/ ]|$)\",\n \"model\": \"XS Pro\"\n }\n ]\n },\n \"OASYS\": {\n \"regex\": \"(TEG9300)(?:[);/ ]|$)\",\n \"device\": \"peripheral\",\n \"model\": \"$1\"\n },\n \"Aspera\": {\n \"regex\": \"ASPERA|(?:Wren)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"ASPERA[ _](R5h|RT3|A4[02]|A50)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Wren(?:[);/ ]|$)\",\n \"model\": \"Wren\"\n }\n ]\n },\n \"Vision Touch\": {\n \"regex\": \"Vision ?Touch\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"VisionTouchLife\",\n \"model\": \"Life\"\n },\n {\n \"regex\": \"Inspire\",\n \"model\": \"Inspire\"\n }\n ]\n },\n \"NOBUX\": {\n \"regex\": \"SMART_VOLT_NX5(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Smart Volt NX5\"\n },\n \"Hitech\": {\n \"regex\": \"(Amaze[ _](?:S2_4G|S[56] 4G|S1|S[56](?: Plus)?))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"$1\"\n },\n \"F150\": {\n \"regex\": \"Bison2021(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"B2021\"\n },\n \"BilimLand\": {\n \"regex\": \"BilimBook mini(?:[);/ ]|$)\",\n \"device\": \"desktop\",\n \"model\": \"BilimBook Mini\"\n },\n \"Greentel\": {\n \"regex\": \"X1_Light_Lte(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"X1_Light_Lte\",\n \"model\": \"X1 Light LTE\"\n }\n ]\n },\n \"Kyowon\": {\n \"regex\": \"(KA-E410W)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"LT Mobile\": {\n \"regex\": \"(?:LT-NOTE 10S)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"LT-NOTE 10S\",\n \"model\": \"Note 10S\"\n }\n ]\n },\n \"ONYX BOOX\": {\n \"regex\": \"KON_TIKI(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"Kon Tiki\"\n },\n \"GFive\": {\n \"regex\": \"(?:PRESIDENT_GOLD_(9|10))(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"PRESIDENT_GOLD_(9|10)\",\n \"model\": \"President Gold $1\"\n }\n ]\n },\n \"KINGZONE\": {\n \"regex\": \"KINGZONE_\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"KINGZONE_(N5)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"M-Tech\": {\n \"regex\": \"EROS 4G(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"Eros 4G\"\n },\n \"Fantec\": {\n \"regex\": \"FAN-M300H(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"model\": \"M300H\"\n },\n \"AURIS\": {\n \"regex\": \"(TB-703G)(?:[);/ ]|$)\",\n \"device\": \"tablet\",\n \"model\": \"$1\"\n },\n \"YUHO\": {\n \"regex\": \"YUHO_\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"YUHO_(O2|H2|Y[123])_PRO\",\n \"model\": \"$1 Pro\"\n },\n {\n \"regex\": \"YUHO_Vast_Plus\",\n \"model\": \"Vast Plus\"\n },\n {\n \"regex\": \"YUHO_Y1_ACE\",\n \"model\": \"Y1 Ace\"\n },\n {\n \"regex\": \"YUHO_Y1_STAR\",\n \"model\": \"Y1 Star\"\n },\n {\n \"regex\": \"YUHO_O1_LITE\",\n \"model\": \"O1 Lite\"\n },\n {\n \"regex\": \"YUHO_(Vast2?|O[12]|Y2)(?:[);/ ]|$)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"2F Mobile\": {\n \"regex\": \"(Z8PLUS|Z8POCKET)(?:[);/ ]|$)\",\n \"device\": \"smartphone\",\n \"models\": [\n {\n \"regex\": \"Z8PLUS\",\n \"model\": \"Z8 Plus\"\n },\n {\n \"regex\": \"Z8POCKET\",\n \"model\": \"Z8 Pocket\"\n }\n ]\n }\n}\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.buildModel = (model) => {\n model = model.replace(/_/g, \" \");\n model = model.replace(RegExp(\" TD$\", \"i\"), \"\");\n if (model === \"Build\")\n return \"\";\n return model;\n};\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst mobiles_json_1 = __importDefault(require(\"../../fixtures/regexes/device/mobiles.json\"));\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nconst model_1 = require(\"../../utils/model\");\nclass MobileParser {\n constructor() {\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n brand: \"\",\n model: \"\"\n };\n let resultType = \"\";\n for (const [brand, mobile] of Object.entries(mobiles_json_1.default)) {\n const match = user_agent_1.userAgentParser(mobile.regex, userAgent);\n if (!match)\n continue;\n resultType = \"device\" in mobile && mobile.device || \"\";\n result.brand = brand;\n if (\"model\" in mobile && mobile.model) {\n result.model = model_1.buildModel(variable_replacement_1.variableReplacement(mobile.model, match)).trim();\n }\n else if (\"models\" in mobile && mobile.models) {\n for (const model of mobile.models) {\n const modelMatch = user_agent_1.userAgentParser(model.regex, userAgent);\n if (!modelMatch)\n continue;\n result.model = model_1.buildModel(variable_replacement_1.variableReplacement(model.model, modelMatch)).trim();\n if (\"device\" in model && model.device) {\n resultType = model.device;\n }\n if (\"brand\" in model) {\n result.brand = model.brand || \"\";\n }\n break;\n }\n }\n break;\n }\n // Sanitize device type\n if (resultType === \"tv\") {\n result.type = \"television\";\n }\n else if (resultType === \"car browser\") {\n result.type = \"car\";\n }\n else {\n result.type = resultType;\n }\n // Sanitize device brand\n if (result.brand === \"Unknown\") {\n result.brand = \"\";\n }\n return result;\n };\n }\n}\nexports.default = MobileParser;\n", "{\n \"Airties\": {\n \"regex\": \"Airties\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Airties; ?([^);/]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ALDI NORD\": {\n \"regex\": \"ALDINORD[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"ALDI S\u00DCD\": {\n \"regex\": \"ALDISUED[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Altech UEC\": {\n \"regex\": \"Altech UEC\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Altech UEC; ?([^);/]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"AOC\": {\n \"regex\": \"AOC\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(LE43S5970-20|S50856)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"ARRIS\": {\n \"regex\": \"ARRIS[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"FS-ARS-01B\",\n \"model\": \"FS-ARS-01B\"\n }\n ]\n },\n \"Atvio\": {\n \"regex\": \"ATVIO\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"55D1620\",\n \"model\": \"55D1620\"\n }\n ]\n },\n \"BangOlufsen\": {\n \"regex\": \"Bangolufsen\",\n \"device\": \"tv\",\n \"model\": \"BeoVision\"\n },\n \"Blaupunkt\": {\n \"regex\": \"Blaupunkt_UMC[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"LC-65CUG8052E\",\n \"model\": \"LC-65CUG8052E\"\n }\n ]\n },\n \"Bush\": {\n \"regex\": \"BUSH[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Celcus\": {\n \"regex\": \"CELCUS[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Changhong\": {\n \"regex\": \"Changhong\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Changhong; ?([^);/]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"CreNova\": {\n \"regex\": \"CreNova\",\n \"device\": \"tv\",\n \"model\": \"CNV001\"\n },\n \"Digihome\": {\n \"regex\": \"DIGIHOME[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"DMM\": {\n \"regex\": \"DMM\",\n \"device\": \"tv\",\n \"model\": \"Dreambox\"\n },\n \"ELECTRONIA\": {\n \"regex\": \"ELECTRONIA[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Essentielb\": {\n \"regex\": \"ESSENTIELB[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Finlux\": {\n \"regex\": \"FINLUX[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"F&U\": {\n \"regex\": \"FU[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Fuego\": {\n \"regex\": \"FUEGO[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"GoGEN\": {\n \"regex\": \"GOGEN[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Grundig\": {\n \"regex\": \"(OWB|Grundig|Arcelik)\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Haier\": {\n \"regex\": \"(?:HHW_)?HAIER\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"LE55X7000U\",\n \"model\": \"LE55X7000U\"\n }\n ]\n },\n \"Hi-Level\": {\n \"regex\": \"HI-LEVEL[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Hisense\": {\n \"regex\": \"Hisense|Eurofins_Digital_Testing\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"50ADEVTOOL\",\n \"model\": \"50ADEVTOOL\"\n },\n {\n \"regex\": \"50A683FEVS\",\n \"model\": \"50A683FEVS\"\n },\n {\n \"regex\": \"55A6100EE\",\n \"model\": \"55A6100EE\"\n },\n {\n \"regex\": \"55U62QGAVT\",\n \"model\": \"55U62QGAVT\"\n },\n {\n \"regex\": \"50A6502EA\",\n \"model\": \"50A6502EA\"\n },\n {\n \"regex\": \"MICALIDVB6886\",\n \"model\": \"MICALIDVB6886\"\n },\n {\n \"regex\": \"(L[A-Z]{2,3}[0-9]{2}[A-Z][0-9]{3,4}[A-Z]{0,6}[0-9]?[A-Z]?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(H[A-Z]?[0-9]{2}[A-Z][0-9]{3,4}[A-Z]{0,4})\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Hitachi\": {\n \"regex\": \"Hitachi[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"49D2900\",\n \"model\": \"49D2900\"\n }\n ]\n },\n \"Horizon\": {\n \"regex\": \"HORIZON[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Hotel\": {\n \"regex\": \"HOTEL[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Humax\": {\n \"regex\": \"Humax\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(HD-FOX C|HD (FOX\\\\+|NANO)|iCord (HD\\\\+|MINI|Cable)|(CX|IR)HD-5100(C|S)|HM9503HD)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"HMS1000S\",\n \"model\": \"HMS-1000S\"\n },\n {\n \"regex\": \"Humax; ([^);/]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Hyundai\": {\n \"regex\": \"HYUNDAI[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Ikea\": {\n \"regex\": \"Ikea\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Intek\": {\n \"regex\": \"Intek\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(Vantage|VT-100|VT-1)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Inverto\": {\n \"regex\": \"Inverto\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"inverto; ([^);/]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(Volksbox Web Edition|Volksbox Essential|Volksbox II|Volksbox)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"JVC\": {\n \"regex\": \"AFTSO001|JVC[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"AFTSO001\",\n \"model\": \"4K (2019)\"\n }\n ]\n },\n \"Kalley\": {\n \"regex\": \"KALLEY[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"32D1620\",\n \"model\": \"32D1620\"\n }\n ]\n },\n \"KUBO\": {\n \"regex\": \"KUBO[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Laurus\": {\n \"regex\": \"LAURUS[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"LG\": {\n \"regex\": \"LGE\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"XU43WT180N\",\n \"model\": \"XU43WT180N\"\n },\n {\n \"regex\": \"43LJ614V-ZA\",\n \"model\": \"43LJ614V-ZA\"\n },\n {\n \"regex\": \"55SK850V-ZA\",\n \"model\": \"55SK850V-ZA\"\n },\n {\n \"regex\": \"KEY0000213F1z\",\n \"model\": \"KEY0000213F1z\"\n },\n {\n \"regex\": \"KEY0000213F\",\n \"model\": \"KEY0000213F\"\n },\n {\n \"regex\": \"KEY000000(2E|2F|3B|3F)\",\n \"model\": \"KEY000000$1\"\n },\n {\n \"regex\": \"(NetCast [0-9]{1}.[0-9]{1}|GLOBAL_PLAT3)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(OLED[0-9]{2}[A-Z0-9]{3}[A-Z]{2})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(OLED[0-9]{2}[A-Z][0-9][A-Z])\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(OLED[0-9]{2}[A-Z0-9]{2})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([0-9]{2}[A-Z]{2}[0-9]{4}[A-Z0-9]{1}[A-Z]{2})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([0-9]{2}NANO[0-9]{3}[A-Z]{2})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([0-9]{2}NANO[0-9]{2})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LGE;? ?([0-9]{2}[A-Z]{2}[0-9]{2,4}[A-Z]?)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LM21U\",\n \"model\": \"LM21U\"\n },\n {\n \"regex\": \"32LM\",\n \"model\": \"32LM\"\n }\n ]\n },\n \"Lifemaxx\": {\n \"regex\": \"Lifemaxx[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Linsar\": {\n \"regex\": \"LINSAR[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Loewe\": {\n \"regex\": \"Loewe\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"([A-Z]{2}[0-9]{3})\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Luxor\": {\n \"regex\": \"LUXOR[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Manhattan\": {\n \"regex\": \"Manhattan\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"T3\",\n \"model\": \"T3\"\n }\n ]\n },\n \"MediaTek\": {\n \"regex\": \"MTK|MediaTek;\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(MT[0-9]{4})\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Medion\": {\n \"regex\": \"Medion\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Miray\": {\n \"regex\": \"MIRAY\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"LEDM-322NIP\",\n \"model\": \"LEDM-322NIP\"\n }\n ]\n },\n \"MStar\": {\n \"regex\": \"MStar[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"([24])KTV18\",\n \"model\": \"$1KTV18\"\n }\n ]\n },\n \"MTC\": {\n \"regex\": \"MTC[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"([24])K_Android_TV_V01\",\n \"model\": \"$1K Android TV\"\n }\n ]\n },\n \"Nordmende\": {\n \"regex\": \"NORDMENDE[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Metz\": {\n \"regex\": \"Metz\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Ok\": {\n \"regex\": \"OK[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Panasonic\": {\n \"regex\": \"Panasonic\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"VIERA (201[1-9])\",\n \"model\": \"VIERA ($1)\"\n },\n {\n \"regex\": \"(DIGA [A-Z]{1}[0-9]{4})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"DIGA Webkit ([A-Z]{1}[0-9]{4})\",\n \"model\": \"DIGA $1\"\n },\n {\n \"regex\": \"SmartTV(201[89]|202[0-1])\",\n \"model\": \"Smart TV ($1)\"\n }\n ]\n },\n \"PEAQ\": {\n \"regex\": \"PEAQ\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Philips\": {\n \"regex\": \"Philips|NETTV/\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Philips[,;] ?((?! )[^),;/]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"NETTV/[0-9\\\\.]{5}\",\n \"model\": \"NetTV Series\"\n }\n ]\n },\n \"Polaroid\": {\n \"regex\": \"POLAROID[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"PROFiLO\": {\n \"regex\": \"PROFILO[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Qilive\": {\n \"regex\": \"QILIVE[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"REGAL\": {\n \"regex\": \"REGAL[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Saba\": {\n \"regex\": \"Saba[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Salora\": {\n \"regex\": \"Salora[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Samsung\": {\n \"regex\": \"Samsung|Maple_2011\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"SmartTV(201[2-9]|202[0-1]):([^);/]+)\",\n \"model\": \"$2\"\n },\n {\n \"regex\": \"SmartTV(201[2-9]|202[0-1])\",\n \"model\": \"Smart TV ($1)\"\n },\n {\n \"regex\": \"Maple_2011\",\n \"model\": \"Smart TV (2011)\"\n }\n ]\n },\n \"SCBC\": {\n \"regex\": \"SCBC[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"SCBC586\",\n \"model\": \"SCBC586\"\n },\n {\n \"regex\": \"43D1850\",\n \"model\": \"43D1850\"\n }\n ]\n },\n \"SEG\": {\n \"regex\": \"SEG[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Selevision\": {\n \"regex\": \"Selevision\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Selevision; (?:Selevision )?([^);/]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(EMC1000i)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sharp\": {\n \"regex\": \"(?:UMC-)?Sharp\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Sharp[,;] ?((?! |HbbTV)[^),;/]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(LE[0-9]{3}[A-Z]{0,3})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"LC-([^);/]+)\",\n \"model\": \"LC-$1\"\n },\n {\n \"regex\": \"BLA-43\",\n \"model\": \"BLA-43\"\n }\n ]\n },\n \"Skyworth\": {\n \"regex\": \"Sky_worth\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Sky_worth;([^);/]+)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Smart\": {\n \"regex\": \"Smart[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"Smart; ([^);/]+)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"([A-Z]{2}[0-9]{2}|ZAPPIX)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Sony\": {\n \"regex\": \"Sony\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"KDL-GR1\",\n \"model\": \"KDL-GR1\"\n },\n {\n \"regex\": \"KDL-GN([56])\",\n \"model\": \"KDL-GN$1\"\n },\n {\n \"regex\": \"BRAVIA (VH1|4K VH2)\",\n \"model\": \"BRAVIA $1\"\n },\n {\n \"regex\": \"(KDL?-?[0-9]{2}[A-Z]{1}[0-9]{4}[A-Z]{1})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(KDL?-?[0-9]{2}[A-Z]{1}[0-9]{3}[A-Z]{1})\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(KDL?-?[0-9]{2}[A-Z]{1,2}[0-9]{1,5})\",\n \"model\": \"$1\"\n }\n ]\n },\n \"SWTV\": {\n \"regex\": \"SWTV[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"SKWE20E21\",\n \"model\": \"SKWE20E21\"\n }\n ]\n },\n \"TD Systems\": {\n \"regex\": \"TDSystems[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"SmartTV(2019|2020)\",\n \"model\": \"Smart TV ($1)\"\n }\n ]\n },\n \"Technicolor\": {\n \"regex\": \"Technicolor\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"uzw4054ttg\",\n \"model\": \"UZW4054TTG\"\n }\n ]\n },\n \"Technika\": {\n \"regex\": \"TECHNIKA[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"TechniSat\": {\n \"regex\": \"TechniSat\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"((DigiCorder|MultyVision|Digit) (ISIO S|ISIO C|ISIO))\",\n \"model\": \"$1\"\n }\n ]\n },\n \"TechnoTrend\": {\n \"regex\": \"TechnoTrend\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"([A-Z]{1}-[0-9]{3})\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Techwood\": {\n \"regex\": \"Techwood[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Telefunken\": {\n \"regex\": \"Telefunken\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"TCL\": {\n \"regex\": \"TCL\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(32D1820|(?:39|55)D2900|32D2930|(?:32|43)S4900)\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Thomson\": {\n \"regex\": \"THOMSON[,]?|THOM\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(TB28D19DHS-01|T28D18SFS-01B)\",\n \"model\": \"$1 28.0\\\"\"\n },\n {\n \"regex\": \"(T32RTM5040|T32D18SFS-01B)\",\n \"model\": \"$1 32.0\\\"\"\n },\n {\n \"regex\": \"(T43FSL5031|T43D18SFS-01B)\",\n \"model\": \"$1 43.0\\\"\"\n },\n {\n \"regex\": \"(T40D18SFS-01B)\",\n \"model\": \"$1 40.0\\\"\"\n },\n {\n \"regex\": \"(T49D18SFS-01B)\",\n \"model\": \"$1 49.0\\\"\"\n },\n {\n \"regex\": \"(T55D18[SD]FS-01B)\",\n \"model\": \"$1 55.0\\\"\"\n },\n {\n \"regex\": \"40FB5426\",\n \"model\": \"40FB5426\"\n }\n ]\n },\n \"TOKYO\": {\n \"regex\": \"TOKYO[;,]\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"TOKTCLED32S\",\n \"model\": \"TOKTCLED32S\"\n }\n ]\n },\n \"Toshiba\": {\n \"regex\": \"Toshiba\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"40L2600\",\n \"model\": \"40L2600\"\n },\n {\n \"regex\": \"(([0-9]{2}|DTV_)[A-Z]{2}[0-9]{1,3})\",\n \"model\": \"$1\"\n }\n ]\n },\n \"Videoweb\": {\n \"regex\": \"videoweb|tv2n\",\n \"device\": \"tv\",\n \"models\": [\n {\n \"regex\": \"(tv2n)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"(videowebtv)\",\n \"model\": \"VideoWeb TV\"\n }\n ]\n },\n \"VOX\": {\n \"regex\": \"VOX[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"WELLINGTON\": {\n \"regex\": \"WELLINGTON[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"X.Vision\": {\n \"regex\": \"X-VISION[;,]\",\n \"device\": \"tv\",\n \"model\": \"\"\n },\n \"Vestel\": {\n \"regex\": \"(?:Vestel.+VESTEL|VESTEL;)\",\n \"device\": \"tv\",\n \"model\": \"\"\n }\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst televisions_json_1 = __importDefault(require(\"../../fixtures/regexes/device/televisions.json\"));\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nconst model_1 = require(\"../../utils/model\");\nclass TelevisionParser {\n constructor() {\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n brand: \"\",\n model: \"\"\n };\n if (!this.isHbbTv(userAgent))\n return result;\n result.type = \"television\";\n for (const [brand, television] of Object.entries(televisions_json_1.default)) {\n const match = user_agent_1.userAgentParser(television.regex, userAgent);\n if (!match)\n continue;\n result.brand = brand;\n if (\"model\" in television && television.model) {\n result.model = model_1.buildModel(variable_replacement_1.variableReplacement(television.model, match)).trim();\n }\n else if (\"models\" in television && television.models) {\n for (const model of television.models) {\n const modelMatch = user_agent_1.userAgentParser(model.regex, userAgent);\n if (!modelMatch)\n continue;\n result.model = model_1.buildModel(variable_replacement_1.variableReplacement(model.model, modelMatch)).trim();\n break;\n }\n }\n break;\n }\n return result;\n };\n this.isHbbTv = (userAgent) => {\n return user_agent_1.userAgentParser(\"HbbTV\\/([1-9]{1}(?:\\.[0-9]{1}){1,2})\", userAgent);\n };\n }\n}\nexports.default = TelevisionParser;\n", "{\n \"Tesla\": {\n \"regex\": \"(?:Tesla/[0-9.]+|QtCarBrowser)\",\n \"device\": \"car browser\",\n \"models\": [\n {\n \"regex\": \"QtCarBrowser\",\n \"model\": \"Model S\"\n },\n {\n \"regex\": \"Tesla/[0-9.]+\",\n \"model\": \"\"\n }\n ]\n },\n \"MAC AUDIO\": {\n \"regex\": \"Mac Audio Spro\",\n \"device\": \"car browser\",\n \"models\": [\n {\n \"regex\": \"Spro\",\n \"model\": \"S Pro\"\n }\n ]\n },\n \"Topway\": {\n \"regex\": \"sp9853i_1h10_vmm\",\n \"device\": \"car browser\",\n \"models\": [\n {\n \"regex\": \"sp9853i_1h10_vmm\",\n \"model\": \"TS9\"\n }\n ]\n }\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst car_browsers_json_1 = __importDefault(require(\"../../fixtures/regexes/device/car_browsers.json\"));\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass CarParser {\n constructor() {\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n brand: \"\",\n model: \"\"\n };\n for (const [brand, car] of Object.entries(car_browsers_json_1.default)) {\n const match = user_agent_1.userAgentParser(car.regex, userAgent);\n if (!match)\n continue;\n result.type = \"car\";\n result.brand = brand;\n for (const model of car.models) {\n const match = user_agent_1.userAgentParser(model.regex, userAgent);\n if (!match)\n continue;\n result.model = variable_replacement_1.variableReplacement(model.model, match).trim();\n }\n break;\n }\n return result;\n };\n }\n}\nexports.default = CarParser;\n", "{\n \"Archos\": {\n \"regex\": \"Archos.*GAMEPAD([2]?)\",\n \"device\": \"console\",\n \"model\": \"Gamepad $1\"\n },\n \"Microsoft\": {\n \"regex\": \"Xbox\",\n \"device\": \"console\",\n \"models\": [\n {\n \"regex\": \"Xbox Series X\",\n \"model\": \"Xbox Series X\"\n },\n {\n \"regex\": \"Xbox One X\",\n \"model\": \"Xbox One X\"\n },\n {\n \"regex\": \"Xbox One\",\n \"model\": \"Xbox One\"\n },\n {\n \"regex\": \"XBOX_ONE_ED\",\n \"model\": \"Xbox One S\"\n },\n {\n \"regex\": \"Xbox\",\n \"model\": \"Xbox 360\"\n }\n ]\n },\n \"Nintendo\": {\n \"regex\": \"Nintendo (([3]?DS[i]?)|Wii[U]?|Switch)\",\n \"device\": \"console\",\n \"model\": \"$1\"\n },\n \"OUYA\": {\n \"regex\": \"OUYA\",\n \"device\": \"console\",\n \"model\": \"OUYA\"\n },\n \"Sega\": {\n \"regex\": \"Dreamcast\",\n \"device\": \"console\",\n \"model\": \"Dreamcast\"\n },\n \"Sony\": {\n \"regex\": \"PlayStation (3|4 Pro|4|Portable|Vita)\",\n \"device\": \"console\",\n \"model\": \"PlayStation $1\"\n }\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst consoles_json_1 = __importDefault(require(\"../../fixtures/regexes/device/consoles.json\"));\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass ConsoleParser {\n constructor() {\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n brand: \"\",\n model: \"\"\n };\n for (const [brand, gameConsole] of Object.entries(consoles_json_1.default)) {\n const match = user_agent_1.userAgentParser(gameConsole.regex, userAgent);\n if (!match)\n continue;\n result.type = gameConsole.device;\n result.brand = brand;\n if (\"model\" in gameConsole && gameConsole.model) {\n result.model = variable_replacement_1.variableReplacement(gameConsole.model, match).trim();\n }\n else if (\"models\" in gameConsole && gameConsole.models) {\n for (const model of gameConsole.models) {\n const modelMatch = user_agent_1.userAgentParser(model.regex, userAgent);\n if (!modelMatch)\n continue;\n result.model = variable_replacement_1.variableReplacement(model.model, modelMatch).trim();\n break;\n }\n }\n break;\n }\n return result;\n };\n }\n}\nexports.default = ConsoleParser;\n", "{\n \"Acer\": {\n \"regex\": \"FBMD/(?:Aspire E5-421G|Z5WAL|One S1003);\",\n \"device\": \"desktop\",\n \"models\": [\n {\n \"regex\": \"FBMD/Aspire E5-421G;\",\n \"model\": \"Aspire E5-421G\"\n },\n {\n \"regex\": \"FBMD/Z5WAL;\",\n \"model\": \"Aspire E5-511\"\n },\n {\n \"regex\": \"FBMD/One S1003;\",\n \"model\": \"One 10\"\n }\n ]\n },\n \"Asus\": {\n \"regex\": \"FBMD/(?:K50IN|K54L|T100HAN|T103HAF|UX360CAK|X550LB|X553MA|X555LN|X556UQK);\",\n \"device\": \"desktop\",\n \"models\": [\n {\n \"regex\": \"FBMD/K50IN;\",\n \"model\": \"K50IN\"\n },\n {\n \"regex\": \"FBMD/K54L;\",\n \"model\": \"K54L\"\n },\n {\n \"regex\": \"FBMD/T100HAN;\",\n \"model\": \"Transformer Book\"\n },\n {\n \"regex\": \"FBMD/T103HAF;\",\n \"model\": \"Transformer Mini\"\n },\n {\n \"regex\": \"FBMD/UX360CAK;\",\n \"model\": \"ZenBook Flip\"\n },\n {\n \"regex\": \"FBMD/X550LB;\",\n \"model\": \"X550LB\"\n },\n {\n \"regex\": \"FBMD/X553MA;\",\n \"model\": \"X553MA\"\n },\n {\n \"regex\": \"FBMD/X555LN;\",\n \"model\": \"X555LN\"\n },\n {\n \"regex\": \"FBMD/X556UQK;\",\n \"model\": \"X556UQK\"\n }\n ]\n },\n \"Dell\": {\n \"regex\": \"FBMD/(?:Latitude E4300|Inspiron 3541|XPS 15 95[35]0);\",\n \"device\": \"desktop\",\n \"models\": [\n {\n \"regex\": \"Latitude E4300\",\n \"model\": \"Latitude E4300\"\n },\n {\n \"regex\": \"Inspiron 3541\",\n \"model\": \"Inspiron 3541\"\n },\n {\n \"regex\": \"XPS 15 9530\",\n \"model\": \"XPS 15 9530\"\n },\n {\n \"regex\": \"XPS 15 9550\",\n \"model\": \"XPS 15 9550\"\n }\n ]\n },\n \"HP\": {\n \"regex\": \"FBMD/((?:Compaq|HP) |23-f364)\",\n \"device\": \"desktop\",\n \"models\": [\n {\n \"regex\": \"Compaq Presario CQ61 Notebook PC\",\n \"model\": \"Compaq Presario CQ61\"\n },\n {\n \"regex\": \"HP Pavilion x2 Detachable\",\n \"model\": \"Pavilion x2\"\n },\n {\n \"regex\": \"HP Laptop 15-bs0xx\",\n \"model\": \"15 Laptop PC\"\n },\n {\n \"regex\": \"HP ENVY x360 Convertible 15-bp0xx\",\n \"model\": \"ENVY x360 Convertible PC\"\n },\n {\n \"regex\": \"HP EliteBook (25[67]0p)\",\n \"model\": \"EliteBook $1\"\n },\n {\n \"regex\": \"HP ProBook (440 G5|6[35]60b)\",\n \"model\": \"ProBook $1\"\n },\n {\n \"regex\": \"HP Pavilion dv6 Notebook PC\",\n \"model\": \"Pavilion dv6\"\n },\n {\n \"regex\": \"HP Pavilion Notebook\",\n \"model\": \"Pavilion\"\n },\n {\n \"regex\": \"HP Spectre x360 Convertible\",\n \"model\": \"Spectre x360\"\n },\n {\n \"regex\": \"HP Pavilion All-in-One 24-r0xx\",\n \"model\": \"Pavilion 24-r0xx All-in-One Desktop PC\",\n \"device\": \"desktop\"\n },\n {\n \"regex\": \"23-f364\",\n \"model\": \"Pavilion TouchSmart 23-f364 All-in-One Desktop PC\",\n \"device\": \"desktop\"\n }\n ]\n },\n \"Lenovo\": {\n \"regex\": \"FBMD/(?:37021C5|80E5|80SM|80VR);\",\n \"device\": \"desktop\",\n \"models\": [\n {\n \"regex\": \"FBMD/37021C5;\",\n \"model\": \"ThinkPad Helix 3702\"\n },\n {\n \"regex\": \"FBMD/80E5;\",\n \"model\": \"G50-80\"\n },\n {\n \"regex\": \"FBMD/80SM;\",\n \"model\": \"Ideapad 310-15ISK\"\n },\n {\n \"regex\": \"FBMD/80VR;\",\n \"model\": \"Legion Y720\"\n }\n ]\n },\n \"Schneider\": {\n \"regex\": \"FBMD/SCL141CTP;\",\n \"device\": \"desktop\",\n \"model\": \"Notebook 14\\\" Cherry Trail\"\n },\n \"Thomson\": {\n \"regex\": \"FBMD/TH360R12.32CTW;\",\n \"device\": \"desktop\",\n \"model\": \"Prestige TH-360R12.32CTW\"\n },\n \"Toshiba\": {\n \"regex\": \"FBMD/Satellite \",\n \"device\": \"desktop\",\n \"models\": [\n {\n \"regex\": \"Satellite (A[25]00|C650|C855|L650|S855)\",\n \"model\": \"Satellite $1\"\n },\n {\n \"regex\": \"Satellite ([^;\\\\)]+);\",\n \"model\": \"Satellite $1\"\n }\n ]\n }\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst notebooks_json_1 = __importDefault(require(\"../../fixtures/regexes/device/notebooks.json\"));\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nconst model_1 = require(\"../../utils/model\");\nclass NotebooksParser {\n constructor() {\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n brand: \"\",\n model: \"\"\n };\n if (!user_agent_1.userAgentParser(\"FBMD/\", userAgent)) {\n return result;\n }\n for (const [brand, notebook] of Object.entries(notebooks_json_1.default)) {\n const match = user_agent_1.userAgentParser(notebook.regex, userAgent);\n if (!match)\n continue;\n result.type = \"desktop\";\n result.brand = brand;\n if (\"model\" in notebook && notebook.model) {\n result.model = model_1.buildModel(variable_replacement_1.variableReplacement(notebook.model, match)).trim();\n }\n else if (\"models\" in notebook && notebook.models) {\n for (const model of notebook.models) {\n const match = user_agent_1.userAgentParser(model.regex, userAgent);\n if (!match)\n continue;\n result.model = variable_replacement_1.variableReplacement(model.model, match).trim();\n }\n }\n break;\n }\n return result;\n };\n }\n}\nexports.default = NotebooksParser;\n", "{\n \"Apple\": {\n \"regex\": \"(?:Apple-)?iPod\",\n \"device\": \"portable media player\",\n \"models\": [\n {\n \"regex\": \"(?:Apple-)?iPod1[C,]1\",\n \"model\": \"iPod Touch 1G\"\n },\n {\n \"regex\": \"(?:Apple-)?iPod2[C,]1\",\n \"model\": \"iPod Touch 2G\"\n },\n {\n \"regex\": \"(?:Apple-)?iPod3[C,]1\",\n \"model\": \"iPod Touch 3\"\n },\n {\n \"regex\": \"(?:Apple-)?iPod4[C,]1\",\n \"model\": \"iPod Touch 4\"\n },\n {\n \"regex\": \"(?:Apple-)?iPod5[C,]1\",\n \"model\": \"iPod Touch 5\"\n },\n {\n \"regex\": \"(?:Apple-)?iPod7[C,]1\",\n \"model\": \"iPod Touch 6\"\n },\n {\n \"regex\": \"(?:Apple-)?iPod\",\n \"model\": \"iPod Touch\"\n }\n ]\n },\n \"Cowon\": {\n \"regex\": \"COWON ([^;/]+) Build\",\n \"device\": \"portable media player\",\n \"model\": \"$1\"\n },\n \"Microsoft\": {\n \"regex\": \"Microsoft ZuneHD\",\n \"device\": \"portable media player\",\n \"model\": \"Zune HD\"\n },\n \"Panasonic\": {\n \"regex\": \"(SV-MV100)\",\n \"device\": \"portable media player\",\n \"model\": \"$1\"\n },\n \"Samsung\": {\n \"regex\": \"YP-(G[SIPB]?1|G[57]0|GB70D)\",\n \"device\": \"portable media player\",\n \"models\": [\n {\n \"regex\": \"YP-G[B]?1\",\n \"model\": \"Galaxy Player 4.0\"\n },\n {\n \"regex\": \"YP-G70\",\n \"model\": \"Galaxy Player 5.0\"\n },\n {\n \"regex\": \"YP-GS1\",\n \"model\": \"Galaxy Player 3.6\"\n },\n {\n \"regex\": \"YP-GI1\",\n \"model\": \"Galaxy Player 4.2\"\n },\n {\n \"regex\": \"YP-GP1\",\n \"model\": \"Galaxy Player 5.8\"\n },\n {\n \"regex\": \"YP-G50\",\n \"model\": \"Galaxy Player 50\"\n },\n {\n \"regex\": \"YP-GB70D\",\n \"model\": \"Galaxy Player 70 Plus\"\n }\n ]\n },\n \"Wizz\": {\n \"regex\": \"(DV-PTB1080)(?:[);/ ]|$)\",\n \"device\": \"portable media player\",\n \"model\": \"$1\"\n },\n \"SONOS\": {\n \"regex\": \"Sonos/.+\\\\((?:ZP.+)\\\\)|Sonos;\",\n \"device\": \"portable media player\",\n \"models\": [\n {\n \"regex\": \"\\\\((ZPS(?:[13569]|1[1-578]|2[03])|ZP90)\\\\)\",\n \"model\": \"$1\"\n },\n {\n \"regex\": \"Sonos;Play5;\",\n \"model\": \"Play:5\"\n },\n {\n \"regex\": \"Sonos;One;\",\n \"model\": \"One\"\n }\n ]\n }\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst portable_media_player_json_1 = __importDefault(require(\"../../fixtures/regexes/device/portable_media_player.json\"));\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass PortableMediaPlayersParser {\n constructor() {\n this.parse = (userAgent) => {\n const result = {\n type: \"\",\n brand: \"\",\n model: \"\"\n };\n for (const [brand, portableMediaPlayer] of Object.entries(portable_media_player_json_1.default)) {\n const match = user_agent_1.userAgentParser(portableMediaPlayer.regex, userAgent);\n if (!match)\n continue;\n result.type = portableMediaPlayer.device;\n result.brand = brand;\n if (\"model\" in portableMediaPlayer && portableMediaPlayer.model) {\n result.model = variable_replacement_1.variableReplacement(portableMediaPlayer.model, match).trim();\n }\n else if (\"models\" in portableMediaPlayer && portableMediaPlayer.models) {\n for (const model of portableMediaPlayer.models) {\n const modelMatch = user_agent_1.userAgentParser(model.regex, userAgent);\n if (!modelMatch)\n continue;\n result.model = variable_replacement_1.variableReplacement(model.model, modelMatch).trim();\n break;\n }\n }\n break;\n }\n return result;\n };\n }\n}\nexports.default = PortableMediaPlayersParser;\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst cameras_1 = __importDefault(require(\"./cameras\"));\nconst mobiles_1 = __importDefault(require(\"./mobiles\"));\nconst televisions_1 = __importDefault(require(\"./televisions\"));\nconst cars_1 = __importDefault(require(\"./cars\"));\nconst consoles_1 = __importDefault(require(\"./consoles\"));\nconst notebooks_1 = __importDefault(require(\"./notebooks\"));\nconst portable_media_players_1 = __importDefault(require(\"./portable-media-players\"));\nconst deviceParsers = [\n consoles_1.default,\n cars_1.default,\n cameras_1.default,\n televisions_1.default,\n portable_media_players_1.default,\n mobiles_1.default,\n notebooks_1.default\n];\nclass ClientParser {\n constructor() {\n this.parse = (userAgent) => {\n for (const Parser of deviceParsers) {\n const parser = new Parser();\n const device = parser.parse(userAgent);\n if (device.type !== \"\") {\n return device;\n }\n }\n return null;\n };\n }\n}\nexports.default = ClientParser;\n", "[\n {\n \"regex\": \"Grid OS (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"GridOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"CaixaMagica\",\n \"name\": \"Caixa M\u00E1gica\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Mageia; Linux\",\n \"name\": \"Mageia\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:WH|WhaleTV/)(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Whale OS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Tizen[ /]?(\\\\d+[\\\\.\\\\d]+)?\",\n \"name\": \"Tizen\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Sailfish|Jolla\",\n \"name\": \"Sailfish OS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:Ali)?YunOS[ /]?(\\\\d+[\\\\.\\\\d]+)?\",\n \"name\": \"YunOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Windows Phone;FBSV/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Windows Phone\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Windows Phone (?:OS)?|wds)[ /]?(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Windows Phone\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"XBLWP7|Windows Phone\",\n \"name\": \"Windows Phone\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Windows CE(?: (\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Windows CE\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:IEMobile|Windows ?Mobile)(?: (\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Windows Mobile\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Windows NT 6.2; ARM;\",\n \"name\": \"Windows RT\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Windows NT 6.3; ARM;\",\n \"name\": \"Windows RT\",\n \"version\": \"8.1\"\n },\n {\n \"regex\": \"Windows IoT 10.0\",\n \"name\": \"Windows IoT\",\n \"version\": \"10\"\n },\n {\n \"regex\": \"KAIOS(?:/(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"KaiOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RazoDroiD(?: v(\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"RazoDroiD\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MildWild(?: CM-(\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"MildWild\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"CyanogenMod(?:[\\\\-/](?:CM)?(\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"CyanogenMod\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:.*_)?MocorDroid(?:(\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"MocorDroid\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Fire OS(?:/(\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"Fire OS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AFTSO001\",\n \"name\": \"Fire OS\",\n \"version\": \"7\"\n },\n {\n \"regex\": \"FydeOS\",\n \"name\": \"FydeOS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:Podbean|Podimo)(?:.+)?/Android\",\n \"name\": \"Android\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Pinterest for Android/.+; (\\\\d(?:[\\\\d\\\\.]+)?)\\\\)$\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Android; (\\\\d+[\\\\.\\\\d]*); Mobile;\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"[ ]([\\\\d\\\\.]+)\\\\) AppleWebKit.*ROBLOX Android App\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:(?:Orca-)?Android|Adr)[ /]?(?:[a-z]+ )?(\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Allview_TX1_Quasar|Cosmote_My_mini_Tab) (\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Android ?(?:jelly bean|Kit Kat|S.O. Ginger Bread|The FireCyano|:) (\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Orca-Android|FB4A).*FBSV/(\\\\d+[\\\\.\\\\d]*);\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \" Adr |Android|Silk-Accelerated=[a-z]{4,5}\",\n \"name\": \"Android\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:TwitterAndroid).*[ /](?:[a-z]+ )?(\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"BeyondPod|AntennaPod|Podkicker|DoggCatcher|Player FM|okhttp|Podcatcher Deluxe|.+K_?Android_?TV_|Sonos/.+\\\\(ACR_\",\n \"name\": \"Android\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Linux; Andr0id[; ](\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Linux; diordnA[; ](\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"Android\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AmigaOS[ ]?(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"AmigaOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AmigaOS|AmigaVoyager|Amiga-AWeb\",\n \"name\": \"AmigaOS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"ThreadX(?:/(\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"ThreadX\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Nucleus(?:(?: |/v?)(\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"MTK / Nucleus\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MTK(?:(?: |/v?)(\\\\d+[\\\\.\\\\d]*))?\",\n \"name\": \"MTK / Nucleus\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MRE/(\\\\d+)\\\\.(\\\\d+).*;MAUI\",\n \"name\": \"MRE\",\n \"version\": \"$1.$2\"\n },\n {\n \"regex\": \"dvkbuntu\",\n \"name\": \"DVKBuntu\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Helio/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Lumin OS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"HasCodingOs (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"HasCodingOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"PCLinuxOS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"PCLinuxOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(Ordissimo|webissimo3)\",\n \"name\": \"Ordissimo\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:Win|Sistema )Fenix\",\n \"name\": \"Fenix\",\n \"version\": \"\"\n },\n {\n \"regex\": \"TOS; Linux\",\n \"name\": \"TmaxOS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Maemo\",\n \"name\": \"Maemo\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Arch ?Linux(?:[ /\\\\-](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Arch Linux\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"VectorLinux(?: package)?(?:[ /\\\\-](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"VectorLinux\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Linux; .*((?:Debian|Knoppix|Mint|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack))[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"$1\",\n \"version\": \"$2\"\n },\n {\n \"regex\": \"Deepin[ /](\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Deepin\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(Debian|Knoppix|Mint(?! Browser)|Ubuntu|Kubuntu|Xubuntu|Lubuntu|Fedora|Red Hat|Mandriva|Gentoo|Sabayon|Slackware|SUSE|CentOS|BackTrack|Freebox)(?:(?: Enterprise)? Linux)?(?:[ /\\\\-](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"$1\",\n \"version\": \"$2\"\n },\n {\n \"regex\": \"OS ROSA; Linux\",\n \"name\": \"Rosa\",\n \"version\": \"\"\n },\n {\n \"regex\": \"WEBOS(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"webOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Web0S; Linux/SmartTV.+Chrome/68\",\n \"name\": \"webOS\",\n \"version\": \"5\"\n },\n {\n \"regex\": \"Web0S; Linux/SmartTV.+Chrome/53\",\n \"name\": \"webOS\",\n \"version\": \"4\"\n },\n {\n \"regex\": \"Web0S; Linux/SmartTV.+Chrome/38\",\n \"name\": \"webOS\",\n \"version\": \"3\"\n },\n {\n \"regex\": \"Web0S; Linux/SmartTV.+Safari/538\",\n \"name\": \"webOS\",\n \"version\": \"2\"\n },\n {\n \"regex\": \"Web0S; Linux/SmartTV.+Safari/537\",\n \"name\": \"webOS\",\n \"version\": \"1\"\n },\n {\n \"regex\": \"(?:Web0S; .*WEBOS|webOS|web0S|Palm webOS|hpwOS)(?:[/]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"webOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:PalmOS|Palm OS)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?|Palm\",\n \"name\": \"palmOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Xiino(?:.*v\\\\. (\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"palmOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MorphOS(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"MorphOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"FBW.+FBSV/(\\\\d+[\\\\.\\\\d]*);\",\n \"name\": \"Windows\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"mingw32\",\n \"name\": \"Windows\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Windows/(\\\\d+\\\\.\\\\d+)\",\n \"name\": \"Windows\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"CYGWIN_NT-10.0|Windows NT 10.0|Windows 10\",\n \"name\": \"Windows\",\n \"version\": \"10\"\n },\n {\n \"regex\": \"CYGWIN_NT-6.4|Windows NT 6.4|Windows 10|win10\",\n \"name\": \"Windows\",\n \"version\": \"10\"\n },\n {\n \"regex\": \"CYGWIN_NT-6.3|Windows NT 6.3|Windows 8.1\",\n \"name\": \"Windows\",\n \"version\": \"8.1\"\n },\n {\n \"regex\": \"CYGWIN_NT-6.2|Windows NT 6.2|Windows 8\",\n \"name\": \"Windows\",\n \"version\": \"8\"\n },\n {\n \"regex\": \"CYGWIN_NT-6.1|Windows NT 6.1|Windows 7|win7\",\n \"name\": \"Windows\",\n \"version\": \"7\"\n },\n {\n \"regex\": \"CYGWIN_NT-6.0|Windows NT 6.0|Windows Vista\",\n \"name\": \"Windows\",\n \"version\": \"Vista\"\n },\n {\n \"regex\": \"CYGWIN_NT-5.2|Windows NT 5.2|Windows Server 2003 / XP x64\",\n \"name\": \"Windows\",\n \"version\": \"Server 2003\"\n },\n {\n \"regex\": \"CYGWIN_NT-5.1|Windows NT 5.1|Windows XP\",\n \"name\": \"Windows\",\n \"version\": \"XP\"\n },\n {\n \"regex\": \"CYGWIN_NT-5.0|Windows NT 5.0|Windows 2000\",\n \"name\": \"Windows\",\n \"version\": \"2000\"\n },\n {\n \"regex\": \"CYGWIN_NT-4.0|Windows NT 4.0|WinNT|Windows NT\",\n \"name\": \"Windows\",\n \"version\": \"NT\"\n },\n {\n \"regex\": \"CYGWIN_ME-4.90|Win 9x 4.90|Windows ME\",\n \"name\": \"Windows\",\n \"version\": \"ME\"\n },\n {\n \"regex\": \"CYGWIN_98-4.10|Win98|Windows 98\",\n \"name\": \"Windows\",\n \"version\": \"98\"\n },\n {\n \"regex\": \"CYGWIN_95-4.0|Win32|Win95|Windows 95|Windows_95\",\n \"name\": \"Windows\",\n \"version\": \"95\"\n },\n {\n \"regex\": \"Windows 3.1\",\n \"name\": \"Windows\",\n \"version\": \"3.1\"\n },\n {\n \"regex\": \"Windows\",\n \"name\": \"Windows\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Haiku\",\n \"name\": \"Haiku OS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:Watch1,[12]/|Watch OS,|watchOS[ /])(\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"watchOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"iPad/([89]|1[012]).(\\\\d+[\\\\.\\\\d]*)\",\n \"name\": \"iOS\",\n \"version\": \"$1.$2\"\n },\n {\n \"regex\": \"Pinterest for iOS/.+; (\\\\d(?:[\\\\d\\\\.]+)?)\\\\)$\",\n \"name\": \"iOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/20.4.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"14.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/20.3.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"14.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/20.2.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"14.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/20.1.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"14.2\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/20.0.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"14.0\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.6.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"13.6\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.5.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"13.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.4.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"13.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.3.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"13.3.1\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.2.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"13.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.0.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"13.0\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/18.7.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"12.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/18.6.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"12.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/18.5.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"12.2\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/18.2.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"12.1\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/18.0.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"12.0\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/17.7.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"11.4.1\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/17.6.0(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"11.4\"\n },\n {\n \"regex\": \"CFNetwork/889(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"11.1\"\n },\n {\n \"regex\": \"CFNetwork/887(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"11.0\"\n },\n {\n \"regex\": \"CFNetwork/811(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"10.3\"\n },\n {\n \"regex\": \"CFNetwork/808\\\\.3\",\n \"name\": \"iOS\",\n \"version\": \"10.3\"\n },\n {\n \"regex\": \"CFNetwork/808\\\\.2\",\n \"name\": \"iOS\",\n \"version\": \"10.2\"\n },\n {\n \"regex\": \"CFNetwork/808\\\\.1\",\n \"name\": \"iOS\",\n \"version\": \"10.1\"\n },\n {\n \"regex\": \"CFNetwork/808\\\\.0\",\n \"name\": \"iOS\",\n \"version\": \"10.0\"\n },\n {\n \"regex\": \"CFNetwork/808\",\n \"name\": \"iOS\",\n \"version\": \"10\"\n },\n {\n \"regex\": \"CFNetwork/758\\\\.4\\\\.3\",\n \"name\": \"iOS\",\n \"version\": \"9.3.2\"\n },\n {\n \"regex\": \"CFNetwork/758\\\\.3\\\\.15\",\n \"name\": \"iOS\",\n \"version\": \"9.3\"\n },\n {\n \"regex\": \"CFNetwork/758\\\\.2\\\\.[78]\",\n \"name\": \"iOS\",\n \"version\": \"9.2\"\n },\n {\n \"regex\": \"CFNetwork/758\\\\.1\\\\.6\",\n \"name\": \"iOS\",\n \"version\": \"9.1\"\n },\n {\n \"regex\": \"CFNetwork/758\\\\.0\\\\.2\",\n \"name\": \"iOS\",\n \"version\": \"9.0\"\n },\n {\n \"regex\": \"CFNetwork/711\\\\.5\\\\.6\",\n \"name\": \"iOS\",\n \"version\": \"8.4.1\"\n },\n {\n \"regex\": \"CFNetwork/711\\\\.4\\\\.6\",\n \"name\": \"iOS\",\n \"version\": \"8.4\"\n },\n {\n \"regex\": \"CFNetwork/711\\\\.3\\\\.18\",\n \"name\": \"iOS\",\n \"version\": \"8.3\"\n },\n {\n \"regex\": \"CFNetwork/711\\\\.2\\\\.23\",\n \"name\": \"iOS\",\n \"version\": \"8.2\"\n },\n {\n \"regex\": \"CFNetwork/711\\\\.1\\\\.1[26]\",\n \"name\": \"iOS\",\n \"version\": \"8.1\"\n },\n {\n \"regex\": \"CFNetwork/711\\\\.0\\\\.6\",\n \"name\": \"iOS\",\n \"version\": \"8.0\"\n },\n {\n \"regex\": \"CFNetwork/672\\\\.1\",\n \"name\": \"iOS\",\n \"version\": \"7.1\"\n },\n {\n \"regex\": \"CFNetwork/672\\\\.0\",\n \"name\": \"iOS\",\n \"version\": \"7.0\"\n },\n {\n \"regex\": \"CFNetwork/609\\\\.1\",\n \"name\": \"iOS\",\n \"version\": \"6.1\"\n },\n {\n \"regex\": \"CFNetwork/60[29]\",\n \"name\": \"iOS\",\n \"version\": \"6.0\"\n },\n {\n \"regex\": \"CFNetwork/548\\\\.1\",\n \"name\": \"iOS\",\n \"version\": \"5.1\"\n },\n {\n \"regex\": \"CFNetwork/548\\\\.0\",\n \"name\": \"iOS\",\n \"version\": \"5.0\"\n },\n {\n \"regex\": \"CFNetwork/485\\\\.13\",\n \"name\": \"iOS\",\n \"version\": \"4.3\"\n },\n {\n \"regex\": \"CFNetwork/485\\\\.12\",\n \"name\": \"iOS\",\n \"version\": \"4.2\"\n },\n {\n \"regex\": \"CFNetwork/485\\\\.10\",\n \"name\": \"iOS\",\n \"version\": \"4.1\"\n },\n {\n \"regex\": \"CFNetwork/485\\\\.2\",\n \"name\": \"iOS\",\n \"version\": \"4.0\"\n },\n {\n \"regex\": \"CFNetwork/467\\\\.12\",\n \"name\": \"iOS\",\n \"version\": \"3.2\"\n },\n {\n \"regex\": \"CFNetwork/459\",\n \"name\": \"iOS\",\n \"version\": \"3.1\"\n },\n {\n \"regex\": \"iPhone/(\\\\d+[\\\\.\\\\d]*) hw/\",\n \"name\": \"iOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"iOS(\\\\d+\\\\.\\\\d+\\\\.\\\\d+)\",\n \"name\": \"iOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"iOS(\\\\d+)\\\\.(\\\\d+)0\",\n \"name\": \"iOS\",\n \"version\": \"$1.$2\"\n },\n {\n \"regex\": \"iPhone OS ([0-9]{1})([0-9]{1})([0-9]{1})\",\n \"name\": \"iOS\",\n \"version\": \"$1.$2.$3\"\n },\n {\n \"regex\": \"(?:CPU OS|iPh(?:one)?[ _]OS|iOS)[ _/](\\\\d+(?:[_\\\\.]\\\\d+)*)\",\n \"name\": \"iOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:FBIOS|Messenger(?:Lite)?ForiOS).*FBSV/ ?(\\\\d+[\\\\.\\\\d]*);\",\n \"name\": \"iOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Apple-)?(?:iPhone|iPad|iPod)(?:.*Mac OS X.*Version/(\\\\d+\\\\.\\\\d+)|; Opera)?\",\n \"name\": \"iOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Podcasts/(?:[\\\\d\\\\.]+)|Instacast(?:HD)?/(?:\\\\d\\\\.[\\\\d\\\\.abc]+)|Pocket Casts, iOS|\\\\(iOS\\\\)|iOS; Opera|Overcast|Castro|Podcat|iCatcher|RSSRadio/|MobileSafari/)(?!.*x86_64)\",\n \"name\": \"iOS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"iTunes-(iPod|iPad|iPhone)/(?:[\\\\d\\\\.]+)\",\n \"name\": \"iOS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"iOS/Version ([\\\\d\\\\.]+)\",\n \"name\": \"iOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Sonos/.+\\\\(ICRU_\",\n \"name\": \"iOS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/20.2.0.*(x86_64)|(x86_64-apple-)?darwin20.2.0\",\n \"name\": \"Mac\",\n \"version\": \"11.1\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/20.[01].0.*(x86_64)|(x86_64-apple-)?darwin20.[01].0\",\n \"name\": \"Mac\",\n \"version\": \"11.0\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.6.0.*(x86_64)|(x86_64-apple-)?darwin19.6.0\",\n \"name\": \"Mac\",\n \"version\": \"10.15.6\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.5.0.*(x86_64)|(x86_64-apple-)?darwin19.5.0\",\n \"name\": \"Mac\",\n \"version\": \"10.15.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.4.0.*(x86_64)|(x86_64-apple-)?darwin19.4.0\",\n \"name\": \"Mac\",\n \"version\": \"10.15.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.3.0.*(x86_64)|(x86_64-apple-)?darwin19.3.0\",\n \"name\": \"Mac\",\n \"version\": \"10.15.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/19.2.0.*(x86_64)|(x86_64-apple-)?darwin19.2.0\",\n \"name\": \"Mac\",\n \"version\": \"10.15.2\"\n },\n {\n \"regex\": \"CFNetwork/(?:108[258]|109[18]|1103).*(x86_64)\",\n \"name\": \"Mac\",\n \"version\": \"10.15\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/18.2.0.*(x86_64)|(x86_64-apple-)?darwin18.2.0\",\n \"name\": \"Mac\",\n \"version\": \"10.14.1\"\n },\n {\n \"regex\": \"CFNetwork/(?:96[29]|97[14568]).*(x86_64)\",\n \"name\": \"Mac\",\n \"version\": \"10.14\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/17.7.0.*(x86_64)|(x86_64-apple-)?darwin17.7.0\",\n \"name\": \"Mac\",\n \"version\": \"10.13.6\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/17.6.0.*(x86_64)|(x86_64-apple-)?darwin17.6.0\",\n \"name\": \"Mac\",\n \"version\": \"10.13.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/17.5.0.*(x86_64)|(x86_64-apple-)?darwin17.5.0\",\n \"name\": \"Mac\",\n \"version\": \"10.13.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/17.4.0.*(x86_64)|(x86_64-apple-)?darwin17.4.0\",\n \"name\": \"Mac\",\n \"version\": \"10.13.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/17.3.0.*(x86_64)|(x86_64-apple-)?darwin17.3.0\",\n \"name\": \"Mac\",\n \"version\": \"10.13.2\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/17.2.0.*(x86_64)|(x86_64-apple-)?darwin17.2.0\",\n \"name\": \"Mac\",\n \"version\": \"10.13.1\"\n },\n {\n \"regex\": \"CFNetwork/(?:887|889|893|897|901|902).*(x86_64)\",\n \"name\": \"Mac\",\n \"version\": \"10.13\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/16.7.0.*(x86_64)|(x86_64-apple-)?darwin16.7.0\",\n \"name\": \"Mac\",\n \"version\": \"10.12.6\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/16.6.0.*(x86_64)|(x86_64-apple-)?darwin16.6.0\",\n \"name\": \"Mac\",\n \"version\": \"10.12.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/16.5.0.*(x86_64)|(x86_64-apple-)?darwin16.5.0\",\n \"name\": \"Mac\",\n \"version\": \"10.12.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/16.3.0.*(x86_64)|(x86_64-apple-)?darwin16.3.0\",\n \"name\": \"Mac\",\n \"version\": \"10.12.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/16.2.0.*(x86_64)|(x86_64-apple-)?darwin16.2.0\",\n \"name\": \"Mac\",\n \"version\": \"10.12.2\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/16.1.0.*(x86_64)|(x86_64-apple-)?darwin16.1.0\",\n \"name\": \"Mac\",\n \"version\": \"10.12.1\"\n },\n {\n \"regex\": \"CFNetwork/811.*(x86_64)\",\n \"name\": \"Mac\",\n \"version\": \"10.12\"\n },\n {\n \"regex\": \"CFNetwork/807\",\n \"name\": \"Mac\",\n \"version\": \"10.12\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/15.6.0.*(x86_64)|(x86_64-apple-)?darwin15.6.0\",\n \"name\": \"Mac\",\n \"version\": \"10.11.6\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/15.5.0.*(x86_64)|(x86_64-apple-)?darwin15.5.0\",\n \"name\": \"Mac\",\n \"version\": \"10.11.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/15.4.0.*(x86_64)|(x86_64-apple-)?darwin15.4.0\",\n \"name\": \"Mac\",\n \"version\": \"10.11.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/15.3.0.*(x86_64)|(x86_64-apple-)?darwin15.3.0\",\n \"name\": \"Mac\",\n \"version\": \"10.11.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/15.2.0.*(x86_64)|(x86_64-apple-)?darwin15.2.0\",\n \"name\": \"Mac\",\n \"version\": \"10.11.2\"\n },\n {\n \"regex\": \"CFNetwork/760\",\n \"name\": \"Mac\",\n \"version\": \"10.11\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/14.5.0.*(x86_64)|(x86_64-apple-)?darwin14.5.0\",\n \"name\": \"Mac\",\n \"version\": \"10.10.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/14.4.0.*(x86_64)|(x86_64-apple-)?darwin14.4.0\",\n \"name\": \"Mac\",\n \"version\": \"10.10.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/14.3.0.*(x86_64)|(x86_64-apple-)?darwin14.3.0\",\n \"name\": \"Mac\",\n \"version\": \"10.10.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/14.1.0.*(x86_64)|(x86_64-apple-)?darwin14.1.0\",\n \"name\": \"Mac\",\n \"version\": \"10.10.2\"\n },\n {\n \"regex\": \"CFNetwork/720\",\n \"name\": \"Mac\",\n \"version\": \"10.10\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/13.4.0.*(x86_64)|(x86_64-apple-)?darwin13.4.0\",\n \"name\": \"Mac\",\n \"version\": \"10.9.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/13.3.0.*(x86_64)|(x86_64-apple-)?darwin13.3.0\",\n \"name\": \"Mac\",\n \"version\": \"10.9.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/13.2.0.*(x86_64)|(x86_64-apple-)?darwin13.2.0\",\n \"name\": \"Mac\",\n \"version\": \"10.9.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/13.1.0.*(x86_64)|(x86_64-apple-)?darwin13.1.0\",\n \"name\": \"Mac\",\n \"version\": \"10.9.2\"\n },\n {\n \"regex\": \"CFNetwork/673\",\n \"name\": \"Mac\",\n \"version\": \"10.9\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/12.5.0.*(x86_64)|(x86_64-apple-)?darwin12.5.0\",\n \"name\": \"Mac\",\n \"version\": \"10.8.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/12.4.0.*(x86_64)|(x86_64-apple-)?darwin12.4.0\",\n \"name\": \"Mac\",\n \"version\": \"10.8.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/12.3.0.*(x86_64)|(x86_64-apple-)?darwin12.3.0\",\n \"name\": \"Mac\",\n \"version\": \"10.8.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/12.2.0.*(x86_64)|(x86_64-apple-)?darwin12.2.0\",\n \"name\": \"Mac\",\n \"version\": \"10.8.2\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/12.1.0.*(x86_64)|(x86_64-apple-)?darwin12.1.0\",\n \"name\": \"Mac\",\n \"version\": \"10.8.1\"\n },\n {\n \"regex\": \"CFNetwork/596\",\n \"name\": \"Mac\",\n \"version\": \"10.8\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/11.5.0.*(x86_64)|(x86_64-apple-)?darwin11.5.0\",\n \"name\": \"Mac\",\n \"version\": \"10.7.5\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/11.4.0.*(x86_64)|(x86_64-apple-)?darwin11.4.0\",\n \"name\": \"Mac\",\n \"version\": \"10.7.4\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/11.3.0.*(x86_64)|(x86_64-apple-)?darwin11.3.0\",\n \"name\": \"Mac\",\n \"version\": \"10.7.3\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/11.2.0.*(x86_64)|(x86_64-apple-)?darwin11.2.0\",\n \"name\": \"Mac\",\n \"version\": \"10.7.2\"\n },\n {\n \"regex\": \"CFNetwork/.+ Darwin/11.1.0.*(x86_64)|(x86_64-apple-)?darwin11.1.0\",\n \"name\": \"Mac\",\n \"version\": \"10.7.1\"\n },\n {\n \"regex\": \"CFNetwork/520\",\n \"name\": \"Mac\",\n \"version\": \"10.7\"\n },\n {\n \"regex\": \"CFNetwork/454\",\n \"name\": \"Mac\",\n \"version\": \"10.6\"\n },\n {\n \"regex\": \"CFNetwork/(?:438|422|339|330|221|220|217)\",\n \"name\": \"Mac\",\n \"version\": \"10.5\"\n },\n {\n \"regex\": \"CFNetwork/12[89]\",\n \"name\": \"Mac\",\n \"version\": \"10.4\"\n },\n {\n \"regex\": \"CFNetwork/1\\\\.2\",\n \"name\": \"Mac\",\n \"version\": \"10.3\"\n },\n {\n \"regex\": \"CFNetwork/1\\\\.1\",\n \"name\": \"Mac\",\n \"version\": \"10.2\"\n },\n {\n \"regex\": \"Mac[ +]OS[ +]?X(?:[ /](?:Version )?(\\\\d+(?:[_\\\\.]\\\\d+)+))?\",\n \"name\": \"Mac\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Mac (?:OS/)?(\\\\d+(?:[_\\\\.]\\\\d+)+)\",\n \"name\": \"Mac\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"macOS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Mac\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Darwin|Macintosh|Mac_PowerPC|PPC|Mac PowerPC|iMac|MacBook|macOS|Sonos/.+\\\\(MDCR_\",\n \"name\": \"Mac\",\n \"version\": \"\"\n },\n {\n \"regex\": \"SeewoOS x86_64 (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"SeewoOS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"CrOS [a-z0-9_]+ .* Chrome/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Chrome OS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:BB10;.+Version|Black[Bb]erry[0-9a-z]+|Black[Bb]erry.+Version)/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"BlackBerry OS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RIM Tablet OS (\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"BlackBerry Tablet OS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RIM Tablet OS|QNX|Play[Bb]ook\",\n \"name\": \"BlackBerry Tablet OS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"BlackBerry\",\n \"name\": \"BlackBerry OS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"bPod\",\n \"name\": \"BlackBerry OS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"BeOS\",\n \"name\": \"BeOS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Symbian/3.+NokiaBrowser/7\\\\.3\",\n \"name\": \"Symbian^3\",\n \"version\": \"Anna\"\n },\n {\n \"regex\": \"Symbian/3.+NokiaBrowser/7\\\\.4\",\n \"name\": \"Symbian^3\",\n \"version\": \"Belle\"\n },\n {\n \"regex\": \"Symbian/3\",\n \"name\": \"Symbian^3\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:Series ?60|SymbOS|S60)(?:[ /]?(\\\\d+[\\\\.\\\\d]+|V\\\\d+))?\",\n \"name\": \"Symbian OS Series 60\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Series40\",\n \"name\": \"Symbian OS Series 40\",\n \"version\": \"\"\n },\n {\n \"regex\": \"SymbianOS/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"Symbian OS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"MeeGo|WeTab\",\n \"name\": \"MeeGo\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Symbian(?: OS)?|SymbOS\",\n \"name\": \"Symbian OS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Nokia\",\n \"name\": \"Symbian\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:Mobile|Tablet);.+Firefox/\\\\d+\\\\.\\\\d+\",\n \"name\": \"Firefox OS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"RISC OS(?:-NC)?(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"RISC OS\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Inferno(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Inferno\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"bada(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Bada\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"(?:Brew(?!-Applet)(?: MP)?|BMP)(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Brew\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"GoogleTV(?:[ /](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Google TV\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AppleTV(?:/?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Apple TV\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"WebTV/(\\\\d+[\\\\.\\\\d]+)\",\n \"name\": \"WebTV\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"RemixOS 5.1.1\",\n \"name\": \"Remix OS\",\n \"version\": \"1\"\n },\n {\n \"regex\": \"RemixOS 6.0\",\n \"name\": \"Remix OS\",\n \"version\": \"2\"\n },\n {\n \"regex\": \"RemixOS\",\n \"name\": \"Remix OS\",\n \"version\": \"\"\n },\n {\n \"regex\": \"(?:SunOS|Solaris)(?:[/ ](\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Solaris\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"AIX(?:[/ ]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"AIX\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"HP-UX(?:[/ ]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"HP-UX\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"FreeBSD(?:[/ ]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"FreeBSD\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"NetBSD(?:[/ ]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"NetBSD\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"OpenBSD(?:[/ ]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"OpenBSD\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"DragonFly(?:[/ ]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"DragonFly\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Syllable(?:[/ ]?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"Syllable\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"IRIX(?:;64)?(?:[/ ]?(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"IRIX\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"OSF1(?:[/ ]?v?(\\\\d+[\\\\.\\\\d]+))?\",\n \"name\": \"OSF1\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Nintendo (Wii|Switch)\",\n \"name\": \"Nintendo\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"PlayStation ?([34])\",\n \"name\": \"PlayStation\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"Xbox|KIN\\\\.(?:One|Two)\",\n \"name\": \"Xbox\",\n \"version\": \"360\"\n },\n {\n \"regex\": \"Nitro|Nintendo ([3]?DS[i]?)\",\n \"name\": \"Nintendo Mobile\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"PlayStation ((?:Portable|Vita))\",\n \"name\": \"PlayStation Portable\",\n \"version\": \"$1\"\n },\n {\n \"regex\": \"OS/2\",\n \"name\": \"OS/2\",\n \"version\": \"\"\n },\n {\n \"regex\": \"Linux(?:OS)?[^a-z]\",\n \"name\": \"GNU/Linux\",\n \"version\": \"\"\n }\n]\n", "{\n \"operatingSystem\": {\n \"AIX\": \"AIX\",\n \"AND\": \"Android\",\n \"AMG\": \"AmigaOS\",\n \"ATV\": \"Apple TV\",\n \"ARL\": \"Arch Linux\",\n \"BTR\": \"BackTrack\",\n \"SBA\": \"Bada\",\n \"BEO\": \"BeOS\",\n \"BLB\": \"BlackBerry OS\",\n \"QNX\": \"BlackBerry Tablet OS\",\n \"BMP\": \"Brew\",\n \"CES\": \"CentOS\",\n \"COS\": \"Chrome OS\",\n \"CYN\": \"CyanogenMod\",\n \"DEB\": \"Debian\",\n \"DEE\": \"Deepin\",\n \"DFB\": \"DragonFly\",\n \"FED\": \"Fedora\",\n \"FOS\": \"Firefox OS\",\n \"FIR\": \"Fire OS\",\n \"FRE\": \"Freebox\",\n \"BSD\": \"FreeBSD\",\n \"FYD\": \"FydeOS\",\n \"GNT\": \"Gentoo\",\n \"GTV\": \"Google TV\",\n \"HPX\": \"HP-UX\",\n \"HAI\": \"Haiku OS\",\n \"IRI\": \"IRIX\",\n \"INF\": \"Inferno\",\n \"KOS\": \"KaiOS\",\n \"KNO\": \"Knoppix\",\n \"KBT\": \"Kubuntu\",\n \"LIN\": \"GNU/Linux\",\n \"LBT\": \"Lubuntu\",\n \"VLN\": \"VectorLinux\",\n \"MAC\": \"Mac\",\n \"MAE\": \"Maemo\",\n \"MDR\": \"Mandriva\",\n \"SMG\": \"MeeGo\",\n \"MCD\": \"MocorDroid\",\n \"MIN\": \"Mint\",\n \"MLD\": \"MildWild\",\n \"MOR\": \"MorphOS\",\n \"NBS\": \"NetBSD\",\n \"MTK\": \"MTK / Nucleus\",\n \"MRE\": \"MRE\",\n \"WII\": \"Nintendo\",\n \"NDS\": \"Nintendo Mobile\",\n \"OS2\": \"OS/2\",\n \"T64\": \"OSF1\",\n \"OBS\": \"OpenBSD\",\n \"ORD\": \"Ordissimo\",\n \"PSP\": \"PlayStation Portable\",\n \"PS3\": \"PlayStation\",\n \"RHT\": \"Red Hat\",\n \"ROS\": \"RISC OS\",\n \"RSO\": \"Rosa\",\n \"REM\": \"Remix OS\",\n \"RZD\": \"RazoDroiD\",\n \"SAB\": \"Sabayon\",\n \"SSE\": \"SUSE\",\n \"SAF\": \"Sailfish OS\",\n \"SEE\": \"SeewoOS\",\n \"SLW\": \"Slackware\",\n \"SOS\": \"Solaris\",\n \"SYL\": \"Syllable\",\n \"SYM\": \"Symbian\",\n \"SYS\": \"Symbian OS\",\n \"S40\": \"Symbian OS Series 40\",\n \"S60\": \"Symbian OS Series 60\",\n \"SY3\": \"Symbian^3\",\n \"TDX\": \"ThreadX\",\n \"TIZ\": \"Tizen\",\n \"TOS\": \"TmaxOS\",\n \"UBT\": \"Ubuntu\",\n \"WAS\": \"watchOS\",\n \"WTV\": \"WebTV\",\n \"WHS\": \"Whale OS\",\n \"WIN\": \"Windows\",\n \"WCE\": \"Windows CE\",\n \"WIO\": \"Windows IoT\",\n \"WMO\": \"Windows Mobile\",\n \"WPH\": \"Windows Phone\",\n \"WRT\": \"Windows RT\",\n \"XBX\": \"Xbox\",\n \"XBT\": \"Xubuntu\",\n \"YNS\": \"YunOs\",\n \"IOS\": \"iOS\",\n \"POS\": \"palmOS\",\n \"WOS\": \"webOS\"\n },\n \"osFamilies\": {\n \"Android\": [\"AND\", \"CYN\", \"FIR\", \"REM\", \"RZD\", \"MLD\", \"MCD\", \"YNS\"],\n \"AmigaOS\": [\"AMG\", \"MOR\"],\n \"Apple TV\": [\"ATV\"],\n \"BlackBerry\": [\"BLB\", \"QNX\"],\n \"Brew\": [\"BMP\"],\n \"BeOS\": [\"BEO\", \"HAI\"],\n \"Chrome OS\": [\"COS\", \"FYD\", \"SEE\"],\n \"Firefox OS\": [\"FOS\", \"KOS\"],\n \"Gaming Console\": [\"WII\", \"PS3\"],\n \"Google TV\": [\"GTV\"],\n \"IBM\": [\"OS2\"],\n \"iOS\": [\"IOS\", \"WAS\"],\n \"RISC OS\": [\"ROS\"],\n \"GNU/Linux\": [\n \"LIN\", \"ARL\", \"DEB\", \"KNO\", \"MIN\", \"UBT\", \"KBT\", \"XBT\", \"LBT\", \"FED\",\n \"RHT\", \"VLN\", \"MDR\", \"GNT\", \"SAB\", \"SLW\", \"SSE\", \"CES\", \"BTR\", \"SAF\",\n \"ORD\", \"TOS\", \"RSO\", \"DEE\", \"FRE\"\n ],\n \"Mac\": [\"MAC\"],\n \"Mobile Gaming Console\": [\"PSP\", \"NDS\", \"XBX\"],\n \"Real-time OS\": [\"MTK\", \"TDX\", \"MRE\"],\n \"Other Mobile\": [\"WOS\", \"POS\", \"SBA\", \"TIZ\", \"SMG\", \"MAE\"],\n \"Symbian\": [\"SYM\", \"SYS\", \"SY3\", \"S60\", \"S40\"],\n \"Unix\": [\"SOS\", \"AIX\", \"HPX\", \"BSD\", \"NBS\", \"OBS\", \"DFB\", \"SYL\", \"IRI\", \"T64\", \"INF\"],\n \"WebTV\": [\"WTV\"],\n \"Windows\": [\"WIN\"],\n \"Windows Mobile\": [\"WPH\", \"WMO\", \"WCE\", \"WRT\", \"WIO\"],\n \"Other Smart TV\": [\"WHS\"]\n }\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst oss_json_1 = __importDefault(require(\"../../fixtures/regexes/oss.json\"));\nconst version_1 = require(\"../../utils/version\");\nconst variable_replacement_1 = require(\"../../utils/variable-replacement\");\nconst user_agent_1 = require(\"../../utils/user-agent\");\nconst operating_system_json_1 = __importDefault(require(\"./fixtures/operating-system.json\"));\nconst desktopOsArray = [\"AmigaOS\", \"IBM\", \"GNU/Linux\", \"Mac\", \"Unix\", \"Windows\", \"BeOS\", \"Chrome OS\"];\nconst shortOsNames = operating_system_json_1.default.operatingSystem;\nconst osFamilies = operating_system_json_1.default.osFamilies;\nclass OperatingSystemParser {\n constructor(options) {\n this.options = {\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n const result = {\n name: \"\",\n version: \"\",\n platform: this.parsePlatform(userAgent)\n };\n for (const operatingSystem of oss_json_1.default) {\n const match = user_agent_1.userAgentParser(operatingSystem.regex, userAgent);\n if (!match)\n continue;\n result.name = variable_replacement_1.variableReplacement(operatingSystem.name, match);\n result.version = version_1.formatVersion(variable_replacement_1.variableReplacement(operatingSystem.version, match), this.options.versionTruncation);\n if (result.name === \"lubuntu\") {\n result.name = \"Lubuntu\";\n }\n if (result.name === \"debian\") {\n result.name = \"Debian\";\n }\n if (result.name === \"YunOS\") {\n result.name = \"YunOs\";\n }\n return result;\n }\n return null;\n };\n this.parsePlatform = (userAgent) => {\n if (user_agent_1.userAgentParser(\"arm|aarch64|Watch ?OS|Watch1,[12]\", userAgent)) {\n return \"ARM\";\n }\n if (user_agent_1.userAgentParser(\"mips\", userAgent)) {\n return \"MIPS\";\n }\n if (user_agent_1.userAgentParser(\"sh4\", userAgent)) {\n return \"SuperH\";\n }\n if (user_agent_1.userAgentParser(\"WOW64|x64|win64|amd64|x86_?64\", userAgent)) {\n return \"x64\";\n }\n if (user_agent_1.userAgentParser(\"(?:i[0-9]|x)86|i86pc\", userAgent)) {\n return \"x86\";\n }\n return \"\";\n };\n this.options = Object.assign(Object.assign({}, this.options), options);\n }\n}\nexports.default = OperatingSystemParser;\nOperatingSystemParser.getDesktopOsArray = () => desktopOsArray;\nOperatingSystemParser.getOsFamily = (osName) => {\n const osShortName = OperatingSystemParser.getOsShortName(osName);\n for (const [osFamily, shortNames] of Object.entries(osFamilies)) {\n if (shortNames.includes(osShortName)) {\n return osFamily;\n }\n }\n return \"\";\n};\nOperatingSystemParser.getOsShortName = (osName) => {\n for (const [shortName, name] of Object.entries(shortOsNames)) {\n if (name === osName)\n return shortName;\n }\n return \"\";\n};\n", "{\n \"Dell\": [\n \"MDDR(JS)?\",\n \"MDDC(JS)?\",\n \"MDDS(JS)?\"\n ],\n \"Acer\": [\n \"MAAR(JS)?\"\n ],\n \"Sony\": [\n \"MASE(JS)?\",\n \"MASP(JS)?\",\n \"MASA(JS)?\"\n ],\n \"Asus\": [\n \"MAAU\",\n \"NP0[26789]\",\n \"ASJB\",\n \"ASU2(JS)?\"\n ],\n \"Samsung\": [\n \"MASM(JS)?\",\n \"SMJB\"\n ],\n \"Lenovo\": [\n \"MALC(JS)?\",\n \"MALE(JS)?\",\n \"MALN(JS)?\",\n \"LCJB\",\n \"LEN2\"\n ],\n \"Toshiba\": [\n \"MATM(JS)?\",\n \"MATB(JS)?\",\n \"MATP(JS)?\",\n \"TNJB\",\n \"TAJB\"\n ],\n \"Medion\": [\n \"MAMD\"\n ],\n \"MSI\": [\n \"MAMI(JS)?\",\n \"MAM3\"\n ],\n \"Gateway\": [\n \"MAGW(JS)?\"\n ],\n \"Fujitsu\": [\n \"MAFS(JS)?\",\n \"FSJB\"\n ],\n \"Compaq\": [\n \"CPDTDF\",\n \"CPNTDF(JS?)\",\n \"CMNTDF(JS)?\",\n \"CMDTDF(JS)?\"\n ],\n \"HP\": [\n \"HPCMHP\",\n \"HPNTDF(JS)?\",\n \"HPDTDF(JS)?\"\n ],\n \"Hyrican\": [\n \"MANM(JS)?\"\n ],\n \"Ordissimo\": [\n \"Ordissimo\",\n \"webissimo3\"\n ]\n}\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst vendorfragments_json_1 = __importDefault(require(\"../../fixtures/regexes/vendorfragments.json\"));\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass VendorFragmentParser {\n constructor() {\n this.parse = (userAgent) => {\n for (const [brand, vendorFragment] of Object.entries(vendorfragments_json_1.default)) {\n for (const regex of vendorFragment) {\n const match = user_agent_1.userAgentParser(regex, userAgent);\n if (!match)\n continue;\n return brand;\n }\n }\n return \"\";\n };\n }\n}\nexports.default = VendorFragmentParser;\n", "[\n {\n \"regex\": \"360Spider(-Image|-Video)?\",\n \"name\": \"360Spider\",\n \"category\": \"Search bot\",\n \"url\": \"https://www.so.com/help/help_3_2.html\",\n \"producer\": {\n \"name\": \"Online Media Group, Inc.\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"Aboundex\",\n \"name\": \"Aboundexbot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.aboundex.com/crawler/\",\n \"producer\": {\n \"name\": \"Aboundex.com\",\n \"url\": \"http://www.aboundex.com\"\n }\n },\n {\n \"regex\": \"AcoonBot\",\n \"name\": \"Acoon\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.acoon.de/robot.asp\",\n \"producer\": {\n \"name\": \"Acoon GmbH\",\n \"url\": \"http://www.acoon.de\"\n }\n },\n {\n \"regex\": \"AddThis\\\\.com\",\n \"name\": \"AddThis.com\",\n \"category\": \"Social Media Agent\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Clearspring Technologies, Inc.\",\n \"url\": \"http://www.clearspring.com\"\n }\n },\n {\n \"regex\": \"AhrefsBot\",\n \"name\": \"aHrefs Bot\",\n \"category\": \"Crawler\",\n \"url\": \"https://ahrefs.com/robot\",\n \"producer\": {\n \"name\": \"Ahrefs Pte Ltd\",\n \"url\": \"https://ahrefs.com/robot\"\n }\n },\n {\n \"regex\": \"ia_archiver|alexabot|verifybot\",\n \"name\": \"Alexa Crawler\",\n \"category\": \"Search bot\",\n \"url\": \"https://support.alexa.com/hc/en-us/sections/200100794-Crawlers\",\n \"producer\": {\n \"name\": \"Alexa Internet\",\n \"url\": \"https://www.alexa.com\"\n }\n },\n {\n \"regex\": \"alexa site audit\",\n \"name\": \"Alexa Site Audit\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://support.alexa.com/hc/en-us/articles/200450194\",\n \"producer\": {\n \"name\": \"Alexa Internet\",\n \"url\": \"https://www.alexa.com\"\n }\n },\n {\n \"regex\": \"Amazon[ -]Route ?53[ -]Health[ -]Check[ -]Service\",\n \"name\": \"Amazon Route53 Health Check\",\n \"category\": \"Service Agent\",\n \"producer\": {\n \"name\": \"Amazon Web Services\",\n \"url\": \"https://aws.amazon.com/\"\n }\n },\n {\n \"regex\": \"AmorankSpider\",\n \"name\": \"Amorank Spider\",\n \"category\": \"Crawler\",\n \"url\": \"http://amorank.com/webcrawler.html\",\n \"producer\": {\n \"name\": \"Amorank\",\n \"url\": \"http://www.amorank.com\"\n }\n },\n {\n \"regex\": \"ApacheBench\",\n \"name\": \"ApacheBench\",\n \"category\": \"Benchmark\",\n \"url\": \"https://httpd.apache.org/docs/2.4/programs/ab.html\",\n \"producer\": {\n \"name\": \"The Apache Software Foundation\",\n \"url\": \"https://www.apache.org/foundation/\"\n }\n },\n {\n \"regex\": \"Applebot\",\n \"name\": \"Applebot\",\n \"category\": \"Crawler\",\n \"url\": \"https://support.apple.com/en-us/HT204683\",\n \"producer\": {\n \"name\": \"Apple Inc\",\n \"url\": \"https://www.apple.com\"\n }\n },\n {\n \"regex\": \"AppSignalBot\",\n \"name\": \"AppSignalBot\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://docs.appsignal.com/uptime-monitoring/\",\n \"producer\": {\n \"name\": \"AppSignal\",\n \"url\": \"https://appsignal.com/\"\n }\n },\n {\n \"regex\": \"Arachni\",\n \"name\": \"Arachni\",\n \"category\": \"Security Checker\",\n \"url\": \"https://www.arachni-scanner.com/\",\n \"producer\": {\n \"name\": \"Sarosys LLC\",\n \"url\": \"https://www.sarosys.com/\"\n }\n },\n {\n \"regex\": \"AspiegelBot\",\n \"name\": \"AspiegelBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://aspiegel.com/\",\n \"producer\": {\n \"name\": \"Huawei\",\n \"url\": \"https://www.huawei.com/\"\n }\n },\n {\n \"regex\": \"Castro 2, Episode Duration Lookup\",\n \"name\": \"Castro 2\",\n \"category\": \"Service Agent\",\n \"url\": \"http://supertop.co/castro/\",\n \"producer\": {\n \"name\": \"Supertop\",\n \"url\": \"http://supertop.co\"\n }\n },\n {\n \"regex\": \"Curious George\",\n \"name\": \"Analytics SEO Crawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.analyticsseo.com/crawler\",\n \"producer\": {\n \"name\": \"Analytics SEO\",\n \"url\": \"http://www.analyticsseo.com\"\n }\n },\n {\n \"regex\": \"archive\\\\.org_bot|special_archiver\",\n \"name\": \"archive.org bot\",\n \"category\": \"Crawler\",\n \"url\": \"https://archive.org/details/archive.org_bot\",\n \"producer\": {\n \"name\": \"The Internet Archive\",\n \"url\": \"https://archive.org\"\n }\n },\n {\n \"regex\": \"Ask Jeeves/Teoma\",\n \"name\": \"Ask Jeeves\",\n \"category\": \"Search bot\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Ask Jeeves Inc.\",\n \"url\": \"http://www.ask.com\"\n }\n },\n {\n \"regex\": \"Backlink-Check\\\\.de\",\n \"name\": \"Backlink-Check.de\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.backlink-check.de/bot.html\",\n \"producer\": {\n \"name\": \"Mediagreen Medienservice\",\n \"url\": \"http://www.backlink-check.de\"\n }\n },\n {\n \"regex\": \"BacklinkCrawler\",\n \"name\": \"BacklinkCrawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.backlinktest.com/crawler.html\",\n \"producer\": {\n \"name\": \"2.0Promotion GbR\",\n \"url\": \"http://www.backlinktest.com\"\n }\n },\n {\n \"regex\": \"baiduspider(-image)?|baidu Transcoder|baidu.*spider\",\n \"name\": \"Baidu Spider\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.baidu.com/search/spider.htm\",\n \"producer\": {\n \"name\": \"Baidu\",\n \"url\": \"http://www.baidu.com\"\n }\n },\n {\n \"regex\": \"BazQux\",\n \"name\": \"BazQux Reader\",\n \"url\": \"https://bazqux.com/fetcher\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"MSNBot|msrbot|bingbot|BingPreview|msnbot-(UDiscovery|NewsBlogs)|adidxbot\",\n \"name\": \"BingBot\",\n \"category\": \"Search bot\",\n \"url\": \"http://search.msn.com/msnbot.htmn\",\n \"producer\": {\n \"name\": \"Microsoft Corporation\",\n \"url\": \"http://www.microsoft.com\"\n }\n },\n {\n \"regex\": \"Blekkobot\",\n \"name\": \"Blekkobot\",\n \"category\": \"Search bot\",\n \"url\": \"http://blekko.com/about/blekkobot\",\n \"producer\": {\n \"name\": \"Blekko\",\n \"url\": \"http://blekko.com\"\n }\n },\n {\n \"regex\": \"BLEXBot(Test)?\",\n \"name\": \"BLEXBot Crawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://webmeup-crawler.com\",\n \"producer\": {\n \"name\": \"WebMeUp\",\n \"url\": \"http://webmeup.com\"\n }\n },\n {\n \"regex\": \"Bloglovin\",\n \"name\": \"Bloglovin\",\n \"url\": \"http://www.bloglovin.com\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"Blogtrottr\",\n \"name\": \"Blogtrottr\",\n \"url\": \"\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"Blogtrottr Ltd\",\n \"url\": \"https://blogtrottr.com/\"\n }\n },\n {\n \"regex\": \"BoardReader Blog Indexer\",\n \"name\": \"BoardReader Blog Indexer\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"BoardReader\",\n \"url\": \"https://boardreader.com/\"\n }\n },\n {\n \"regex\": \"BountiiBot\",\n \"name\": \"Bountii Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://bountii.com/contact.php\",\n \"producer\": {\n \"name\": \"Bountii Inc.\",\n \"url\": \"http://bountii.com\"\n }\n },\n {\n \"regex\": \"Browsershots\",\n \"name\": \"Browsershots\",\n \"category\": \"Service Agent\",\n \"url\": \"http://browsershots.org/faq\",\n \"producer\": {\n \"name\": \"Browsershots.org\",\n \"url\": \"http://browsershots.org\"\n }\n },\n {\n \"regex\": \"BUbiNG\",\n \"name\": \"BUbiNG\",\n \"category\": \"Crawler\",\n \"url\": \"http://law.di.unimi.it/BUbiNG.html\",\n \"producer\": {\n \"name\": \"The Laboratory for Web Algorithmics (LAW)\",\n \"url\": \"http://law.di.unimi.it/software.php#buging\"\n }\n },\n {\n \"regex\": \"(?<!HTC)[ _]Butterfly/\",\n \"name\": \"Butterfly Robot\",\n \"category\": \"Search bot\",\n \"url\": \"http://labs.topsy.com/butterfly\",\n \"producer\": {\n \"name\": \"Topsy Labs\",\n \"url\": \"http://labs.topsy.com\"\n }\n },\n {\n \"regex\": \"CareerBot\",\n \"name\": \"CareerBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.career-x.de/bot.html\",\n \"producer\": {\n \"name\": \"career-x GmbH\",\n \"url\": \"http://www.career-x.de\"\n }\n },\n {\n \"regex\": \"CCBot\",\n \"name\": \"ccBot crawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://commoncrawl.org/faq/\",\n \"producer\": {\n \"name\": \"reddit inc.\",\n \"url\": \"http://www.reddit.com\"\n }\n },\n {\n \"regex\": \"Cliqzbot\",\n \"name\": \"Cliqzbot\",\n \"category\": \"Crawler\",\n \"url\": \"http://cliqz.com/company/cliqzbot\",\n \"producer\": {\n \"name\": \"10betterpages GmbH\",\n \"url\": \"http://cliqz.com\"\n }\n },\n {\n \"regex\": \"Cloudflare-AMP\",\n \"name\": \"CloudFlare AMP Fetcher\",\n \"category\": \"Crawler\",\n \"url\": \"https://amp.cloudflare.com/doc/fetcher.html\",\n \"producer\": {\n \"name\": \"CloudFlare\",\n \"url\": \"http://www.cloudflare.com\"\n }\n },\n {\n \"regex\": \"CloudflareDiagnostics\",\n \"name\": \"Cloudflare Diagnostics\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://www.cloudflare.com/\",\n \"producer\": {\n \"name\": \"Cloudflare\",\n \"url\": \"https://www.cloudflare.com\"\n }\n },\n {\n \"regex\": \"CloudFlare-AlwaysOnline\",\n \"name\": \"CloudFlare Always Online\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://www.cloudflare.com/always-online\",\n \"producer\": {\n \"name\": \"CloudFlare\",\n \"url\": \"http://www.cloudflare.com\"\n }\n },\n {\n \"regex\": \"coccoc.com\",\n \"name\": \"C\u1ED1c C\u1ED1c Bot\",\n \"url\": \"https://help.coccoc.com/en/search-engine/coccoc-robots\",\n \"category\": \"Search bot\",\n \"producer\": {\n \"name\": \"C\u1ED1c C\u1ED1c\",\n \"url\": \"https://coccoc.com/\"\n }\n },\n {\n \"regex\": \"collectd\",\n \"name\": \"Collectd\",\n \"url\": \"https://collectd.org/\",\n \"category\": \"Site Monitor\",\n \"producer\": {\n \"name\": \"Collectd\",\n \"url\": \"https://collectd.org/\"\n }\n },\n {\n \"regex\": \"CommaFeed\",\n \"name\": \"CommaFeed\",\n \"url\": \"http://www.commafeed.com\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"CSS Certificate Spider\",\n \"name\": \"CSS Certificate Spider\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.css-security.com/certificatespider/\",\n \"producer\": {\n \"name\": \"Certified Security Solutions\",\n \"url\": \"https://www.css-security.com/company/about-us/\"\n }\n },\n {\n \"regex\": \"Datadog Agent\",\n \"name\": \"Datadog Agent\",\n \"url\": \"https://github.com/DataDog/dd-agent\",\n \"category\": \"Site Monitor\",\n \"producer\": {\n \"name\": \"Datadog\",\n \"url\": \"https://www.datadoghq.com/\"\n }\n },\n {\n \"regex\": \"Datanyze\",\n \"name\": \"Datanyze\",\n \"url\": \"\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"Datanyze\",\n \"url\": \"https://www.datanyze.com\"\n }\n },\n {\n \"regex\": \"Dataprovider\",\n \"name\": \"Dataprovider\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Dataprovider B.V.\",\n \"url\": \"https://www.dataprovider.com/\"\n }\n },\n {\n \"regex\": \"Daum(oa)?[ /][0-9]\",\n \"name\": \"Daum\",\n \"category\": \"Search bot\",\n \"url\": \"http://tab.search.daum.net/aboutWebSearch_en.html\",\n \"producer\": {\n \"name\": \"Daum Communications Corp.\",\n \"url\": \"http://www.kakaocorp.com/main\"\n }\n },\n {\n \"regex\": \"Dazoobot\",\n \"name\": \"Dazoobot\",\n \"category\": \"Search bot\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"DAZOO.FR\",\n \"url\": \"http://dazoo.fr\"\n }\n },\n {\n \"regex\": \"discobot(-news)?\",\n \"name\": \"Discobot\",\n \"category\": \"Search bot\",\n \"url\": \"http://discoveryengine.com/discobot.html\",\n \"producer\": {\n \"name\": \"Discovery Engine\",\n \"url\": \"http://discoveryengine.com\"\n }\n },\n {\n \"regex\": \"Domain Re-Animator Bot|support@domainreanimator.com\",\n \"name\": \"Domain Re-Animator Bot\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Domain Re-Animator, LLC\",\n \"url\": \"http://domainreanimator.com\"\n }\n },\n {\n \"regex\": \"DotBot\",\n \"name\": \"DotBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.opensiteexplorer.org/dotbot\",\n \"producer\": {\n \"name\": \"SEOmoz, Inc.\",\n \"url\": \"http://moz.com/\"\n }\n },\n {\n \"regex\": \"DuckDuck(?:Go-Favicons-)?Bot\",\n \"name\": \"DuckDuckGo Bot\",\n \"category\": \"Search bot\",\n \"url\": \"https://duckduckgo.com/duckduckbot\",\n \"producer\": {\n \"name\": \"DuckDuckGo\",\n \"url\": \"https://duckduckgo.com/\"\n }\n },\n {\n \"regex\": \"EasouSpider\",\n \"name\": \"Easou Spider\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.easou.com/search/spider.html\",\n \"producer\": {\n \"name\": \"easou ICP\",\n \"url\": \"http://www.easou.com\"\n }\n },\n {\n \"regex\": \"eCairn-Grabber\",\n \"name\": \"eCairn-Grabber\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"eCairn\",\n \"url\": \"https://ecairn.com\"\n }\n },\n {\n \"regex\": \"EMail Exractor\",\n \"name\": \"EMail Exractor\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"evc-batch\",\n \"name\": \"evc-batch\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"eVenture Capital Partners II, LLC\",\n \"url\": \"http://www.eventures.vc/\"\n }\n },\n {\n \"regex\": \"Exabot(-Thumbnails|-Images)?|ExaleadCloudview\",\n \"name\": \"ExaBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.exabot.com/go/robot\",\n \"producer\": {\n \"name\": \"Dassault Syst\u00E8mes\",\n \"url\": \"http://www.3ds.com\"\n }\n },\n {\n \"regex\": \"ExactSeek Crawler\",\n \"name\": \"ExactSeek Crawler\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.exactseek.com\",\n \"producer\": {\n \"name\": \"Jayde Online, Inc.\",\n \"url\": \"http://www.jaydeonlineinc.com\"\n }\n },\n {\n \"regex\": \"Ezooms\",\n \"name\": \"Ezooms\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"SEOmoz, Inc.\",\n \"url\": \"http://moz.com/\"\n }\n },\n {\n \"regex\": \"facebookexternalhit|facebookplatform|facebookexternalua\",\n \"name\": \"Facebook External Hit\",\n \"category\": \"Social Media Agent\",\n \"url\": \"https://www.facebook.com/externalhit_uatext.php\",\n \"producer\": {\n \"name\": \"Facebook\",\n \"url\": \"http://www.facebook.com\"\n }\n },\n {\n \"regex\": \"Feedbin\",\n \"name\": \"Feedbin\",\n \"url\": \"http://feedbin.com/\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"FeedBurner\",\n \"name\": \"FeedBurner\",\n \"url\": \"http://www.feedburner.com\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"Feed Wrangler\",\n \"name\": \"Feed Wrangler\",\n \"url\": \"https://feedwrangler.net/\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"David Smith & Developing Perspective, LLC\",\n \"url\": \"https://david-smith.org\"\n }\n },\n {\n \"regex\": \"(Meta)?Feedly(Bot|App)?\",\n \"name\": \"Feedly\",\n \"url\": \"http://www.feedly.com\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"Feedspot\",\n \"name\": \"Feedspot\",\n \"url\": \"http://www.feedspot.com\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"Fever/[0-9]\",\n \"name\": \"Fever\",\n \"url\": \"http://feedafever.com/\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"FlipboardProxy|FlipboardRSS\",\n \"name\": \"Flipboard\",\n \"url\": \"http://flipboard.com/browserproxy\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"Flipboard\",\n \"url\": \"http://flipboard.com/\"\n }\n },\n {\n \"regex\": \"Findxbot\",\n \"name\": \"Findxbot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.findxbot.com\"\n },\n {\n \"regex\": \"FreshRSS\",\n \"name\": \"FreshRSS\",\n \"category\": \"Feed Fetcher\",\n \"url\": \"https://freshrss.org/\"\n },\n {\n \"regex\": \"Genieo\",\n \"name\": \"Genieo Web filter\",\n \"category\": \"\",\n \"url\": \"http://www.genieo.com/webfilter.html\",\n \"producer\": {\n \"name\": \"Genieo\",\n \"url\": \"http://www.genieo.com\"\n }\n },\n {\n \"regex\": \"GigablastOpenSource\",\n \"name\": \"Gigablast\",\n \"category\": \"Search bot\",\n \"url\": \"https://github.com/gigablast/open-source-search-engine\",\n \"producer\": {\n \"name\": \"Matt Wells\",\n \"url\": \"http://www.gigablast.com/faq.html\"\n }\n },\n {\n \"regex\": \"Gluten Free Crawler\",\n \"name\": \"Gluten Free Crawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://glutenfreepleasure.com/\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"ichiro/mobile goo\",\n \"name\": \"Goo\",\n \"category\": \"Search bot\",\n \"url\": \"http://search.goo.ne.jp/option/use/sub4/sub4-1\",\n \"producer\": {\n \"name\": \"NTT Resonant\",\n \"url\": \"http://goo.ne.jp\"\n }\n },\n {\n \"regex\": \"Google Favicon\",\n \"name\": \"Google Favicon\",\n \"category\": \"Crawler\"\n },\n {\n \"regex\": \"Google Search Console\",\n \"name\": \"Google Search Console\",\n \"category\": \"Crawler\",\n \"url\": \"https://search.google.com/search-console/about\",\n \"producer\": {\n \"name\": \"Google Inc.\",\n \"url\": \"http://www.google.com\"\n }\n },\n {\n \"regex\": \"Google Page Speed Insights\",\n \"name\": \"Google PageSpeed Insights\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://developers.google.com/speed/pagespeed/insights/\",\n \"producer\": {\n \"name\": \"Google Inc.\",\n \"url\": \"http://www.google.com\"\n }\n },\n {\n \"regex\": \"google_partner_monitoring\",\n \"name\": \"Google Partner Monitoring\",\n \"category\": \"Site Monitor\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Google Inc.\",\n \"url\": \"http://www.google.com\"\n }\n },\n {\n \"regex\": \"Google-Cloud-Scheduler\",\n \"name\": \"Google Cloud Scheduler\",\n \"category\": \"Crawler\",\n \"url\": \"https://cloud.google.com/scheduler\",\n \"producer\": {\n \"name\": \"Google Inc.\",\n \"url\": \"https://www.google.com\"\n }\n },\n {\n \"regex\": \"Google-Structured-Data-Testing-Tool\",\n \"name\": \"Google Structured Data Testing Tool\",\n \"category\": \"Validator\",\n \"url\": \"https://search.google.com/structured-data/testing-tool\",\n \"producer\": {\n \"name\": \"Google Inc.\",\n \"url\": \"http://www.google.com\"\n }\n },\n {\n \"regex\": \"GoogleStackdriverMonitoring\",\n \"name\": \"Google Stackdriver Monitoring\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://cloud.google.com/monitoring\",\n \"producer\": {\n \"name\": \"Google Inc.\",\n \"url\": \"https://www.google.com\"\n }\n },\n {\n \"regex\": \"via ggpht\\\\.com GoogleImageProxy\",\n \"name\": \"Gmail Image Proxy\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Google Inc.\",\n \"url\": \"http://www.google.com\"\n }\n },\n {\n \"regex\": \"SeznamEmailProxy\",\n \"name\": \"Seznam Email Proxy\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Seznam.cz, a.s.\",\n \"url\": \"http://www.seznam.cz/\"\n }\n },\n {\n \"regex\": \"Seznam-Zbozi-robot\",\n \"name\": \"Seznam Zbozi.cz\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Seznam.cz, a.s.\",\n \"url\": \"https://www.zbozi.cz/\"\n }\n },\n {\n \"regex\": \"Heurekabot-Feed\",\n \"name\": \"Heureka Feed\",\n \"category\": \"Crawler\",\n \"url\": \"https://sluzby.heureka.cz/napoveda/heurekabot/\",\n \"producer\": {\n \"name\": \"Heureka.cz, a.s.\",\n \"url\": \"https://www.heureka.cz/\"\n }\n },\n {\n \"regex\": \"ShopAlike\",\n \"name\": \"ShopAlike\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Visual Meta\",\n \"url\": \"https://www.shopalike.cz/\"\n }\n },\n {\n \"regex\": \"AdsBot-Google(-Mobile)?|Adwords-(DisplayAds|Express|Instant)|Google Web Preview|Google[ -]Publisher[ -]Plugin|Google-(Ads-Qualify|Adwords|AMPHTML|Assess|HotelAdsVerifier|Read-Aloud|Shopping-Quality|Site-Verification|speakr|Test|Youtube-Links)|(APIs|DuplexWeb|Feedfetcher|Mediapartners)-Google|Googlebot(-Mobile|-Image|-Video|-News)?|GoogleProducer|Google.*/\\\\+/web/snippet\",\n \"name\": \"Googlebot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.google.com/bot.html\",\n \"producer\": {\n \"name\": \"Google Inc.\",\n \"url\": \"http://www.google.com\"\n }\n },\n {\n \"regex\": \"heritrix\",\n \"name\": \"Heritrix\",\n \"category\": \"Crawler\",\n \"url\": \"https://webarchive.jira.com/wiki/display/Heritrix/Heritrix\",\n \"producer\": {\n \"name\": \"The Internet Archive\",\n \"url\": \"https://archive.org\"\n }\n },\n {\n \"regex\": \"HubSpot \",\n \"name\": \"HubSpot\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"HubSpot Inc.\",\n \"url\": \"https://www.hubspot.com\"\n }\n },\n {\n \"regex\": \"HTTPMon\",\n \"name\": \"HTTPMon\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://www.httpmon.com\",\n \"producer\": {\n \"name\": \"towards GmbH\",\n \"url\": \"http://www.towards.ch/\"\n }\n },\n {\n \"regex\": \"ICC-Crawler\",\n \"name\": \"ICC-Crawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.nict.go.jp/en/univ-com/plan/crawl.html\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"inoreader.com\",\n \"name\": \"inoreader\",\n \"category\": \"Feed Reader\",\n \"url\": \"https://www.inoreader.com\"\n },\n {\n \"regex\": \"iisbot\",\n \"name\": \"IIS Site Analysis\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.iis.net/iisbot.html\",\n \"producer\": {\n \"name\": \"Microsoft Corporation\",\n \"url\": \"http://www.microsoft.com\"\n }\n },\n {\n \"regex\": \"ips-agent\",\n \"name\": \"IPS Agent\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"VeriSign, Inc\",\n \"url\": \"http://www.verisign.com/\"\n }\n },\n {\n \"regex\": \"IP-Guide\\\\.com\",\n \"name\": \"IP-Guide Crawler\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"https://ip-guide.com\"\n }\n },\n {\n \"regex\": \"kouio\",\n \"name\": \"Kouio\",\n \"url\": \"http://kouio.com/\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"larbin\",\n \"name\": \"Larbin web crawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://larbin.sourceforge.net\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"([A-z0-9]*)-Lighthouse\",\n \"name\": \"Lighthouse\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://developers.google.com/web/tools/lighthouse\",\n \"producer\": {\n \"name\": \"Lighthouse\",\n \"url\": \"https://developers.google.com/web/tools/lighthouse\"\n }\n },\n {\n \"regex\": \"linkdexbot(-mobile)?|linkdex\\\\.com\",\n \"name\": \"Linkdex Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.linkdex.com/bots\",\n \"producer\": {\n \"name\": \"Mojeek Ltd.\",\n \"url\": \"http://www.mojeek.com\"\n }\n },\n {\n \"regex\": \"LinkedInBot\",\n \"name\": \"LinkedIn Bot\",\n \"category\": \"Social Media Agent\",\n \"url\": \"http://www.linkedin.com\",\n \"producer\": {\n \"name\": \"LinkedIn\",\n \"url\": \"http://www.linkedin.com\"\n }\n },\n {\n \"regex\": \"ltx71\",\n \"name\": \"LTX71\",\n \"url\": \"http://ltx71.com/\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"Mail\\\\.RU(_Bot)?\",\n \"name\": \"Mail.Ru Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://help.mail.ru/webmaster/indexing/robots/types_robots\",\n \"producer\": {\n \"name\": \"Mail.Ru Group\",\n \"url\": \"http://corp.mail.ru\"\n }\n },\n {\n \"regex\": \"magpie-crawler\",\n \"name\": \"Magpie-Crawler\",\n \"category\": \"Social Media Agent\",\n \"url\": \"http://www.brandwatch.com/magpie-crawler/\",\n \"producer\": {\n \"name\": \"Brandwatch\",\n \"url\": \"http://www.brandwatch.com\"\n }\n },\n {\n \"regex\": \"MagpieRSS\",\n \"name\": \"MagpieRSS\",\n \"url\": \"http://magpierss.sourceforge.net/\",\n \"category\": \"Feed Parser\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"masscan\",\n \"name\": \"masscan\",\n \"url\": \"https://github.com/robertdavidgraham/masscan\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"Robert Graham\",\n \"url\": \"https://github.com/robertdavidgraham\"\n }\n },\n {\n \"regex\": \"Mastodon/\",\n \"name\": \"Mastodon Bot\",\n \"category\": \"Social Media Agent\"\n },\n {\n \"regex\": \"meanpathbot\",\n \"name\": \"Meanpath Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.meanpath.com/meanpathbot.html\",\n \"producer\": {\n \"name\": \"Meanpath\",\n \"url\": \"http://www.meanpath.com\"\n }\n },\n {\n \"regex\": \"MetaJobBot\",\n \"name\": \"MetaJobBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.metajob.at/the/crawler\",\n \"producer\": {\n \"name\": \"MetaJob\",\n \"url\": \"http://www.metajob.at\"\n }\n },\n {\n \"regex\": \"MetaInspector\",\n \"name\": \"MetaInspector\",\n \"category\": \"Crawler\",\n \"url\": \"https://github.com/jaimeiniesta/metainspector\"\n },\n {\n \"regex\": \"MixrankBot\",\n \"name\": \"Mixrank Bot\",\n \"category\": \"Crawler\",\n \"url\": \"http://mixrank.com\",\n \"producer\": {\n \"name\": \"Online Media Group, Inc.\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"MJ12bot\",\n \"name\": \"MJ12 Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://majestic12.co.uk/bot.php\",\n \"producer\": {\n \"name\": \"Majestic-12\",\n \"url\": \"http://majestic12.co.uk\"\n }\n },\n {\n \"regex\": \"Mnogosearch\",\n \"name\": \"Mnogosearch\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.mnogosearch.org/\",\n \"producer\": {\n \"name\": \"Lavtech.Com Corp.\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"MojeekBot\",\n \"name\": \"MojeekBot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.mojeek.com/bot.html\",\n \"producer\": {\n \"name\": \"Mojeek Ltd.\",\n \"url\": \"http://www.mojeek.com\"\n }\n },\n {\n \"regex\": \"munin\",\n \"name\": \"Munin\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://munin-monitoring.org/\",\n \"producer\": {\n \"name\": \"Munin\",\n \"url\": \"http://munin-monitoring.org/\"\n }\n },\n {\n \"regex\": \"NalezenCzBot\",\n \"name\": \"NalezenCzBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.nalezen.cz/about-crawler\",\n \"producer\": {\n \"name\": \"Jaroslav Kubo\u0161\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"check_http/v\",\n \"name\": \"Nagios check_http\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://nagios.org\",\n \"producer\": {\n \"name\": \"Nagios Plugins Development Team\",\n \"url\": \"https://nagios.org\"\n }\n },\n {\n \"regex\": \"nbertaupete95\\\\(at\\\\)gmail.com\",\n \"name\": \"nbertaupete95\",\n \"category\": \"Crawler\"\n },\n {\n \"regex\": \"Netcraft( Web Server Survey| SSL Server Survey|SurveyAgent)\",\n \"name\": \"Netcraft Survey Bot\",\n \"category\": \"Search bot\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Netcraft\",\n \"url\": \"http://www.netcraft.com\"\n }\n },\n {\n \"regex\": \"netEstate NE Crawler\",\n \"name\": \"netEstate\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.website-datenbank.de/Impressum\",\n \"producer\": {\n \"name\": \"netEstate GmbH\",\n \"url\": \"https://www.netestate.de/en/\"\n }\n },\n {\n \"regex\": \"Netvibes\",\n \"name\": \"Netvibes\",\n \"url\": \"http://www.netvibes.com/\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"NewsBlur .*(Fetcher|Finder)\",\n \"name\": \"NewsBlur\",\n \"url\": \"http://www.newsblur.com\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"NewsGatorOnline\",\n \"name\": \"NewsGator\",\n \"url\": \"http://www.newsgator.com\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"nlcrawler\",\n \"name\": \"NLCrawler\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Northern Light\",\n \"url\": \"http://northernlight.com\"\n }\n },\n {\n \"regex\": \"Nmap Scripting Engine\",\n \"name\": \"Nmap\",\n \"category\": \"Security Checker\",\n \"url\": \"https://nmap.org/book/nse.html\",\n \"producer\": {\n \"name\": \"Nmap\",\n \"url\": \"https://nmap.org/\"\n }\n },\n {\n \"regex\": \"Nuzzel\",\n \"name\": \"Nuzzel\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"Nuzzel\",\n \"url\": \"https://www.nuzzel.com/\"\n }\n },\n {\n \"regex\": \"Octopus [0-9]\",\n \"name\": \"Octopus\"\n },\n {\n \"regex\": \"omgili(?:bot)?\",\n \"name\": \"Omgili bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.omgili.com/Crawler.html\",\n \"producer\": {\n \"name\": \"Omgili\",\n \"url\": \"http://www.omgili.com\"\n }\n },\n {\n \"regex\": \"OpenindexSpider\",\n \"name\": \"Openindex Spider\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.openindex.io/en/webmasters/spider.html\",\n \"producer\": {\n \"name\": \"Openindex B.V.\",\n \"url\": \"http://www.openindex.io\"\n }\n },\n {\n \"regex\": \"spbot\",\n \"name\": \"OpenLinkProfiler\",\n \"category\": \"Crawler\",\n \"url\": \"http://openlinkprofiler.org/bot\",\n \"producer\": {\n \"name\": \"Axandra GmbH\",\n \"url\": \"http://www.axandra.com\"\n }\n },\n {\n \"regex\": \"OpenWebSpider\",\n \"name\": \"OpenWebSpider\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.openwebspider.org\",\n \"producer\": {\n \"name\": \"OpenWebSpider Lab\",\n \"url\": \"http://lab.openwebspider.org\"\n }\n },\n {\n \"regex\": \"OrangeBot|VoilaBot\",\n \"name\": \"Orange Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://lemoteur.orange.fr\",\n \"producer\": {\n \"name\": \"Orange\",\n \"url\": \"http://www.orange.fr\"\n }\n },\n {\n \"regex\": \"PaperLiBot\",\n \"name\": \"PaperLiBot\",\n \"category\": \"Search bot\",\n \"url\": \"http://support.paper.li/entries/20023257-what-is-paper-li\",\n \"producer\": {\n \"name\": \"Smallrivers SA\",\n \"url\": \"http://www.paper.li\"\n }\n },\n {\n \"regex\": \"phantomas/\",\n \"name\": \"Phantomas\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://github.com/macbre/phantomas\"\n },\n {\n \"regex\": \"phpservermon\",\n \"name\": \"PHP Server Monitor\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://github.com/phpservermon/phpservermon\",\n \"producer\": {\n \"name\": \"PHP Server Monitor\",\n \"url\": \"http://www.phpservermonitor.org/\"\n }\n },\n {\n \"regex\": \"PocketParser\",\n \"name\": \"PocketParser\",\n \"category\": \"Read-it-later Service\",\n \"url\": \"https://getpocket.com/pocketparser_ua\",\n \"producer\": {\n \"name\": \"Pocket\",\n \"url\": \"https://getpocket.com/\"\n }\n },\n {\n \"regex\": \"PritTorrent\",\n \"name\": \"PritTorrent\",\n \"category\": \"Crawler\",\n \"url\": \"https://github.com/astro/prittorrent\",\n \"producer\": {\n \"name\": \"Bitlove\",\n \"url\": \"http://bitlove.org/\"\n }\n },\n {\n \"regex\": \"PRTG Network Monitor\",\n \"name\": \"PRTG Network Monitor\",\n \"category\": \"Network Monitor\",\n \"url\": \"https://www.paessler.com/prtg\",\n \"producer\": {\n \"name\": \"Paessler AG\",\n \"url\": \"https://www.paessler.com\"\n }\n },\n {\n \"regex\": \"psbot(-page)?\",\n \"name\": \"Picsearch bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.picsearch.com/bot.html\",\n \"producer\": {\n \"name\": \"Picsearch\",\n \"url\": \"http://www.picsearch.com\"\n }\n },\n {\n \"regex\": \"Pingdom(?:\\\\.com|TMS)\",\n \"name\": \"Pingdom Bot\",\n \"category\": \"Site Monitor\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Pingdom AB\",\n \"url\": \"https://www.pingdom.com\"\n }\n },\n {\n \"regex\": \"Quora Link Preview\",\n \"name\": \"Quora Link Preview\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Quora\",\n \"url\": \"http://www.quora.com\"\n }\n },\n {\n \"regex\": \"Quora-Bot\",\n \"name\": \"Quora Bot\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Quora\",\n \"url\": \"https://www.quora.com/\"\n }\n },\n {\n \"regex\": \"RamblerMail\",\n \"name\": \"RamblerMail Image Proxy\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Rambler&Co\",\n \"url\": \"https://rambler-co.ru/\"\n }\n },\n {\n \"regex\": \"QuerySeekerSpider\",\n \"name\": \"QuerySeekerSpider\",\n \"category\": \"Crawler\",\n \"url\": \"http://queryseeker.com/bot.html\",\n \"producer\": {\n \"name\": \"QueryEye Inc.\",\n \"url\": \"http://queryeye.com\"\n }\n },\n {\n \"regex\": \"Qwantify\",\n \"name\": \"Qwantify\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.qwant.com/\",\n \"producer\": {\n \"name\": \"Qwant Corporation\",\n \"url\": \"https://www.qwant.com/\"\n }\n },\n {\n \"regex\": \"Rainmeter\",\n \"name\": \"Rainmeter\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.rainmeter.net\"\n },\n {\n \"regex\": \"redditbot\",\n \"name\": \"Reddit Bot\",\n \"category\": \"Social Media Agent\",\n \"url\": \"http://www.reddit.com/feedback\",\n \"producer\": {\n \"name\": \"reddit inc.\",\n \"url\": \"http://www.reddit.com\"\n }\n },\n {\n \"regex\": \"Riddler\",\n \"name\": \"Riddler\",\n \"category\": \"Security search bot\",\n \"url\": \"https://riddler.io/about\",\n \"producer\": {\n \"name\": \"F-Secure\",\n \"url\": \"https://www.f-secure.com\"\n }\n },\n {\n \"regex\": \"rogerbot\",\n \"name\": \"Rogerbot\",\n \"category\": \"Crawler\",\n \"url\": \"http://moz.com/help/pro/what-is-rogerbot-\",\n \"producer\": {\n \"name\": \"SEOmoz, Inc.\",\n \"url\": \"http://moz.com/\"\n }\n },\n {\n \"regex\": \"ROI Hunter\",\n \"name\": \"ROI Hunter\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Roihunter a.s.\",\n \"url\": \"http://roihunter.com/\"\n }\n },\n {\n \"regex\": \"SafeDNSBot\",\n \"name\": \"SafeDNSBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.safedns.com/searchbot\",\n \"producer\": {\n \"name\": \"SafeDNS, Inc.\",\n \"url\": \"https://www.safedns.com/\"\n }\n },\n {\n \"regex\": \"Scrapy\",\n \"name\": \"Scrapy\",\n \"category\": \"Crawler\",\n \"url\": \"http://scrapy.org\"\n },\n {\n \"regex\": \"Screaming Frog SEO Spider\",\n \"name\": \"Screaming Frog SEO Spider\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.screamingfrog.co.uk/seo-spider\",\n \"producer\": {\n \"name\": \"Screaming Frog Ltd\",\n \"url\": \"http://www.screamingfrog.co.uk\"\n }\n },\n {\n \"regex\": \"ScreenerBot\",\n \"name\": \"ScreenerBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.screenerbot.com\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"SemrushBot\",\n \"name\": \"Semrush Bot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.semrush.com/bot.html\",\n \"producer\": {\n \"name\": \"SEMrush\",\n \"url\": \"http://www.semrush.com\"\n }\n },\n {\n \"regex\": \"SensikaBot\",\n \"name\": \"Sensika Bot\",\n \"category\": \"\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Sensika\",\n \"url\": \"http://sensika.com\"\n }\n },\n {\n \"regex\": \"SEOENG(World)?Bot\",\n \"name\": \"SEOENGBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.seoengine.com/seoengbot.htm\",\n \"producer\": {\n \"name\": \"SEO Engine\",\n \"url\": \"http://www.seoengine.com\"\n }\n },\n {\n \"regex\": \"SEOkicks-Robot\",\n \"name\": \"SEOkicks-Robot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.seokicks.de/robot.html\",\n \"producer\": {\n \"name\": \"SEOkicks\",\n \"url\": \"https://www.seokicks.de/\"\n }\n },\n {\n \"regex\": \"seoscanners\\\\.net\",\n \"name\": \"Seoscanners.net\",\n \"category\": \"Crawler\",\n \"url\": \"\"\n },\n {\n \"regex\": \"SkypeUriPreview\",\n \"name\": \"Skype URI Preview\",\n \"category\": \"Service Agent\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Skype Communications S.\u00E0.r.l.\",\n \"url\": \"https://www.skype.com\"\n }\n },\n {\n \"regex\": \"SeznamBot|SklikBot|Seznam screenshot-generator\",\n \"name\": \"Seznam Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.mapy.cz/cz/seznambot.html\",\n \"producer\": {\n \"name\": \"Seznam.cz, a.s.\",\n \"url\": \"http://www.seznam.cz/\"\n }\n },\n {\n \"regex\": \"shopify-partner-homepage-scraper\",\n \"name\": \"Shopify Partner\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.shopify.com/partners\",\n \"producer\": {\n \"name\": \"Shopify\",\n \"url\": \"https://www.shopify.com/\"\n }\n },\n {\n \"regex\": \"ShopWiki\",\n \"name\": \"ShopWiki\",\n \"category\": \"Search tools\",\n \"url\": \"http://www.shopwiki.com/wiki/Help:Bot\",\n \"producer\": {\n \"name\": \"ShopWiki Corp.\",\n \"url\": \"http://www.shopwiki.com\"\n }\n },\n {\n \"regex\": \"SilverReader\",\n \"name\": \"SilverReader\",\n \"url\": \"http://silverreader.com\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"SimplePie\",\n \"name\": \"SimplePie\",\n \"url\": \"http://www.simplepie.org\",\n \"category\": \"Feed Parser\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"SISTRIX Crawler\",\n \"name\": \"SISTRIX Crawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://crawler.sistrix.net\",\n \"producer\": {\n \"name\": \"SISTRIX GmbH\",\n \"url\": \"http://www.sistrix.de\"\n }\n },\n {\n \"regex\": \"compatible; (?:SISTRIX )?Optimizer\",\n \"name\": \"SISTRIX Optimizer\",\n \"category\": \"Crawler\",\n \"url\": \"https://optimizer.sistrix.com\",\n \"producer\": {\n \"name\": \"SISTRIX GmbH\",\n \"url\": \"http://www.sistrix.de\"\n }\n },\n {\n \"regex\": \"SiteSucker\",\n \"name\": \"SiteSucker\",\n \"category\": \"Crawler\",\n \"url\": \"http://ricks-apps.com/osx/sitesucker/\"\n },\n {\n \"regex\": \"sixy.ch\",\n \"name\": \"Sixy.ch\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://sixy.ch\",\n \"producer\": {\n \"name\": \"Manuel Kasper\",\n \"url\": \"https://neon1.net/\"\n }\n },\n {\n \"regex\": \"Slackbot|Slack-ImgProxy\",\n \"name\": \"Slackbot\",\n \"category\": \"Crawler\",\n \"url\": \"https://api.slack.com/robots\",\n \"producer\": {\n \"name\": \"Slack Technologies\",\n \"url\": \"http://slack.com\"\n }\n },\n {\n \"regex\": \"(Sogou (web|inst|Pic) spider)|New-Sogou-Spider\",\n \"name\": \"Sogou Spider\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.sogou.com/docs/help/webmasters.htm\",\n \"producer\": {\n \"name\": \"Sohu, Inc.\",\n \"url\": \"http://www.sogou.com\"\n }\n },\n {\n \"regex\": \"Sosospider|Sosoimagespider\",\n \"name\": \"Soso Spider\",\n \"category\": \"Search bot\",\n \"url\": \"http://help.soso.com/webspider.htm\",\n \"producer\": {\n \"name\": \"Tencent Holdings\",\n \"url\": \"http://www.soso.com\"\n }\n },\n {\n \"regex\": \"Sprinklr\",\n \"name\": \"Sprinklr\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Sprinklr, Inc.\",\n \"url\": \"https://www.sprinklr.com/\"\n }\n },\n {\n \"regex\": \"sqlmap/\",\n \"name\": \"sqlmap\",\n \"category\": \"Security Checker\",\n \"url\": \"http://sqlmap.org/\",\n \"producer\": {\n \"name\": \"sqlmap\",\n \"url\": \"http://sqlmap.org/\"\n }\n },\n {\n \"regex\": \"SSL Labs\",\n \"name\": \"SSL Labs\",\n \"category\": \"Validator\",\n \"url\": \"https://www.ssllabs.com/about/assessment.html\",\n \"producer\": {\n \"name\": \"SSL Labs\",\n \"url\": \"https://www.ssllabs.com/about/assessment.html\"\n }\n },\n {\n \"regex\": \"StatusCake\",\n \"name\": \"StatusCake\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://www.statuscake.com\",\n \"producer\": {\n \"name\": \"StatusCake\",\n \"url\": \"https://www.statuscake.com\"\n }\n },\n {\n \"regex\": \"Superfeedr bot\",\n \"name\": \"Superfeedr Bot\",\n \"category\": \"Feed Fetcher\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Superfeedr\",\n \"url\": \"https://superfeedr.com/\"\n }\n },\n {\n \"regex\": \"Sparkler/[0-9]\",\n \"name\": \"Sparkler\",\n \"category\": \"Crawler\",\n \"url\": \"https://github.com/USCDataScience/sparkler\"\n },\n {\n \"regex\": \"Spinn3r\",\n \"name\": \"Spinn3r\",\n \"category\": \"Crawler\",\n \"url\": \"http://spinn3r.com/robot\",\n \"producer\": {\n \"name\": \"Tailrank Inc\",\n \"url\": \"http://spinn3r.com\"\n }\n },\n {\n \"regex\": \"SputnikBot\",\n \"name\": \"Sputnik Bot\",\n \"category\": \"Crawler\",\n \"url\": \"\"\n },\n {\n \"regex\": \"SputnikFaviconBot\",\n \"name\": \"Sputnik Favicon Bot\",\n \"category\": \"Crawler\",\n \"url\": \"\"\n },\n {\n \"regex\": \"SputnikImageBot\",\n \"name\": \"Sputnik Image Bot\",\n \"category\": \"Crawler\",\n \"url\": \"\"\n },\n {\n \"regex\": \"SurveyBot\",\n \"name\": \"Survey Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.domaintools.com/webmasters/surveybot.php\",\n \"producer\": {\n \"name\": \"Domain Tools\",\n \"url\": \"http://www.domaintools.com\"\n }\n },\n {\n \"regex\": \"TarmotGezgin\",\n \"name\": \"Tarmot Gezgin\",\n \"url\": \"http://www.tarmot.com/gezgin/\",\n \"category\": \"Search bot\"\n },\n {\n \"regex\": \"TelegramBot\",\n \"name\": \"TelegramBot\",\n \"url\": \"https://telegram.org/blog/bot-revolution\"\n },\n {\n \"regex\": \"TLSProbe\",\n \"name\": \"TLSProbe\",\n \"url\": \"https://scan.trustnet.venafi.com/\",\n \"category\": \"Security search bot\",\n \"producer\": {\n \"name\": \"Venafi TrustNet\",\n \"url\": \"https://www.venafi.com\"\n }\n },\n {\n \"regex\": \"TinEye-bot\",\n \"name\": \"TinEye Crawler\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.tineye.com/crawler.html\",\n \"producer\": {\n \"name\": \"Id\u00E9e Inc.\",\n \"url\": \"http://ideeinc.com\"\n }\n },\n {\n \"regex\": \"Tiny Tiny RSS\",\n \"name\": \"Tiny Tiny RSS\",\n \"url\": \"http://tt-rss.org\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"theoldreader.com\",\n \"name\": \"theoldreader\",\n \"category\": \"Feed Reader\",\n \"url\": \"https://theoldreader.com\"\n },\n {\n \"regex\": \"trendictionbot\",\n \"name\": \"Trendiction Bot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.trendiction.de/bot\",\n \"producer\": {\n \"name\": \"Talkwalker Inc.\",\n \"url\": \"http://www.talkwalker.com\"\n }\n },\n {\n \"regex\": \"TurnitinBot\",\n \"name\": \"TurnitinBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.turnitin.com/robot/crawlerinfo.html\",\n \"producer\": {\n \"name\": \"iParadigms, LLC.\",\n \"url\": \"http://www.turnitin.com\"\n }\n },\n {\n \"regex\": \"TweetedTimes Bot\",\n \"name\": \"TweetedTimes Bot\",\n \"category\": \"Crawler\",\n \"url\": \"http://tweetedtimes.com\",\n \"producer\": {\n \"name\": \"TweetedTimes\",\n \"url\": \"http://tweetedtimes.com/\"\n }\n },\n {\n \"regex\": \"TweetmemeBot\",\n \"name\": \"Tweetmeme Bot\",\n \"category\": \"Crawler\",\n \"url\": \"http://tweetmeme.com/\",\n \"producer\": {\n \"name\": \"Mediasift\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"Twingly Recon\",\n \"name\": \"Twingly Recon\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"Twingly\",\n \"url\": \"https://www.twingly.com\"\n }\n },\n {\n \"regex\": \"Twitterbot\",\n \"name\": \"Twitterbot\",\n \"category\": \"Social Media Agent\",\n \"url\": \"https://dev.twitter.com/docs/cards/getting-started\",\n \"producer\": {\n \"name\": \"Twitter\",\n \"url\": \"http://www.twitter.com\"\n }\n },\n {\n \"regex\": \"UniversalFeedParser\",\n \"name\": \"UniversalFeedParser\",\n \"category\": \"Feed Fetcher\",\n \"url\": \"https://github.com/kurtmckee/feedparser\",\n \"producer\": {\n \"name\": \"Kurt McKee\",\n \"url\": \"https://github.com/kurtmckee\"\n }\n },\n {\n \"regex\": \"via secureurl\\\\.fwdcdn\\\\.com\",\n \"name\": \"UkrNet Mail Proxy\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"UkrNet Ltd\",\n \"url\": \"https://www.ukr.net/\"\n }\n },\n {\n \"regex\": \"Uptimebot\",\n \"name\": \"Uptimebot\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://uptime.com/uptimebot\",\n \"producer\": {\n \"name\": \"Uptime\",\n \"url\": \"https://uptime.com\"\n }\n },\n {\n \"regex\": \"UptimeRobot\",\n \"name\": \"Uptime Robot\",\n \"category\": \"Site Monitor\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Uptime Robot\",\n \"url\": \"http://uptimerobot.com\"\n }\n },\n {\n \"regex\": \"URLAppendBot\",\n \"name\": \"URLAppendBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.profound.net/urlappendbot.html\",\n \"producer\": {\n \"name\": \"Profound Networks\",\n \"url\": \"http://www.profound.net\"\n }\n },\n {\n \"regex\": \"Vagabondo\",\n \"name\": \"Vagabondo\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"WiseGuys\",\n \"url\": \"http://www.wise-guys.nl/\"\n }\n },\n {\n \"regex\": \"vkShare; \",\n \"name\": \"VK Share Button\",\n \"category\": \"Crawler\",\n \"url\": \"http://vk.com/dev/Share\",\n \"producer\": {\n \"name\": \"VK\",\n \"url\": \"http://vk.com/\"\n }\n },\n {\n \"regex\": \"VSMCrawler\",\n \"name\": \"Visual Site Mapper Crawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.visualsitemapper.com/crawler\",\n \"producer\": {\n \"name\": \"Alentum Software Ltd.\",\n \"url\": \"http://www.alentum.com\"\n }\n },\n {\n \"regex\": \"Jigsaw\",\n \"name\": \"W3C CSS Validator\",\n \"category\": \"Validator\",\n \"url\": \"http://jigsaw.w3.org/css-validator\",\n \"producer\": {\n \"name\": \"W3C\",\n \"url\": \"http://www.w3.org\"\n }\n },\n {\n \"regex\": \"W3C_I18n-Checker\",\n \"name\": \"W3C I18N Checker\",\n \"category\": \"Validator\",\n \"url\": \"http://validator.w3.org/i18n-checker\",\n \"producer\": {\n \"name\": \"W3C\",\n \"url\": \"http://www.w3.org\"\n }\n },\n {\n \"regex\": \"W3C-checklink\",\n \"name\": \"W3C Link Checker\",\n \"category\": \"Validator\",\n \"url\": \"http://validator.w3.org/checklink\",\n \"producer\": {\n \"name\": \"W3C\",\n \"url\": \"http://www.w3.org\"\n }\n },\n {\n \"regex\": \"W3C_Validator|Validator.nu\",\n \"name\": \"W3C Markup Validation Service\",\n \"category\": \"Validator\",\n \"url\": \"http://validator.w3.org/services\",\n \"producer\": {\n \"name\": \"W3C\",\n \"url\": \"http://www.w3.org\"\n }\n },\n {\n \"regex\": \"W3C-mobileOK\",\n \"name\": \"W3C MobileOK Checker\",\n \"category\": \"Validator\",\n \"url\": \"http://validator.w3.org/mobile\",\n \"producer\": {\n \"name\": \"W3C\",\n \"url\": \"http://www.w3.org\"\n }\n },\n {\n \"regex\": \"W3C_Unicorn\",\n \"name\": \"W3C Unified Validator\",\n \"category\": \"Validator\",\n \"url\": \"http://validator.w3.org/unicorn\",\n \"producer\": {\n \"name\": \"W3C\",\n \"url\": \"http://www.w3.org\"\n }\n },\n {\n \"regex\": \"Wappalyzer\",\n \"name\": \"Wappalyzer\",\n \"url\": \"https://github.com/AliasIO/Wappalyzer\",\n \"producer\": {\n \"name\": \"AliasIO\",\n \"url\": \"https://github.com/AliasIO\"\n }\n },\n {\n \"regex\": \"PTST/\",\n \"name\": \"WebPageTest\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://www.webpagetest.org\"\n },\n {\n \"regex\": \"WeSEE(:Search)?\",\n \"name\": \"WeSEE:Search\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.wesee.com/bot\",\n \"producer\": {\n \"name\": \"WeSEE Ltd\",\n \"url\": \"http://www.wesee.com\"\n }\n },\n {\n \"regex\": \"WebbCrawler\",\n \"name\": \"WebbCrawler\",\n \"category\": \"Crawler\",\n \"url\": \"http://badcheese.com/crawler.html\",\n \"producer\": {\n \"name\": \"Steve Webb\",\n \"url\": \"http://badcheese.com\"\n }\n },\n {\n \"regex\": \"websitepulse[+ ]checker\",\n \"name\": \"WebSitePulse\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://badcheese.com/crawler.html\",\n \"producer\": {\n \"name\": \"WebSitePulse\",\n \"url\": \"http://www.websitepulse.com/\"\n }\n },\n {\n \"regex\": \"WordPress\",\n \"name\": \"WordPress\",\n \"category\": \"Service Agent\",\n \"url\": \"https://wordpress.org/\",\n \"producer\": {\n \"name\": \"Wordpress.org\",\n \"url\": \"https://wordpress.org/\"\n }\n },\n {\n \"regex\": \"Wotbox\",\n \"name\": \"Wotbox\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.wotbox.com/bot/\",\n \"producer\": {\n \"name\": \"Wotbox\",\n \"url\": \"http://www.wotbox.com\"\n }\n },\n {\n \"regex\": \"XenForo\",\n \"name\": \"XenForo\",\n \"category\": \"Service Agent\",\n \"url\": \"https://xenforo.com/\",\n \"producer\": {\n \"name\": \"XenForo Ltd.\",\n \"url\": \"https://xenforo.com/\"\n }\n },\n {\n \"regex\": \"yacybot\",\n \"name\": \"YaCy\",\n \"category\": \"Search bot\",\n \"url\": \"http://yacy.net/bot.html\",\n \"producer\": {\n \"name\": \"YaCy\",\n \"url\": \"http://yacy.net\"\n }\n },\n {\n \"regex\": \"Yahoo! Slurp|Yahoo!-AdCrawler\",\n \"name\": \"Yahoo! Slurp\",\n \"category\": \"Search bot\",\n \"url\": \"http://help.yahoo.com/ysearch/slurp\",\n \"producer\": {\n \"name\": \"Yahoo! Inc.\",\n \"url\": \"http://www.yahoo.com\"\n }\n },\n {\n \"regex\": \"Yahoo Link Preview|Yahoo:LinkExpander:Slingstone\",\n \"name\": \"Yahoo! Link Preview\",\n \"category\": \"Crawler\",\n \"url\": \"https://help.yahoo.com/kb/mail/yahoo-link-preview-SLN23615.html\",\n \"producer\": {\n \"name\": \"Yahoo! Inc.\",\n \"url\": \"http://www.yahoo.com\"\n }\n },\n {\n \"regex\": \"YahooMailProxy\",\n \"name\": \"Yahoo! Mail Proxy\",\n \"category\": \"Service Agent\",\n \"url\": \"https://help.yahoo.com/kb/yahoo-mail-proxy-SLN28749.html\",\n \"producer\": {\n \"name\": \"Yahoo! Inc.\",\n \"url\": \"http://www.yahoo.com\"\n }\n },\n {\n \"regex\": \"YahooCacheSystem\",\n \"name\": \"Yahoo! Cache System\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Yahoo! Inc.\",\n \"url\": \"http://www.yahoo.com\"\n }\n },\n {\n \"regex\": \"Y!J-BRW\",\n \"name\": \"Yahoo! Japan BRW\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.yahoo-help.jp/app/answers/detail/p/595/a_id/42716/~/\u30A6\u30A7\u30D6\u30DA\u30FC\u30B8\u306B\u30A2\u30AF\u30BB\u30B9\u3059\u308B\u30B7\u30B9\u30C6\u30E0\u306E\u30E6\u30FC\u30B6\u30FC\u30A8\u30FC\u30B8\u30A7\u30F3\u30C8\u306B\u3064\u3044\u3066\",\n \"producer\": {\n \"name\": \"Yahoo! Japan Corp.\",\n \"url\": \"https://www.yahoo.co.jp/\"\n }\n },\n {\n \"regex\": \"Yandex(SpravBot|ScreenshotBot|MobileBot|AccessibilityBot|ForDomain|Vertis|Market|Catalog|Calendar|Sitelinks|AdNet|Pagechecker|Webmaster|Media|Video|Bot|Images|Antivirus|Direct|Blogs|Favicons|ImageResizer|Verticals|News(links)?|Metrika|\\\\.Gazeta Bot)|YaDirectFetcher|YandexTurbo|YandexTracker|YandexSearchShop|YandexRCA|YandexPartner|YandexOntoDBAPI|YandexOntoDB|YandexMobileScreenShotBot\",\n \"name\": \"Yandex Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.yandex.com/bots\",\n \"producer\": {\n \"name\": \"Yandex LLC\",\n \"url\": \"http://company.yandex.com\"\n }\n },\n {\n \"regex\": \"Yeti|NaverJapan\",\n \"name\": \"Yeti/Naverbot\",\n \"category\": \"Search bot\",\n \"url\": \"http://help.naver.com/robots/\",\n \"producer\": {\n \"name\": \"Naver\",\n \"url\": \"http://www.naver.com\"\n }\n },\n {\n \"regex\": \"YoudaoBot\",\n \"name\": \"Youdao Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.youdao.com/help/webmaster/spider\",\n \"producer\": {\n \"name\": \"NetEase, Inc.\",\n \"url\": \"http://corp.163.com\"\n }\n },\n {\n \"regex\": \"YOURLS v[0-9]\",\n \"name\": \"Yourls\",\n \"category\": \"Crawler\",\n \"url\": \"http://yourls.org\"\n },\n {\n \"regex\": \"YRSpider|YYSpider\",\n \"name\": \"Yunyun Bot\",\n \"category\": \"Search bot\",\n \"url\": \"http://www.yunyun.com/SiteInfo.php?r=about\",\n \"producer\": {\n \"name\": \"YunYun\",\n \"url\": \"http://www.yunyun.com\"\n }\n },\n {\n \"regex\": \"zgrab\",\n \"name\": \"zgrab\",\n \"category\": \"Security Checker\",\n \"url\": \"https://github.com/zmap/zgrab\"\n },\n {\n \"regex\": \"Zookabot\",\n \"name\": \"Zookabot\",\n \"category\": \"Crawler\",\n \"url\": \"http://zookabot.com\",\n \"producer\": {\n \"name\": \"Hwacha ApS\",\n \"url\": \"http://hwacha.dk\"\n }\n },\n {\n \"regex\": \"ZumBot\",\n \"name\": \"ZumBot\",\n \"category\": \"Search bot\",\n \"url\": \"http://help.zum.com/inquiry\",\n \"producer\": {\n \"name\": \"ZUM internet\",\n \"url\": \"http://www.zuminternet.com/\"\n }\n },\n {\n \"regex\": \"YottaaMonitor\",\n \"name\": \"Yottaa Site Monitor\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://www.yottaa.com/products/site-monitor\",\n \"producer\": {\n \"name\": \"Yottaa\",\n \"url\": \"http://www.yottaa.com/\"\n }\n },\n {\n \"regex\": \"Yahoo Ad monitoring.*yahoo-ad-monitoring-SLN24857.*\",\n \"name\": \"Yahoo Gemini\",\n \"category\": \"Crawler\",\n \"url\": \"https://help.yahoo.com/kb/yahoo-ad-monitoring-SLN24857.html\",\n \"producer\": {\n \"name\": \"Yahoo! Inc.\",\n \"url\": \"http://www.yahoo.com\"\n }\n },\n {\n \"regex\": \".*Java.*outbrain\",\n \"name\": \"Outbrain\",\n \"category\": \"Crawler\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Outbrain\",\n \"url\": \"http://www.outbrain.com/\"\n }\n },\n {\n \"regex\": \"HubPages.*crawlingpolicy\",\n \"name\": \"HubPages\",\n \"category\": \"Crawler\",\n \"url\": \"http://hubpages.com/help/crawlingpolicy\",\n \"producer\": {\n \"name\": \"HubPages\",\n \"url\": \"http://hubpages.com/\"\n }\n },\n {\n \"regex\": \"Pinterest(bot)?/\\\\d\\\\.\\\\d.*www\\\\.pinterest\\\\.com.*\",\n \"name\": \"Pinterest\",\n \"url\": \"http://www.pinterest.com/bot.html\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"Pinterest\",\n \"url\": \"http://www.pinterest.com/\"\n }\n },\n {\n \"regex\": \"Site24x7\",\n \"name\": \"Site24x7 Website Monitoring\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://www.site24x7.com/site24x7-faq.html\",\n \"producer\": {\n \"name\": \"Site24x7\",\n \"url\": \"https://www.site24x7.com\"\n }\n },\n {\n \"regex\": \"s~snapchat-proxy\",\n \"name\": \"Snapchat Proxy\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.snapchat.com\",\n \"producer\": {\n \"name\": \"Snapchat Inc.\",\n \"url\": \"https://www.snapchat.com\"\n }\n },\n {\n \"regex\": \"Let's Encrypt validation server\",\n \"name\": \"Let's Encrypt Validation\",\n \"category\": \"Service Agent\",\n \"url\": \"https://letsencrypt.org/how-it-works/\",\n \"producer\": {\n \"name\": \"Let's Encrypt\",\n \"url\": \"https://letsencrypt.org\"\n }\n },\n {\n \"regex\": \"GrapeshotCrawler\",\n \"name\": \"Grapeshot\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.grapeshot.com/crawler\",\n \"producer\": {\n \"name\": \"Grapeshot\",\n \"url\": \"https://www.grapeshot.com\"\n }\n },\n {\n \"regex\": \"www\\\\.monitor\\\\.us\",\n \"name\": \"Monitor.Us\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://www.monitor.us\",\n \"producer\": {\n \"name\": \"Monitor.Us\",\n \"url\": \"http://www.monitor.us\"\n }\n },\n {\n \"regex\": \"Catchpoint( bot)?\",\n \"name\": \"Catchpoint\",\n \"category\": \"Site Monitor\",\n \"url\": \"\",\n \"producer\": {\n \"name\": \"Catchpoint Systems\",\n \"url\": \"http://www.catchpoint.com/\"\n }\n },\n {\n \"regex\": \"bitlybot\",\n \"name\": \"BitlyBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://bitly.com\",\n \"producer\": {\n \"name\": \"Bitly, Inc.\",\n \"url\": \"https://bitly.com\"\n }\n },\n {\n \"regex\": \"Zao/\",\n \"name\": \"Zao\",\n \"category\": \"Crawler\"\n },\n {\n \"regex\": \"lycos\",\n \"name\": \"Lycos\"\n },\n {\n \"regex\": \"Slurp\",\n \"name\": \"Inktomi Slurp\"\n },\n {\n \"regex\": \"Speedy Spider\",\n \"name\": \"Speedy\"\n },\n {\n \"regex\": \"ScoutJet\",\n \"name\": \"ScoutJet\"\n },\n {\n \"regex\": \"nrsbot|netresearch\",\n \"name\": \"NetResearchServer\"\n },\n {\n \"regex\": \"scooter\",\n \"name\": \"Scooter\"\n },\n {\n \"regex\": \"gigabot\",\n \"name\": \"Gigabot\"\n },\n {\n \"regex\": \"charlotte\",\n \"name\": \"Charlotte\"\n },\n {\n \"regex\": \"Pompos\",\n \"name\": \"Pompos\"\n },\n {\n \"regex\": \"ichiro\",\n \"name\": \"ichiro\"\n },\n {\n \"regex\": \"PagePeeker\",\n \"name\": \"PagePeeker\"\n },\n {\n \"regex\": \"WebThumbnail\",\n \"name\": \"WebThumbnail\"\n },\n {\n \"regex\": \"Willow Internet Crawler\",\n \"name\": \"Willow Internet Crawler\"\n },\n {\n \"regex\": \"EmailWolf\",\n \"name\": \"EmailWolf\"\n },\n {\n \"regex\": \"NetLyzer FastProbe\",\n \"name\": \"NetLyzer FastProbe\"\n },\n {\n \"regex\": \"AdMantX.*admantx\\\\.com\",\n \"name\": \"ADMantX\"\n },\n {\n \"regex\": \"Server Density Service Monitoring.*\",\n \"name\": \"Server Density\"\n },\n {\n \"regex\": \"RSSRadio \\\\(Push Notification Scanner;support@dorada\\\\.co\\\\.uk\\\\)\",\n \"name\": \"RSSRadio Bot\"\n },\n {\n \"regex\": \"(A6-Indexer|nuhk|TsolCrawler|Yammybot|Openbot|Gulper Web Bot|grub-client|Download Demon|SearchExpress|Microsoft URL Control|borg|altavista|dataminr.com|tweetedtimes.com|TrendsmapResolver|teoma|blitzbot|oegp|furlbot|http%20client|polybot|htdig|mogimogi|larbin|scrubby|searchsight|seekbot|semanticdiscovery|snappy|vortex(?! Build)|zeal|fast-webcrawler|converacrawler|dataparksearch|findlinks|BrowserMob|HttpMonitor|ThumbShotsBot|URL2PNG|ZooShot|GomezA|Google SketchUp|Read%20Later|RackspaceBot|robots|SeopultContentAnalyzer|7Siters|centuryb.o.t9|InterNaetBoten|EasyBib AutoCite|Bidtellect|tomnomnom/meg)\",\n \"name\": \"Generic Bot\"\n },\n {\n \"regex\": \"^sentry\",\n \"name\": \"Sentry Bot\",\n \"producer\": {\n \"name\": \"Sentry\",\n \"url\": \"https://sentry.io\"\n }\n },\n {\n \"regex\": \"^Spotify\",\n \"name\": \"Spotify\",\n \"producer\": {\n \"name\": \"Spotify\",\n \"url\": \"https://www.spotify.com\"\n }\n },\n {\n \"regex\": \"The Knowledge AI\",\n \"name\": \"The Knowledge AI\",\n \"category\": \"Crawler\"\n },\n {\n \"regex\": \"Embedly\",\n \"name\": \"Embedly\",\n \"category\": \"Crawler\",\n \"url\": \"https://support.embed.ly/hc/en-us\",\n \"producer\": {\n \"name\": \"A Medium, Corp.\",\n \"url\": \"https://medium.com/\"\n }\n },\n {\n \"regex\": \"BrandVerity\",\n \"name\": \"BrandVerity\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.brandverity.com/why-is-brandverity-visiting-me\",\n \"producer\": {\n \"name\": \"BrandVerity, Inc.\",\n \"url\": \"https://www.brandverity.com/\"\n }\n },\n {\n \"regex\": \"Kaspersky Lab CFR link resolver\",\n \"name\": \"Kaspersky\",\n \"category\": \"Security Checker\",\n \"url\": \"https://www.kaspersky.com/\",\n \"producer\": {\n \"name\": \"AO Kaspersky Lab\",\n \"url\": \"https://www.kaspersky.com/\"\n }\n },\n {\n \"regex\": \"eZ Publish Link Validator\",\n \"name\": \"eZ Publish Link Validator\",\n \"category\": \"Crawler\",\n \"url\": \"https://ez.no/\",\n \"producer\": {\n \"name\": \"eZ Systems AS\",\n \"url\": \"https://ez.no/\"\n }\n },\n {\n \"regex\": \"woorankreview\",\n \"name\": \"WooRank\",\n \"category\": \"Search bot\",\n \"url\": \"https://www.woorank.com/\",\n \"producer\": {\n \"name\": \"WooRank sprl\",\n \"url\": \"https://www.woorank.com/\"\n }\n },\n {\n \"regex\": \"(Match|LinkCheck) by Siteimprove.com\",\n \"name\": \"Siteimprove\",\n \"category\": \"Search bot\",\n \"url\": \"https://siteimprove.com/\",\n \"producer\": {\n \"name\": \"Siteimprove GmbH\",\n \"url\": \"https://siteimprove.com/\"\n }\n },\n {\n \"regex\": \"CATExplorador\",\n \"name\": \"CATExplorador\",\n \"category\": \"Search bot\",\n \"url\": \"https://fundacio.cat/ca/domini/\",\n \"producer\": {\n \"name\": \"Fundaci\u00F3 puntCAT\",\n \"url\": \"https://fundacio.cat/ca/domini/\"\n }\n },\n {\n \"regex\": \"Buck\",\n \"name\": \"Buck\",\n \"category\": \"Search bot\",\n \"url\": \"https://hypefactors.com/\",\n \"producer\": {\n \"name\": \"Hypefactors A/S\",\n \"url\": \"https://hypefactors.com/\"\n }\n },\n {\n \"regex\": \"tracemyfile\",\n \"name\": \"TraceMyFile\",\n \"category\": \"Search bot\",\n \"url\": \"https://www.tracemyfile.com/\",\n \"producer\": {\n \"name\": \"Idee Inc.\",\n \"url\": \"http://ideeinc.com/\"\n }\n },\n {\n \"regex\": \"zelist.ro feed parser\",\n \"name\": \"Ze List\",\n \"url\": \"https://www.zelist.ro/\",\n \"category\": \"Feed Fetcher\",\n \"producer\": {\n \"name\": \"Treeworks SRL\",\n \"url\": \"https://www.tree.ro/\"\n }\n },\n {\n \"regex\": \"weborama-fetcher\",\n \"name\": \"Weborama\",\n \"category\": \"Search bot\",\n \"url\": \"https://weborama.com/\",\n \"producer\": {\n \"name\": \"Weborama SA\",\n \"url\": \"https://weborama.com/\"\n }\n },\n {\n \"regex\": \"BoardReader Favicon Fetcher\",\n \"name\": \"BoardReader\",\n \"category\": \"Search bot\",\n \"url\": \"https://boardreader.com/\",\n \"producer\": {\n \"name\": \"Effyis Inc\",\n \"url\": \"https://boardreader.com/\"\n }\n },\n {\n \"regex\": \"IDG/IT\",\n \"name\": \"IDG/IT\",\n \"category\": \"Search bot\",\n \"url\": \"https://spaziodati.eu/\",\n \"producer\": {\n \"name\": \"SpazioDati S.r.l.\",\n \"url\": \"https://spaziodati.eu/\"\n }\n },\n {\n \"regex\": \"Bytespider\",\n \"name\": \"Bytespider\",\n \"category\": \"Search bot\",\n \"url\": \"https://bytedance.com/\",\n \"producer\": {\n \"name\": \"ByteDance Ltd.\",\n \"url\": \"https://bytedance.com/\"\n }\n },\n {\n \"regex\": \"WikiDo\",\n \"name\": \"WikiDo\",\n \"category\": \"Search bot\",\n \"url\": \"https://www.wikido.com/\",\n \"producer\": {\n \"name\": \"Fotolitografie Fiorentine di Becchi Antonio s.n.c.\",\n \"url\": \"https://www.wikido.com/\"\n }\n },\n {\n \"regex\": \"AwarioSmartBot\",\n \"name\": \"Awario\",\n \"category\": \"Search bot\",\n \"url\": \"https://awario.com/bots.html\",\n \"producer\": {\n \"name\": \"Awario\",\n \"url\": \"https://awario.com/\"\n }\n },\n {\n \"regex\": \"AwarioRssBot\",\n \"name\": \"Awario\",\n \"category\": \"Feed Fetcher\",\n \"url\": \"https://awario.com/bots.html\",\n \"producer\": {\n \"name\": \"Awario\",\n \"url\": \"https://awario.com/\"\n }\n },\n {\n \"regex\": \"oBot\",\n \"name\": \"oBot\",\n \"category\": \"Search bot\",\n \"url\": \"https://www.xforce-security.com/crawler/\",\n \"producer\": {\n \"name\": \"IBM Germany Research & Development GmbH\",\n \"url\": \"https://exchange.xforce.ibmcloud.com/\"\n }\n },\n {\n \"regex\": \"SMTBot\",\n \"name\": \"SMTBot\",\n \"category\": \"Search bot\",\n \"url\": \"https://www.similartech.com/smtbot\",\n \"producer\": {\n \"name\": \"SimilarTech Ltd.\",\n \"url\": \"https://www.similartech.com/\"\n }\n },\n {\n \"regex\": \"LCC\",\n \"name\": \"LCC\",\n \"category\": \"Search bot\",\n \"url\": \"https://corpora.uni-leipzig.de/crawler_faq.html\",\n \"producer\": {\n \"name\": \"Universit\u00E4t Leipzig\",\n \"url\": \"https://www.uni-leipzig.de/\"\n }\n },\n {\n \"regex\": \"Startpagina-Linkchecker\",\n \"name\": \"Startpagina Linkchecker\",\n \"category\": \"Search bot\",\n \"url\": \"https://www.startpagina.nl/linkchecker\",\n \"producer\": {\n \"name\": \"Startpagina B.V.\",\n \"url\": \"https://www.startpagina.nl/\"\n }\n },\n {\n \"regex\": \"GTmetrix\",\n \"name\": \"GTmetrix\",\n \"category\": \"Crawler\",\n \"url\": \"https://gtmetrix.com/\",\n \"producer\": {\n \"name\": \"Carbon60 Operating Co. Ltd.\",\n \"url\": \"https://www.carbon60.com/\"\n }\n },\n {\n \"regex\": \"Nutch\",\n \"name\": \"Nutch-based Bot\",\n \"category\": \"Crawler\",\n \"url\": \"https://nutch.apache.org\",\n \"producer\": {\n \"name\": \"The Apache Software Foundation\",\n \"url\": \"https://www.apache.org/foundation/\"\n }\n },\n {\n \"regex\": \"Seobility\",\n \"name\": \"Seobility\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.seobility.net/en/faq/?category=crawling#!aboutourbot\"\n },\n {\n \"regex\": \"Vercelbot\",\n \"name\": \"Vercel Bot\",\n \"category\": \"Service bot\",\n \"url\": \"https://vercel.com\"\n },\n {\n \"regex\": \"Grammarly\",\n \"name\": \"Grammarly\",\n \"category\": \"Service bot\",\n \"url\": \"https://www.grammarly.com\"\n },\n {\n \"regex\": \"Robozilla\",\n \"name\": \"Robozilla\",\n \"category\": \"Crawler\"\n },\n {\n \"regex\": \"Domains Project\",\n \"name\": \"Domains Project\",\n \"category\": \"Crawler\",\n \"url\": \"https://domainsproject.org\"\n },\n {\n \"regex\": \"PetalBot\",\n \"name\": \"Petal Bot\",\n \"category\": \"Crawler\",\n \"url\": \"https://aspiegel.com/petalbot\"\n },\n {\n \"regex\": \"SerendeputyBot\",\n \"name\": \"Serendeputy Bot\",\n \"category\": \"Crawler\",\n \"url\": \"https://serendeputy.com/about/serendeputy-bot\"\n },\n {\n \"regex\": \"ias-va.*admantx.*service-fetcher\",\n \"name\": \"ADmantX Service Fetcher\",\n \"category\": \"Service bot\",\n \"url\": \"https://www.admantx.com/service-fetcher.html\"\n },\n {\n \"regex\": \"SemanticScholarBot\",\n \"name\": \"Semantic Scholar Bot\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.semanticscholar.org/crawler\"\n },\n {\n \"regex\": \"VelenPublicWebCrawler\",\n \"name\": \"Velen Public Web Crawler\",\n \"category\": \"Crawler\",\n \"url\": \"https://hunter.io/robot\"\n },\n {\n \"regex\": \"Barkrowler\",\n \"name\": \"Barkrowler\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.exensa.com/crawl\"\n },\n {\n \"regex\": \"BDCbot\",\n \"name\": \"BDCbot\",\n \"category\": \"Crawler\",\n \"url\": \"https://bigweb.bigdatacorp.com.br/pages/faq.aspx\",\n \"producer\": {\n \"name\": \"BIG Data Solucoes Em Tecnologia de Informatica LTDA\",\n \"url\": \"https://bigdatacorp.com.br/\"\n }\n },\n {\n \"regex\": \"adbeat\",\n \"name\": \"Adbeat\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.adbeat.com/operation_policy\",\n \"producer\": {\n \"name\": \"PPC Labs LLC\",\n \"url\": \"https://www.adbeat.com/\"\n }\n },\n {\n \"regex\": \"BW/(?:(\\\\d+[\\\\.\\\\d]+))\",\n \"name\": \"BuiltWith\",\n \"category\": \"Crawler\",\n \"url\": \"https://builtwith.com/biup\",\n \"producer\": {\n \"name\": \"BuiltWith Pty Ltd\",\n \"url\": \"https://builtwith.com/\"\n }\n },\n {\n \"regex\": \"https://whatis.contentkingapp.com\",\n \"name\": \"ContentKing\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://whatis.contentkingapp.com/\",\n \"producer\": {\n \"name\": \"ContentKing BV\",\n \"url\": \"https://www.contentkingapp.com/\"\n }\n },\n {\n \"regex\": \"MicroAdBot\",\n \"name\": \"MicroAdBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.microad.co.jp/\",\n \"producer\": {\n \"name\": \"MicroAd, Inc.\",\n \"url\": \"https://www.microad.co.jp/\"\n }\n },\n {\n \"regex\": \"PingAdmin.Ru\",\n \"name\": \"PingAdmin.Ru\",\n \"category\": \"Site Monitor\",\n \"url\": \"https://ping-admin.ru/\"\n },\n {\n \"regex\": \"notifyninja.+monitoring\",\n \"name\": \"Notify Ninja\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://notifyninja.com\"\n },\n {\n \"regex\": \"WebDataStats\",\n \"name\": \"WebDataStats\",\n \"category\": \"Crawler\",\n \"url\": \"https://webdatastats.com/policy.html\",\n \"producer\": {\n \"name\": \"WebTehRazrabotka LLC\",\n \"url\": \"https://webdatastats.com/\"\n }\n },\n {\n \"regex\": \"parse.ly scraper\",\n \"name\": \"parse.ly\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.parse.ly/help/integration/crawler\",\n \"producer\": {\n \"name\": \"Parsely, Inc.\",\n \"url\": \"https://www.parse.ly/\"\n }\n },\n {\n \"regex\": \"Nimbostratus-Bot\",\n \"name\": \"Nimbostratus Bot\",\n \"category\": \"Site Monitor\",\n \"url\": \"http://cloudsystemnetworks.com\"\n },\n {\n \"regex\": \"HeartRails_Capture/\\\\d\",\n \"name\": \"Heart Rails Capture\",\n \"category\": \"Service Agent\",\n \"url\": \"http://capture.heartrails.com\"\n },\n {\n \"regex\": \"Project-Resonance\",\n \"name\": \"Project Resonance\",\n \"category\": \"Crawler\",\n \"url\": \"http://project-resonance.com\"\n },\n {\n \"regex\": \"DataXu/\\\\d\",\n \"name\": \"DataXu\",\n \"category\": \"Service Agent\",\n \"url\": \"https://advertising.roku.com/dataxu\",\n \"producer\": {\n \"name\": \"Roku, Inc.\",\n \"url\": \"https://roku.com\"\n }\n },\n {\n \"regex\": \"Cocolyzebot\",\n \"name\": \"Cocolyzebot\",\n \"category\": \"Crawler\",\n \"url\": \"https://cocolyze.com/en/cocolyzebot\",\n \"producer\": {\n \"name\": \"VSI INNOVATION SAS\",\n \"url\": \"https://vsi-innovation.com/\"\n }\n },\n {\n \"regex\": \"veryhip\",\n \"name\": \"VeryHip\",\n \"category\": \"Crawler\",\n \"url\": \"https://veryhip.com/\",\n \"producer\": {\n \"name\": \"VeryHip\",\n \"url\": \"https://veryhip.com/\"\n }\n },\n {\n \"regex\": \"LinkpadBot\",\n \"name\": \"LinkpadBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.linkpad.org/\",\n \"producer\": {\n \"name\": \"Solomono LLC\",\n \"url\": \"https://www.linkpad.org/\"\n }\n },\n {\n \"regex\": \"MuscatFerret\",\n \"name\": \"MuscatFerret\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.webtop.com/\"\n },\n {\n \"regex\": \"PageThing.com\",\n \"name\": \"PageThing\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.pagething.com/\",\n \"producer\": {\n \"name\": \"SPECIALNOISE LTD\",\n \"url\": \"https://www.specialnoise.com/\"\n }\n },\n {\n \"regex\": \"ArchiveBox\",\n \"name\": \"ArchiveBox\",\n \"url\": \"https://archivebox.io/\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"Choosito\",\n \"name\": \"Choosito\",\n \"url\": \"https://www.choosito.com/\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"Choosito! Inc.\",\n \"url\": \"https://www.choosito.com/\"\n }\n },\n {\n \"regex\": \"datagnionbot\",\n \"name\": \"datagnionbot\",\n \"url\": \"https://www.datagnion.com/bot.html\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"DATAGNION GMBH\",\n \"url\": \"https://www.datagnion.com/\"\n }\n },\n {\n \"regex\": \"WhatCMS\",\n \"name\": \"WhatCMS\",\n \"url\": \"https://whatcms.org/\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"httpx\",\n \"name\": \"httpx\",\n \"url\": \"https://github.com/projectdiscovery/httpx\",\n \"category\": \"Crawler\",\n \"producer\": {\n \"name\": \"\",\n \"url\": \"\"\n }\n },\n {\n \"regex\": \"scaninfo@expanseinc.com\",\n \"name\": \"Expanse\",\n \"category\": \"Security Checker\",\n \"url\": \"https://expanse.co/\",\n \"producer\": {\n \"name\": \"Expanse Inc.\",\n \"url\": \"https://expanse.co/\"\n }\n },\n {\n \"regex\": \"HuaweiWebCatBot\",\n \"name\": \"HuaweiWebCatBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://isecurity.huawei.com\",\n \"producer\": {\n \"name\": \"Huawei Technologies Co., Ltd.\",\n \"url\": \"https://huawei.com\"\n }\n },\n {\n \"regex\": \"Hatena-Favicon\",\n \"name\": \"Hatena Favicon\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.hatena.ne.jp/faq/\",\n \"producer\": {\n \"name\": \"Hatena Co., Ltd.\",\n \"url\": \"https://www.hatena.ne.jp\"\n }\n },\n {\n \"regex\": \"RyowlEngine/(\\\\d+)\",\n \"name\": \"Ryowl\",\n \"category\": \"Crawler\",\n \"url\": \"https://ryowl.org\"\n },\n {\n \"regex\": \"OdklBot/(\\\\d+)\",\n \"name\": \"Odnoklassniki Bot\",\n \"category\": \"Crawler\",\n \"url\": \"https://odnoklassniki.ru\"\n },\n {\n \"regex\": \"Mediatoolkitbot\",\n \"name\": \"Mediatoolkit Bot\",\n \"category\": \"Crawler\",\n \"url\": \"https://mediatoolkit.com\"\n },\n {\n \"regex\": \"ZoominfoBot\",\n \"name\": \"ZoominfoBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.zoominfo.com\"\n },\n {\n \"regex\": \"WeViKaBot/([\\\\d+\\\\.])\",\n \"name\": \"WeViKaBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.wevika.de\"\n },\n {\n \"regex\": \"SEOkicks\",\n \"name\": \"SEOkicks\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.seokicks.de/robot.html\"\n },\n {\n \"regex\": \"Plukkie/([\\\\d+\\\\.])\",\n \"name\": \"Plukkie\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.botje.com/plukkie.htm\"\n },\n {\n \"regex\": \"proximic;\",\n \"name\": \"Comscore\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.comscore.com/Web-Crawler\"\n },\n {\n \"regex\": \"SurdotlyBot/([\\\\d+\\\\.])\",\n \"name\": \"SurdotlyBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://sur.ly/bot.html\"\n },\n {\n \"regex\": \"Gowikibot/([\\\\d+\\\\.])\",\n \"name\": \"Gowikibot\",\n \"category\": \"Crawler\",\n \"url\": \"http:/www.gowikibot.com\"\n },\n {\n \"regex\": \"SabsimBot/([\\\\d+\\\\.])\",\n \"name\": \"SabsimBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://sabsim.com\"\n },\n {\n \"regex\": \"LumtelBot/([\\\\d+\\\\.])\",\n \"name\": \"LumtelBot\",\n \"category\": \"Crawler\",\n \"url\": \"https://umtel.com\"\n },\n {\n \"regex\": \"PiplBot\",\n \"name\": \"PiplBot\",\n \"category\": \"Crawler\",\n \"url\": \"http://www.pipl.com/bot\"\n },\n {\n \"regex\": \"woobot/([\\\\d+\\\\.])\",\n \"name\": \"WooRank\",\n \"category\": \"Crawler\",\n \"url\": \"https://www.woorank.com/bot\"\n },\n {\n \"regex\": \"[a-z0-9\\\\-_]*((?<!cu|power[ _]|m[ _])bot(?![ _]TAB|[ _]?5[0-9])|crawler|crawl|checker|archiver|transcoder|spider)([^a-z]|$)\",\n \"name\": \"Generic Bot\"\n }\n]\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nconst bots_json_1 = __importDefault(require(\"../../fixtures/regexes/bots.json\"));\nconst user_agent_1 = require(\"../../utils/user-agent\");\nclass BotParser {\n constructor() {\n this.parse = (userAgent) => {\n var _a, _b, _c, _d;\n for (const bot of bots_json_1.default) {\n const match = user_agent_1.userAgentParser(bot.regex, userAgent);\n if (!match)\n continue;\n return {\n name: bot.name,\n category: bot.category || \"\",\n url: bot.url || \"\",\n producer: {\n name: ((_b = (_a = bot) === null || _a === void 0 ? void 0 : _a.producer) === null || _b === void 0 ? void 0 : _b.name) || \"\",\n url: ((_d = (_c = bot) === null || _c === void 0 ? void 0 : _c.producer) === null || _d === void 0 ? void 0 : _d.url) || \"\"\n }\n };\n }\n return null;\n };\n }\n}\nmodule.exports = BotParser;\n", "\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.versionCompare = (v1, v2, operator) => {\n // discuss at: http://locutus.io/php/version_compare/\n // original by: Philippe Jausions (http://pear.php.net/user/jausions)\n // original by: Aidan Lister (http://aidanlister.com/)\n // reimplemented by: Kankrelune (http://www.webfaktory.info/)\n // improved by: Brett Zamir (http://brett-zamir.me)\n // improved by: Scott Baker\n // improved by: Theriault (https://github.com/Theriault)\n // example 1: version_compare('8.2.5rc', '8.2.5a')\n // returns 1: 1\n // example 2: version_compare('8.2.50', '8.2.52', '<')\n // returns 2: true\n // example 3: version_compare('5.3.0-dev', '5.3.0')\n // returns 3: -1\n // example 4: version_compare('4.1.0.52','4.01.0.51')\n // returns 4: 1\n // Important: compare must be initialized at 0.\n let i;\n let x;\n let compare = 0;\n // vm maps textual PHP versions to negatives so they're less than 0.\n // PHP currently defines these as CASE-SENSITIVE. It is important to\n // leave these as negatives so that they can come before numerical versions\n // and as if no letters were there to begin with.\n // (1alpha is < 1 and < 1.1 but > 1dev1)\n // If a non-numerical value can't be mapped to this table, it receives\n // -7 as its value.\n const vm = {\n \"dev\": -6,\n \"alpha\": -5,\n \"a\": -5,\n \"beta\": -4,\n \"b\": -4,\n \"RC\": -3,\n \"rc\": -3,\n \"#\": -2,\n \"p\": 1,\n \"pl\": 1\n };\n // This function will be called to prepare each version argument.\n // It replaces every _, -, and + with a dot.\n // It surrounds any nonsequence of numbers/dots with dots.\n // It replaces sequences of dots with a single dot.\n // version_compare('4..0', '4.0') === 0\n // Important: A string of 0 length needs to be converted into a value\n // even less than an unexisting value in vm (-7), hence [-8].\n // It's also important to not strip spaces because of this.\n // version_compare('', ' ') === 1\n const prepVersion = (v) => {\n v = (\"\" + v).replace(/[_\\-+]/g, \".\");\n v = v.replace(/([^.\\d]+)/g, \".$1.\").replace(/\\.{2,}/g, \".\");\n return (!v.length ? [-8] : v.split(\".\"));\n };\n // This converts a version component to a number.\n // Empty component becomes 0.\n // Non-numerical component becomes a negative number.\n // Numerical component becomes itself as an integer.\n const numVersion = (v) => {\n return !v ? 0 : (isNaN(v) ? vm[v] || -7 : parseInt(v, 10));\n };\n v1 = prepVersion(v1);\n v2 = prepVersion(v2);\n x = Math.max(v1.length, v2.length);\n for (i = 0; i < x; i++) {\n if (v1[i] === v2[i]) {\n continue;\n }\n v1[i] = numVersion(v1[i]);\n v2[i] = numVersion(v2[i]);\n if (v1[i] < v2[i]) {\n compare = -1;\n break;\n }\n else if (v1[i] > v2[i]) {\n compare = 1;\n break;\n }\n }\n if (!operator) {\n return compare;\n }\n // Important: operator is CASE-SENSITIVE.\n // \"No operator\" seems to be treated as \"<.\"\n // Any other values seem to make the function return null.\n switch (operator) {\n case \">\":\n case \"gt\":\n return (compare > 0);\n case \">=\":\n case \"ge\":\n return (compare >= 0);\n case \"<=\":\n case \"le\":\n return (compare <= 0);\n case \"===\":\n case \"=\":\n case \"eq\":\n return (compare === 0);\n case \"<>\":\n case \"!==\":\n case \"ne\":\n return (compare !== 0);\n case \"\":\n case \"<\":\n case \"lt\":\n return (compare < 0);\n default:\n return null;\n }\n};\n", "\"use strict\";\nvar __importDefault = (this && this.__importDefault) || function (mod) {\n return (mod && mod.__esModule) ? mod : { \"default\": mod };\n};\nconst client_1 = __importDefault(require(\"./parsers/client\"));\nconst device_1 = __importDefault(require(\"./parsers/device\"));\nconst operating_system_1 = __importDefault(require(\"./parsers/operating-system\"));\nconst vendor_fragment_1 = __importDefault(require(\"./parsers/vendor-fragment\"));\nconst browser_1 = __importDefault(require(\"./parsers/client/browser\"));\nconst BotParser = require(\"./parsers/bot\");\nconst user_agent_1 = require(\"./utils/user-agent\");\nconst version_compare_1 = require(\"./utils/version-compare\");\nclass DeviceDetector {\n constructor(options) {\n // Default options\n this.options = {\n skipBotDetection: false,\n versionTruncation: 1\n };\n this.parse = (userAgent) => {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p;\n const result = {\n client: this.clientParser.parse(userAgent),\n os: this.operatingSystemParser.parse(userAgent),\n device: this.deviceParser.parse(userAgent),\n bot: this.options.skipBotDetection ? null : this.botParser.parse(userAgent)\n };\n const osName = (_a = result.os) === null || _a === void 0 ? void 0 : _a.name;\n const osVersion = (_b = result.os) === null || _b === void 0 ? void 0 : _b.version;\n const osFamily = operating_system_1.default.getOsFamily(osName || \"\");\n if (!((_c = result.device) === null || _c === void 0 ? void 0 : _c.brand)) {\n const brand = this.vendorFragmentParser.parse(userAgent);\n if (brand) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.brand = brand;\n }\n }\n /**\n * Assume all devices running iOS / Mac OS are from Apple\n */\n if (!((_d = result.device) === null || _d === void 0 ? void 0 : _d.brand) && [\"Apple TV\", \"watchOS\", \"iOS\", \"Mac\"].includes(osName || \"\")) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.brand = \"Apple\";\n }\n /**\n * Chrome on Android passes the device type based on the keyword 'Mobile'\n * If it is present the device should be a smartphone, otherwise it's a tablet\n * See https://developer.chrome.com/multidevice/user-agent#chrome_for_android_user_agent\n * Note: We do not check for browser (family) here, as there might be mobile apps using Chrome, that won't have\n * a detected browser, but can still be detected. So we check the useragent for Chrome instead.\n */\n if (!((_e = result.device) === null || _e === void 0 ? void 0 : _e.type) && osFamily === \"Android\" && user_agent_1.userAgentParser(\"Chrome/[\\\\.0-9]*\", userAgent)) {\n if (user_agent_1.userAgentParser(\"Chrome/[.0-9]* (?:Mobile|eliboM)\", userAgent)) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"smartphone\";\n }\n else if (user_agent_1.userAgentParser(\"Chrome/[.0-9]* (?!Mobile)\", userAgent)) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"tablet\";\n }\n }\n /**\n * Some user agents simply contain the fragment 'Android; Tablet;' or 'Opera Tablet', so we assume those devices are tablets\n */\n if (!((_f = result.device) === null || _f === void 0 ? void 0 : _f.type) && this.hasAndroidTabletFragment(userAgent) || user_agent_1.userAgentParser(\"Opera Tablet\", userAgent)) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"tablet\";\n }\n /**\n * Some user agents simply contain the fragment 'Android; Mobile;', so we assume those devices are smartphones\n */\n if (!((_g = result.device) === null || _g === void 0 ? void 0 : _g.type) && this.hasAndroidMobileFragment(userAgent)) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"smartphone\";\n }\n /**\n * Android up to 3.0 was designed for smartphones only. But as 3.0, which was tablet only, was published\n * too late, there were a bunch of tablets running with 2.x\n * With 4.0 the two trees were merged and it is for smartphones and tablets\n *\n * So were are expecting that all devices running Android < 2 are smartphones\n * Devices running Android 3.X are tablets. Device type of Android 2.X and 4.X+ are unknown\n */\n if (!((_h = result.device) === null || _h === void 0 ? void 0 : _h.type) && osName === \"Android\" && osVersion !== \"\") {\n if (version_compare_1.versionCompare(osVersion, \"2.0\") === -1) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"smartphone\";\n }\n else if (version_compare_1.versionCompare(osVersion, \"3.0\") >= 0 && version_compare_1.versionCompare(osVersion, \"4.0\") === -1) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"tablet\";\n }\n }\n /**\n * All detected feature phones running android are more likely smartphones\n */\n if (((_j = result.device) === null || _j === void 0 ? void 0 : _j.type) === \"feature phone\" && osFamily === \"Android\") {\n result.device.type = \"smartphone\";\n }\n /**\n * According to http://msdn.microsoft.com/en-us/library/ie/hh920767(v=vs.85).aspx\n * Internet Explorer 10 introduces the \"Touch\" UA string token. If this token is present at the end of the\n * UA string, the computer has touch capability, and is running Windows 8 (or later).\n * This UA string will be transmitted on a touch-enabled system running Windows 8 (RT)\n *\n * As most touch enabled devices are tablets and only a smaller part are desktops/notebooks we assume that\n * all Windows 8 touch devices are tablets.\n */\n if (!((_k = result.device) === null || _k === void 0 ? void 0 : _k.type)\n && this.isToucheEnabled(userAgent)\n && (osName === \"Windows RT\"\n || (osName === \"Windows\"\n && version_compare_1.versionCompare(osVersion, \"8.0\") >= 0))) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"tablet\";\n }\n /**\n * All devices running Opera TV Store are assumed to be televisions\n */\n if (user_agent_1.userAgentParser(\"Opera TV Store\", userAgent)) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"television\";\n }\n /**\n * All devices running Tizen TV or SmartTV are assumed to be televisions\n */\n if (user_agent_1.userAgentParser(\"SmartTV|Tizen.+ TV .+$\", userAgent)) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"television\";\n }\n /**\n * Devices running Kylo or Espital TV Browsers are assumed to be televisions\n */\n if (!((_l = result.device) === null || _l === void 0 ? void 0 : _l.type) && [\"Kylo\", \"Espial TV Browser\"].includes(((_m = result.client) === null || _m === void 0 ? void 0 : _m.name) || \"\")) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"television\";\n }\n /**\n * Set device type to desktop if string ua contains desktop\n */\n const hasDesktop = \"desktop\" !== ((_o = result.device) === null || _o === void 0 ? void 0 : _o.type)\n && null !== user_agent_1.userAgentParser(\"Desktop\", userAgent)\n && this.hasDesktopFragment(userAgent);\n if (hasDesktop) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"desktop\";\n }\n // set device type to desktop for all devices running a desktop os that were not detected as an other device type\n if (!((_p = result.device) === null || _p === void 0 ? void 0 : _p.type) && this.isDesktop(result, osFamily)) {\n if (!result.device) {\n result.device = this.createDeviceObject();\n }\n result.device.type = \"desktop\";\n }\n return result;\n };\n this.hasAndroidMobileFragment = (userAgent) => {\n return user_agent_1.userAgentParser(\"Android( [\\.0-9]+)?; Mobile;\", userAgent);\n };\n this.hasAndroidTabletFragment = (userAgent) => {\n return user_agent_1.userAgentParser(\"Android( [\\.0-9]+)?; Tablet;\", userAgent);\n };\n this.hasDesktopFragment = (userAgent) => {\n return user_agent_1.userAgentParser(\"Desktop (x(?:32|64)|WOW64);\", userAgent);\n };\n this.isDesktop = (result, osFamily) => {\n if (!result.os) {\n return false;\n }\n // Check for browsers available for mobile devices only\n if (this.usesMobileBrowser(result.client)) {\n return false;\n }\n return operating_system_1.default.getDesktopOsArray().includes(osFamily);\n };\n this.usesMobileBrowser = (client) => {\n var _a, _b;\n if (!client)\n return false;\n return ((_a = client) === null || _a === void 0 ? void 0 : _a.type) === \"browser\" && browser_1.default.isMobileOnlyBrowser((_b = client) === null || _b === void 0 ? void 0 : _b.name);\n };\n this.isToucheEnabled = (userAgent) => {\n return user_agent_1.userAgentParser(\"Touch\", userAgent);\n };\n this.createDeviceObject = () => ({\n type: \"\",\n brand: \"\",\n model: \"\"\n });\n this.options = Object.assign(Object.assign({}, this.options), options);\n this.clientParser = new client_1.default(this.options);\n this.deviceParser = new device_1.default();\n this.operatingSystemParser = new operating_system_1.default(this.options);\n this.vendorFragmentParser = new vendor_fragment_1.default();\n this.botParser = new BotParser();\n }\n}\nmodule.exports = DeviceDetector;\n", "(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('stackframe', [], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory();\n } else {\n root.StackFrame = factory();\n }\n}(this, function() {\n 'use strict';\n function _isNumber(n) {\n return !isNaN(parseFloat(n)) && isFinite(n);\n }\n\n function _capitalize(str) {\n return str.charAt(0).toUpperCase() + str.substring(1);\n }\n\n function _getter(p) {\n return function() {\n return this[p];\n };\n }\n\n var booleanProps = ['isConstructor', 'isEval', 'isNative', 'isToplevel'];\n var numericProps = ['columnNumber', 'lineNumber'];\n var stringProps = ['fileName', 'functionName', 'source'];\n var arrayProps = ['args'];\n var objectProps = ['evalOrigin'];\n\n var props = booleanProps.concat(numericProps, stringProps, arrayProps, objectProps);\n\n function StackFrame(obj) {\n if (!obj) return;\n for (var i = 0; i < props.length; i++) {\n if (obj[props[i]] !== undefined) {\n this['set' + _capitalize(props[i])](obj[props[i]]);\n }\n }\n }\n\n StackFrame.prototype = {\n getArgs: function() {\n return this.args;\n },\n setArgs: function(v) {\n if (Object.prototype.toString.call(v) !== '[object Array]') {\n throw new TypeError('Args must be an Array');\n }\n this.args = v;\n },\n\n getEvalOrigin: function() {\n return this.evalOrigin;\n },\n setEvalOrigin: function(v) {\n if (v instanceof StackFrame) {\n this.evalOrigin = v;\n } else if (v instanceof Object) {\n this.evalOrigin = new StackFrame(v);\n } else {\n throw new TypeError('Eval Origin must be an Object or StackFrame');\n }\n },\n\n toString: function() {\n var fileName = this.getFileName() || '';\n var lineNumber = this.getLineNumber() || '';\n var columnNumber = this.getColumnNumber() || '';\n var functionName = this.getFunctionName() || '';\n if (this.getIsEval()) {\n if (fileName) {\n return '[eval] (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return '[eval]:' + lineNumber + ':' + columnNumber;\n }\n if (functionName) {\n return functionName + ' (' + fileName + ':' + lineNumber + ':' + columnNumber + ')';\n }\n return fileName + ':' + lineNumber + ':' + columnNumber;\n }\n };\n\n StackFrame.fromString = function StackFrame$$fromString(str) {\n var argsStartIndex = str.indexOf('(');\n var argsEndIndex = str.lastIndexOf(')');\n\n var functionName = str.substring(0, argsStartIndex);\n var args = str.substring(argsStartIndex + 1, argsEndIndex).split(',');\n var locationString = str.substring(argsEndIndex + 1);\n\n if (locationString.indexOf('@') === 0) {\n var parts = /@(.+?)(?::(\\d+))?(?::(\\d+))?$/.exec(locationString, '');\n var fileName = parts[1];\n var lineNumber = parts[2];\n var columnNumber = parts[3];\n }\n\n return new StackFrame({\n functionName: functionName,\n args: args || undefined,\n fileName: fileName,\n lineNumber: lineNumber || undefined,\n columnNumber: columnNumber || undefined\n });\n };\n\n for (var i = 0; i < booleanProps.length; i++) {\n StackFrame.prototype['get' + _capitalize(booleanProps[i])] = _getter(booleanProps[i]);\n StackFrame.prototype['set' + _capitalize(booleanProps[i])] = (function(p) {\n return function(v) {\n this[p] = Boolean(v);\n };\n })(booleanProps[i]);\n }\n\n for (var j = 0; j < numericProps.length; j++) {\n StackFrame.prototype['get' + _capitalize(numericProps[j])] = _getter(numericProps[j]);\n StackFrame.prototype['set' + _capitalize(numericProps[j])] = (function(p) {\n return function(v) {\n if (!_isNumber(v)) {\n throw new TypeError(p + ' must be a Number');\n }\n this[p] = Number(v);\n };\n })(numericProps[j]);\n }\n\n for (var k = 0; k < stringProps.length; k++) {\n StackFrame.prototype['get' + _capitalize(stringProps[k])] = _getter(stringProps[k]);\n StackFrame.prototype['set' + _capitalize(stringProps[k])] = (function(p) {\n return function(v) {\n this[p] = String(v);\n };\n })(stringProps[k]);\n }\n\n return StackFrame;\n}));\n", "(function(root, factory) {\n 'use strict';\n // Universal Module Definition (UMD) to support AMD, CommonJS/Node.js, Rhino, and browsers.\n\n /* istanbul ignore next */\n if (typeof define === 'function' && define.amd) {\n define('error-stack-parser', ['stackframe'], factory);\n } else if (typeof exports === 'object') {\n module.exports = factory(require('stackframe'));\n } else {\n root.ErrorStackParser = factory(root.StackFrame);\n }\n}(this, function ErrorStackParser(StackFrame) {\n 'use strict';\n\n var FIREFOX_SAFARI_STACK_REGEXP = /(^|@)\\S+:\\d+/;\n var CHROME_IE_STACK_REGEXP = /^\\s*at .*(\\S+:\\d+|\\(native\\))/m;\n var SAFARI_NATIVE_CODE_REGEXP = /^(eval@)?(\\[native code])?$/;\n\n return {\n /**\n * Given an Error object, extract the most information from it.\n *\n * @param {Error} error object\n * @return {Array} of StackFrames\n */\n parse: function ErrorStackParser$$parse(error) {\n if (typeof error.stacktrace !== 'undefined' || typeof error['opera#sourceloc'] !== 'undefined') {\n return this.parseOpera(error);\n } else if (error.stack && error.stack.match(CHROME_IE_STACK_REGEXP)) {\n return this.parseV8OrIE(error);\n } else if (error.stack) {\n return this.parseFFOrSafari(error);\n } else {\n throw new Error('Cannot parse given Error object');\n }\n },\n\n // Separate line and column numbers from a string of the form: (URI:Line:Column)\n extractLocation: function ErrorStackParser$$extractLocation(urlLike) {\n // Fail-fast but return locations like \"(native)\"\n if (urlLike.indexOf(':') === -1) {\n return [urlLike];\n }\n\n var regExp = /(.+?)(?::(\\d+))?(?::(\\d+))?$/;\n var parts = regExp.exec(urlLike.replace(/[()]/g, ''));\n return [parts[1], parts[2] || undefined, parts[3] || undefined];\n },\n\n parseV8OrIE: function ErrorStackParser$$parseV8OrIE(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(CHROME_IE_STACK_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n if (line.indexOf('(eval ') > -1) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n line = line.replace(/eval code/g, 'eval').replace(/(\\(eval at [^()]*)|(,.*$)/g, '');\n }\n var sanitizedLine = line.replace(/^\\s+/, '').replace(/\\(eval code/g, '(').replace(/^.*?\\s+/, '');\n\n // capture and preseve the parenthesized location \"(/foo/my bar.js:12:87)\" in\n // case it has spaces in it, as the string is split on \\s+ later on\n var location = sanitizedLine.match(/ (\\(.+\\)$)/);\n\n // remove the parenthesized location from the line, if it was matched\n sanitizedLine = location ? sanitizedLine.replace(location[0], '') : sanitizedLine;\n\n // if a location was matched, pass it to extractLocation() otherwise pass all sanitizedLine\n // because this line doesn't have function name\n var locationParts = this.extractLocation(location ? location[1] : sanitizedLine);\n var functionName = location && sanitizedLine || undefined;\n var fileName = ['eval', '<anonymous>'].indexOf(locationParts[0]) > -1 ? undefined : locationParts[0];\n\n return new StackFrame({\n functionName: functionName,\n fileName: fileName,\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n },\n\n parseFFOrSafari: function ErrorStackParser$$parseFFOrSafari(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !line.match(SAFARI_NATIVE_CODE_REGEXP);\n }, this);\n\n return filtered.map(function(line) {\n // Throw away eval information until we implement stacktrace.js/stackframe#8\n if (line.indexOf(' > eval') > -1) {\n line = line.replace(/ line (\\d+)(?: > eval line \\d+)* > eval:\\d+:\\d+/g, ':$1');\n }\n\n if (line.indexOf('@') === -1 && line.indexOf(':') === -1) {\n // Safari eval frames only have function names and nothing else\n return new StackFrame({\n functionName: line\n });\n } else {\n var functionNameRegex = /((.*\".+\"[^@]*)?[^@]*)(?:@)/;\n var matches = line.match(functionNameRegex);\n var functionName = matches && matches[1] ? matches[1] : undefined;\n var locationParts = this.extractLocation(line.replace(functionNameRegex, ''));\n\n return new StackFrame({\n functionName: functionName,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }\n }, this);\n },\n\n parseOpera: function ErrorStackParser$$parseOpera(e) {\n if (!e.stacktrace || (e.message.indexOf('\\n') > -1 &&\n e.message.split('\\n').length > e.stacktrace.split('\\n').length)) {\n return this.parseOpera9(e);\n } else if (!e.stack) {\n return this.parseOpera10(e);\n } else {\n return this.parseOpera11(e);\n }\n },\n\n parseOpera9: function ErrorStackParser$$parseOpera9(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)/i;\n var lines = e.message.split('\\n');\n var result = [];\n\n for (var i = 2, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(new StackFrame({\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n }));\n }\n }\n\n return result;\n },\n\n parseOpera10: function ErrorStackParser$$parseOpera10(e) {\n var lineRE = /Line (\\d+).*script (?:in )?(\\S+)(?:: In function (\\S+))?$/i;\n var lines = e.stacktrace.split('\\n');\n var result = [];\n\n for (var i = 0, len = lines.length; i < len; i += 2) {\n var match = lineRE.exec(lines[i]);\n if (match) {\n result.push(\n new StackFrame({\n functionName: match[3] || undefined,\n fileName: match[2],\n lineNumber: match[1],\n source: lines[i]\n })\n );\n }\n }\n\n return result;\n },\n\n // Opera 10.65+ Error.stack very similar to FF/Safari\n parseOpera11: function ErrorStackParser$$parseOpera11(error) {\n var filtered = error.stack.split('\\n').filter(function(line) {\n return !!line.match(FIREFOX_SAFARI_STACK_REGEXP) && !line.match(/^Error created at/);\n }, this);\n\n return filtered.map(function(line) {\n var tokens = line.split('@');\n var locationParts = this.extractLocation(tokens.pop());\n var functionCall = (tokens.shift() || '');\n var functionName = functionCall\n .replace(/<anonymous function(: (\\w+))?>/, '$2')\n .replace(/\\([^)]*\\)/g, '') || undefined;\n var argsRaw;\n if (functionCall.match(/\\(([^)]*)\\)/)) {\n argsRaw = functionCall.replace(/^[^(]+\\(([^)]*)\\)$/, '$1');\n }\n var args = (argsRaw === undefined || argsRaw === '[arguments not available]') ?\n undefined : argsRaw.split(',');\n\n return new StackFrame({\n functionName: functionName,\n args: args,\n fileName: locationParts[0],\n lineNumber: locationParts[1],\n columnNumber: locationParts[2],\n source: line\n });\n }, this);\n }\n };\n}));\n", "var global = typeof self !== 'undefined' ? self : this;\nvar __self__ = (function () {\nfunction F() {\nthis.fetch = false;\nthis.DOMException = global.DOMException\n}\nF.prototype = global;\nreturn new F();\n})();\n(function(self) {\n\nvar irrelevant = (function (exports) {\n\n var support = {\n searchParams: 'URLSearchParams' in self,\n iterable: 'Symbol' in self && 'iterator' in Symbol,\n blob:\n 'FileReader' in self &&\n 'Blob' in self &&\n (function() {\n try {\n new Blob();\n return true\n } catch (e) {\n return false\n }\n })(),\n formData: 'FormData' in self,\n arrayBuffer: 'ArrayBuffer' in self\n };\n\n function isDataView(obj) {\n return obj && DataView.prototype.isPrototypeOf(obj)\n }\n\n if (support.arrayBuffer) {\n var viewClasses = [\n '[object Int8Array]',\n '[object Uint8Array]',\n '[object Uint8ClampedArray]',\n '[object Int16Array]',\n '[object Uint16Array]',\n '[object Int32Array]',\n '[object Uint32Array]',\n '[object Float32Array]',\n '[object Float64Array]'\n ];\n\n var isArrayBufferView =\n ArrayBuffer.isView ||\n function(obj) {\n return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1\n };\n }\n\n function normalizeName(name) {\n if (typeof name !== 'string') {\n name = String(name);\n }\n if (/[^a-z0-9\\-#$%&'*+.^_`|~]/i.test(name)) {\n throw new TypeError('Invalid character in header field name')\n }\n return name.toLowerCase()\n }\n\n function normalizeValue(value) {\n if (typeof value !== 'string') {\n value = String(value);\n }\n return value\n }\n\n // Build a destructive iterator for the value list\n function iteratorFor(items) {\n var iterator = {\n next: function() {\n var value = items.shift();\n return {done: value === undefined, value: value}\n }\n };\n\n if (support.iterable) {\n iterator[Symbol.iterator] = function() {\n return iterator\n };\n }\n\n return iterator\n }\n\n function Headers(headers) {\n this.map = {};\n\n if (headers instanceof Headers) {\n headers.forEach(function(value, name) {\n this.append(name, value);\n }, this);\n } else if (Array.isArray(headers)) {\n headers.forEach(function(header) {\n this.append(header[0], header[1]);\n }, this);\n } else if (headers) {\n Object.getOwnPropertyNames(headers).forEach(function(name) {\n this.append(name, headers[name]);\n }, this);\n }\n }\n\n Headers.prototype.append = function(name, value) {\n name = normalizeName(name);\n value = normalizeValue(value);\n var oldValue = this.map[name];\n this.map[name] = oldValue ? oldValue + ', ' + value : value;\n };\n\n Headers.prototype['delete'] = function(name) {\n delete this.map[normalizeName(name)];\n };\n\n Headers.prototype.get = function(name) {\n name = normalizeName(name);\n return this.has(name) ? this.map[name] : null\n };\n\n Headers.prototype.has = function(name) {\n return this.map.hasOwnProperty(normalizeName(name))\n };\n\n Headers.prototype.set = function(name, value) {\n this.map[normalizeName(name)] = normalizeValue(value);\n };\n\n Headers.prototype.forEach = function(callback, thisArg) {\n for (var name in this.map) {\n if (this.map.hasOwnProperty(name)) {\n callback.call(thisArg, this.map[name], name, this);\n }\n }\n };\n\n Headers.prototype.keys = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push(name);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.values = function() {\n var items = [];\n this.forEach(function(value) {\n items.push(value);\n });\n return iteratorFor(items)\n };\n\n Headers.prototype.entries = function() {\n var items = [];\n this.forEach(function(value, name) {\n items.push([name, value]);\n });\n return iteratorFor(items)\n };\n\n if (support.iterable) {\n Headers.prototype[Symbol.iterator] = Headers.prototype.entries;\n }\n\n function consumed(body) {\n if (body.bodyUsed) {\n return Promise.reject(new TypeError('Already read'))\n }\n body.bodyUsed = true;\n }\n\n function fileReaderReady(reader) {\n return new Promise(function(resolve, reject) {\n reader.onload = function() {\n resolve(reader.result);\n };\n reader.onerror = function() {\n reject(reader.error);\n };\n })\n }\n\n function readBlobAsArrayBuffer(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsArrayBuffer(blob);\n return promise\n }\n\n function readBlobAsText(blob) {\n var reader = new FileReader();\n var promise = fileReaderReady(reader);\n reader.readAsText(blob);\n return promise\n }\n\n function readArrayBufferAsText(buf) {\n var view = new Uint8Array(buf);\n var chars = new Array(view.length);\n\n for (var i = 0; i < view.length; i++) {\n chars[i] = String.fromCharCode(view[i]);\n }\n return chars.join('')\n }\n\n function bufferClone(buf) {\n if (buf.slice) {\n return buf.slice(0)\n } else {\n var view = new Uint8Array(buf.byteLength);\n view.set(new Uint8Array(buf));\n return view.buffer\n }\n }\n\n function Body() {\n this.bodyUsed = false;\n\n this._initBody = function(body) {\n this._bodyInit = body;\n if (!body) {\n this._bodyText = '';\n } else if (typeof body === 'string') {\n this._bodyText = body;\n } else if (support.blob && Blob.prototype.isPrototypeOf(body)) {\n this._bodyBlob = body;\n } else if (support.formData && FormData.prototype.isPrototypeOf(body)) {\n this._bodyFormData = body;\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this._bodyText = body.toString();\n } else if (support.arrayBuffer && support.blob && isDataView(body)) {\n this._bodyArrayBuffer = bufferClone(body.buffer);\n // IE 10-11 can't handle a DataView body.\n this._bodyInit = new Blob([this._bodyArrayBuffer]);\n } else if (support.arrayBuffer && (ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))) {\n this._bodyArrayBuffer = bufferClone(body);\n } else {\n this._bodyText = body = Object.prototype.toString.call(body);\n }\n\n if (!this.headers.get('content-type')) {\n if (typeof body === 'string') {\n this.headers.set('content-type', 'text/plain;charset=UTF-8');\n } else if (this._bodyBlob && this._bodyBlob.type) {\n this.headers.set('content-type', this._bodyBlob.type);\n } else if (support.searchParams && URLSearchParams.prototype.isPrototypeOf(body)) {\n this.headers.set('content-type', 'application/x-www-form-urlencoded;charset=UTF-8');\n }\n }\n };\n\n if (support.blob) {\n this.blob = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return Promise.resolve(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(new Blob([this._bodyArrayBuffer]))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as blob')\n } else {\n return Promise.resolve(new Blob([this._bodyText]))\n }\n };\n\n this.arrayBuffer = function() {\n if (this._bodyArrayBuffer) {\n return consumed(this) || Promise.resolve(this._bodyArrayBuffer)\n } else {\n return this.blob().then(readBlobAsArrayBuffer)\n }\n };\n }\n\n this.text = function() {\n var rejected = consumed(this);\n if (rejected) {\n return rejected\n }\n\n if (this._bodyBlob) {\n return readBlobAsText(this._bodyBlob)\n } else if (this._bodyArrayBuffer) {\n return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer))\n } else if (this._bodyFormData) {\n throw new Error('could not read FormData body as text')\n } else {\n return Promise.resolve(this._bodyText)\n }\n };\n\n if (support.formData) {\n this.formData = function() {\n return this.text().then(decode)\n };\n }\n\n this.json = function() {\n return this.text().then(JSON.parse)\n };\n\n return this\n }\n\n // HTTP methods whose capitalization should be normalized\n var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];\n\n function normalizeMethod(method) {\n var upcased = method.toUpperCase();\n return methods.indexOf(upcased) > -1 ? upcased : method\n }\n\n function Request(input, options) {\n options = options || {};\n var body = options.body;\n\n if (input instanceof Request) {\n if (input.bodyUsed) {\n throw new TypeError('Already read')\n }\n this.url = input.url;\n this.credentials = input.credentials;\n if (!options.headers) {\n this.headers = new Headers(input.headers);\n }\n this.method = input.method;\n this.mode = input.mode;\n this.signal = input.signal;\n if (!body && input._bodyInit != null) {\n body = input._bodyInit;\n input.bodyUsed = true;\n }\n } else {\n this.url = String(input);\n }\n\n this.credentials = options.credentials || this.credentials || 'same-origin';\n if (options.headers || !this.headers) {\n this.headers = new Headers(options.headers);\n }\n this.method = normalizeMethod(options.method || this.method || 'GET');\n this.mode = options.mode || this.mode || null;\n this.signal = options.signal || this.signal;\n this.referrer = null;\n\n if ((this.method === 'GET' || this.method === 'HEAD') && body) {\n throw new TypeError('Body not allowed for GET or HEAD requests')\n }\n this._initBody(body);\n }\n\n Request.prototype.clone = function() {\n return new Request(this, {body: this._bodyInit})\n };\n\n function decode(body) {\n var form = new FormData();\n body\n .trim()\n .split('&')\n .forEach(function(bytes) {\n if (bytes) {\n var split = bytes.split('=');\n var name = split.shift().replace(/\\+/g, ' ');\n var value = split.join('=').replace(/\\+/g, ' ');\n form.append(decodeURIComponent(name), decodeURIComponent(value));\n }\n });\n return form\n }\n\n function parseHeaders(rawHeaders) {\n var headers = new Headers();\n // Replace instances of \\r\\n and \\n followed by at least one space or horizontal tab with a space\n // https://tools.ietf.org/html/rfc7230#section-3.2\n var preProcessedHeaders = rawHeaders.replace(/\\r?\\n[\\t ]+/g, ' ');\n preProcessedHeaders.split(/\\r?\\n/).forEach(function(line) {\n var parts = line.split(':');\n var key = parts.shift().trim();\n if (key) {\n var value = parts.join(':').trim();\n headers.append(key, value);\n }\n });\n return headers\n }\n\n Body.call(Request.prototype);\n\n function Response(bodyInit, options) {\n if (!options) {\n options = {};\n }\n\n this.type = 'default';\n this.status = options.status === undefined ? 200 : options.status;\n this.ok = this.status >= 200 && this.status < 300;\n this.statusText = 'statusText' in options ? options.statusText : 'OK';\n this.headers = new Headers(options.headers);\n this.url = options.url || '';\n this._initBody(bodyInit);\n }\n\n Body.call(Response.prototype);\n\n Response.prototype.clone = function() {\n return new Response(this._bodyInit, {\n status: this.status,\n statusText: this.statusText,\n headers: new Headers(this.headers),\n url: this.url\n })\n };\n\n Response.error = function() {\n var response = new Response(null, {status: 0, statusText: ''});\n response.type = 'error';\n return response\n };\n\n var redirectStatuses = [301, 302, 303, 307, 308];\n\n Response.redirect = function(url, status) {\n if (redirectStatuses.indexOf(status) === -1) {\n throw new RangeError('Invalid status code')\n }\n\n return new Response(null, {status: status, headers: {location: url}})\n };\n\n exports.DOMException = self.DOMException;\n try {\n new exports.DOMException();\n } catch (err) {\n exports.DOMException = function(message, name) {\n this.message = message;\n this.name = name;\n var error = Error(message);\n this.stack = error.stack;\n };\n exports.DOMException.prototype = Object.create(Error.prototype);\n exports.DOMException.prototype.constructor = exports.DOMException;\n }\n\n function fetch(input, init) {\n return new Promise(function(resolve, reject) {\n var request = new Request(input, init);\n\n if (request.signal && request.signal.aborted) {\n return reject(new exports.DOMException('Aborted', 'AbortError'))\n }\n\n var xhr = new XMLHttpRequest();\n\n function abortXhr() {\n xhr.abort();\n }\n\n xhr.onload = function() {\n var options = {\n status: xhr.status,\n statusText: xhr.statusText,\n headers: parseHeaders(xhr.getAllResponseHeaders() || '')\n };\n options.url = 'responseURL' in xhr ? xhr.responseURL : options.headers.get('X-Request-URL');\n var body = 'response' in xhr ? xhr.response : xhr.responseText;\n resolve(new Response(body, options));\n };\n\n xhr.onerror = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.ontimeout = function() {\n reject(new TypeError('Network request failed'));\n };\n\n xhr.onabort = function() {\n reject(new exports.DOMException('Aborted', 'AbortError'));\n };\n\n xhr.open(request.method, request.url, true);\n\n if (request.credentials === 'include') {\n xhr.withCredentials = true;\n } else if (request.credentials === 'omit') {\n xhr.withCredentials = false;\n }\n\n if ('responseType' in xhr && support.blob) {\n xhr.responseType = 'blob';\n }\n\n request.headers.forEach(function(value, name) {\n xhr.setRequestHeader(name, value);\n });\n\n if (request.signal) {\n request.signal.addEventListener('abort', abortXhr);\n\n xhr.onreadystatechange = function() {\n // DONE (success or failure)\n if (xhr.readyState === 4) {\n request.signal.removeEventListener('abort', abortXhr);\n }\n };\n }\n\n xhr.send(typeof request._bodyInit === 'undefined' ? null : request._bodyInit);\n })\n }\n\n fetch.polyfill = true;\n\n if (!self.fetch) {\n self.fetch = fetch;\n self.Headers = Headers;\n self.Request = Request;\n self.Response = Response;\n }\n\n exports.Headers = Headers;\n exports.Request = Request;\n exports.Response = Response;\n exports.fetch = fetch;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n})({});\n})(__self__);\n__self__.fetch.ponyfill = true;\n// Remove \"polyfill\" property added by whatwg-fetch\ndelete __self__.fetch.polyfill;\n// Choose between native implementation (global) or custom implementation (__self__)\n// var ctx = global.fetch ? global : __self__;\nvar ctx = __self__; // this line disable service worker support temporarily\nexports = ctx.fetch // To enable: import fetch from 'cross-fetch'\nexports.default = ctx.fetch // For TypeScript consumers without esModuleInterop.\nexports.fetch = ctx.fetch // To enable: import {fetch} from 'cross-fetch'\nexports.Headers = ctx.Headers\nexports.Request = ctx.Request\nexports.Response = ctx.Response\nmodule.exports = exports\n", "\nfunction TreeBase() {}\n\n// removes all nodes from the tree\nTreeBase.prototype.clear = function() {\n this._root = null;\n this.size = 0;\n};\n\n// returns node data if found, null otherwise\nTreeBase.prototype.find = function(data) {\n var res = this._root;\n\n while(res !== null) {\n var c = this._comparator(data, res.data);\n if(c === 0) {\n return res.data;\n }\n else {\n res = res.get_child(c > 0);\n }\n }\n\n return null;\n};\n\n// returns iterator to node if found, null otherwise\nTreeBase.prototype.findIter = function(data) {\n var res = this._root;\n var iter = this.iterator();\n\n while(res !== null) {\n var c = this._comparator(data, res.data);\n if(c === 0) {\n iter._cursor = res;\n return iter;\n }\n else {\n iter._ancestors.push(res);\n res = res.get_child(c > 0);\n }\n }\n\n return null;\n};\n\n// Returns an iterator to the tree node at or immediately after the item\nTreeBase.prototype.lowerBound = function(item) {\n var cur = this._root;\n var iter = this.iterator();\n var cmp = this._comparator;\n\n while(cur !== null) {\n var c = cmp(item, cur.data);\n if(c === 0) {\n iter._cursor = cur;\n return iter;\n }\n iter._ancestors.push(cur);\n cur = cur.get_child(c > 0);\n }\n\n for(var i=iter._ancestors.length - 1; i >= 0; --i) {\n cur = iter._ancestors[i];\n if(cmp(item, cur.data) < 0) {\n iter._cursor = cur;\n iter._ancestors.length = i;\n return iter;\n }\n }\n\n iter._ancestors.length = 0;\n return iter;\n};\n\n// Returns an iterator to the tree node immediately after the item\nTreeBase.prototype.upperBound = function(item) {\n var iter = this.lowerBound(item);\n var cmp = this._comparator;\n\n while(iter.data() !== null && cmp(iter.data(), item) === 0) {\n iter.next();\n }\n\n return iter;\n};\n\n// returns null if tree is empty\nTreeBase.prototype.min = function() {\n var res = this._root;\n if(res === null) {\n return null;\n }\n\n while(res.left !== null) {\n res = res.left;\n }\n\n return res.data;\n};\n\n// returns null if tree is empty\nTreeBase.prototype.max = function() {\n var res = this._root;\n if(res === null) {\n return null;\n }\n\n while(res.right !== null) {\n res = res.right;\n }\n\n return res.data;\n};\n\n// returns a null iterator\n// call next() or prev() to point to an element\nTreeBase.prototype.iterator = function() {\n return new Iterator(this);\n};\n\n// calls cb on each node's data, in order\nTreeBase.prototype.each = function(cb) {\n var it=this.iterator(), data;\n while((data = it.next()) !== null) {\n if(cb(data) === false) {\n return;\n }\n }\n};\n\n// calls cb on each node's data, in reverse order\nTreeBase.prototype.reach = function(cb) {\n var it=this.iterator(), data;\n while((data = it.prev()) !== null) {\n if(cb(data) === false) {\n return;\n }\n }\n};\n\n\nfunction Iterator(tree) {\n this._tree = tree;\n this._ancestors = [];\n this._cursor = null;\n}\n\nIterator.prototype.data = function() {\n return this._cursor !== null ? this._cursor.data : null;\n};\n\n// if null-iterator, returns first node\n// otherwise, returns next node\nIterator.prototype.next = function() {\n if(this._cursor === null) {\n var root = this._tree._root;\n if(root !== null) {\n this._minNode(root);\n }\n }\n else {\n if(this._cursor.right === null) {\n // no greater node in subtree, go up to parent\n // if coming from a right child, continue up the stack\n var save;\n do {\n save = this._cursor;\n if(this._ancestors.length) {\n this._cursor = this._ancestors.pop();\n }\n else {\n this._cursor = null;\n break;\n }\n } while(this._cursor.right === save);\n }\n else {\n // get the next node from the subtree\n this._ancestors.push(this._cursor);\n this._minNode(this._cursor.right);\n }\n }\n return this._cursor !== null ? this._cursor.data : null;\n};\n\n// if null-iterator, returns last node\n// otherwise, returns previous node\nIterator.prototype.prev = function() {\n if(this._cursor === null) {\n var root = this._tree._root;\n if(root !== null) {\n this._maxNode(root);\n }\n }\n else {\n if(this._cursor.left === null) {\n var save;\n do {\n save = this._cursor;\n if(this._ancestors.length) {\n this._cursor = this._ancestors.pop();\n }\n else {\n this._cursor = null;\n break;\n }\n } while(this._cursor.left === save);\n }\n else {\n this._ancestors.push(this._cursor);\n this._maxNode(this._cursor.left);\n }\n }\n return this._cursor !== null ? this._cursor.data : null;\n};\n\nIterator.prototype._minNode = function(start) {\n while(start.left !== null) {\n this._ancestors.push(start);\n start = start.left;\n }\n this._cursor = start;\n};\n\nIterator.prototype._maxNode = function(start) {\n while(start.right !== null) {\n this._ancestors.push(start);\n start = start.right;\n }\n this._cursor = start;\n};\n\nmodule.exports = TreeBase;\n\n", "\nvar TreeBase = require('./treebase');\n\nfunction Node(data) {\n this.data = data;\n this.left = null;\n this.right = null;\n this.red = true;\n}\n\nNode.prototype.get_child = function(dir) {\n return dir ? this.right : this.left;\n};\n\nNode.prototype.set_child = function(dir, val) {\n if(dir) {\n this.right = val;\n }\n else {\n this.left = val;\n }\n};\n\nfunction RBTree(comparator) {\n this._root = null;\n this._comparator = comparator;\n this.size = 0;\n}\n\nRBTree.prototype = new TreeBase();\n\n// returns true if inserted, false if duplicate\nRBTree.prototype.insert = function(data) {\n var ret = false;\n\n if(this._root === null) {\n // empty tree\n this._root = new Node(data);\n ret = true;\n this.size++;\n }\n else {\n var head = new Node(undefined); // fake tree root\n\n var dir = 0;\n var last = 0;\n\n // setup\n var gp = null; // grandparent\n var ggp = head; // grand-grand-parent\n var p = null; // parent\n var node = this._root;\n ggp.right = this._root;\n\n // search down\n while(true) {\n if(node === null) {\n // insert new node at the bottom\n node = new Node(data);\n p.set_child(dir, node);\n ret = true;\n this.size++;\n }\n else if(is_red(node.left) && is_red(node.right)) {\n // color flip\n node.red = true;\n node.left.red = false;\n node.right.red = false;\n }\n\n // fix red violation\n if(is_red(node) && is_red(p)) {\n var dir2 = ggp.right === gp;\n\n if(node === p.get_child(last)) {\n ggp.set_child(dir2, single_rotate(gp, !last));\n }\n else {\n ggp.set_child(dir2, double_rotate(gp, !last));\n }\n }\n\n var cmp = this._comparator(node.data, data);\n\n // stop if found\n if(cmp === 0) {\n break;\n }\n\n last = dir;\n dir = cmp < 0;\n\n // update helpers\n if(gp !== null) {\n ggp = gp;\n }\n gp = p;\n p = node;\n node = node.get_child(dir);\n }\n\n // update root\n this._root = head.right;\n }\n\n // make root black\n this._root.red = false;\n\n return ret;\n};\n\n// returns true if removed, false if not found\nRBTree.prototype.remove = function(data) {\n if(this._root === null) {\n return false;\n }\n\n var head = new Node(undefined); // fake tree root\n var node = head;\n node.right = this._root;\n var p = null; // parent\n var gp = null; // grand parent\n var found = null; // found item\n var dir = 1;\n\n while(node.get_child(dir) !== null) {\n var last = dir;\n\n // update helpers\n gp = p;\n p = node;\n node = node.get_child(dir);\n\n var cmp = this._comparator(data, node.data);\n\n dir = cmp > 0;\n\n // save found node\n if(cmp === 0) {\n found = node;\n }\n\n // push the red node down\n if(!is_red(node) && !is_red(node.get_child(dir))) {\n if(is_red(node.get_child(!dir))) {\n var sr = single_rotate(node, dir);\n p.set_child(last, sr);\n p = sr;\n }\n else if(!is_red(node.get_child(!dir))) {\n var sibling = p.get_child(!last);\n if(sibling !== null) {\n if(!is_red(sibling.get_child(!last)) && !is_red(sibling.get_child(last))) {\n // color flip\n p.red = false;\n sibling.red = true;\n node.red = true;\n }\n else {\n var dir2 = gp.right === p;\n\n if(is_red(sibling.get_child(last))) {\n gp.set_child(dir2, double_rotate(p, last));\n }\n else if(is_red(sibling.get_child(!last))) {\n gp.set_child(dir2, single_rotate(p, last));\n }\n\n // ensure correct coloring\n var gpc = gp.get_child(dir2);\n gpc.red = true;\n node.red = true;\n gpc.left.red = false;\n gpc.right.red = false;\n }\n }\n }\n }\n }\n\n // replace and remove if found\n if(found !== null) {\n found.data = node.data;\n p.set_child(p.right === node, node.get_child(node.left === null));\n this.size--;\n }\n\n // update root and make it black\n this._root = head.right;\n if(this._root !== null) {\n this._root.red = false;\n }\n\n return found !== null;\n};\n\nfunction is_red(node) {\n return node !== null && node.red;\n}\n\nfunction single_rotate(root, dir) {\n var save = root.get_child(!dir);\n\n root.set_child(!dir, save.get_child(dir));\n save.set_child(dir, root);\n\n root.red = true;\n save.red = false;\n\n return save;\n}\n\nfunction double_rotate(root, dir) {\n root.set_child(!dir, single_rotate(root.get_child(!dir), !dir));\n return single_rotate(root, dir);\n}\n\nmodule.exports = RBTree;\n", "\nvar TreeBase = require('./treebase');\n\nfunction Node(data) {\n this.data = data;\n this.left = null;\n this.right = null;\n}\n\nNode.prototype.get_child = function(dir) {\n return dir ? this.right : this.left;\n};\n\nNode.prototype.set_child = function(dir, val) {\n if(dir) {\n this.right = val;\n }\n else {\n this.left = val;\n }\n};\n\nfunction BinTree(comparator) {\n this._root = null;\n this._comparator = comparator;\n this.size = 0;\n}\n\nBinTree.prototype = new TreeBase();\n\n// returns true if inserted, false if duplicate\nBinTree.prototype.insert = function(data) {\n if(this._root === null) {\n // empty tree\n this._root = new Node(data);\n this.size++;\n return true;\n }\n\n var dir = 0;\n\n // setup\n var p = null; // parent\n var node = this._root;\n\n // search down\n while(true) {\n if(node === null) {\n // insert new node at the bottom\n node = new Node(data);\n p.set_child(dir, node);\n ret = true;\n this.size++;\n return true;\n }\n\n // stop if found\n if(this._comparator(node.data, data) === 0) {\n return false;\n }\n\n dir = this._comparator(node.data, data) < 0;\n\n // update helpers\n p = node;\n node = node.get_child(dir);\n }\n};\n\n// returns true if removed, false if not found\nBinTree.prototype.remove = function(data) {\n if(this._root === null) {\n return false;\n }\n\n var head = new Node(undefined); // fake tree root\n var node = head;\n node.right = this._root;\n var p = null; // parent\n var found = null; // found item\n var dir = 1;\n\n while(node.get_child(dir) !== null) {\n p = node;\n node = node.get_child(dir);\n var cmp = this._comparator(data, node.data);\n dir = cmp > 0;\n\n if(cmp === 0) {\n found = node;\n }\n }\n\n if(found !== null) {\n found.data = node.data;\n p.set_child(p.right === node, node.get_child(node.left === null));\n\n this._root = head.right;\n this.size--;\n return true;\n }\n else {\n return false;\n }\n};\n\nmodule.exports = BinTree;\n\n", "module.exports = {\n RBTree: require('./lib/rbtree'),\n BinTree: require('./lib/bintree')\n};\n", "//\n// TDigest:\n//\n// approximate distribution percentiles from a stream of reals\n//\nvar RBTree = require('bintrees').RBTree;\n\nfunction TDigest(delta, K, CX) {\n // allocate a TDigest structure.\n //\n // delta is the compression factor, the max fraction of mass that\n // can be owned by one centroid (bigger, up to 1.0, means more\n // compression). delta=false switches off TDigest behavior and treats\n // the distribution as discrete, with no merging and exact values\n // reported.\n //\n // K is a size threshold that triggers recompression as the TDigest\n // grows during input. (Set it to 0 to disable automatic recompression)\n //\n // CX specifies how often to update cached cumulative totals used\n // for quantile estimation during ingest (see cumulate()). Set to\n // 0 to use exact quantiles for each new point.\n //\n this.discrete = (delta === false);\n this.delta = delta || 0.01;\n this.K = (K === undefined) ? 25 : K;\n this.CX = (CX === undefined) ? 1.1 : CX;\n this.centroids = new RBTree(compare_centroid_means);\n this.nreset = 0;\n this.reset();\n}\n\nTDigest.prototype.reset = function() {\n // prepare to digest new points.\n //\n this.centroids.clear();\n this.n = 0;\n this.nreset += 1;\n this.last_cumulate = 0;\n};\n\nTDigest.prototype.size = function() {\n return this.centroids.size;\n};\n\nTDigest.prototype.toArray = function(everything) {\n // return {mean,n} of centroids as an array ordered by mean.\n //\n var result = [];\n if (everything) {\n this._cumulate(true); // be sure cumns are exact\n this.centroids.each(function(c) { result.push(c); });\n } else {\n this.centroids.each(function(c) { result.push({mean:c.mean, n:c.n}); });\n }\n return result;\n};\n\nTDigest.prototype.summary = function() {\n var approx = (this.discrete) ? \"exact \" : \"approximating \";\n var s = [approx + this.n + \" samples using \" + this.size() + \" centroids\",\n \"min = \"+this.percentile(0),\n \"Q1 = \"+this.percentile(0.25),\n \"Q2 = \"+this.percentile(0.5),\n \"Q3 = \"+this.percentile(0.75),\n \"max = \"+this.percentile(1.0)];\n return s.join('\\n');\n};\n\nfunction compare_centroid_means(a, b) {\n // order two centroids by mean.\n //\n return (a.mean > b.mean) ? 1 : (a.mean < b.mean) ? -1 : 0;\n}\n\nfunction compare_centroid_mean_cumns(a, b) {\n // order two centroids by mean_cumn.\n //\n return (a.mean_cumn - b.mean_cumn);\n}\n\nTDigest.prototype.push = function(x, n) {\n // incorporate value or array of values x, having count n into the\n // TDigest. n defaults to 1.\n //\n n = n || 1;\n x = Array.isArray(x) ? x : [x];\n for (var i = 0 ; i < x.length ; i++) {\n this._digest(x[i], n);\n }\n};\n\nTDigest.prototype.push_centroid = function(c) {\n // incorporate centroid or array of centroids c\n //\n c = Array.isArray(c) ? c : [c];\n for (var i = 0 ; i < c.length ; i++) {\n this._digest(c[i].mean, c[i].n);\n }\n};\n\nTDigest.prototype._cumulate = function(exact) {\n // update cumulative counts for each centroid\n //\n // exact: falsey means only cumulate after sufficient\n // growth. During ingest, these counts are used as quantile\n // estimates, and they work well even when somewhat out of\n // date. (this is a departure from the publication, you may set CX\n // to 0 to disable).\n //\n if (this.n === this.last_cumulate ||\n !exact && this.CX && this.CX > (this.n / this.last_cumulate)) {\n return;\n }\n var cumn = 0;\n this.centroids.each(function(c) {\n c.mean_cumn = cumn + c.n / 2; // half of n at the mean\n cumn = c.cumn = cumn + c.n;\n });\n this.n = this.last_cumulate = cumn;\n};\n\nTDigest.prototype.find_nearest = function(x) {\n // find the centroid closest to x. The assumption of\n // unique means and a unique nearest centroid departs from the\n // paper, see _digest() below\n //\n if (this.size() === 0) {\n return null;\n }\n var iter = this.centroids.lowerBound({mean:x}); // x <= iter || iter==null\n var c = (iter.data() === null) ? iter.prev() : iter.data();\n if (c.mean === x || this.discrete) {\n return c; // c is either x or a neighbor (discrete: no distance func)\n }\n var prev = iter.prev();\n if (prev && Math.abs(prev.mean - x) < Math.abs(c.mean - x)) {\n return prev;\n } else {\n return c;\n }\n};\n\nTDigest.prototype._new_centroid = function(x, n, cumn) {\n // create and insert a new centroid into the digest (don't update\n // cumulatives).\n //\n var c = {mean:x, n:n, cumn:cumn};\n this.centroids.insert(c);\n this.n += n;\n return c;\n};\n\nTDigest.prototype._addweight = function(nearest, x, n) {\n // add weight at location x to nearest centroid. adding x to\n // nearest will not shift its relative position in the tree and\n // require reinsertion.\n //\n if (x !== nearest.mean) {\n nearest.mean += n * (x - nearest.mean) / (nearest.n + n);\n }\n nearest.cumn += n;\n nearest.mean_cumn += n / 2;\n nearest.n += n;\n this.n += n;\n};\n\nTDigest.prototype._digest = function(x, n) {\n // incorporate value x, having count n into the TDigest.\n //\n var min = this.centroids.min();\n var max = this.centroids.max();\n var nearest = this.find_nearest(x);\n if (nearest && nearest.mean === x) {\n // accumulate exact matches into the centroid without\n // limit. this is a departure from the paper, made so\n // centroids remain unique and code can be simple.\n this._addweight(nearest, x, n);\n } else if (nearest === min) {\n this._new_centroid(x, n, 0); // new point around min boundary\n } else if (nearest === max ) {\n this._new_centroid(x, n, this.n); // new point around max boundary\n } else if (this.discrete) {\n this._new_centroid(x, n, nearest.cumn); // never merge\n } else {\n // conider a merge based on nearest centroid's capacity. if\n // there's not room for all of n, don't bother merging any of\n // it into nearest, as we'll have to make a new centroid\n // anyway for the remainder (departure from the paper).\n var p = nearest.mean_cumn / this.n;\n var max_n = Math.floor(4 * this.n * this.delta * p * (1 - p));\n if (max_n - nearest.n >= n) {\n this._addweight(nearest, x, n);\n } else {\n this._new_centroid(x, n, nearest.cumn);\n }\n }\n this._cumulate(false);\n if (!this.discrete && this.K && this.size() > this.K / this.delta) {\n // re-process the centroids and hope for some compression.\n this.compress();\n }\n};\n\nTDigest.prototype.bound_mean = function(x) {\n // find centroids lower and upper such that lower.mean < x <\n // upper.mean or lower.mean === x === upper.mean. Don't call\n // this for x out of bounds.\n //\n var iter = this.centroids.upperBound({mean:x}); // x < iter\n var lower = iter.prev(); // lower <= x\n var upper = (lower.mean === x) ? lower : iter.next();\n return [lower, upper];\n};\n\nTDigest.prototype.p_rank = function(x_or_xlist) {\n // return approximate percentile-ranks (0..1) for data value x.\n // or list of x. calculated according to\n // https://en.wikipedia.org/wiki/Percentile_rank\n //\n // (Note that in continuous mode, boundary sample values will\n // report half their centroid weight inward from 0/1 as the\n // percentile-rank. X values outside the observed range return\n // 0/1)\n //\n // this triggers cumulate() if cumn's are out of date.\n //\n var xs = Array.isArray(x_or_xlist) ? x_or_xlist : [x_or_xlist];\n var ps = xs.map(this._p_rank, this);\n return Array.isArray(x_or_xlist) ? ps : ps[0];\n};\n\nTDigest.prototype._p_rank = function(x) {\n if (this.size() === 0) {\n return undefined;\n } else if (x < this.centroids.min().mean) {\n return 0.0;\n } else if (x > this.centroids.max().mean) {\n return 1.0;\n }\n // find centroids that bracket x and interpolate x's cumn from\n // their cumn's.\n this._cumulate(true); // be sure cumns are exact\n var bound = this.bound_mean(x);\n var lower = bound[0], upper = bound[1];\n if (this.discrete) {\n return lower.cumn / this.n;\n } else {\n var cumn = lower.mean_cumn;\n if (lower !== upper) {\n cumn += (x - lower.mean) * (upper.mean_cumn - lower.mean_cumn) / (upper.mean - lower.mean);\n }\n return cumn / this.n;\n }\n};\n\nTDigest.prototype.bound_mean_cumn = function(cumn) {\n // find centroids lower and upper such that lower.mean_cumn < x <\n // upper.mean_cumn or lower.mean_cumn === x === upper.mean_cumn. Don't call\n // this for cumn out of bounds.\n //\n // XXX because mean and mean_cumn give rise to the same sort order\n // (up to identical means), use the mean rbtree for our search.\n this.centroids._comparator = compare_centroid_mean_cumns;\n var iter = this.centroids.upperBound({mean_cumn:cumn}); // cumn < iter\n this.centroids._comparator = compare_centroid_means;\n var lower = iter.prev(); // lower <= cumn\n var upper = (lower && lower.mean_cumn === cumn) ? lower : iter.next();\n return [lower, upper];\n};\n\nTDigest.prototype.percentile = function(p_or_plist) {\n // for percentage p (0..1), or for each p in a list of ps, return\n // the smallest data value q at which at least p percent of the\n // observations <= q.\n //\n // for discrete distributions, this selects q using the Nearest\n // Rank Method\n // (https://en.wikipedia.org/wiki/Percentile#The_Nearest_Rank_method)\n // (in scipy, same as percentile(...., interpolation='higher')\n //\n // for continuous distributions, interpolates data values between\n // count-weighted bracketing means.\n //\n // this triggers cumulate() if cumn's are out of date.\n //\n var ps = Array.isArray(p_or_plist) ? p_or_plist : [p_or_plist];\n var qs = ps.map(this._percentile, this);\n return Array.isArray(p_or_plist) ? qs : qs[0];\n};\n\nTDigest.prototype._percentile = function(p) {\n if (this.size() === 0) {\n return undefined;\n }\n this._cumulate(true); // be sure cumns are exact\n var h = this.n * p;\n var bound = this.bound_mean_cumn(h);\n var lower = bound[0], upper = bound[1];\n\n if (upper === lower || lower === null || upper === null) {\n return (lower || upper).mean;\n } else if (!this.discrete) {\n return lower.mean + (h - lower.mean_cumn) * (upper.mean - lower.mean) / (upper.mean_cumn - lower.mean_cumn);\n } else if (h <= lower.cumn) {\n return lower.mean;\n } else {\n return upper.mean;\n }\n};\n\nfunction pop_random(choices) {\n // remove and return an item randomly chosen from the array of choices\n // (mutates choices)\n //\n var idx = Math.floor(Math.random() * choices.length);\n return choices.splice(idx, 1)[0];\n}\n\nTDigest.prototype.compress = function() {\n // TDigests experience worst case compression (none) when input\n // increases monotonically. Improve on any bad luck by\n // reconsuming digest centroids as if they were weighted points\n // while shuffling their order (and hope for the best).\n //\n if (this.compressing) {\n return;\n }\n var points = this.toArray();\n this.reset();\n this.compressing = true;\n while (points.length > 0) {\n this.push_centroid(pop_random(points));\n }\n this._cumulate(true);\n this.compressing = false;\n};\n\nfunction Digest(config) {\n // allocate a distribution digest structure. This is an extension\n // of a TDigest structure that starts in exact histogram (discrete)\n // mode, and automatically switches to TDigest mode for large\n // samples that appear to be from a continuous distribution.\n //\n this.config = config || {};\n this.mode = this.config.mode || 'auto'; // disc, cont, auto\n TDigest.call(this, this.mode === 'cont' ? config.delta : false);\n this.digest_ratio = this.config.ratio || 0.9;\n this.digest_thresh = this.config.thresh || 1000;\n this.n_unique = 0;\n}\nDigest.prototype = Object.create(TDigest.prototype);\nDigest.prototype.constructor = Digest;\n\nDigest.prototype.push = function(x_or_xlist) {\n TDigest.prototype.push.call(this, x_or_xlist);\n this.check_continuous();\n};\n\nDigest.prototype._new_centroid = function(x, n, cumn) {\n this.n_unique += 1;\n TDigest.prototype._new_centroid.call(this, x, n, cumn);\n};\n\nDigest.prototype._addweight = function(nearest, x, n) {\n if (nearest.n === 1) {\n this.n_unique -= 1;\n }\n TDigest.prototype._addweight.call(this, nearest, x, n);\n};\n\nDigest.prototype.check_continuous = function() {\n // while in 'auto' mode, if there are many unique elements, assume\n // they are from a continuous distribution and switch to 'cont'\n // mode (tdigest behavior). Return true on transition from\n // disctete to continuous.\n if (this.mode !== 'auto' || this.size() < this.digest_thresh) {\n return false;\n }\n if (this.n_unique / this.size() > this.digest_ratio) {\n this.mode = 'cont';\n this.discrete = false;\n this.delta = this.config.delta || 0.01;\n this.compress();\n return true;\n }\n return false;\n};\n\nmodule.exports = {\n 'TDigest': TDigest,\n 'Digest': Digest\n};\n", "import DeviceDetector from \"device-detector-js\";\nimport { Notifier } from \"@airbrake/browser\";\n\nwindow.deviceDetector = new DeviceDetector();\nwindow.device = window.deviceDetector.parse(navigator.userAgent);\n\ntry {\n if (!window.device.bot && window.env.JEKYLL_ENV === \"production\") {\n window.airbrake = new Notifier({\n projectId: window.env.AIRBRAKE_PROJECT_ID,\n projectKey: window.env.AIRBRAKE_PROJECT_KEY,\n host: \"https://panel.sutty.nl\",\n });\n\n console.originalError = console.error;\n console.error = (...e) => {\n window.airbrake.notify(e.join(\" \"));\n return console.originalError(...e);\n };\n }\n} catch (e) {\n console.error(e);\n}\n\nimport * as Turbo from \"@hotwired/turbo\";\nTurbo.start();\n\nimport { Application } from \"@hotwired/stimulus\";\nwindow.Stimulus = Application.start();\nwindow.abortController = new AbortController();\n\nimport BodyScrollController from \"./controllers/body_scroll_controller\";\nimport DeviceDetectorController from \"./controllers/device_detector_controller\";\nimport ButtonCopyController from \"./controllers/button_copy_controller\";\nimport FootnotesController from \"./controllers/footnotes_controller\";\nimport SupportUsController from \"./controllers/support_us_controller\";\nimport ModalController from \"./controllers/modal_controller\";\nimport AuthorizeInteractionController from \"./controllers/authorize_interaction_controller\";\nimport TabsController from \"./controllers/tabs_controller\";\n\nStimulus.debug = (window.env.JEKYLL_ENV !== \"production\");\nStimulus.register(\"body-scroll\", BodyScrollController);\nStimulus.register(\"device-detector\", DeviceDetectorController);\nStimulus.register(\"button-copy\", ButtonCopyController);\nStimulus.register(\"footnotes\", FootnotesController);\nStimulus.register(\"support-us\", SupportUsController);\nStimulus.register(\"modal\", ModalController);\nStimulus.register(\"authorize-interaction\", AuthorizeInteractionController);\nStimulus.register(\"tabs\", TabsController);\n\ndocument.addEventListener(\"turbo:visit\", (event) => {\n window.abortController.abort();\n});\n", "/**\n * @this {Promise}\n */\nfunction finallyConstructor(callback) {\n var constructor = this.constructor;\n return this.then(\n function(value) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n return value;\n });\n },\n function(reason) {\n // @ts-ignore\n return constructor.resolve(callback()).then(function() {\n // @ts-ignore\n return constructor.reject(reason);\n });\n }\n );\n}\n\nexport default finallyConstructor;\n", "function allSettled(arr) {\n var P = this;\n return new P(function(resolve, reject) {\n if (!(arr && typeof arr.length !== 'undefined')) {\n return reject(\n new TypeError(\n typeof arr +\n ' ' +\n arr +\n ' is not iterable(cannot read property Symbol(Symbol.iterator))'\n )\n );\n }\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n function(e) {\n args[i] = { status: 'rejected', reason: e };\n if (--remaining === 0) {\n resolve(args);\n }\n }\n );\n return;\n }\n }\n args[i] = { status: 'fulfilled', value: val };\n if (--remaining === 0) {\n resolve(args);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n}\n\nexport default allSettled;\n", "/**\n * @constructor\n */\nfunction AggregateError(errors, message) {\n (this.name = 'AggregateError'), (this.errors = errors);\n this.message = message || '';\n}\nAggregateError.prototype = Error.prototype;\n\nfunction any(arr) {\n var P = this;\n return new P(function(resolve, reject) {\n if (!(arr && typeof arr.length !== 'undefined')) {\n return reject(new TypeError('Promise.any accepts an array'));\n }\n\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return reject();\n\n var rejectionReasons = [];\n for (var i = 0; i < args.length; i++) {\n try {\n P.resolve(args[i])\n .then(resolve)\n .catch(function(error) {\n rejectionReasons.push(error);\n if (rejectionReasons.length === args.length) {\n reject(\n new AggregateError(\n rejectionReasons,\n 'All promises were rejected'\n )\n );\n }\n });\n } catch (ex) {\n reject(ex);\n }\n }\n });\n}\n\nexport default any;\n", "import promiseFinally from './finally';\nimport allSettled from './allSettled';\nimport any from './any';\n\n// Store setTimeout reference so promise-polyfill will be unaffected by\n// other code modifying setTimeout (like sinon.useFakeTimers())\nvar setTimeoutFunc = setTimeout;\n\nfunction isArray(x) {\n return Boolean(x && typeof x.length !== 'undefined');\n}\n\nfunction noop() {}\n\n// Polyfill for Function.prototype.bind\nfunction bind(fn, thisArg) {\n return function() {\n fn.apply(thisArg, arguments);\n };\n}\n\n/**\n * @constructor\n * @param {Function} fn\n */\nfunction Promise(fn) {\n if (!(this instanceof Promise))\n throw new TypeError('Promises must be constructed via new');\n if (typeof fn !== 'function') throw new TypeError('not a function');\n /** @type {!number} */\n this._state = 0;\n /** @type {!boolean} */\n this._handled = false;\n /** @type {Promise|undefined} */\n this._value = undefined;\n /** @type {!Array<!Function>} */\n this._deferreds = [];\n\n doResolve(fn, this);\n}\n\nfunction handle(self, deferred) {\n while (self._state === 3) {\n self = self._value;\n }\n if (self._state === 0) {\n self._deferreds.push(deferred);\n return;\n }\n self._handled = true;\n Promise._immediateFn(function() {\n var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected;\n if (cb === null) {\n (self._state === 1 ? resolve : reject)(deferred.promise, self._value);\n return;\n }\n var ret;\n try {\n ret = cb(self._value);\n } catch (e) {\n reject(deferred.promise, e);\n return;\n }\n resolve(deferred.promise, ret);\n });\n}\n\nfunction resolve(self, newValue) {\n try {\n // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n if (newValue === self)\n throw new TypeError('A promise cannot be resolved with itself.');\n if (\n newValue &&\n (typeof newValue === 'object' || typeof newValue === 'function')\n ) {\n var then = newValue.then;\n if (newValue instanceof Promise) {\n self._state = 3;\n self._value = newValue;\n finale(self);\n return;\n } else if (typeof then === 'function') {\n doResolve(bind(then, newValue), self);\n return;\n }\n }\n self._state = 1;\n self._value = newValue;\n finale(self);\n } catch (e) {\n reject(self, e);\n }\n}\n\nfunction reject(self, newValue) {\n self._state = 2;\n self._value = newValue;\n finale(self);\n}\n\nfunction finale(self) {\n if (self._state === 2 && self._deferreds.length === 0) {\n Promise._immediateFn(function() {\n if (!self._handled) {\n Promise._unhandledRejectionFn(self._value);\n }\n });\n }\n\n for (var i = 0, len = self._deferreds.length; i < len; i++) {\n handle(self, self._deferreds[i]);\n }\n self._deferreds = null;\n}\n\n/**\n * @constructor\n */\nfunction Handler(onFulfilled, onRejected, promise) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.promise = promise;\n}\n\n/**\n * Take a potentially misbehaving resolver function and make sure\n * onFulfilled and onRejected are only called once.\n *\n * Makes no guarantees about asynchrony.\n */\nfunction doResolve(fn, self) {\n var done = false;\n try {\n fn(\n function(value) {\n if (done) return;\n done = true;\n resolve(self, value);\n },\n function(reason) {\n if (done) return;\n done = true;\n reject(self, reason);\n }\n );\n } catch (ex) {\n if (done) return;\n done = true;\n reject(self, ex);\n }\n}\n\nPromise.prototype['catch'] = function(onRejected) {\n return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function(onFulfilled, onRejected) {\n // @ts-ignore\n var prom = new this.constructor(noop);\n\n handle(this, new Handler(onFulfilled, onRejected, prom));\n return prom;\n};\n\nPromise.prototype['finally'] = promiseFinally;\n\nPromise.all = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.all accepts an array'));\n }\n\n var args = Array.prototype.slice.call(arr);\n if (args.length === 0) return resolve([]);\n var remaining = args.length;\n\n function res(i, val) {\n try {\n if (val && (typeof val === 'object' || typeof val === 'function')) {\n var then = val.then;\n if (typeof then === 'function') {\n then.call(\n val,\n function(val) {\n res(i, val);\n },\n reject\n );\n return;\n }\n }\n args[i] = val;\n if (--remaining === 0) {\n resolve(args);\n }\n } catch (ex) {\n reject(ex);\n }\n }\n\n for (var i = 0; i < args.length; i++) {\n res(i, args[i]);\n }\n });\n};\n\nPromise.any = any;\n\nPromise.allSettled = allSettled;\n\nPromise.resolve = function(value) {\n if (value && typeof value === 'object' && value.constructor === Promise) {\n return value;\n }\n\n return new Promise(function(resolve) {\n resolve(value);\n });\n};\n\nPromise.reject = function(value) {\n return new Promise(function(resolve, reject) {\n reject(value);\n });\n};\n\nPromise.race = function(arr) {\n return new Promise(function(resolve, reject) {\n if (!isArray(arr)) {\n return reject(new TypeError('Promise.race accepts an array'));\n }\n\n for (var i = 0, len = arr.length; i < len; i++) {\n Promise.resolve(arr[i]).then(resolve, reject);\n }\n });\n};\n\n// Use polyfill for setImmediate for performance gains\nPromise._immediateFn =\n // @ts-ignore\n (typeof setImmediate === 'function' &&\n function(fn) {\n // @ts-ignore\n setImmediate(fn);\n }) ||\n function(fn) {\n setTimeoutFunc(fn, 0);\n };\n\nPromise._unhandledRejectionFn = function _unhandledRejectionFn(err) {\n if (typeof console !== 'undefined' && console) {\n console.warn('Possible Unhandled Promise Rejection:', err); // eslint-disable-line no-console\n }\n};\n\nexport default Promise;\n", null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "/*\nTurbo 7.3.0\nCopyright \u00A9 2023 37signals LLC\n */\n(function () {\n if (window.Reflect === undefined ||\n window.customElements === undefined ||\n window.customElements.polyfillWrapFlushCallback) {\n return;\n }\n const BuiltInHTMLElement = HTMLElement;\n const wrapperForTheName = {\n HTMLElement: function HTMLElement() {\n return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n },\n };\n window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n HTMLElement.prototype = BuiltInHTMLElement.prototype;\n HTMLElement.prototype.constructor = HTMLElement;\n Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\n * \n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n * \n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n * \n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n * THE SOFTWARE.\n */\n\n(function(prototype) {\n if (typeof prototype.requestSubmit == \"function\") return\n\n prototype.requestSubmit = function(submitter) {\n if (submitter) {\n validateSubmitter(submitter, this);\n submitter.click();\n } else {\n submitter = document.createElement(\"input\");\n submitter.type = \"submit\";\n submitter.hidden = true;\n this.appendChild(submitter);\n submitter.click();\n this.removeChild(submitter);\n }\n };\n\n function validateSubmitter(submitter, form) {\n submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n }\n\n function raise(errorConstructor, message, name) {\n throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n const candidate = element ? element.closest(\"input, button\") : null;\n return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n const submitter = findSubmitterFromClickTarget(event.target);\n if (submitter && submitter.form) {\n submittersByForm.set(submitter.form, submitter);\n }\n}\n(function () {\n if (\"submitter\" in Event.prototype)\n return;\n let prototype = window.Event.prototype;\n if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n prototype = window.SubmitEvent.prototype;\n }\n else if (\"SubmitEvent\" in window) {\n return;\n }\n addEventListener(\"click\", clickCaptured, true);\n Object.defineProperty(prototype, \"submitter\", {\n get() {\n if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n return submittersByForm.get(this.target);\n }\n },\n });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n FrameLoadingStyle[\"eager\"] = \"eager\";\n FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n static get observedAttributes() {\n return [\"disabled\", \"complete\", \"loading\", \"src\"];\n }\n constructor() {\n super();\n this.loaded = Promise.resolve();\n this.delegate = new FrameElement.delegateConstructor(this);\n }\n connectedCallback() {\n this.delegate.connect();\n }\n disconnectedCallback() {\n this.delegate.disconnect();\n }\n reload() {\n return this.delegate.sourceURLReloaded();\n }\n attributeChangedCallback(name) {\n if (name == \"loading\") {\n this.delegate.loadingStyleChanged();\n }\n else if (name == \"complete\") {\n this.delegate.completeChanged();\n }\n else if (name == \"src\") {\n this.delegate.sourceURLChanged();\n }\n else {\n this.delegate.disabledChanged();\n }\n }\n get src() {\n return this.getAttribute(\"src\");\n }\n set src(value) {\n if (value) {\n this.setAttribute(\"src\", value);\n }\n else {\n this.removeAttribute(\"src\");\n }\n }\n get loading() {\n return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n }\n set loading(value) {\n if (value) {\n this.setAttribute(\"loading\", value);\n }\n else {\n this.removeAttribute(\"loading\");\n }\n }\n get disabled() {\n return this.hasAttribute(\"disabled\");\n }\n set disabled(value) {\n if (value) {\n this.setAttribute(\"disabled\", \"\");\n }\n else {\n this.removeAttribute(\"disabled\");\n }\n }\n get autoscroll() {\n return this.hasAttribute(\"autoscroll\");\n }\n set autoscroll(value) {\n if (value) {\n this.setAttribute(\"autoscroll\", \"\");\n }\n else {\n this.removeAttribute(\"autoscroll\");\n }\n }\n get complete() {\n return !this.delegate.isLoading;\n }\n get isActive() {\n return this.ownerDocument === document && !this.isPreview;\n }\n get isPreview() {\n var _a, _b;\n return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n }\n}\nfunction frameLoadingStyleFromString(style) {\n switch (style.toLowerCase()) {\n case \"lazy\":\n return FrameLoadingStyle.lazy;\n default:\n return FrameLoadingStyle.eager;\n }\n}\n\nfunction expandURL(locatable) {\n return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n let anchorMatch;\n if (url.hash) {\n return url.hash.slice(1);\n }\n else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n return anchorMatch[1];\n }\n}\nfunction getAction(form, submitter) {\n const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n return expandURL(action);\n}\nfunction getExtension(url) {\n return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n const prefix = getPrefix(url);\n return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n const anchor = getAnchor(url);\n return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n constructor(response) {\n this.response = response;\n }\n get succeeded() {\n return this.response.ok;\n }\n get failed() {\n return !this.succeeded;\n }\n get clientError() {\n return this.statusCode >= 400 && this.statusCode <= 499;\n }\n get serverError() {\n return this.statusCode >= 500 && this.statusCode <= 599;\n }\n get redirected() {\n return this.response.redirected;\n }\n get location() {\n return expandURL(this.response.url);\n }\n get isHTML() {\n return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n }\n get statusCode() {\n return this.response.status;\n }\n get contentType() {\n return this.header(\"Content-Type\");\n }\n get responseText() {\n return this.response.clone().text();\n }\n get responseHTML() {\n if (this.isHTML) {\n return this.response.clone().text();\n }\n else {\n return Promise.resolve(undefined);\n }\n }\n header(name) {\n return this.response.headers.get(name);\n }\n}\n\nfunction activateScriptElement(element) {\n if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n return element;\n }\n else {\n const createdScriptElement = document.createElement(\"script\");\n const cspNonce = getMetaContent(\"csp-nonce\");\n if (cspNonce) {\n createdScriptElement.nonce = cspNonce;\n }\n createdScriptElement.textContent = element.textContent;\n createdScriptElement.async = false;\n copyElementAttributes(createdScriptElement, element);\n return createdScriptElement;\n }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n for (const { name, value } of sourceElement.attributes) {\n destinationElement.setAttribute(name, value);\n }\n}\nfunction createDocumentFragment(html) {\n const template = document.createElement(\"template\");\n template.innerHTML = html;\n return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n const event = new CustomEvent(eventName, {\n cancelable,\n bubbles: true,\n composed: true,\n detail,\n });\n if (target && target.isConnected) {\n target.dispatchEvent(event);\n }\n else {\n document.documentElement.dispatchEvent(event);\n }\n return event;\n}\nfunction nextAnimationFrame() {\n return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n const match = lines[0].match(/^\\s+/);\n const indent = match ? match[0].length : 0;\n return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n return strings.reduce((result, string, i) => {\n const value = values[i] == undefined ? \"\" : values[i];\n return result + string + value;\n }, \"\");\n}\nfunction uuid() {\n return Array.from({ length: 36 })\n .map((_, i) => {\n if (i == 8 || i == 13 || i == 18 || i == 23) {\n return \"-\";\n }\n else if (i == 14) {\n return \"4\";\n }\n else if (i == 19) {\n return (Math.floor(Math.random() * 4) + 8).toString(16);\n }\n else {\n return Math.floor(Math.random() * 15).toString(16);\n }\n })\n .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n if (typeof value == \"string\")\n return value;\n }\n return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.setAttribute(\"busy\", \"\");\n }\n element.setAttribute(\"aria-busy\", \"true\");\n }\n}\nfunction clearBusyState(...elements) {\n for (const element of elements) {\n if (element.localName == \"turbo-frame\") {\n element.removeAttribute(\"busy\");\n }\n element.removeAttribute(\"aria-busy\");\n }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n return new Promise((resolve) => {\n const onComplete = () => {\n element.removeEventListener(\"error\", onComplete);\n element.removeEventListener(\"load\", onComplete);\n resolve();\n };\n element.addEventListener(\"load\", onComplete, { once: true });\n element.addEventListener(\"error\", onComplete, { once: true });\n setTimeout(resolve, timeoutInMilliseconds);\n });\n}\nfunction getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n}\nfunction isAction(action) {\n return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n const action = getAttribute(\"data-turbo-action\", ...elements);\n return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n const element = getMetaElement(name);\n return element && element.content;\n}\nfunction setMetaContent(name, content) {\n let element = getMetaElement(name);\n if (!element) {\n element = document.createElement(\"meta\");\n element.setAttribute(\"name\", name);\n document.head.appendChild(element);\n }\n element.setAttribute(\"content\", content);\n return element;\n}\nfunction findClosestRecursively(element, selector) {\n var _a;\n if (element instanceof Element) {\n return (element.closest(selector) ||\n findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\n }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n switch (method.toLowerCase()) {\n case \"get\":\n return FetchMethod.get;\n case \"post\":\n return FetchMethod.post;\n case \"put\":\n return FetchMethod.put;\n case \"patch\":\n return FetchMethod.patch;\n case \"delete\":\n return FetchMethod.delete;\n }\n}\nclass FetchRequest {\n constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n this.abortController = new AbortController();\n this.resolveRequestPromise = (_value) => { };\n this.delegate = delegate;\n this.method = method;\n this.headers = this.defaultHeaders;\n this.body = body;\n this.url = location;\n this.target = target;\n }\n get location() {\n return this.url;\n }\n get params() {\n return this.url.searchParams;\n }\n get entries() {\n return this.body ? Array.from(this.body.entries()) : [];\n }\n cancel() {\n this.abortController.abort();\n }\n async perform() {\n const { fetchOptions } = this;\n this.delegate.prepareRequest(this);\n await this.allowRequestToBeIntercepted(fetchOptions);\n try {\n this.delegate.requestStarted(this);\n const response = await fetch(this.url.href, fetchOptions);\n return await this.receive(response);\n }\n catch (error) {\n if (error.name !== \"AbortError\") {\n if (this.willDelegateErrorHandling(error)) {\n this.delegate.requestErrored(this, error);\n }\n throw error;\n }\n }\n finally {\n this.delegate.requestFinished(this);\n }\n }\n async receive(response) {\n const fetchResponse = new FetchResponse(response);\n const event = dispatch(\"turbo:before-fetch-response\", {\n cancelable: true,\n detail: { fetchResponse },\n target: this.target,\n });\n if (event.defaultPrevented) {\n this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n }\n else if (fetchResponse.succeeded) {\n this.delegate.requestSucceededWithResponse(this, fetchResponse);\n }\n else {\n this.delegate.requestFailedWithResponse(this, fetchResponse);\n }\n return fetchResponse;\n }\n get fetchOptions() {\n var _a;\n return {\n method: FetchMethod[this.method].toUpperCase(),\n credentials: \"same-origin\",\n headers: this.headers,\n redirect: \"follow\",\n body: this.isSafe ? null : this.body,\n signal: this.abortSignal,\n referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n };\n }\n get defaultHeaders() {\n return {\n Accept: \"text/html, application/xhtml+xml\",\n };\n }\n get isSafe() {\n return this.method === FetchMethod.get;\n }\n get abortSignal() {\n return this.abortController.signal;\n }\n acceptResponseType(mimeType) {\n this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n }\n async allowRequestToBeIntercepted(fetchOptions) {\n const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n const event = dispatch(\"turbo:before-fetch-request\", {\n cancelable: true,\n detail: {\n fetchOptions,\n url: this.url,\n resume: this.resolveRequestPromise,\n },\n target: this.target,\n });\n if (event.defaultPrevented)\n await requestInterception;\n }\n willDelegateErrorHandling(error) {\n const event = dispatch(\"turbo:fetch-request-error\", {\n target: this.target,\n cancelable: true,\n detail: { request: this, error: error },\n });\n return !event.defaultPrevented;\n }\n}\n\nclass AppearanceObserver {\n constructor(delegate, element) {\n this.started = false;\n this.intersect = (entries) => {\n const lastEntry = entries.slice(-1)[0];\n if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n this.delegate.elementAppearedInViewport(this.element);\n }\n };\n this.delegate = delegate;\n this.element = element;\n this.intersectionObserver = new IntersectionObserver(this.intersect);\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.intersectionObserver.observe(this.element);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.intersectionObserver.unobserve(this.element);\n }\n }\n}\n\nclass StreamMessage {\n static wrap(message) {\n if (typeof message == \"string\") {\n return new this(createDocumentFragment(message));\n }\n else {\n return message;\n }\n }\n constructor(fragment) {\n this.fragment = importStreamElements(fragment);\n }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n const streamElement = document.importNode(element, true);\n for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n }\n element.replaceWith(streamElement);\n }\n return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n FormEnctype[\"multipart\"] = \"multipart/form-data\";\n FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n switch (encoding.toLowerCase()) {\n case FormEnctype.multipart:\n return FormEnctype.multipart;\n case FormEnctype.plain:\n return FormEnctype.plain;\n default:\n return FormEnctype.urlEncoded;\n }\n}\nclass FormSubmission {\n static confirmMethod(message, _element, _submitter) {\n return Promise.resolve(confirm(message));\n }\n constructor(delegate, formElement, submitter, mustRedirect = false) {\n this.state = FormSubmissionState.initialized;\n this.delegate = delegate;\n this.formElement = formElement;\n this.submitter = submitter;\n this.formData = buildFormData(formElement, submitter);\n this.location = expandURL(this.action);\n if (this.method == FetchMethod.get) {\n mergeFormDataEntries(this.location, [...this.body.entries()]);\n }\n this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n this.mustRedirect = mustRedirect;\n }\n get method() {\n var _a;\n const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n }\n get action() {\n var _a;\n const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n return this.submitter.getAttribute(\"formaction\") || \"\";\n }\n else {\n return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n }\n }\n get body() {\n if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n return new URLSearchParams(this.stringFormData);\n }\n else {\n return this.formData;\n }\n }\n get enctype() {\n var _a;\n return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n }\n get isSafe() {\n return this.fetchRequest.isSafe;\n }\n get stringFormData() {\n return [...this.formData].reduce((entries, [name, value]) => {\n return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n }, []);\n }\n async start() {\n const { initialized, requesting } = FormSubmissionState;\n const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n if (typeof confirmationMessage === \"string\") {\n const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n if (!answer) {\n return;\n }\n }\n if (this.state == initialized) {\n this.state = requesting;\n return this.fetchRequest.perform();\n }\n }\n stop() {\n const { stopping, stopped } = FormSubmissionState;\n if (this.state != stopping && this.state != stopped) {\n this.state = stopping;\n this.fetchRequest.cancel();\n return true;\n }\n }\n prepareRequest(request) {\n if (!request.isSafe) {\n const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n if (token) {\n request.headers[\"X-CSRF-Token\"] = token;\n }\n }\n if (this.requestAcceptsTurboStreamResponse(request)) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n var _a;\n this.state = FormSubmissionState.waiting;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n this.setSubmitsWith();\n dispatch(\"turbo:submit-start\", {\n target: this.formElement,\n detail: { formSubmission: this },\n });\n this.delegate.formSubmissionStarted(this);\n }\n requestPreventedHandlingResponse(request, response) {\n this.result = { success: response.succeeded, fetchResponse: response };\n }\n requestSucceededWithResponse(request, response) {\n if (response.clientError || response.serverError) {\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n const error = new Error(\"Form responses must redirect to another location\");\n this.delegate.formSubmissionErrored(this, error);\n }\n else {\n this.state = FormSubmissionState.receiving;\n this.result = { success: true, fetchResponse: response };\n this.delegate.formSubmissionSucceededWithResponse(this, response);\n }\n }\n requestFailedWithResponse(request, response) {\n this.result = { success: false, fetchResponse: response };\n this.delegate.formSubmissionFailedWithResponse(this, response);\n }\n requestErrored(request, error) {\n this.result = { success: false, error };\n this.delegate.formSubmissionErrored(this, error);\n }\n requestFinished(_request) {\n var _a;\n this.state = FormSubmissionState.stopped;\n (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n this.resetSubmitterText();\n dispatch(\"turbo:submit-end\", {\n target: this.formElement,\n detail: Object.assign({ formSubmission: this }, this.result),\n });\n this.delegate.formSubmissionFinished(this);\n }\n setSubmitsWith() {\n if (!this.submitter || !this.submitsWith)\n return;\n if (this.submitter.matches(\"button\")) {\n this.originalSubmitText = this.submitter.innerHTML;\n this.submitter.innerHTML = this.submitsWith;\n }\n else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n this.originalSubmitText = input.value;\n input.value = this.submitsWith;\n }\n }\n resetSubmitterText() {\n if (!this.submitter || !this.originalSubmitText)\n return;\n if (this.submitter.matches(\"button\")) {\n this.submitter.innerHTML = this.originalSubmitText;\n }\n else if (this.submitter.matches(\"input\")) {\n const input = this.submitter;\n input.value = this.originalSubmitText;\n }\n }\n requestMustRedirect(request) {\n return !request.isSafe && this.mustRedirect;\n }\n requestAcceptsTurboStreamResponse(request) {\n return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n }\n get submitsWith() {\n var _a;\n return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n }\n}\nfunction buildFormData(formElement, submitter) {\n const formData = new FormData(formElement);\n const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n if (name) {\n formData.append(name, value || \"\");\n }\n return formData;\n}\nfunction getCookieValue(cookieName) {\n if (cookieName != null) {\n const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n if (cookie) {\n const value = cookie.split(\"=\").slice(1).join(\"=\");\n return value ? decodeURIComponent(value) : undefined;\n }\n }\n}\nfunction responseSucceededWithoutRedirect(response) {\n return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n const searchParams = new URLSearchParams();\n for (const [name, value] of entries) {\n if (value instanceof File)\n continue;\n searchParams.append(name, value);\n }\n url.search = searchParams.toString();\n return url;\n}\n\nclass Snapshot {\n constructor(element) {\n this.element = element;\n }\n get activeElement() {\n return this.element.ownerDocument.activeElement;\n }\n get children() {\n return [...this.element.children];\n }\n hasAnchor(anchor) {\n return this.getElementForAnchor(anchor) != null;\n }\n getElementForAnchor(anchor) {\n return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n }\n get isConnected() {\n return this.element.isConnected;\n }\n get firstAutofocusableElement() {\n const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n if (element.closest(inertDisabledOrHidden) == null)\n return element;\n else\n continue;\n }\n return null;\n }\n get permanentElements() {\n return queryPermanentElementsAll(this.element);\n }\n getPermanentElementById(id) {\n return getPermanentElementById(this.element, id);\n }\n getPermanentElementMapForSnapshot(snapshot) {\n const permanentElementMap = {};\n for (const currentPermanentElement of this.permanentElements) {\n const { id } = currentPermanentElement;\n const newPermanentElement = snapshot.getPermanentElementById(id);\n if (newPermanentElement) {\n permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n }\n }\n return permanentElementMap;\n }\n}\nfunction getPermanentElementById(node, id) {\n return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.submitCaptured = () => {\n this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n };\n this.submitBubbled = ((event) => {\n if (!event.defaultPrevented) {\n const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n const submitter = event.submitter || undefined;\n if (form &&\n submissionDoesNotDismissDialog(form, submitter) &&\n submissionDoesNotTargetIFrame(form, submitter) &&\n this.delegate.willSubmitForm(form, submitter)) {\n event.preventDefault();\n event.stopImmediatePropagation();\n this.delegate.formSubmitted(form, submitter);\n }\n }\n });\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n this.started = false;\n }\n }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n for (const element of document.getElementsByName(target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n }\n else {\n return true;\n }\n}\n\nclass View {\n constructor(delegate, element) {\n this.resolveRenderPromise = (_value) => { };\n this.resolveInterceptionPromise = (_value) => { };\n this.delegate = delegate;\n this.element = element;\n }\n scrollToAnchor(anchor) {\n const element = this.snapshot.getElementForAnchor(anchor);\n if (element) {\n this.scrollToElement(element);\n this.focusElement(element);\n }\n else {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n }\n scrollToAnchorFromLocation(location) {\n this.scrollToAnchor(getAnchor(location));\n }\n scrollToElement(element) {\n element.scrollIntoView();\n }\n focusElement(element) {\n if (element instanceof HTMLElement) {\n if (element.hasAttribute(\"tabindex\")) {\n element.focus();\n }\n else {\n element.setAttribute(\"tabindex\", \"-1\");\n element.focus();\n element.removeAttribute(\"tabindex\");\n }\n }\n }\n scrollToPosition({ x, y }) {\n this.scrollRoot.scrollTo(x, y);\n }\n scrollToTop() {\n this.scrollToPosition({ x: 0, y: 0 });\n }\n get scrollRoot() {\n return window;\n }\n async render(renderer) {\n const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n if (shouldRender) {\n try {\n this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n this.renderer = renderer;\n await this.prepareToRenderSnapshot(renderer);\n const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n if (!immediateRender)\n await renderInterception;\n await this.renderSnapshot(renderer);\n this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n this.delegate.preloadOnLoadLinksForView(this.element);\n this.finishRenderingSnapshot(renderer);\n }\n finally {\n delete this.renderer;\n this.resolveRenderPromise(undefined);\n delete this.renderPromise;\n }\n }\n else {\n this.invalidate(renderer.reloadReason);\n }\n }\n invalidate(reason) {\n this.delegate.viewInvalidated(reason);\n }\n async prepareToRenderSnapshot(renderer) {\n this.markAsPreview(renderer.isPreview);\n await renderer.prepareToRender();\n }\n markAsPreview(isPreview) {\n if (isPreview) {\n this.element.setAttribute(\"data-turbo-preview\", \"\");\n }\n else {\n this.element.removeAttribute(\"data-turbo-preview\");\n }\n }\n async renderSnapshot(renderer) {\n await renderer.render();\n }\n finishRenderingSnapshot(renderer) {\n renderer.finishRendering();\n }\n}\n\nclass FrameView extends View {\n missing() {\n this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n }\n get snapshot() {\n return new Snapshot(this.element);\n }\n}\n\nclass LinkInterceptor {\n constructor(delegate, element) {\n this.clickBubbled = (event) => {\n if (this.respondsToEventTarget(event.target)) {\n this.clickEvent = event;\n }\n else {\n delete this.clickEvent;\n }\n };\n this.linkClicked = ((event) => {\n if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n this.clickEvent.preventDefault();\n event.preventDefault();\n this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n }\n }\n delete this.clickEvent;\n });\n this.willVisit = ((_event) => {\n delete this.clickEvent;\n });\n this.delegate = delegate;\n this.element = element;\n }\n start() {\n this.element.addEventListener(\"click\", this.clickBubbled);\n document.addEventListener(\"turbo:click\", this.linkClicked);\n document.addEventListener(\"turbo:before-visit\", this.willVisit);\n }\n stop() {\n this.element.removeEventListener(\"click\", this.clickBubbled);\n document.removeEventListener(\"turbo:click\", this.linkClicked);\n document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n }\n respondsToEventTarget(target) {\n const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n return element && element.closest(\"turbo-frame, html\") == this.element;\n }\n}\n\nclass LinkClickObserver {\n constructor(delegate, eventTarget) {\n this.started = false;\n this.clickCaptured = () => {\n this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n };\n this.clickBubbled = (event) => {\n if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n const target = (event.composedPath && event.composedPath()[0]) || event.target;\n const link = this.findLinkFromClickTarget(target);\n if (link && doesNotTargetIFrame(link)) {\n const location = this.getLocationForLink(link);\n if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n event.preventDefault();\n this.delegate.followedLinkToLocation(link, location);\n }\n }\n }\n };\n this.delegate = delegate;\n this.eventTarget = eventTarget;\n }\n start() {\n if (!this.started) {\n this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n this.started = false;\n }\n }\n clickEventIsSignificant(event) {\n return !((event.target && event.target.isContentEditable) ||\n event.defaultPrevented ||\n event.which > 1 ||\n event.altKey ||\n event.ctrlKey ||\n event.metaKey ||\n event.shiftKey);\n }\n findLinkFromClickTarget(target) {\n return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n }\n getLocationForLink(link) {\n return expandURL(link.getAttribute(\"href\") || \"\");\n }\n}\nfunction doesNotTargetIFrame(anchor) {\n if (anchor.hasAttribute(\"target\")) {\n for (const element of document.getElementsByName(anchor.target)) {\n if (element instanceof HTMLIFrameElement)\n return false;\n }\n return true;\n }\n else {\n return true;\n }\n}\n\nclass FormLinkClickObserver {\n constructor(delegate, element) {\n this.delegate = delegate;\n this.linkInterceptor = new LinkClickObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n }\n stop() {\n this.linkInterceptor.stop();\n }\n willFollowLinkToLocation(link, location, originalEvent) {\n return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n link.hasAttribute(\"data-turbo-method\"));\n }\n followedLinkToLocation(link, location) {\n const form = document.createElement(\"form\");\n const type = \"hidden\";\n for (const [name, value] of location.searchParams) {\n form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n }\n const action = Object.assign(location, { search: \"\" });\n form.setAttribute(\"data-turbo\", \"true\");\n form.setAttribute(\"action\", action.href);\n form.setAttribute(\"hidden\", \"\");\n const method = link.getAttribute(\"data-turbo-method\");\n if (method)\n form.setAttribute(\"method\", method);\n const turboFrame = link.getAttribute(\"data-turbo-frame\");\n if (turboFrame)\n form.setAttribute(\"data-turbo-frame\", turboFrame);\n const turboAction = getVisitAction(link);\n if (turboAction)\n form.setAttribute(\"data-turbo-action\", turboAction);\n const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n if (turboConfirm)\n form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n const turboStream = link.hasAttribute(\"data-turbo-stream\");\n if (turboStream)\n form.setAttribute(\"data-turbo-stream\", \"\");\n this.delegate.submittedFormLinkToLocation(link, location, form);\n document.body.appendChild(form);\n form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n requestAnimationFrame(() => form.requestSubmit());\n }\n}\n\nclass Bardo {\n static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n const bardo = new this(delegate, permanentElementMap);\n bardo.enter();\n await callback();\n bardo.leave();\n }\n constructor(delegate, permanentElementMap) {\n this.delegate = delegate;\n this.permanentElementMap = permanentElementMap;\n }\n enter() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n }\n }\n leave() {\n for (const id in this.permanentElementMap) {\n const [currentPermanentElement] = this.permanentElementMap[id];\n this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n this.delegate.leavingBardo(currentPermanentElement);\n }\n }\n replaceNewPermanentElementWithPlaceholder(permanentElement) {\n const placeholder = createPlaceholderForPermanentElement(permanentElement);\n permanentElement.replaceWith(placeholder);\n }\n replaceCurrentPermanentElementWithClone(permanentElement) {\n const clone = permanentElement.cloneNode(true);\n permanentElement.replaceWith(clone);\n }\n replacePlaceholderWithPermanentElement(permanentElement) {\n const placeholder = this.getPlaceholderById(permanentElement.id);\n placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n }\n getPlaceholderById(id) {\n return this.placeholders.find((element) => element.content == id);\n }\n get placeholders() {\n return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n const element = document.createElement(\"meta\");\n element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n element.setAttribute(\"content\", permanentElement.id);\n return element;\n}\n\nclass Renderer {\n constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n this.activeElement = null;\n this.currentSnapshot = currentSnapshot;\n this.newSnapshot = newSnapshot;\n this.isPreview = isPreview;\n this.willRender = willRender;\n this.renderElement = renderElement;\n this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n }\n get shouldRender() {\n return true;\n }\n get reloadReason() {\n return;\n }\n prepareToRender() {\n return;\n }\n finishRendering() {\n if (this.resolvingFunctions) {\n this.resolvingFunctions.resolve();\n delete this.resolvingFunctions;\n }\n }\n async preservingPermanentElements(callback) {\n await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n }\n focusFirstAutofocusableElement() {\n const element = this.connectedSnapshot.firstAutofocusableElement;\n if (elementIsFocusable(element)) {\n element.focus();\n }\n }\n enteringBardo(currentPermanentElement) {\n if (this.activeElement)\n return;\n if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n this.activeElement = this.currentSnapshot.activeElement;\n }\n }\n leavingBardo(currentPermanentElement) {\n if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n this.activeElement.focus();\n this.activeElement = null;\n }\n }\n get connectedSnapshot() {\n return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n }\n get currentElement() {\n return this.currentSnapshot.element;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n get permanentElementMap() {\n return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n }\n}\nfunction elementIsFocusable(element) {\n return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n var _a;\n const destinationRange = document.createRange();\n destinationRange.selectNodeContents(currentElement);\n destinationRange.deleteContents();\n const frameElement = newElement;\n const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n if (sourceRange) {\n sourceRange.selectNodeContents(frameElement);\n currentElement.appendChild(sourceRange.extractContents());\n }\n }\n constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n this.delegate = delegate;\n }\n get shouldRender() {\n return true;\n }\n async render() {\n await nextAnimationFrame();\n this.preservingPermanentElements(() => {\n this.loadFrameElement();\n });\n this.scrollFrameIntoView();\n await nextAnimationFrame();\n this.focusFirstAutofocusableElement();\n await nextAnimationFrame();\n this.activateScriptElements();\n }\n loadFrameElement() {\n this.delegate.willRenderFrame(this.currentElement, this.newElement);\n this.renderElement(this.currentElement, this.newElement);\n }\n scrollFrameIntoView() {\n if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n const element = this.currentElement.firstElementChild;\n const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n if (element) {\n element.scrollIntoView({ block, behavior });\n return true;\n }\n }\n return false;\n }\n activateScriptElements() {\n for (const inertScriptElement of this.newScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n get newScriptElements() {\n return this.currentElement.querySelectorAll(\"script\");\n }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\nfunction readScrollBehavior(value, defaultValue) {\n if (value == \"auto\" || value == \"smooth\") {\n return value;\n }\n else {\n return defaultValue;\n }\n}\n\nclass ProgressBar {\n static get defaultCSS() {\n return unindent `\n .turbo-progress-bar {\n position: fixed;\n display: block;\n top: 0;\n left: 0;\n height: 3px;\n background: #0076ff;\n z-index: 2147483647;\n transition:\n width ${ProgressBar.animationDuration}ms ease-out,\n opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n transform: translate3d(0, 0, 0);\n }\n `;\n }\n constructor() {\n this.hiding = false;\n this.value = 0;\n this.visible = false;\n this.trickle = () => {\n this.setValue(this.value + Math.random() / 100);\n };\n this.stylesheetElement = this.createStylesheetElement();\n this.progressElement = this.createProgressElement();\n this.installStylesheetElement();\n this.setValue(0);\n }\n show() {\n if (!this.visible) {\n this.visible = true;\n this.installProgressElement();\n this.startTrickling();\n }\n }\n hide() {\n if (this.visible && !this.hiding) {\n this.hiding = true;\n this.fadeProgressElement(() => {\n this.uninstallProgressElement();\n this.stopTrickling();\n this.visible = false;\n this.hiding = false;\n });\n }\n }\n setValue(value) {\n this.value = value;\n this.refresh();\n }\n installStylesheetElement() {\n document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }\n installProgressElement() {\n this.progressElement.style.width = \"0\";\n this.progressElement.style.opacity = \"1\";\n document.documentElement.insertBefore(this.progressElement, document.body);\n this.refresh();\n }\n fadeProgressElement(callback) {\n this.progressElement.style.opacity = \"0\";\n setTimeout(callback, ProgressBar.animationDuration * 1.5);\n }\n uninstallProgressElement() {\n if (this.progressElement.parentNode) {\n document.documentElement.removeChild(this.progressElement);\n }\n }\n startTrickling() {\n if (!this.trickleInterval) {\n this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n }\n }\n stopTrickling() {\n window.clearInterval(this.trickleInterval);\n delete this.trickleInterval;\n }\n refresh() {\n requestAnimationFrame(() => {\n this.progressElement.style.width = `${10 + this.value * 90}%`;\n });\n }\n createStylesheetElement() {\n const element = document.createElement(\"style\");\n element.type = \"text/css\";\n element.textContent = ProgressBar.defaultCSS;\n if (this.cspNonce) {\n element.nonce = this.cspNonce;\n }\n return element;\n }\n createProgressElement() {\n const element = document.createElement(\"div\");\n element.className = \"turbo-progress-bar\";\n return element;\n }\n get cspNonce() {\n return getMetaContent(\"csp-nonce\");\n }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n constructor() {\n super(...arguments);\n this.detailsByOuterHTML = this.children\n .filter((element) => !elementIsNoscript(element))\n .map((element) => elementWithoutNonce(element))\n .reduce((result, element) => {\n const { outerHTML } = element;\n const details = outerHTML in result\n ? result[outerHTML]\n : {\n type: elementType(element),\n tracked: elementIsTracked(element),\n elements: [],\n };\n return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n }, {});\n }\n get trackedElementSignature() {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n .join(\"\");\n }\n getScriptElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n }\n getStylesheetElementsNotInSnapshot(snapshot) {\n return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n }\n getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n return Object.keys(this.detailsByOuterHTML)\n .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n .filter(({ type }) => type == matchedType)\n .map(({ elements: [element] }) => element);\n }\n get provisionalElements() {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n if (type == null && !tracked) {\n return [...result, ...elements];\n }\n else if (elements.length > 1) {\n return [...result, ...elements.slice(1)];\n }\n else {\n return result;\n }\n }, []);\n }\n getMetaValue(name) {\n const element = this.findMetaElementByName(name);\n return element ? element.getAttribute(\"content\") : null;\n }\n findMetaElementByName(name) {\n return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n return elementIsMetaElementWithName(element, name) ? element : result;\n }, undefined);\n }\n}\nfunction elementType(element) {\n if (elementIsScript(element)) {\n return \"script\";\n }\n else if (elementIsStylesheet(element)) {\n return \"stylesheet\";\n }\n}\nfunction elementIsTracked(element) {\n return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n const tagName = element.localName;\n return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n const tagName = element.localName;\n return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n const tagName = element.localName;\n return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n const tagName = element.localName;\n return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n if (element.hasAttribute(\"nonce\")) {\n element.setAttribute(\"nonce\", \"\");\n }\n return element;\n}\n\nclass PageSnapshot extends Snapshot {\n static fromHTMLString(html = \"\") {\n return this.fromDocument(parseHTMLDocument(html));\n }\n static fromElement(element) {\n return this.fromDocument(element.ownerDocument);\n }\n static fromDocument({ head, body }) {\n return new this(body, new HeadSnapshot(head));\n }\n constructor(element, headSnapshot) {\n super(element);\n this.headSnapshot = headSnapshot;\n }\n clone() {\n const clonedElement = this.element.cloneNode(true);\n const selectElements = this.element.querySelectorAll(\"select\");\n const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n for (const [index, source] of selectElements.entries()) {\n const clone = clonedSelectElements[index];\n for (const option of clone.selectedOptions)\n option.selected = false;\n for (const option of source.selectedOptions)\n clone.options[option.index].selected = true;\n }\n for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n clonedPasswordInput.value = \"\";\n }\n return new PageSnapshot(clonedElement, this.headSnapshot);\n }\n get headElement() {\n return this.headSnapshot.element;\n }\n get rootLocation() {\n var _a;\n const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n get cacheControlValue() {\n return this.getSetting(\"cache-control\");\n }\n get isPreviewable() {\n return this.cacheControlValue != \"no-preview\";\n }\n get isCacheable() {\n return this.cacheControlValue != \"no-cache\";\n }\n get isVisitable() {\n return this.getSetting(\"visit-control\") != \"reload\";\n }\n getSetting(name) {\n return this.headSnapshot.getMetaValue(`turbo-${name}`);\n }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n TimingMetric[\"visitStart\"] = \"visitStart\";\n TimingMetric[\"requestStart\"] = \"requestStart\";\n TimingMetric[\"requestEnd\"] = \"requestEnd\";\n TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n VisitState[\"initialized\"] = \"initialized\";\n VisitState[\"started\"] = \"started\";\n VisitState[\"canceled\"] = \"canceled\";\n VisitState[\"failed\"] = \"failed\";\n VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n action: \"advance\",\n historyChanged: false,\n visitCachedSnapshot: () => { },\n willRender: true,\n updateHistory: true,\n shouldCacheSnapshot: true,\n acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n constructor(delegate, location, restorationIdentifier, options = {}) {\n this.identifier = uuid();\n this.timingMetrics = {};\n this.followedRedirect = false;\n this.historyChanged = false;\n this.scrolled = false;\n this.shouldCacheSnapshot = true;\n this.acceptsStreamResponse = false;\n this.snapshotCached = false;\n this.state = VisitState.initialized;\n this.delegate = delegate;\n this.location = location;\n this.restorationIdentifier = restorationIdentifier || uuid();\n const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n this.action = action;\n this.historyChanged = historyChanged;\n this.referrer = referrer;\n this.snapshot = snapshot;\n this.snapshotHTML = snapshotHTML;\n this.response = response;\n this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n this.visitCachedSnapshot = visitCachedSnapshot;\n this.willRender = willRender;\n this.updateHistory = updateHistory;\n this.scrolled = !willRender;\n this.shouldCacheSnapshot = shouldCacheSnapshot;\n this.acceptsStreamResponse = acceptsStreamResponse;\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n get restorationData() {\n return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n }\n get silent() {\n return this.isSamePage;\n }\n start() {\n if (this.state == VisitState.initialized) {\n this.recordTimingMetric(TimingMetric.visitStart);\n this.state = VisitState.started;\n this.adapter.visitStarted(this);\n this.delegate.visitStarted(this);\n }\n }\n cancel() {\n if (this.state == VisitState.started) {\n if (this.request) {\n this.request.cancel();\n }\n this.cancelRender();\n this.state = VisitState.canceled;\n }\n }\n complete() {\n if (this.state == VisitState.started) {\n this.recordTimingMetric(TimingMetric.visitEnd);\n this.state = VisitState.completed;\n this.followRedirect();\n if (!this.followedRedirect) {\n this.adapter.visitCompleted(this);\n this.delegate.visitCompleted(this);\n }\n }\n }\n fail() {\n if (this.state == VisitState.started) {\n this.state = VisitState.failed;\n this.adapter.visitFailed(this);\n }\n }\n changeHistory() {\n var _a;\n if (!this.historyChanged && this.updateHistory) {\n const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n const method = getHistoryMethodForAction(actionForHistory);\n this.history.update(method, this.location, this.restorationIdentifier);\n this.historyChanged = true;\n }\n }\n issueRequest() {\n if (this.hasPreloadedResponse()) {\n this.simulateRequest();\n }\n else if (this.shouldIssueRequest() && !this.request) {\n this.request = new FetchRequest(this, FetchMethod.get, this.location);\n this.request.perform();\n }\n }\n simulateRequest() {\n if (this.response) {\n this.startRequest();\n this.recordResponse();\n this.finishRequest();\n }\n }\n startRequest() {\n this.recordTimingMetric(TimingMetric.requestStart);\n this.adapter.visitRequestStarted(this);\n }\n recordResponse(response = this.response) {\n this.response = response;\n if (response) {\n const { statusCode } = response;\n if (isSuccessful(statusCode)) {\n this.adapter.visitRequestCompleted(this);\n }\n else {\n this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n }\n }\n }\n finishRequest() {\n this.recordTimingMetric(TimingMetric.requestEnd);\n this.adapter.visitRequestFinished(this);\n }\n loadResponse() {\n if (this.response) {\n const { statusCode, responseHTML } = this.response;\n this.render(async () => {\n if (this.shouldCacheSnapshot)\n this.cacheSnapshot();\n if (this.view.renderPromise)\n await this.view.renderPromise;\n if (isSuccessful(statusCode) && responseHTML != null) {\n await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n this.complete();\n }\n else {\n await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n this.adapter.visitRendered(this);\n this.fail();\n }\n });\n }\n }\n getCachedSnapshot() {\n const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n if (this.action == \"restore\" || snapshot.isPreviewable) {\n return snapshot;\n }\n }\n }\n getPreloadedSnapshot() {\n if (this.snapshotHTML) {\n return PageSnapshot.fromHTMLString(this.snapshotHTML);\n }\n }\n hasCachedSnapshot() {\n return this.getCachedSnapshot() != null;\n }\n loadCachedSnapshot() {\n const snapshot = this.getCachedSnapshot();\n if (snapshot) {\n const isPreview = this.shouldIssueRequest();\n this.render(async () => {\n this.cacheSnapshot();\n if (this.isSamePage) {\n this.adapter.visitRendered(this);\n }\n else {\n if (this.view.renderPromise)\n await this.view.renderPromise;\n await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n this.performScroll();\n this.adapter.visitRendered(this);\n if (!isPreview) {\n this.complete();\n }\n }\n });\n }\n }\n followRedirect() {\n var _a;\n if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n action: \"replace\",\n response: this.response,\n shouldCacheSnapshot: false,\n willRender: false,\n });\n this.followedRedirect = true;\n }\n }\n goToSamePageAnchor() {\n if (this.isSamePage) {\n this.render(async () => {\n this.cacheSnapshot();\n this.performScroll();\n this.changeHistory();\n this.adapter.visitRendered(this);\n });\n }\n }\n prepareRequest(request) {\n if (this.acceptsStreamResponse) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted() {\n this.startRequest();\n }\n requestPreventedHandlingResponse(_request, _response) { }\n async requestSucceededWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected,\n });\n }\n else {\n this.redirectedToLocation = response.redirected ? response.location : undefined;\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n async requestFailedWithResponse(request, response) {\n const responseHTML = await response.responseHTML;\n const { redirected, statusCode } = response;\n if (responseHTML == undefined) {\n this.recordResponse({\n statusCode: SystemStatusCode.contentTypeMismatch,\n redirected,\n });\n }\n else {\n this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n }\n }\n requestErrored(_request, _error) {\n this.recordResponse({\n statusCode: SystemStatusCode.networkFailure,\n redirected: false,\n });\n }\n requestFinished() {\n this.finishRequest();\n }\n performScroll() {\n if (!this.scrolled && !this.view.forceReloaded) {\n if (this.action == \"restore\") {\n this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n }\n else {\n this.scrollToAnchor() || this.view.scrollToTop();\n }\n if (this.isSamePage) {\n this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n }\n this.scrolled = true;\n }\n }\n scrollToRestoredPosition() {\n const { scrollPosition } = this.restorationData;\n if (scrollPosition) {\n this.view.scrollToPosition(scrollPosition);\n return true;\n }\n }\n scrollToAnchor() {\n const anchor = getAnchor(this.location);\n if (anchor != null) {\n this.view.scrollToAnchor(anchor);\n return true;\n }\n }\n recordTimingMetric(metric) {\n this.timingMetrics[metric] = new Date().getTime();\n }\n getTimingMetrics() {\n return Object.assign({}, this.timingMetrics);\n }\n getHistoryMethodForAction(action) {\n switch (action) {\n case \"replace\":\n return history.replaceState;\n case \"advance\":\n case \"restore\":\n return history.pushState;\n }\n }\n hasPreloadedResponse() {\n return typeof this.response == \"object\";\n }\n shouldIssueRequest() {\n if (this.isSamePage) {\n return false;\n }\n else if (this.action == \"restore\") {\n return !this.hasCachedSnapshot();\n }\n else {\n return this.willRender;\n }\n }\n cacheSnapshot() {\n if (!this.snapshotCached) {\n this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n this.snapshotCached = true;\n }\n }\n async render(callback) {\n this.cancelRender();\n await new Promise((resolve) => {\n this.frame = requestAnimationFrame(() => resolve());\n });\n await callback();\n delete this.frame;\n }\n cancelRender() {\n if (this.frame) {\n cancelAnimationFrame(this.frame);\n delete this.frame;\n }\n }\n}\nfunction isSuccessful(statusCode) {\n return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n constructor(session) {\n this.progressBar = new ProgressBar();\n this.showProgressBar = () => {\n this.progressBar.show();\n };\n this.session = session;\n }\n visitProposedToLocation(location, options) {\n this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n }\n visitStarted(visit) {\n this.location = visit.location;\n visit.loadCachedSnapshot();\n visit.issueRequest();\n visit.goToSamePageAnchor();\n }\n visitRequestStarted(visit) {\n this.progressBar.setValue(0);\n if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n this.showVisitProgressBarAfterDelay();\n }\n else {\n this.showProgressBar();\n }\n }\n visitRequestCompleted(visit) {\n visit.loadResponse();\n }\n visitRequestFailedWithStatusCode(visit, statusCode) {\n switch (statusCode) {\n case SystemStatusCode.networkFailure:\n case SystemStatusCode.timeoutFailure:\n case SystemStatusCode.contentTypeMismatch:\n return this.reload({\n reason: \"request_failed\",\n context: {\n statusCode,\n },\n });\n default:\n return visit.loadResponse();\n }\n }\n visitRequestFinished(_visit) {\n this.progressBar.setValue(1);\n this.hideVisitProgressBar();\n }\n visitCompleted(_visit) { }\n pageInvalidated(reason) {\n this.reload(reason);\n }\n visitFailed(_visit) { }\n visitRendered(_visit) { }\n formSubmissionStarted(_formSubmission) {\n this.progressBar.setValue(0);\n this.showFormProgressBarAfterDelay();\n }\n formSubmissionFinished(_formSubmission) {\n this.progressBar.setValue(1);\n this.hideFormProgressBar();\n }\n showVisitProgressBarAfterDelay() {\n this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n hideVisitProgressBar() {\n this.progressBar.hide();\n if (this.visitProgressBarTimeout != null) {\n window.clearTimeout(this.visitProgressBarTimeout);\n delete this.visitProgressBarTimeout;\n }\n }\n showFormProgressBarAfterDelay() {\n if (this.formProgressBarTimeout == null) {\n this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n }\n }\n hideFormProgressBar() {\n this.progressBar.hide();\n if (this.formProgressBarTimeout != null) {\n window.clearTimeout(this.formProgressBarTimeout);\n delete this.formProgressBarTimeout;\n }\n }\n reload(reason) {\n var _a;\n dispatch(\"turbo:reload\", { detail: reason });\n window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n }\n get navigator() {\n return this.session.navigator;\n }\n}\n\nclass CacheObserver {\n constructor() {\n this.selector = \"[data-turbo-temporary]\";\n this.deprecatedSelector = \"[data-turbo-cache=false]\";\n this.started = false;\n this.removeTemporaryElements = ((_event) => {\n for (const element of this.temporaryElements) {\n element.remove();\n }\n });\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n }\n }\n get temporaryElements() {\n return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n }\n get temporaryElementsWithDeprecation() {\n const elements = document.querySelectorAll(this.deprecatedSelector);\n if (elements.length) {\n console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n }\n return [...elements];\n }\n}\n\nclass FrameRedirector {\n constructor(session, element) {\n this.session = session;\n this.element = element;\n this.linkInterceptor = new LinkInterceptor(this, element);\n this.formSubmitObserver = new FormSubmitObserver(this, element);\n }\n start() {\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n stop() {\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldRedirect(element);\n }\n linkClickIntercepted(element, url, event) {\n const frame = this.findFrameElement(element);\n if (frame) {\n frame.delegate.linkClickIntercepted(element, url, event);\n }\n }\n willSubmitForm(element, submitter) {\n return (element.closest(\"turbo-frame\") == null &&\n this.shouldSubmit(element, submitter) &&\n this.shouldRedirect(element, submitter));\n }\n formSubmitted(element, submitter) {\n const frame = this.findFrameElement(element, submitter);\n if (frame) {\n frame.delegate.formSubmitted(element, submitter);\n }\n }\n shouldSubmit(form, submitter) {\n var _a;\n const action = getAction(form, submitter);\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n }\n shouldRedirect(element, submitter) {\n const isNavigatable = element instanceof HTMLFormElement\n ? this.session.submissionIsNavigatable(element, submitter)\n : this.session.elementIsNavigatable(element);\n if (isNavigatable) {\n const frame = this.findFrameElement(element, submitter);\n return frame ? frame != element.closest(\"turbo-frame\") : false;\n }\n else {\n return false;\n }\n }\n findFrameElement(element, submitter) {\n const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n if (id && id != \"_top\") {\n const frame = this.element.querySelector(`#${id}:not([disabled])`);\n if (frame instanceof FrameElement) {\n return frame;\n }\n }\n }\n}\n\nclass History {\n constructor(delegate) {\n this.restorationIdentifier = uuid();\n this.restorationData = {};\n this.started = false;\n this.pageLoaded = false;\n this.onPopState = (event) => {\n if (this.shouldHandlePopState()) {\n const { turbo } = event.state || {};\n if (turbo) {\n this.location = new URL(window.location.href);\n const { restorationIdentifier } = turbo;\n this.restorationIdentifier = restorationIdentifier;\n this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n }\n }\n };\n this.onPageLoad = async (_event) => {\n await nextMicrotask();\n this.pageLoaded = true;\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"popstate\", this.onPopState, false);\n addEventListener(\"load\", this.onPageLoad, false);\n this.started = true;\n this.replace(new URL(window.location.href));\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"popstate\", this.onPopState, false);\n removeEventListener(\"load\", this.onPageLoad, false);\n this.started = false;\n }\n }\n push(location, restorationIdentifier) {\n this.update(history.pushState, location, restorationIdentifier);\n }\n replace(location, restorationIdentifier) {\n this.update(history.replaceState, location, restorationIdentifier);\n }\n update(method, location, restorationIdentifier = uuid()) {\n const state = { turbo: { restorationIdentifier } };\n method.call(history, state, \"\", location.href);\n this.location = location;\n this.restorationIdentifier = restorationIdentifier;\n }\n getRestorationDataForIdentifier(restorationIdentifier) {\n return this.restorationData[restorationIdentifier] || {};\n }\n updateRestorationData(additionalData) {\n const { restorationIdentifier } = this;\n const restorationData = this.restorationData[restorationIdentifier];\n this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n }\n assumeControlOfScrollRestoration() {\n var _a;\n if (!this.previousScrollRestoration) {\n this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n history.scrollRestoration = \"manual\";\n }\n }\n relinquishControlOfScrollRestoration() {\n if (this.previousScrollRestoration) {\n history.scrollRestoration = this.previousScrollRestoration;\n delete this.previousScrollRestoration;\n }\n }\n shouldHandlePopState() {\n return this.pageIsLoaded();\n }\n pageIsLoaded() {\n return this.pageLoaded || document.readyState == \"complete\";\n }\n}\n\nclass Navigator {\n constructor(delegate) {\n this.delegate = delegate;\n }\n proposeVisit(location, options = {}) {\n if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n this.delegate.visitProposedToLocation(location, options);\n }\n else {\n window.location.href = location.toString();\n }\n }\n }\n startVisit(locatable, restorationIdentifier, options = {}) {\n this.stop();\n this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n this.currentVisit.start();\n }\n submitForm(form, submitter) {\n this.stop();\n this.formSubmission = new FormSubmission(this, form, submitter, true);\n this.formSubmission.start();\n }\n stop() {\n if (this.formSubmission) {\n this.formSubmission.stop();\n delete this.formSubmission;\n }\n if (this.currentVisit) {\n this.currentVisit.cancel();\n delete this.currentVisit;\n }\n }\n get adapter() {\n return this.delegate.adapter;\n }\n get view() {\n return this.delegate.view;\n }\n get history() {\n return this.delegate.history;\n }\n formSubmissionStarted(formSubmission) {\n if (typeof this.adapter.formSubmissionStarted === \"function\") {\n this.adapter.formSubmissionStarted(formSubmission);\n }\n }\n async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n if (formSubmission == this.formSubmission) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const shouldCacheSnapshot = formSubmission.isSafe;\n if (!shouldCacheSnapshot) {\n this.view.clearSnapshotCache();\n }\n const { statusCode, redirected } = fetchResponse;\n const action = this.getActionForFormSubmission(formSubmission);\n const visitOptions = {\n action,\n shouldCacheSnapshot,\n response: { statusCode, responseHTML, redirected },\n };\n this.proposeVisit(fetchResponse.location, visitOptions);\n }\n }\n }\n async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n const responseHTML = await fetchResponse.responseHTML;\n if (responseHTML) {\n const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n if (fetchResponse.serverError) {\n await this.view.renderError(snapshot, this.currentVisit);\n }\n else {\n await this.view.renderPage(snapshot, false, true, this.currentVisit);\n }\n this.view.scrollToTop();\n this.view.clearSnapshotCache();\n }\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished(formSubmission) {\n if (typeof this.adapter.formSubmissionFinished === \"function\") {\n this.adapter.formSubmissionFinished(formSubmission);\n }\n }\n visitStarted(visit) {\n this.delegate.visitStarted(visit);\n }\n visitCompleted(visit) {\n this.delegate.visitCompleted(visit);\n }\n locationWithActionIsSamePage(location, action) {\n const anchor = getAnchor(location);\n const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n return (action !== \"replace\" &&\n getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n getActionForFormSubmission({ submitter, formElement }) {\n return getVisitAction(submitter, formElement) || \"advance\";\n }\n}\n\nvar PageStage;\n(function (PageStage) {\n PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n constructor(delegate) {\n this.stage = PageStage.initial;\n this.started = false;\n this.interpretReadyState = () => {\n const { readyState } = this;\n if (readyState == \"interactive\") {\n this.pageIsInteractive();\n }\n else if (readyState == \"complete\") {\n this.pageIsComplete();\n }\n };\n this.pageWillUnload = () => {\n this.delegate.pageWillUnload();\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n if (this.stage == PageStage.initial) {\n this.stage = PageStage.loading;\n }\n document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n addEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n removeEventListener(\"pagehide\", this.pageWillUnload, false);\n this.started = false;\n }\n }\n pageIsInteractive() {\n if (this.stage == PageStage.loading) {\n this.stage = PageStage.interactive;\n this.delegate.pageBecameInteractive();\n }\n }\n pageIsComplete() {\n this.pageIsInteractive();\n if (this.stage == PageStage.interactive) {\n this.stage = PageStage.complete;\n this.delegate.pageLoaded();\n }\n }\n get readyState() {\n return document.readyState;\n }\n}\n\nclass ScrollObserver {\n constructor(delegate) {\n this.started = false;\n this.onScroll = () => {\n this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n addEventListener(\"scroll\", this.onScroll, false);\n this.onScroll();\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n removeEventListener(\"scroll\", this.onScroll, false);\n this.started = false;\n }\n }\n updatePosition(position) {\n this.delegate.scrollPositionChanged(position);\n }\n}\n\nclass StreamMessageRenderer {\n render({ fragment }) {\n Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n }\n enteringBardo(currentPermanentElement, newPermanentElement) {\n newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n }\n leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n const permanentElementMap = {};\n for (const permanentElementInDocument of permanentElementsInDocument) {\n const { id } = permanentElementInDocument;\n for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n if (elementInStream) {\n permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n }\n }\n }\n return permanentElementMap;\n}\n\nclass StreamObserver {\n constructor(delegate) {\n this.sources = new Set();\n this.started = false;\n this.inspectFetchResponse = ((event) => {\n const response = fetchResponseFromEvent(event);\n if (response && fetchResponseIsStream(response)) {\n event.preventDefault();\n this.receiveMessageResponse(response);\n }\n });\n this.receiveMessageEvent = (event) => {\n if (this.started && typeof event.data == \"string\") {\n this.receiveMessageHTML(event.data);\n }\n };\n this.delegate = delegate;\n }\n start() {\n if (!this.started) {\n this.started = true;\n addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n }\n }\n connectStreamSource(source) {\n if (!this.streamSourceIsConnected(source)) {\n this.sources.add(source);\n source.addEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n disconnectStreamSource(source) {\n if (this.streamSourceIsConnected(source)) {\n this.sources.delete(source);\n source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n }\n }\n streamSourceIsConnected(source) {\n return this.sources.has(source);\n }\n async receiveMessageResponse(response) {\n const html = await response.responseHTML;\n if (html) {\n this.receiveMessageHTML(html);\n }\n }\n receiveMessageHTML(html) {\n this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n }\n}\nfunction fetchResponseFromEvent(event) {\n var _a;\n const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n if (fetchResponse instanceof FetchResponse) {\n return fetchResponse;\n }\n}\nfunction fetchResponseIsStream(response) {\n var _a;\n const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n const { documentElement, body } = document;\n documentElement.replaceChild(newElement, body);\n }\n async render() {\n this.replaceHeadAndBody();\n this.activateScriptElements();\n }\n replaceHeadAndBody() {\n const { documentElement, head } = document;\n documentElement.replaceChild(this.newHead, head);\n this.renderElement(this.currentElement, this.newElement);\n }\n activateScriptElements() {\n for (const replaceableElement of this.scriptElements) {\n const parentNode = replaceableElement.parentNode;\n if (parentNode) {\n const element = activateScriptElement(replaceableElement);\n parentNode.replaceChild(element, replaceableElement);\n }\n }\n }\n get newHead() {\n return this.newSnapshot.headSnapshot.element;\n }\n get scriptElements() {\n return document.documentElement.querySelectorAll(\"script\");\n }\n}\n\nclass PageRenderer extends Renderer {\n static renderElement(currentElement, newElement) {\n if (document.body && newElement instanceof HTMLBodyElement) {\n document.body.replaceWith(newElement);\n }\n else {\n document.documentElement.appendChild(newElement);\n }\n }\n get shouldRender() {\n return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n }\n get reloadReason() {\n if (!this.newSnapshot.isVisitable) {\n return {\n reason: \"turbo_visit_control_is_reload\",\n };\n }\n if (!this.trackedElementsAreIdentical) {\n return {\n reason: \"tracked_element_mismatch\",\n };\n }\n }\n async prepareToRender() {\n await this.mergeHead();\n }\n async render() {\n if (this.willRender) {\n await this.replaceBody();\n }\n }\n finishRendering() {\n super.finishRendering();\n if (!this.isPreview) {\n this.focusFirstAutofocusableElement();\n }\n }\n get currentHeadSnapshot() {\n return this.currentSnapshot.headSnapshot;\n }\n get newHeadSnapshot() {\n return this.newSnapshot.headSnapshot;\n }\n get newElement() {\n return this.newSnapshot.element;\n }\n async mergeHead() {\n const mergedHeadElements = this.mergeProvisionalElements();\n const newStylesheetElements = this.copyNewHeadStylesheetElements();\n this.copyNewHeadScriptElements();\n await mergedHeadElements;\n await newStylesheetElements;\n }\n async replaceBody() {\n await this.preservingPermanentElements(async () => {\n this.activateNewBody();\n await this.assignNewBody();\n });\n }\n get trackedElementsAreIdentical() {\n return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n }\n async copyNewHeadStylesheetElements() {\n const loadingElements = [];\n for (const element of this.newHeadStylesheetElements) {\n loadingElements.push(waitForLoad(element));\n document.head.appendChild(element);\n }\n await Promise.all(loadingElements);\n }\n copyNewHeadScriptElements() {\n for (const element of this.newHeadScriptElements) {\n document.head.appendChild(activateScriptElement(element));\n }\n }\n async mergeProvisionalElements() {\n const newHeadElements = [...this.newHeadProvisionalElements];\n for (const element of this.currentHeadProvisionalElements) {\n if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n document.head.removeChild(element);\n }\n }\n for (const element of newHeadElements) {\n document.head.appendChild(element);\n }\n }\n isCurrentElementInElementList(element, elementList) {\n for (const [index, newElement] of elementList.entries()) {\n if (element.tagName == \"TITLE\") {\n if (newElement.tagName != \"TITLE\") {\n continue;\n }\n if (element.innerHTML == newElement.innerHTML) {\n elementList.splice(index, 1);\n return true;\n }\n }\n if (newElement.isEqualNode(element)) {\n elementList.splice(index, 1);\n return true;\n }\n }\n return false;\n }\n removeCurrentHeadProvisionalElements() {\n for (const element of this.currentHeadProvisionalElements) {\n document.head.removeChild(element);\n }\n }\n copyNewHeadProvisionalElements() {\n for (const element of this.newHeadProvisionalElements) {\n document.head.appendChild(element);\n }\n }\n activateNewBody() {\n document.adoptNode(this.newElement);\n this.activateNewBodyScriptElements();\n }\n activateNewBodyScriptElements() {\n for (const inertScriptElement of this.newBodyScriptElements) {\n const activatedScriptElement = activateScriptElement(inertScriptElement);\n inertScriptElement.replaceWith(activatedScriptElement);\n }\n }\n async assignNewBody() {\n await this.renderElement(this.currentElement, this.newElement);\n }\n get newHeadStylesheetElements() {\n return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get newHeadScriptElements() {\n return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n }\n get currentHeadProvisionalElements() {\n return this.currentHeadSnapshot.provisionalElements;\n }\n get newHeadProvisionalElements() {\n return this.newHeadSnapshot.provisionalElements;\n }\n get newBodyScriptElements() {\n return this.newElement.querySelectorAll(\"script\");\n }\n}\n\nclass SnapshotCache {\n constructor(size) {\n this.keys = [];\n this.snapshots = {};\n this.size = size;\n }\n has(location) {\n return toCacheKey(location) in this.snapshots;\n }\n get(location) {\n if (this.has(location)) {\n const snapshot = this.read(location);\n this.touch(location);\n return snapshot;\n }\n }\n put(location, snapshot) {\n this.write(location, snapshot);\n this.touch(location);\n return snapshot;\n }\n clear() {\n this.snapshots = {};\n }\n read(location) {\n return this.snapshots[toCacheKey(location)];\n }\n write(location, snapshot) {\n this.snapshots[toCacheKey(location)] = snapshot;\n }\n touch(location) {\n const key = toCacheKey(location);\n const index = this.keys.indexOf(key);\n if (index > -1)\n this.keys.splice(index, 1);\n this.keys.unshift(key);\n this.trim();\n }\n trim() {\n for (const key of this.keys.splice(this.size)) {\n delete this.snapshots[key];\n }\n }\n}\n\nclass PageView extends View {\n constructor() {\n super(...arguments);\n this.snapshotCache = new SnapshotCache(10);\n this.lastRenderedLocation = new URL(location.href);\n this.forceReloaded = false;\n }\n renderPage(snapshot, isPreview = false, willRender = true, visit) {\n const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n if (!renderer.shouldRender) {\n this.forceReloaded = true;\n }\n else {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n }\n return this.render(renderer);\n }\n renderError(snapshot, visit) {\n visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n return this.render(renderer);\n }\n clearSnapshotCache() {\n this.snapshotCache.clear();\n }\n async cacheSnapshot(snapshot = this.snapshot) {\n if (snapshot.isCacheable) {\n this.delegate.viewWillCacheSnapshot();\n const { lastRenderedLocation: location } = this;\n await nextEventLoopTick();\n const cachedSnapshot = snapshot.clone();\n this.snapshotCache.put(location, cachedSnapshot);\n return cachedSnapshot;\n }\n }\n getCachedSnapshotForLocation(location) {\n return this.snapshotCache.get(location);\n }\n get snapshot() {\n return PageSnapshot.fromElement(this.element);\n }\n}\n\nclass Preloader {\n constructor(delegate) {\n this.selector = \"a[data-turbo-preload]\";\n this.delegate = delegate;\n }\n get snapshotCache() {\n return this.delegate.navigator.view.snapshotCache;\n }\n start() {\n if (document.readyState === \"loading\") {\n return document.addEventListener(\"DOMContentLoaded\", () => {\n this.preloadOnLoadLinksForView(document.body);\n });\n }\n else {\n this.preloadOnLoadLinksForView(document.body);\n }\n }\n preloadOnLoadLinksForView(element) {\n for (const link of element.querySelectorAll(this.selector)) {\n this.preloadURL(link);\n }\n }\n async preloadURL(link) {\n const location = new URL(link.href);\n if (this.snapshotCache.has(location)) {\n return;\n }\n try {\n const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n const responseText = await response.text();\n const snapshot = PageSnapshot.fromHTMLString(responseText);\n this.snapshotCache.put(location, snapshot);\n }\n catch (_) {\n }\n }\n}\n\nclass Session {\n constructor() {\n this.navigator = new Navigator(this);\n this.history = new History(this);\n this.preloader = new Preloader(this);\n this.view = new PageView(this, document.documentElement);\n this.adapter = new BrowserAdapter(this);\n this.pageObserver = new PageObserver(this);\n this.cacheObserver = new CacheObserver();\n this.linkClickObserver = new LinkClickObserver(this, window);\n this.formSubmitObserver = new FormSubmitObserver(this, document);\n this.scrollObserver = new ScrollObserver(this);\n this.streamObserver = new StreamObserver(this);\n this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n this.frameRedirector = new FrameRedirector(this, document.documentElement);\n this.streamMessageRenderer = new StreamMessageRenderer();\n this.drive = true;\n this.enabled = true;\n this.progressBarDelay = 500;\n this.started = false;\n this.formMode = \"on\";\n }\n start() {\n if (!this.started) {\n this.pageObserver.start();\n this.cacheObserver.start();\n this.formLinkClickObserver.start();\n this.linkClickObserver.start();\n this.formSubmitObserver.start();\n this.scrollObserver.start();\n this.streamObserver.start();\n this.frameRedirector.start();\n this.history.start();\n this.preloader.start();\n this.started = true;\n this.enabled = true;\n }\n }\n disable() {\n this.enabled = false;\n }\n stop() {\n if (this.started) {\n this.pageObserver.stop();\n this.cacheObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkClickObserver.stop();\n this.formSubmitObserver.stop();\n this.scrollObserver.stop();\n this.streamObserver.stop();\n this.frameRedirector.stop();\n this.history.stop();\n this.started = false;\n }\n }\n registerAdapter(adapter) {\n this.adapter = adapter;\n }\n visit(location, options = {}) {\n const frameElement = options.frame ? document.getElementById(options.frame) : null;\n if (frameElement instanceof FrameElement) {\n frameElement.src = location.toString();\n frameElement.loaded;\n }\n else {\n this.navigator.proposeVisit(expandURL(location), options);\n }\n }\n connectStreamSource(source) {\n this.streamObserver.connectStreamSource(source);\n }\n disconnectStreamSource(source) {\n this.streamObserver.disconnectStreamSource(source);\n }\n renderStreamMessage(message) {\n this.streamMessageRenderer.render(StreamMessage.wrap(message));\n }\n clearCache() {\n this.view.clearSnapshotCache();\n }\n setProgressBarDelay(delay) {\n this.progressBarDelay = delay;\n }\n setFormMode(mode) {\n this.formMode = mode;\n }\n get location() {\n return this.history.location;\n }\n get restorationIdentifier() {\n return this.history.restorationIdentifier;\n }\n historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n if (this.enabled) {\n this.navigator.startVisit(location, restorationIdentifier, {\n action: \"restore\",\n historyChanged: true,\n });\n }\n else {\n this.adapter.pageInvalidated({\n reason: \"turbo_disabled\",\n });\n }\n }\n scrollPositionChanged(position) {\n this.history.updateRestorationData({ scrollPosition: position });\n }\n willSubmitFormLinkToLocation(link, location) {\n return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n }\n submittedFormLinkToLocation() { }\n willFollowLinkToLocation(link, location, event) {\n return (this.elementIsNavigatable(link) &&\n locationIsVisitable(location, this.snapshot.rootLocation) &&\n this.applicationAllowsFollowingLinkToLocation(link, location, event));\n }\n followedLinkToLocation(link, location) {\n const action = this.getActionForLink(link);\n const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n this.visit(location.href, { action, acceptsStreamResponse });\n }\n allowsVisitingLocationWithAction(location, action) {\n return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n }\n visitProposedToLocation(location, options) {\n extendURLWithDeprecatedProperties(location);\n this.adapter.visitProposedToLocation(location, options);\n }\n visitStarted(visit) {\n if (!visit.acceptsStreamResponse) {\n markAsBusy(document.documentElement);\n }\n extendURLWithDeprecatedProperties(visit.location);\n if (!visit.silent) {\n this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n }\n }\n visitCompleted(visit) {\n clearBusyState(document.documentElement);\n this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n }\n locationWithActionIsSamePage(location, action) {\n return this.navigator.locationWithActionIsSamePage(location, action);\n }\n visitScrolledToSamePageLocation(oldURL, newURL) {\n this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n }\n willSubmitForm(form, submitter) {\n const action = getAction(form, submitter);\n return (this.submissionIsNavigatable(form, submitter) &&\n locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n }\n formSubmitted(form, submitter) {\n this.navigator.submitForm(form, submitter);\n }\n pageBecameInteractive() {\n this.view.lastRenderedLocation = this.location;\n this.notifyApplicationAfterPageLoad();\n }\n pageLoaded() {\n this.history.assumeControlOfScrollRestoration();\n }\n pageWillUnload() {\n this.history.relinquishControlOfScrollRestoration();\n }\n receivedMessageFromStream(message) {\n this.renderStreamMessage(message);\n }\n viewWillCacheSnapshot() {\n var _a;\n if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n this.notifyApplicationBeforeCachingSnapshot();\n }\n }\n allowsImmediateRender({ element }, options) {\n const event = this.notifyApplicationBeforeRender(element, options);\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) {\n this.view.lastRenderedLocation = this.history.location;\n this.notifyApplicationAfterRender();\n }\n preloadOnLoadLinksForView(element) {\n this.preloader.preloadOnLoadLinksForView(element);\n }\n viewInvalidated(reason) {\n this.adapter.pageInvalidated(reason);\n }\n frameLoaded(frame) {\n this.notifyApplicationAfterFrameLoad(frame);\n }\n frameRendered(fetchResponse, frame) {\n this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n }\n applicationAllowsFollowingLinkToLocation(link, location, ev) {\n const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n return !event.defaultPrevented;\n }\n applicationAllowsVisitingLocation(location) {\n const event = this.notifyApplicationBeforeVisitingLocation(location);\n return !event.defaultPrevented;\n }\n notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n return dispatch(\"turbo:click\", {\n target: link,\n detail: { url: location.href, originalEvent: event },\n cancelable: true,\n });\n }\n notifyApplicationBeforeVisitingLocation(location) {\n return dispatch(\"turbo:before-visit\", {\n detail: { url: location.href },\n cancelable: true,\n });\n }\n notifyApplicationAfterVisitingLocation(location, action) {\n return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n }\n notifyApplicationBeforeCachingSnapshot() {\n return dispatch(\"turbo:before-cache\");\n }\n notifyApplicationBeforeRender(newBody, options) {\n return dispatch(\"turbo:before-render\", {\n detail: Object.assign({ newBody }, options),\n cancelable: true,\n });\n }\n notifyApplicationAfterRender() {\n return dispatch(\"turbo:render\");\n }\n notifyApplicationAfterPageLoad(timing = {}) {\n return dispatch(\"turbo:load\", {\n detail: { url: this.location.href, timing },\n });\n }\n notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n dispatchEvent(new HashChangeEvent(\"hashchange\", {\n oldURL: oldURL.toString(),\n newURL: newURL.toString(),\n }));\n }\n notifyApplicationAfterFrameLoad(frame) {\n return dispatch(\"turbo:frame-load\", { target: frame });\n }\n notifyApplicationAfterFrameRender(fetchResponse, frame) {\n return dispatch(\"turbo:frame-render\", {\n detail: { fetchResponse },\n target: frame,\n cancelable: true,\n });\n }\n submissionIsNavigatable(form, submitter) {\n if (this.formMode == \"off\") {\n return false;\n }\n else {\n const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n if (this.formMode == \"optin\") {\n return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n }\n else {\n return submitterIsNavigatable && this.elementIsNavigatable(form);\n }\n }\n }\n elementIsNavigatable(element) {\n const container = findClosestRecursively(element, \"[data-turbo]\");\n const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n if (this.drive || withinFrame) {\n if (container) {\n return container.getAttribute(\"data-turbo\") != \"false\";\n }\n else {\n return true;\n }\n }\n else {\n if (container) {\n return container.getAttribute(\"data-turbo\") == \"true\";\n }\n else {\n return false;\n }\n }\n }\n getActionForLink(link) {\n return getVisitAction(link) || \"advance\";\n }\n get snapshot() {\n return this.view.snapshot;\n }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n absoluteURL: {\n get() {\n return this.toString();\n },\n },\n};\n\nclass Cache {\n constructor(session) {\n this.session = session;\n }\n clear() {\n this.session.clearCache();\n }\n resetCacheControl() {\n this.setCacheControl(\"\");\n }\n exemptPageFromCache() {\n this.setCacheControl(\"no-cache\");\n }\n exemptPageFromPreview() {\n this.setCacheControl(\"no-preview\");\n }\n setCacheControl(value) {\n setMetaContent(\"turbo-cache-control\", value);\n }\n}\n\nconst StreamActions = {\n after() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n },\n append() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.append(this.templateContent));\n },\n before() {\n this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n },\n prepend() {\n this.removeDuplicateTargetChildren();\n this.targetElements.forEach((e) => e.prepend(this.templateContent));\n },\n remove() {\n this.targetElements.forEach((e) => e.remove());\n },\n replace() {\n this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n },\n update() {\n this.targetElements.forEach((targetElement) => {\n targetElement.innerHTML = \"\";\n targetElement.append(this.templateContent);\n });\n },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n session.start();\n}\nfunction registerAdapter(adapter) {\n session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n session.renderStreamMessage(message);\n}\nfunction clearCache() {\n console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n __proto__: null,\n navigator: navigator$1,\n session: session,\n cache: cache,\n PageRenderer: PageRenderer,\n PageSnapshot: PageSnapshot,\n FrameRenderer: FrameRenderer,\n start: start,\n registerAdapter: registerAdapter,\n visit: visit,\n connectStreamSource: connectStreamSource,\n disconnectStreamSource: disconnectStreamSource,\n renderStreamMessage: renderStreamMessage,\n clearCache: clearCache,\n setProgressBarDelay: setProgressBarDelay,\n setConfirmMethod: setConfirmMethod,\n setFormMode: setFormMode,\n StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\n}\n\nclass FrameController {\n constructor(element) {\n this.fetchResponseLoaded = (_fetchResponse) => { };\n this.currentFetchRequest = null;\n this.resolveVisitPromise = () => { };\n this.connected = false;\n this.hasBeenLoaded = false;\n this.ignoredAttributes = new Set();\n this.action = null;\n this.visitCachedSnapshot = ({ element }) => {\n const frame = element.querySelector(\"#\" + this.element.id);\n if (frame && this.previousFrameElement) {\n frame.replaceChildren(...this.previousFrameElement.children);\n }\n delete this.previousFrameElement;\n };\n this.element = element;\n this.view = new FrameView(this, this.element);\n this.appearanceObserver = new AppearanceObserver(this, this.element);\n this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n this.linkInterceptor = new LinkInterceptor(this, this.element);\n this.restorationIdentifier = uuid();\n this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n }\n connect() {\n if (!this.connected) {\n this.connected = true;\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.loadSourceURL();\n }\n this.formLinkClickObserver.start();\n this.linkInterceptor.start();\n this.formSubmitObserver.start();\n }\n }\n disconnect() {\n if (this.connected) {\n this.connected = false;\n this.appearanceObserver.stop();\n this.formLinkClickObserver.stop();\n this.linkInterceptor.stop();\n this.formSubmitObserver.stop();\n }\n }\n disabledChanged() {\n if (this.loadingStyle == FrameLoadingStyle.eager) {\n this.loadSourceURL();\n }\n }\n sourceURLChanged() {\n if (this.isIgnoringChangesTo(\"src\"))\n return;\n if (this.element.isConnected) {\n this.complete = false;\n }\n if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n this.loadSourceURL();\n }\n }\n sourceURLReloaded() {\n const { src } = this.element;\n this.ignoringChangesToAttribute(\"complete\", () => {\n this.element.removeAttribute(\"complete\");\n });\n this.element.src = null;\n this.element.src = src;\n return this.element.loaded;\n }\n completeChanged() {\n if (this.isIgnoringChangesTo(\"complete\"))\n return;\n this.loadSourceURL();\n }\n loadingStyleChanged() {\n if (this.loadingStyle == FrameLoadingStyle.lazy) {\n this.appearanceObserver.start();\n }\n else {\n this.appearanceObserver.stop();\n this.loadSourceURL();\n }\n }\n async loadSourceURL() {\n if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n this.element.loaded = this.visit(expandURL(this.sourceURL));\n this.appearanceObserver.stop();\n await this.element.loaded;\n this.hasBeenLoaded = true;\n }\n }\n async loadResponse(fetchResponse) {\n if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n this.sourceURL = fetchResponse.response.url;\n }\n try {\n const html = await fetchResponse.responseHTML;\n if (html) {\n const document = parseHTMLDocument(html);\n const pageSnapshot = PageSnapshot.fromDocument(document);\n if (pageSnapshot.isVisitable) {\n await this.loadFrameResponse(fetchResponse, document);\n }\n else {\n await this.handleUnvisitableFrameResponse(fetchResponse);\n }\n }\n }\n finally {\n this.fetchResponseLoaded = () => { };\n }\n }\n elementAppearedInViewport(element) {\n this.proposeVisitIfNavigatedWithAction(element, element);\n this.loadSourceURL();\n }\n willSubmitFormLinkToLocation(link) {\n return this.shouldInterceptNavigation(link);\n }\n submittedFormLinkToLocation(link, _location, form) {\n const frame = this.findFrameElement(link);\n if (frame)\n form.setAttribute(\"data-turbo-frame\", frame.id);\n }\n shouldInterceptLinkClick(element, _location, _event) {\n return this.shouldInterceptNavigation(element);\n }\n linkClickIntercepted(element, location) {\n this.navigateFrame(element, location);\n }\n willSubmitForm(element, submitter) {\n return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n }\n formSubmitted(element, submitter) {\n if (this.formSubmission) {\n this.formSubmission.stop();\n }\n this.formSubmission = new FormSubmission(this, element, submitter);\n const { fetchRequest } = this.formSubmission;\n this.prepareRequest(fetchRequest);\n this.formSubmission.start();\n }\n prepareRequest(request) {\n var _a;\n request.headers[\"Turbo-Frame\"] = this.id;\n if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n request.acceptResponseType(StreamMessage.contentType);\n }\n }\n requestStarted(_request) {\n markAsBusy(this.element);\n }\n requestPreventedHandlingResponse(_request, _response) {\n this.resolveVisitPromise();\n }\n async requestSucceededWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n async requestFailedWithResponse(request, response) {\n await this.loadResponse(response);\n this.resolveVisitPromise();\n }\n requestErrored(request, error) {\n console.error(error);\n this.resolveVisitPromise();\n }\n requestFinished(_request) {\n clearBusyState(this.element);\n }\n formSubmissionStarted({ formElement }) {\n markAsBusy(formElement, this.findFrameElement(formElement));\n }\n formSubmissionSucceededWithResponse(formSubmission, response) {\n const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n frame.delegate.loadResponse(response);\n if (!formSubmission.isSafe) {\n session.clearCache();\n }\n }\n formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n this.element.delegate.loadResponse(fetchResponse);\n session.clearCache();\n }\n formSubmissionErrored(formSubmission, error) {\n console.error(error);\n }\n formSubmissionFinished({ formElement }) {\n clearBusyState(formElement, this.findFrameElement(formElement));\n }\n allowsImmediateRender({ element: newFrame }, options) {\n const event = dispatch(\"turbo:before-frame-render\", {\n target: this.element,\n detail: Object.assign({ newFrame }, options),\n cancelable: true,\n });\n const { defaultPrevented, detail: { render }, } = event;\n if (this.view.renderer && render) {\n this.view.renderer.renderElement = render;\n }\n return !defaultPrevented;\n }\n viewRenderedSnapshot(_snapshot, _isPreview) { }\n preloadOnLoadLinksForView(element) {\n session.preloadOnLoadLinksForView(element);\n }\n viewInvalidated() { }\n willRenderFrame(currentElement, _newElement) {\n this.previousFrameElement = currentElement.cloneNode(true);\n }\n async loadFrameResponse(fetchResponse, document) {\n const newFrameElement = await this.extractForeignFrameElement(document.body);\n if (newFrameElement) {\n const snapshot = new Snapshot(newFrameElement);\n const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n if (this.view.renderPromise)\n await this.view.renderPromise;\n this.changeHistory();\n await this.view.render(renderer);\n this.complete = true;\n session.frameRendered(fetchResponse, this.element);\n session.frameLoaded(this.element);\n this.fetchResponseLoaded(fetchResponse);\n }\n else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n this.handleFrameMissingFromResponse(fetchResponse);\n }\n }\n async visit(url) {\n var _a;\n const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n this.currentFetchRequest = request;\n return new Promise((resolve) => {\n this.resolveVisitPromise = () => {\n this.resolveVisitPromise = () => { };\n this.currentFetchRequest = null;\n resolve();\n };\n request.perform();\n });\n }\n navigateFrame(element, url, submitter) {\n const frame = this.findFrameElement(element, submitter);\n frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n this.withCurrentNavigationElement(element, () => {\n frame.src = url;\n });\n }\n proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n this.action = getVisitAction(submitter, element, frame);\n if (this.action) {\n const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n const { visitCachedSnapshot } = frame.delegate;\n frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n if (frame.src) {\n const { statusCode, redirected } = fetchResponse;\n const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n const response = { statusCode, redirected, responseHTML };\n const options = {\n response,\n visitCachedSnapshot,\n willRender: false,\n updateHistory: false,\n restorationIdentifier: this.restorationIdentifier,\n snapshot: pageSnapshot,\n };\n if (this.action)\n options.action = this.action;\n session.visit(frame.src, options);\n }\n };\n }\n }\n changeHistory() {\n if (this.action) {\n const method = getHistoryMethodForAction(this.action);\n session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n }\n }\n async handleUnvisitableFrameResponse(fetchResponse) {\n console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n await this.visitResponse(fetchResponse.response);\n }\n willHandleFrameMissingFromResponse(fetchResponse) {\n this.element.setAttribute(\"complete\", \"\");\n const response = fetchResponse.response;\n const visit = async (url, options = {}) => {\n if (url instanceof Response) {\n this.visitResponse(url);\n }\n else {\n session.visit(url, options);\n }\n };\n const event = dispatch(\"turbo:frame-missing\", {\n target: this.element,\n detail: { response, visit },\n cancelable: true,\n });\n return !event.defaultPrevented;\n }\n handleFrameMissingFromResponse(fetchResponse) {\n this.view.missing();\n this.throwFrameMissingError(fetchResponse);\n }\n throwFrameMissingError(fetchResponse) {\n const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n throw new TurboFrameMissingError(message);\n }\n async visitResponse(response) {\n const wrapped = new FetchResponse(response);\n const responseHTML = await wrapped.responseHTML;\n const { location, redirected, statusCode } = wrapped;\n return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n }\n findFrameElement(element, submitter) {\n var _a;\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n }\n async extractForeignFrameElement(container) {\n let element;\n const id = CSS.escape(this.id);\n try {\n element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n if (element) {\n return element;\n }\n element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n if (element) {\n await element.loaded;\n return await this.extractForeignFrameElement(element);\n }\n }\n catch (error) {\n console.error(error);\n return new FrameElement();\n }\n return null;\n }\n formActionIsVisitable(form, submitter) {\n const action = getAction(form, submitter);\n return locationIsVisitable(expandURL(action), this.rootLocation);\n }\n shouldInterceptNavigation(element, submitter) {\n const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n return false;\n }\n if (!this.enabled || id == \"_top\") {\n return false;\n }\n if (id) {\n const frameElement = getFrameElementById(id);\n if (frameElement) {\n return !frameElement.disabled;\n }\n }\n if (!session.elementIsNavigatable(element)) {\n return false;\n }\n if (submitter && !session.elementIsNavigatable(submitter)) {\n return false;\n }\n return true;\n }\n get id() {\n return this.element.id;\n }\n get enabled() {\n return !this.element.disabled;\n }\n get sourceURL() {\n if (this.element.src) {\n return this.element.src;\n }\n }\n set sourceURL(sourceURL) {\n this.ignoringChangesToAttribute(\"src\", () => {\n this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n });\n }\n get loadingStyle() {\n return this.element.loading;\n }\n get isLoading() {\n return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n }\n get complete() {\n return this.element.hasAttribute(\"complete\");\n }\n set complete(value) {\n this.ignoringChangesToAttribute(\"complete\", () => {\n if (value) {\n this.element.setAttribute(\"complete\", \"\");\n }\n else {\n this.element.removeAttribute(\"complete\");\n }\n });\n }\n get isActive() {\n return this.element.isActive && this.connected;\n }\n get rootLocation() {\n var _a;\n const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n return expandURL(root);\n }\n isIgnoringChangesTo(attributeName) {\n return this.ignoredAttributes.has(attributeName);\n }\n ignoringChangesToAttribute(attributeName, callback) {\n this.ignoredAttributes.add(attributeName);\n callback();\n this.ignoredAttributes.delete(attributeName);\n }\n withCurrentNavigationElement(element, callback) {\n this.currentNavigationElement = element;\n callback();\n delete this.currentNavigationElement;\n }\n}\nfunction getFrameElementById(id) {\n if (id != null) {\n const element = document.getElementById(id);\n if (element instanceof FrameElement) {\n return element;\n }\n }\n}\nfunction activateElement(element, currentURL) {\n if (element) {\n const src = element.getAttribute(\"src\");\n if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n }\n if (element.ownerDocument !== document) {\n element = document.importNode(element, true);\n }\n if (element instanceof FrameElement) {\n element.connectedCallback();\n element.disconnectedCallback();\n return element;\n }\n }\n}\n\nclass StreamElement extends HTMLElement {\n static async renderElement(newElement) {\n await newElement.performAction();\n }\n async connectedCallback() {\n try {\n await this.render();\n }\n catch (error) {\n console.error(error);\n }\n finally {\n this.disconnect();\n }\n }\n async render() {\n var _a;\n return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n const event = this.beforeRenderEvent;\n if (this.dispatchEvent(event)) {\n await nextAnimationFrame();\n await event.detail.render(this);\n }\n })()));\n }\n disconnect() {\n try {\n this.remove();\n }\n catch (_a) { }\n }\n removeDuplicateTargetChildren() {\n this.duplicateChildren.forEach((c) => c.remove());\n }\n get duplicateChildren() {\n var _a;\n const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n }\n get performAction() {\n if (this.action) {\n const actionFunction = StreamActions[this.action];\n if (actionFunction) {\n return actionFunction;\n }\n this.raise(\"unknown action\");\n }\n this.raise(\"action attribute is missing\");\n }\n get targetElements() {\n if (this.target) {\n return this.targetElementsById;\n }\n else if (this.targets) {\n return this.targetElementsByQuery;\n }\n else {\n this.raise(\"target or targets attribute is missing\");\n }\n }\n get templateContent() {\n return this.templateElement.content.cloneNode(true);\n }\n get templateElement() {\n if (this.firstElementChild === null) {\n const template = this.ownerDocument.createElement(\"template\");\n this.appendChild(template);\n return template;\n }\n else if (this.firstElementChild instanceof HTMLTemplateElement) {\n return this.firstElementChild;\n }\n this.raise(\"first child element must be a <template> element\");\n }\n get action() {\n return this.getAttribute(\"action\");\n }\n get target() {\n return this.getAttribute(\"target\");\n }\n get targets() {\n return this.getAttribute(\"targets\");\n }\n raise(message) {\n throw new Error(`${this.description}: ${message}`);\n }\n get description() {\n var _a, _b;\n return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n }\n get beforeRenderEvent() {\n return new CustomEvent(\"turbo:before-stream-render\", {\n bubbles: true,\n cancelable: true,\n detail: { newStream: this, render: StreamElement.renderElement },\n });\n }\n get targetElementsById() {\n var _a;\n const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n if (element !== null) {\n return [element];\n }\n else {\n return [];\n }\n }\n get targetElementsByQuery() {\n var _a;\n const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n if (elements.length !== 0) {\n return Array.prototype.slice.call(elements);\n }\n else {\n return [];\n }\n }\n}\n\nclass StreamSourceElement extends HTMLElement {\n constructor() {\n super(...arguments);\n this.streamSource = null;\n }\n connectedCallback() {\n this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n connectStreamSource(this.streamSource);\n }\n disconnectedCallback() {\n if (this.streamSource) {\n disconnectStreamSource(this.streamSource);\n }\n }\n get src() {\n return this.getAttribute(\"src\") || \"\";\n }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n let element = document.currentScript;\n if (!element)\n return;\n if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n return;\n element = element.parentElement;\n while (element) {\n if (element == document.body) {\n return console.warn(unindent `\n You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n Load your application\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n \u2014\u2014\n Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n `, element.outerHTML);\n }\n element = element.parentElement;\n }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n", "/*\nStimulus 3.2.1\nCopyright \u00A9 2023 Basecamp, LLC\n */\nclass EventListener {\n constructor(eventTarget, eventName, eventOptions) {\n this.eventTarget = eventTarget;\n this.eventName = eventName;\n this.eventOptions = eventOptions;\n this.unorderedBindings = new Set();\n }\n connect() {\n this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n }\n disconnect() {\n this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n }\n bindingConnected(binding) {\n this.unorderedBindings.add(binding);\n }\n bindingDisconnected(binding) {\n this.unorderedBindings.delete(binding);\n }\n handleEvent(event) {\n const extendedEvent = extendEvent(event);\n for (const binding of this.bindings) {\n if (extendedEvent.immediatePropagationStopped) {\n break;\n }\n else {\n binding.handleEvent(extendedEvent);\n }\n }\n }\n hasBindings() {\n return this.unorderedBindings.size > 0;\n }\n get bindings() {\n return Array.from(this.unorderedBindings).sort((left, right) => {\n const leftIndex = left.index, rightIndex = right.index;\n return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n });\n }\n}\nfunction extendEvent(event) {\n if (\"immediatePropagationStopped\" in event) {\n return event;\n }\n else {\n const { stopImmediatePropagation } = event;\n return Object.assign(event, {\n immediatePropagationStopped: false,\n stopImmediatePropagation() {\n this.immediatePropagationStopped = true;\n stopImmediatePropagation.call(this);\n },\n });\n }\n}\n\nclass Dispatcher {\n constructor(application) {\n this.application = application;\n this.eventListenerMaps = new Map();\n this.started = false;\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.eventListeners.forEach((eventListener) => eventListener.connect());\n }\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n }\n }\n get eventListeners() {\n return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n }\n bindingConnected(binding) {\n this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n }\n bindingDisconnected(binding, clearEventListeners = false) {\n this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n if (clearEventListeners)\n this.clearEventListenersForBinding(binding);\n }\n handleError(error, message, detail = {}) {\n this.application.handleError(error, `Error ${message}`, detail);\n }\n clearEventListenersForBinding(binding) {\n const eventListener = this.fetchEventListenerForBinding(binding);\n if (!eventListener.hasBindings()) {\n eventListener.disconnect();\n this.removeMappedEventListenerFor(binding);\n }\n }\n removeMappedEventListenerFor(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n eventListenerMap.delete(cacheKey);\n if (eventListenerMap.size == 0)\n this.eventListenerMaps.delete(eventTarget);\n }\n fetchEventListenerForBinding(binding) {\n const { eventTarget, eventName, eventOptions } = binding;\n return this.fetchEventListener(eventTarget, eventName, eventOptions);\n }\n fetchEventListener(eventTarget, eventName, eventOptions) {\n const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n const cacheKey = this.cacheKey(eventName, eventOptions);\n let eventListener = eventListenerMap.get(cacheKey);\n if (!eventListener) {\n eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n eventListenerMap.set(cacheKey, eventListener);\n }\n return eventListener;\n }\n createEventListener(eventTarget, eventName, eventOptions) {\n const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n if (this.started) {\n eventListener.connect();\n }\n return eventListener;\n }\n fetchEventListenerMapForEventTarget(eventTarget) {\n let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n if (!eventListenerMap) {\n eventListenerMap = new Map();\n this.eventListenerMaps.set(eventTarget, eventListenerMap);\n }\n return eventListenerMap;\n }\n cacheKey(eventName, eventOptions) {\n const parts = [eventName];\n Object.keys(eventOptions)\n .sort()\n .forEach((key) => {\n parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n });\n return parts.join(\":\");\n }\n}\n\nconst defaultActionDescriptorFilters = {\n stop({ event, value }) {\n if (value)\n event.stopPropagation();\n return true;\n },\n prevent({ event, value }) {\n if (value)\n event.preventDefault();\n return true;\n },\n self({ event, value, element }) {\n if (value) {\n return element === event.target;\n }\n else {\n return true;\n }\n },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n const source = descriptorString.trim();\n const matches = source.match(descriptorPattern) || [];\n let eventName = matches[2];\n let keyFilter = matches[3];\n if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n eventName += `.${keyFilter}`;\n keyFilter = \"\";\n }\n return {\n eventTarget: parseEventTarget(matches[4]),\n eventName,\n eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n identifier: matches[5],\n methodName: matches[6],\n keyFilter: matches[1] || keyFilter,\n };\n}\nfunction parseEventTarget(eventTargetName) {\n if (eventTargetName == \"window\") {\n return window;\n }\n else if (eventTargetName == \"document\") {\n return document;\n }\n}\nfunction parseEventOptions(eventOptions) {\n return eventOptions\n .split(\":\")\n .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n if (eventTarget == window) {\n return \"window\";\n }\n else if (eventTarget == document) {\n return \"document\";\n }\n}\n\nfunction camelize(value) {\n return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n constructor(element, index, descriptor, schema) {\n this.element = element;\n this.index = index;\n this.eventTarget = descriptor.eventTarget || element;\n this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n this.eventOptions = descriptor.eventOptions || {};\n this.identifier = descriptor.identifier || error(\"missing identifier\");\n this.methodName = descriptor.methodName || error(\"missing method name\");\n this.keyFilter = descriptor.keyFilter || \"\";\n this.schema = schema;\n }\n static forToken(token, schema) {\n return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n }\n toString() {\n const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n }\n shouldIgnoreKeyboardEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = this.keyFilter.split(\"+\");\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n if (!standardFilter) {\n return false;\n }\n if (!hasProperty(this.keyMappings, standardFilter)) {\n error(`contains unknown key filter: ${this.keyFilter}`);\n }\n return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n }\n shouldIgnoreMouseEvent(event) {\n if (!this.keyFilter) {\n return false;\n }\n const filters = [this.keyFilter];\n if (this.keyFilterDissatisfied(event, filters)) {\n return true;\n }\n return false;\n }\n get params() {\n const params = {};\n const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n for (const { name, value } of Array.from(this.element.attributes)) {\n const match = name.match(pattern);\n const key = match && match[1];\n if (key) {\n params[camelize(key)] = typecast(value);\n }\n }\n return params;\n }\n get eventTargetName() {\n return stringifyEventTarget(this.eventTarget);\n }\n get keyMappings() {\n return this.schema.keyMappings;\n }\n keyFilterDissatisfied(event, filters) {\n const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n }\n}\nconst defaultEventNames = {\n a: () => \"click\",\n button: () => \"click\",\n form: () => \"submit\",\n details: () => \"toggle\",\n input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n select: () => \"change\",\n textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n const tagName = element.tagName.toLowerCase();\n if (tagName in defaultEventNames) {\n return defaultEventNames[tagName](element);\n }\n}\nfunction error(message) {\n throw new Error(message);\n}\nfunction typecast(value) {\n try {\n return JSON.parse(value);\n }\n catch (o_O) {\n return value;\n }\n}\n\nclass Binding {\n constructor(context, action) {\n this.context = context;\n this.action = action;\n }\n get index() {\n return this.action.index;\n }\n get eventTarget() {\n return this.action.eventTarget;\n }\n get eventOptions() {\n return this.action.eventOptions;\n }\n get identifier() {\n return this.context.identifier;\n }\n handleEvent(event) {\n const actionEvent = this.prepareActionEvent(event);\n if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n this.invokeWithEvent(actionEvent);\n }\n }\n get eventName() {\n return this.action.eventName;\n }\n get method() {\n const method = this.controller[this.methodName];\n if (typeof method == \"function\") {\n return method;\n }\n throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n }\n applyEventModifiers(event) {\n const { element } = this.action;\n const { actionDescriptorFilters } = this.context.application;\n const { controller } = this.context;\n let passes = true;\n for (const [name, value] of Object.entries(this.eventOptions)) {\n if (name in actionDescriptorFilters) {\n const filter = actionDescriptorFilters[name];\n passes = passes && filter({ name, value, event, element, controller });\n }\n else {\n continue;\n }\n }\n return passes;\n }\n prepareActionEvent(event) {\n return Object.assign(event, { params: this.action.params });\n }\n invokeWithEvent(event) {\n const { target, currentTarget } = event;\n try {\n this.method.call(this.controller, event);\n this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n }\n catch (error) {\n const { identifier, controller, element, index } = this;\n const detail = { identifier, controller, element, index, event };\n this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n }\n }\n willBeInvokedByEvent(event) {\n const eventTarget = event.target;\n if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n return false;\n }\n if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n return false;\n }\n if (this.element === eventTarget) {\n return true;\n }\n else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n return this.scope.containsElement(eventTarget);\n }\n else {\n return this.scope.containsElement(this.action.element);\n }\n }\n get controller() {\n return this.context.controller;\n }\n get methodName() {\n return this.action.methodName;\n }\n get element() {\n return this.scope.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nclass ElementObserver {\n constructor(element, delegate) {\n this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n this.element = element;\n this.started = false;\n this.delegate = delegate;\n this.elements = new Set();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.refresh();\n }\n }\n pause(callback) {\n if (this.started) {\n this.mutationObserver.disconnect();\n this.started = false;\n }\n callback();\n if (!this.started) {\n this.mutationObserver.observe(this.element, this.mutationObserverInit);\n this.started = true;\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n const matches = new Set(this.matchElementsInTree());\n for (const element of Array.from(this.elements)) {\n if (!matches.has(element)) {\n this.removeElement(element);\n }\n }\n for (const element of Array.from(matches)) {\n this.addElement(element);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n if (mutation.type == \"attributes\") {\n this.processAttributeChange(mutation.target, mutation.attributeName);\n }\n else if (mutation.type == \"childList\") {\n this.processRemovedNodes(mutation.removedNodes);\n this.processAddedNodes(mutation.addedNodes);\n }\n }\n processAttributeChange(element, attributeName) {\n if (this.elements.has(element)) {\n if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n this.delegate.elementAttributeChanged(element, attributeName);\n }\n else {\n this.removeElement(element);\n }\n }\n else if (this.matchElement(element)) {\n this.addElement(element);\n }\n }\n processRemovedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element) {\n this.processTree(element, this.removeElement);\n }\n }\n }\n processAddedNodes(nodes) {\n for (const node of Array.from(nodes)) {\n const element = this.elementFromNode(node);\n if (element && this.elementIsActive(element)) {\n this.processTree(element, this.addElement);\n }\n }\n }\n matchElement(element) {\n return this.delegate.matchElement(element);\n }\n matchElementsInTree(tree = this.element) {\n return this.delegate.matchElementsInTree(tree);\n }\n processTree(tree, processor) {\n for (const element of this.matchElementsInTree(tree)) {\n processor.call(this, element);\n }\n }\n elementFromNode(node) {\n if (node.nodeType == Node.ELEMENT_NODE) {\n return node;\n }\n }\n elementIsActive(element) {\n if (element.isConnected != this.element.isConnected) {\n return false;\n }\n else {\n return this.element.contains(element);\n }\n }\n addElement(element) {\n if (!this.elements.has(element)) {\n if (this.elementIsActive(element)) {\n this.elements.add(element);\n if (this.delegate.elementMatched) {\n this.delegate.elementMatched(element);\n }\n }\n }\n }\n removeElement(element) {\n if (this.elements.has(element)) {\n this.elements.delete(element);\n if (this.delegate.elementUnmatched) {\n this.delegate.elementUnmatched(element);\n }\n }\n }\n}\n\nclass AttributeObserver {\n constructor(element, attributeName, delegate) {\n this.attributeName = attributeName;\n this.delegate = delegate;\n this.elementObserver = new ElementObserver(element, this);\n }\n get element() {\n return this.elementObserver.element;\n }\n get selector() {\n return `[${this.attributeName}]`;\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get started() {\n return this.elementObserver.started;\n }\n matchElement(element) {\n return element.hasAttribute(this.attributeName);\n }\n matchElementsInTree(tree) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(this.selector));\n return match.concat(matches);\n }\n elementMatched(element) {\n if (this.delegate.elementMatchedAttribute) {\n this.delegate.elementMatchedAttribute(element, this.attributeName);\n }\n }\n elementUnmatched(element) {\n if (this.delegate.elementUnmatchedAttribute) {\n this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n }\n }\n elementAttributeChanged(element, attributeName) {\n if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n this.delegate.elementAttributeValueChanged(element, attributeName);\n }\n }\n}\n\nfunction add(map, key, value) {\n fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n fetch(map, key).delete(value);\n prune(map, key);\n}\nfunction fetch(map, key) {\n let values = map.get(key);\n if (!values) {\n values = new Set();\n map.set(key, values);\n }\n return values;\n}\nfunction prune(map, key) {\n const values = map.get(key);\n if (values != null && values.size == 0) {\n map.delete(key);\n }\n}\n\nclass Multimap {\n constructor() {\n this.valuesByKey = new Map();\n }\n get keys() {\n return Array.from(this.valuesByKey.keys());\n }\n get values() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n }\n get size() {\n const sets = Array.from(this.valuesByKey.values());\n return sets.reduce((size, set) => size + set.size, 0);\n }\n add(key, value) {\n add(this.valuesByKey, key, value);\n }\n delete(key, value) {\n del(this.valuesByKey, key, value);\n }\n has(key, value) {\n const values = this.valuesByKey.get(key);\n return values != null && values.has(value);\n }\n hasKey(key) {\n return this.valuesByKey.has(key);\n }\n hasValue(value) {\n const sets = Array.from(this.valuesByKey.values());\n return sets.some((set) => set.has(value));\n }\n getValuesForKey(key) {\n const values = this.valuesByKey.get(key);\n return values ? Array.from(values) : [];\n }\n getKeysForValue(value) {\n return Array.from(this.valuesByKey)\n .filter(([_key, values]) => values.has(value))\n .map(([key, _values]) => key);\n }\n}\n\nclass IndexedMultimap extends Multimap {\n constructor() {\n super();\n this.keysByValue = new Map();\n }\n get values() {\n return Array.from(this.keysByValue.keys());\n }\n add(key, value) {\n super.add(key, value);\n add(this.keysByValue, value, key);\n }\n delete(key, value) {\n super.delete(key, value);\n del(this.keysByValue, value, key);\n }\n hasValue(value) {\n return this.keysByValue.has(value);\n }\n getKeysForValue(value) {\n const set = this.keysByValue.get(value);\n return set ? Array.from(set) : [];\n }\n}\n\nclass SelectorObserver {\n constructor(element, selector, delegate, details) {\n this._selector = selector;\n this.details = details;\n this.elementObserver = new ElementObserver(element, this);\n this.delegate = delegate;\n this.matchesByElement = new Multimap();\n }\n get started() {\n return this.elementObserver.started;\n }\n get selector() {\n return this._selector;\n }\n set selector(selector) {\n this._selector = selector;\n this.refresh();\n }\n start() {\n this.elementObserver.start();\n }\n pause(callback) {\n this.elementObserver.pause(callback);\n }\n stop() {\n this.elementObserver.stop();\n }\n refresh() {\n this.elementObserver.refresh();\n }\n get element() {\n return this.elementObserver.element;\n }\n matchElement(element) {\n const { selector } = this;\n if (selector) {\n const matches = element.matches(selector);\n if (this.delegate.selectorMatchElement) {\n return matches && this.delegate.selectorMatchElement(element, this.details);\n }\n return matches;\n }\n else {\n return false;\n }\n }\n matchElementsInTree(tree) {\n const { selector } = this;\n if (selector) {\n const match = this.matchElement(tree) ? [tree] : [];\n const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n return match.concat(matches);\n }\n else {\n return [];\n }\n }\n elementMatched(element) {\n const { selector } = this;\n if (selector) {\n this.selectorMatched(element, selector);\n }\n }\n elementUnmatched(element) {\n const selectors = this.matchesByElement.getKeysForValue(element);\n for (const selector of selectors) {\n this.selectorUnmatched(element, selector);\n }\n }\n elementAttributeChanged(element, _attributeName) {\n const { selector } = this;\n if (selector) {\n const matches = this.matchElement(element);\n const matchedBefore = this.matchesByElement.has(selector, element);\n if (matches && !matchedBefore) {\n this.selectorMatched(element, selector);\n }\n else if (!matches && matchedBefore) {\n this.selectorUnmatched(element, selector);\n }\n }\n }\n selectorMatched(element, selector) {\n this.delegate.selectorMatched(element, selector, this.details);\n this.matchesByElement.add(selector, element);\n }\n selectorUnmatched(element, selector) {\n this.delegate.selectorUnmatched(element, selector, this.details);\n this.matchesByElement.delete(selector, element);\n }\n}\n\nclass StringMapObserver {\n constructor(element, delegate) {\n this.element = element;\n this.delegate = delegate;\n this.started = false;\n this.stringMap = new Map();\n this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n }\n start() {\n if (!this.started) {\n this.started = true;\n this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n this.refresh();\n }\n }\n stop() {\n if (this.started) {\n this.mutationObserver.takeRecords();\n this.mutationObserver.disconnect();\n this.started = false;\n }\n }\n refresh() {\n if (this.started) {\n for (const attributeName of this.knownAttributeNames) {\n this.refreshAttribute(attributeName, null);\n }\n }\n }\n processMutations(mutations) {\n if (this.started) {\n for (const mutation of mutations) {\n this.processMutation(mutation);\n }\n }\n }\n processMutation(mutation) {\n const attributeName = mutation.attributeName;\n if (attributeName) {\n this.refreshAttribute(attributeName, mutation.oldValue);\n }\n }\n refreshAttribute(attributeName, oldValue) {\n const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n if (key != null) {\n if (!this.stringMap.has(attributeName)) {\n this.stringMapKeyAdded(key, attributeName);\n }\n const value = this.element.getAttribute(attributeName);\n if (this.stringMap.get(attributeName) != value) {\n this.stringMapValueChanged(value, key, oldValue);\n }\n if (value == null) {\n const oldValue = this.stringMap.get(attributeName);\n this.stringMap.delete(attributeName);\n if (oldValue)\n this.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n else {\n this.stringMap.set(attributeName, value);\n }\n }\n }\n stringMapKeyAdded(key, attributeName) {\n if (this.delegate.stringMapKeyAdded) {\n this.delegate.stringMapKeyAdded(key, attributeName);\n }\n }\n stringMapValueChanged(value, key, oldValue) {\n if (this.delegate.stringMapValueChanged) {\n this.delegate.stringMapValueChanged(value, key, oldValue);\n }\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n if (this.delegate.stringMapKeyRemoved) {\n this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n }\n }\n get knownAttributeNames() {\n return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n }\n get currentAttributeNames() {\n return Array.from(this.element.attributes).map((attribute) => attribute.name);\n }\n get recordedAttributeNames() {\n return Array.from(this.stringMap.keys());\n }\n}\n\nclass TokenListObserver {\n constructor(element, attributeName, delegate) {\n this.attributeObserver = new AttributeObserver(element, attributeName, this);\n this.delegate = delegate;\n this.tokensByElement = new Multimap();\n }\n get started() {\n return this.attributeObserver.started;\n }\n start() {\n this.attributeObserver.start();\n }\n pause(callback) {\n this.attributeObserver.pause(callback);\n }\n stop() {\n this.attributeObserver.stop();\n }\n refresh() {\n this.attributeObserver.refresh();\n }\n get element() {\n return this.attributeObserver.element;\n }\n get attributeName() {\n return this.attributeObserver.attributeName;\n }\n elementMatchedAttribute(element) {\n this.tokensMatched(this.readTokensForElement(element));\n }\n elementAttributeValueChanged(element) {\n const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n this.tokensUnmatched(unmatchedTokens);\n this.tokensMatched(matchedTokens);\n }\n elementUnmatchedAttribute(element) {\n this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n }\n tokensMatched(tokens) {\n tokens.forEach((token) => this.tokenMatched(token));\n }\n tokensUnmatched(tokens) {\n tokens.forEach((token) => this.tokenUnmatched(token));\n }\n tokenMatched(token) {\n this.delegate.tokenMatched(token);\n this.tokensByElement.add(token.element, token);\n }\n tokenUnmatched(token) {\n this.delegate.tokenUnmatched(token);\n this.tokensByElement.delete(token.element, token);\n }\n refreshTokensForElement(element) {\n const previousTokens = this.tokensByElement.getValuesForKey(element);\n const currentTokens = this.readTokensForElement(element);\n const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n if (firstDifferingIndex == -1) {\n return [[], []];\n }\n else {\n return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n }\n }\n readTokensForElement(element) {\n const attributeName = this.attributeName;\n const tokenString = element.getAttribute(attributeName) || \"\";\n return parseTokenString(tokenString, element, attributeName);\n }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n return tokenString\n .trim()\n .split(/\\s+/)\n .filter((content) => content.length)\n .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n const length = Math.max(left.length, right.length);\n return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n constructor(element, attributeName, delegate) {\n this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n this.delegate = delegate;\n this.parseResultsByToken = new WeakMap();\n this.valuesByTokenByElement = new WeakMap();\n }\n get started() {\n return this.tokenListObserver.started;\n }\n start() {\n this.tokenListObserver.start();\n }\n stop() {\n this.tokenListObserver.stop();\n }\n refresh() {\n this.tokenListObserver.refresh();\n }\n get element() {\n return this.tokenListObserver.element;\n }\n get attributeName() {\n return this.tokenListObserver.attributeName;\n }\n tokenMatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).set(token, value);\n this.delegate.elementMatchedValue(element, value);\n }\n }\n tokenUnmatched(token) {\n const { element } = token;\n const { value } = this.fetchParseResultForToken(token);\n if (value) {\n this.fetchValuesByTokenForElement(element).delete(token);\n this.delegate.elementUnmatchedValue(element, value);\n }\n }\n fetchParseResultForToken(token) {\n let parseResult = this.parseResultsByToken.get(token);\n if (!parseResult) {\n parseResult = this.parseToken(token);\n this.parseResultsByToken.set(token, parseResult);\n }\n return parseResult;\n }\n fetchValuesByTokenForElement(element) {\n let valuesByToken = this.valuesByTokenByElement.get(element);\n if (!valuesByToken) {\n valuesByToken = new Map();\n this.valuesByTokenByElement.set(element, valuesByToken);\n }\n return valuesByToken;\n }\n parseToken(token) {\n try {\n const value = this.delegate.parseValueForToken(token);\n return { value };\n }\n catch (error) {\n return { error };\n }\n }\n}\n\nclass BindingObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.bindingsByAction = new Map();\n }\n start() {\n if (!this.valueListObserver) {\n this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n this.valueListObserver.start();\n }\n }\n stop() {\n if (this.valueListObserver) {\n this.valueListObserver.stop();\n delete this.valueListObserver;\n this.disconnectAllActions();\n }\n }\n get element() {\n return this.context.element;\n }\n get identifier() {\n return this.context.identifier;\n }\n get actionAttribute() {\n return this.schema.actionAttribute;\n }\n get schema() {\n return this.context.schema;\n }\n get bindings() {\n return Array.from(this.bindingsByAction.values());\n }\n connectAction(action) {\n const binding = new Binding(this.context, action);\n this.bindingsByAction.set(action, binding);\n this.delegate.bindingConnected(binding);\n }\n disconnectAction(action) {\n const binding = this.bindingsByAction.get(action);\n if (binding) {\n this.bindingsByAction.delete(action);\n this.delegate.bindingDisconnected(binding);\n }\n }\n disconnectAllActions() {\n this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n this.bindingsByAction.clear();\n }\n parseValueForToken(token) {\n const action = Action.forToken(token, this.schema);\n if (action.identifier == this.identifier) {\n return action;\n }\n }\n elementMatchedValue(element, action) {\n this.connectAction(action);\n }\n elementUnmatchedValue(element, action) {\n this.disconnectAction(action);\n }\n}\n\nclass ValueObserver {\n constructor(context, receiver) {\n this.context = context;\n this.receiver = receiver;\n this.stringMapObserver = new StringMapObserver(this.element, this);\n this.valueDescriptorMap = this.controller.valueDescriptorMap;\n }\n start() {\n this.stringMapObserver.start();\n this.invokeChangedCallbacksForDefaultValues();\n }\n stop() {\n this.stringMapObserver.stop();\n }\n get element() {\n return this.context.element;\n }\n get controller() {\n return this.context.controller;\n }\n getStringMapKeyForAttribute(attributeName) {\n if (attributeName in this.valueDescriptorMap) {\n return this.valueDescriptorMap[attributeName].name;\n }\n }\n stringMapKeyAdded(key, attributeName) {\n const descriptor = this.valueDescriptorMap[attributeName];\n if (!this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n }\n }\n stringMapValueChanged(value, name, oldValue) {\n const descriptor = this.valueDescriptorNameMap[name];\n if (value === null)\n return;\n if (oldValue === null) {\n oldValue = descriptor.writer(descriptor.defaultValue);\n }\n this.invokeChangedCallback(name, value, oldValue);\n }\n stringMapKeyRemoved(key, attributeName, oldValue) {\n const descriptor = this.valueDescriptorNameMap[key];\n if (this.hasValue(key)) {\n this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n }\n else {\n this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n }\n }\n invokeChangedCallbacksForDefaultValues() {\n for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n if (defaultValue != undefined && !this.controller.data.has(key)) {\n this.invokeChangedCallback(name, writer(defaultValue), undefined);\n }\n }\n }\n invokeChangedCallback(name, rawValue, rawOldValue) {\n const changedMethodName = `${name}Changed`;\n const changedMethod = this.receiver[changedMethodName];\n if (typeof changedMethod == \"function\") {\n const descriptor = this.valueDescriptorNameMap[name];\n try {\n const value = descriptor.reader(rawValue);\n let oldValue = rawOldValue;\n if (rawOldValue) {\n oldValue = descriptor.reader(rawOldValue);\n }\n changedMethod.call(this.receiver, value, oldValue);\n }\n catch (error) {\n if (error instanceof TypeError) {\n error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n }\n throw error;\n }\n }\n }\n get valueDescriptors() {\n const { valueDescriptorMap } = this;\n return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n }\n get valueDescriptorNameMap() {\n const descriptors = {};\n Object.keys(this.valueDescriptorMap).forEach((key) => {\n const descriptor = this.valueDescriptorMap[key];\n descriptors[descriptor.name] = descriptor;\n });\n return descriptors;\n }\n hasValue(attributeName) {\n const descriptor = this.valueDescriptorNameMap[attributeName];\n const hasMethodName = `has${capitalize(descriptor.name)}`;\n return this.receiver[hasMethodName];\n }\n}\n\nclass TargetObserver {\n constructor(context, delegate) {\n this.context = context;\n this.delegate = delegate;\n this.targetsByName = new Multimap();\n }\n start() {\n if (!this.tokenListObserver) {\n this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n this.tokenListObserver.start();\n }\n }\n stop() {\n if (this.tokenListObserver) {\n this.disconnectAllTargets();\n this.tokenListObserver.stop();\n delete this.tokenListObserver;\n }\n }\n tokenMatched({ element, content: name }) {\n if (this.scope.containsElement(element)) {\n this.connectTarget(element, name);\n }\n }\n tokenUnmatched({ element, content: name }) {\n this.disconnectTarget(element, name);\n }\n connectTarget(element, name) {\n var _a;\n if (!this.targetsByName.has(name, element)) {\n this.targetsByName.add(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n }\n }\n disconnectTarget(element, name) {\n var _a;\n if (this.targetsByName.has(name, element)) {\n this.targetsByName.delete(name, element);\n (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n }\n }\n disconnectAllTargets() {\n for (const name of this.targetsByName.keys) {\n for (const element of this.targetsByName.getValuesForKey(name)) {\n this.disconnectTarget(element, name);\n }\n }\n }\n get attributeName() {\n return `data-${this.context.identifier}-target`;\n }\n get element() {\n return this.context.element;\n }\n get scope() {\n return this.context.scope;\n }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return Array.from(ancestors.reduce((values, constructor) => {\n getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n return values;\n }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n const ancestors = getAncestorsForConstructor(constructor);\n return ancestors.reduce((pairs, constructor) => {\n pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n return pairs;\n }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n const ancestors = [];\n while (constructor) {\n ancestors.push(constructor);\n constructor = Object.getPrototypeOf(constructor);\n }\n return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n const definition = constructor[propertyName];\n return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n const definition = constructor[propertyName];\n return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n constructor(context, delegate) {\n this.started = false;\n this.context = context;\n this.delegate = delegate;\n this.outletsByName = new Multimap();\n this.outletElementsByName = new Multimap();\n this.selectorObserverMap = new Map();\n this.attributeObserverMap = new Map();\n }\n start() {\n if (!this.started) {\n this.outletDefinitions.forEach((outletName) => {\n this.setupSelectorObserverForOutlet(outletName);\n this.setupAttributeObserverForOutlet(outletName);\n });\n this.started = true;\n this.dependentContexts.forEach((context) => context.refresh());\n }\n }\n refresh() {\n this.selectorObserverMap.forEach((observer) => observer.refresh());\n this.attributeObserverMap.forEach((observer) => observer.refresh());\n }\n stop() {\n if (this.started) {\n this.started = false;\n this.disconnectAllOutlets();\n this.stopSelectorObservers();\n this.stopAttributeObservers();\n }\n }\n stopSelectorObservers() {\n if (this.selectorObserverMap.size > 0) {\n this.selectorObserverMap.forEach((observer) => observer.stop());\n this.selectorObserverMap.clear();\n }\n }\n stopAttributeObservers() {\n if (this.attributeObserverMap.size > 0) {\n this.attributeObserverMap.forEach((observer) => observer.stop());\n this.attributeObserverMap.clear();\n }\n }\n selectorMatched(element, _selector, { outletName }) {\n const outlet = this.getOutlet(element, outletName);\n if (outlet) {\n this.connectOutlet(outlet, element, outletName);\n }\n }\n selectorUnmatched(element, _selector, { outletName }) {\n const outlet = this.getOutletFromMap(element, outletName);\n if (outlet) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n selectorMatchElement(element, { outletName }) {\n const selector = this.selector(outletName);\n const hasOutlet = this.hasOutlet(element, outletName);\n const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n if (selector) {\n return hasOutlet && hasOutletController && element.matches(selector);\n }\n else {\n return false;\n }\n }\n elementMatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementAttributeValueChanged(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n elementUnmatchedAttribute(_element, attributeName) {\n const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n if (outletName) {\n this.updateSelectorObserverForOutlet(outletName);\n }\n }\n connectOutlet(outlet, element, outletName) {\n var _a;\n if (!this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.add(outletName, outlet);\n this.outletElementsByName.add(outletName, element);\n (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n }\n }\n disconnectOutlet(outlet, element, outletName) {\n var _a;\n if (this.outletElementsByName.has(outletName, element)) {\n this.outletsByName.delete(outletName, outlet);\n this.outletElementsByName.delete(outletName, element);\n (_a = this.selectorObserverMap\n .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n }\n }\n disconnectAllOutlets() {\n for (const outletName of this.outletElementsByName.keys) {\n for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n this.disconnectOutlet(outlet, element, outletName);\n }\n }\n }\n }\n updateSelectorObserverForOutlet(outletName) {\n const observer = this.selectorObserverMap.get(outletName);\n if (observer) {\n observer.selector = this.selector(outletName);\n }\n }\n setupSelectorObserverForOutlet(outletName) {\n const selector = this.selector(outletName);\n const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n this.selectorObserverMap.set(outletName, selectorObserver);\n selectorObserver.start();\n }\n setupAttributeObserverForOutlet(outletName) {\n const attributeName = this.attributeNameForOutletName(outletName);\n const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n this.attributeObserverMap.set(outletName, attributeObserver);\n attributeObserver.start();\n }\n selector(outletName) {\n return this.scope.outlets.getSelectorForOutletName(outletName);\n }\n attributeNameForOutletName(outletName) {\n return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n }\n getOutletNameFromOutletAttributeName(attributeName) {\n return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n }\n get outletDependencies() {\n const dependencies = new Multimap();\n this.router.modules.forEach((module) => {\n const constructor = module.definition.controllerConstructor;\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n });\n return dependencies;\n }\n get outletDefinitions() {\n return this.outletDependencies.getKeysForValue(this.identifier);\n }\n get dependentControllerIdentifiers() {\n return this.outletDependencies.getValuesForKey(this.identifier);\n }\n get dependentContexts() {\n const identifiers = this.dependentControllerIdentifiers;\n return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n }\n hasOutlet(element, outletName) {\n return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n }\n getOutlet(element, outletName) {\n return this.application.getControllerForElementAndIdentifier(element, outletName);\n }\n getOutletFromMap(element, outletName) {\n return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n }\n get scope() {\n return this.context.scope;\n }\n get schema() {\n return this.context.schema;\n }\n get identifier() {\n return this.context.identifier;\n }\n get application() {\n return this.context.application;\n }\n get router() {\n return this.application.router;\n }\n}\n\nclass Context {\n constructor(module, scope) {\n this.logDebugActivity = (functionName, detail = {}) => {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.logDebugActivity(this.identifier, functionName, detail);\n };\n this.module = module;\n this.scope = scope;\n this.controller = new module.controllerConstructor(this);\n this.bindingObserver = new BindingObserver(this, this.dispatcher);\n this.valueObserver = new ValueObserver(this, this.controller);\n this.targetObserver = new TargetObserver(this, this);\n this.outletObserver = new OutletObserver(this, this);\n try {\n this.controller.initialize();\n this.logDebugActivity(\"initialize\");\n }\n catch (error) {\n this.handleError(error, \"initializing controller\");\n }\n }\n connect() {\n this.bindingObserver.start();\n this.valueObserver.start();\n this.targetObserver.start();\n this.outletObserver.start();\n try {\n this.controller.connect();\n this.logDebugActivity(\"connect\");\n }\n catch (error) {\n this.handleError(error, \"connecting controller\");\n }\n }\n refresh() {\n this.outletObserver.refresh();\n }\n disconnect() {\n try {\n this.controller.disconnect();\n this.logDebugActivity(\"disconnect\");\n }\n catch (error) {\n this.handleError(error, \"disconnecting controller\");\n }\n this.outletObserver.stop();\n this.targetObserver.stop();\n this.valueObserver.stop();\n this.bindingObserver.stop();\n }\n get application() {\n return this.module.application;\n }\n get identifier() {\n return this.module.identifier;\n }\n get schema() {\n return this.application.schema;\n }\n get dispatcher() {\n return this.application.dispatcher;\n }\n get element() {\n return this.scope.element;\n }\n get parentElement() {\n return this.element.parentElement;\n }\n handleError(error, message, detail = {}) {\n const { identifier, controller, element } = this;\n detail = Object.assign({ identifier, controller, element }, detail);\n this.application.handleError(error, `Error ${message}`, detail);\n }\n targetConnected(element, name) {\n this.invokeControllerMethod(`${name}TargetConnected`, element);\n }\n targetDisconnected(element, name) {\n this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n }\n outletConnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n }\n outletDisconnected(outlet, element, name) {\n this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n }\n invokeControllerMethod(methodName, ...args) {\n const controller = this.controller;\n if (typeof controller[methodName] == \"function\") {\n controller[methodName](...args);\n }\n }\n}\n\nfunction bless(constructor) {\n return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n const shadowConstructor = extend(constructor);\n const shadowProperties = getShadowProperties(constructor.prototype, properties);\n Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n return blessings.reduce((blessedProperties, blessing) => {\n const properties = blessing(constructor);\n for (const key in properties) {\n const descriptor = blessedProperties[key] || {};\n blessedProperties[key] = Object.assign(descriptor, properties[key]);\n }\n return blessedProperties;\n }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n return getOwnKeys(properties).reduce((shadowProperties, key) => {\n const descriptor = getShadowedDescriptor(prototype, properties, key);\n if (descriptor) {\n Object.assign(shadowProperties, { [key]: descriptor });\n }\n return shadowProperties;\n }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n if (!shadowedByValue) {\n const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n if (shadowingDescriptor) {\n descriptor.get = shadowingDescriptor.get || descriptor.get;\n descriptor.set = shadowingDescriptor.set || descriptor.set;\n }\n return descriptor;\n }\n}\nconst getOwnKeys = (() => {\n if (typeof Object.getOwnPropertySymbols == \"function\") {\n return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n }\n else {\n return Object.getOwnPropertyNames;\n }\n})();\nconst extend = (() => {\n function extendWithReflect(constructor) {\n function extended() {\n return Reflect.construct(constructor, arguments, new.target);\n }\n extended.prototype = Object.create(constructor.prototype, {\n constructor: { value: extended },\n });\n Reflect.setPrototypeOf(extended, constructor);\n return extended;\n }\n function testReflectExtension() {\n const a = function () {\n this.a.call(this);\n };\n const b = extendWithReflect(a);\n b.prototype.a = function () { };\n return new b();\n }\n try {\n testReflectExtension();\n return extendWithReflect;\n }\n catch (error) {\n return (constructor) => class extended extends constructor {\n };\n }\n})();\n\nfunction blessDefinition(definition) {\n return {\n identifier: definition.identifier,\n controllerConstructor: bless(definition.controllerConstructor),\n };\n}\n\nclass Module {\n constructor(application, definition) {\n this.application = application;\n this.definition = blessDefinition(definition);\n this.contextsByScope = new WeakMap();\n this.connectedContexts = new Set();\n }\n get identifier() {\n return this.definition.identifier;\n }\n get controllerConstructor() {\n return this.definition.controllerConstructor;\n }\n get contexts() {\n return Array.from(this.connectedContexts);\n }\n connectContextForScope(scope) {\n const context = this.fetchContextForScope(scope);\n this.connectedContexts.add(context);\n context.connect();\n }\n disconnectContextForScope(scope) {\n const context = this.contextsByScope.get(scope);\n if (context) {\n this.connectedContexts.delete(context);\n context.disconnect();\n }\n }\n fetchContextForScope(scope) {\n let context = this.contextsByScope.get(scope);\n if (!context) {\n context = new Context(this, scope);\n this.contextsByScope.set(scope, context);\n }\n return context;\n }\n}\n\nclass ClassMap {\n constructor(scope) {\n this.scope = scope;\n }\n has(name) {\n return this.data.has(this.getDataKey(name));\n }\n get(name) {\n return this.getAll(name)[0];\n }\n getAll(name) {\n const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n return tokenize(tokenString);\n }\n getAttributeName(name) {\n return this.data.getAttributeNameForKey(this.getDataKey(name));\n }\n getDataKey(name) {\n return `${name}-class`;\n }\n get data() {\n return this.scope.data;\n }\n}\n\nclass DataMap {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.getAttribute(name);\n }\n set(key, value) {\n const name = this.getAttributeNameForKey(key);\n this.element.setAttribute(name, value);\n return this.get(key);\n }\n has(key) {\n const name = this.getAttributeNameForKey(key);\n return this.element.hasAttribute(name);\n }\n delete(key) {\n if (this.has(key)) {\n const name = this.getAttributeNameForKey(key);\n this.element.removeAttribute(name);\n return true;\n }\n else {\n return false;\n }\n }\n getAttributeNameForKey(key) {\n return `data-${this.identifier}-${dasherize(key)}`;\n }\n}\n\nclass Guide {\n constructor(logger) {\n this.warnedKeysByObject = new WeakMap();\n this.logger = logger;\n }\n warn(object, key, message) {\n let warnedKeys = this.warnedKeysByObject.get(object);\n if (!warnedKeys) {\n warnedKeys = new Set();\n this.warnedKeysByObject.set(object, warnedKeys);\n }\n if (!warnedKeys.has(key)) {\n warnedKeys.add(key);\n this.logger.warn(message, object);\n }\n }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n constructor(scope) {\n this.scope = scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(targetName) {\n return this.find(targetName) != null;\n }\n find(...targetNames) {\n return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n }\n findAll(...targetNames) {\n return targetNames.reduce((targets, targetName) => [\n ...targets,\n ...this.findAllTargets(targetName),\n ...this.findAllLegacyTargets(targetName),\n ], []);\n }\n findTarget(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findElement(selector);\n }\n findAllTargets(targetName) {\n const selector = this.getSelectorForTargetName(targetName);\n return this.scope.findAllElements(selector);\n }\n getSelectorForTargetName(targetName) {\n const attributeName = this.schema.targetAttributeForScope(this.identifier);\n return attributeValueContainsToken(attributeName, targetName);\n }\n findLegacyTarget(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.deprecate(this.scope.findElement(selector), targetName);\n }\n findAllLegacyTargets(targetName) {\n const selector = this.getLegacySelectorForTargetName(targetName);\n return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n }\n getLegacySelectorForTargetName(targetName) {\n const targetDescriptor = `${this.identifier}.${targetName}`;\n return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n }\n deprecate(element, targetName) {\n if (element) {\n const { identifier } = this;\n const attributeName = this.schema.targetAttribute;\n const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n }\n return element;\n }\n get guide() {\n return this.scope.guide;\n }\n}\n\nclass OutletSet {\n constructor(scope, controllerElement) {\n this.scope = scope;\n this.controllerElement = controllerElement;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get schema() {\n return this.scope.schema;\n }\n has(outletName) {\n return this.find(outletName) != null;\n }\n find(...outletNames) {\n return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n }\n findAll(...outletNames) {\n return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n }\n getSelectorForOutletName(outletName) {\n const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n return this.controllerElement.getAttribute(attributeName);\n }\n findOutlet(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n if (selector)\n return this.findElement(selector, outletName);\n }\n findAllOutlets(outletName) {\n const selector = this.getSelectorForOutletName(outletName);\n return selector ? this.findAllElements(selector, outletName) : [];\n }\n findElement(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n }\n findAllElements(selector, outletName) {\n const elements = this.scope.queryElements(selector);\n return elements.filter((element) => this.matchesElement(element, selector, outletName));\n }\n matchesElement(element, selector, outletName) {\n const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n }\n}\n\nclass Scope {\n constructor(schema, element, identifier, logger) {\n this.targets = new TargetSet(this);\n this.classes = new ClassMap(this);\n this.data = new DataMap(this);\n this.containsElement = (element) => {\n return element.closest(this.controllerSelector) === this.element;\n };\n this.schema = schema;\n this.element = element;\n this.identifier = identifier;\n this.guide = new Guide(logger);\n this.outlets = new OutletSet(this.documentScope, element);\n }\n findElement(selector) {\n return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n }\n findAllElements(selector) {\n return [\n ...(this.element.matches(selector) ? [this.element] : []),\n ...this.queryElements(selector).filter(this.containsElement),\n ];\n }\n queryElements(selector) {\n return Array.from(this.element.querySelectorAll(selector));\n }\n get controllerSelector() {\n return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n }\n get isDocumentScope() {\n return this.element === document.documentElement;\n }\n get documentScope() {\n return this.isDocumentScope\n ? this\n : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n }\n}\n\nclass ScopeObserver {\n constructor(element, schema, delegate) {\n this.element = element;\n this.schema = schema;\n this.delegate = delegate;\n this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n this.scopesByIdentifierByElement = new WeakMap();\n this.scopeReferenceCounts = new WeakMap();\n }\n start() {\n this.valueListObserver.start();\n }\n stop() {\n this.valueListObserver.stop();\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n parseValueForToken(token) {\n const { element, content: identifier } = token;\n return this.parseValueForElementAndIdentifier(element, identifier);\n }\n parseValueForElementAndIdentifier(element, identifier) {\n const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n let scope = scopesByIdentifier.get(identifier);\n if (!scope) {\n scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n scopesByIdentifier.set(identifier, scope);\n }\n return scope;\n }\n elementMatchedValue(element, value) {\n const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n this.scopeReferenceCounts.set(value, referenceCount);\n if (referenceCount == 1) {\n this.delegate.scopeConnected(value);\n }\n }\n elementUnmatchedValue(element, value) {\n const referenceCount = this.scopeReferenceCounts.get(value);\n if (referenceCount) {\n this.scopeReferenceCounts.set(value, referenceCount - 1);\n if (referenceCount == 1) {\n this.delegate.scopeDisconnected(value);\n }\n }\n }\n fetchScopesByIdentifierForElement(element) {\n let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n if (!scopesByIdentifier) {\n scopesByIdentifier = new Map();\n this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n }\n return scopesByIdentifier;\n }\n}\n\nclass Router {\n constructor(application) {\n this.application = application;\n this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n this.scopesByIdentifier = new Multimap();\n this.modulesByIdentifier = new Map();\n }\n get element() {\n return this.application.element;\n }\n get schema() {\n return this.application.schema;\n }\n get logger() {\n return this.application.logger;\n }\n get controllerAttribute() {\n return this.schema.controllerAttribute;\n }\n get modules() {\n return Array.from(this.modulesByIdentifier.values());\n }\n get contexts() {\n return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n }\n start() {\n this.scopeObserver.start();\n }\n stop() {\n this.scopeObserver.stop();\n }\n loadDefinition(definition) {\n this.unloadIdentifier(definition.identifier);\n const module = new Module(this.application, definition);\n this.connectModule(module);\n const afterLoad = definition.controllerConstructor.afterLoad;\n if (afterLoad) {\n afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n }\n }\n unloadIdentifier(identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n this.disconnectModule(module);\n }\n }\n getContextForElementAndIdentifier(element, identifier) {\n const module = this.modulesByIdentifier.get(identifier);\n if (module) {\n return module.contexts.find((context) => context.element == element);\n }\n }\n proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n if (scope) {\n this.scopeObserver.elementMatchedValue(scope.element, scope);\n }\n else {\n console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n }\n }\n handleError(error, message, detail) {\n this.application.handleError(error, message, detail);\n }\n createScopeForElementAndIdentifier(element, identifier) {\n return new Scope(this.schema, element, identifier, this.logger);\n }\n scopeConnected(scope) {\n this.scopesByIdentifier.add(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.connectContextForScope(scope);\n }\n }\n scopeDisconnected(scope) {\n this.scopesByIdentifier.delete(scope.identifier, scope);\n const module = this.modulesByIdentifier.get(scope.identifier);\n if (module) {\n module.disconnectContextForScope(scope);\n }\n }\n connectModule(module) {\n this.modulesByIdentifier.set(module.identifier, module);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.connectContextForScope(scope));\n }\n disconnectModule(module) {\n this.modulesByIdentifier.delete(module.identifier);\n const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n scopes.forEach((scope) => module.disconnectContextForScope(scope));\n }\n}\n\nconst defaultSchema = {\n controllerAttribute: \"data-controller\",\n actionAttribute: \"data-action\",\n targetAttribute: \"data-target\",\n targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n constructor(element = document.documentElement, schema = defaultSchema) {\n this.logger = console;\n this.debug = false;\n this.logDebugActivity = (identifier, functionName, detail = {}) => {\n if (this.debug) {\n this.logFormattedMessage(identifier, functionName, detail);\n }\n };\n this.element = element;\n this.schema = schema;\n this.dispatcher = new Dispatcher(this);\n this.router = new Router(this);\n this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n }\n static start(element, schema) {\n const application = new this(element, schema);\n application.start();\n return application;\n }\n async start() {\n await domReady();\n this.logDebugActivity(\"application\", \"starting\");\n this.dispatcher.start();\n this.router.start();\n this.logDebugActivity(\"application\", \"start\");\n }\n stop() {\n this.logDebugActivity(\"application\", \"stopping\");\n this.dispatcher.stop();\n this.router.stop();\n this.logDebugActivity(\"application\", \"stop\");\n }\n register(identifier, controllerConstructor) {\n this.load({ identifier, controllerConstructor });\n }\n registerActionOption(name, filter) {\n this.actionDescriptorFilters[name] = filter;\n }\n load(head, ...rest) {\n const definitions = Array.isArray(head) ? head : [head, ...rest];\n definitions.forEach((definition) => {\n if (definition.controllerConstructor.shouldLoad) {\n this.router.loadDefinition(definition);\n }\n });\n }\n unload(head, ...rest) {\n const identifiers = Array.isArray(head) ? head : [head, ...rest];\n identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n }\n get controllers() {\n return this.router.contexts.map((context) => context.controller);\n }\n getControllerForElementAndIdentifier(element, identifier) {\n const context = this.router.getContextForElementAndIdentifier(element, identifier);\n return context ? context.controller : null;\n }\n handleError(error, message, detail) {\n var _a;\n this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n }\n logFormattedMessage(identifier, functionName, detail = {}) {\n detail = Object.assign({ application: this }, detail);\n this.logger.groupCollapsed(`${identifier} #${functionName}`);\n this.logger.log(\"details:\", Object.assign({}, detail));\n this.logger.groupEnd();\n }\n}\nfunction domReady() {\n return new Promise((resolve) => {\n if (document.readyState == \"loading\") {\n document.addEventListener(\"DOMContentLoaded\", () => resolve());\n }\n else {\n resolve();\n }\n });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n return classes.reduce((properties, classDefinition) => {\n return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n }, {});\n}\nfunction propertiesForClassDefinition(key) {\n return {\n [`${key}Class`]: {\n get() {\n const { classes } = this;\n if (classes.has(key)) {\n return classes.get(key);\n }\n else {\n const attribute = classes.getAttributeName(key);\n throw new Error(`Missing attribute \"${attribute}\"`);\n }\n },\n },\n [`${key}Classes`]: {\n get() {\n return this.classes.getAll(key);\n },\n },\n [`has${capitalize(key)}Class`]: {\n get() {\n return this.classes.has(key);\n },\n },\n };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n return outlets.reduce((properties, outletDefinition) => {\n return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n let outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n outletController = getOutletController(controller, element, outletName);\n if (outletController)\n return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n const camelizedName = namespaceCamelize(name);\n return {\n [`${camelizedName}Outlet`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n }\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n },\n },\n [`${camelizedName}Outlets`]: {\n get() {\n const outlets = this.outlets.findAll(name);\n if (outlets.length > 0) {\n return outlets\n .map((outletElement) => {\n const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n if (outletController)\n return outletController;\n console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n })\n .filter((controller) => controller);\n }\n return [];\n },\n },\n [`${camelizedName}OutletElement`]: {\n get() {\n const outletElement = this.outlets.find(name);\n const selector = this.outlets.getSelectorForOutletName(name);\n if (outletElement) {\n return outletElement;\n }\n else {\n throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n }\n },\n },\n [`${camelizedName}OutletElements`]: {\n get() {\n return this.outlets.findAll(name);\n },\n },\n [`has${capitalize(camelizedName)}Outlet`]: {\n get() {\n return this.outlets.has(name);\n },\n },\n };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n return targets.reduce((properties, targetDefinition) => {\n return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n return {\n [`${name}Target`]: {\n get() {\n const target = this.targets.find(name);\n if (target) {\n return target;\n }\n else {\n throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n }\n },\n },\n [`${name}Targets`]: {\n get() {\n return this.targets.findAll(name);\n },\n },\n [`has${capitalize(name)}Target`]: {\n get() {\n return this.targets.has(name);\n },\n },\n };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n const propertyDescriptorMap = {\n valueDescriptorMap: {\n get() {\n return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n return Object.assign(result, { [attributeName]: valueDescriptor });\n }, {});\n },\n },\n };\n return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n const { key, name, reader: read, writer: write } = definition;\n return {\n [name]: {\n get() {\n const value = this.data.get(key);\n if (value !== null) {\n return read(value);\n }\n else {\n return definition.defaultValue;\n }\n },\n set(value) {\n if (value === undefined) {\n this.data.delete(key);\n }\n else {\n this.data.set(key, write(value));\n }\n },\n },\n [`has${capitalize(name)}`]: {\n get() {\n return this.data.has(key) || definition.hasCustomDefaultValue;\n },\n },\n };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n return valueDescriptorForTokenAndTypeDefinition({\n controller,\n token,\n typeDefinition,\n });\n}\nfunction parseValueTypeConstant(constant) {\n switch (constant) {\n case Array:\n return \"array\";\n case Boolean:\n return \"boolean\";\n case Number:\n return \"number\";\n case Object:\n return \"object\";\n case String:\n return \"string\";\n }\n}\nfunction parseValueTypeDefault(defaultValue) {\n switch (typeof defaultValue) {\n case \"boolean\":\n return \"boolean\";\n case \"number\":\n return \"number\";\n case \"string\":\n return \"string\";\n }\n if (Array.isArray(defaultValue))\n return \"array\";\n if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n const { controller, token, typeObject } = payload;\n const hasType = isSomething(typeObject.type);\n const hasDefault = isSomething(typeObject.default);\n const fullObject = hasType && hasDefault;\n const onlyType = hasType && !hasDefault;\n const onlyDefault = !hasType && hasDefault;\n const typeFromObject = parseValueTypeConstant(typeObject.type);\n const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n if (onlyType)\n return typeFromObject;\n if (onlyDefault)\n return typeFromDefaultValue;\n if (typeFromObject !== typeFromDefaultValue) {\n const propertyPath = controller ? `${controller}.${token}` : token;\n throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n }\n if (fullObject)\n return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n const { controller, token, typeDefinition } = payload;\n const typeObject = { controller, token, typeObject: typeDefinition };\n const typeFromObject = parseValueTypeObject(typeObject);\n const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n const typeFromConstant = parseValueTypeConstant(typeDefinition);\n const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n if (type)\n return type;\n const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n const constant = parseValueTypeConstant(typeDefinition);\n if (constant)\n return defaultValuesByType[constant];\n const hasDefault = hasProperty(typeDefinition, \"default\");\n const hasType = hasProperty(typeDefinition, \"type\");\n const typeObject = typeDefinition;\n if (hasDefault)\n return typeObject.default;\n if (hasType) {\n const { type } = typeObject;\n const constantFromType = parseValueTypeConstant(type);\n if (constantFromType)\n return defaultValuesByType[constantFromType];\n }\n return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n const { token, typeDefinition } = payload;\n const key = `${dasherize(token)}-value`;\n const type = parseValueTypeDefinition(payload);\n return {\n type,\n key,\n name: camelize(key),\n get defaultValue() {\n return defaultValueForDefinition(typeDefinition);\n },\n get hasCustomDefaultValue() {\n return parseValueTypeDefault(typeDefinition) !== undefined;\n },\n reader: readers[type],\n writer: writers[type] || writers.default,\n };\n}\nconst defaultValuesByType = {\n get array() {\n return [];\n },\n boolean: false,\n number: 0,\n get object() {\n return {};\n },\n string: \"\",\n};\nconst readers = {\n array(value) {\n const array = JSON.parse(value);\n if (!Array.isArray(array)) {\n throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n }\n return array;\n },\n boolean(value) {\n return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n },\n number(value) {\n return Number(value.replace(/_/g, \"\"));\n },\n object(value) {\n const object = JSON.parse(value);\n if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n }\n return object;\n },\n string(value) {\n return value;\n },\n};\nconst writers = {\n default: writeString,\n array: writeJSON,\n object: writeJSON,\n};\nfunction writeJSON(value) {\n return JSON.stringify(value);\n}\nfunction writeString(value) {\n return `${value}`;\n}\n\nclass Controller {\n constructor(context) {\n this.context = context;\n }\n static get shouldLoad() {\n return true;\n }\n static afterLoad(_identifier, _application) {\n return;\n }\n get application() {\n return this.context.application;\n }\n get scope() {\n return this.context.scope;\n }\n get element() {\n return this.scope.element;\n }\n get identifier() {\n return this.scope.identifier;\n }\n get targets() {\n return this.scope.targets;\n }\n get outlets() {\n return this.scope.outlets;\n }\n get classes() {\n return this.scope.classes;\n }\n get data() {\n return this.scope.data;\n }\n initialize() {\n }\n connect() {\n }\n disconnect() {\n }\n dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n const type = prefix ? `${prefix}:${eventName}` : eventName;\n const event = new CustomEvent(type, { detail, bubbles, cancelable });\n target.dispatchEvent(event);\n return event;\n }\n}\nController.blessings = [\n ClassPropertiesBlessing,\n TargetPropertiesBlessing,\n ValuePropertiesBlessing,\n OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n toggle(event) {\n if (event.target.checked) {\n document.body.style.overflowY = \"hidden\";\n this.element.style.overflowY = \"scroll\";\n this.element.style.minHeight = \"100vh\";\n } else {\n document.body.style.overflowY = \"scroll\";\n this.element.style.overflowY = \"\";\n this.element.style.minHeight = \"\";\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\n \"clientName\",\n \"clientVersion\",\n \"osName\",\n \"osVersion\",\n \"viewportWidth\",\n \"viewportHeight\",\n \"devicePixelRatio\",\n \"deviceType\",\n \"help\",\n ];\n\n connect() {\n this.element.style.zIndex = 10000;\n\n this.clientNameTarget.innerText = window.device.client.name;\n this.clientVersionTarget.innerText = window.device.client.version;\n this.osNameTarget.innerText = window.device.os.name;\n this.osVersionTarget.innerText = window.device.os.version;\n this.deviceTypeTarget.innerText = window.device.device.type;\n\n this.viewportWidthTarget.innerText = window.innerWidth;\n this.viewportHeightTarget.innerText = window.innerHeight;\n this.devicePixelRatioTarget.innerText = window.devicePixelRatio;\n }\n\n resized (event) {\n this.viewportWidthTarget.innerText = window.innerWidth;\n this.viewportHeightTarget.innerText = window.innerHeight;\n }\n\n outline (event) {\n let style = document.head.querySelector('style#outline');\n\n if(style){\n style.remove();\n } else {\n style = document.createElement('style');\n style.id = 'outline';\n style.append(\"* { outline: 1px solid pink }\");\n\n document.head.appendChild(style);\n }\n }\n\n toggleHelp (event) {\n this.helpTarget.hidden = !this.helpTarget.hidden;\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"text\", \"icon\", \"confirmationIcon\"];\n static values = {\n text: String,\n confirmation: String,\n };\n\n async copy(event) {\n if (!('clipboard' in navigator)) return;\n\n try {\n await navigator.clipboard.writeText(this.textValue.trim());\n } catch(e) {\n console.error(\"Couldn't copy\", e);\n return;\n }\n\n const textTarget = this.hasTextTarget ? \"textTarget\" : \"element\";\n\n this[textTarget].innerText = this.confirmationValue;\n\n if (this.hasIconTarget) this.iconTarget.classList.add(\"d-none\");\n if (this.hasConfirmationIconTarget) this.confirmationIconTarget.classList.remove(\"d-none\");\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"footnote\", \"reference\"];\n static classes = [\"footnote\", \"footnoteToggled\", \"sidenote\"];\n static values = {\n minSpacing: {\n type: Number,\n default: 20,\n },\n offsetTop: {\n type: Number,\n default: 0,\n },\n containerWidth: {\n type: Number,\n default: 780,\n },\n sidenoteWidth: {\n type: Number,\n default: 220,\n },\n paddingLeft: {\n type: Number,\n default: 16,\n },\n };\n\n connect() {\n this.originalFootnotes = [];\n this.createFootnotes();\n }\n\n resize(event = undefined) {\n if (this.sidenotesArePossible === undefined) return;\n\n this.offsetTopValue = 0;\n\n const sidenotesWerePossible = this.sidenotesArePossible;\n const sidenotesArePossible = this.areSidenotesPossible;\n\n if (sidenotesWerePossible && sidenotesArePossible) {\n for (const sidenote of this.footnoteTargets) {\n this.positionSidenote(sidenote);\n }\n } else {\n const footnotes = Array.from(this.footnoteTargets);\n\n for (const i in this.footnoteTargets) {\n footnotes[i].outerHTML = this.originalFootnotes[i];\n }\n\n this.originalFootnotes = [];\n\n this.createFootnotes();\n }\n }\n\n createFootnotes() {\n const references = this.element.querySelectorAll(\"a[id^=fn]\");\n const footnotes = this.element.querySelectorAll(\"li[id^=fn]\");\n\n this.sidenotesArePossible = this.areSidenotesPossible;\n\n for (const i in Array.from(references)) {\n const reference = references[i];\n const footnote = footnotes[i];\n const backlink = footnote.querySelector(\"a[role=doc-backlink]\");\n\n this.originalFootnotes.push(footnote.outerHTML);\n\n reference.dataset.footnote = footnote.id;\n reference.dataset.turbo = \"false\";\n reference.dataset.footnotesTarget = \"reference\";\n\n if (backlink) backlink.dataset.turbo = \"false\";\n footnote.dataset.reference = reference.id;\n // XXX: The timeout ensures footnotes are processed in order.\n setTimeout(() => footnote.dataset.footnotesTarget = \"footnote\", 1+i);\n }\n }\n\n footnoteTargetConnected(footnote) {\n const reference = this.referenceTargets.find(x => x.id === footnote.dataset.reference);\n\n footnote.style.listStylePosition = \"inside\";\n\n if (this.sidenotesArePossible) {\n this.positionSidenote(footnote, reference);\n } else {\n footnote.dataset.action = \"blur->footnotes#hide\";\n\n footnote.classList.add(...this.footnoteToggledClasses);\n footnote.classList.add(...this.footnoteClasses);\n footnote.style.bottom = 0;\n footnote.style.left = 0;\n footnote.style.zIndex = 1;\n footnote.dataset.height = footnote.offsetHeight;\n footnote.style.height = 0;\n footnote.classList.add(\"collapsing\");\n footnote.classList.remove(...this.footnoteToggledClasses);\n\n const backlink = footnote.querySelector(\"a[role=doc-backlink]\");\n\n if (backlink) backlink.style.display = \"none\";\n\n reference.dataset.action = \"footnotes#show\";\n reference.dataset.footnotesReferenceParam = reference.id;\n reference.dataset.footnotesFootnoteParam = footnote.id;\n }\n }\n\n get areSidenotesPossible () {\n const bodyWidth = document.body.offsetWidth;\n const containerWidth = (this.containerWidthValue + this.paddingLeftValue + this.sidenoteWidthValue * 2);\n\n return (bodyWidth > containerWidth);\n }\n\n positionSidenote(sidenote, reference = undefined) {\n if (!reference) reference = this.referenceTargets.find(x => x.id === sidenote.dataset.reference);\n\n const backlink = sidenote.querySelector(\"a[role=doc-backlink]\");\n const offsetTop = Math.max(reference.offsetTop, this.offsetTopValue);\n const offsetLeft = this.element.offsetLeft + this.element.offsetWidth + this.paddingLeftValue;\n\n sidenote.style.top = `${offsetTop}px`;\n sidenote.style.left = `${offsetLeft}px`;\n sidenote.classList.add(...this.sidenoteClasses);\n sidenote.dataset.action = \"\";\n reference.dataset.action = \"\";\n\n if (backlink) backlink.style.display = \"\";\n\n this.offsetTopValue = offsetTop + sidenote.offsetHeight + this.minSpacingValue;\n }\n\n show(event) {\n const footnote = this.footnoteTargets.find(x => x.id === event.params.footnote);\n\n event.preventDefault();\n\n this.hide();\n\n footnote.style.height = `${footnote.dataset.height}px`;\n footnote.classList.add(...this.footnoteToggledClasses);\n footnote.setAttribute(\"role\", \"alert\");\n footnote.setAttribute(\"tabindex\", \"0\");\n footnote.focus();\n }\n\n hide(event = undefined) {\n for (const footnote of this.footnoteTargets) {\n footnote.style.height = 0;\n footnote.classList.remove(...this.footnoteToggledClasses);\n footnote.setAttribute(\"role\", \"\");\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"goal\", \"balance\", \"date\"];\n static values = {\n monetizationUrl: String,\n };\n\n async connect() {\n if (!this.monetizationUrlValue) return;\n\n try {\n const monetizationUrl = new URL(this.monetizationUrlValue);\n\n if (window.location.protocol !== monetizationUrl.protocol) {\n monetizationUrl.protocol = this.protocol;\n this.monetizationUrlValue = monetizationUrl.toString();\n }\n } catch(e) {\n console.error(\"Not a valid URL\", this.monetizationUrlValue);\n return;\n }\n\n const balances = await this.fetchBalances();\n\n if (!balances) return;\n\n const decimalIndex = balances.balance.length - balances.decimal;\n const totalBalance = `${balances.balance.slice(0, decimalIndex)}.${balances.balance.slice(decimalIndex)}`;\n const locale = document.querySelector(\"html\").lang;\n\n for (const goal of this.goalTargets) {\n const max = parseFloat(goal.getAttribute(\"aria-valuemax\") ?? \"0\");\n const now = Math.min(100, (totalBalance / max) * 100);\n goal.style.width = `${now}%`;\n goal.setAttribute(\"aria-valuenow\", totalBalance);\n }\n\n if (this.hasBalanceTarget) {\n const style = \"currency\";\n const currency = balances.currency;\n const balanceFormatter = new Intl.NumberFormat(locale, { style, currency });\n\n this.balanceTarget.innerText = balanceFormatter.format(totalBalance);\n }\n\n if (this.hasDateTarget) {\n const balanceDate = new Date(balances.timestamp);\n const dateFormatter = new Intl.DateTimeFormat(locale, { dateStyle: 'full' });\n\n this.dateTarget.innerText = dateFormatter.format(balanceDate);\n }\n }\n\n async fetchBalances() {\n try {\n const response = await fetch(this.monetizationUrlValue);\n\n return await response.json();\n } catch(e) {\n console.error(\"Couldn't fetch\", this.monetizationUrlValue, e);\n return null;\n }\n }\n\n get protocol() {\n if (window.location.protocol === \"ipfs:\") return \"ipns:\";\n\n return window.location.protocol;\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\n/*\n * @action show Open the modal\n * @action hide Close the modal\n * @action hideWithEscape Press Escape to close the modal\n * @action showAnother Open a modal outside the current controller\n * @param show [String] The id attribute of another modal controller\n * @target modal [Element] Bootstrap 4 modal\n * @target backdrop [Element] Bootstrap 4 modal backdrop\n * @event modal:show Subscribe to this event to show a modal from another controller\n * @event modal:hide Subscribe to this event to hide a modal from another controller\n */\nexport default class extends Controller {\n static targets = [\"modal\", \"backdrop\"];\n\n /*\n * Abrir otro modal, enviando el ID a toda la ventana.\n */\n showAnother(event = undefined) {\n event?.preventDefault();\n\n if (!event.params.show) {\n console.error(\"data-modal-show-param attribute missing\", event.target);\n return;\n }\n\n if (!event.target.id) {\n console.error(\"id attribute missing, focus won't be re-assigned when modal is closed\", event.target);\n }\n\n window.dispatchEvent(new CustomEvent(\"modal:show\", { detail: { id: event.params.show, previousFocus: event.target.id } }));\n }\n\n /*\n * Podemos enviar la orden de apertura como un click o como un\n * CustomEvent incluyendo el id del modal como detail.\n *\n * El elemento clicleable puede tener un valor que se refiera a otro\n * modal tambi\u00E9n.\n */\n show(event = undefined) {\n event?.preventDefault();\n const modalId = event?.detail?.id;\n\n if (modalId && this.element.id !== modalId) return;\n\n this.modalTarget.style.display = \"block\";\n this.backdropTarget.style.display = \"block\";\n this.modalTarget.setAttribute(\"role\", \"dialog\");\n this.modalTarget.setAttribute(\"aria-modal\", true);\n this.modalTarget.removeAttribute(\"aria-hidden\");\n\n window.document.body.classList.add(\"modal-open\");\n\n if (event?.detail?.previousFocus) {\n this.previousFocus = window.document.getElementById(event.detail.previousFocus);\n } else {\n this.previousFocus = event?.target;\n }\n\n setTimeout(() => {\n this.modalTarget.classList.add(\"show\");\n this.backdropTarget.classList.add(\"show\");\n\n this.modalTarget.focus();\n }, 1);\n }\n\n hideWithEscape(event) {\n if (event?.key !== \"Escape\") return;\n\n this.hide();\n }\n\n hide(event = undefined) {\n event?.preventDefault();\n const modalId = event?.detail?.id;\n\n if (modalId && this.element.id !== modalId) return;\n\n this.backdropTarget.classList.remove(\"show\");\n this.modalTarget.classList.remove(\"show\");\n\n this.modalTarget.setAttribute(\"aria-hidden\", true);\n this.modalTarget.removeAttribute(\"role\");\n this.modalTarget.removeAttribute(\"aria-modal\");\n\n this.previousFocus?.focus();\n\n this.modalTarget.querySelectorAll(\"video,audio\").forEach(x => x.pause());\n\n setTimeout(() => {\n this.modalTarget.style.display = \"\";\n this.backdropTarget.style.display = \"\";\n }, 500);\n\n window.document.body.classList.remove(\"modal-open\");\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"instance\"];\n static values = {\n uri: String,\n };\n\n revalid (event) {\n this.instanceTarget.classList.remove(\"is-invalid\");\n }\n\n async submit (event) {\n this.toggle();\n\n // We're splitting by spaces to prevent mistypings\n const instanceParts = this.instanceTarget.value.split(/[@ ]/).map(x => x.trim()).filter(x => x.length);\n const instanceHost = (instanceParts.length === 1) ? instanceParts[0] : instanceParts[instanceParts.length - 1];\n\n const webfingerURL = `https://${instanceHost}/.well-known/webfinger?resource=https://${instanceHost}`;\n const signal = AbortSignal.any([window.abortController.signal, AbortSignal.timeout(3000)]);\n const headers = { Accept: \"application/json\" };\n\n try {\n const response = await fetch(webfingerURL, { headers, signal });\n const webfinger = await response.json();\n const template = webfinger?.links?.find(x => x?.rel === \"http://ostatus.org/schema/1.0/subscribe\")?.template;\n\n if (!template) throw (new Error(`Webfinger ${webfingerURL} doesn't support remote interaction`));\n\n const uri = template.replaceAll(\"{uri}\", encodeURIComponent(this.uriValue));\n\n setTimeout(() => Turbo.visit(uri), 100);\n } catch (e) {\n console.error(e);\n\n this.instanceTarget.classList.add(\"is-invalid\");\n }\n\n this.toggle();\n }\n\n toggle() {\n for (const element of this.element.elements) {\n element.disabled = !element.disabled;\n }\n }\n}\n", "import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n static targets = [\"tab\", \"value\"];\n static classes = [\"hide\", \"show\"];\n\n valueTargetConnected(valueTarget) {\n this.toggle();\n }\n\n toggle(event = undefined) {\n const value = this.valueTarget.value?.trim();\n\n for (const tab of this.tabTargets) {\n if (value === tab.id) {\n tab.classList.remove(\"d-none\", ...this.hideClasses);\n\n setTimeout(() => tab.classList.add(...this.showClasses), 1);\n } else {\n tab.classList.add(\"d-none\", ...this.hideClasses);\n setTimeout(() => tab.classList.remove(...this.showClasses), 1);\n }\n }\n }\n}\n"], + "mappings": "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,gBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,uBACT,KAAQ,OACR,QAAW,IACf,EACA,CACI,MAAS,2BACT,KAAQ,OACR,QAAW,KACX,OAAU,CACN,QAAW,WACf,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,OACR,QAAW,KACX,OAAU,CACN,QAAW,WACf,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,yEACT,KAAQ,kBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,OACR,QAAW,IACf,EACA,CACI,MAAS,0BACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,uCACT,KAAQ,mBACR,QAAW,IACf,EACA,CACI,MAAS,kDACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,2BACT,KAAQ,OACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,2BACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,+CACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,sCACT,KAAQ,iBACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,gDACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,yBACT,KAAQ,aACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,2CACT,KAAQ,uBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,iCACT,KAAQ,uBACR,QAAW,IACf,EACA,CACI,MAAS,UACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,2BACT,KAAQ,qBACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,2BACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,2BACR,QAAW,IACf,EACA,CACI,MAAS,4DACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,kDACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,2BACT,KAAQ,oBACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,uCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,sCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,uBACR,QAAW,IACf,EACA,CACI,MAAS,sCACT,KAAQ,iBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,yCACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,2BACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,wCACT,KAAQ,mBACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,+CACT,KAAQ,wBACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,OACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,kBACR,QAAW,EACf,EACA,CACI,MAAS,2BACT,KAAQ,qBACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,yBACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,gDACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,gDACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,qBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,2BACT,KAAQ,wBACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,qBACR,QAAW,EACf,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,sCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,2CACT,KAAQ,qBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,kBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,iBACR,QAAW,IACf,EACA,CACI,MAAS,4CACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,iBACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,iBACR,QAAW,IACf,EACA,CACI,MAAS,0CACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,2BACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,aACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,iCACT,KAAQ,aACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,0BACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,MACf,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,0BACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,cACR,QAAW,EACf,EACA,CACI,MAAS,yDACT,KAAQ,oBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,uCACT,KAAQ,mBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,QAAW,GACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,8CACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,2CACT,KAAQ,uBACR,QAAW,IACf,EACA,CACI,MAAS,2BACT,KAAQ,OACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,0CACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,mBACR,QAAW,IACf,EACA,CACI,MAAS,iBACT,KAAQ,gBACR,QAAW,GACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,SACX,SAAY,CACR,KAAM,OACV,CACJ,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,qBACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,QAAW,GACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,0CACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,iCACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,iCACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,QACX,SAAY,CACR,IAAK,QACT,CACJ,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,mBACR,QAAW,IACf,EACA,CACI,MAAS,oDACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,OACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,yBACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,mDACT,KAAQ,sBACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,aACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,iCACT,KAAQ,aACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,0CACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,yDACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,kDACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,qBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,wCACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,8CACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,gFACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,4CACT,KAAQ,oBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,yCACT,KAAQ,oBACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,gDACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,uCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,uCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,4DACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,eACT,KAAQ,QACR,QAAW,EACf,EACA,CACI,MAAS,6BACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,kBACR,QAAW,EACf,EACA,CACI,MAAS,mCACT,KAAQ,mBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,mBACR,QAAW,EACf,EACA,CACI,MAAS,6BACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,oFACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,SACX,SAAY,CACR,KAAM,OACV,CACJ,CACJ,EACA,CACI,MAAS,sBACT,KAAQ,aACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,sBACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,mEACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,sBACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,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QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,kBACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,aACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,mDACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,gEACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,SACX,SAAY,CACR,KAAM,OACV,CACJ,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,6BACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,2CACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,qBACR,QAAW,IACf,EACA,CACI,MAAS,2CACT,KAAQ,qBACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,QAAW,GACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,yCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,iBACT,KAAQ,aACR,QAAW,EACf,EACA,CACI,MAAS,wBACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,uCACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,uBACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,yCACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,YACT,KAAQ,aACR,QAAW,GACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,cACT,KAAQ,OACR,QAAW,GACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,0BACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,0BACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,kDACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,iBACT,KAAQ,gBACR,QAAW,KACf,EACA,CACI,MAAS,2BACT,KAAQ,oBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,oBACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,gBACR,QAAW,EACf,EACA,CACI,MAAS,kDACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,yBACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,uCACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,uCACT,KAAQ,mBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,yCACT,KAAQ,iBACR,QAAW,KACX,OAAU,CACN,QAAW,SACX,SAAY,CACR,KAAM,OACV,CACJ,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,SACX,SAAY,CACR,KAAM,OACV,CACJ,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,oBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,SACX,SAAY,CACR,KAAM,OACV,CACJ,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,SACX,SAAY,CACR,KAAM,OACV,CACJ,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,kBACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,SACX,SAAY,CACR,KAAM,OACV,CACJ,CACJ,EACA,CACI,MAAS,6CACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,OACR,QAAW,KACX,OAAU,CACN,QAAW,YACf,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,WACT,KAAQ,WACR,QAAW,GACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,YACf,CACJ,EACA,CACI,MAAS,0CACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,0CACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,eACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,cACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,OACR,QAAW,KACX,OAAU,CACN,QAAW,OACX,SAAY,CACR,IAAK,QACT,CACJ,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,EACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,YACR,QAAW,KACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,oBACR,QAAW,MACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,oBACR,QAAW,MACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,oBACR,QAAW,OACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,oBACR,QAAW,OACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,uBACT,KAAQ,oBACR,QAAW,KACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,oBACR,QAAW,KACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,iBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,QACR,QAAW,KACX,OAAU,CACN,QAAW,YACf,CACJ,EACA,CACI,MAAS,iCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,2CACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,UACf,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,UACf,CACJ,EACA,CACI,MAAS,gEACT,KAAQ,WACR,QAAW,EACf,EACA,CACI,MAAS,mCACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,gDACT,KAAQ,sBACR,QAAW,IACf,EACA,CACI,MAAS,WACT,KAAQ,aACR,QAAW,EACf,EACA,CACI,MAAS,yDACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,8CACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,uCACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,2CACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,wBACR,QAAW,IACf,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,QAAW,EACf,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,2BACT,KAAQ,qBACR,QAAW,EACf,EACA,CACI,MAAS,UACT,KAAQ,kBACR,QAAW,GACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,OACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,iEACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,gDACT,KAAQ,gBACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,uBACT,KAAQ,gBACR,QAAW,GACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,gDACT,KAAQ,SACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,EACA,CACI,MAAS,wCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,KACX,OAAU,CACN,QAAW,SACf,CACJ,EACA,CACI,MAAS,OACT,KAAQ,OACR,QAAW,EACf,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,QAAW,EACf,EACA,CACI,MAAS,2BACT,KAAQ,MACR,QAAW,KACX,OAAU,CACN,QAAW,OACf,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,6DACT,KAAQ,mBACR,QAAW,EACf,EACA,CACI,MAAS,+BACT,KAAQ,aACR,QAAW,KACX,OAAU,CACN,QAAW,QACf,CACJ,CACJ,IC1/EA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAA,SACI,CACI,MAAS,WACT,KAAQ,UACZ,EACA,CACI,MAAS,OACT,KAAQ,MACZ,EACA,CACI,MAAS,UACT,KAAQ,SACZ,EACA,CACI,MAAS,oBACT,KAAQ,OACZ,EACA,CACI,MAAS,mBACT,KAAQ,QACZ,EACA,CACI,MAAS,SACT,KAAQ,QACZ,EACA,CACI,MAAS,SACT,KAAQ,QACZ,EACA,CACI,MAAS,kBACT,KAAQ,OACZ,EACA,CACI,MAAS,QACT,KAAQ,OACZ,EACA,CACI,MAAS,UACT,KAAQ,SACZ,EACA,CACI,MAAS,QACT,KAAQ,OACZ,EACA,CACI,MAAS,SACT,KAAQ,QACZ,EACA,CACI,MAAS,iBACT,KAAQ,WACZ,CACJ,ICrDA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAA,SACI,KAAM,cACN,KAAM,eACN,KAAM,oBACN,KAAM,cACN,KAAM,eACN,GAAM,gBACN,GAAM,UACN,GAAM,aACN,GAAM,WACN,GAAM,gBACN,GAAM,qBACN,GAAM,QACN,GAAM,QACN,GAAM,kBACN,GAAM,cACN,GAAM,aACN,GAAM,QACN,GAAM,aACN,GAAM,gBACN,GAAM,aACN,GAAM,OACN,GAAM,qBACN,GAAM,uBACN,GAAM,qBACN,GAAM,cACN,GAAM,OACN,GAAM,iBACN,GAAM,WACN,GAAM,qBACN,GAAM,gBACN,GAAM,cACN,GAAM,WACN,GAAM,SACN,GAAM,YACN,GAAM,YACN,GAAM,SACN,GAAM,eACN,GAAM,qBACN,GAAM,QACN,GAAM,YACN,GAAM,UACN,GAAM,UACN,GAAM,SACN,GAAM,SACN,GAAM,SACN,GAAM,WACN,GAAM,SACN,GAAM,WACN,GAAM,UACN,GAAM,cACN,GAAM,UACN,GAAM,gBACN,GAAM,QACN,GAAM,SACN,GAAM,aACN,GAAM,eACN,GAAM,kBACN,GAAM,SACN,GAAM,oBACN,GAAM,WACN,GAAM,gBACN,GAAM,WACN,GAAM,YACN,GAAM,cACN,GAAM,YACN,GAAM,WACN,GAAM,aACN,GAAM,WACN,GAAM,gBACN,GAAM,WACN,GAAM,WACN,GAAM,SACN,GAAM,mBACN,GAAM,gBACN,GAAM,YACN,GAAM,iBACN,GAAM,WACN,GAAM,mBACN,GAAM,YACN,GAAM,UACN,GAAM,gBACN,GAAM,aACN,GAAM,UACN,GAAM,SACN,GAAM,cACN,GAAM,SACN,GAAM,QACN,GAAM,6BACN,GAAM,SACN,GAAM,OACN,GAAM,SACN,GAAM,kBACN,GAAM,mBACN,GAAM,aACN,GAAM,cACN,GAAM,YACN,GAAM,oBACN,GAAM,SACN,GAAM,eACN,GAAM,qBACN,GAAM,WACN,GAAM,QACN,GAAM,SACN,GAAM,UACN,GAAM,gBACN,GAAM,kBACN,GAAM,iBACN,GAAM,QACN,GAAM,OACN,GAAM,iBACN,GAAM,UACN,GAAM,oBACN,GAAM,QACN,GAAM,QACN,GAAM,SACN,GAAM,2BACN,GAAM,oBACN,GAAM,gBACN,GAAM,eACN,GAAM,aACN,GAAM,aACN,GAAM,qBACN,GAAM,QACN,GAAM,gBACN,GAAM,UACN,GAAM,iBACN,GAAM,UACN,GAAM,OACN,GAAM,cACN,GAAM,UACN,GAAM,cACN,GAAM,SACN,GAAM,YACN,GAAM,UACN,GAAM,YACN,GAAM,oBACN,GAAM,YACN,GAAM,OACN,GAAM,gBACN,GAAM,UACN,GAAM,SACN,GAAM,cACN,GAAM,mBACN,GAAM,cACN,GAAM,YACN,GAAM,iBACN,GAAM,WACN,GAAM,YACN,GAAM,SACN,GAAM,QACN,GAAM,OACN,GAAM,eACN,GAAM,OACN,GAAM,aACN,GAAM,kBACN,GAAM,aACN,GAAM,aACN,GAAM,QACN,GAAM,QACN,GAAM,UACN,GAAM,kBACN,GAAM,SACN,GAAM,SACN,GAAM,YACN,GAAM,iBACN,GAAM,OACN,GAAM,QACN,GAAM,SACN,GAAM,cACN,GAAM,gBACN,GAAM,UACN,GAAM,gBACN,GAAM,SACN,GAAM,UACN,GAAM,eACN,GAAM,cACN,GAAM,SACN,GAAM,eACN,GAAM,UACN,GAAM,UACN,GAAM,QACN,GAAM,mBACN,GAAM,mBACN,GAAM,iBACN,GAAM,cACN,GAAM,gBACN,GAAM,oBACN,GAAM,oBACN,GAAM,cACN,GAAM,UACN,GAAM,WACN,GAAM,gBACN,GAAM,cACN,GAAM,WACN,GAAM,gBACN,GAAM,iBACN,GAAM,iBACN,GAAM,QACN,GAAM,OACN,GAAM,YACN,GAAM,sBACN,GAAM,aACN,GAAM,gBACN,GAAM,cACN,GAAM,WACN,GAAM,aACN,GAAM,gBACN,GAAM,aACN,GAAM,eACN,GAAM,QACN,GAAM,aACN,GAAM,cACN,GAAM,OACN,GAAM,YACN,GAAM,UACN,GAAM,yBACN,GAAM,qBACN,GAAM,0BACN,GAAM,UACN,GAAM,gBACN,GAAM,cACN,GAAM,YACN,GAAM,WACN,GAAM,eACN,GAAM,WACN,GAAM,SACN,GAAM,cACN,GAAM,YACN,GAAM,kBACN,GAAM,kBACN,GAAM,UACN,GAAM,kBACN,GAAM,mBACN,GAAM,UACN,GAAM,WACN,GAAM,cACN,GAAM,cACN,GAAM,iBACN,GAAM,SACN,GAAM,kBACN,GAAM,kBACN,GAAM,aACN,GAAM,cACN,GAAM,QACN,GAAM,WACN,GAAM,eACN,GAAM,cACN,GAAM,iBACN,GAAM,SACN,GAAM,WACN,GAAM,kBACN,GAAM,mBACN,GAAM,gBACN,GAAM,eACN,GAAM,iBACN,GAAM,SACN,GAAM,oBACN,GAAM,WACN,GAAM,QACN,GAAM,SACN,GAAM,gBACN,GAAM,QACN,GAAM,UACN,GAAM,gBACN,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Cf,EACA,CACI,MAAS,uBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,kDACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,YACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,2BACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,uBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,+DACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,YACT,KAAQ,YACR,QAAW,EACf,EACA,CACI,MAAS,iCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,mBACR,QAAW,IACf,EACA,CACI,MAAS,gBACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,0CACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,WACT,KAAQ,WACR,QAAW,EACf,EACA,CACI,MAAS,cACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,0BACT,KAAQ,yBACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,wCACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,mDACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,2BACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,uBACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,+CACT,KAAQ,oBACR,QAAW,IACf,EACA,CACI,MAAS,yBACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,2BACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,sDACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,uBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,0BACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,uBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,oBACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,SACT,KAAQ,OACR,QAAW,KACf,EACA,CACI,MAAS,uBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,yBACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,0BACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,yBACT,KAAQ,aACR,QAAW,EACf,EACA,CACI,MAAS,sBACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,8BACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,yBACT,KAAQ,WACR,QAAW,EACf,EACA,CACI,MAAS,wBACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,uBACT,KAAQ,WACR,QAAW,EACf,EACA,CACI,MAAS,8BACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,4HACT,KAAQ,sBACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,qBACR,QAAW,IACf,EACA,CACI,MAAS,sCACT,KAAQ,0BACR,QAAW,IACf,EACA,CACI,MAAS,0CACT,KAAQ,qBACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,SACR,QAAW,EACf,EACA,CACI,MAAS,0CACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,WACR,QAAW,EACf,EACA,CACI,MAAS,kCACT,KAAQ,QACR,QAAW,EACf,EACA,CACI,MAAS,oCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,uBACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,SACR,QAAW,EACf,EACA,CACI,MAAS,qBACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,kBACT,KAAQ,0BACR,QAAW,EACf,EACA,CACI,MAAS,6BACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,mBACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,mBACT,KAAQ,OACR,QAAW,IACf,EACA,CACI,MAAS,qBACT,KAAQ,SACR,QAAW,EACf,EACA,CACI,MAAS,0BACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,0BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,qBACR,QAAW,IACf,EACA,CACI,MAAS,6CACT,KAAQ,mBACR,QAAW,IACf,EACA,CACI,MAAS,yCACT,KAAQ,eACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,s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OL,CAAS,EACtE,GAAKM,EAEL,CAAAL,EAAO,MAAQJ,GAAuB,oBAAoBQ,EAAM,MAAOC,CAAU,EAAE,KAAK,EACxF,MACJ,CAEJ,MACJ,CACA,OAAOL,CACX,CACJ,CACJ,EACAR,GAAQ,QAAUM,KCxClB,IAAAQ,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAA,SACI,MAAO,CACH,MAAS,sFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,CACJ,CACJ,EACA,OAAQ,CACJ,MAAS,4BACT,OAAU,aACV,MAAS,IACb,EACA,IAAO,CACH,MAAS,6DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,kBAAmB,CACf,MAAS,2BACT,OAAU,aACV,MAAS,iBACb,EACA,IAAO,CACH,MAAS,sEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,iCACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,+CACT,MAAS,kBACb,EACA,CACI,MAAS,oCACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,cACb,EACA,CACI,MAAS,iCACT,MAAS,mBACb,EACA,CACI,MAAS,4BACT,MAAS,cACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,0BACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,gFACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,2ZACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,GACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,kBACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,oBACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,kBACT,OAAU,SACV,MAAS,OACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,OACb,EACA,CACI,MAAS,qCACT,OAAU,SACV,MAAS,UACb,EACA,CACI,MAAS,sCACT,OAAU,UACV,MAAS,SACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,+CACT,MAAS,IACb,EACA,CACI,MAAS,gBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,0CACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,wFACT,MAAS,OACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,sMACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kBACT,OAAU,gBACV,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,mBACT,OAAU,SACd,EACA,CACI,MAAS,kCACT,MAAS,eACT,OAAU,SACd,EACA,CACI,MAAS,yBACT,MAAS,wBACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,0CACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,wBACT,OAAU,SACd,EACA,CACI,MAAS,eACT,MAAS,eACT,OAAU,SACd,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,OAAU,UACV,MAAS,gBACb,EACA,CACI,MAAS,sBACT,OAAU,UACV,MAAS,eACb,EACA,CACI,MAAS,wCACT,MAAS,UACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,8JACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,GACb,EACA,CACI,MAAS,qBACT,MAAS,GACb,EACA,CACI,MAAS,qBACT,MAAS,GACb,EACA,CACI,MAAS,8BACT,MAAS,GACb,EACA,CACI,MAAS,UACT,MAAS,GACb,EACA,CACI,MAAS,kBACT,MAAS,GACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,kBACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,GACb,EACA,CACI,MAAS,aACT,MAAS,MACb,EACA,CACI,MAAS,6DACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,8CACT,MAAS,SACb,EACA,CACI,MAAS,2DACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,WACb,EACA,CACI,MAAS,2CACT,MAAS,WACb,EACA,CACI,MAAS,mDACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,uDACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,OAAU,UACV,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,4FACT,MAAS,EACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,OAAU,gBACV,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,MACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,4CACT,MAAS,aACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,6IACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,mBACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,QACb,EACA,CACI,MAAS,eACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,iBACb,EACA,CACI,MAAS,cACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,sBACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,YACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,mDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,aACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,SACT,OAAU,SACV,MAAS,QACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,+CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,OACb,EACA,CACI,MAAS,gDACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,EACb,CACJ,CACJ,EACA,GAAM,CACF,MAAS,4JACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,mBACT,OAAU,SACd,EACA,CACI,MAAS,aACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,mCACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,OAAU,UACV,MAAS,YACb,EACA,CACI,MAAS,sBACT,OAAU,UACV,MAAS,kBACb,EACA,CACI,MAAS,yBACT,OAAU,UACV,MAAS,wBACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,uBACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,kKACT,OAAU,CACN,CACI,MAAS,UACT,OAAU,gBACV,MAAS,SACb,EACA,CACI,MAAS,WACT,OAAU,WACV,MAAS,YACb,EACA,CACI,MAAS,WACT,OAAU,WACV,MAAS,YACb,EACA,CACI,MAAS,WACT,OAAU,WACV,MAAS,qBACb,EACA,CACI,MAAS,WACT,OAAU,WACV,MAAS,qBACb,EACA,CACI,MAAS,WACT,OAAU,WACV,MAAS,qBACb,EACA,CACI,MAAS,WACT,OAAU,WACV,MAAS,qBACb,EACA,CACI,MAAS,cACT,OAAU,WACV,MAAS,qBACb,EACA,CACI,MAAS,cACT,OAAU,WACV,MAAS,qBACb,EACA,CACI,MAAS,kBACT,OAAU,WACV,MAAS,eACb,EACA,CACI,MAAS,eACT,OAAU,WACV,MAAS,eACb,EACA,CACI,MAAS,oBACT,OAAU,WACV,MAAS,sBACb,EACA,CACI,MAAS,oBACT,OAAU,WACV,MAAS,sBACb,EACA,CACI,MAAS,6BACT,OAAU,UACV,MAAS,oBACb,EACA,CACI,MAAS,4BACT,OAAU,UACV,MAAS,qBACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,mBACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,mBACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,8BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,mBACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,mBACb,EACA,CACI,MAAS,6BACT,OAAU,UACV,MAAS,oBACb,EACA,CACI,MAAS,6BACT,OAAU,UACV,MAAS,oBACb,EACA,CACI,MAAS,6BACT,OAAU,UACV,MAAS,oBACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,aACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,oBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,mCACT,OAAU,UACV,MAAS,oBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,mCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,oCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,oCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,oCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,oCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,6BACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,oCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,oCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,iCACT,OAAU,UACV,MAAS,wBACb,EACA,CACI,MAAS,6BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,6BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,6BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,oCACT,MAAS,SACT,OAAU,YACd,EACA,CACI,MAAS,oCACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,6CACT,MAAS,aACT,OAAU,YACd,EACA,CACI,MAAS,wCACT,MAAS,WACT,OAAU,YACd,EACA,CACI,MAAS,0DACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,8CACT,MAAS,WACT,OAAU,YACd,EACA,CACI,MAAS,uCACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,+CACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,6DACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,2CACT,MAAS,WACT,OAAU,YACd,EACA,CACI,MAAS,gDACT,MAAS,iBACT,OAAU,SACd,EACA,CACI,MAAS,sDACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,4CACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,8CACT,MAAS,WACT,OAAU,YACd,EACA,CACI,MAAS,kDACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,+CACT,MAAS,WACT,OAAU,YACd,EACA,CACI,MAAS,mDACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,wDACT,MAAS,WACT,OAAU,SACd,EACA,CACI,MAAS,+CACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,mDACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,+CACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,+CACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,kDACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,qDACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,uCACT,MAAS,mBACT,OAAU,SACd,EACA,CACI,MAAS,uCACT,MAAS,iBACT,OAAU,YACd,EACA,CACI,MAAS,uCACT,MAAS,YACT,OAAU,SACd,EACA,CACI,MAAS,uCACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,uCACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,6BACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,kCACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,qCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,qCACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,oCACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,aACT,OAAU,IACd,EACA,CACI,MAAS,sBACT,MAAS,aACT,OAAU,IACd,EACA,CACI,MAAS,mBACT,MAAS,aACT,OAAU,IACd,EACA,CACI,MAAS,mBACT,MAAS,cACT,OAAU,IACd,EACA,CACI,MAAS,2BACT,MAAS,WACT,OAAU,IACd,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,eACd,EACA,CACI,MAAS,+CACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,iDACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,oDACT,MAAS,YACT,OAAU,YACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,2HACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,gBACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,OACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,OACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,cACb,EACA,CACI,MAAS,QACT,MAAS,cACb,EACA,CACI,MAAS,mDACT,MAAS,KACT,OAAU,eACd,EACA,CACI,MAAS,qCACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAM,CACF,MAAS,6gBACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,0EACT,MAAS,YACb,EACA,CACI,MAAS,8VACT,MAAS,YACb,EACA,CACI,MAAS,0CACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,kBACT,MAAS,WACb,EACA,CACI,MAAS,kBACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,YACb,CACJ,CACJ,EACA,QAAS,CACL,MAAS,kGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,QACb,EACA,CACI,MAAS,qEACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,QACT,OAAU,SACV,MAAS,OACb,EACA,KAAQ,CACJ,MAAS,2DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,YACT,OAAU,SACV,MAAS,WACb,EACA,CACI,MAAS,4BACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,6DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,gBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,2BACT,MAAS,QACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4NACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,YACb,EACA,CACI,MAAS,gBACT,MAAS,cACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,wDACT,MAAS,KACT,OAAU,QACd,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,sjBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,WACT,OAAU,eACd,EACA,CACI,MAAS,sBACT,MAAS,UACT,OAAU,eACd,EACA,CACI,MAAS,6BACT,MAAS,KACT,OAAU,eACd,EACA,CACI,MAAS,YACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,oCACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,kBACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,gBACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,cACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,EACA,CACI,MAAS,4BACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,2BACT,MAAS,kBACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,gCACT,MAAS,KACT,OAAU,SACd,EACA,CACI,MAAS,4BACT,MAAS,KACT,OAAU,SACd,EACA,CACI,MAAS,+CACT,MAAS,KACT,OAAU,SACd,EACA,CACI,MAAS,kCACT,MAAS,KACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,yDACT,MAAS,iBACT,OAAU,QACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uLACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,KACb,EACA,CACI,MAAS,MACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,KACb,EACA,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,kCACT,MAAS,QACb,EACA,CACI,MAAS,kCACT,MAAS,QACb,EACA,CACI,MAAS,gEACT,MAAS,IACb,EACA,CACI,MAAS,SACT,OAAU,SACV,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,oHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,qCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,gBACb,EACA,CACI,MAAS,qCACT,MAAS,cACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,+BACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,mBACT,OAAU,gBACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,kCACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,OACT,OAAU,SACd,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,oGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,OAAU,SACV,MAAS,QACb,EACA,CACI,MAAS,aACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,OACb,EACA,CACI,MAAS,mCACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,OAAU,KACV,MAAS,IACb,EACA,CACI,MAAS,aACT,OAAU,KACV,MAAS,YACb,CACJ,CACJ,EACA,cAAe,CACX,MAAS,cACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,KACb,EACA,CACI,MAAS,cACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,s5CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,kBACT,MAAS,oBACb,EACA,CACI,MAAS,QACT,MAAS,kBACb,EACA,CACI,MAAS,kBACT,MAAS,kBACb,EACA,CACI,MAAS,oBACT,MAAS,2BACb,EACA,CACI,MAAS,WACT,MAAS,kBACb,EACA,CACI,MAAS,WACT,MAAS,2BACb,EACA,CACI,MAAS,QACT,MAAS,2BACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,iBACT,MAAS,2BACb,EACA,CACI,MAAS,eACT,MAAS,kBACb,EACA,CACI,MAAS,aACT,MAAS,kBACb,EACA,CACI,MAAS,aACT,MAAS,kBACb,EACA,CACI,MAAS,WACT,MAAS,oBACb,EACA,CACI,MAAS,WACT,MAAS,6BACb,EACA,CACI,MAAS,cACT,MAAS,sBACb,EACA,CACI,MAAS,WACT,MAAS,+BACb,EACA,CACI,MAAS,oBACT,MAAS,oBACb,EACA,CACI,MAAS,WACT,MAAS,6BACb,EACA,CACI,MAAS,WACT,MAAS,iBACb,EACA,CACI,MAAS,qCACT,MAAS,oBACb,EACA,CACI,MAAS,wBACT,MAAS,sBACb,EACA,CACI,MAAS,QACT,MAAS,0BACb,EACA,CACI,MAAS,gBACT,MAAS,iBACb,EACA,CACI,MAAS,QACT,MAAS,0BACb,EACA,CACI,MAAS,YACT,MAAS,kBACb,EACA,CACI,MAAS,kBACT,MAAS,kBACb,EACA,CACI,MAAS,QACT,MAAS,oBACb,EACA,CACI,MAAS,QACT,MAAS,sBACb,EACA,CACI,MAAS,aACT,MAAS,kBACb,EACA,CACI,MAAS,QACT,MAAS,kBACb,EACA,CACI,MAAS,YACT,MAAS,kBACb,EACA,CACI,MAAS,QACT,MAAS,iBACb,EACA,CACI,MAAS,QACT,MAAS,gBACb,EACA,CACI,MAAS,kBACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,oBACb,EACA,CACI,MAAS,WACT,MAAS,oBACb,EACA,CACI,MAAS,QACT,MAAS,qBACb,EACA,CACI,MAAS,QACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,uBACb,EACA,CACI,MAAS,WACT,MAAS,gCACb,EACA,CACI,MAAS,YACT,MAAS,yBACb,EACA,CACI,MAAS,YACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,gBACT,MAAS,uBACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,QACT,MAAS,mBACb,EACA,CACI,MAAS,YACT,MAAS,kBACb,EACA,CACI,MAAS,WACT,MAAS,mBACb,EACA,CACI,MAAS,WACT,MAAS,mBACb,EACA,CACI,MAAS,QACT,MAAS,kBACb,EACA,CACI,MAAS,QACT,MAAS,mBACb,EACA,CACI,MAAS,QACT,MAAS,cACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,KACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,yBACb,EACA,CACI,MAAS,SACT,MAAS,0BACb,EACA,CACI,MAAS,SACT,MAAS,6BACb,EACA,CACI,MAAS,YACT,MAAS,sBACb,EACA,CACI,MAAS,SACT,MAAS,sBACb,EACA,CACI,MAAS,SACT,MAAS,sBACb,EACA,CACI,MAAS,QACT,MAAS,kBACb,EACA,CACI,MAAS,gBACT,MAAS,uBACb,EACA,CACI,MAAS,WACT,MAAS,gCACb,EACA,CACI,MAAS,0CACT,MAAS,qBACb,EACA,CACI,MAAS,8BACT,MAAS,uBACb,EACA,CACI,MAAS,eACT,MAAS,0BACb,EACA,CACI,MAAS,QACT,MAAS,sBACT,OAAU,SACd,EACA,CACI,MAAS,QACT,MAAS,sBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,yBACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,2CACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,8CACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,sBACT,OAAU,SACd,EACA,CACI,MAAS,QACT,MAAS,uBACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,uBACb,EACA,CACI,MAAS,gBACT,MAAS,qBACb,EACA,CACI,MAAS,WACT,MAAS,uBACb,EACA,CACI,MAAS,WACT,MAAS,6BACb,EACA,CACI,MAAS,eACT,MAAS,wBACb,EACA,CACI,MAAS,QACT,MAAS,uBACb,EACA,CACI,MAAS,YACT,MAAS,0BACb,EACA,CACI,MAAS,wBACT,MAAS,wBACb,EACA,CACI,MAAS,QACT,MAAS,wBACb,EACA,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,aACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,WACT,MAAS,wBACb,EACA,CACI,MAAS,WACT,MAAS,iCACb,EACA,CACI,MAAS,kBACT,MAAS,wBACb,EACA,CACI,MAAS,WACT,MAAS,yBACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,2BACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,oBACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,mBACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,EACA,CACI,MAAS,yBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,yBACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,SACT,MAAS,gBACb,EACA,CACI,MAAS,QACT,MAAS,kBACb,EACA,CACI,MAAS,gFACT,OAAU,SACV,MAAS,cACb,EACA,CACI,MAAS,8CACT,MAAS,aACb,EACA,CACI,MAAS,8CACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,OACb,EACA,CACI,MAAS,aACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,GACb,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,KACT,OAAU,SACd,EACA,CACI,MAAS,uBACT,MAAS,GACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,KACT,OAAU,SACd,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,GACb,EACA,CACI,MAAS,QACT,MAAS,GACb,EACA,CACI,MAAS,YACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,EACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,qsBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,uBACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,iBACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,+BACT,MAAS,iBACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,gBACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,WACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,6BACT,MAAS,qBACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,yBACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,+BACT,MAAS,gBACb,EACA,CACI,MAAS,kBACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,kBACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,gBACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,kBACT,OAAU,SACV,MAAS,WACb,EACA,CACI,MAAS,cACT,OAAU,SACV,MAAS,MACb,EACA,CACI,MAAS,mBACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,mBACT,OAAU,SACV,MAAS,oBACb,EACA,CACI,MAAS,oBACT,OAAU,SACV,MAAS,qBACb,EACA,CACI,MAAS,gBACT,OAAU,SACV,MAAS,oBACb,EACA,CACI,MAAS,6DACT,OAAU,SACV,MAAS,SACb,EACA,CACI,MAAS,kBACT,OAAU,SACV,MAAS,SACb,EACA,CACI,MAAS,iBACT,OAAU,SACV,MAAS,OACb,EACA,CACI,MAAS,eACT,OAAU,SACV,MAAS,OACb,EACA,CACI,MAAS,UACT,OAAU,SACV,MAAS,UACb,EACA,CACI,MAAS,qBACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,yFACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,eACT,OAAU,cACV,MAAS,eACb,EACA,CACI,MAAS,sBACT,OAAU,cACV,MAAS,qBACb,EACA,CACI,MAAS,eACT,OAAU,cACV,MAAS,cACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,SACT,OAAU,UACV,MAAS,QACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,2EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,MACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,yGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,6DACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uEACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,oBACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,eACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,gBACb,EACA,CACI,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,kBACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,YACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,gDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,GACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,6CACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,oHACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,iCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,mCACT,MAAS,SACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,wBACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,kJACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,GACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,cACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,cACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,aACT,OAAU,aACV,MAAS,MACb,EACA,IAAO,CACH,MAAS,OACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,+DACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,sIACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,EACA,CACI,MAAS,iCACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,2DACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,8HACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kDACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,CACJ,CACJ,EACA,cAAe,CACX,MAAS,yBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,kcACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,4CACT,MAAS,sBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,oBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,2BACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,+CACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,qBACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,yBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,yBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,yBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,0BACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,yBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,yBACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,uBACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,yCACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,sCACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,8BACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,UACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,iBACT,OAAU,SACd,EACA,CACI,MAAS,4BACT,MAAS,YACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,qBACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,YACT,OAAU,SACd,EACA,CACI,MAAS,iBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,iBACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,gBACb,EACA,CACI,MAAS,8CACT,MAAS,oBACb,EACA,CACI,MAAS,6CACT,MAAS,gBACb,EACA,CACI,MAAS,sDACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,+DACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,iBACb,EACA,CACI,MAAS,SACT,MAAS,iBACb,EACA,CACI,MAAS,2CACT,MAAS,iBACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,6CACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,MAAS,eACb,EACA,CACI,MAAS,0CACT,MAAS,gBACb,EACA,CACI,MAAS,8BACT,MAAS,YACb,EACA,CACI,MAAS,4CACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,0CACT,MAAS,WACb,EACA,CACI,MAAS,kBACT,MAAS,aACb,EACA,CACI,MAAS,kBACT,MAAS,qBACb,EACA,CACI,MAAS,mBACT,MAAS,oBACb,EACA,CACI,MAAS,kDACT,MAAS,oBACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,4EACT,MAAS,YACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,iBACb,EACA,CACI,MAAS,iBACT,MAAS,sBACb,EACA,CACI,MAAS,iBACT,MAAS,wBACb,EACA,CACI,MAAS,oBACT,MAAS,wBACb,EACA,CACI,MAAS,uCACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,mBACb,EACA,CACI,MAAS,4BACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,kBACT,MAAS,gBACb,EACA,CACI,MAAS,6BACT,MAAS,kBACb,EACA,CACI,MAAS,qDACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,iBACb,EACA,CACI,MAAS,iBACT,MAAS,iBACb,EACA,CACI,MAAS,4CACT,MAAS,sBACb,EACA,CACI,MAAS,+BACT,MAAS,kBACb,EACA,CACI,MAAS,2CACT,MAAS,WACb,EACA,CACI,MAAS,6CACT,MAAS,eACb,EACA,CACI,MAAS,kBACT,MAAS,oBACb,EACA,CACI,MAAS,iCACT,MAAS,eACb,EACA,CACI,MAAS,kBACT,MAAS,cACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,qCACT,MAAS,aACb,EACA,CACI,MAAS,gCACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,UACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,0BACT,OAAU,WACV,MAAS,YACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,qDACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,mCACT,OAAU,UACV,MAAS,oBACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,2DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,gCACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,YACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,SACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,6EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,iBACb,EACA,CACI,MAAS,eACT,MAAS,MACT,OAAU,QACd,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,eAAgB,CACZ,MAAS,oDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,CACJ,CACJ,EACA,iBAAkB,CACd,MAAS,qBACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,6CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,OAAU,SACV,MAAS,KACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,YACT,OAAU,SACV,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,oHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gFACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,6dACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kDACT,MAAS,YACb,EACA,CACI,MAAS,6HACT,MAAS,WACb,EACA,CACI,MAAS,2CACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,kBACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,8BACT,MAAS,iBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,iBACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,eACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,mBACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,aACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,sDACT,MAAS,SACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,KACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,sNACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,cACb,EACA,CACI,MAAS,mCACT,MAAS,QACb,EACA,CACI,MAAS,0BACT,MAAS,KACT,OAAU,SACd,EACA,CACI,MAAS,iEACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,YAAa,CACT,MAAS,4GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,gBACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,2CACT,MAAS,QACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,sDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,oBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uDACT,MAAS,IACb,EACA,CACI,MAAS,0CACT,MAAS,cACb,EACA,CACI,MAAS,0CACT,MAAS,cACb,EACA,CACI,MAAS,sCACT,MAAS,UACb,EACA,CACI,MAAS,uCACT,MAAS,WACb,EACA,CACI,MAAS,0CACT,MAAS,cACb,EACA,CACI,MAAS,wCACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,6BACT,MAAS,iBACT,OAAU,QACd,CACJ,CACJ,EACA,UAAW,CACP,MAAS,+DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,aACb,EACA,CACI,MAAS,mCACT,MAAS,UACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,qcACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,mBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,+BACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,6BACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,gCACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,2BACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,6BACT,MAAS,MACb,EACA,CACI,MAAS,uCACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,iBACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,uBACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qBACT,OAAU,gBACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,MACT,MAAS,MACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,wCACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qBACT,OAAU,gBACV,MAAS,IACb,EACA,eAAgB,CACZ,MAAS,6BACT,OAAU,gBACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,gDACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,oMACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,mBACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,mDACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,0CACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,0CACT,OAAU,aACV,MAAS,IACb,EACA,CACI,MAAS,kBACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,6DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,GAAM,CACF,MAAS,+FACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uCACT,MAAS,YACb,EACA,CACI,MAAS,kCACT,MAAS,kBACb,EACA,CACI,MAAS,kCACT,MAAS,mBACb,EACA,CACI,MAAS,uCACT,MAAS,OACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,SACb,EACA,CACI,MAAS,gCACT,MAAS,QACb,EACA,CACI,MAAS,gCACT,MAAS,OACb,EACA,CACI,MAAS,gCACT,MAAS,KACb,EACA,CACI,MAAS,oCACT,MAAS,WACb,EACA,CACI,MAAS,gCACT,MAAS,QACb,EACA,CACI,MAAS,gCACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,MACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,MACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,MACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,MACb,EACA,CACI,MAAS,WACT,MAAS,MACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,mCACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,0BACT,MAAS,MACb,EACA,CACI,MAAS,iCACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,qBACb,EACA,CACI,MAAS,sCACT,MAAS,kBACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,mBACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,MACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,sCACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,wCACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,mCACT,MAAS,QACb,EACA,CACI,MAAS,gCACT,MAAS,YACb,EACA,CACI,MAAS,wCACT,MAAS,cACb,EACA,CACI,MAAS,uCACT,MAAS,mBACb,EACA,CACI,MAAS,6BACT,MAAS,UACb,EACA,CACI,MAAS,mCACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,0BACT,MAAS,MACb,EACA,CACI,MAAS,uCACT,MAAS,iBACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,+BACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,gCACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uCACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,aACb,EACA,CACI,MAAS,mCACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,2CACT,MAAS,QACb,EACA,CACI,MAAS,oCACT,MAAS,SACb,EACA,CACI,MAAS,yCACT,MAAS,MACb,EACA,CACI,MAAS,+DACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,6BACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,6BACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,8FACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,KACT,OAAU,QACd,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,sBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,OAAU,SACV,MAAS,OACb,EACA,CACI,MAAS,sCACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,sBACT,OAAU,gBACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,sCACT,OAAU,SACV,MAAS,QACb,EACA,MAAS,CACL,MAAS,qCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,iBACb,EACA,CACI,MAAS,sBACT,MAAS,wBACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,wJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qCACT,MAAS,aACb,EACA,CACI,MAAS,8HACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,uEACT,MAAS,SACT,OAAU,QACd,CACJ,CACJ,EACA,IAAO,CACH,MAAS,oDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,OACT,MAAS,OACT,OAAU,YACd,EACA,CACI,MAAS,UACT,MAAS,MACT,OAAU,YACd,EACA,CACI,MAAS,sEACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,aACT,OAAU,gBACV,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,kDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,mBACb,EACA,CACI,MAAS,yBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,wBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,8BACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qDACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,OAAU,KACV,MAAS,EACb,EACA,CACI,MAAS,oCACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,gBAAiB,CACb,MAAS,mPACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,gBACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,2BACT,MAAS,eACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,qCACT,MAAS,eACb,EACA,CACI,MAAS,uCACT,MAAS,eACb,EACA,CACI,MAAS,gBACT,MAAS,iBACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,6BACT,MAAS,cACb,EACA,CACI,MAAS,iBACT,MAAS,mBACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,6EACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,wDACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,qDACT,MAAS,IACb,CACJ,CACJ,EACA,eAAgB,CACZ,MAAS,kDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,iCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,sCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,mBACT,OAAU,gBACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,gDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,4FACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,QACb,EACA,CACI,MAAS,4CACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,sCACT,OAAU,gBACV,MAAS,IACb,CACJ,CACJ,EACA,iBAAkB,CACd,MAAS,0FACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,qBACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,oBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,aACT,MAAS,qBACb,EACA,CACI,MAAS,yBACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,kBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,kBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,kBACT,MAAS,KACT,OAAU,QACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,0DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,mCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,0NACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,OAAU,SACV,MAAS,SACb,EACA,CACI,MAAS,gCACT,OAAU,SACV,MAAS,OACb,EACA,CACI,MAAS,sCACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,gBACb,EACA,CACI,MAAS,aACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,gBACb,EACA,CACI,MAAS,iBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,iBACb,EACA,CACI,MAAS,kBACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,8BACT,MAAS,kBACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,iBACb,EACA,CACI,MAAS,aACT,MAAS,kBACb,EACA,CACI,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,gBACb,EACA,CACI,MAAS,aACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,iBACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,mOACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,aACT,OAAU,SACd,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,wCACT,MAAS,IACb,EACA,CACI,MAAS,wCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,KACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,OAAU,SACV,MAAS,aACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,yCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,OAAU,gBACV,MAAS,IACb,CACJ,CACJ,EACA,YAAa,CACT,MAAS,wBACT,OAAU,SACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,0EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,uDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,oBACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,+HACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,uCACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,qCACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,mBACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,oIACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,iBACT,MAAS,kBACb,EACA,CACI,MAAS,gBACT,MAAS,gBACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,MACb,EACA,CACI,MAAS,kBACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,KACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,OACb,EACA,CACI,MAAS,iBACT,MAAS,UACb,EACA,CACI,MAAS,4DACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,oGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,oFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,4CACT,MAAS,aACT,OAAU,QACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,6BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,kBACT,MAAS,UACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,OACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,sEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,YACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,WACb,EACA,CACI,MAAS,cACT,OAAU,SACV,MAAS,aACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qFACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,uEACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,0CACT,OAAU,aACV,MAAS,QACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,yBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,gCACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,OAAU,UACV,MAAS,IACb,EACA,CACI,MAAS,2CACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,yDACT,OAAU,UACV,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,8SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,UACb,EACA,CACI,MAAS,qCACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,kBACb,EACA,CACI,MAAS,yBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,cACT,OAAU,SACd,EACA,CACI,MAAS,gCACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,gDACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,sCACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,YACT,OAAU,gBACV,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,QACT,OAAU,SACd,EACA,CACI,MAAS,2FACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,8BACT,OAAU,gBACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,yBACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,oBACT,OAAU,gBACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,0CACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,kDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,mgCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,6FACT,MAAS,YACb,EACA,CACI,MAAS,gBACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,EACA,CACI,MAAS,wEACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,kBACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,IACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,4EACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,uRACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,oBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,+EACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,KACT,OAAU,QACd,CACJ,CACJ,EACA,OAAU,CACN,MAAS,2BACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,6ZACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uCACT,MAAS,qBACb,EACA,CACI,MAAS,oBACT,MAAS,oBACb,EACA,CACI,MAAS,cACT,MAAS,QACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,0LACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,qBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,0CACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,yBACT,OAAU,gBACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,OACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,UAAW,CACP,MAAS,6BACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,qEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kEACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,SAAU,CACN,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wEACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,oBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,aACT,OAAU,QACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,eAAgB,CACZ,MAAS,iGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,4DACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,6CACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,CACJ,CACJ,EACA,GAAM,CACF,MAAS,eACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,MACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,iDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,OACb,EACA,CACI,MAAS,qCACT,OAAU,aACV,MAAS,OACb,CACJ,CACJ,EACA,eAAgB,CACZ,MAAS,eACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,UACT,MAAS,UACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,iDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,gCACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,8CACT,MAAS,IACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,QACT,MAAS,oBACT,OAAU,IACd,EACA,SAAY,CACR,MAAS,+DACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,oBACT,OAAU,gBACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,MACb,CACJ,CACJ,EACA,QAAS,CACL,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,MACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,gEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,kDACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,uCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,UACT,OAAU,QACd,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,OACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,+DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,2CACT,MAAS,UACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,WACT,OAAU,KACV,MAAS,WACb,EACA,UAAa,CACT,MAAS,yBACT,OAAU,KACV,MAAS,MACb,EACA,MAAS,CACL,MAAS,uBACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,MACT,MAAS,KACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,oCACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,6wCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,kBACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,6CACT,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,mCACT,MAAS,eACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,eACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,+BACT,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,kBACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,QACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,6CACT,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,8BACT,MAAS,MACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,iCACT,MAAS,UACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,8BACT,MAAS,QACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,6BACT,MAAS,QACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,6BACT,MAAS,QACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,4BACT,MAAS,MACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,4BACT,MAAS,QACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,4BACT,MAAS,OACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,6BACT,MAAS,OACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,2BACT,MAAS,QACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,2BACT,MAAS,QACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,2BACT,MAAS,YACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,4BACT,MAAS,OACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,6BACT,MAAS,QACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,6BACT,MAAS,QACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,6BACT,MAAS,OACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,6BACT,MAAS,cACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,gBACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,0CACT,MAAS,WACb,EACA,CACI,MAAS,0CACT,MAAS,YACb,EACA,CACI,MAAS,yDACT,MAAS,cACb,EACA,CACI,MAAS,0CACT,MAAS,gBACb,EACA,CACI,MAAS,8BACT,MAAS,gBACb,EACA,CACI,MAAS,iEACT,MAAS,UACb,EACA,CACI,MAAS,qEACT,MAAS,aACb,EACA,CACI,MAAS,uCACT,MAAS,UACb,EACA,CACI,MAAS,uCACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,eACb,EACA,CACI,MAAS,wDACT,MAAS,UACb,EACA,CACI,MAAS,4DACT,MAAS,aACb,EACA,CACI,MAAS,wCACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,eACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,mDACT,MAAS,UACb,EACA,CACI,MAAS,+BACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,gBACb,EACA,CACI,MAAS,8BACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,EACA,CACI,MAAS,oDACT,MAAS,WACb,EACA,CACI,MAAS,8BACT,MAAS,cACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,kCACT,MAAS,kBACb,EACA,CACI,MAAS,iCACT,MAAS,aACb,EACA,CACI,MAAS,iCACT,MAAS,aACb,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,WACb,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,eACb,EACA,CACI,MAAS,iDACT,MAAS,WACb,EACA,CACI,MAAS,uCACT,MAAS,YACb,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,eACb,EACA,CACI,MAAS,sCACT,MAAS,UACb,EACA,CACI,MAAS,sCACT,MAAS,UACb,EACA,CACI,MAAS,wDACT,MAAS,WACb,EACA,CACI,MAAS,iCACT,MAAS,WACb,EACA,CACI,MAAS,wDACT,MAAS,WACb,EACA,CACI,MAAS,0CACT,MAAS,YACb,EACA,CACI,MAAS,oDACT,MAAS,UACb,EACA,CACI,MAAS,sFACT,OAAU,UACV,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,WACb,EACA,CACI,MAAS,wCACT,MAAS,gBACb,EACA,CACI,MAAS,yCACT,MAAS,WACb,EACA,CACI,MAAS,sCACT,MAAS,gBACb,EACA,CACI,MAAS,iCACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,gBACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,gBACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,8BACT,MAAS,gBACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,iCACT,MAAS,gBACb,EACA,CACI,MAAS,8CACT,MAAS,gBACb,EACA,CACI,MAAS,wCACT,MAAS,qBACb,EACA,CACI,MAAS,oCACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,gBACb,EACA,CACI,MAAS,8BACT,MAAS,gBACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,uCACT,MAAS,WACb,EACA,CACI,MAAS,mCACT,MAAS,gBACb,EACA,CACI,MAAS,oCACT,MAAS,iBACb,EACA,CACI,MAAS,iCACT,MAAS,sBACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,oDACT,MAAS,kBACT,OAAU,SACd,EACA,CACI,MAAS,8BACT,MAAS,uBACT,OAAU,SACd,EACA,CACI,MAAS,gDACT,MAAS,mBACb,EACA,CACI,MAAS,2FACT,MAAS,WACb,EACA,CACI,MAAS,0EACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,wBACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,yEACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,wFACT,MAAS,WACb,EACA,CACI,MAAS,wCACT,MAAS,gBACb,EACA,CACI,MAAS,qCACT,MAAS,YACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,4CACT,MAAS,mBACb,EACA,CACI,MAAS,wDACT,MAAS,WACb,EACA,CACI,MAAS,iCACT,MAAS,gBACb,EACA,CACI,MAAS,4CACT,MAAS,mBACb,EACA,CACI,MAAS,8BACT,MAAS,wBACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,iCACT,MAAS,gBACb,EACA,CACI,MAAS,kCACT,MAAS,iBACb,EACA,CACI,MAAS,iCACT,MAAS,sBACb,EACA,CACI,MAAS,oDACT,MAAS,WACb,EACA,CACI,MAAS,yDACT,MAAS,YACb,EACA,CACI,MAAS,qCACT,MAAS,oBACb,EACA,CACI,MAAS,iCACT,MAAS,WACb,EACA,CACI,MAAS,2CACT,MAAS,YACb,EACA,CACI,MAAS,0CACT,MAAS,iBACb,EACA,CACI,MAAS,8BACT,MAAS,sBACb,EACA,CACI,MAAS,wCACT,MAAS,kBACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,EACA,CACI,MAAS,iCACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,sBACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,iDACT,MAAS,kBACb,EACA,CACI,MAAS,oDACT,MAAS,YACb,EACA,CACI,MAAS,2CACT,MAAS,mBACb,EACA,CACI,MAAS,uEACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,iBACb,EACA,CACI,MAAS,SACT,MAAS,oBACb,EACA,CACI,MAAS,8BACT,MAAS,yBACb,EACA,CACI,MAAS,iEACT,MAAS,YACb,EACA,CACI,MAAS,iCACT,MAAS,WACb,EACA,CACI,MAAS,8BACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,UACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,eACb,EACA,CACI,MAAS,qCACT,MAAS,kBACb,EACA,CACI,MAAS,qDACT,MAAS,sBACb,EACA,CACI,MAAS,8BACT,MAAS,2BACb,EACA,CACI,MAAS,wCACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,wCACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,2BACT,OAAU,QACd,EACA,CACI,MAAS,oDACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,2EACT,MAAS,YACT,OAAU,IACd,EACA,CACI,MAAS,gBACT,MAAS,eACT,OAAU,uBACd,EACA,CACI,MAAS,iBACT,MAAS,gBACT,OAAU,uBACd,EACA,CACI,MAAS,kBACT,MAAS,iBACT,OAAU,IACd,EACA,CACI,MAAS,8BACT,MAAS,KACT,OAAU,IACd,EACA,CACI,MAAS,2CACT,MAAS,KACT,OAAU,IACd,EACA,CACI,MAAS,uDACT,MAAS,KACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,KACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,MACT,MAAS,eACb,EACA,CACI,MAAS,gCACT,MAAS,KACT,MAAS,eACb,EACA,CACI,MAAS,wCACT,MAAS,KACT,MAAS,gBACT,OAAU,eACd,EACA,CACI,MAAS,iCACT,MAAS,KACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,oCACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,qPACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,gBACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,gBACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,cACT,OAAU,IACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,mDACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,MACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,+EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,cACb,EACA,CACI,MAAS,iCACT,MAAS,eACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,CACJ,CACJ,EACA,gBAAiB,CACb,MAAS,gDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,sBACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,4EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,gDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,UACT,OAAU,IACd,CACJ,CACJ,EACA,QAAW,CACP,MAAS,uJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kDACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,yGACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,iBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,eACT,MAAS,QACb,EACA,CACI,MAAS,wCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,sBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,OAAU,KACV,MAAS,mBACb,EACA,CACI,MAAS,0BACT,OAAU,KACV,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,iBACb,EACA,CACI,MAAS,kDACT,MAAS,mBACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4LACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,6BACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,aACb,EACA,CACI,MAAS,kCACT,MAAS,aACb,EACA,CACI,MAAS,mCACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,UACb,EACA,CACI,MAAS,iBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,OAAU,aACV,MAAS,QACb,EACA,CACI,MAAS,qBACT,OAAU,aACV,MAAS,QACb,EACA,CACI,MAAS,qBACT,OAAU,aACV,MAAS,QACb,EACA,CACI,MAAS,oBACT,OAAU,gBACV,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,OAAU,aACV,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,QACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,wCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,iBACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,mBACT,MAAS,oBACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,MACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,+BACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,gBACT,MAAS,MACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,mBACT,OAAU,gBACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,cACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,YACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,wBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,aACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,IACb,EACA,CACI,MAAS,0DACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,4BACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,cACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,gHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,kOACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,2CACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,oBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,qBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,oBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,qBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,qBACb,EACA,CACI,MAAS,oBACT,MAAS,qBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,oCACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,gCACT,MAAS,oBACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,iDACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,sBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,YACT,OAAU,QACd,CACJ,CACJ,EACA,SAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oBACT,OAAU,SACV,MAAS,IACb,EACA,iBAAkB,CACd,MAAS,2FACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,QACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,UACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,cACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,KACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,MACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,0BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,eACT,OAAU,QACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,wHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wCACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,+CACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,kBACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,2FACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,mDACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,+IACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+CACT,MAAS,IACb,EACA,CACI,MAAS,qFACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,aACb,EACA,CACI,MAAS,2HACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,6LACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,QACT,OAAU,SACd,EACA,CACI,MAAS,mCACT,MAAS,MACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,eACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,gDACT,MAAS,UACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,KACT,OAAU,eACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,oCACT,OAAU,aACV,MAAS,SACb,EACA,MAAS,CACL,MAAS,wBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,UACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,0IACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,uCACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,eACb,EACA,CACI,MAAS,sEACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,6CACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,WACT,OAAU,QACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,uBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,MACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,WACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,OAAU,UACV,MAAS,IACb,EACA,CACI,MAAS,qBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,aACT,OAAU,IACd,EACA,CACI,MAAS,WACT,OAAU,KACV,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,UACT,OAAU,SACV,MAAS,SACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,YACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,sEACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,uBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,oBACb,EACA,CACI,MAAS,aACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,oBACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,wNACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,mBACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,sDACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,4CACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,KACT,OAAU,eACd,CACJ,CACJ,EACA,UAAa,CACT,MAAS,iEACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,WACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,mRACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,OAAU,SACV,MAAS,QACb,EACA,CACI,MAAS,aACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,QACT,OAAU,SACV,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,OACb,EACA,CACI,MAAS,WACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,SACT,MAAS,sBACb,EACA,CACI,MAAS,QACT,MAAS,sBACb,EACA,CACI,MAAS,OACT,MAAS,uBACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,iBACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,iBACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,MACT,OAAU,SACd,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,OAAU,KACV,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,CACJ,CACJ,EACA,WAAY,CACR,MAAS,mBACT,OAAU,SACV,MAAS,SACb,EACA,SAAY,CACR,MAAS,0CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,sCACT,MAAS,MACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,gDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wDACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,qEACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,0DACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,wFACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,+BACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,yBACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,kiDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,mCACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,oCACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,sCACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,gCACT,MAAS,UACb,EACA,CACI,MAAS,gCACT,MAAS,SACb,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,yCACT,MAAS,cACb,EACA,CACI,MAAS,sCACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,iCACT,MAAS,QACb,EACA,CACI,MAAS,gCACT,MAAS,aACb,EACA,CACI,MAAS,yCACT,MAAS,MACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,0CACT,MAAS,UACb,EACA,CACI,MAAS,gDACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,kCACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,cACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,uCACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,mBACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,uEACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,8DACT,MAAS,UACb,EACA,CACI,MAAS,6CACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,qFACT,MAAS,UACb,EACA,CACI,MAAS,yCACT,MAAS,cACb,EACA,CACI,MAAS,6DACT,MAAS,UACb,EACA,CACI,MAAS,wDACT,MAAS,UACb,EACA,CACI,MAAS,+CACT,MAAS,mBACb,EACA,CACI,MAAS,6EACT,MAAS,UACb,EACA,CACI,MAAS,4EACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,sCACT,MAAS,cACb,EACA,CACI,MAAS,sDACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,cACb,EACA,CACI,MAAS,+DACT,MAAS,UACb,EACA,CACI,MAAS,uEACT,MAAS,SACb,EACA,CACI,MAAS,qCACT,MAAS,cACb,EACA,CACI,MAAS,2CACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,cACb,EACA,CACI,MAAS,kEACT,MAAS,UACb,EACA,CACI,MAAS,qCACT,MAAS,UACb,EACA,CACI,MAAS,6CACT,MAAS,UACb,EACA,CACI,MAAS,6DACT,MAAS,UACb,EACA,CACI,MAAS,8DACT,MAAS,SACb,EACA,CACI,MAAS,sCACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,cACb,EACA,CACI,MAAS,+CACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,iDACT,MAAS,UACb,EACA,CACI,MAAS,8CACT,MAAS,cACb,EACA,CACI,MAAS,yCACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,0CACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,UACb,EACA,CACI,MAAS,kCACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,uCACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,gCACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,8CACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,sCACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,mBACb,EACA,CACI,MAAS,kDACT,MAAS,UACb,EACA,CACI,MAAS,qCACT,MAAS,qBACb,EACA,CACI,MAAS,yCACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,sBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,gCACT,MAAS,SACb,EACA,CACI,MAAS,qCACT,MAAS,SACb,EACA,CACI,MAAS,4CACT,MAAS,cACb,EACA,CACI,MAAS,yCACT,MAAS,aACb,EACA,CACI,MAAS,qCACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,cACb,EACA,CACI,MAAS,8CACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,2CACT,MAAS,WACb,EACA,CACI,MAAS,gCACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,uCACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,qCACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,aACb,EACA,CACI,MAAS,uCACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,wBACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,uDACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,4CACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,aACb,EACA,CACI,MAAS,kCACT,MAAS,sBACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,+CACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,+CACT,MAAS,SACb,EACA,CACI,MAAS,gCACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,mCACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uCACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,mCACT,MAAS,cACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,gDACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,yBACT,MAAS,gBACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,uCACT,MAAS,KACb,EACA,CACI,MAAS,qDACT,MAAS,UACb,EACA,CACI,MAAS,mCACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,qCACT,MAAS,KACb,EACA,CACI,MAAS,kDACT,MAAS,UACb,EACA,CACI,MAAS,+DACT,MAAS,SACb,EACA,CACI,MAAS,8CACT,MAAS,KACb,EACA,CACI,MAAS,kEACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,mBACb,EACA,CACI,MAAS,yDACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,kDACT,MAAS,SACb,EACA,CACI,MAAS,+BACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,4DACT,MAAS,gBACb,EACA,CACI,MAAS,iDACT,MAAS,gBACb,EACA,CACI,MAAS,+CACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,OACb,EACA,CACI,MAAS,gCACT,MAAS,KACb,EACA,CACI,MAAS,gCACT,MAAS,OACb,EACA,CACI,MAAS,iCACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,mCACT,MAAS,MACb,EACA,CACI,MAAS,2CACT,MAAS,WACb,EACA,CACI,MAAS,sCACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,MAAS,gBACb,EACA,CACI,MAAS,yBACT,MAAS,gBACb,EACA,CACI,MAAS,kCACT,MAAS,iBACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,gDACT,MAAS,MACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,WACb,EACA,CACI,MAAS,mCACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,iBACb,EACA,CACI,MAAS,mCACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,2BACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,mCACT,MAAS,MACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,WACb,EACA,CACI,MAAS,kDACT,MAAS,WACb,EACA,CACI,MAAS,0CACT,MAAS,UACb,EACA,CACI,MAAS,kDACT,MAAS,iBACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sCACT,MAAS,WACb,EACA,CACI,MAAS,2CACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,iBACb,EACA,CACI,MAAS,yBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,wBACT,OAAU,QACd,EACA,CACI,MAAS,mCACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,qBACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,+BACT,MAAS,uBACT,OAAU,QACd,EACA,CACI,MAAS,+BACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,cACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,QACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,kCACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,sEACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,wCACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,qDACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,+BACT,OAAU,SACV,MAAS,qBACb,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,qCACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,sCACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,iCACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,yCACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,iCACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,uCACT,OAAU,SACV,MAAS,qBACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,qBACb,EACA,CACI,MAAS,2CACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,kCACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,iDACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,gCACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,iCACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,sBACT,OAAU,WACV,MAAS,eACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,OAAU,UACV,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,4EACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,8OACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2IACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,kBACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,+BACT,MAAS,KACT,OAAU,QACd,CACJ,CACJ,EACA,QAAS,CACL,MAAS,2EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,0BACT,MAAS,cACT,OAAU,SACd,EACA,CACI,MAAS,yBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,8MACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,eACT,OAAU,aACV,MAAS,cACb,EACA,CACI,MAAS,mBACT,OAAU,aACV,MAAS,kBACb,EACA,CACI,MAAS,8FACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,kBACb,EACA,CACI,MAAS,yBACT,MAAS,iBACb,EACA,CACI,MAAS,sCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,+DACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,6CACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,0CACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,OAAU,aACV,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,8UACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,mDACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,OAAU,aACV,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,uBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,0JACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,MACb,EACA,CACI,MAAS,gBACT,MAAS,iBACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,sBACb,EACA,CACI,MAAS,iBACT,MAAS,qBACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,uBACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,kLACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,WACT,OAAU,aACV,MAAS,yBACb,EACA,CACI,MAAS,WACT,MAAS,eACb,EACA,CACI,MAAS,WACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,qBACb,EACA,CACI,MAAS,cACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,qBACb,EACA,CACI,MAAS,iBACT,MAAS,kBACb,EACA,CACI,MAAS,WACT,MAAS,uBACb,EACA,CACI,MAAS,WACT,MAAS,kBACb,EACA,CACI,MAAS,WACT,MAAS,qBACb,EACA,CACI,MAAS,WACT,MAAS,mBACb,EACA,CACI,MAAS,WACT,MAAS,mBACb,EACA,CACI,MAAS,WACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,sBACb,EACA,CACI,MAAS,WACT,MAAS,sBACb,EACA,CACI,MAAS,WACT,MAAS,mBACb,EACA,CACI,MAAS,0FACT,MAAS,KACT,OAAU,IACd,CACJ,CACJ,EACA,IAAO,CACH,MAAS,wCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,eACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,sEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,OAAU,KACV,MAAS,EACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,KACb,EACA,CACI,MAAS,SACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,KACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,eACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,kCACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,GACb,EACA,CACI,MAAS,gCACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,SACT,OAAU,QACd,CACJ,CACJ,EACA,IAAO,CACH,MAAS,+BACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,wDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,iGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,KACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,WACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,SACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,SACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,SACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,aACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,SACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,SACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,SACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,cACT,OAAU,SACd,EACA,CACI,MAAS,iDACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,4CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,KACb,EACA,CACI,MAAS,SACT,MAAS,KACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,cACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,gGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,YACb,EACA,CACI,MAAS,0BACT,MAAS,GACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,uCACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,4BACT,MAAS,QACb,EACA,CACI,MAAS,iCACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,iBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,6BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,6BACT,OAAU,aACV,MAAS,IACb,EACA,WAAc,CACV,MAAS,kBACT,OAAU,gBACV,MAAS,QACb,EACA,SAAY,CACR,MAAS,gHACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,OACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,kBACb,EACA,CACI,MAAS,aACT,MAAS,YACT,OAAU,IACd,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,IACd,CACJ,CACJ,EACA,IAAO,CACH,MAAS,UACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACT,OAAU,YACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,kFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,8DACT,MAAS,OACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,SAAU,CACN,MAAS,qBACT,OAAU,gBACV,MAAS,IACb,EACA,WAAY,CACR,MAAS,wDACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,aACT,OAAU,YACd,EACA,CACI,MAAS,4BACT,MAAS,QACT,OAAU,YACd,EACA,CACI,MAAS,4BACT,MAAS,KACT,OAAU,YACd,EACA,CACI,MAAS,sCACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,oBACT,OAAU,gBACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,qCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,8CACT,OAAU,SACV,MAAS,IACb,EACA,WAAc,CACV,MAAS,2FACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,KACT,OAAU,YACd,EACA,CACI,MAAS,sCACT,MAAS,aACT,OAAU,YACd,EACA,CACI,MAAS,oCACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,KACT,OAAU,YACd,EACA,CACI,MAAS,4CACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,iDACT,OAAU,SACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,mCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,OAAU,UACV,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,cACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,sCACT,MAAS,MACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,iDACT,MAAS,IACb,EACA,CACI,MAAS,cACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,mBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,sCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,cACb,CACJ,CACJ,EACA,WAAY,CACR,MAAS,oCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,oEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6CACT,MAAS,OACb,EACA,CACI,MAAS,kDACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,OACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,qFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,2EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,kBACT,OAAU,SACV,MAAS,UACb,EACA,CACI,MAAS,mBACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,iCACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,kEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,gBACT,MAAS,cACb,EACA,CACI,MAAS,sCACT,MAAS,gBACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,kDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wCACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,KACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,iLACT,MAAS,IACb,CACJ,CACJ,EACA,oBAAqB,CACjB,MAAS,4DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,GACb,EACA,CACI,MAAS,iBACT,MAAS,QACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,8HACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,oBACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,qBACb,EACA,CACI,MAAS,0BACT,MAAS,iBACb,EACA,CACI,MAAS,aACT,MAAS,kBACb,EACA,CACI,MAAS,yCACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,eACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,0HACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,kCACT,MAAS,KACb,EACA,CACI,MAAS,gCACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,MAAS,KACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,+BACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,gBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sCACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,CACJ,CACJ,EACA,UAAW,CACP,MAAS,0CACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,mBACT,OAAU,gBACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,8CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qCACT,MAAS,aACb,EACA,CACI,MAAS,gBACT,OAAU,SACV,MAAS,WACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,6BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,CACJ,CACJ,EACA,UAAW,CACP,MAAS,wBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,oDACT,OAAU,SACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,gYACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,iBACb,EACA,CACI,MAAS,QACT,MAAS,oBACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,4BACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,kBACb,EACA,CACI,MAAS,QACT,MAAS,QACT,OAAU,eACd,EACA,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,OACb,CACJ,CACJ,EACA,iBAAe,CACX,MAAS,6LACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,aACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,mCACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,mCACT,MAAS,SACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,eACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,eACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,OACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,wBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,gBACT,MAAS,qBACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,mQACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,0CACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,cACT,OAAU,gBACV,MAAS,cACb,EACA,CACI,MAAS,aACT,OAAU,gBACV,MAAS,YACb,EACA,CACI,MAAS,uBACT,OAAU,gBACV,MAAS,kBACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,UACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,2CACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,wFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+EACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,kBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4CACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,kLACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,OAAU,gBACV,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,oGACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,gBACT,OAAU,YACd,EACA,CACI,MAAS,uCACT,MAAS,yBACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,iBACb,EACA,CACI,MAAS,0EACT,MAAS,cACb,EACA,CACI,MAAS,iDACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,cACT,OAAU,YACd,EACA,CACI,MAAS,kBACT,MAAS,eACT,OAAU,YACd,EACA,CACI,MAAS,yBACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,yBACT,MAAS,KACT,OAAU,YACd,CACJ,CACJ,EACA,IAAO,CACH,MAAS,kBACT,OAAU,gBACV,MAAS,IACb,EACA,SAAU,CACN,MAAS,8BACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,+GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oCACT,MAAS,QACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,YACT,OAAU,QACd,CACJ,CACJ,EACA,QAAW,CACP,MAAS,mDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,wCACT,MAAS,oBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,oDACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,kBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,0DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,cACb,EACA,CACI,MAAS,kCACT,OAAU,SACV,MAAS,cACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,wBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,OAAU,gBACV,MAAS,IACb,EACA,CACI,MAAS,uDACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uBACT,OAAU,SACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,0XACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,OACT,OAAU,SACd,EACA,CACI,MAAS,mBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,oCACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,wCACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,2BACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,6BACT,MAAS,0BACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,sBACT,OAAU,QACd,EACA,CACI,MAAS,+BACT,MAAS,qBACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,uCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,qBACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,oBACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,MACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,MACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,6BACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,yCACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,iCACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,wCACT,MAAS,cACb,EACA,CACI,MAAS,uDACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,wCACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,WACT,OAAU,WACV,MAAS,aACb,EACA,CACI,MAAS,0BACT,OAAU,UACV,MAAS,oBACb,EACA,CACI,MAAS,0BACT,OAAU,UACV,MAAS,oBACb,EACA,CACI,MAAS,0BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,6BACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,kDACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,OAAU,SACV,MAAS,KACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,OACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,QACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,yBACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,mBACb,EACA,CACI,MAAS,WACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,eACb,EACA,CACI,MAAS,WACT,MAAS,2BACb,EACA,CACI,MAAS,WACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,eACb,EACA,CACI,MAAS,WACT,MAAS,iBACb,EACA,CACI,MAAS,cACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,iBACb,EACA,CACI,MAAS,WACT,MAAS,mBACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,uBACb,EACA,CACI,MAAS,aACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,4BACb,EACA,CACI,MAAS,WACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,GAAM,CACF,MAAS,udACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,sBACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,YACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,gBACb,EACA,CACI,MAAS,cACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,4CACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,OACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,QACT,MAAS,sBACb,EACA,CACI,MAAS,yBACT,MAAS,KACb,EACA,CACI,MAAS,iCACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,0BACT,MAAS,iBACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,4BACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,MACb,EACA,CACI,MAAS,gCACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,QACb,EACA,CACI,MAAS,yCACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,MACb,EACA,CACI,MAAS,iBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,iFACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,iCACT,MAAS,cACb,EACA,CACI,MAAS,kBACT,MAAS,cACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,kBACT,MAAS,gBACb,EACA,CACI,MAAS,kBACT,MAAS,gBACb,EACA,CACI,MAAS,eACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,8BACT,MAAS,KACb,EACA,CACI,MAAS,iBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,QACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,OAAU,UACV,MAAS,MACb,EACA,CACI,MAAS,UACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,WACT,OAAU,KACV,MAAS,UACb,EACA,CACI,MAAS,uBACT,OAAU,KACV,MAAS,SACb,EACA,CACI,MAAS,kBACT,OAAU,WACV,MAAS,cACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,6CACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,OAAU,KACV,MAAS,EACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,iBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,mUACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,8CACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,mBACb,EACA,CACI,MAAS,YACT,MAAS,iBACb,EACA,CACI,MAAS,2CACT,MAAS,eACb,EACA,CACI,MAAS,2DACT,OAAU,aACV,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,kEACT,MAAS,aACT,OAAU,YACd,EACA,CACI,MAAS,mDACT,MAAS,gBACb,EACA,CACI,MAAS,oCACT,MAAS,gBACb,EACA,CACI,MAAS,oDACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,oEACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,YACd,EACA,CACI,MAAS,yBACT,MAAS,aACT,OAAU,YACd,EACA,CACI,MAAS,yBACT,MAAS,UACT,OAAU,YACd,EACA,CACI,MAAS,sBACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,qBACT,MAAS,UACT,OAAU,YACd,EACA,CACI,MAAS,wBACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,qBACT,MAAS,SACT,OAAU,YACd,EACA,CACI,MAAS,0BACT,MAAS,WACT,OAAU,YACd,EACA,CACI,MAAS,2BACT,MAAS,eACT,OAAU,YACd,EACA,CACI,MAAS,wBACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,wBACT,OAAU,aACV,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,UACT,OAAU,YACd,EACA,CACI,MAAS,2BACT,MAAS,eACT,OAAU,YACd,EACA,CACI,MAAS,0BACT,MAAS,WACT,OAAU,YACd,EACA,CACI,MAAS,0BACT,MAAS,WACT,OAAU,YACd,EACA,CACI,MAAS,eACT,MAAS,gBACT,OAAU,YACd,EACA,CACI,MAAS,aACT,MAAS,cACT,OAAU,YACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,OAAU,gBACV,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,iFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,2SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,mCACT,MAAS,cACb,EACA,CACI,MAAS,yBACT,MAAS,kBACb,EACA,CACI,MAAS,kBACT,MAAS,kBACb,EACA,CACI,MAAS,wEACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,uBACT,MAAS,sBACb,EACA,CACI,MAAS,sBACT,MAAS,kBACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,kCACT,MAAS,KACT,OAAU,eACd,EACA,CACI,MAAS,mCACT,MAAS,KACT,OAAU,eACd,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,KACT,OAAU,eACd,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,oLACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,wNACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,4IACT,MAAS,IACb,EACA,CACI,MAAS,8CACT,MAAS,KACT,OAAU,YACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,6DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,+BACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,sCACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,0CACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,UACb,CACJ,CACJ,EACA,mBAAoB,CAChB,MAAS,sOACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wMACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,SACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6FACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,qCACT,MAAS,SACT,OAAU,QACd,CACJ,CACJ,EACA,QAAW,CACP,MAAS,2IACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,OAAU,SACV,MAAS,kBACb,CACJ,CACJ,EACA,YAAa,CACT,MAAS,4BACT,OAAU,aACV,MAAS,IACb,EACA,aAAc,CACV,MAAS,gDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uCACT,MAAS,QACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,wCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,mHACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,iBACb,EACA,CACI,MAAS,8BACT,MAAS,oBACb,EACA,CACI,MAAS,4BACT,MAAS,iBACb,EACA,CACI,MAAS,0BACT,MAAS,sBACb,EACA,CACI,MAAS,uBACT,MAAS,sBACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,uBACT,MAAS,kBACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,wBACT,MAAS,qBACb,EACA,CACI,MAAS,8CACT,MAAS,kBACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,6BACT,MAAS,qBACb,EACA,CACI,MAAS,2CACT,MAAS,gBACb,EACA,CACI,MAAS,yBACT,MAAS,oBACb,EACA,CACI,MAAS,aACT,MAAS,mBACb,EACA,CACI,MAAS,aACT,MAAS,wBACb,EACA,CACI,MAAS,OACT,MAAS,qBACb,EACA,CACI,MAAS,+BACT,MAAS,mBACb,EACA,CACI,MAAS,4BACT,MAAS,sBACb,EACA,CACI,MAAS,0BACT,MAAS,kBACb,EACA,CACI,MAAS,4BACT,MAAS,qBACb,EACA,CACI,MAAS,yBACT,MAAS,qBACb,EACA,CACI,MAAS,0BACT,MAAS,mBACb,EACA,CACI,MAAS,0BACT,MAAS,yBACb,EACA,CACI,MAAS,4BACT,MAAS,sBACb,EACA,CACI,MAAS,yBACT,MAAS,sBACb,EACA,CACI,MAAS,yBACT,MAAS,mBACb,EACA,CACI,MAAS,yBACT,MAAS,wBACb,EACA,CACI,MAAS,wBACT,MAAS,yBACb,EACA,CACI,MAAS,uBACT,MAAS,uBACb,EACA,CACI,MAAS,yBACT,MAAS,0BACb,EACA,CACI,MAAS,oCACT,MAAS,4BACb,EACA,CACI,MAAS,yCACT,MAAS,uBACT,OAAU,SACd,EACA,CACI,MAAS,8BACT,MAAS,sBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,uBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,uBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,0BACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,yBACT,MAAS,qBACT,OAAU,SACd,EACA,CACI,MAAS,sBACT,MAAS,kBACT,OAAU,YACd,EACA,CACI,MAAS,4BACT,MAAS,oBACT,OAAU,YACd,EACA,CACI,MAAS,6BACT,MAAS,oBACT,OAAU,YACd,EACA,CACI,MAAS,yCACT,MAAS,oBACT,OAAU,YACd,EACA,CACI,MAAS,yCACT,MAAS,mBACT,OAAU,YACd,EACA,CACI,MAAS,8CACT,MAAS,mBACT,OAAU,YACd,EACA,CACI,MAAS,0BACT,MAAS,mBACT,OAAU,YACd,EACA,CACI,MAAS,kBACT,MAAS,aACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,iGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,uDACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,0DACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,wCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,2CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,gBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,kTACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,OAAU,UACV,MAAS,SACb,EACA,CACI,MAAS,8CACT,OAAU,UACV,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,KACb,EACA,CACI,MAAS,mBACT,MAAS,KACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,UACT,OAAU,SACd,EACA,CACI,MAAS,oBACT,MAAS,UACT,OAAU,SACd,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,UACT,OAAU,SACd,EACA,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,YACT,MAAS,KACb,EACA,CACI,MAAS,iCACT,MAAS,KACb,EACA,CACI,MAAS,mCACT,MAAS,KACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,sCACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,kCACT,OAAU,UACV,MAAS,SACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,GACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,sFACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,yCACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,kBACb,EACA,CACI,MAAS,aACT,MAAS,gBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,8CACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,uBACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,0BACb,EACA,CACI,MAAS,sBACT,MAAS,0BACb,EACA,CACI,MAAS,sBACT,MAAS,0BACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,yEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,sBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,mBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,QACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,6BACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,oCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,gJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,MACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,iBACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,YACT,MAAS,gBACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,mIACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,eACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,sDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,OACb,EACA,CACI,MAAS,yCACT,MAAS,yBACb,EACA,CACI,MAAS,iCACT,MAAS,oBACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,EACA,CACI,MAAS,yCACT,MAAS,oBACb,EACA,CACI,MAAS,oCACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,uCACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qCACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,+BACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,4DACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,WACb,EACA,CACI,MAAS,wCACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,sCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,eACT,MAAS,cACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,iCACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,6HACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,8BACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,8BACT,MAAS,aACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,gDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,eACT,OAAU,YACd,EACA,CACI,MAAS,iCACT,MAAS,YACb,EACA,CACI,MAAS,sCACT,MAAS,YACb,EACA,CACI,MAAS,oCACT,MAAS,gBACb,EACA,CACI,MAAS,yCACT,MAAS,gBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,aACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,qDACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,kRACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,OACT,OAAU,eACd,EACA,CACI,MAAS,2BACT,MAAS,OACb,EACA,CACI,MAAS,8BACT,MAAS,cACb,EACA,CACI,MAAS,8BACT,MAAS,MACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,QACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,MACb,EACA,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,QACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,OACb,EACA,CACI,MAAS,2BACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,MACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,gCACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,eACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,2CACT,MAAS,cACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,YACb,EACA,CACI,MAAS,4BACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,aACb,EACA,CACI,MAAS,8CACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,gCACT,MAAS,eACb,EACA,CACI,MAAS,+BACT,MAAS,cACb,EACA,CACI,MAAS,4BACT,MAAS,SACb,EACA,CACI,MAAS,+BACT,MAAS,SACb,EACA,CACI,MAAS,8BACT,MAAS,cACb,EACA,CACI,MAAS,qDACT,MAAS,QACb,EACA,CACI,MAAS,4BACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,cACb,EACA,CACI,MAAS,4BACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,wCACT,MAAS,aACb,EACA,CACI,MAAS,wCACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,+BACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,KACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,iCACT,MAAS,qBACb,EACA,CACI,MAAS,4BACT,MAAS,gBACb,EACA,CACI,MAAS,4BACT,MAAS,gBACb,EACA,CACI,MAAS,2BACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,kDACT,MAAS,aACb,EACA,CACI,MAAS,wCACT,MAAS,aACb,EACA,CACI,MAAS,uDACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,sCACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,EACA,CACI,MAAS,8CACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,sDACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,KACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,OACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,eACb,EACA,CACI,MAAS,YACT,OAAU,SACV,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,mDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,yCACT,MAAS,kBACb,EACA,CACI,MAAS,0BACT,MAAS,OACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,+TACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,yBACT,MAAS,kBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,0BACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,iBACb,EACA,CACI,MAAS,iCACT,MAAS,qBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,oBACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,4BACT,MAAS,QACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,gCACT,MAAS,cACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,QACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,0BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,wGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,eACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,KACT,OAAU,QACd,CACJ,CACJ,EACA,SAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,OAAU,SACV,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,mLACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,gCACT,MAAS,mBACb,EACA,CACI,MAAS,iCACT,MAAS,oBACb,EACA,CACI,MAAS,sCACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,sCACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,aACb,EACA,CACI,MAAS,gCACT,MAAS,UACb,EACA,CACI,MAAS,uDACT,OAAU,SACV,MAAS,qBACb,EACA,CACI,MAAS,0CACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,+BACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,gCACT,OAAU,SACV,MAAS,eACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,+CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,gDACT,OAAU,aACV,MAAS,IACb,EACA,IAAO,CACH,MAAS,qNACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,sCACT,MAAS,IACb,EACA,CACI,MAAS,8CACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,qCACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,yCACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,8BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,oDACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,kCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,uBACT,OAAU,gBACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,SACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,aACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,OACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,iGACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,cACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,YACT,MAAS,GACb,EACA,CACI,MAAS,WACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,2DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uCACT,MAAS,OACb,EACA,CACI,MAAS,kCACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,cACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,0CACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,8DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,KACb,EACA,CACI,MAAS,2BACT,MAAS,KACb,EACA,CACI,MAAS,+BACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,qHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,yDACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,eACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,WACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,MACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,cACT,MAAS,SACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,0DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,sEACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,kBACb,EACA,CACI,MAAS,iDACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,oBACT,OAAU,IACd,EACA,CACI,MAAS,yBACT,MAAS,gBACT,OAAU,IACd,EACA,CACI,MAAS,gBACT,MAAS,YACT,OAAU,IACd,CACJ,CACJ,EACA,KAAM,CACF,MAAS,8DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oDACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,oBACb,CACJ,CACJ,EACA,GAAM,CACF,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,sWACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,MAAS,kBACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,uBACb,EACA,CACI,MAAS,sBACT,MAAS,qBACb,EACA,CACI,MAAS,iBACT,MAAS,iBACb,EACA,CACI,MAAS,kBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,qBACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,oBACT,MAAS,oBACb,EACA,CACI,MAAS,eACT,MAAS,gBACb,EACA,CACI,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,sBACb,EACA,CACI,MAAS,kBACT,MAAS,eACb,EACA,CACI,MAAS,iBACT,MAAS,cACb,EACA,CACI,MAAS,gBACT,MAAS,aACb,EACA,CACI,MAAS,gBACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,kBACb,EACA,CACI,MAAS,iBACT,MAAS,iBACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,kBACT,MAAS,iBACb,EACA,CACI,MAAS,eACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,iBACb,EACA,CACI,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,MACb,EACA,CACI,MAAS,+BACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,sGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,cACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,6LACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,MACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,kBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,sBACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,sBACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,qBACT,OAAU,QACd,EACA,CACI,MAAS,aACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,iBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,kCACT,MAAS,wBACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,sQACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,GACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,GACb,EACA,CACI,MAAS,wBACT,MAAS,OACb,EACA,CACI,MAAS,6CACT,MAAS,OACb,EACA,CACI,MAAS,0BACT,MAAS,GACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,4CACT,MAAS,QACb,EACA,CACI,MAAS,mCACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,GACb,EACA,CACI,MAAS,wBACT,MAAS,GACb,EACA,CACI,MAAS,kBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,GACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,GACb,EACA,CACI,MAAS,oBACT,MAAS,GACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,8QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oCACT,MAAS,GACb,EACA,CACI,MAAS,aACT,MAAS,GACb,EACA,CACI,MAAS,aACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,GACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,kCACT,MAAS,GACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,GACb,EACA,CACI,MAAS,aACT,MAAS,OACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,GACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,aACT,MAAS,GACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,sBACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,wCACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,gBACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,uCACT,MAAS,QACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,goBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,kCACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,gDACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,mCACT,MAAS,KACb,EACA,CACI,MAAS,yDACT,MAAS,KACb,EACA,CACI,MAAS,yDACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,yCACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,uCACT,MAAS,KACb,EACA,CACI,MAAS,gCACT,MAAS,KACb,EACA,CACI,MAAS,qDACT,MAAS,IACb,EACA,CACI,MAAS,8CACT,MAAS,KACb,EACA,CACI,MAAS,kDACT,MAAS,KACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,8BACT,MAAS,KACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,oCACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,WACb,EACA,CACI,MAAS,oCACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,KACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,wCACT,MAAS,SACb,EACA,CACI,MAAS,kCACT,MAAS,KACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,SACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,UACb,EACA,CACI,MAAS,kDACT,MAAS,IACb,EACA,CACI,MAAS,gDACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,QACb,EACA,CACI,MAAS,mCACT,MAAS,QACb,EACA,CACI,MAAS,mCACT,MAAS,aACb,EACA,CACI,MAAS,sCACT,MAAS,QACb,EACA,CACI,MAAS,sCACT,MAAS,SACb,EACA,CACI,MAAS,sCACT,MAAS,aACb,EACA,CACI,MAAS,kCACT,MAAS,aACb,EACA,CACI,MAAS,kCACT,MAAS,aACb,EACA,CACI,MAAS,mCACT,MAAS,WACb,EACA,CACI,MAAS,mCACT,MAAS,YACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,EACA,CACI,MAAS,qDACT,MAAS,QACb,EACA,CACI,MAAS,uCACT,MAAS,oBACb,EACA,CACI,MAAS,+CACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,cACb,EACA,CACI,MAAS,qDACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,KACb,EACA,CACI,MAAS,kCACT,MAAS,OACb,EACA,CACI,MAAS,qCACT,MAAS,OACb,EACA,CACI,MAAS,iCACT,MAAS,OACb,EACA,CACI,MAAS,kCACT,MAAS,QACb,EACA,CACI,MAAS,kCACT,MAAS,OACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,oCACT,MAAS,MACb,EACA,CACI,MAAS,oCACT,MAAS,WACb,EACA,CACI,MAAS,yDACT,MAAS,KACb,EACA,CACI,MAAS,kDACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,kDACT,MAAS,KACb,EACA,CACI,MAAS,wCACT,MAAS,SACb,EACA,CACI,MAAS,kDACT,MAAS,SACb,EACA,CACI,MAAS,kCACT,MAAS,KACb,EACA,CACI,MAAS,qCACT,MAAS,KACb,EACA,CACI,MAAS,sCACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,KACb,EACA,CACI,MAAS,iDACT,MAAS,UACb,EACA,CACI,MAAS,oCACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,yCACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,gCACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,kDACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,MACT,OAAU,SACd,EACA,CACI,MAAS,mCACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,IACb,EACA,CACI,MAAS,0CACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,eACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,uJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,eACT,OAAU,IACd,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,OACT,MAAS,OACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,6CACT,MAAS,OACb,EACA,CACI,MAAS,kCACT,MAAS,OACb,EACA,CACI,MAAS,6NACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,8MACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4DACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,KACb,EACA,CACI,MAAS,qCACT,MAAS,QACb,EACA,CACI,MAAS,oDACT,MAAS,SACb,EACA,CACI,MAAS,8BACT,MAAS,SACb,EACA,CACI,MAAS,4DACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,yBACT,OAAU,aACV,MAAS,OACb,EACA,KAAQ,CACJ,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,+EACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,cACT,OAAU,YACd,EACA,CACI,MAAS,kBACT,MAAS,kBACT,OAAU,YACd,EACA,CACI,MAAS,+BACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,gBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,oBACT,OAAU,QACd,EACA,CACI,MAAS,0CACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,+OACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kBACT,OAAU,aACV,MAAS,cACb,EACA,CACI,MAAS,aACT,OAAU,aACV,MAAS,aACb,EACA,CACI,MAAS,aACT,OAAU,aACV,MAAS,aACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,UACb,EACA,CACI,MAAS,sBACT,OAAU,aACV,MAAS,WACb,EACA,CACI,MAAS,2DACT,OAAU,aACV,MAAS,IACb,EACA,CACI,MAAS,sEACT,MAAS,IACb,EACA,CACI,MAAS,yFACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,CACJ,CACJ,EACA,SAAO,CACH,MAAS,+DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,+DACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,6BACT,MAAS,gBACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,OAAU,SACV,MAAS,SACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,yHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,OAAU,gBACV,MAAS,OACb,EACA,CACI,MAAS,qBACT,OAAU,KACV,MAAS,YACb,EACA,CACI,MAAS,sBACT,OAAU,KACV,MAAS,UACb,EACA,CACI,MAAS,mCACT,OAAU,KACV,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,mBACT,OAAU,QACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,MACb,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,WACb,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,MACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,CACJ,CACJ,EACA,gBAAiB,CACb,MAAS,iBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,qDACT,OAAU,aACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,8BACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,oBACb,EACA,CACI,MAAS,cACT,MAAS,aACT,OAAU,YACd,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,QACb,EACA,CACI,MAAS,6BACT,MAAS,KACT,OAAU,YACd,CACJ,CACJ,EACA,IAAO,CACH,MAAS,mMACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yCACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,KACb,EACA,CACI,MAAS,gCACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,0BACT,OAAU,KACV,MAAS,IACb,EACA,CACI,MAAS,mHACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,oBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,EACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,6BACT,OAAU,aACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,2BACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,yCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,aACT,OAAU,wBACV,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,6EACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,gBACb,EACA,CACI,MAAS,OACT,MAAS,OACT,OAAU,YACd,EACA,CACI,MAAS,YACT,MAAS,MACT,OAAU,YACd,EACA,CACI,MAAS,cACT,MAAS,QACT,OAAU,YACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,gBAAiB,CACb,MAAS,0BACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,uBACT,OAAU,IACd,EACA,CACI,MAAS,oBACT,MAAS,sBACT,OAAU,IACd,EACA,CACI,MAAS,WACT,MAAS,mBACT,OAAU,YACd,EACA,CACI,MAAS,eACT,MAAS,eACb,EACA,CACI,MAAS,8BACT,MAAS,eACb,EACA,CACI,MAAS,gBACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,iBACT,MAAS,YACb,EACA,CACI,MAAS,4BACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,aACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,0DACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,CACJ,CACJ,EACA,cAAe,CACX,MAAS,qJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,UACb,EACA,CACI,MAAS,aACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,cACT,OAAU,SACV,MAAS,cACb,EACA,CACI,MAAS,oBACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,cACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,aACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,cACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,aACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,iCACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,eACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,8BACT,OAAU,SACV,MAAS,OACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,eACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,uCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,KACV,MAAS,sBACb,EACA,MAAS,CACL,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,oDACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,iFACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,iBACT,OAAU,gBACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,sDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,GACT,OAAU,YACd,EACA,CACI,MAAS,gDACT,MAAS,cACb,EACA,CACI,MAAS,4EACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,sBACT,OAAU,SACV,MAAS,WACb,EACA,aAAc,CACV,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,SAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,MACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,0FACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,4DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kDACT,OAAU,gBACV,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,iEACT,OAAU,KACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,mVACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,OAAU,KACV,MAAS,WACb,EACA,CACI,MAAS,qBACT,OAAU,KACV,MAAS,WACb,EACA,CACI,MAAS,SACT,OAAU,KACV,MAAS,EACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,mDACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,+BACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,iCACT,OAAU,SACV,MAAS,oBACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,oBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,oBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,qCACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,gCACb,EACA,CACI,MAAS,iCACT,OAAU,SACV,MAAS,oCACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,2BACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,6CACT,OAAU,SACV,MAAS,0CACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,2CACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,yCACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,0CACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,8BACb,EACA,CACI,MAAS,iDACT,OAAU,SACV,MAAS,gCACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,iCACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,6BACb,EACA,CACI,MAAS,kDACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,gCACb,EACA,CACI,MAAS,uDACT,OAAU,SACV,MAAS,qBACb,EACA,CACI,MAAS,oEACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,2BACb,EACA,CACI,MAAS,qCACT,OAAU,SACV,MAAS,qBACb,EACA,CACI,MAAS,+CACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,iDACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,qCACT,OAAU,SACV,MAAS,+BACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,uCACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,iCACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,8BACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,6BACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,yCACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,uCACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,6BACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,oBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,uCACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,+CACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,gCACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,6DACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,gDACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,2DACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,qCACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,2BACb,EACA,CACI,MAAS,iDACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,qCACT,OAAU,SACV,MAAS,yBACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,4CACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,yCACT,OAAU,SACV,MAAS,8BACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,8BACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,+BACb,EACA,CACI,MAAS,uCACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,yCACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,sCACT,OAAU,SACV,MAAS,gCACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,+BACb,EACA,CACI,MAAS,2BACT,OAAU,SACV,MAAS,+BACb,EACA,CACI,MAAS,kCACT,OAAU,SACV,MAAS,2BACb,EACA,CACI,MAAS,yCACT,OAAU,SACV,MAAS,mBACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,+CACT,OAAU,SACV,MAAS,wBACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,6BACb,EACA,CACI,MAAS,kDACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,+BACb,EACA,CACI,MAAS,gDACT,OAAU,SACV,MAAS,0BACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,+BACb,EACA,CACI,MAAS,8CACT,OAAU,SACV,MAAS,6BACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,kCACb,EACA,CACI,MAAS,6CACT,OAAU,SACV,MAAS,uBACb,EACA,CACI,MAAS,2BACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,OAAU,WACV,MAAS,uBACb,EACA,CACI,MAAS,yCACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,qCACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,0CACT,MAAS,kBACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,yCACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,mBACb,EACA,CACI,MAAS,qDACT,MAAS,kBACb,EACA,CACI,MAAS,oCACT,MAAS,aACb,EACA,CACI,MAAS,qCACT,MAAS,oBACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,iCACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,yBACT,MAAS,sBACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,qBACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,iDACT,MAAS,WACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,qCACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,yBACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,kCACT,MAAS,gBACb,EACA,CACI,MAAS,yCACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,yBACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,mDACT,MAAS,cACb,EACA,CACI,MAAS,qCACT,MAAS,kBACb,EACA,CACI,MAAS,4FACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,qBACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,oBACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,4BACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,sBACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,uCACT,MAAS,gBACb,EACA,CACI,MAAS,yBACT,MAAS,oBACb,EACA,CACI,MAAS,wBACT,MAAS,2BACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,qCACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,qCACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,uCACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,oBACb,EACA,CACI,MAAS,4BACT,MAAS,iBACb,EACA,CACI,MAAS,yBACT,MAAS,kBACb,EACA,CACI,MAAS,sCACT,MAAS,mBACb,EACA,CACI,MAAS,mCACT,MAAS,wBACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,uCACT,MAAS,gBACb,EACA,CACI,MAAS,oCACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,oCACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,kBACb,EACA,CACI,MAAS,sCACT,MAAS,mBACb,EACA,CACI,MAAS,4BACT,MAAS,iCACb,EACA,CACI,MAAS,iDACT,MAAS,iBACb,EACA,CACI,MAAS,yBACT,MAAS,qBACb,EACA,CACI,MAAS,0BACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,yBACT,MAAS,oBACb,EACA,CACI,MAAS,kEACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,mCACT,MAAS,kBACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,mFACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,mDACT,MAAS,gBACb,EACA,CACI,MAAS,uDACT,MAAS,iBACb,EACA,CACI,MAAS,gFACT,MAAS,WACb,EACA,CACI,MAAS,2DACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,6CACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,2BACT,MAAS,kBACb,EACA,CACI,MAAS,oDACT,MAAS,YACb,EACA,CACI,MAAS,6CACT,MAAS,WACb,EACA,CACI,MAAS,4CACT,MAAS,YACb,EACA,CACI,MAAS,wDACT,MAAS,YACb,EACA,CACI,MAAS,4CACT,MAAS,iBACb,EACA,CACI,MAAS,iDACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,mCACb,EACA,CACI,MAAS,mDACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,mDACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,sCACT,MAAS,kBACb,EACA,CACI,MAAS,4CACT,MAAS,qBACb,EACA,CACI,MAAS,8BACT,MAAS,aACb,EACA,CACI,MAAS,4CACT,MAAS,gBACb,EACA,CACI,MAAS,oCACT,MAAS,eACb,EACA,CACI,MAAS,qCACT,MAAS,qBACb,EACA,CACI,MAAS,qCACT,MAAS,gBACb,EACA,CACI,MAAS,2CACT,MAAS,eACb,EACA,CACI,MAAS,2CACT,MAAS,kBACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,qCACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,+BACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,uDACT,MAAS,YACb,EACA,CACI,MAAS,4BACT,MAAS,iBACb,EACA,CACI,MAAS,4BACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,iDACT,MAAS,kBACb,EACA,CACI,MAAS,oCACT,MAAS,kBACb,EACA,CACI,MAAS,mCACT,MAAS,kBACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,kDACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,kBACb,EACA,CACI,MAAS,kCACT,MAAS,kBACb,EACA,CACI,MAAS,+BACT,MAAS,kBACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,iDACT,MAAS,WACb,EACA,CACI,MAAS,wCACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,wCACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,kBACb,EACA,CACI,MAAS,6BACT,MAAS,kBACb,EACA,CACI,MAAS,qCACT,MAAS,kBACb,EACA,CACI,MAAS,4CACT,MAAS,YACb,EACA,CACI,MAAS,oCACT,MAAS,YACb,EACA,CACI,MAAS,gDACT,MAAS,eACb,EACA,CACI,MAAS,8CACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,gBACb,EACA,CACI,MAAS,kCACT,MAAS,kBACb,EACA,CACI,MAAS,mCACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,kBACb,EACA,CACI,MAAS,2BACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,aACb,EACA,CACI,MAAS,6BACT,MAAS,kBACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,4CACT,MAAS,eACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,uCACT,MAAS,aACb,EACA,CACI,MAAS,2CACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,gEACT,MAAS,YACb,EACA,CACI,MAAS,kEACT,MAAS,YACb,EACA,CACI,MAAS,wCACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,aACb,EACA,CACI,MAAS,oDACT,MAAS,YACb,EACA,CACI,MAAS,wCACT,MAAS,aACb,EACA,CACI,MAAS,wCACT,MAAS,YACb,EACA,CACI,MAAS,oCACT,MAAS,YACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,EACA,CACI,MAAS,wCACT,MAAS,aACb,EACA,CACI,MAAS,qDACT,MAAS,YACb,EACA,CACI,MAAS,wCACT,MAAS,eACb,EACA,CACI,MAAS,gEACT,MAAS,YACb,EACA,CACI,MAAS,oCACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,uCACT,MAAS,YACb,EACA,CACI,MAAS,sDACT,MAAS,eACb,EACA,CACI,MAAS,4CACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,oCACT,MAAS,YACb,EACA,CACI,MAAS,oCACT,MAAS,YACb,EACA,CACI,MAAS,yBACT,MAAS,kBACb,EACA,CACI,MAAS,qCACT,MAAS,aACb,EACA,CACI,MAAS,sDACT,MAAS,WACb,EACA,CACI,MAAS,8BACT,MAAS,gBACb,EACA,CACI,MAAS,6BACT,MAAS,sBACb,EACA,CACI,MAAS,iDACT,MAAS,kBACb,EACA,CACI,MAAS,2CACT,MAAS,eACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,gBACb,EACA,CACI,MAAS,yBACT,MAAS,gBACb,EACA,CACI,MAAS,8CACT,MAAS,gBACb,EACA,CACI,MAAS,uCACT,MAAS,eACb,EACA,CACI,MAAS,oCACT,MAAS,iBACb,EACA,CACI,MAAS,kCACT,MAAS,eACb,EACA,CACI,MAAS,qCACT,MAAS,eACb,EACA,CACI,MAAS,qCACT,MAAS,oBACb,EACA,CACI,MAAS,+CACT,MAAS,iBACb,EACA,CACI,MAAS,kCACT,MAAS,kBACb,EACA,CACI,MAAS,qCACT,MAAS,gBACb,EACA,CACI,MAAS,oCACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,yBACT,MAAS,oBACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,+DACT,MAAS,kBACb,EACA,CACI,MAAS,mEACT,MAAS,kBACb,EACA,CACI,MAAS,kDACT,MAAS,kBACb,EACA,CACI,MAAS,yCACT,MAAS,WACb,EACA,CACI,MAAS,sDACT,MAAS,kBACb,EACA,CACI,MAAS,2EACT,MAAS,kBACb,EACA,CACI,MAAS,uBACT,MAAS,kBACb,EACA,CACI,MAAS,6BACT,MAAS,iBACb,EACA,CACI,MAAS,6BACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,sCACT,MAAS,YACb,EACA,CACI,MAAS,2CACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,kBACb,EACA,CACI,MAAS,gDACT,MAAS,kBACb,EACA,CACI,MAAS,4DACT,MAAS,kBACb,EACA,CACI,MAAS,yDACT,MAAS,kBACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,4BACT,MAAS,iBACb,EACA,CACI,MAAS,kCACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,oCACT,MAAS,mBACb,EACA,CACI,MAAS,6CACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,2BACT,MAAS,eACb,EACA,CACI,MAAS,oCACT,MAAS,iBACb,EACA,CACI,MAAS,4BACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,gBACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,mBACb,EACA,CACI,MAAS,mBACT,MAAS,iBACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,wDACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,2CACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,8DACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,mBACb,EACA,CACI,MAAS,6BACT,MAAS,kBACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,yDACT,MAAS,eACb,EACA,CACI,MAAS,sDACT,MAAS,iBACb,EACA,CACI,MAAS,qCACT,MAAS,YACb,EACA,CACI,MAAS,qCACT,MAAS,cACb,EACA,CACI,MAAS,qCACT,MAAS,cACb,EACA,CACI,MAAS,qCACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,oBACb,EACA,CACI,MAAS,yBACT,MAAS,2BACb,EACA,CACI,MAAS,gDACT,MAAS,cACT,OAAU,SACd,EACA,CACI,MAAS,4CACT,MAAS,qBACT,OAAU,SACd,EACA,CACI,MAAS,oCACT,MAAS,mBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,wBACT,OAAU,SACd,EACA,CACI,MAAS,gCACT,MAAS,eACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,cACT,OAAU,SACd,EACA,CACI,MAAS,+BACT,MAAS,mBACT,OAAU,SACd,EACA,CACI,MAAS,yCACT,MAAS,0BACT,OAAU,SACd,EACA,CACI,MAAS,6EACT,MAAS,iBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,qBACT,OAAU,SACd,EACA,CACI,MAAS,2DACT,MAAS,iBACT,OAAU,SACd,EACA,CACI,MAAS,iDACT,MAAS,kBACb,EACA,CACI,MAAS,6FACT,MAAS,qBACT,OAAU,SACd,EACA,CACI,MAAS,8CACT,MAAS,6BACT,OAAU,SACd,EACA,CACI,MAAS,oCACT,MAAS,0BACT,OAAU,SACd,EACA,CACI,MAAS,qCACT,MAAS,uBACT,OAAU,SACd,EACA,CACI,MAAS,uCACT,MAAS,kBACT,OAAU,SACd,EACA,CACI,MAAS,oCACT,MAAS,yBACT,OAAU,SACd,EACA,CACI,MAAS,8BACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,oCACT,MAAS,qBACT,OAAU,SACd,EACA,CACI,MAAS,mCACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,kFACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,kDACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,4BACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,uBACT,MAAS,qBACT,OAAU,SACd,EACA,CACI,MAAS,oDACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,qBACT,OAAU,SACd,EACA,CACI,MAAS,oCACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,4BACT,MAAS,kBACT,OAAU,SACd,EACA,CACI,MAAS,2BACT,MAAS,kBACT,OAAU,SACd,EACA,CACI,MAAS,4DACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,uCACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,2CACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,4DACT,MAAS,iBACT,OAAU,SACd,EACA,CACI,MAAS,8BACT,MAAS,sBACT,OAAU,SACd,EACA,CACI,MAAS,6EACT,MAAS,kBACT,OAAU,SACd,EACA,CACI,MAAS,wCACT,MAAS,iBACT,OAAU,SACd,EACA,CACI,MAAS,iDACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,wCACT,MAAS,uBACT,OAAU,SACd,EACA,CACI,MAAS,8DACT,MAAS,0BACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,mBACb,EACA,CACI,MAAS,wBACT,MAAS,QACT,OAAU,eACd,EACA,CACI,MAAS,0CACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,gDACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,gDACT,MAAS,IACb,EACA,CACI,MAAS,WACT,OAAU,KACV,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,QACb,EACA,CACI,MAAS,8CACT,MAAS,IACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,iEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,MACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,+BACT,MAAS,KACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,aACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oHACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,yCACT,MAAS,gBACb,EACA,CACI,MAAS,sCACT,MAAS,cACb,EACA,CACI,MAAS,+CACT,MAAS,oBACb,EACA,CACI,MAAS,sCACT,MAAS,cACb,EACA,CACI,MAAS,qCACT,MAAS,cACb,EACA,CACI,MAAS,qCACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,WACb,EACA,CACI,MAAS,yCACT,MAAS,gBACb,EACA,CACI,MAAS,yCACT,MAAS,gBACb,EACA,CACI,MAAS,kCACT,MAAS,aACb,EACA,CACI,MAAS,gCACT,MAAS,cACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,cACT,OAAU,YACd,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,yGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,kCACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,+PACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,mBACb,EACA,CACI,MAAS,mBACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,mCACT,MAAS,iBACb,EACA,CACI,MAAS,qEACT,MAAS,aACb,EACA,CACI,MAAS,oCACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,eACT,MAAS,eACb,EACA,CACI,MAAS,8DACT,MAAS,UACb,EACA,CACI,MAAS,kDACT,MAAS,aACb,EACA,CACI,MAAS,6CACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,aACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,kFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,iBACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,gCACT,MAAS,aACb,EACA,CACI,MAAS,6BACT,MAAS,aACb,EACA,CACI,MAAS,gDACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,KACT,OAAU,QACd,CACJ,CACJ,EACA,UAAa,CACT,MAAS,8FACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,aACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,IACb,EACA,CACI,MAAS,gBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,sFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,oBACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,qBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oCACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,iBACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,yBACT,OAAU,SACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,gBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,cAAiB,CACb,MAAS,yEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,OACb,EACA,CACI,MAAS,UACT,OAAU,UACV,MAAS,QACb,EACA,CACI,MAAS,wCACT,OAAU,SACV,MAAS,OACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,gKACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,OAAU,aACV,MAAS,OACb,EACA,CACI,MAAS,gBACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,gBACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,gBACT,OAAU,aACV,MAAS,eACb,EACA,CACI,MAAS,iBACT,OAAU,aACV,MAAS,gBACb,EACA,CACI,MAAS,gDACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,sBACT,OAAU,KACV,MAAS,SACb,EACA,QAAW,CACP,MAAS,2FACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,aACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,gCACT,MAAS,SACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,OACT,OAAU,SACV,MAAS,WACb,EACA,CACI,MAAS,OACT,OAAU,SACV,MAAS,YACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,qRACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,8CACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,gBACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,4CACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,uCACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,GACT,OAAU,QACd,CACJ,CACJ,EACA,QAAW,CACP,MAAS,YACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,0CACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,uDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,iBACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,aACT,OAAU,QACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,kFACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,wBACb,EACA,CACI,MAAS,gCACT,MAAS,mBACb,EACA,CACI,MAAS,uBACT,MAAS,mBACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,wBACb,EACA,CACI,MAAS,qBACT,MAAS,sBACT,OAAU,YACd,EACA,CACI,MAAS,gBACT,MAAS,sBACb,EACA,CACI,MAAS,4BACT,MAAS,OACb,EACA,CACI,MAAS,4BACT,MAAS,OACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,qDACT,MAAS,KACT,OAAU,YACd,EACA,CACI,MAAS,sBACT,MAAS,UACT,OAAU,YACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,wBACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,kBACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,0JACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,aACb,EACA,CACI,MAAS,gBACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,WACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,KACT,OAAU,QACd,CACJ,CACJ,EACA,QAAW,CACP,MAAS,qJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,gBACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,MAAS,eACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,+CACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,YACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,mCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0CACT,MAAS,IACb,EACA,CACI,MAAS,eACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,gEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+CACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,SACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,kBACT,OAAU,aACV,MAAS,iBACb,EACA,MAAS,CACL,MAAS,yCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,UACT,OAAU,aACV,MAAS,SACb,EACA,MAAS,CACL,MAAS,mBACT,OAAU,gBACV,MAAS,IACb,EACA,UAAW,CACP,MAAS,8BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,KACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,WACb,EACA,CACI,MAAS,+BACT,OAAU,SACV,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,gFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,OACb,EACA,CACI,MAAS,qCACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,QACb,EACA,CACI,MAAS,+BACT,MAAS,MACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,gBAAiB,CACb,MAAS,eACT,OAAU,aACV,MAAS,cACb,EACA,MAAS,CACL,MAAS,gHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2DACT,MAAS,cACb,EACA,CACI,MAAS,kDACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,uDACT,MAAS,aACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,mBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wCACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,icACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,mBACb,EACA,CACI,MAAS,kCACT,MAAS,YACb,EACA,CACI,MAAS,+BACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,qBACb,EACA,CACI,MAAS,qBACT,MAAS,gBACb,EACA,CACI,MAAS,0CACT,MAAS,kBACb,EACA,CACI,MAAS,sBACT,MAAS,oBACb,EACA,CACI,MAAS,gCACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qCACT,MAAS,SACb,EACA,CACI,MAAS,qCACT,MAAS,SACb,EACA,CACI,MAAS,qCACT,MAAS,iBACb,EACA,CACI,MAAS,4CACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,qCACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,qBACb,EACA,CACI,MAAS,gCACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,wCACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,uDACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,uCACT,MAAS,eACb,EACA,CACI,MAAS,4CACT,MAAS,UACb,EACA,CACI,MAAS,oDACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,8BACT,MAAS,gBACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,8BACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,sBACb,EACA,CACI,MAAS,SACT,MAAS,iBACb,EACA,CACI,MAAS,aACT,MAAS,gBACb,EACA,CACI,MAAS,UACT,MAAS,iBACb,EACA,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,oBACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,yCACT,OAAU,KACV,MAAS,IACb,EACA,CACI,MAAS,2BACT,OAAU,KACV,MAAS,gBACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,wBACT,OAAU,aACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,mBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,yCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,SACT,OAAU,eACd,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,0CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,qCACT,MAAS,KACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,gHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,gDACT,MAAS,SACb,EACA,CACI,MAAS,+DACT,MAAS,OACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,kNACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,OACT,MAAS,uBACT,OAAU,IACd,EACA,CACI,MAAS,OACT,MAAS,uBACT,OAAU,IACd,EACA,CACI,MAAS,OACT,MAAS,kBACT,OAAU,IACd,EACA,CACI,MAAS,OACT,MAAS,UACT,OAAU,IACd,EACA,CACI,MAAS,WACT,MAAS,gBACT,OAAU,IACd,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,gBACb,EACA,CACI,MAAS,mBACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,0BACb,EACA,CACI,MAAS,oBACT,MAAS,wBACb,EACA,CACI,MAAS,iCACT,MAAS,wBACb,EACA,CACI,MAAS,qBACT,MAAS,yBACb,EACA,CACI,MAAS,qBACT,MAAS,uBACb,EACA,CACI,MAAS,qBACT,MAAS,2BACb,EACA,CACI,MAAS,qBACT,MAAS,yBACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,mBACb,EACA,CACI,MAAS,qBACT,MAAS,mBACb,EACA,CACI,MAAS,WACT,MAAS,aACT,OAAU,YACd,EACA,CACI,MAAS,oCACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,OACT,OAAU,eACd,EACA,CACI,MAAS,mBACT,MAAS,QACT,OAAU,eACd,CACJ,CACJ,EACA,SAAY,CACR,MAAS,uFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,8CACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,6BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,wCACT,OAAU,SACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,uBACT,OAAU,aACV,MAAS,IACb,EACA,UAAW,CACP,MAAS,gCACT,OAAU,aACV,MAAS,IACb,EACA,UAAW,CACP,MAAS,kDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,CACJ,CACJ,EACA,WAAY,CACR,MAAS,qFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,SACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,WAAY,CACR,MAAS,aACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,UACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,iMACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,SACT,MAAS,KACb,EACA,CACI,MAAS,kCACT,MAAS,kBACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,mCACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,eAAgB,CACZ,MAAS,6CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,QACb,EACA,CACI,MAAS,4BACT,MAAS,YACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,0BACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,iCACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,gBACb,EACA,CACI,MAAS,WACT,OAAU,UACV,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,yCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,yCACT,MAAS,KACT,OAAU,YACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,sDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,ypBACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,mBACb,EACA,CACI,MAAS,UACT,MAAS,iBACb,EACA,CACI,MAAS,UACT,MAAS,mBACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,kBACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,mBACb,EACA,CACI,MAAS,qBACT,MAAS,qBACb,EACA,CACI,MAAS,mBACT,MAAS,qBACb,EACA,CACI,MAAS,kBACT,MAAS,oBACb,EACA,CACI,MAAS,oBACT,MAAS,oBACb,EACA,CACI,MAAS,mBACT,MAAS,qBACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,sBACT,MAAS,gBACb,EACA,CACI,MAAS,UACT,MAAS,sBACb,EACA,CACI,MAAS,sBACT,MAAS,sBACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,oBACb,EACA,CACI,MAAS,UACT,MAAS,oBACb,EACA,CACI,MAAS,oBACT,MAAS,oBACb,EACA,CACI,MAAS,mBACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,qBACb,EACA,CACI,MAAS,UACT,MAAS,oBACb,EACA,CACI,MAAS,UACT,MAAS,oBACb,EACA,CACI,MAAS,UACT,MAAS,oBACb,EACA,CACI,MAAS,UACT,MAAS,qBACb,EACA,CACI,MAAS,yNACT,MAAS,IACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,QACb,EACA,CACI,MAAS,6HACT,OAAU,aACV,MAAS,IACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,QACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,cACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,cACT,OAAU,aACV,MAAS,cACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,aACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,cACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,MACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,iBACT,OAAU,aACV,MAAS,UACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,mBACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,UACb,EACA,CACI,MAAS,WACT,OAAU,aACV,MAAS,eACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,QACb,EACA,CACI,MAAS,UACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,4BACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,2BACT,OAAU,aACV,MAAS,QACb,EACA,CACI,MAAS,4BACT,OAAU,aACV,MAAS,eACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,4LACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,YACT,OAAU,YACd,EACA,CACI,MAAS,6DACT,MAAS,KACT,OAAU,YACd,EACA,CACI,MAAS,wEACT,MAAS,IACb,EACA,CACI,MAAS,gEACT,MAAS,KACT,OAAU,IACd,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,OACb,EACA,CACI,MAAS,iBACT,MAAS,MACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,aACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,oBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,wEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,OACT,MAAS,MACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4BACT,OAAU,SACV,MAAS,eACb,EACA,YAAa,CACT,MAAS,iBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,QACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qBACT,OAAU,gBACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,0GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wEACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,gBACT,OAAU,SACV,MAAS,sBACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,yHACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,YACT,MAAS,uBACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,oCACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,aACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,kJACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,kBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,cACb,EACA,CACI,MAAS,gCACT,MAAS,cACT,OAAU,YACd,EACA,CACI,MAAS,gCACT,MAAS,cACT,OAAU,YACd,EACA,CACI,MAAS,kCACT,MAAS,eACT,OAAU,YACd,EACA,CACI,MAAS,gCACT,MAAS,cACT,OAAU,YACd,EACA,CACI,MAAS,kCACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,kCACT,MAAS,wBACT,OAAU,SACd,EACA,CACI,MAAS,gCACT,MAAS,cACT,OAAU,SACd,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,kBACT,OAAU,aACV,MAAS,gBACb,EACA,gBAAiB,CACb,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,mBACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,kCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4DACT,OAAU,aACV,MAAS,KACb,EACA,OAAU,CACN,MAAS,QACT,OAAU,SACV,MAAS,MACb,EACA,UAAa,CACT,MAAS,0BACT,OAAU,gBACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,sMACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,MACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,mCACT,MAAS,eACb,EACA,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,WACb,EACA,CACI,MAAS,kCACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,OAAU,UACV,MAAS,SACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,mEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,qEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,OACT,MAAS,cACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,MACb,EACA,CACI,MAAS,OACT,MAAS,KACb,EACA,CACI,MAAS,OACT,MAAS,SACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,iBACT,OAAU,aACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,gDACT,OAAU,SACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,oDACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,OACT,OAAU,YACd,EACA,CACI,MAAS,8BACT,MAAS,UACT,OAAU,YACd,EACA,CACI,MAAS,2CACT,MAAS,eACT,OAAU,YACd,EACA,CACI,MAAS,yCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,gCACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,oBACT,OAAU,SACV,MAAS,IACb,EACA,YAAa,CACT,MAAS,4BACT,OAAU,gBACV,MAAS,MACb,EACA,OAAU,CACN,MAAS,+DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,+DACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,sBACT,OAAU,aACV,MAAS,SACb,EACA,CACI,MAAS,8BACT,OAAU,aACV,MAAS,iBACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,4EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,YACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,yCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,sBACb,EACA,CACI,MAAS,YACT,MAAS,mBACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,YACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,6HACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,OACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,oBACb,EACA,CACI,MAAS,UACT,MAAS,WACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,WACb,EACA,CACI,MAAS,kBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,wIACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iBACT,OAAU,gBACV,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,QACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,gBACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,oBACb,EACA,CACI,MAAS,uBACT,MAAS,mBACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,6JACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,kBACb,EACA,CACI,MAAS,8BACT,MAAS,YACb,EACA,CACI,MAAS,gCACT,MAAS,SACb,EACA,CACI,MAAS,8BACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,eACb,EACA,CACI,MAAS,SACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,cACb,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,aACb,EACA,CACI,MAAS,iBACT,OAAU,SACV,MAAS,cACb,EACA,CACI,MAAS,iBACT,OAAU,SACV,MAAS,cACb,EACA,CACI,MAAS,gBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,mBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,8BACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,wNACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,QACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,eACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,oBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,cACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,UACT,OAAU,QACd,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,mCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qBACT,OAAU,gBACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,QACd,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qLACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,oCACT,MAAS,UACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,6BACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,wFACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gDACT,MAAS,UACT,OAAU,YACd,EACA,CACI,MAAS,gDACT,MAAS,UACT,OAAU,YACd,EACA,CACI,MAAS,4CACT,MAAS,QACT,OAAU,YACd,EACA,CACI,MAAS,8CACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,8GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6FACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,QACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,wBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oEACT,MAAS,IACb,EACA,CACI,MAAS,sCACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,qrBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,iCACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,MACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,mCACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,MACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,aACb,EACA,CACI,MAAS,8BACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,cACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,KACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,MACb,EACA,CACI,MAAS,kBACT,MAAS,OACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,8BACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,gDACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,yCACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,yCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,kCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,iBACT,MAAS,UACb,EACA,CACI,MAAS,+BACT,MAAS,YACb,EACA,CACI,MAAS,sCACT,OAAU,SACV,MAAS,UACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,mCACT,OAAU,aACV,MAAS,SACb,EACA,KAAQ,CACJ,MAAS,mBACT,OAAU,gBACV,MAAS,IACb,EACA,IAAO,CACH,MAAS,kBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,gDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,CACJ,CACJ,EACA,SAAU,CACN,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,SACb,EACA,CACI,MAAS,aACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,kBACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,oBACT,OAAU,SACV,MAAS,mBACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,yHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,wCACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,4CACT,MAAS,QACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,grBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,kBACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,YACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,oBACT,MAAS,sBACb,EACA,CACI,MAAS,oBACT,MAAS,mBACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,qCACT,MAAS,QACb,EACA,CACI,MAAS,kCACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,UACb,EACA,CACI,MAAS,0CACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,oCACT,MAAS,SACb,EACA,CACI,MAAS,qCACT,MAAS,OACb,EACA,CACI,MAAS,0BACT,MAAS,OACb,EACA,CACI,MAAS,4BACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,oCACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,+BACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,+BACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,kBACT,MAAS,QACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,uCACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,4BACT,MAAS,eACT,OAAU,IACd,EACA,CACI,MAAS,2BACT,MAAS,YACT,OAAU,IACd,EACA,CACI,MAAS,sBACT,MAAS,YACT,OAAU,IACd,EACA,CACI,MAAS,yBACT,MAAS,UACT,OAAU,IACd,EACA,CACI,MAAS,0DACT,MAAS,UACT,OAAU,IACd,EACA,CACI,MAAS,+BACT,MAAS,QACT,OAAU,IACd,EACA,CACI,MAAS,yBACT,OAAU,UACV,MAAS,YACb,EACA,CACI,MAAS,6BACT,OAAU,UACV,MAAS,iBACb,EACA,CACI,MAAS,iEACT,OAAU,UACV,MAAS,eACb,EACA,CACI,MAAS,sBACT,MAAS,sBACT,OAAU,SACd,EACA,CACI,MAAS,yBACT,MAAS,eACT,OAAU,SACd,EACA,CACI,MAAS,yBACT,MAAS,iBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,mBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,kBACT,OAAU,SACd,EACA,CACI,MAAS,wBACT,MAAS,sBACT,OAAU,SACd,EACA,CACI,MAAS,eACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,cACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,qCACT,MAAS,oBACT,OAAU,SACd,EACA,CACI,MAAS,+BACT,MAAS,gBACT,OAAU,SACd,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,cACT,OAAU,SACd,EACA,CACI,MAAS,iBACT,MAAS,iBACT,OAAU,SACd,EACA,CACI,MAAS,4BACT,MAAS,aACT,OAAU,SACd,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,qDACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,OAAU,UACV,MAAS,MACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,qBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,MACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,oIACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,yGACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4HACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,YACT,MAAS,cACb,EACA,CACI,MAAS,eACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,WACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,2CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,8CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,MACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,uDACT,MAAS,YACb,EACA,CACI,MAAS,sDACT,MAAS,eACb,EACA,CACI,MAAS,+CACT,MAAS,YACb,CACJ,CACJ,EACA,GAAM,CACF,MAAS,sEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,sEACT,OAAU,SACV,MAAS,MACb,EACA,MAAS,CACL,MAAS,cACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,eACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uCACT,OAAU,gBACV,OAAU,CACN,CACI,MAAS,QACT,OAAU,aACV,MAAS,OACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,0KACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,OACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,OACb,EACA,CACI,MAAS,MACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,MACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,iBACb,EACA,CACI,MAAS,gBACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,MACb,EACA,CACI,MAAS,gBACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,UACb,EACA,CACI,MAAS,WACT,MAAS,OACb,EACA,CACI,MAAS,YACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,MACT,OAAU,QACd,CACJ,CACJ,EACA,QAAW,CACP,MAAS,2JACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,QACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,UACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,0DACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,SACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,YACT,OAAU,KACV,MAAS,EACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,4GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,4BACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,OACb,EACA,CACI,MAAS,iCACT,MAAS,QACb,EACA,CACI,MAAS,kDACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,mBACb,EACA,CACI,MAAS,gBACT,MAAS,OACb,EACA,CACI,MAAS,sCACT,MAAS,YACb,EACA,CACI,MAAS,sBACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,sSACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,oBACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,mBACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,qBACb,EACA,CACI,MAAS,qBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,eACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,iBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,SACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,kBACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,gBACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,qBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,YACT,OAAU,SACd,EACA,CACI,MAAS,qBACT,MAAS,OACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,sBACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,oQACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,WACT,OAAU,QACd,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,iBACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,gBACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,cACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,cACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,gBACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,6BACT,MAAS,MACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,2CACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,UACb,EACA,CACI,MAAS,wCACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,UACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,0CACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,wCACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,mCACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,MACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,wCACT,MAAS,WACb,EACA,CACI,MAAS,6BACT,MAAS,OACb,EACA,CACI,MAAS,kCACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,OACb,EACA,CACI,MAAS,mCACT,MAAS,SACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,mCACT,MAAS,OACb,EACA,CACI,MAAS,sCACT,MAAS,YACb,EACA,CACI,MAAS,mCACT,MAAS,YACb,EACA,CACI,MAAS,mCACT,MAAS,aACb,EACA,CACI,MAAS,mCACT,MAAS,cACb,EACA,CACI,MAAS,kEACT,MAAS,MACb,EACA,CACI,MAAS,2BACT,MAAS,KACT,OAAU,eACd,EACA,CACI,MAAS,gCACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,kDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wCACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,wCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,iIACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,OACb,EACA,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,QACb,EACA,CACI,MAAS,SACT,MAAS,MACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,eACb,EACA,CACI,MAAS,UACT,MAAS,gBACb,EACA,CACI,MAAS,UACT,MAAS,kBACb,EACA,CACI,MAAS,UACT,MAAS,aACb,EACA,CACI,MAAS,UACT,MAAS,UACb,CACJ,CACJ,EACA,kBAAmB,CACf,MAAS,iCACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,iBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,wBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,OACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,+DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oCACT,MAAS,OACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,QACb,EACA,CACI,MAAS,8BACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,QACb,EACA,CACI,MAAS,6BACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,4DACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,w8BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,kBACb,EACA,CACI,MAAS,kBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,KACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,WACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,oCACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,wCACT,MAAS,eACb,EACA,CACI,MAAS,oCACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,mBACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,eACb,EACA,CACI,MAAS,0CACT,MAAS,kBACb,EACA,CACI,MAAS,wCACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,qBACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,iBACb,EACA,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,sBACb,EACA,CACI,MAAS,qBACT,MAAS,mBACb,EACA,CACI,MAAS,SACT,MAAS,eACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,eACb,EACA,CACI,MAAS,SACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,gBACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,gBACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,cACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,kBACb,EACA,CACI,MAAS,mBACT,MAAS,iBACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,kIACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,mCACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,8BACT,MAAS,UACb,EACA,CACI,MAAS,+BACT,MAAS,gBACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,sCACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,iCACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,6CACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,cACb,EACA,CACI,MAAS,OACT,MAAS,eACb,EACA,CACI,MAAS,SACT,MAAS,iBACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,iBACb,EACA,CACI,MAAS,OACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,SACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,gCACT,MAAS,iBACb,EACA,CACI,MAAS,SACT,MAAS,sBACb,EACA,CACI,MAAS,SACT,MAAS,kBACb,EACA,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,cACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,QACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,sCACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,gCACT,MAAS,aACb,EACA,CACI,MAAS,SACT,MAAS,gBACb,EACA,CACI,MAAS,SACT,MAAS,gBACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,QACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,QACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,MACb,EACA,CACI,MAAS,SACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,QACb,EACA,CACI,MAAS,kBACT,MAAS,KACb,EACA,CACI,MAAS,QACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,wBACT,MAAS,MACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,oBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,wCACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,iIACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,4DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,iDACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,4FACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,oFACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,UACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,wLACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,gBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,uBACT,MAAS,iBACb,EACA,CACI,MAAS,iCACT,MAAS,iBACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,iBACb,EACA,CACI,MAAS,sBACT,MAAS,eACb,EACA,CACI,MAAS,yBACT,OAAU,KACV,MAAS,eACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,4EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,WACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,UACT,OAAU,QACd,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,MACb,EACA,CACI,MAAS,UACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,OACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,0CACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,yJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2DACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,YACb,EACA,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,UACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,+BACT,OAAU,SACV,MAAS,gBACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,sBACT,OAAU,KACV,MAAS,QACb,EACA,QAAW,CACP,MAAS,+CACT,OAAU,SACV,MAAS,eACb,EACA,MAAS,CACL,MAAS,sCACT,OAAU,KACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,iDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,MACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,UACT,OAAU,SACV,MAAS,WACb,EACA,SAAU,CACN,MAAS,yCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,aACT,OAAU,QACd,EACA,CACI,MAAS,gBACT,MAAS,cACT,OAAU,QACd,EACA,CACI,MAAS,kBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,mBACT,MAAS,KACb,EACA,CACI,MAAS,yBACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,wEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,yGACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,0EACT,MAAS,QACb,EACA,CACI,MAAS,0CACT,MAAS,SACT,OAAU,YACd,CACJ,CACJ,EACA,YAAa,CACT,MAAS,gCACT,OAAU,SACV,MAAS,QACb,EACA,OAAQ,CACJ,MAAS,6CACT,OAAU,KACV,MAAS,QACb,EACA,OAAU,CACN,MAAS,uCACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,kBACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,oHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,oBACb,EACA,CACI,MAAS,6BACT,MAAS,oBACb,EACA,CACI,MAAS,2BACT,MAAS,0BACb,EACA,CACI,MAAS,iCACT,MAAS,mBACb,EACA,CACI,MAAS,0BACT,MAAS,mBACb,EACA,CACI,MAAS,0BACT,MAAS,mBACb,EACA,CACI,MAAS,oBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,eACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,4BACT,OAAU,aACV,MAAS,YACb,EACA,MAAS,CACL,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,6BACT,OAAU,SACV,MAAS,IACb,EACA,IAAO,CACH,MAAS,0FACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,sDACT,MAAS,IACb,EACA,CACI,MAAS,0CACT,MAAS,aACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,iWACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+EACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,gBACb,EACA,CACI,MAAS,+BACT,MAAS,qBACb,EACA,CACI,MAAS,4BACT,MAAS,kBACb,EACA,CACI,MAAS,6BACT,MAAS,gBACb,EACA,CACI,MAAS,6BACT,MAAS,gBACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,4BACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,wCACT,MAAS,aACb,EACA,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,mDACT,MAAS,gBACb,EACA,CACI,MAAS,yCACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,gBACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,2CACT,OAAU,KACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,wDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,uCACT,OAAU,KACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,yGACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,mDACT,MAAS,SACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,oCACT,MAAS,WACb,EACA,CACI,MAAS,oHACT,MAAS,IACb,EACA,CACI,MAAS,6FACT,OAAU,aACV,MAAS,UACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,uCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,4FACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,oBACb,EACA,CACI,MAAS,iCACT,MAAS,oBACb,EACA,CACI,MAAS,qCACT,OAAU,aACV,MAAS,yBACb,EACA,CACI,MAAS,sEACT,OAAU,aACV,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,oCACT,OAAU,aACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,yCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,OACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,2MACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,KACb,EACA,CACI,MAAS,uCACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,SACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,OACb,EACA,CACI,MAAS,iCACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,4BACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,wBACT,MAAS,UACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,yBACT,MAAS,aACT,OAAU,SACd,EACA,CACI,MAAS,0CACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,+BACT,OAAU,aACV,MAAS,IACb,EACA,YAAa,CACT,MAAS,yBACT,OAAU,KACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,4BACT,OAAU,KACV,MAAS,QACb,EACA,MAAS,CACL,MAAS,yBACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,mFACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,kBACb,EACA,CACI,MAAS,oCACT,MAAS,YACb,EACA,CACI,MAAS,6BACT,MAAS,SACT,OAAU,uBACd,EACA,CACI,MAAS,sBACT,MAAS,UACT,OAAU,IACd,EACA,CACI,MAAS,uBACT,MAAS,KACT,OAAU,YACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,kEACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,KACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,cACT,MAAS,KACb,EACA,CACI,MAAS,aACT,MAAS,KACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,gCACT,OAAU,aACV,MAAS,UACb,EACA,KAAQ,CACJ,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,MACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,sCACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,eACT,MAAS,QACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,wBACT,OAAU,KACV,MAAS,KACb,EACA,MAAS,CACL,MAAS,+BACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,2BACT,OAAU,SACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,mCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,oEACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,wDACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,kCACT,OAAU,aACV,MAAS,OACb,EACA,OAAU,CACN,MAAS,6BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,0BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6EACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,OACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oCACT,OAAU,cACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,oCACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,kCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,YACb,EACA,CACI,MAAS,sCACT,MAAS,KACT,OAAU,IACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,0BACT,OAAU,KACV,MAAS,qBACb,EACA,SAAY,CACR,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,wBACT,MAAS,cACb,EACA,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,eACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,sSACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,2OACT,MAAS,IACb,EACA,CACI,MAAS,iFACT,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,wBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,6BACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,uCACT,OAAU,SACV,MAAS,aACb,EACA,SAAY,CACR,MAAS,4BACT,OAAU,KACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,0FACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,CACJ,CACJ,EACA,eAAgB,CACZ,MAAS,wBACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,4DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,eACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0FACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,MACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,kDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,uCACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,+BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,sBACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,kCACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,kEACT,OAAU,KACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,yBACT,OAAU,SACV,MAAS,MACb,EACA,KAAQ,CACJ,MAAS,oDACT,OAAU,SACV,MAAS,UACb,EACA,IAAO,CACH,MAAS,mDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wCACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,wBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,QACb,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,kCACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,6CACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,gFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mCACT,MAAS,KACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,KACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,mDACT,MAAS,IACb,EACA,CACI,MAAS,yCACT,OAAU,UACV,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,iDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,OACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,6BACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,+EACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,iDACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,0CACT,OAAU,KACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,yBACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,8BACT,OAAU,KACV,MAAS,IACb,EACA,IAAO,CACH,MAAS,kDACT,OAAU,SACV,MAAS,IACb,EACA,IAAO,CACH,MAAS,yCACT,OAAU,SACV,MAAS,IACb,EACA,SAAU,CACN,MAAS,8DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qDACT,MAAS,IACb,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,UACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,6BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,mBACb,EACA,CACI,MAAS,WACT,OAAU,SACV,MAAS,aACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,+BACT,OAAU,aACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,2GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sCACT,MAAS,SACb,EACA,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,KACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,sCACT,MAAS,IACb,EACA,CACI,MAAS,sCACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,+BACT,MAAS,KACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,kBACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,+DACT,MAAS,kBACb,EACA,CACI,MAAS,iDACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,4CACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,WACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,2BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,SACb,EACA,CACI,MAAS,iGACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,UACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,8BACT,OAAU,aACV,MAAS,IACb,EACA,IAAO,CACH,MAAS,2BACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,qCACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,4CACT,OAAU,SACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,0EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,qCACT,MAAS,MACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,gKACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oIACT,MAAS,IACb,EACA,CACI,MAAS,oDACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,8EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,aACb,EACA,CACI,MAAS,oEACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,OAAU,SACV,MAAS,YACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,mEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,mDACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,uCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,OAAU,aACV,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,yBACT,OAAU,aACV,MAAS,SACb,EACA,KAAQ,CACJ,MAAS,qEACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gEACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,0BACT,OAAU,aACV,MAAS,YACb,EACA,QAAW,CACP,MAAS,gCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,gBACT,OAAU,aACV,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,6DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,UACb,EACA,CACI,MAAS,oCACT,MAAS,aACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,2BACT,OAAU,aACV,MAAS,WACb,EACA,MAAS,CACL,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,MAAS,MACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,0BACT,OAAU,aACV,MAAS,cACb,EACA,QAAW,CACP,MAAS,qDACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,kBACb,EACA,CACI,MAAS,gCACT,MAAS,iBACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,mBACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,gBACb,EACA,CACI,MAAS,mBACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,CACJ,CACJ,EACA,UAAW,CACP,MAAS,gCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,YACb,EACA,CACI,MAAS,uBACT,MAAS,eACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,8CACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,kBACb,EACA,CACI,MAAS,yBACT,MAAS,OACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,wQACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qCACT,MAAS,OACb,EACA,CACI,MAAS,qCACT,MAAS,OACb,EACA,CACI,MAAS,qCACT,MAAS,OACb,EACA,CACI,MAAS,8BACT,MAAS,GACb,EACA,CACI,MAAS,sCACT,MAAS,QACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,0GACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,YACb,EACA,CACI,MAAS,8BACT,OAAU,SACV,MAAS,iBACb,EACA,CACI,MAAS,8CACT,OAAU,SACV,MAAS,oBACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,UACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,YACb,CACJ,CACJ,EACA,eAAgB,CACZ,MAAS,4IACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,+BACT,MAAS,cACb,EACA,CACI,MAAS,+BACT,MAAS,kBACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,EACA,CACI,MAAS,4BACT,MAAS,YACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,2CACT,MAAS,UACb,EACA,CACI,MAAS,kCACT,MAAS,QACb,EACA,CACI,MAAS,qBACT,OAAU,SACV,MAAS,QACb,EACA,CACI,MAAS,+CACT,OAAU,SACV,MAAS,QACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,WACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,4CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,mEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,gCACT,OAAU,KACV,MAAS,EACb,EACA,CACI,MAAS,sCACT,OAAU,SACV,MAAS,QACb,CACJ,CACJ,EACA,WAAY,CACR,MAAS,+CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,aACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,kCACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,qCACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,8CACT,OAAU,KACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,uDACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,iCACT,OAAU,aACV,MAAS,IACb,EACA,OAAQ,CACJ,MAAS,wCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,cACb,EACA,CACI,MAAS,qBACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,eACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,mCACT,OAAU,SACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,iCACT,OAAU,aACV,MAAS,aACb,EACA,MAAS,CACL,MAAS,uBACT,OAAU,aACV,MAAS,UACb,EACA,KAAQ,CACJ,MAAS,iCACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,4BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,2BACT,OAAU,aACV,MAAS,cACb,EACA,MAAS,CACL,MAAS,wBACT,OAAU,KACV,MAAS,iBACb,EACA,SAAY,CACR,MAAS,0DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sCACT,MAAS,UACb,EACA,CACI,MAAS,iCACT,MAAS,QACb,EACA,CACI,MAAS,+BACT,MAAS,MACb,EACA,CACI,MAAS,kCACT,MAAS,SACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,oBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,QACb,EACA,CACI,MAAS,qCACT,MAAS,QACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,2DACT,OAAU,KACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,+CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,YACT,OAAU,SACV,MAAS,WACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,kCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,sBACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,yBACT,OAAU,SACV,MAAS,MACb,EACA,OAAU,CACN,MAAS,wBACT,OAAU,SACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,2EACT,OAAU,KACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,8CACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,8BACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,+BACT,OAAU,aACV,MAAS,QACb,EACA,MAAS,CACL,MAAS,gDACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,YACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,uDACT,OAAU,SACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,4BACT,OAAU,SACV,MAAS,QACb,EACA,SAAY,CACR,MAAS,wCACT,OAAU,SACV,MAAS,cACb,EACA,YAAa,CACT,MAAS,gHACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,gCACb,EACA,CACI,MAAS,wCACT,MAAS,yBACb,EACA,CACI,MAAS,+BACT,MAAS,+BACb,EACA,CACI,MAAS,+BACT,MAAS,6BACb,EACA,CACI,MAAS,gCACT,MAAS,0BACb,EACA,CACI,MAAS,gCACT,MAAS,0BACb,EACA,CACI,MAAS,uCACT,MAAS,+BACb,EACA,CACI,MAAS,yCACT,MAAS,eACb,EACA,CACI,MAAS,mCACT,OAAU,aACV,MAAS,wBACb,CACJ,CACJ,EACA,KAAM,CACF,MAAS,0CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,cACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,yBACT,OAAU,aACV,MAAS,cACb,EACA,MAAS,CACL,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wCACT,MAAS,QACb,EACA,CACI,MAAS,mCACT,MAAS,UACb,EACA,CACI,MAAS,4DACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,8CACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,gBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,uDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iDACT,MAAS,IACb,EACA,CACI,MAAS,qCACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,2BACT,OAAU,SACV,MAAS,KACb,EACA,UAAa,CACT,MAAS,0CACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,sJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,cACb,EACA,CACI,MAAS,yBACT,MAAS,MACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,mDACT,MAAS,UACb,EACA,CACI,MAAS,mCACT,MAAS,gBACb,EACA,CACI,MAAS,2BACT,MAAS,QACb,EACA,CACI,MAAS,8CACT,MAAS,QACb,EACA,CACI,MAAS,mCACT,MAAS,gBACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,mDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,0BACT,OAAU,aACV,MAAS,SACb,EACA,MAAS,CACL,MAAS,wCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,IACb,EACA,CACI,MAAS,qBACT,OAAU,aACV,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,wBACT,OAAU,KACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,sBACT,OAAU,SACV,MAAS,QACb,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,mCACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,OACb,EACA,CACI,MAAS,2BACT,MAAS,QACb,EACA,CACI,MAAS,kCACT,MAAS,UACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,4BACT,OAAU,SACV,MAAS,SACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,UACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,SACb,EACA,CACI,MAAS,SACT,MAAS,QACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,iFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,UACb,EACA,CACI,MAAS,wCACT,MAAS,SACb,EACA,CACI,MAAS,qCACT,MAAS,WACb,EACA,CACI,MAAS,wDACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,kCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,QACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,wFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iCACT,MAAS,iBACb,EACA,CACI,MAAS,2BACT,MAAS,cACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,oBACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,sDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,YACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,oBACT,MAAS,OACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,yFACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,+CACT,MAAS,SACb,EACA,CACI,MAAS,yCACT,MAAS,WACb,EACA,CACI,MAAS,0DACT,MAAS,SACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,gDACT,OAAU,KACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,iEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,QACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,wBACT,MAAS,WACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,wBACT,OAAU,aACV,MAAS,WACb,EACA,MAAS,CACL,MAAS,0DACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,aACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,iBAAkB,CACd,MAAS,8MACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,aACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,qCACT,MAAS,kBACb,EACA,CACI,MAAS,oCACT,MAAS,iBACb,EACA,CACI,MAAS,6BACT,MAAS,aACb,EACA,CACI,MAAS,mCACT,MAAS,gBACb,EACA,CACI,MAAS,8BACT,MAAS,cACb,EACA,CACI,MAAS,6BACT,MAAS,aACb,EACA,CACI,MAAS,wBACT,MAAS,iBACb,EACA,CACI,MAAS,wEACT,MAAS,UACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,EACA,CACI,MAAS,8BACT,MAAS,iBACb,EACA,CACI,MAAS,0BACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,YACb,CACJ,CACJ,EACA,WAAY,CACR,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2EACT,MAAS,IACb,EACA,CACI,MAAS,eACT,OAAU,SACV,MAAS,cACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,6BACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,wBACT,OAAU,SACV,MAAS,UACb,EACA,SAAY,CACR,MAAS,4BACT,OAAU,SACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,wJACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,gBACb,EACA,CACI,MAAS,wBACT,MAAS,OACb,EACA,CACI,MAAS,qIACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,yBACT,OAAU,SACV,MAAS,YACb,EACA,QAAW,CACP,MAAS,kCACT,OAAU,KACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,gCACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,SACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,wBACT,OAAU,aACV,MAAS,IACb,EACA,IAAO,CACH,MAAS,6CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,QACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,0CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,EACA,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,uBACT,MAAS,MACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,sIACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6BACT,MAAS,MACb,EACA,CACI,MAAS,qCACT,MAAS,kBACb,EACA,CACI,MAAS,iCACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,eACb,EACA,CACI,MAAS,sCACT,MAAS,aACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,iCACT,MAAS,WACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,OAAU,UACV,MAAS,UACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,yBACT,MAAS,cACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,uFACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,+CACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,YACb,EACA,CACI,MAAS,qBACT,MAAS,SACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,2EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,YACb,EACA,CACI,MAAS,iBACT,MAAS,aACb,EACA,CACI,MAAS,yCACT,OAAU,gBACV,MAAS,IACb,CACJ,CACJ,EACA,YAAa,CACT,MAAS,sBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,0DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,SACb,EACA,CACI,MAAS,oDACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,OAAU,SACV,MAAS,KACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,6CACT,OAAU,aACV,MAAS,qBACb,EACA,OAAQ,CACJ,MAAS,8CACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,KACb,EACA,CACI,MAAS,wBACT,MAAS,MACT,OAAU,IACd,CACJ,CACJ,EACA,MAAS,CACL,MAAS,6BACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,iCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,KACb,EACA,CACI,MAAS,2BACT,MAAS,SACb,EACA,CACI,MAAS,8BACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,OACb,EACA,CACI,MAAS,mBACT,MAAS,YACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,aACV,MAAS,UACb,EACA,KAAQ,CACJ,MAAS,kCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,uBACT,MAAS,WACb,EACA,CACI,MAAS,YACT,MAAS,MACb,EACA,CACI,MAAS,+DACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,MAAS,SACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,+CACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,gBACb,EACA,CACI,MAAS,4CACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,oBACT,OAAU,aACV,MAAS,IACb,EACA,GAAM,CACF,MAAS,uCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,eACb,EACA,CACI,MAAS,WACT,MAAS,OACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,oCACT,OAAU,aACV,MAAS,IACb,EACA,OAAQ,CACJ,MAAS,qBACT,OAAU,UACV,MAAS,WACb,EACA,OAAU,CACN,MAAS,kCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,SACT,MAAS,MACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,4BACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,iCACT,OAAU,aACV,MAAS,aACb,EACA,KAAQ,CACJ,MAAS,mGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,YACT,MAAS,MACb,EACA,CACI,MAAS,OACT,MAAS,MACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,yBACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,iCACT,OAAU,aACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,mDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,KACb,EACA,CACI,MAAS,cACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,qEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,SACb,EACA,CACI,MAAS,sBACT,MAAS,MACb,EACA,CACI,MAAS,cACT,MAAS,cACb,EACA,CACI,MAAS,cACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,aACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,kCACT,OAAU,KACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,qEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,QACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,gCACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,iCACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,wBACT,OAAU,SACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,uCACT,OAAU,SACV,MAAS,YACb,EACA,KAAQ,CACJ,MAAS,yCACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,oEACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,sEACT,MAAS,oBACb,EACA,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,sBACb,EACA,CACI,MAAS,cACT,MAAS,OACb,EACA,CACI,MAAS,4BACT,MAAS,qBACb,EACA,CACI,MAAS,0BACT,MAAS,sBACb,EACA,CACI,MAAS,8BACT,MAAS,uBACb,EACA,CACI,MAAS,sBACT,MAAS,SACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,yGACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,qDACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,8BACT,MAAS,OACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,yBACT,OAAU,aACV,MAAS,QACb,EACA,UAAa,CACT,MAAS,sBACT,OAAU,SACV,MAAS,SACb,EACA,SAAY,CACR,MAAS,uEACT,OAAU,SACV,MAAS,OACb,EACA,UAAa,CACT,MAAS,wBACT,OAAU,SACV,MAAS,gBACb,EACA,MAAS,CACL,MAAS,4BACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,6BACT,OAAU,KACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,+BACT,OAAU,KACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,qCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,wCACT,OAAU,aACV,MAAS,IACb,EACA,CACI,MAAS,uBACT,MAAS,IACb,CACJ,CACJ,EACA,mBAAoB,CAChB,MAAS,mCACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,oEACT,OAAU,aACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,4GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,EACA,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,2FACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,uBACT,OAAU,SACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,2CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,sBACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,MAAS,MACb,EACA,CACI,MAAS,aACT,MAAS,YACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,iBACT,MAAS,OACb,EACA,CACI,MAAS,gBACT,MAAS,MACb,EACA,CACI,MAAS,kBACT,MAAS,QACb,EACA,CACI,MAAS,gBACT,MAAS,MACb,EACA,CACI,MAAS,mBACT,MAAS,SACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,2GACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,4FACT,MAAS,IACb,EACA,CACI,MAAS,WACT,OAAU,aACV,MAAS,WACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,yBACT,OAAU,WACV,MAAS,aACb,EACA,WAAY,CACR,MAAS,2GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,KACb,EACA,CACI,MAAS,OACT,MAAS,YACb,EACA,CACI,MAAS,OACT,MAAS,OACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,QACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,OACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,MACb,EACA,CACI,MAAS,OACT,MAAS,YACb,EACA,CACI,MAAS,OACT,MAAS,QACb,EACA,CACI,MAAS,OACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,SACb,EACA,CACI,MAAS,OACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,aACb,EACA,CACI,MAAS,OACT,MAAS,WACb,EACA,CACI,MAAS,OACT,MAAS,UACT,OAAU,QACd,CACJ,CACJ,EACA,OAAU,CACN,MAAS,sCACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,gCACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,wCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,cACb,EACA,CACI,MAAS,mBACT,MAAS,UACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,2DACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,4BACT,MAAS,eACb,EACA,CACI,MAAS,iBACT,MAAS,gBACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,WACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,2BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,QACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,+FACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,cACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,OAAU,aACV,MAAS,YACb,EACA,CACI,MAAS,kBACT,OAAU,KACV,MAAS,aACb,EACA,CACI,MAAS,YACT,OAAU,KACV,MAAS,OACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,+DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sCACT,MAAS,IACb,EACA,CACI,MAAS,+BACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,sBACT,OAAU,gBACV,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,sDACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,oCACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,yCACT,OAAU,aACV,MAAS,WACb,EACA,OAAU,CACN,MAAS,+CACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,0BACT,OAAU,SACV,MAAS,aACb,EACA,QAAW,CACP,MAAS,0BACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,mDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,SACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,+DACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,yCACT,MAAS,IACb,EACA,CACI,MAAS,iBACT,OAAU,aACV,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,8EACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0CACT,MAAS,cACb,EACA,CACI,MAAS,qCACT,MAAS,eACb,EACA,CACI,MAAS,mCACT,OAAU,SACV,MAAS,eACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,+GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,wCACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,yCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,cACT,MAAS,aACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,2CACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,YACb,EACA,CACI,MAAS,SACT,MAAS,wBACb,EACA,CACI,MAAS,YACT,MAAS,mBACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,gDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6CACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,YACT,OAAU,aACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,yBACT,OAAU,SACV,MAAS,aACb,EACA,aAAc,CACV,MAAS,oCACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,6BACT,OAAU,aACV,MAAS,IACb,EACA,WAAc,CACV,MAAS,oCACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,iCACT,OAAU,aACV,MAAS,cACb,EACA,QAAW,CACP,MAAS,wBACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qEACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,gEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,QACb,EACA,CACI,MAAS,eACT,MAAS,MACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,eACT,MAAS,SACb,EACA,CACI,MAAS,gBACT,OAAU,SACV,MAAS,OACb,EACA,CACI,MAAS,eACT,OAAU,SACV,MAAS,eACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,sEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4DACT,MAAS,QACb,EACA,CACI,MAAS,uBACT,MAAS,UACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,+BACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,4BACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,wCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,QACT,MAAS,kBACb,EACA,CACI,MAAS,QACT,MAAS,mBACb,EACA,CACI,MAAS,QACT,MAAS,gBACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,2BACT,MAAS,aACb,EACA,CACI,MAAS,0BACT,MAAS,YACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,sCACT,OAAU,aACV,MAAS,UACb,EACA,OAAU,CACN,MAAS,2BACT,OAAU,SACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,yGACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,0BACT,MAAS,UACb,EACA,CACI,MAAS,oEACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,oCACT,OAAU,aACV,MAAS,YACb,EACA,YAAe,CACX,MAAS,8BACT,OAAU,aACV,MAAS,IACb,EACA,SAAU,CACN,MAAS,qCACT,OAAU,SACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,oEACT,OAAU,aACV,MAAS,IACb,EACA,aAAc,CACV,MAAS,yCACT,OAAU,aACV,MAAS,IACb,EACA,aAAc,CACV,MAAS,6DACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,SACT,MAAS,SACb,EACA,CACI,MAAS,aACT,MAAS,eACb,EACA,CACI,MAAS,YACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,CACJ,CACJ,EACA,YAAa,CACT,MAAS,gFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,2BACT,MAAS,UACb,EACA,CACI,MAAS,wBACT,MAAS,SACb,EACA,CACI,MAAS,+BACT,MAAS,eACb,EACA,CACI,MAAS,kCACT,MAAS,gBACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,IACb,CACJ,CACJ,EACA,OAAQ,CACJ,MAAS,2CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,0BACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,2DACT,OAAU,SACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,2BACT,OAAU,SACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,gDACT,OAAU,UACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,UACb,EACA,CACI,MAAS,qBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,OAAU,aACV,MAAS,YACb,EACA,CACI,MAAS,0BACT,OAAU,aACV,MAAS,cACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qCACT,OAAU,SACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,0BACT,OAAU,aACV,MAAS,gBACb,EACA,WAAc,CACV,MAAS,6FACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,cACb,EACA,CACI,MAAS,WACT,MAAS,gBACb,EACA,CACI,MAAS,QACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,YACb,EACA,CACI,MAAS,oCACT,MAAS,YACb,EACA,CACI,MAAS,mBACT,OAAU,aACV,MAAS,cACb,CACJ,CACJ,EACA,SAAU,CACN,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,+CACT,MAAS,IACb,EACA,CACI,MAAS,eACT,OAAU,SACV,MAAS,QACb,CACJ,CACJ,EACA,GAAM,CACF,MAAS,4FACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,gDACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,2CACT,MAAS,OACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,iFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0DACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,gBACb,EACA,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,gDACT,OAAU,KACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,iCACT,OAAU,aACV,MAAS,IACb,EACA,eAAgB,CACZ,MAAS,gHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,cACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,eACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,SACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,YACT,OAAU,SACV,MAAS,WACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,aACb,EACA,CACI,MAAS,oBACT,MAAS,QACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,+GACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8FACT,MAAS,IACb,EACA,CACI,MAAS,2BACT,MAAS,IACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,2BACT,OAAU,aACV,MAAS,eACb,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,KACb,EACA,CACI,MAAS,eACT,MAAS,KACb,EACA,CACI,MAAS,gBACT,MAAS,QACb,EACA,CACI,MAAS,yBACT,OAAU,SACV,MAAS,QACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,kDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kCACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,gBACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,YACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,WACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,SACb,EACA,CACI,MAAS,kBACT,MAAS,UACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,gCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,UACb,EACA,CACI,MAAS,OACT,MAAS,YACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,yBACT,OAAU,SACV,MAAS,YACb,EACA,eAAgB,CACZ,MAAS,mCACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,oHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,YACb,EACA,CACI,MAAS,kBACT,MAAS,WACb,EACA,CACI,MAAS,iBACT,OAAU,SACV,MAAS,kBACb,EACA,CACI,MAAS,oBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,uBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,iBACT,OAAU,SACV,MAAS,SACb,EACA,CACI,MAAS,qBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,qBACT,OAAU,SACV,MAAS,gBACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,qBACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,uDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,KACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,cACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uBACT,MAAS,IACb,EACA,CACI,MAAS,sBACT,OAAU,SACV,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,kFACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oBACT,MAAS,eACb,EACA,CACI,MAAS,gBACT,MAAS,iBACb,EACA,CACI,MAAS,sBACT,MAAS,wBACb,EACA,CACI,MAAS,mCACT,MAAS,WACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,cACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kDACT,MAAS,IACb,EACA,CACI,MAAS,kCACT,OAAU,aACV,MAAS,IACb,CACJ,CACJ,EACA,GAAM,CACF,MAAS,0EACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,0BACT,OAAU,aACV,MAAS,OACb,EACA,MAAS,CACL,MAAS,yBACT,OAAU,aACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,gEACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,SACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,YACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,4CACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,IACb,EACA,CACI,MAAS,wBACT,OAAU,SACV,MAAS,IACb,EACA,CACI,MAAS,0BACT,OAAU,SACV,MAAS,UACb,EACA,CACI,MAAS,yBACT,OAAU,KACV,MAAS,OACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,oDACT,OAAU,KACV,MAAS,EACb,EACA,WAAc,CACV,MAAS,uCACT,OAAU,aACV,MAAS,WACb,EACA,QAAW,CACP,MAAS,uBACT,OAAU,aACV,MAAS,UACb,EACA,YAAa,CACT,MAAS,iCACT,OAAU,aACV,MAAS,aACb,EACA,IAAO,CACH,MAAS,uHACT,OAAU,KACV,MAAS,aACb,EACA,OAAQ,CACJ,MAAS,qCACT,OAAU,KACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,gBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,OACT,OAAU,SACV,MAAS,MACb,EACA,MAAS,CACL,MAAS,sBACT,OAAU,SACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,SACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,oDACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,uCACT,OAAU,SACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,wBACT,OAAU,SACV,MAAS,IACb,EACA,QAAS,CACL,MAAS,yBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,qCACT,MAAS,IACb,EACA,CACI,MAAS,kBACT,MAAS,MACb,CACJ,CACJ,EACA,UAAW,CACP,MAAS,sBACT,OAAU,KACV,MAAS,SACb,EACA,SAAY,CACR,MAAS,eACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,wCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,gDACT,OAAU,aACV,MAAS,IACb,EACA,GAAM,CACF,MAAS,sCACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,WACb,EACA,CACI,MAAS,cACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,uBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,WACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,2CACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,OACb,EACA,CACI,MAAS,6BACT,OAAU,SACV,MAAS,UACb,CACJ,CACJ,EACA,OAAQ,CACJ,MAAS,kCACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,gCACT,OAAU,aACV,MAAS,IACb,EACA,UAAa,CACT,MAAS,2BACT,OAAU,aACV,MAAS,UACb,EACA,cAAe,CACX,MAAS,+BACT,OAAU,aACV,MAAS,OACb,EACA,QAAW,CACP,MAAS,cACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,sCACT,MAAS,OACb,EACA,CACI,MAAS,mCACT,MAAS,QACb,EACA,CACI,MAAS,0CACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,qBACT,OAAU,aACV,MAAS,OACb,EACA,QAAW,CACP,MAAS,uBACT,OAAU,SACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,mCACT,OAAU,SACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,+CACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,YACb,EACA,CACI,MAAS,UACT,MAAS,UACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,uHACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,uDACT,MAAS,WACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,aACT,OAAU,IACd,EACA,CACI,MAAS,YACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,eACT,MAAS,KACT,OAAU,IACd,EACA,CACI,MAAS,eACT,MAAS,KACT,OAAU,IACd,EACA,CACI,MAAS,iBACT,MAAS,eACT,OAAU,IACd,EACA,CACI,MAAS,wBACT,MAAS,YACT,OAAU,QACd,EACA,CACI,MAAS,wBACT,MAAS,KACT,OAAU,QACd,EACA,CACI,MAAS,yBACT,MAAS,yBACT,OAAU,IACd,EACA,CACI,MAAS,wBACT,MAAS,KACT,OAAU,IACd,EACA,CACI,MAAS,sBACT,MAAS,eACT,OAAU,IACd,EACA,CACI,MAAS,4BACT,MAAS,UACb,EACA,CACI,MAAS,+BACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,sBACT,OAAU,cACV,MAAS,IACb,EACA,YAAa,CACT,MAAS,wBACT,OAAU,SACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,6FACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,mBACb,EACA,CACI,MAAS,mBACT,MAAS,kBACb,EACA,CACI,MAAS,aACT,MAAS,iBACb,EACA,CACI,MAAS,aACT,MAAS,gCACb,EACA,CACI,MAAS,aACT,MAAS,QACb,EACA,CACI,MAAS,aACT,MAAS,OACb,CACJ,CACJ,EACA,WAAc,CACV,MAAS,iBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,sCACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,aACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,OACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,0CACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,0BACT,MAAS,SACb,EACA,CACI,MAAS,iBACT,MAAS,SACb,EACA,CACI,MAAS,wBACT,MAAS,IACb,EACA,CACI,MAAS,cACT,MAAS,MACb,EACA,CACI,MAAS,mCACT,MAAS,SACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,qBACT,OAAU,SACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,IACb,EACA,CACI,MAAS,YACT,MAAS,QACb,EACA,CACI,MAAS,oBACT,OAAU,KACV,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,4BACT,OAAU,KACV,MAAS,SACb,EACA,QAAW,CACP,MAAS,kCACT,OAAU,SACV,MAAS,IACb,EACA,QAAW,CACP,MAAS,yBACT,OAAU,KACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,uBACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,sBACT,OAAU,aACV,MAAS,SACb,EACA,KAAQ,CACJ,MAAS,sCACT,OAAU,aACV,MAAS,SACb,EACA,KAAQ,CACJ,MAAS,sCACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,wCACT,OAAU,aACV,MAAS,IACb,EACA,SAAY,CACR,MAAS,yDACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,0CACT,MAAS,aACb,EACA,CACI,MAAS,kCACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,uEACT,OAAU,aACV,MAAS,IACb,EACA,MAAS,CACL,MAAS,QACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,mCACT,MAAS,IACb,CACJ,CACJ,EACA,WAAY,CACR,MAAS,cACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,8BACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,QACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,wBACT,OAAU,aACV,MAAS,IACb,EACA,OAAU,CACN,MAAS,8BACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,6CACT,MAAS,IACb,EACA,CACI,MAAS,mBACT,MAAS,MACb,CACJ,CACJ,EACA,eAAgB,CACZ,MAAS,gBACT,OAAU,aACV,OAAU,CACN,CACI,MAAS,kBACT,MAAS,MACb,EACA,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,6BACT,OAAU,aACV,MAAS,gBACb,EACA,OAAU,CACN,MAAS,+DACT,OAAU,aACV,MAAS,IACb,EACA,KAAQ,CACJ,MAAS,wBACT,OAAU,aACV,MAAS,OACb,EACA,UAAa,CACT,MAAS,6BACT,OAAU,UACV,MAAS,gBACb,EA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V,MAAS,aACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,MACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,YACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,QACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,YAAe,CACX,MAAS,cACT,OAAU,KACV,MAAS,WACb,EACA,UAAa,CACT,MAAS,oBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,gBACT,MAAS,eACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,KACV,MAAS,EACb,EACA,OAAU,CACN,MAAS,aACT,OAAU,KACV,MAAS,EACb,EACA,UAAa,CACT,MAAS,YACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,UACT,OAAU,KACV,MAAS,QACb,EACA,SAAY,CACR,MAAS,eACT,OAAU,KACV,MAAS,EACb,EACA,IAAO,CACH,MAAS,MACT,OAAU,KACV,MAAS,UACb,EACA,WAAc,CACV,MAAS,iBACT,OAAU,KACV,MAAS,EACb,EACA,WAAc,CACV,MAAS,iBACT,OAAU,KACV,MAAS,EACb,EACA,OAAU,CACN,MAAS,aACT,OAAU,KACV,MAAS,EACb,EACA,MAAO,CACH,MAAS,SACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,YACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,YACT,OAAU,KACV,MAAS,EACb,EACA,QAAW,CACP,MAAS,wBACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,iBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,CACJ,CACJ,EACA,WAAY,CACR,MAAS,eACT,OAAU,KACV,MAAS,EACb,EACA,QAAW,CACP,MAAS,mCACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,YACT,MAAS,WACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,6DACT,MAAS,IACb,EACA,CACI,MAAS,6CACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,cACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,cACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,YACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,QACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,oFACT,MAAS,IACb,EACA,CACI,MAAS,WACT,MAAS,WACb,EACA,CACI,MAAS,mBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,cACT,OAAU,KACV,MAAS,EACb,EACA,KAAQ,CACJ,MAAS,OACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,QACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,wBACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,UACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,IACb,EACA,CACI,MAAS,iEACT,MAAS,IACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,mBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,WACT,MAAS,WACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,aACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,KACV,MAAS,EACb,EACA,OAAU,CACN,MAAS,aACT,OAAU,KACV,MAAS,EACb,EACA,GAAM,CACF,MAAS,MACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,gBACT,MAAS,eACb,EACA,CACI,MAAS,cACT,MAAS,aACb,EACA,CACI,MAAS,yBACT,MAAS,aACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,oCACT,MAAS,IACb,EACA,CACI,MAAS,gCACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,EACA,CACI,MAAS,gDACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,4CACT,MAAS,IACb,EACA,CACI,MAAS,QACT,MAAS,OACb,EACA,CACI,MAAS,OACT,MAAS,MACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,eACT,OAAU,KACV,MAAS,EACb,EACA,OAAU,CACN,MAAS,aACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,QACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,YACT,OAAU,KACV,MAAS,EACb,EACA,UAAa,CACT,MAAS,YACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,KACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,gBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,eACT,MAAS,IACb,CACJ,CACJ,EACA,OAAU,CACN,MAAS,SACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,QACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,aACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,YACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,cACT,MAAS,SACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,UACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,yBACT,MAAS,gBACb,CACJ,CACJ,EACA,UAAa,CACT,MAAS,gBACT,OAAU,KACV,MAAS,EACb,EACA,KAAQ,CACJ,MAAS,OACT,OAAU,KACV,MAAS,EACb,EACA,GAAM,CACF,MAAS,SACT,OAAU,KACV,MAAS,EACb,EACA,UAAa,CACT,MAAS,YACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,YACb,EACA,CACI,MAAS,0BACT,MAAS,IACb,EACA,CACI,MAAS,iCACT,MAAS,SACb,EACA,CACI,MAAS,4BACT,MAAS,eACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,OACT,OAAU,KACV,MAAS,EACb,EACA,QAAW,CACP,MAAS,iBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,+BACT,MAAS,IACb,EACA,CACI,MAAS,oBACT,MAAS,cACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,eACT,OAAU,KACV,MAAS,EACb,EACA,QAAW,CACP,MAAS,cACT,OAAU,KACV,MAAS,EACb,EACA,OAAU,CACN,MAAS,aACT,OAAU,KACV,MAAS,EACb,EACA,MAAS,CACL,MAAS,YACT,OAAU,KACV,MAAS,EACb,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,KACV,MAAS,EACb,EACA,OAAU,CACN,MAAS,aACT,OAAU,KACV,MAAS,EACb,EACA,QAAW,CACP,MAAS,qBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,uCACT,MAAS,IACb,EACA,CACI,MAAS,6BACT,MAAS,eACb,EACA,CACI,MAAS,aACT,MAAS,iBACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,UACT,MAAS,SACb,CACJ,CACJ,EACA,IAAO,CACH,MAAS,UACT,OAAU,KACV,MAAS,EACb,EACA,WAAc,CACV,MAAS,aACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,wCACT,MAAS,IACb,EACA,CACI,MAAS,aACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,iBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,mCACT,MAAS,IACb,EACA,CACI,MAAS,yBACT,MAAS,IACb,EACA,CACI,MAAS,eACT,MAAS,OACb,EACA,CACI,MAAS,SACT,MAAS,QACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,YACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,IACb,CACJ,CACJ,EACA,MAAS,CACL,MAAS,YACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,mBACT,MAAS,IACb,EACA,CACI,MAAS,4BACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,OACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,UACT,MAAS,SACb,EACA,CACI,MAAS,eACT,MAAS,UACb,EACA,CACI,MAAS,sBACT,MAAS,WACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,2CACT,MAAS,IACb,EACA,CACI,MAAS,uCACT,MAAS,IACb,CACJ,CACJ,EACA,KAAQ,CACJ,MAAS,WACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,YACT,MAAS,WACb,CACJ,CACJ,EACA,aAAc,CACV,MAAS,gBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,qBACT,MAAS,eACb,CACJ,CACJ,EACA,YAAe,CACX,MAAS,cACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,aACT,MAAS,YACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,eACT,OAAU,KACV,MAAS,EACb,EACA,UAAa,CACT,MAAS,YACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,wDACT,MAAS,IACb,CACJ,CACJ,EACA,YAAe,CACX,MAAS,cACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,sBACT,MAAS,IACb,CACJ,CACJ,EACA,SAAY,CACR,MAAS,eACT,OAAU,KACV,MAAS,EACb,EACA,WAAc,CACV,MAAS,aACT,OAAU,KACV,MAAS,EACb,EACA,IAAO,CACH,MAAS,MACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,kDACT,MAAS,IACb,CACJ,CACJ,EACA,QAAW,CACP,MAAS,mBACT,OAAU,KACV,OAAU,CACN,CACI,MAAS,gCACT,MAAS,UACb,EACA,CACI,MAAS,6BACT,MAAS,UACb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AQ,UACR,QAAW,GACf,EACA,CACI,MAAS,SACT,KAAQ,SACR,QAAW,EACf,EACA,CACI,MAAS,oCACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,oDACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,oDACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,4DACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,6DACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,oFACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,+CACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,4CACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,sDACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,kHACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,oCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,+BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,uCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,WACT,KAAQ,WACR,QAAW,EACf,EACA,CACI,MAAS,wBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,8BACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,yBACT,KAAQ,YACR,QAAW,EACf,EACA,CACI,MAAS,wBACT,KAAQ,QACR,QAAW,EACf,EACA,CACI,MAAS,aACT,KAAQ,SACR,QAAW,EACf,EACA,CACI,MAAS,QACT,KAAQ,QACR,QAAW,EACf,EACA,CACI,MAAS,yCACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,sDACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,8JACT,KAAQ,KACR,QAAW,IACf,EACA,CACI,MAAS,4BACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,wMACT,KAAQ,KACR,QAAW,IACf,EACA,CACI,MAAS,iBACT,KAAQ,OACR,QAAW,EACf,EACA,CACI,MAAS,uBACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,QACR,QAAW,GACf,EACA,CACI,MAAS,kCACT,KAAQ,QACR,QAAW,GACf,EACA,CACI,MAAS,kCACT,KAAQ,QACR,QAAW,GACf,EACA,CACI,MAAS,mCACT,KAAQ,QACR,QAAW,GACf,EACA,CACI,MAAS,mCACT,KAAQ,QACR,QAAW,GACf,EACA,CACI,MAAS,0EACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,kDACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,6BACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,UACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,wBACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,4CACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,gDACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,2CACT,KAAQ,UACR,QAAW,KACf,EACA,CACI,MAAS,yCACT,KAAQ,UACR,QAAW,GACf,EACA,CACI,MAAS,8CACT,KAAQ,UACR,QAAW,GACf,EACA,CACI,MAAS,6CACT,KAAQ,UACR,QAAW,OACf,EACA,CACI,MAAS,4DACT,KAAQ,UACR,QAAW,aACf,EACA,CACI,MAAS,0CACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,4CACT,KAAQ,UACR,QAAW,MACf,EACA,CACI,MAAS,gDACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,wCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,kDACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,cACT,KAAQ,UACR,QAAW,KACf,EACA,CACI,MAAS,UACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,QACT,KAAQ,WACR,QAAW,EACf,EACA,CACI,MAAS,wDACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,gDACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,yCACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,4BACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,4BACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,4BACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,yBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,2BACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,wBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,wBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,wBACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,wBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,yBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,yBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,4BACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,wBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,mBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,qBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,qBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,qBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,oBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,qBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,KACf,EACA,CACI,MAAS,6BACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,0BACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,2CACT,KAAQ,MACR,QAAW,UACf,EACA,CACI,MAAS,6DACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,8DACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,gFACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,gLACT,KAAQ,MACR,QAAW,EACf,EACA,CACI,MAAS,0CACT,KAAQ,MACR,QAAW,EACf,EACA,CACI,MAAS,0BACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,mBACT,KAAQ,MACR,QAAW,EACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,0EACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,gDACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,2CACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,kDACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,0BACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,SACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,OACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,oEACT,KAAQ,MACR,QAAW,QACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,gBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,4CACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,mBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,kBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,kBACT,KAAQ,MACR,QAAW,MACf,EACA,CACI,MAAS,6DACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,mFACT,KAAQ,MACR,QAAW,EACf,EACA,CACI,MAAS,iCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,4CACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,mFACT,KAAQ,gBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,uBACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,uBACR,QAAW,EACf,EACA,CACI,MAAS,aACT,KAAQ,gBACR,QAAW,EACf,EACA,CACI,MAAS,OACT,KAAQ,gBACR,QAAW,EACf,EACA,CACI,MAAS,OACT,KAAQ,OACR,QAAW,EACf,EACA,CACI,MAAS,gCACT,KAAQ,YACR,QAAW,MACf,EACA,CACI,MAAS,gCACT,KAAQ,YACR,QAAW,OACf,EACA,CACI,MAAS,YACT,KAAQ,YACR,QAAW,EACf,EACA,CACI,MAAS,2DACT,KAAQ,uBACR,QAAW,IACf,EACA,CACI,MAAS,WACT,KAAQ,uBACR,QAAW,EACf,EACA,CACI,MAAS,4BACT,KAAQ,aACR,QAAW,IACf,EACA,CACI,MAAS,cACT,KAAQ,QACR,QAAW,EACf,EACA,CACI,MAAS,yBACT,KAAQ,aACR,QAAW,EACf,EACA,CACI,MAAS,QACT,KAAQ,UACR,QAAW,EACf,EACA,CACI,MAAS,0CACT,KAAQ,aACR,QAAW,EACf,EACA,CACI,MAAS,0CACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,OACR,QAAW,IACf,EACA,CACI,MAAS,0DACT,KAAQ,OACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,gCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,gBACT,KAAQ,WACR,QAAW,GACf,EACA,CACI,MAAS,cACT,KAAQ,WACR,QAAW,GACf,EACA,CACI,MAAS,UACT,KAAQ,WACR,QAAW,EACf,EACA,CACI,MAAS,4CACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,+BACT,KAAQ,MACR,QAAW,IACf,EACA,CACI,MAAS,iCACT,KAAQ,QACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,SACR,QAAW,IACf,EACA,CACI,MAAS,mCACT,KAAQ,UACR,QAAW,IACf,EACA,CACI,MAAS,qCACT,KAAQ,YACR,QAAW,IACf,EACA,CACI,MAAS,oCACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,uCACT,KAAQ,OACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,OACR,QAAW,IACf,EACA,CACI,MAAS,wBACT,KAAQ,WACR,QAAW,IACf,EACA,CACI,MAAS,sBACT,KAAQ,cACR,QAAW,IACf,EACA,CACI,MAAS,yBACT,KAAQ,OACR,QAAW,KACf,EACA,CACI,MAAS,8BACT,KAAQ,kBACR,QAAW,IACf,EACA,CACI,MAAS,kCACT,KAAQ,uBACR,QAAW,IACf,EACA,CACI,MAAS,OACT,KAAQ,OACR,QAAW,EACf,EACA,CACI,MAAS,qBACT,KAAQ,YACR,QAAW,EACf,CACJ,IC5vCA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAA,SACI,gBAAmB,CACf,IAAO,MACP,IAAO,UACP,IAAO,UACP,IAAO,WACP,IAAO,aACP,IAAO,YACP,IAAO,OACP,IAAO,OACP,IAAO,gBACP,IAAO,uBACP,IAAO,OACP,IAAO,SACP,IAAO,YACP,IAAO,cACP,IAAO,SACP,IAAO,SACP,IAAO,YACP,IAAO,SACP,IAAO,aACP,IAAO,UACP,IAAO,UACP,IAAO,UACP,IAAO,SACP,IAAO,SACP,IAAO,YACP,IAAO,QACP,IAAO,WACP,IAAO,OACP,IAAO,UACP,IAAO,QACP,IAAO,UACP,IAAO,UACP,IAAO,YACP,IAAO,UACP,IAAO,cACP,IAAO,MACP,IAAO,QACP,IAAO,WACP,IAAO,QACP,IAAO,aACP,IAAO,OACP,IAAO,WACP,IAAO,UACP,IAAO,SACP,IAAO,gBACP,IAAO,MACP,IAAO,WACP,IAAO,kBACP,IAAO,OACP,IAAO,OACP,IAAO,UACP,IAAO,YACP,IAAO,uBACP,IAAO,cACP,IAAO,UACP,IAAO,UACP,IAAO,OACP,IAAO,WACP,IAAO,YACP,IAAO,UACP,IAAO,OACP,IAAO,cACP,IAAO,UACP,IAAO,YACP,IAAO,UACP,IAAO,WACP,IAAO,UACP,IAAO,aACP,IAAO,uBACP,IAAO,uBACP,IAAO,YACP,IAAO,UACP,IAAO,QACP,IAAO,SACP,IAAO,SACP,IAAO,UACP,IAAO,QACP,IAAO,WACP,IAAO,UACP,IAAO,aACP,IAAO,cACP,IAAO,iBACP,IAAO,gBACP,IAAO,aACP,IAAO,OACP,IAAO,UACP,IAAO,QACP,IAAO,MACP,IAAO,SACP,IAAO,OACX,EACA,WAAc,CACV,QAAW,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EAClE,QAAW,CAAC,MAAO,KAAK,EACxB,WAAY,CAAC,KAAK,EAClB,WAAc,CAAC,MAAO,KAAK,EAC3B,KAAQ,CAAC,KAAK,EACd,KAAQ,CAAC,MAAO,KAAK,EACrB,YAAa,CAAC,MAAO,MAAO,KAAK,EACjC,aAAc,CAAC,MAAO,KAAK,EAC3B,iBAAkB,CAAC,MAAO,KAAK,EAC/B,YAAa,CAAC,KAAK,EACnB,IAAO,CAAC,KAAK,EACb,IAAO,CAAC,MAAO,KAAK,EACpB,UAAW,CAAC,KAAK,EACjB,YAAa,CACT,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC/D,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAC/D,MAAO,MAAO,MAAO,MAAO,KAChC,EACA,IAAO,CAAC,KAAK,EACb,wBAAyB,CAAC,MAAO,MAAO,KAAK,EAC7C,eAAgB,CAAC,MAAO,MAAO,KAAK,EACpC,eAAgB,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACzD,QAAW,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,EAC7C,KAAQ,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAK,EACpF,MAAS,CAAC,KAAK,EACf,QAAW,CAAC,KAAK,EACjB,iBAAkB,CAAC,MAAO,MAAO,MAAO,MAAO,KAAK,EACpD,iBAAkB,CAAC,KAAK,CAC5B,CACJ,IC3HA,IAAAC,GAAAC,EAAAC,IAAA,cACA,IAAIC,GAAmBD,IAAQA,GAAK,iBAAoB,SAAUE,EAAK,CACnE,OAAQA,GAAOA,EAAI,WAAcA,EAAM,CAAE,QAAWA,CAAI,CAC5D,EACA,OAAO,eAAeF,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAMG,GAAaF,GAAgB,IAA0C,EACvEG,GAAY,IACZC,GAAyB,IACzBC,GAAe,IACfC,GAA0BN,GAAgB,IAA2C,EACrFO,GAAiB,CAAC,UAAW,MAAO,YAAa,MAAO,OAAQ,UAAW,OAAQ,WAAW,EAC9FC,GAAeF,GAAwB,QAAQ,gBAC/CG,GAAaH,GAAwB,QAAQ,WAC7CI,GAAN,KAA4B,CACxB,YAAYC,EAAS,CACjB,KAAK,QAAU,CACX,kBAAmB,CACvB,EACA,KAAK,MAASC,GAAc,CACxB,IAAMC,EAAS,CACX,KAAM,GACN,QAAS,GACT,SAAU,KAAK,cAAcD,CAAS,CAC1C,EACA,QAAWE,KAAmBZ,GAAW,QAAS,CAC9C,IAAMa,EAAQV,GAAa,gBAAgBS,EAAgB,MAAOF,CAAS,EAC3E,GAAKG,EAEL,OAAAF,EAAO,KAAOT,GAAuB,oBAAoBU,EAAgB,KAAMC,CAAK,EACpFF,EAAO,QAAUV,GAAU,cAAcC,GAAuB,oBAAoBU,EAAgB,QAASC,CAAK,EAAG,KAAK,QAAQ,iBAAiB,EAC/IF,EAAO,OAAS,YAChBA,EAAO,KAAO,WAEdA,EAAO,OAAS,WAChBA,EAAO,KAAO,UAEdA,EAAO,OAAS,UAChBA,EAAO,KAAO,SAEXA,CACX,CACA,OAAO,IACX,EACA,KAAK,cAAiBD,GACdP,GAAa,gBAAgB,oCAAqCO,CAAS,EACpE,MAEPP,GAAa,gBAAgB,OAAQO,CAAS,EACvC,OAEPP,GAAa,gBAAgB,MAAOO,CAAS,EACtC,SAEPP,GAAa,gBAAgB,gCAAiCO,CAAS,EAChE,MAEPP,GAAa,gBAAgB,uBAAwBO,CAAS,EACvD,MAEJ,GAEX,KAAK,QAAU,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG,KAAK,OAAO,EAAGD,CAAO,CACzE,CACJ,EACAZ,GAAQ,QAAUW,GAClBA,GAAsB,kBAAoB,IAAMH,GAChDG,GAAsB,YAAeM,GAAW,CAC5C,IAAMC,EAAcP,GAAsB,eAAeM,CAAM,EAC/D,OAAW,CAACE,EAAUC,CAAU,IAAK,OAAO,QAAQV,EAAU,EAC1D,GAAIU,EAAW,SAASF,CAAW,EAC/B,OAAOC,EAGf,MAAO,EACX,EACAR,GAAsB,eAAkBM,GAAW,CAC/C,OAAW,CAACI,EAAWC,CAAI,IAAK,OAAO,QAAQb,EAAY,EACvD,GAAIa,IAASL,EACT,OAAOI,EAEf,MAAO,EACX,ICjFA,IAAAE,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAA,SACI,KAAQ,CACJ,YACA,YACA,WACJ,EACA,KAAQ,CACJ,WACJ,EACA,KAAQ,CACJ,YACA,YACA,WACJ,EACA,KAAQ,CACJ,OACA,aACA,OACA,WACJ,EACA,QAAW,CACP,YACA,MACJ,EACA,OAAU,CACN,YACA,YACA,YACA,OACA,MACJ,EACA,QAAW,CACP,YACA,YACA,YACA,OACA,MACJ,EACA,OAAU,CACN,MACJ,EACA,IAAO,CACH,YACA,MACJ,EACA,QAAW,CACP,WACJ,EACA,QAAW,CACP,YACA,MACJ,EACA,OAAU,CACN,SACA,cACA,cACA,aACJ,EACA,GAAM,CACF,SACA,cACA,aACJ,EACA,QAAW,CACP,WACJ,EACA,UAAa,CACT,YACA,YACJ,CACJ,ICtEA,IAAAC,GAAAC,EAAAC,IAAA,cACA,IAAIC,GAAmBD,IAAQA,GAAK,iBAAoB,SAAUE,EAAK,CACnE,OAAQA,GAAOA,EAAI,WAAcA,EAAM,CAAE,QAAWA,CAAI,CAC5D,EACA,OAAO,eAAeF,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5D,IAAMG,GAAyBF,GAAgB,IAAsD,EAC/FG,GAAe,IACfC,GAAN,KAA2B,CACvB,aAAc,CACV,KAAK,MAASC,GAAc,CACxB,OAAW,CAACC,EAAOC,CAAc,IAAK,OAAO,QAAQL,GAAuB,OAAO,EAC/E,QAAWM,KAASD,EAEhB,GADcJ,GAAa,gBAAgBK,EAAOH,CAAS,EAG3D,OAAOC,EAGf,MAAO,EACX,CACJ,CACJ,EACAP,GAAQ,QAAUK,KCtBlB,IAAAK,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAA,SACI,CACI,MAAS,4BACT,KAAQ,YACR,SAAY,aACZ,IAAO,wCACP,SAAY,CACR,KAAQ,2BACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,cACR,SAAY,aACZ,IAAO,mCACP,SAAY,CACR,KAAQ,eACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,QACR,SAAY,aACZ,IAAO,gCACP,SAAY,CACR,KAAQ,aACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,cACR,SAAY,qBACZ,IAAO,GACP,SAAY,CACR,KAAQ,iCACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,aACR,SAAY,UACZ,IAAO,2BACP,SAAY,CACR,KAAQ,iBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,iCACT,KAAQ,gBACR,SAAY,aACZ,IAAO,iEACP,SAAY,CACR,KAAQ,iBACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,mBACR,SAAY,eACZ,IAAO,wDACP,SAAY,CACR,KAAQ,iBACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,oDACT,KAAQ,8BACR,SAAY,gBACZ,SAAY,CACR,KAAQ,sBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,iBACR,SAAY,UACZ,IAAO,qCACP,SAAY,CACR,KAAQ,UACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,YACZ,IAAO,qDACP,SAAY,CACR,KAAQ,iCACR,IAAO,oCACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,2CACP,SAAY,CACR,KAAQ,YACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,eACZ,IAAO,gDACP,SAAY,CACR,KAAQ,YACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,mBACZ,IAAO,mCACP,SAAY,CACR,KAAQ,cACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,wBACP,SAAY,CACR,KAAQ,SACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,WACR,SAAY,gBACZ,IAAO,6BACP,SAAY,CACR,KAAQ,WACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,wBACR,SAAY,UACZ,IAAO,sCACP,SAAY,CACR,KAAQ,gBACR,IAAO,6BACX,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,kBACR,SAAY,UACZ,IAAO,8CACP,SAAY,CACR,KAAQ,uBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,aACR,SAAY,aACZ,IAAO,GACP,SAAY,CACR,KAAQ,kBACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,sBACT,KAAQ,oBACR,SAAY,UACZ,IAAO,wCACP,SAAY,CACR,KAAQ,2BACR,IAAO,8BACX,CACJ,EACA,CACI,MAAS,kBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,2CACP,SAAY,CACR,KAAQ,mBACR,IAAO,6BACX,CACJ,EACA,CACI,MAAS,sDACT,KAAQ,eACR,SAAY,aACZ,IAAO,yCACP,SAAY,CACR,KAAQ,QACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,gBACR,IAAO,6BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,2EACT,KAAQ,UACR,SAAY,aACZ,IAAO,oCACP,SAAY,CACR,KAAQ,wBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,aACZ,IAAO,oCACP,SAAY,CACR,KAAQ,SACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,6BACP,SAAY,CACR,KAAQ,UACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,IAAO,2BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,IAAO,GACP,SAAY,eACZ,SAAY,CACR,KAAQ,iBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,2BACT,KAAQ,2BACR,SAAY,UACZ,SAAY,CACR,KAAQ,cACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,cACR,SAAY,aACZ,IAAO,iCACP,SAAY,CACR,KAAQ,eACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,gBACZ,IAAO,8BACP,SAAY,CACR,KAAQ,mBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,UACZ,IAAO,qCACP,SAAY,CACR,KAAQ,4CACR,IAAO,4CACX,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,kBACR,SAAY,aACZ,IAAO,kCACP,SAAY,CACR,KAAQ,aACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,IAAO,kCACP,SAAY,CACR,KAAQ,gBACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,gBACR,SAAY,UACZ,IAAO,8BACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,oCACP,SAAY,CACR,KAAQ,qBACR,IAAO,kBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,yBACR,SAAY,UACZ,IAAO,8CACP,SAAY,CACR,KAAQ,aACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,yBACR,SAAY,eACZ,IAAO,8BACP,SAAY,CACR,KAAQ,aACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,0BACT,KAAQ,2BACR,SAAY,eACZ,IAAO,0CACP,SAAY,CACR,KAAQ,aACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,wBACR,IAAO,yDACP,SAAY,aACZ,SAAY,CACR,KAAQ,oBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,IAAO,wBACP,SAAY,eACZ,SAAY,CACR,KAAQ,WACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,IAAO,2BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,yBACR,SAAY,UACZ,IAAO,iDACP,SAAY,CACR,KAAQ,+BACR,IAAO,gDACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,IAAO,sCACP,SAAY,eACZ,SAAY,CACR,KAAQ,UACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,IAAO,GACP,SAAY,UACZ,SAAY,CACR,KAAQ,WACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,oBACR,IAAO,+BACX,CACJ,EACA,CACI,MAAS,qBACT,KAAQ,OACR,SAAY,aACZ,IAAO,oDACP,SAAY,CACR,KAAQ,4BACR,IAAO,+BACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,aACZ,IAAO,GACP,SAAY,CACR,KAAQ,WACR,IAAO,iBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,WACR,SAAY,aACZ,IAAO,2CACP,SAAY,CACR,KAAQ,mBACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,sDACT,KAAQ,yBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,0BACR,IAAO,6BACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,UACZ,IAAO,yCACP,SAAY,CACR,KAAQ,eACR,IAAO,iBACX,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,iBACR,SAAY,aACZ,IAAO,qCACP,SAAY,CACR,KAAQ,aACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,eACR,SAAY,aACZ,IAAO,0CACP,SAAY,CACR,KAAQ,YACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,iBACR,SAAY,UACZ,SAAY,CACR,KAAQ,SACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,iBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,oCACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,gDACT,KAAQ,SACR,SAAY,UACZ,IAAO,iCACP,SAAY,CACR,KAAQ,uBACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,oBACR,SAAY,aACZ,IAAO,2BACP,SAAY,CACR,KAAQ,qBACR,IAAO,+BACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,eACR,IAAO,iBACX,CACJ,EACA,CACI,MAAS,0DACT,KAAQ,wBACR,SAAY,qBACZ,IAAO,kDACP,SAAY,CACR,KAAQ,WACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,IAAO,sBACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,IAAO,4BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,IAAO,4BACP,SAAY,eACZ,SAAY,CACR,KAAQ,4CACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,0BACT,KAAQ,SACR,IAAO,wBACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,IAAO,0BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,QACR,IAAO,yBACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,YACR,IAAO,oCACP,SAAY,eACZ,SAAY,CACR,KAAQ,YACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,yBACX,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,eACZ,IAAO,uBACX,EACA,CACI,MAAS,SACT,KAAQ,oBACR,SAAY,GACZ,IAAO,uCACP,SAAY,CACR,KAAQ,SACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,sBACT,KAAQ,YACR,SAAY,aACZ,IAAO,yDACP,SAAY,CACR,KAAQ,aACR,IAAO,mCACX,CACJ,EACA,CACI,MAAS,sBACT,KAAQ,sBACR,SAAY,UACZ,IAAO,iCACP,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,MACR,SAAY,aACZ,IAAO,iDACP,SAAY,CACR,KAAQ,eACR,IAAO,kBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,iBACR,SAAY,SAChB,EACA,CACI,MAAS,wBACT,KAAQ,wBACR,SAAY,UACZ,IAAO,iDACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,4BACR,SAAY,eACZ,IAAO,yDACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,4BACR,SAAY,eACZ,IAAO,GACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,yBACR,SAAY,UACZ,IAAO,qCACP,SAAY,CACR,KAAQ,cACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,sCACT,KAAQ,sCACR,SAAY,YACZ,IAAO,yDACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,gCACR,SAAY,eACZ,IAAO,sCACP,SAAY,CACR,KAAQ,cACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,oBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,qBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,kBACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,qBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,kBACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,kBACT,KAAQ,eACR,SAAY,UACZ,IAAO,iDACP,SAAY,CACR,KAAQ,mBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,cACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,uXACT,KAAQ,YACR,SAAY,aACZ,IAAO,iCACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,6DACP,SAAY,CACR,KAAQ,uBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,UACR,SAAY,UACZ,SAAY,CACR,KAAQ,eACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,eACZ,IAAO,yBACP,SAAY,CACR,KAAQ,eACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,oDACP,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,YACR,SAAY,cACZ,IAAO,2BACX,EACA,CACI,MAAS,SACT,KAAQ,oBACR,SAAY,UACZ,IAAO,iCACP,SAAY,CACR,KAAQ,wBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,SAAY,CACR,KAAQ,gBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,mBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,GACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,QACR,IAAO,oBACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,qBACR,SAAY,UACZ,IAAO,gCACP,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,aACR,SAAY,eACZ,IAAO,qDACP,SAAY,CACR,KAAQ,aACR,IAAO,oDACX,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,cACR,SAAY,aACZ,IAAO,8BACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,eACR,SAAY,qBACZ,IAAO,0BACP,SAAY,CACR,KAAQ,WACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,QACR,IAAO,oBACP,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,cACR,SAAY,aACZ,IAAO,6DACP,SAAY,CACR,KAAQ,gBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,iBACR,SAAY,qBACZ,IAAO,4CACP,SAAY,CACR,KAAQ,aACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,IAAO,oCACP,SAAY,cACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,IAAO,+CACP,SAAY,UACZ,SAAY,CACR,KAAQ,gBACR,IAAO,sCACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,eACR,SAAY,oBAChB,EACA,CACI,MAAS,cACT,KAAQ,eACR,SAAY,aACZ,IAAO,2CACP,SAAY,CACR,KAAQ,WACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,UACZ,IAAO,oCACP,SAAY,CACR,KAAQ,UACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,SAAY,UACZ,IAAO,+CACX,EACA,CACI,MAAS,aACT,KAAQ,cACR,SAAY,UACZ,IAAO,qBACP,SAAY,CACR,KAAQ,2BACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,WACR,SAAY,aACZ,IAAO,kCACP,SAAY,CACR,KAAQ,cACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,aACZ,IAAO,8BACP,SAAY,CACR,KAAQ,oBACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,aACZ,IAAO,iCACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,QACR,SAAY,eACZ,IAAO,+BACP,SAAY,CACR,KAAQ,QACR,IAAO,8BACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,UACZ,IAAO,sCACP,SAAY,CACR,KAAQ,sBACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,oBACR,SAAY,eACZ,IAAO,qBACP,SAAY,CACR,KAAQ,kCACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,iCACT,KAAQ,gBACR,SAAY,SAChB,EACA,CACI,MAAS,8DACT,KAAQ,sBACR,SAAY,aACZ,IAAO,GACP,SAAY,CACR,KAAQ,WACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,uBACT,KAAQ,YACR,SAAY,UACZ,IAAO,4CACP,SAAY,CACR,KAAQ,iBACR,IAAO,8BACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,IAAO,2BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,WACR,IAAO,0BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,kBACT,KAAQ,YACR,IAAO,2BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,iBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,OACR,SAAY,mBACZ,IAAO,iCACP,SAAY,CACR,KAAQ,OACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,UACZ,SAAY,CACR,KAAQ,SACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,SACZ,EACA,CACI,MAAS,iBACT,KAAQ,aACR,SAAY,aACZ,IAAO,qCACP,SAAY,CACR,KAAQ,SACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,kBACT,KAAQ,mBACR,SAAY,aACZ,IAAO,oDACP,SAAY,CACR,KAAQ,iBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,mBACR,SAAY,UACZ,IAAO,kCACP,SAAY,CACR,KAAQ,eACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,SAAY,UACZ,IAAO,+BACP,SAAY,CACR,KAAQ,oBACR,IAAO,8BACX,CACJ,EACA,CACI,MAAS,qBACT,KAAQ,aACR,SAAY,aACZ,IAAO,4BACP,SAAY,CACR,KAAQ,SACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,aACZ,IAAO,4DACP,SAAY,CACR,KAAQ,iBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,YACR,SAAY,eACZ,IAAO,qCACX,EACA,CACI,MAAS,eACT,KAAQ,qBACR,SAAY,eACZ,IAAO,+CACP,SAAY,CACR,KAAQ,qBACR,IAAO,kCACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,wBACZ,IAAO,wCACP,SAAY,CACR,KAAQ,SACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,uCACP,SAAY,CACR,KAAQ,UACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,uBACT,KAAQ,uBACR,SAAY,kBACZ,IAAO,gCACP,SAAY,CACR,KAAQ,cACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,SAAY,aACZ,IAAO,oCACP,SAAY,CACR,KAAQ,YACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,cACR,SAAY,eACZ,IAAO,GACP,SAAY,CACR,KAAQ,aACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,qBACT,KAAQ,qBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,QACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,QACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,0BACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,aACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,oBACR,SAAY,UACZ,IAAO,kCACP,SAAY,CACR,KAAQ,gBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,yBACP,SAAY,CACR,KAAQ,oBACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,IAAO,2BACX,EACA,CACI,MAAS,YACT,KAAQ,aACR,SAAY,qBACZ,IAAO,iCACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,sBACZ,IAAO,2BACP,SAAY,CACR,KAAQ,WACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,4CACP,SAAY,CACR,KAAQ,eACR,IAAO,iBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,iBACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,UACZ,IAAO,oCACP,SAAY,CACR,KAAQ,gBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,UACZ,IAAO,mBACX,EACA,CACI,MAAS,4BACT,KAAQ,4BACR,SAAY,UACZ,IAAO,4CACP,SAAY,CACR,KAAQ,qBACR,IAAO,gCACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,6BACP,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,cACR,SAAY,UACZ,IAAO,kCACP,SAAY,CACR,KAAQ,UACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,cACR,SAAY,GACZ,IAAO,GACP,SAAY,CACR,KAAQ,UACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,YACR,SAAY,UACZ,IAAO,yCACP,SAAY,CACR,KAAQ,aACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,iBACR,SAAY,UACZ,IAAO,oCACP,SAAY,CACR,KAAQ,WACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,EACX,EACA,CACI,MAAS,kBACT,KAAQ,oBACR,SAAY,gBACZ,IAAO,GACP,SAAY,CACR,KAAQ,mCACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,iDACT,KAAQ,aACR,SAAY,aACZ,IAAO,uCACP,SAAY,CACR,KAAQ,kBACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,mCACT,KAAQ,kBACR,SAAY,UACZ,IAAO,mCACP,SAAY,CACR,KAAQ,UACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,eACZ,IAAO,wCACP,SAAY,CACR,KAAQ,iBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,IAAO,0BACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,IAAO,2BACP,SAAY,cACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,kBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,6BACP,SAAY,CACR,KAAQ,eACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,qCACT,KAAQ,oBACR,SAAY,UACZ,IAAO,gCACP,SAAY,CACR,KAAQ,eACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,UACZ,IAAO,uCACX,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,eACZ,IAAO,iBACP,SAAY,CACR,KAAQ,gBACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,0BACT,KAAQ,WACR,SAAY,UACZ,IAAO,+BACP,SAAY,CACR,KAAQ,qBACR,IAAO,kBACX,CACJ,EACA,CACI,MAAS,iDACT,KAAQ,eACR,SAAY,aACZ,IAAO,gDACP,SAAY,CACR,KAAQ,aACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,cACR,SAAY,aACZ,IAAO,qCACP,SAAY,CACR,KAAQ,mBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,iBACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,SACR,SAAY,mBACZ,IAAO,qBACP,SAAY,CACR,KAAQ,SACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,YACZ,IAAO,gDACP,SAAY,CACR,KAAQ,WACR,IAAO,+CACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,eACZ,IAAO,6BACP,SAAY,CACR,KAAQ,aACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,iBACR,SAAY,eACZ,IAAO,GACP,SAAY,CACR,KAAQ,aACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,WACR,SAAY,UACZ,IAAO,4CACX,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,UACZ,IAAO,2BACP,SAAY,CACR,KAAQ,eACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,cACR,SAAY,UACZ,IAAO,EACX,EACA,CACI,MAAS,oBACT,KAAQ,sBACR,SAAY,UACZ,IAAO,EACX,EACA,CACI,MAAS,kBACT,KAAQ,oBACR,SAAY,UACZ,IAAO,EACX,EACA,CACI,MAAS,YACT,KAAQ,aACR,SAAY,aACZ,IAAO,sDACP,SAAY,CACR,KAAQ,eACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,gBACR,IAAO,gCACP,SAAY,YAChB,EACA,CACI,MAAS,cACT,KAAQ,cACR,IAAO,0CACX,EACA,CACI,MAAS,WACT,KAAQ,WACR,IAAO,oCACP,SAAY,sBACZ,SAAY,CACR,KAAQ,kBACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,iBACR,SAAY,aACZ,IAAO,qCACP,SAAY,CACR,KAAQ,eACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,IAAO,oBACP,SAAY,eACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,eACR,SAAY,cACZ,IAAO,0BACX,EACA,CACI,MAAS,iBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,gCACP,SAAY,CACR,KAAQ,kBACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,iDACP,SAAY,CACR,KAAQ,mBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,mBACR,SAAY,UACZ,IAAO,0BACP,SAAY,CACR,KAAQ,eACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,gBACR,SAAY,UACZ,IAAO,wBACP,SAAY,CACR,KAAQ,YACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,SAAY,UACZ,SAAY,CACR,KAAQ,UACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,qBACZ,IAAO,qDACP,SAAY,CACR,KAAQ,UACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,sBACT,KAAQ,sBACR,SAAY,eACZ,IAAO,0CACP,SAAY,CACR,KAAQ,aACR,IAAO,8BACX,CACJ,EACA,CACI,MAAS,+BACT,KAAQ,oBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,aACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,eACZ,IAAO,+BACP,SAAY,CACR,KAAQ,SACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,eACR,SAAY,eACZ,IAAO,GACP,SAAY,CACR,KAAQ,eACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,UACZ,IAAO,4CACP,SAAY,CACR,KAAQ,oBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,WACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,kBACR,SAAY,UACZ,IAAO,0BACP,SAAY,CACR,KAAQ,KACR,IAAO,gBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,6BACR,SAAY,UACZ,IAAO,0CACP,SAAY,CACR,KAAQ,wBACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,oBACR,SAAY,YACZ,IAAO,qCACP,SAAY,CACR,KAAQ,MACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,mBACR,SAAY,YACZ,IAAO,uCACP,SAAY,CACR,KAAQ,MACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,mBACR,SAAY,YACZ,IAAO,oCACP,SAAY,CACR,KAAQ,MACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,6BACT,KAAQ,gCACR,SAAY,YACZ,IAAO,mCACP,SAAY,CACR,KAAQ,MACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,uBACR,SAAY,YACZ,IAAO,iCACP,SAAY,CACR,KAAQ,MACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,wBACR,SAAY,YACZ,IAAO,kCACP,SAAY,CACR,KAAQ,MACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,IAAO,wCACP,SAAY,CACR,KAAQ,UACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,cACR,SAAY,eACZ,IAAO,6BACX,EACA,CACI,MAAS,kBACT,KAAQ,eACR,SAAY,aACZ,IAAO,2BACP,SAAY,CACR,KAAQ,YACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,oCACP,SAAY,CACR,KAAQ,aACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,0BACT,KAAQ,eACR,SAAY,eACZ,IAAO,oCACP,SAAY,CACR,KAAQ,eACR,IAAO,8BACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,gBACZ,IAAO,yBACP,SAAY,CACR,KAAQ,gBACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,aACZ,IAAO,6BACP,SAAY,CACR,KAAQ,SACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,gBACZ,IAAO,uBACP,SAAY,CACR,KAAQ,eACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,OACR,SAAY,aACZ,IAAO,2BACP,SAAY,CACR,KAAQ,OACR,IAAO,iBACX,CACJ,EACA,CACI,MAAS,gCACT,KAAQ,eACR,SAAY,aACZ,IAAO,sCACP,SAAY,CACR,KAAQ,cACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,mDACT,KAAQ,sBACR,SAAY,UACZ,IAAO,kEACP,SAAY,CACR,KAAQ,cACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,oBACR,SAAY,gBACZ,IAAO,2DACP,SAAY,CACR,KAAQ,cACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,sBACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,cACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,mBACR,SAAY,UACZ,IAAO,mQACP,SAAY,CACR,KAAQ,qBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,sYACT,KAAQ,aACR,SAAY,aACZ,IAAO,6BACP,SAAY,CACR,KAAQ,aACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,kBACT,KAAQ,gBACR,SAAY,aACZ,IAAO,gCACP,SAAY,CACR,KAAQ,QACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,aACR,SAAY,aACZ,IAAO,8CACP,SAAY,CACR,KAAQ,gBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,SACR,SAAY,UACZ,IAAO,mBACX,EACA,CACI,MAAS,oBACT,KAAQ,aACR,SAAY,aACZ,IAAO,6CACP,SAAY,CACR,KAAQ,SACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,QACR,SAAY,mBACZ,IAAO,+BACX,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,sBACP,SAAY,CACR,KAAQ,aACR,IAAO,kBACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,aACZ,IAAO,8BACP,SAAY,CACR,KAAQ,eACR,IAAO,6BACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,sBACR,SAAY,eACZ,IAAO,8CACP,SAAY,CACR,KAAQ,SACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,sDACT,KAAQ,eACR,SAAY,UACZ,IAAO,8DACP,SAAY,CACR,KAAQ,cACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,WACR,SAAY,UACZ,IAAO,GACP,SAAY,CACR,KAAQ,WACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,2BACT,KAAQ,WACR,SAAY,UACZ,IAAO,0CACP,SAAY,CACR,KAAQ,WACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,qDACT,KAAQ,YACR,IAAO,oCACP,SAAY,UACZ,SAAY,CACR,KAAQ,YACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,8BACR,SAAY,eACZ,IAAO,6CACP,SAAY,CACR,KAAQ,WACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,iBACR,SAAY,UACZ,IAAO,2BACP,SAAY,CACR,KAAQ,gBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,2BACR,SAAY,gBACZ,IAAO,wCACP,SAAY,CACR,KAAQ,gBACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,YACR,SAAY,UACZ,IAAO,oCACP,SAAY,CACR,KAAQ,YACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,qBACT,KAAQ,aACR,SAAY,eACZ,IAAO,wBACP,SAAY,CACR,KAAQ,aACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,oBACT,KAAQ,aACR,SAAY,eACZ,IAAO,GACP,SAAY,CACR,KAAQ,qBACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,oBACP,SAAY,CACR,KAAQ,cACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,OACT,KAAQ,MACR,SAAY,SAChB,EACA,CACI,MAAS,QACT,KAAQ,OACZ,EACA,CACI,MAAS,QACT,KAAQ,eACZ,EACA,CACI,MAAS,gBACT,KAAQ,QACZ,EACA,CACI,MAAS,WACT,KAAQ,UACZ,EACA,CACI,MAAS,qBACT,KAAQ,mBACZ,EACA,CACI,MAAS,UACT,KAAQ,SACZ,EACA,CACI,MAAS,UACT,KAAQ,SACZ,EACA,CACI,MAAS,YACT,KAAQ,WACZ,EACA,CACI,MAAS,SACT,KAAQ,QACZ,EACA,CACI,MAAS,SACT,KAAQ,QACZ,EACA,CACI,MAAS,aACT,KAAQ,YACZ,EACA,CACI,MAAS,eACT,KAAQ,cACZ,EACA,CACI,MAAS,0BACT,KAAQ,yBACZ,EACA,CACI,MAAS,YACT,KAAQ,WACZ,EACA,CACI,MAAS,qBACT,KAAQ,oBACZ,EACA,CACI,MAAS,yBACT,KAAQ,SACZ,EACA,CACI,MAAS,sCACT,KAAQ,gBACZ,EACA,CACI,MAAS,oEACT,KAAQ,cACZ,EACA,CACI,MAAS,4lBACT,KAAQ,aACZ,EACA,CACI,MAAS,UACT,KAAQ,aACR,SAAY,CACR,KAAQ,SACR,IAAO,mBACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,UACR,SAAY,CACR,KAAQ,UACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,mBACR,SAAY,SAChB,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,UACZ,IAAO,oCACP,SAAY,CACR,KAAQ,kBACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,6DACP,SAAY,CACR,KAAQ,oBACR,IAAO,8BACX,CACJ,EACA,CACI,MAAS,kCACT,KAAQ,YACR,SAAY,mBACZ,IAAO,6BACP,SAAY,CACR,KAAQ,mBACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,4BACT,KAAQ,4BACR,SAAY,UACZ,IAAO,iBACP,SAAY,CACR,KAAQ,gBACR,IAAO,gBACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,UACR,SAAY,aACZ,IAAO,2BACP,SAAY,CACR,KAAQ,eACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,uCACT,KAAQ,cACR,SAAY,aACZ,IAAO,2BACP,SAAY,CACR,KAAQ,mBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,gBACT,KAAQ,gBACR,SAAY,aACZ,IAAO,kCACP,SAAY,CACR,KAAQ,sBACR,IAAO,iCACX,CACJ,EACA,CACI,MAAS,OACT,KAAQ,OACR,SAAY,aACZ,IAAO,2BACP,SAAY,CACR,KAAQ,kBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,aACZ,IAAO,+BACP,SAAY,CACR,KAAQ,YACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,wBACT,KAAQ,UACR,IAAO,yBACP,SAAY,eACZ,SAAY,CACR,KAAQ,gBACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,WACR,SAAY,aACZ,IAAO,wBACP,SAAY,CACR,KAAQ,cACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,8BACT,KAAQ,cACR,SAAY,aACZ,IAAO,2BACP,SAAY,CACR,KAAQ,aACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,aACZ,IAAO,yBACP,SAAY,CACR,KAAQ,oBACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,aACZ,IAAO,yBACP,SAAY,CACR,KAAQ,iBACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,aACZ,IAAO,0BACP,SAAY,CACR,KAAQ,qDACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,SACR,SAAY,aACZ,IAAO,+BACP,SAAY,CACR,KAAQ,SACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,SACR,SAAY,eACZ,IAAO,+BACP,SAAY,CACR,KAAQ,SACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,OACT,KAAQ,OACR,SAAY,aACZ,IAAO,2CACP,SAAY,CACR,KAAQ,0CACR,IAAO,uCACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,aACZ,IAAO,qCACP,SAAY,CACR,KAAQ,mBACR,IAAO,8BACX,CACJ,EACA,CACI,MAAS,MACT,KAAQ,MACR,SAAY,aACZ,IAAO,kDACP,SAAY,CACR,KAAQ,yBACR,IAAO,6BACX,CACJ,EACA,CACI,MAAS,0BACT,KAAQ,0BACR,SAAY,aACZ,IAAO,yCACP,SAAY,CACR,KAAQ,mBACR,IAAO,6BACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,wBACP,SAAY,CACR,KAAQ,8BACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,kBACR,SAAY,UACZ,IAAO,2BACP,SAAY,CACR,KAAQ,iCACR,IAAO,oCACX,CACJ,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,UACZ,IAAO,kEACX,EACA,CACI,MAAS,YACT,KAAQ,aACR,SAAY,cACZ,IAAO,oBACX,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,cACZ,IAAO,2BACX,EACA,CACI,MAAS,YACT,KAAQ,YACR,SAAY,SAChB,EACA,CACI,MAAS,kBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,4BACX,EACA,CACI,MAAS,WACT,KAAQ,YACR,SAAY,UACZ,IAAO,+BACX,EACA,CACI,MAAS,iBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,+CACX,EACA,CACI,MAAS,mCACT,KAAQ,0BACR,SAAY,cACZ,IAAO,8CACX,EACA,CACI,MAAS,qBACT,KAAQ,uBACR,SAAY,UACZ,IAAO,yCACX,EACA,CACI,MAAS,wBACT,KAAQ,2BACR,SAAY,UACZ,IAAO,yBACX,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,UACZ,IAAO,6BACX,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,UACZ,IAAO,mDACP,SAAY,CACR,KAAQ,sDACR,IAAO,6BACX,CACJ,EACA,CACI,MAAS,SACT,KAAQ,SACR,SAAY,UACZ,IAAO,0CACP,SAAY,CACR,KAAQ,eACR,IAAO,yBACX,CACJ,EACA,CACI,MAAS,yBACT,KAAQ,YACR,SAAY,UACZ,IAAO,6BACP,SAAY,CACR,KAAQ,oBACR,IAAO,wBACX,CACJ,EACA,CACI,MAAS,oCACT,KAAQ,cACR,SAAY,eACZ,IAAO,qCACP,SAAY,CACR,KAAQ,iBACR,IAAO,iCACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,UACZ,IAAO,6BACP,SAAY,CACR,KAAQ,gBACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,eACZ,IAAO,wBACX,EACA,CACI,MAAS,0BACT,KAAQ,eACR,SAAY,eACZ,IAAO,wBACX,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,UACZ,IAAO,uCACP,SAAY,CACR,KAAQ,uBACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,WACR,SAAY,UACZ,IAAO,gDACP,SAAY,CACR,KAAQ,gBACR,IAAO,uBACX,CACJ,EACA,CACI,MAAS,mBACT,KAAQ,mBACR,SAAY,eACZ,IAAO,gCACX,EACA,CACI,MAAS,yBACT,KAAQ,sBACR,SAAY,gBACZ,IAAO,+BACX,EACA,CACI,MAAS,oBACT,KAAQ,oBACR,SAAY,UACZ,IAAO,8BACX,EACA,CACI,MAAS,aACT,KAAQ,SACR,SAAY,gBACZ,IAAO,sCACP,SAAY,CACR,KAAQ,aACR,IAAO,kBACX,CACJ,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,sCACP,SAAY,CACR,KAAQ,qBACR,IAAO,6BACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,UACZ,IAAO,uBACP,SAAY,CACR,KAAQ,UACR,IAAO,sBACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,SAAY,UACZ,IAAO,2BACP,SAAY,CACR,KAAQ,eACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,SAAY,UACZ,IAAO,wBACX,EACA,CACI,MAAS,gBACT,KAAQ,YACR,SAAY,UACZ,IAAO,6BACP,SAAY,CACR,KAAQ,mBACR,IAAO,+BACX,CACJ,EACA,CACI,MAAS,aACT,KAAQ,aACR,IAAO,yBACP,SAAY,UACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,WACT,KAAQ,WACR,IAAO,4BACP,SAAY,UACZ,SAAY,CACR,KAAQ,iBACR,IAAO,2BACX,CACJ,EACA,CACI,MAAS,eACT,KAAQ,eACR,IAAO,qCACP,SAAY,UACZ,SAAY,CACR,KAAQ,iBACR,IAAO,4BACX,CACJ,EACA,CACI,MAAS,UACT,KAAQ,UACR,IAAO,uBACP,SAAY,UACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,QACT,KAAQ,QACR,IAAO,4CACP,SAAY,UACZ,SAAY,CACR,KAAQ,GACR,IAAO,EACX,CACJ,EACA,CACI,MAAS,0BACT,KAAQ,UACR,SAAY,mBACZ,IAAO,sBACP,SAAY,CACR,KAAQ,eACR,IAAO,qBACX,CACJ,EACA,CACI,MAAS,kBACT,KAAQ,kBACR,SAAY,UACZ,IAAO,+BACP,SAAY,CACR,KAAQ,gCACR,IAAO,oBACX,CACJ,EACA,CACI,MAAS,iBACT,KAAQ,iBACR,SAAY,UACZ,IAAO,gCACP,SAAY,CACR,KAAQ,mBACR,IAAO,0BACX,CACJ,EACA,CACI,MAAS,qBACT,KAAQ,QACR,SAAY,UACZ,IAAO,mBACX,EACA,CACI,MAAS,iBACT,KAAQ,oBACR,SAAY,UACZ,IAAO,0BACX,EACA,CACI,MAAS,kBACT,KAAQ,mBACR,SAAY,UACZ,IAAO,0BACX,EACA,CACI,MAAS,cACT,KAAQ,cACR,SAAY,UACZ,IAAO,0BACX,EACA,CACI,MAAS,wBACT,KAAQ,YACR,SAAY,UACZ,IAAO,sBACX,EACA,CACI,MAAS,WACT,KAAQ,WACR,SAAY,UACZ,IAAO,oCACX,EACA,CACI,MAAS,sBACT,KAAQ,UACR,SAAY,UACZ,IAAO,kCACX,EACA,CACI,MAAS,YACT,KAAQ,WACR,SAAY,UACZ,IAAO,sCACX,EACA,CACI,MAAS,0BACT,KAAQ,cACR,SAAY,UACZ,IAAO,wBACX,EACA,CACI,MAAS,wBACT,KAAQ,YACR,SAAY,UACZ,IAAO,yBACX,EACA,CACI,MAAS,wBACT,KAAQ,YACR,SAAY,UACZ,IAAO,oBACX,EACA,CACI,MAAS,wBACT,KAAQ,YACR,SAAY,UACZ,IAAO,mBACX,EACA,CACI,MAAS,UACT,KAAQ,UACR,SAAY,UACZ,IAAO,yBACX,EACA,CACI,MAAS,qBACT,KAAQ,UACR,SAAY,UACZ,IAAO,6BACX,EACA,CACI,MAAS,8HACT,KAAQ,aACZ,CACJ,ICv8FA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cACA,IAAIC,GAAmBF,IAAQA,GAAK,iBAAoB,SAAUG,EAAK,CACnE,OAAQA,GAAOA,EAAI,WAAcA,EAAM,CAAE,QAAWA,CAAI,CAC5D,EACMC,GAAcF,GAAgB,IAA2C,EACzEG,GAAe,IACfC,GAAN,KAAgB,CACZ,aAAc,CACV,KAAK,MAASC,GAAc,CACxB,IAAIC,EAAIC,EAAIC,EAAIC,EAChB,QAAWC,KAAOR,GAAY,QAE1B,GADcC,GAAa,gBAAgBO,EAAI,MAAOL,CAAS,EAG/D,MAAO,CACH,KAAMK,EAAI,KACV,SAAUA,EAAI,UAAY,GAC1B,IAAKA,EAAI,KAAO,GAChB,SAAU,CACN,OAAQH,GAAMD,EAAKI,KAAS,MAAQJ,IAAO,OAAS,OAASA,EAAG,YAAc,MAAQC,IAAO,OAAS,OAASA,EAAG,OAAS,GAC3H,MAAOE,GAAMD,EAAKE,KAAS,MAAQF,IAAO,OAAS,OAASA,EAAG,YAAc,MAAQC,IAAO,OAAS,OAASA,EAAG,MAAQ,EAC7H,CACJ,EAEJ,OAAO,IACX,CACJ,CACJ,EACAV,GAAO,QAAUK,KC5BjB,IAAAO,GAAAC,EAAAC,IAAA,cACA,OAAO,eAAeA,GAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAC5DA,GAAQ,eAAiB,CAACC,EAAIC,EAAIC,IAAa,CAiB3C,IAAIC,EACAC,EACAC,EAAU,EAQRC,EAAK,CACP,IAAO,GACP,MAAS,GACT,EAAK,GACL,KAAQ,GACR,EAAK,GACL,GAAM,GACN,GAAM,GACN,IAAK,GACL,EAAK,EACL,GAAM,CACV,EAUMC,EAAeC,IACjBA,GAAK,GAAKA,GAAG,QAAQ,UAAW,GAAG,EACnCA,EAAIA,EAAE,QAAQ,aAAc,MAAM,EAAE,QAAQ,UAAW,GAAG,EACjDA,EAAE,OAAgBA,EAAE,MAAM,GAAG,EAAlB,CAAC,EAAE,GAMrBC,EAAcD,GACRA,EAAS,MAAMA,CAAC,EAAIF,EAAGE,CAAC,GAAK,GAAK,SAASA,EAAG,EAAE,EAA5C,EAKhB,IAHAR,EAAKO,EAAYP,CAAE,EACnBC,EAAKM,EAAYN,CAAE,EACnBG,EAAI,KAAK,IAAIJ,EAAG,OAAQC,EAAG,MAAM,EAC5BE,EAAI,EAAGA,EAAIC,EAAGD,IACf,GAAIH,EAAGG,CAAC,IAAMF,EAAGE,CAAC,GAKlB,GAFAH,EAAGG,CAAC,EAAIM,EAAWT,EAAGG,CAAC,CAAC,EACxBF,EAAGE,CAAC,EAAIM,EAAWR,EAAGE,CAAC,CAAC,EACpBH,EAAGG,CAAC,EAAIF,EAAGE,CAAC,EAAG,CACfE,EAAU,GACV,KACJ,SACSL,EAAGG,CAAC,EAAIF,EAAGE,CAAC,EAAG,CACpBE,EAAU,EACV,KACJ,EAEJ,GAAI,CAACH,EACD,OAAOG,EAKX,OAAQH,EAAU,CACd,IAAK,IACL,IAAK,KACD,OAAQG,EAAU,EACtB,IAAK,KACL,IAAK,KACD,OAAQA,GAAW,EACvB,IAAK,KACL,IAAK,KACD,OAAQA,GAAW,EACvB,IAAK,MACL,IAAK,IACL,IAAK,KACD,OAAQA,IAAY,EACxB,IAAK,KACL,IAAK,MACL,IAAK,KACD,OAAQA,IAAY,EACxB,IAAK,GACL,IAAK,IACL,IAAK,KACD,OAAQA,EAAU,EACtB,QACI,OAAO,IACf,CACJ,IC/GA,IAAAK,GAAAC,EAAA,CAAAC,GAAAC,KAAA,cACA,IAAIC,GAAmBF,IAAQA,GAAK,iBAAoB,SAAUG,EAAK,CACnE,OAAQA,GAAOA,EAAI,WAAcA,EAAM,CAAE,QAAWA,CAAI,CAC5D,EACMC,GAAWF,GAAgB,IAA2B,EACtDG,GAAWH,GAAgB,IAA2B,EACtDI,GAAqBJ,GAAgB,IAAqC,EAC1EK,GAAoBL,GAAgB,IAAoC,EACxEM,GAAYN,GAAgB,IAAmC,EAC/DO,GAAY,KACZC,EAAe,IACfC,GAAoB,KACpBC,GAAN,KAAqB,CACjB,YAAYC,EAAS,CAEjB,KAAK,QAAU,CACX,iBAAkB,GAClB,kBAAmB,CACvB,EACA,KAAK,MAASC,GAAc,CACxB,IAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EAAIC,EACxD,IAAMC,EAAS,CACX,OAAQ,KAAK,aAAa,MAAMf,CAAS,EACzC,GAAI,KAAK,sBAAsB,MAAMA,CAAS,EAC9C,OAAQ,KAAK,aAAa,MAAMA,CAAS,EACzC,IAAK,KAAK,QAAQ,iBAAmB,KAAO,KAAK,UAAU,MAAMA,CAAS,CAC9E,EACMgB,GAAUf,EAAKc,EAAO,MAAQ,MAAQd,IAAO,OAAS,OAASA,EAAG,KAClEgB,GAAaf,EAAKa,EAAO,MAAQ,MAAQb,IAAO,OAAS,OAASA,EAAG,QACrEgB,EAAW1B,GAAmB,QAAQ,YAAYwB,GAAU,EAAE,EACpE,GAAI,EAAG,GAAAb,EAAKY,EAAO,UAAY,MAAQZ,IAAO,SAAkBA,EAAG,OAAQ,CACvE,IAAMgB,GAAQ,KAAK,qBAAqB,MAAMnB,CAAS,EACnDmB,KACKJ,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,MAAQI,GAE9B,CAIA,MAAI,EAAG,GAAAf,EAAKW,EAAO,UAAY,MAAQX,IAAO,SAAkBA,EAAG,QAAU,CAAC,WAAY,UAAW,MAAO,KAAK,EAAE,SAASY,GAAU,EAAE,IAC/HD,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,MAAQ,SAStB,EAAG,GAAAV,EAAKU,EAAO,UAAY,MAAQV,IAAO,SAAkBA,EAAG,OAASa,IAAa,WAAatB,EAAa,gBAAgB,mBAAoBI,CAAS,IACxJJ,EAAa,gBAAgB,mCAAoCI,CAAS,GACrEe,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,cAEhBnB,EAAa,gBAAgB,4BAA6BI,CAAS,IACnEe,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,YAMzB,EAAG,GAAAT,EAAKS,EAAO,UAAY,MAAQT,IAAO,SAAkBA,EAAG,OAAS,KAAK,yBAAyBN,CAAS,GAAKJ,EAAa,gBAAgB,eAAgBI,CAAS,KACrKe,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,UAKrB,EAAG,GAAAR,EAAKQ,EAAO,UAAY,MAAQR,IAAO,SAAkBA,EAAG,OAAS,KAAK,yBAAyBP,CAAS,IAC1Ge,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,cAUrB,EAAG,GAAAP,EAAKO,EAAO,UAAY,MAAQP,IAAO,SAAkBA,EAAG,OAASQ,IAAW,WAAaC,IAAc,KAC1GpB,GAAkB,eAAeoB,EAAW,KAAK,IAAM,IAClDF,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,cAEhBlB,GAAkB,eAAeoB,EAAW,KAAK,GAAK,GAAKpB,GAAkB,eAAeoB,EAAW,KAAK,IAAM,KAClHF,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,aAMvBN,EAAKM,EAAO,UAAY,MAAQN,IAAO,OAAS,OAASA,EAAG,QAAU,iBAAmBS,IAAa,YACxGH,EAAO,OAAO,KAAO,cAWrB,EAAG,GAAAL,EAAKK,EAAO,UAAY,MAAQL,IAAO,SAAkBA,EAAG,OAC5D,KAAK,gBAAgBV,CAAS,IAC7BgB,IAAW,cACPA,IAAW,WACRnB,GAAkB,eAAeoB,EAAW,KAAK,GAAK,KAC5DF,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,UAKrBnB,EAAa,gBAAgB,iBAAkBI,CAAS,IACnDe,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,cAKrBnB,EAAa,gBAAgB,yBAA0BI,CAAS,IAC3De,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,cAKrB,EAAG,GAAAJ,EAAKI,EAAO,UAAY,MAAQJ,IAAO,SAAkBA,EAAG,OAAS,CAAC,OAAQ,mBAAmB,EAAE,WAAWC,EAAKG,EAAO,UAAY,MAAQH,IAAO,OAAS,OAASA,EAAG,OAAS,EAAE,IACnLG,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,gBAKUF,EAAKE,EAAO,UAAY,MAAQF,IAAO,OAAS,OAASA,EAAG,QAA5E,WACHjB,EAAa,gBAAgB,UAAWI,CAAS,IAA1D,MACA,KAAK,mBAAmBA,CAAS,IAE/Be,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,WAGrB,EAAG,GAAAD,EAAKC,EAAO,UAAY,MAAQD,IAAO,SAAkBA,EAAG,OAAS,KAAK,UAAUC,EAAQG,CAAQ,IAClGH,EAAO,SACRA,EAAO,OAAS,KAAK,mBAAmB,GAE5CA,EAAO,OAAO,KAAO,WAElBA,CACX,EACA,KAAK,yBAA4Bf,GACtBJ,EAAa,gBAAgB,8BAAgCI,CAAS,EAEjF,KAAK,yBAA4BA,GACtBJ,EAAa,gBAAgB,8BAAgCI,CAAS,EAEjF,KAAK,mBAAsBA,GAChBJ,EAAa,gBAAgB,8BAA+BI,CAAS,EAEhF,KAAK,UAAY,CAACe,EAAQG,IAClB,CAACH,EAAO,IAIR,KAAK,kBAAkBA,EAAO,MAAM,EAC7B,GAEJvB,GAAmB,QAAQ,kBAAkB,EAAE,SAAS0B,CAAQ,EAE3E,KAAK,kBAAqBE,GAAW,CACjC,IAAInB,EAAIC,EACR,OAAKkB,IAEInB,EAAKmB,KAAY,MAAQnB,IAAO,OAAS,OAASA,EAAG,QAAU,WAAaP,GAAU,QAAQ,qBAAqBQ,EAAKkB,KAAY,MAAQlB,IAAO,OAAS,OAASA,EAAG,IAAI,EAD1K,EAEf,EACA,KAAK,gBAAmBF,GACbJ,EAAa,gBAAgB,QAASI,CAAS,EAE1D,KAAK,mBAAqB,KAAO,CAC7B,KAAM,GACN,MAAO,GACP,MAAO,EACX,GACA,KAAK,QAAU,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG,KAAK,OAAO,EAAGD,CAAO,EACrE,KAAK,aAAe,IAAIT,GAAS,QAAQ,KAAK,OAAO,EACrD,KAAK,aAAe,IAAIC,GAAS,QACjC,KAAK,sBAAwB,IAAIC,GAAmB,QAAQ,KAAK,OAAO,EACxE,KAAK,qBAAuB,IAAIC,GAAkB,QAClD,KAAK,UAAY,IAAIE,EACzB,CACJ,EACAR,GAAO,QAAUW,KC/NjB,IAAAuB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,EAAC,SAASC,EAAMC,EAAS,CACrB,aAII,OAAO,QAAW,YAAc,OAAO,IACvC,OAAO,aAAc,CAAC,EAAGA,CAAO,EACzB,OAAOH,IAAY,SAC1BC,GAAO,QAAUE,EAAQ,EAEzBD,EAAK,WAAaC,EAAQ,CAElC,GAAEH,GAAM,UAAW,CACf,aACA,SAASI,EAAUC,EAAG,CAClB,MAAO,CAAC,MAAM,WAAWA,CAAC,CAAC,GAAK,SAASA,CAAC,CAC9C,CAEA,SAASC,EAAYC,EAAK,CACtB,OAAOA,EAAI,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAI,UAAU,CAAC,CACxD,CAEA,SAASC,EAAQC,EAAG,CAChB,OAAO,UAAW,CACd,OAAO,KAAKA,CAAC,CACjB,CACJ,CAEA,IAAIC,EAAe,CAAC,gBAAiB,SAAU,WAAY,YAAY,EACnEC,EAAe,CAAC,eAAgB,YAAY,EAC5CC,EAAc,CAAC,WAAY,eAAgB,QAAQ,EACnDC,EAAa,CAAC,MAAM,EACpBC,EAAc,CAAC,YAAY,EAE3BC,EAAQL,EAAa,OAAOC,EAAcC,EAAaC,EAAYC,CAAW,EAElF,SAASE,EAAWC,EAAK,CACrB,GAAKA,EACL,QAASC,EAAI,EAAGA,EAAIH,EAAM,OAAQG,IAC1BD,EAAIF,EAAMG,CAAC,CAAC,IAAM,QAClB,KAAK,MAAQZ,EAAYS,EAAMG,CAAC,CAAC,CAAC,EAAED,EAAIF,EAAMG,CAAC,CAAC,CAAC,CAG7D,CAEAF,EAAW,UAAY,CACnB,QAAS,UAAW,CAChB,OAAO,KAAK,IAChB,EACA,QAAS,SAASG,EAAG,CACjB,GAAI,OAAO,UAAU,SAAS,KAAKA,CAAC,IAAM,iBACtC,MAAM,IAAI,UAAU,uBAAuB,EAE/C,KAAK,KAAOA,CAChB,EAEA,cAAe,UAAW,CACtB,OAAO,KAAK,UAChB,EACA,cAAe,SAASA,EAAG,CACvB,GAAIA,aAAaH,EACb,KAAK,WAAaG,UACXA,aAAa,OACpB,KAAK,WAAa,IAAIH,EAAWG,CAAC,MAElC,OAAM,IAAI,UAAU,6CAA6C,CAEzE,EAEA,SAAU,UAAW,CACjB,IAAIC,EAAW,KAAK,YAAY,GAAK,GACjCC,EAAa,KAAK,cAAc,GAAK,GACrCC,EAAe,KAAK,gBAAgB,GAAK,GACzCC,EAAe,KAAK,gBAAgB,GAAK,GAC7C,OAAI,KAAK,UAAU,EACXH,EACO,WAAaA,EAAW,IAAMC,EAAa,IAAMC,EAAe,IAEpE,UAAYD,EAAa,IAAMC,EAEtCC,EACOA,EAAe,KAAOH,EAAW,IAAMC,EAAa,IAAMC,EAAe,IAE7EF,EAAW,IAAMC,EAAa,IAAMC,CAC/C,CACJ,EAEAN,EAAW,WAAa,SAAgCT,EAAK,CACzD,IAAIiB,EAAiBjB,EAAI,QAAQ,GAAG,EAChCkB,EAAelB,EAAI,YAAY,GAAG,EAElCgB,EAAehB,EAAI,UAAU,EAAGiB,CAAc,EAC9CE,EAAOnB,EAAI,UAAUiB,EAAiB,EAAGC,CAAY,EAAE,MAAM,GAAG,EAChEE,EAAiBpB,EAAI,UAAUkB,EAAe,CAAC,EAEnD,GAAIE,EAAe,QAAQ,GAAG,IAAM,EAChC,IAAIC,EAAQ,gCAAgC,KAAKD,EAAgB,EAAE,EAC/DP,GAAWQ,EAAM,CAAC,EAClBP,GAAaO,EAAM,CAAC,EACpBN,EAAeM,EAAM,CAAC,EAG9B,OAAO,IAAIZ,EAAW,CAClB,aAAcO,EACd,KAAMG,GAAQ,OACd,SAAUN,GACV,WAAYC,IAAc,OAC1B,aAAcC,GAAgB,MAClC,CAAC,CACL,EAEA,QAASJ,EAAI,EAAGA,EAAIR,EAAa,OAAQQ,IACrCF,EAAW,UAAU,MAAQV,EAAYI,EAAaQ,CAAC,CAAC,CAAC,EAAIV,EAAQE,EAAaQ,CAAC,CAAC,EACpFF,EAAW,UAAU,MAAQV,EAAYI,EAAaQ,CAAC,CAAC,CAAC,EAAK,SAAST,EAAG,CACtE,OAAO,SAASU,EAAG,CACf,KAAKV,CAAC,EAAI,QAAQU,CAAC,CACvB,CACJ,EAAGT,EAAaQ,CAAC,CAAC,EAGtB,QAASW,EAAI,EAAGA,EAAIlB,EAAa,OAAQkB,IACrCb,EAAW,UAAU,MAAQV,EAAYK,EAAakB,CAAC,CAAC,CAAC,EAAIrB,EAAQG,EAAakB,CAAC,CAAC,EACpFb,EAAW,UAAU,MAAQV,EAAYK,EAAakB,CAAC,CAAC,CAAC,EAAK,SAASpB,EAAG,CACtE,OAAO,SAASU,EAAG,CACf,GAAI,CAACf,EAAUe,CAAC,EACZ,MAAM,IAAI,UAAUV,EAAI,mBAAmB,EAE/C,KAAKA,CAAC,EAAI,OAAOU,CAAC,CACtB,CACJ,EAAGR,EAAakB,CAAC,CAAC,EAGtB,QAASC,EAAI,EAAGA,EAAIlB,EAAY,OAAQkB,IACpCd,EAAW,UAAU,MAAQV,EAAYM,EAAYkB,CAAC,CAAC,CAAC,EAAItB,EAAQI,EAAYkB,CAAC,CAAC,EAClFd,EAAW,UAAU,MAAQV,EAAYM,EAAYkB,CAAC,CAAC,CAAC,EAAK,SAASrB,EAAG,CACrE,OAAO,SAASU,EAAG,CACf,KAAKV,CAAC,EAAI,OAAOU,CAAC,CACtB,CACJ,EAAGP,EAAYkB,CAAC,CAAC,EAGrB,OAAOd,CACX,CAAC,IC9ID,IAAAe,GAAAC,EAAA,CAAAC,GAAAC,KAAA,EAAC,SAASC,EAAMC,EAAS,CACrB,aAII,OAAO,QAAW,YAAc,OAAO,IACvC,OAAO,qBAAsB,CAAC,YAAY,EAAGA,CAAO,EAC7C,OAAOH,IAAY,SAC1BC,GAAO,QAAUE,EAAQ,IAAqB,EAE9CD,EAAK,iBAAmBC,EAAQD,EAAK,UAAU,CAEvD,GAAEF,GAAM,SAA0BI,EAAY,CAC1C,aAEA,IAAIC,EAA8B,eAC9BC,EAAyB,iCACzBC,EAA4B,8BAEhC,MAAO,CAOH,MAAO,SAAiCC,EAAO,CAC3C,GAAI,OAAOA,EAAM,WAAe,KAAe,OAAOA,EAAM,iBAAiB,EAAM,IAC/E,OAAO,KAAK,WAAWA,CAAK,EACzB,GAAIA,EAAM,OAASA,EAAM,MAAM,MAAMF,CAAsB,EAC9D,OAAO,KAAK,YAAYE,CAAK,EAC1B,GAAIA,EAAM,MACb,OAAO,KAAK,gBAAgBA,CAAK,EAEjC,MAAM,IAAI,MAAM,iCAAiC,CAEzD,EAGA,gBAAiB,SAA2CC,EAAS,CAEjE,GAAIA,EAAQ,QAAQ,GAAG,IAAM,GACzB,MAAO,CAACA,CAAO,EAGnB,IAAIC,EAAS,+BACTC,EAAQD,EAAO,KAAKD,EAAQ,QAAQ,QAAS,EAAE,CAAC,EACpD,MAAO,CAACE,EAAM,CAAC,EAAGA,EAAM,CAAC,GAAK,OAAWA,EAAM,CAAC,GAAK,MAAS,CAClE,EAEA,YAAa,SAAuCH,EAAO,CACvD,IAAII,EAAWJ,EAAM,MAAM,MAAM;AAAA,CAAI,EAAE,OAAO,SAASK,EAAM,CACzD,MAAO,CAAC,CAACA,EAAK,MAAMP,CAAsB,CAC9C,EAAG,IAAI,EAEP,OAAOM,EAAS,IAAI,SAASC,EAAM,CAC3BA,EAAK,QAAQ,QAAQ,EAAI,KAEzBA,EAAOA,EAAK,QAAQ,aAAc,MAAM,EAAE,QAAQ,6BAA8B,EAAE,GAEtF,IAAIC,EAAgBD,EAAK,QAAQ,OAAQ,EAAE,EAAE,QAAQ,eAAgB,GAAG,EAAE,QAAQ,UAAW,EAAE,EAI3FE,EAAWD,EAAc,MAAM,YAAY,EAG/CA,EAAgBC,EAAWD,EAAc,QAAQC,EAAS,CAAC,EAAG,EAAE,EAAID,EAIpE,IAAIE,EAAgB,KAAK,gBAAgBD,EAAWA,EAAS,CAAC,EAAID,CAAa,EAC3EG,EAAeF,GAAYD,GAAiB,OAC5CI,EAAW,CAAC,OAAQ,aAAa,EAAE,QAAQF,EAAc,CAAC,CAAC,EAAI,GAAK,OAAYA,EAAc,CAAC,EAEnG,OAAO,IAAIZ,EAAW,CAClB,aAAca,EACd,SAAUC,EACV,WAAYF,EAAc,CAAC,EAC3B,aAAcA,EAAc,CAAC,EAC7B,OAAQH,CACZ,CAAC,CACL,EAAG,IAAI,CACX,EAEA,gBAAiB,SAA2CL,EAAO,CAC/D,IAAII,EAAWJ,EAAM,MAAM,MAAM;AAAA,CAAI,EAAE,OAAO,SAASK,EAAM,CACzD,MAAO,CAACA,EAAK,MAAMN,CAAyB,CAChD,EAAG,IAAI,EAEP,OAAOK,EAAS,IAAI,SAASC,EAAM,CAM/B,GAJIA,EAAK,QAAQ,SAAS,EAAI,KAC1BA,EAAOA,EAAK,QAAQ,mDAAoD,KAAK,GAG7EA,EAAK,QAAQ,GAAG,IAAM,IAAMA,EAAK,QAAQ,GAAG,IAAM,GAElD,OAAO,IAAIT,EAAW,CAClB,aAAcS,CAClB,CAAC,EAED,IAAIM,EAAoB,6BACpBC,EAAUP,EAAK,MAAMM,CAAiB,EACtCF,EAAeG,GAAWA,EAAQ,CAAC,EAAIA,EAAQ,CAAC,EAAI,OACpDJ,EAAgB,KAAK,gBAAgBH,EAAK,QAAQM,EAAmB,EAAE,CAAC,EAE5E,OAAO,IAAIf,EAAW,CAClB,aAAca,EACd,SAAUD,EAAc,CAAC,EACzB,WAAYA,EAAc,CAAC,EAC3B,aAAcA,EAAc,CAAC,EAC7B,OAAQH,CACZ,CAAC,CAET,EAAG,IAAI,CACX,EAEA,WAAY,SAAsCQ,EAAG,CACjD,MAAI,CAACA,EAAE,YAAeA,EAAE,QAAQ,QAAQ;AAAA,CAAI,EAAI,IAC5CA,EAAE,QAAQ,MAAM;AAAA,CAAI,EAAE,OAASA,EAAE,WAAW,MAAM;AAAA,CAAI,EAAE,OACjD,KAAK,YAAYA,CAAC,EACjBA,EAAE,MAGH,KAAK,aAAaA,CAAC,EAFnB,KAAK,aAAaA,CAAC,CAIlC,EAEA,YAAa,SAAuCA,EAAG,CAKnD,QAJIC,EAAS,oCACTC,EAAQF,EAAE,QAAQ,MAAM;AAAA,CAAI,EAC5BG,EAAS,CAAC,EAELC,EAAI,EAAGC,EAAMH,EAAM,OAAQE,EAAIC,EAAKD,GAAK,EAAG,CACjD,IAAIE,EAAQL,EAAO,KAAKC,EAAME,CAAC,CAAC,EAC5BE,GACAH,EAAO,KAAK,IAAIpB,EAAW,CACvB,SAAUuB,EAAM,CAAC,EACjB,WAAYA,EAAM,CAAC,EACnB,OAAQJ,EAAME,CAAC,CACnB,CAAC,CAAC,CAEV,CAEA,OAAOD,CACX,EAEA,aAAc,SAAwCH,EAAG,CAKrD,QAJIC,EAAS,6DACTC,EAAQF,EAAE,WAAW,MAAM;AAAA,CAAI,EAC/BG,EAAS,CAAC,EAELC,EAAI,EAAGC,EAAMH,EAAM,OAAQE,EAAIC,EAAKD,GAAK,EAAG,CACjD,IAAIE,EAAQL,EAAO,KAAKC,EAAME,CAAC,CAAC,EAC5BE,GACAH,EAAO,KACH,IAAIpB,EAAW,CACX,aAAcuB,EAAM,CAAC,GAAK,OAC1B,SAAUA,EAAM,CAAC,EACjB,WAAYA,EAAM,CAAC,EACnB,OAAQJ,EAAME,CAAC,CACnB,CAAC,CACL,CAER,CAEA,OAAOD,CACX,EAGA,aAAc,SAAwChB,EAAO,CACzD,IAAII,EAAWJ,EAAM,MAAM,MAAM;AAAA,CAAI,EAAE,OAAO,SAASK,EAAM,CACzD,MAAO,CAAC,CAACA,EAAK,MAAMR,CAA2B,GAAK,CAACQ,EAAK,MAAM,mBAAmB,CACvF,EAAG,IAAI,EAEP,OAAOD,EAAS,IAAI,SAASC,EAAM,CAC/B,IAAIe,EAASf,EAAK,MAAM,GAAG,EACvBG,EAAgB,KAAK,gBAAgBY,EAAO,IAAI,CAAC,EACjDC,EAAgBD,EAAO,MAAM,GAAK,GAClCX,EAAeY,EACd,QAAQ,iCAAkC,IAAI,EAC9C,QAAQ,aAAc,EAAE,GAAK,OAC9BC,EACAD,EAAa,MAAM,aAAa,IAChCC,EAAUD,EAAa,QAAQ,qBAAsB,IAAI,GAE7D,IAAIE,EAAQD,IAAY,QAAaA,IAAY,4BAC7C,OAAYA,EAAQ,MAAM,GAAG,EAEjC,OAAO,IAAI1B,EAAW,CAClB,aAAca,EACd,KAAMc,EACN,SAAUf,EAAc,CAAC,EACzB,WAAYA,EAAc,CAAC,EAC3B,aAAcA,EAAc,CAAC,EAC7B,OAAQH,CACZ,CAAC,CACL,EAAG,IAAI,CACX,CACJ,CACJ,CAAC,ICzMD,IAAAmB,GAAAC,EAAA,CAAAC,EAAAC,KAAA,KAAIC,GAAS,OAAO,KAAS,IAAc,KAAOF,EAC9CG,GAAY,UAAY,CAC5B,SAASC,GAAI,CACb,KAAK,MAAQ,GACb,KAAK,aAAeF,GAAO,YAC3B,CACA,OAAAE,EAAE,UAAYF,GACP,IAAIE,CACX,EAAG,GACF,SAASC,EAAM,CAEhB,IAAIC,EAAc,SAAUN,EAAS,CAEnC,IAAIO,EAAU,CACZ,aAAc,oBAAqBF,EACnC,SAAU,WAAYA,GAAQ,aAAc,OAC5C,KACE,eAAgBA,GAChB,SAAUA,GACT,UAAW,CACV,GAAI,CACF,WAAI,KACG,EACT,MAAE,CACA,MAAO,EACT,CACF,EAAG,EACL,SAAU,aAAcA,EACxB,YAAa,gBAAiBA,CAChC,EAEA,SAASG,EAAWC,EAAK,CACvB,OAAOA,GAAO,SAAS,UAAU,cAAcA,CAAG,CACpD,CAEA,GAAIF,EAAQ,YACV,IAAIG,EAAc,CAChB,qBACA,sBACA,6BACA,sBACA,uBACA,sBACA,uBACA,wBACA,uBACF,EAEIC,EACF,YAAY,QACZ,SAASF,EAAK,CACZ,OAAOA,GAAOC,EAAY,QAAQ,OAAO,UAAU,SAAS,KAAKD,CAAG,CAAC,EAAI,EAC3E,EAGJ,SAASG,EAAcC,EAAM,CAI3B,GAHI,OAAOA,GAAS,WAClBA,EAAO,OAAOA,CAAI,GAEhB,4BAA4B,KAAKA,CAAI,EACvC,MAAM,IAAI,UAAU,wCAAwC,EAE9D,OAAOA,EAAK,YAAY,CAC1B,CAEA,SAASC,EAAeC,EAAO,CAC7B,OAAI,OAAOA,GAAU,WACnBA,EAAQ,OAAOA,CAAK,GAEfA,CACT,CAGA,SAASC,EAAYC,EAAO,CAC1B,IAAIC,EAAW,CACb,KAAM,UAAW,CACf,IAAIH,EAAQE,EAAM,MAAM,EACxB,MAAO,CAAC,KAAMF,IAAU,OAAW,MAAOA,CAAK,CACjD,CACF,EAEA,OAAIR,EAAQ,WACVW,EAAS,OAAO,QAAQ,EAAI,UAAW,CACrC,OAAOA,CACT,GAGKA,CACT,CAEA,SAASC,EAAQC,EAAS,CACxB,KAAK,IAAM,CAAC,EAERA,aAAmBD,EACrBC,EAAQ,QAAQ,SAASL,EAAOF,EAAM,CACpC,KAAK,OAAOA,EAAME,CAAK,CACzB,EAAG,IAAI,EACE,MAAM,QAAQK,CAAO,EAC9BA,EAAQ,QAAQ,SAASC,EAAQ,CAC/B,KAAK,OAAOA,EAAO,CAAC,EAAGA,EAAO,CAAC,CAAC,CAClC,EAAG,IAAI,EACED,GACT,OAAO,oBAAoBA,CAAO,EAAE,QAAQ,SAASP,EAAM,CACzD,KAAK,OAAOA,EAAMO,EAAQP,CAAI,CAAC,CACjC,EAAG,IAAI,CAEX,CAEAM,EAAQ,UAAU,OAAS,SAASN,EAAME,EAAO,CAC/CF,EAAOD,EAAcC,CAAI,EACzBE,EAAQD,EAAeC,CAAK,EAC5B,IAAIO,EAAW,KAAK,IAAIT,CAAI,EAC5B,KAAK,IAAIA,CAAI,EAAIS,EAAWA,EAAW,KAAOP,EAAQA,CACxD,EAEAI,EAAQ,UAAU,OAAY,SAASN,EAAM,CAC3C,OAAO,KAAK,IAAID,EAAcC,CAAI,CAAC,CACrC,EAEAM,EAAQ,UAAU,IAAM,SAASN,EAAM,CACrC,OAAAA,EAAOD,EAAcC,CAAI,EAClB,KAAK,IAAIA,CAAI,EAAI,KAAK,IAAIA,CAAI,EAAI,IAC3C,EAEAM,EAAQ,UAAU,IAAM,SAASN,EAAM,CACrC,OAAO,KAAK,IAAI,eAAeD,EAAcC,CAAI,CAAC,CACpD,EAEAM,EAAQ,UAAU,IAAM,SAASN,EAAME,EAAO,CAC5C,KAAK,IAAIH,EAAcC,CAAI,CAAC,EAAIC,EAAeC,CAAK,CACtD,EAEAI,EAAQ,UAAU,QAAU,SAASI,EAAUC,EAAS,CACtD,QAASX,KAAQ,KAAK,IAChB,KAAK,IAAI,eAAeA,CAAI,GAC9BU,EAAS,KAAKC,EAAS,KAAK,IAAIX,CAAI,EAAGA,EAAM,IAAI,CAGvD,EAEAM,EAAQ,UAAU,KAAO,UAAW,CAClC,IAAIF,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASF,EAAOF,EAAM,CACjCI,EAAM,KAAKJ,CAAI,CACjB,CAAC,EACMG,EAAYC,CAAK,CAC1B,EAEAE,EAAQ,UAAU,OAAS,UAAW,CACpC,IAAIF,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASF,EAAO,CAC3BE,EAAM,KAAKF,CAAK,CAClB,CAAC,EACMC,EAAYC,CAAK,CAC1B,EAEAE,EAAQ,UAAU,QAAU,UAAW,CACrC,IAAIF,EAAQ,CAAC,EACb,YAAK,QAAQ,SAASF,EAAOF,EAAM,CACjCI,EAAM,KAAK,CAACJ,EAAME,CAAK,CAAC,CAC1B,CAAC,EACMC,EAAYC,CAAK,CAC1B,EAEIV,EAAQ,WACVY,EAAQ,UAAU,OAAO,QAAQ,EAAIA,EAAQ,UAAU,SAGzD,SAASM,EAASC,EAAM,CACtB,GAAIA,EAAK,SACP,OAAO,QAAQ,OAAO,IAAI,UAAU,cAAc,CAAC,EAErDA,EAAK,SAAW,EAClB,CAEA,SAASC,EAAgBC,EAAQ,CAC/B,OAAO,IAAI,QAAQ,SAASC,EAASC,EAAQ,CAC3CF,EAAO,OAAS,UAAW,CACzBC,EAAQD,EAAO,MAAM,CACvB,EACAA,EAAO,QAAU,UAAW,CAC1BE,EAAOF,EAAO,KAAK,CACrB,CACF,CAAC,CACH,CAEA,SAASG,EAAsBC,EAAM,CACnC,IAAIJ,EAAS,IAAI,WACbK,EAAUN,EAAgBC,CAAM,EACpC,OAAAA,EAAO,kBAAkBI,CAAI,EACtBC,CACT,CAEA,SAASC,EAAeF,EAAM,CAC5B,IAAIJ,EAAS,IAAI,WACbK,EAAUN,EAAgBC,CAAM,EACpC,OAAAA,EAAO,WAAWI,CAAI,EACfC,CACT,CAEA,SAASE,EAAsBC,EAAK,CAIlC,QAHIC,EAAO,IAAI,WAAWD,CAAG,EACzBE,EAAQ,IAAI,MAAMD,EAAK,MAAM,EAExBE,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAC/BD,EAAMC,CAAC,EAAI,OAAO,aAAaF,EAAKE,CAAC,CAAC,EAExC,OAAOD,EAAM,KAAK,EAAE,CACtB,CAEA,SAASE,EAAYJ,EAAK,CACxB,GAAIA,EAAI,MACN,OAAOA,EAAI,MAAM,CAAC,EAElB,IAAIC,EAAO,IAAI,WAAWD,EAAI,UAAU,EACxC,OAAAC,EAAK,IAAI,IAAI,WAAWD,CAAG,CAAC,EACrBC,EAAK,MAEhB,CAEA,SAASI,GAAO,CACd,YAAK,SAAW,GAEhB,KAAK,UAAY,SAASf,EAAM,CAC9B,KAAK,UAAYA,EACZA,EAEM,OAAOA,GAAS,SACzB,KAAK,UAAYA,EACRnB,EAAQ,MAAQ,KAAK,UAAU,cAAcmB,CAAI,EAC1D,KAAK,UAAYA,EACRnB,EAAQ,UAAY,SAAS,UAAU,cAAcmB,CAAI,EAClE,KAAK,cAAgBA,EACZnB,EAAQ,cAAgB,gBAAgB,UAAU,cAAcmB,CAAI,EAC7E,KAAK,UAAYA,EAAK,SAAS,EACtBnB,EAAQ,aAAeA,EAAQ,MAAQC,EAAWkB,CAAI,GAC/D,KAAK,iBAAmBc,EAAYd,EAAK,MAAM,EAE/C,KAAK,UAAY,IAAI,KAAK,CAAC,KAAK,gBAAgB,CAAC,GACxCnB,EAAQ,cAAgB,YAAY,UAAU,cAAcmB,CAAI,GAAKf,EAAkBe,CAAI,GACpG,KAAK,iBAAmBc,EAAYd,CAAI,EAExC,KAAK,UAAYA,EAAO,OAAO,UAAU,SAAS,KAAKA,CAAI,EAhB3D,KAAK,UAAY,GAmBd,KAAK,QAAQ,IAAI,cAAc,IAC9B,OAAOA,GAAS,SAClB,KAAK,QAAQ,IAAI,eAAgB,0BAA0B,EAClD,KAAK,WAAa,KAAK,UAAU,KAC1C,KAAK,QAAQ,IAAI,eAAgB,KAAK,UAAU,IAAI,EAC3CnB,EAAQ,cAAgB,gBAAgB,UAAU,cAAcmB,CAAI,GAC7E,KAAK,QAAQ,IAAI,eAAgB,iDAAiD,EAGxF,EAEInB,EAAQ,OACV,KAAK,KAAO,UAAW,CACrB,IAAImC,EAAWjB,EAAS,IAAI,EAC5B,GAAIiB,EACF,OAAOA,EAGT,GAAI,KAAK,UACP,OAAO,QAAQ,QAAQ,KAAK,SAAS,EAChC,GAAI,KAAK,iBACd,OAAO,QAAQ,QAAQ,IAAI,KAAK,CAAC,KAAK,gBAAgB,CAAC,CAAC,EACnD,GAAI,KAAK,cACd,MAAM,IAAI,MAAM,sCAAsC,EAEtD,OAAO,QAAQ,QAAQ,IAAI,KAAK,CAAC,KAAK,SAAS,CAAC,CAAC,CAErD,EAEA,KAAK,YAAc,UAAW,CAC5B,OAAI,KAAK,iBACAjB,EAAS,IAAI,GAAK,QAAQ,QAAQ,KAAK,gBAAgB,EAEvD,KAAK,KAAK,EAAE,KAAKM,CAAqB,CAEjD,GAGF,KAAK,KAAO,UAAW,CACrB,IAAIW,EAAWjB,EAAS,IAAI,EAC5B,GAAIiB,EACF,OAAOA,EAGT,GAAI,KAAK,UACP,OAAOR,EAAe,KAAK,SAAS,EAC/B,GAAI,KAAK,iBACd,OAAO,QAAQ,QAAQC,EAAsB,KAAK,gBAAgB,CAAC,EAC9D,GAAI,KAAK,cACd,MAAM,IAAI,MAAM,sCAAsC,EAEtD,OAAO,QAAQ,QAAQ,KAAK,SAAS,CAEzC,EAEI5B,EAAQ,WACV,KAAK,SAAW,UAAW,CACzB,OAAO,KAAK,KAAK,EAAE,KAAKoC,EAAM,CAChC,GAGF,KAAK,KAAO,UAAW,CACrB,OAAO,KAAK,KAAK,EAAE,KAAK,KAAK,KAAK,CACpC,EAEO,IACT,CAGA,IAAIC,EAAU,CAAC,SAAU,MAAO,OAAQ,UAAW,OAAQ,KAAK,EAEhE,SAASC,EAAgBC,EAAQ,CAC/B,IAAIC,EAAUD,EAAO,YAAY,EACjC,OAAOF,EAAQ,QAAQG,CAAO,EAAI,GAAKA,EAAUD,CACnD,CAEA,SAASE,EAAQC,EAAOC,EAAS,CAC/BA,EAAUA,GAAW,CAAC,EACtB,IAAIxB,EAAOwB,EAAQ,KAEnB,GAAID,aAAiBD,EAAS,CAC5B,GAAIC,EAAM,SACR,MAAM,IAAI,UAAU,cAAc,EAEpC,KAAK,IAAMA,EAAM,IACjB,KAAK,YAAcA,EAAM,YACpBC,EAAQ,UACX,KAAK,QAAU,IAAI/B,EAAQ8B,EAAM,OAAO,GAE1C,KAAK,OAASA,EAAM,OACpB,KAAK,KAAOA,EAAM,KAClB,KAAK,OAASA,EAAM,OAChB,CAACvB,GAAQuB,EAAM,WAAa,OAC9BvB,EAAOuB,EAAM,UACbA,EAAM,SAAW,GAErB,MACE,KAAK,IAAM,OAAOA,CAAK,EAYzB,GATA,KAAK,YAAcC,EAAQ,aAAe,KAAK,aAAe,eAC1DA,EAAQ,SAAW,CAAC,KAAK,WAC3B,KAAK,QAAU,IAAI/B,EAAQ+B,EAAQ,OAAO,GAE5C,KAAK,OAASL,EAAgBK,EAAQ,QAAU,KAAK,QAAU,KAAK,EACpE,KAAK,KAAOA,EAAQ,MAAQ,KAAK,MAAQ,KACzC,KAAK,OAASA,EAAQ,QAAU,KAAK,OACrC,KAAK,SAAW,MAEX,KAAK,SAAW,OAAS,KAAK,SAAW,SAAWxB,EACvD,MAAM,IAAI,UAAU,2CAA2C,EAEjE,KAAK,UAAUA,CAAI,CACrB,CAEAsB,EAAQ,UAAU,MAAQ,UAAW,CACnC,OAAO,IAAIA,EAAQ,KAAM,CAAC,KAAM,KAAK,SAAS,CAAC,CACjD,EAEA,SAASL,GAAOjB,EAAM,CACpB,IAAIyB,EAAO,IAAI,SACf,OAAAzB,EACG,KAAK,EACL,MAAM,GAAG,EACT,QAAQ,SAAS0B,EAAO,CACvB,GAAIA,EAAO,CACT,IAAIC,EAAQD,EAAM,MAAM,GAAG,EACvBvC,EAAOwC,EAAM,MAAM,EAAE,QAAQ,MAAO,GAAG,EACvCtC,EAAQsC,EAAM,KAAK,GAAG,EAAE,QAAQ,MAAO,GAAG,EAC9CF,EAAK,OAAO,mBAAmBtC,CAAI,EAAG,mBAAmBE,CAAK,CAAC,CACjE,CACF,CAAC,EACIoC,CACT,CAEA,SAASG,GAAaC,EAAY,CAChC,IAAInC,EAAU,IAAID,EAGdqC,EAAsBD,EAAW,QAAQ,eAAgB,GAAG,EAChE,OAAAC,EAAoB,MAAM,OAAO,EAAE,QAAQ,SAASC,EAAM,CACxD,IAAIC,EAAQD,EAAK,MAAM,GAAG,EACtBE,EAAMD,EAAM,MAAM,EAAE,KAAK,EAC7B,GAAIC,EAAK,CACP,IAAI5C,GAAQ2C,EAAM,KAAK,GAAG,EAAE,KAAK,EACjCtC,EAAQ,OAAOuC,EAAK5C,EAAK,CAC3B,CACF,CAAC,EACMK,CACT,CAEAqB,EAAK,KAAKO,EAAQ,SAAS,EAE3B,SAASY,EAASC,EAAUX,EAAS,CAC9BA,IACHA,EAAU,CAAC,GAGb,KAAK,KAAO,UACZ,KAAK,OAASA,EAAQ,SAAW,OAAY,IAAMA,EAAQ,OAC3D,KAAK,GAAK,KAAK,QAAU,KAAO,KAAK,OAAS,IAC9C,KAAK,WAAa,eAAgBA,EAAUA,EAAQ,WAAa,KACjE,KAAK,QAAU,IAAI/B,EAAQ+B,EAAQ,OAAO,EAC1C,KAAK,IAAMA,EAAQ,KAAO,GAC1B,KAAK,UAAUW,CAAQ,CACzB,CAEApB,EAAK,KAAKmB,EAAS,SAAS,EAE5BA,EAAS,UAAU,MAAQ,UAAW,CACpC,OAAO,IAAIA,EAAS,KAAK,UAAW,CAClC,OAAQ,KAAK,OACb,WAAY,KAAK,WACjB,QAAS,IAAIzC,EAAQ,KAAK,OAAO,EACjC,IAAK,KAAK,GACZ,CAAC,CACH,EAEAyC,EAAS,MAAQ,UAAW,CAC1B,IAAIE,EAAW,IAAIF,EAAS,KAAM,CAAC,OAAQ,EAAG,WAAY,EAAE,CAAC,EAC7D,OAAAE,EAAS,KAAO,QACTA,CACT,EAEA,IAAIC,GAAmB,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,EAE/CH,EAAS,SAAW,SAASI,EAAKC,EAAQ,CACxC,GAAIF,GAAiB,QAAQE,CAAM,IAAM,GACvC,MAAM,IAAI,WAAW,qBAAqB,EAG5C,OAAO,IAAIL,EAAS,KAAM,CAAC,OAAQK,EAAQ,QAAS,CAAC,SAAUD,CAAG,CAAC,CAAC,CACtE,EAEAhE,EAAQ,aAAeK,EAAK,aAC5B,GAAI,CACF,IAAIL,EAAQ,YACd,MAAE,CACAA,EAAQ,aAAe,SAASkE,EAASrD,EAAM,CAC7C,KAAK,QAAUqD,EACf,KAAK,KAAOrD,EACZ,IAAIsD,EAAQ,MAAMD,CAAO,EACzB,KAAK,MAAQC,EAAM,KACrB,EACAnE,EAAQ,aAAa,UAAY,OAAO,OAAO,MAAM,SAAS,EAC9DA,EAAQ,aAAa,UAAU,YAAcA,EAAQ,YACvD,CAEA,SAASoE,GAAMnB,EAAOoB,EAAM,CAC1B,OAAO,IAAI,QAAQ,SAASxC,EAASC,EAAQ,CAC3C,IAAIwC,EAAU,IAAItB,EAAQC,EAAOoB,CAAI,EAErC,GAAIC,EAAQ,QAAUA,EAAQ,OAAO,QACnC,OAAOxC,EAAO,IAAI9B,EAAQ,aAAa,UAAW,YAAY,CAAC,EAGjE,IAAIuE,EAAM,IAAI,eAEd,SAASC,IAAW,CAClBD,EAAI,MAAM,CACZ,CAEAA,EAAI,OAAS,UAAW,CACtB,IAAIrB,GAAU,CACZ,OAAQqB,EAAI,OACZ,WAAYA,EAAI,WAChB,QAASjB,GAAaiB,EAAI,sBAAsB,GAAK,EAAE,CACzD,EACArB,GAAQ,IAAM,gBAAiBqB,EAAMA,EAAI,YAAcrB,GAAQ,QAAQ,IAAI,eAAe,EAC1F,IAAIxB,GAAO,aAAc6C,EAAMA,EAAI,SAAWA,EAAI,aAClD1C,EAAQ,IAAI+B,EAASlC,GAAMwB,EAAO,CAAC,CACrC,EAEAqB,EAAI,QAAU,UAAW,CACvBzC,EAAO,IAAI,UAAU,wBAAwB,CAAC,CAChD,EAEAyC,EAAI,UAAY,UAAW,CACzBzC,EAAO,IAAI,UAAU,wBAAwB,CAAC,CAChD,EAEAyC,EAAI,QAAU,UAAW,CACvBzC,EAAO,IAAI9B,EAAQ,aAAa,UAAW,YAAY,CAAC,CAC1D,EAEAuE,EAAI,KAAKD,EAAQ,OAAQA,EAAQ,IAAK,EAAI,EAEtCA,EAAQ,cAAgB,UAC1BC,EAAI,gBAAkB,GACbD,EAAQ,cAAgB,SACjCC,EAAI,gBAAkB,IAGpB,iBAAkBA,GAAOhE,EAAQ,OACnCgE,EAAI,aAAe,QAGrBD,EAAQ,QAAQ,QAAQ,SAASvD,GAAOF,GAAM,CAC5C0D,EAAI,iBAAiB1D,GAAME,EAAK,CAClC,CAAC,EAEGuD,EAAQ,SACVA,EAAQ,OAAO,iBAAiB,QAASE,EAAQ,EAEjDD,EAAI,mBAAqB,UAAW,CAE9BA,EAAI,aAAe,GACrBD,EAAQ,OAAO,oBAAoB,QAASE,EAAQ,CAExD,GAGFD,EAAI,KAAK,OAAOD,EAAQ,UAAc,IAAc,KAAOA,EAAQ,SAAS,CAC9E,CAAC,CACH,CAEA,OAAAF,GAAM,SAAW,GAEZ/D,EAAK,QACRA,EAAK,MAAQ+D,GACb/D,EAAK,QAAUc,EACfd,EAAK,QAAU2C,EACf3C,EAAK,SAAWuD,GAGlB5D,EAAQ,QAAUmB,EAClBnB,EAAQ,QAAUgD,EAClBhD,EAAQ,SAAW4D,EACnB5D,EAAQ,MAAQoE,GAEhB,OAAO,eAAepE,EAAS,aAAc,CAAE,MAAO,EAAK,CAAC,EAErDA,CAET,EAAG,CAAC,CAAC,CACL,GAAGG,EAAQ,EACXA,GAAS,MAAM,SAAW,GAE1B,OAAOA,GAAS,MAAM,SAGtB,IAAIsE,GAAMtE,GACVH,EAAUyE,GAAI,MACdzE,EAAQ,QAAUyE,GAAI,MACtBzE,EAAQ,MAAQyE,GAAI,MACpBzE,EAAQ,QAAUyE,GAAI,QACtBzE,EAAQ,QAAUyE,GAAI,QACtBzE,EAAQ,SAAWyE,GAAI,SACvBxE,GAAO,QAAUD,ICziBjB,IAAA0E,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CACA,SAASC,GAAW,CAAC,CAGrBA,EAAS,UAAU,MAAQ,UAAW,CAClC,KAAK,MAAQ,KACb,KAAK,KAAO,CAChB,EAGAA,EAAS,UAAU,KAAO,SAASC,EAAM,CAGrC,QAFIC,EAAM,KAAK,MAETA,IAAQ,MAAM,CAChB,IAAIC,EAAI,KAAK,YAAYF,EAAMC,EAAI,IAAI,EACvC,GAAGC,IAAM,EACL,OAAOD,EAAI,KAGXA,EAAMA,EAAI,UAAUC,EAAI,CAAC,CAEjC,CAEA,OAAO,IACX,EAGAH,EAAS,UAAU,SAAW,SAASC,EAAM,CAIzC,QAHIC,EAAM,KAAK,MACXE,EAAO,KAAK,SAAS,EAEnBF,IAAQ,MAAM,CAChB,IAAIC,EAAI,KAAK,YAAYF,EAAMC,EAAI,IAAI,EACvC,GAAGC,IAAM,EACL,OAAAC,EAAK,QAAUF,EACRE,EAGPA,EAAK,WAAW,KAAKF,CAAG,EACxBA,EAAMA,EAAI,UAAUC,EAAI,CAAC,CAEjC,CAEA,OAAO,IACX,EAGAH,EAAS,UAAU,WAAa,SAASK,EAAM,CAK3C,QAJIC,EAAM,KAAK,MACXF,EAAO,KAAK,SAAS,EACrBG,EAAM,KAAK,YAETD,IAAQ,MAAM,CAChB,IAAIH,EAAII,EAAIF,EAAMC,EAAI,IAAI,EAC1B,GAAGH,IAAM,EACL,OAAAC,EAAK,QAAUE,EACRF,EAEXA,EAAK,WAAW,KAAKE,CAAG,EACxBA,EAAMA,EAAI,UAAUH,EAAI,CAAC,CAC7B,CAEA,QAAQK,EAAEJ,EAAK,WAAW,OAAS,EAAGI,GAAK,EAAG,EAAEA,EAE5C,GADAF,EAAMF,EAAK,WAAWI,CAAC,EACpBD,EAAIF,EAAMC,EAAI,IAAI,EAAI,EACrB,OAAAF,EAAK,QAAUE,EACfF,EAAK,WAAW,OAASI,EAClBJ,EAIf,OAAAA,EAAK,WAAW,OAAS,EAClBA,CACX,EAGAJ,EAAS,UAAU,WAAa,SAASK,EAAM,CAI3C,QAHID,EAAO,KAAK,WAAWC,CAAI,EAC3BE,EAAM,KAAK,YAETH,EAAK,KAAK,IAAM,MAAQG,EAAIH,EAAK,KAAK,EAAGC,CAAI,IAAM,GACrDD,EAAK,KAAK,EAGd,OAAOA,CACX,EAGAJ,EAAS,UAAU,IAAM,UAAW,CAChC,IAAIE,EAAM,KAAK,MACf,GAAGA,IAAQ,KACP,OAAO,KAGX,KAAMA,EAAI,OAAS,MACfA,EAAMA,EAAI,KAGd,OAAOA,EAAI,IACf,EAGAF,EAAS,UAAU,IAAM,UAAW,CAChC,IAAIE,EAAM,KAAK,MACf,GAAGA,IAAQ,KACP,OAAO,KAGX,KAAMA,EAAI,QAAU,MAChBA,EAAMA,EAAI,MAGd,OAAOA,EAAI,IACf,EAIAF,EAAS,UAAU,SAAW,UAAW,CACrC,OAAO,IAAIS,GAAS,IAAI,CAC5B,EAGAT,EAAS,UAAU,KAAO,SAASU,EAAI,CAEnC,QADIC,EAAG,KAAK,SAAS,EAAGV,GACjBA,EAAOU,EAAG,KAAK,KAAO,MACzB,GAAGD,EAAGT,CAAI,IAAM,GACZ,MAGZ,EAGAD,EAAS,UAAU,MAAQ,SAASU,EAAI,CAEpC,QADIC,EAAG,KAAK,SAAS,EAAGV,GACjBA,EAAOU,EAAG,KAAK,KAAO,MACzB,GAAGD,EAAGT,CAAI,IAAM,GACZ,MAGZ,EAGA,SAASQ,GAASG,EAAM,CACpB,KAAK,MAAQA,EACb,KAAK,WAAa,CAAC,EACnB,KAAK,QAAU,IACnB,CAEAH,GAAS,UAAU,KAAO,UAAW,CACjC,OAAO,KAAK,UAAY,KAAO,KAAK,QAAQ,KAAO,IACvD,EAIAA,GAAS,UAAU,KAAO,UAAW,CACjC,GAAG,KAAK,UAAY,KAAM,CACtB,IAAII,EAAO,KAAK,MAAM,MACnBA,IAAS,MACR,KAAK,SAASA,CAAI,CAE1B,SAEO,KAAK,QAAQ,QAAU,KAAM,CAG5B,IAAIC,EACJ,EAEI,IADAA,EAAO,KAAK,QACT,KAAK,WAAW,OACf,KAAK,QAAU,KAAK,WAAW,IAAI,MAElC,CACD,KAAK,QAAU,KACf,KACJ,OACI,KAAK,QAAQ,QAAUA,EACnC,MAGI,KAAK,WAAW,KAAK,KAAK,OAAO,EACjC,KAAK,SAAS,KAAK,QAAQ,KAAK,EAGxC,OAAO,KAAK,UAAY,KAAO,KAAK,QAAQ,KAAO,IACvD,EAIAL,GAAS,UAAU,KAAO,UAAW,CACjC,GAAG,KAAK,UAAY,KAAM,CACtB,IAAII,EAAO,KAAK,MAAM,MACnBA,IAAS,MACR,KAAK,SAASA,CAAI,CAE1B,SAEO,KAAK,QAAQ,OAAS,KAAM,CAC3B,IAAIC,EACJ,EAEI,IADAA,EAAO,KAAK,QACT,KAAK,WAAW,OACf,KAAK,QAAU,KAAK,WAAW,IAAI,MAElC,CACD,KAAK,QAAU,KACf,KACJ,OACI,KAAK,QAAQ,OAASA,EAClC,MAEI,KAAK,WAAW,KAAK,KAAK,OAAO,EACjC,KAAK,SAAS,KAAK,QAAQ,IAAI,EAGvC,OAAO,KAAK,UAAY,KAAO,KAAK,QAAQ,KAAO,IACvD,EAEAL,GAAS,UAAU,SAAW,SAASM,EAAO,CAC1C,KAAMA,EAAM,OAAS,MACjB,KAAK,WAAW,KAAKA,CAAK,EAC1BA,EAAQA,EAAM,KAElB,KAAK,QAAUA,CACnB,EAEAN,GAAS,UAAU,SAAW,SAASM,EAAO,CAC1C,KAAMA,EAAM,QAAU,MAClB,KAAK,WAAW,KAAKA,CAAK,EAC1BA,EAAQA,EAAM,MAElB,KAAK,QAAUA,CACnB,EAEAhB,GAAO,QAAUC,ICzOjB,IAAAgB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CACA,IAAIC,GAAW,KAEf,SAASC,GAAKC,EAAM,CAChB,KAAK,KAAOA,EACZ,KAAK,KAAO,KACZ,KAAK,MAAQ,KACb,KAAK,IAAM,EACf,CAEAD,GAAK,UAAU,UAAY,SAASE,EAAK,CACrC,OAAOA,EAAM,KAAK,MAAQ,KAAK,IACnC,EAEAF,GAAK,UAAU,UAAY,SAASE,EAAKC,EAAK,CACvCD,EACC,KAAK,MAAQC,EAGb,KAAK,KAAOA,CAEpB,EAEA,SAASC,GAAOC,EAAY,CACxB,KAAK,MAAQ,KACb,KAAK,YAAcA,EACnB,KAAK,KAAO,CAChB,CAEAD,GAAO,UAAY,IAAIL,GAGvBK,GAAO,UAAU,OAAS,SAASH,EAAM,CACrC,IAAIK,EAAM,GAEV,GAAG,KAAK,QAAU,KAEd,KAAK,MAAQ,IAAIN,GAAKC,CAAI,EAC1BK,EAAM,GACN,KAAK,WAEJ,CACD,IAAIC,EAAO,IAAIP,GAAK,MAAS,EAEzBE,EAAM,EACNM,EAAO,EAGPC,EAAK,KACLC,EAAMH,EACNI,EAAI,KACJC,EAAO,KAAK,MAIhB,IAHAF,EAAI,MAAQ,KAAK,QAGL,CAgBR,GAfGE,IAAS,MAERA,EAAO,IAAIZ,GAAKC,CAAI,EACpBU,EAAE,UAAUT,EAAKU,CAAI,EACrBN,EAAM,GACN,KAAK,QAEDO,EAAOD,EAAK,IAAI,GAAKC,EAAOD,EAAK,KAAK,IAE1CA,EAAK,IAAM,GACXA,EAAK,KAAK,IAAM,GAChBA,EAAK,MAAM,IAAM,IAIlBC,EAAOD,CAAI,GAAKC,EAAOF,CAAC,EAAG,CAC1B,IAAIG,EAAOJ,EAAI,QAAUD,EAEtBG,IAASD,EAAE,UAAUH,CAAI,EACxBE,EAAI,UAAUI,EAAMC,GAAcN,EAAI,CAACD,CAAI,CAAC,EAG5CE,EAAI,UAAUI,EAAME,GAAcP,EAAI,CAACD,CAAI,CAAC,CAEpD,CAEA,IAAIS,EAAM,KAAK,YAAYL,EAAK,KAAMX,CAAI,EAG1C,GAAGgB,IAAQ,EACP,MAGJT,EAAON,EACPA,EAAMe,EAAM,EAGTR,IAAO,OACNC,EAAMD,GAEVA,EAAKE,EACLA,EAAIC,EACJA,EAAOA,EAAK,UAAUV,CAAG,CAC7B,CAGA,KAAK,MAAQK,EAAK,KACtB,CAGA,YAAK,MAAM,IAAM,GAEVD,CACX,EAGAF,GAAO,UAAU,OAAS,SAASH,EAAM,CACrC,GAAG,KAAK,QAAU,KACd,MAAO,GAGX,IAAIM,EAAO,IAAIP,GAAK,MAAS,EACzBY,EAAOL,EACXK,EAAK,MAAQ,KAAK,MAMlB,QALID,EAAI,KACJF,EAAK,KACLS,EAAQ,KACRhB,EAAM,EAEJU,EAAK,UAAUV,CAAG,IAAM,MAAM,CAChC,IAAIM,EAAON,EAGXO,EAAKE,EACLA,EAAIC,EACJA,EAAOA,EAAK,UAAUV,CAAG,EAEzB,IAAIe,EAAM,KAAK,YAAYhB,EAAMW,EAAK,IAAI,EAU1C,GARAV,EAAMe,EAAM,EAGTA,IAAQ,IACPC,EAAQN,GAIT,CAACC,EAAOD,CAAI,GAAK,CAACC,EAAOD,EAAK,UAAUV,CAAG,CAAC,GAC3C,GAAGW,EAAOD,EAAK,UAAU,CAACV,CAAG,CAAC,EAAG,CAC7B,IAAIiB,EAAKJ,GAAcH,EAAMV,CAAG,EAChCS,EAAE,UAAUH,EAAMW,CAAE,EACpBR,EAAIQ,CACR,SACQ,CAACN,EAAOD,EAAK,UAAU,CAACV,CAAG,CAAC,EAAG,CACnC,IAAIkB,EAAUT,EAAE,UAAU,CAACH,CAAI,EAC/B,GAAGY,IAAY,KACX,GAAG,CAACP,EAAOO,EAAQ,UAAU,CAACZ,CAAI,CAAC,GAAK,CAACK,EAAOO,EAAQ,UAAUZ,CAAI,CAAC,EAEnEG,EAAE,IAAM,GACRS,EAAQ,IAAM,GACdR,EAAK,IAAM,OAEV,CACD,IAAIE,EAAOL,EAAG,QAAUE,EAErBE,EAAOO,EAAQ,UAAUZ,CAAI,CAAC,EAC7BC,EAAG,UAAUK,EAAME,GAAcL,EAAGH,CAAI,CAAC,EAErCK,EAAOO,EAAQ,UAAU,CAACZ,CAAI,CAAC,GACnCC,EAAG,UAAUK,EAAMC,GAAcJ,EAAGH,CAAI,CAAC,EAI7C,IAAIa,EAAMZ,EAAG,UAAUK,CAAI,EAC3BO,EAAI,IAAM,GACVT,EAAK,IAAM,GACXS,EAAI,KAAK,IAAM,GACfA,EAAI,MAAM,IAAM,EACpB,CAER,EAER,CAGA,OAAGH,IAAU,OACTA,EAAM,KAAON,EAAK,KAClBD,EAAE,UAAUA,EAAE,QAAUC,EAAMA,EAAK,UAAUA,EAAK,OAAS,IAAI,CAAC,EAChE,KAAK,QAIT,KAAK,MAAQL,EAAK,MACf,KAAK,QAAU,OACd,KAAK,MAAM,IAAM,IAGdW,IAAU,IACrB,EAEA,SAASL,EAAOD,EAAM,CAClB,OAAOA,IAAS,MAAQA,EAAK,GACjC,CAEA,SAASG,GAAcO,EAAMpB,EAAK,CAC9B,IAAIqB,EAAOD,EAAK,UAAU,CAACpB,CAAG,EAE9B,OAAAoB,EAAK,UAAU,CAACpB,EAAKqB,EAAK,UAAUrB,CAAG,CAAC,EACxCqB,EAAK,UAAUrB,EAAKoB,CAAI,EAExBA,EAAK,IAAM,GACXC,EAAK,IAAM,GAEJA,CACX,CAEA,SAASP,GAAcM,EAAMpB,EAAK,CAC9B,OAAAoB,EAAK,UAAU,CAACpB,EAAKa,GAAcO,EAAK,UAAU,CAACpB,CAAG,EAAG,CAACA,CAAG,CAAC,EACvDa,GAAcO,EAAMpB,CAAG,CAClC,CAEAJ,GAAO,QAAUM,KCzNjB,IAAAoB,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CACA,IAAIC,GAAW,KAEf,SAASC,GAAKC,EAAM,CAChB,KAAK,KAAOA,EACZ,KAAK,KAAO,KACZ,KAAK,MAAQ,IACjB,CAEAD,GAAK,UAAU,UAAY,SAASE,EAAK,CACrC,OAAOA,EAAM,KAAK,MAAQ,KAAK,IACnC,EAEAF,GAAK,UAAU,UAAY,SAASE,EAAKC,EAAK,CACvCD,EACC,KAAK,MAAQC,EAGb,KAAK,KAAOA,CAEpB,EAEA,SAASC,GAAQC,EAAY,CACzB,KAAK,MAAQ,KACb,KAAK,YAAcA,EACnB,KAAK,KAAO,CAChB,CAEAD,GAAQ,UAAY,IAAIL,GAGxBK,GAAQ,UAAU,OAAS,SAASH,EAAM,CACtC,GAAG,KAAK,QAAU,KAEd,YAAK,MAAQ,IAAID,GAAKC,CAAI,EAC1B,KAAK,OACE,GAUX,QAPIC,EAAM,EAGNI,EAAI,KACJC,EAAO,KAAK,QAGJ,CACR,GAAGA,IAAS,KAER,OAAAA,EAAO,IAAIP,GAAKC,CAAI,EACpBK,EAAE,UAAUJ,EAAKK,CAAI,EACrB,IAAM,GACN,KAAK,OACE,GAIX,GAAG,KAAK,YAAYA,EAAK,KAAMN,CAAI,IAAM,EACrC,MAAO,GAGXC,EAAM,KAAK,YAAYK,EAAK,KAAMN,CAAI,EAAI,EAG1CK,EAAIC,EACJA,EAAOA,EAAK,UAAUL,CAAG,CAC7B,CACJ,EAGAE,GAAQ,UAAU,OAAS,SAASH,EAAM,CACtC,GAAG,KAAK,QAAU,KACd,MAAO,GAGX,IAAIO,EAAO,IAAIR,GAAK,MAAS,EACzBO,EAAOC,EACXD,EAAK,MAAQ,KAAK,MAKlB,QAJID,EAAI,KACJG,EAAQ,KACRP,EAAM,EAEJK,EAAK,UAAUL,CAAG,IAAM,MAAM,CAChCI,EAAIC,EACJA,EAAOA,EAAK,UAAUL,CAAG,EACzB,IAAIQ,EAAM,KAAK,YAAYT,EAAMM,EAAK,IAAI,EAC1CL,EAAMQ,EAAM,EAETA,IAAQ,IACPD,EAAQF,EAEhB,CAEA,OAAGE,IAAU,MACTA,EAAM,KAAOF,EAAK,KAClBD,EAAE,UAAUA,EAAE,QAAUC,EAAMA,EAAK,UAAUA,EAAK,OAAS,IAAI,CAAC,EAEhE,KAAK,MAAQC,EAAK,MAClB,KAAK,OACE,IAGA,EAEf,EAEAV,GAAO,QAAUM,KC1GjB,IAAAO,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAAAA,GAAO,QAAU,CACb,OAAQ,KACR,QAAS,IACb,ICHA,IAAAC,GAAAC,EAAA,CAAAC,GAAAC,KAAA,CAKA,IAAIC,GAAS,KAAoB,OAEjC,SAASC,EAAQC,EAAOC,EAAGC,EAAI,CAgB3B,KAAK,SAAYF,IAAU,GAC3B,KAAK,MAAQA,GAAS,IACtB,KAAK,EAAKC,IAAM,OAAa,GAAKA,EAClC,KAAK,GAAMC,IAAO,OAAa,IAAMA,EACrC,KAAK,UAAY,IAAIJ,GAAOK,EAAsB,EAClD,KAAK,OAAS,EACd,KAAK,MAAM,CACf,CAEAJ,EAAQ,UAAU,MAAQ,UAAW,CAGjC,KAAK,UAAU,MAAM,EACrB,KAAK,EAAI,EACT,KAAK,QAAU,EACf,KAAK,cAAgB,CACzB,EAEAA,EAAQ,UAAU,KAAO,UAAW,CAChC,OAAO,KAAK,UAAU,IAC1B,EAEAA,EAAQ,UAAU,QAAU,SAASK,EAAY,CAG7C,IAAIC,EAAS,CAAC,EACd,OAAID,GACA,KAAK,UAAU,EAAI,EACnB,KAAK,UAAU,KAAK,SAASE,EAAG,CAAED,EAAO,KAAKC,CAAC,CAAG,CAAC,GAEnD,KAAK,UAAU,KAAK,SAASA,EAAG,CAAED,EAAO,KAAK,CAAC,KAAKC,EAAE,KAAM,EAAEA,EAAE,CAAC,CAAC,CAAG,CAAC,EAEnED,CACX,EAEAN,EAAQ,UAAU,QAAU,UAAW,CACnC,IAAIQ,EAAU,KAAK,SAAY,SAAW,iBACtCC,EAAI,CAACD,EAAS,KAAK,EAAI,kBAAoB,KAAK,KAAK,EAAI,aACpD,SAAS,KAAK,WAAW,CAAC,EAC1B,SAAS,KAAK,WAAW,GAAI,EAC7B,SAAS,KAAK,WAAW,EAAG,EAC5B,SAAS,KAAK,WAAW,GAAI,EAC7B,SAAS,KAAK,WAAW,CAAG,CAAC,EACtC,OAAOC,EAAE,KAAK;AAAA,CAAI,CACtB,EAEA,SAASL,GAAuBM,EAAGC,EAAG,CAGlC,OAAQD,EAAE,KAAOC,EAAE,KAAQ,EAAKD,EAAE,KAAOC,EAAE,KAAQ,GAAK,CAC5D,CAEA,SAASC,GAA4BF,EAAGC,EAAG,CAGvC,OAAQD,EAAE,UAAYC,EAAE,SAC5B,CAEAX,EAAQ,UAAU,KAAO,SAASa,EAAGC,EAAG,CAIpCA,EAAIA,GAAK,EACTD,EAAI,MAAM,QAAQA,CAAC,EAAIA,EAAI,CAACA,CAAC,EAC7B,QAASE,EAAI,EAAIA,EAAIF,EAAE,OAASE,IAC5B,KAAK,QAAQF,EAAEE,CAAC,EAAGD,CAAC,CAE5B,EAEAd,EAAQ,UAAU,cAAgB,SAASO,EAAG,CAG1CA,EAAI,MAAM,QAAQA,CAAC,EAAIA,EAAI,CAACA,CAAC,EAC7B,QAASQ,EAAI,EAAIA,EAAIR,EAAE,OAASQ,IAC5B,KAAK,QAAQR,EAAEQ,CAAC,EAAE,KAAMR,EAAEQ,CAAC,EAAE,CAAC,CAEtC,EAEAf,EAAQ,UAAU,UAAY,SAASgB,EAAO,CAS1C,GAAI,OAAK,IAAM,KAAK,eAChB,CAACA,GAAS,KAAK,IAAM,KAAK,GAAM,KAAK,EAAI,KAAK,eAGlD,KAAIC,EAAO,EACX,KAAK,UAAU,KAAK,SAASV,EAAG,CAC5BA,EAAE,UAAYU,EAAOV,EAAE,EAAI,EAC3BU,EAAOV,EAAE,KAAOU,EAAOV,EAAE,CAC7B,CAAC,EACD,KAAK,EAAI,KAAK,cAAgBU,EAClC,EAEAjB,EAAQ,UAAU,aAAe,SAASa,EAAG,CAKzC,GAAI,KAAK,KAAK,IAAM,EAChB,OAAO,KAEX,IAAIK,EAAO,KAAK,UAAU,WAAW,CAAC,KAAKL,CAAC,CAAC,EACzCN,EAAKW,EAAK,KAAK,IAAM,KAAQA,EAAK,KAAK,EAAIA,EAAK,KAAK,EACzD,GAAIX,EAAE,OAASM,GAAK,KAAK,SACrB,OAAON,EAEX,IAAIY,EAAOD,EAAK,KAAK,EACrB,OAAIC,GAAQ,KAAK,IAAIA,EAAK,KAAON,CAAC,EAAI,KAAK,IAAIN,EAAE,KAAOM,CAAC,EAC9CM,EAEAZ,CAEf,EAEAP,EAAQ,UAAU,cAAgB,SAASa,EAAGC,EAAGG,EAAM,CAInD,IAAIV,EAAI,CAAC,KAAKM,EAAG,EAAEC,EAAG,KAAKG,CAAI,EAC/B,YAAK,UAAU,OAAOV,CAAC,EACvB,KAAK,GAAKO,EACHP,CACX,EAEAP,EAAQ,UAAU,WAAa,SAASoB,EAASP,EAAGC,EAAG,CAK/CD,IAAMO,EAAQ,OACdA,EAAQ,MAAQN,GAAKD,EAAIO,EAAQ,OAASA,EAAQ,EAAIN,IAE1DM,EAAQ,MAAQN,EAChBM,EAAQ,WAAaN,EAAI,EACzBM,EAAQ,GAAKN,EACb,KAAK,GAAKA,CACd,EAEAd,EAAQ,UAAU,QAAU,SAASa,EAAGC,EAAG,CAGvC,IAAIO,EAAM,KAAK,UAAU,IAAI,EACzBC,EAAM,KAAK,UAAU,IAAI,EACzBF,EAAU,KAAK,aAAaP,CAAC,EACjC,GAAIO,GAAWA,EAAQ,OAASP,EAI5B,KAAK,WAAWO,EAASP,EAAGC,CAAC,UACtBM,IAAYC,EACnB,KAAK,cAAcR,EAAGC,EAAG,CAAC,UACnBM,IAAYE,EACnB,KAAK,cAAcT,EAAGC,EAAG,KAAK,CAAC,UACxB,KAAK,SACZ,KAAK,cAAcD,EAAGC,EAAGM,EAAQ,IAAI,MAClC,CAKH,IAAIG,EAAIH,EAAQ,UAAY,KAAK,EAC7BI,EAAQ,KAAK,MAAM,EAAI,KAAK,EAAI,KAAK,MAAQD,GAAK,EAAIA,EAAE,EACxDC,EAAQJ,EAAQ,GAAKN,EACrB,KAAK,WAAWM,EAASP,EAAGC,CAAC,EAE7B,KAAK,cAAcD,EAAGC,EAAGM,EAAQ,IAAI,CAE7C,CACA,KAAK,UAAU,EAAK,EAChB,CAAC,KAAK,UAAY,KAAK,GAAK,KAAK,KAAK,EAAI,KAAK,EAAI,KAAK,OAExD,KAAK,SAAS,CAEtB,EAEApB,EAAQ,UAAU,WAAa,SAASa,EAAG,CAKvC,IAAIK,EAAO,KAAK,UAAU,WAAW,CAAC,KAAKL,CAAC,CAAC,EACzCY,EAAQP,EAAK,KAAK,EAClBQ,EAASD,EAAM,OAASZ,EAAKY,EAAQP,EAAK,KAAK,EACnD,MAAO,CAACO,EAAOC,CAAK,CACxB,EAEA1B,EAAQ,UAAU,OAAS,SAAS2B,EAAY,CAY5C,IAAIC,EAAK,MAAM,QAAQD,CAAU,EAAIA,EAAa,CAACA,CAAU,EACzDE,EAAKD,EAAG,IAAI,KAAK,QAAS,IAAI,EAClC,OAAO,MAAM,QAAQD,CAAU,EAAIE,EAAKA,EAAG,CAAC,CAChD,EAEA7B,EAAQ,UAAU,QAAU,SAASa,EAAG,CACpC,GAAI,KAAK,KAAK,IAAM,EAEb,KAAIA,EAAI,KAAK,UAAU,IAAI,EAAE,KAChC,MAAO,GACJ,GAAIA,EAAI,KAAK,UAAU,IAAI,EAAE,KAChC,MAAO,GAIX,KAAK,UAAU,EAAI,EACnB,IAAIiB,EAAQ,KAAK,WAAWjB,CAAC,EACzBY,EAAQK,EAAM,CAAC,EAAGJ,EAAQI,EAAM,CAAC,EACrC,GAAI,KAAK,SACL,OAAOL,EAAM,KAAO,KAAK,EAEzB,IAAIR,EAAOQ,EAAM,UACjB,OAAIA,IAAUC,IACVT,IAASJ,EAAIY,EAAM,OAASC,EAAM,UAAYD,EAAM,YAAcC,EAAM,KAAOD,EAAM,OAElFR,EAAO,KAAK,EAE3B,EAEAjB,EAAQ,UAAU,gBAAkB,SAASiB,EAAM,CAO/C,KAAK,UAAU,YAAcL,GAC7B,IAAIM,EAAO,KAAK,UAAU,WAAW,CAAC,UAAUD,CAAI,CAAC,EACrD,KAAK,UAAU,YAAcb,GAC7B,IAAIqB,EAAQP,EAAK,KAAK,EAClBQ,EAASD,GAASA,EAAM,YAAcR,EAAQQ,EAAQP,EAAK,KAAK,EACpE,MAAO,CAACO,EAAOC,CAAK,CACxB,EAEA1B,EAAQ,UAAU,WAAa,SAAS+B,EAAY,CAehD,IAAIF,EAAK,MAAM,QAAQE,CAAU,EAAIA,EAAa,CAACA,CAAU,EACzDC,EAAKH,EAAG,IAAI,KAAK,YAAa,IAAI,EACtC,OAAO,MAAM,QAAQE,CAAU,EAAIC,EAAKA,EAAG,CAAC,CAChD,EAEAhC,EAAQ,UAAU,YAAc,SAASuB,EAAG,CACxC,GAAI,KAAK,KAAK,IAAM,EAGpB,MAAK,UAAU,EAAI,EACnB,IAAIU,EAAI,KAAK,EAAIV,EACbO,EAAQ,KAAK,gBAAgBG,CAAC,EAC9BR,EAAQK,EAAM,CAAC,EAAGJ,EAAQI,EAAM,CAAC,EAErC,OAAIJ,IAAUD,GAASA,IAAU,MAAQC,IAAU,MACvCD,GAASC,GAAO,KAChB,KAAK,SAENO,GAAKR,EAAM,KACXA,EAAM,KAENC,EAAM,KAJND,EAAM,MAAQQ,EAAIR,EAAM,YAAcC,EAAM,KAAOD,EAAM,OAASC,EAAM,UAAYD,EAAM,WAMzG,EAEA,SAASS,GAAWC,EAAS,CAIzB,IAAIC,EAAM,KAAK,MAAM,KAAK,OAAO,EAAID,EAAQ,MAAM,EACnD,OAAOA,EAAQ,OAAOC,EAAK,CAAC,EAAE,CAAC,CACnC,CAEApC,EAAQ,UAAU,SAAW,UAAW,CAMpC,GAAI,MAAK,YAGT,KAAIqC,EAAS,KAAK,QAAQ,EAG1B,IAFA,KAAK,MAAM,EACX,KAAK,YAAc,GACZA,EAAO,OAAS,GACnB,KAAK,cAAcH,GAAWG,CAAM,CAAC,EAEzC,KAAK,UAAU,EAAI,EACnB,KAAK,YAAc,GACvB,EAEA,SAASC,GAAOC,EAAQ,CAMpB,KAAK,OAASA,GAAU,CAAC,EACzB,KAAK,KAAO,KAAK,OAAO,MAAQ,OAChCvC,EAAQ,KAAK,KAAM,KAAK,OAAS,OAASuC,EAAO,MAAQ,EAAK,EAC9D,KAAK,aAAe,KAAK,OAAO,OAAS,GACzC,KAAK,cAAgB,KAAK,OAAO,QAAU,IAC3C,KAAK,SAAW,CACpB,CACAD,GAAO,UAAY,OAAO,OAAOtC,EAAQ,SAAS,EAClDsC,GAAO,UAAU,YAAcA,GAE/BA,GAAO,UAAU,KAAO,SAASX,EAAY,CACzC3B,EAAQ,UAAU,KAAK,KAAK,KAAM2B,CAAU,EAC5C,KAAK,iBAAiB,CAC1B,EAEAW,GAAO,UAAU,cAAgB,SAASzB,EAAGC,EAAGG,EAAM,CAClD,KAAK,UAAY,EACjBjB,EAAQ,UAAU,cAAc,KAAK,KAAMa,EAAGC,EAAGG,CAAI,CACzD,EAEAqB,GAAO,UAAU,WAAa,SAASlB,EAASP,EAAGC,EAAG,CAC9CM,EAAQ,IAAM,IACd,KAAK,UAAY,GAErBpB,EAAQ,UAAU,WAAW,KAAK,KAAMoB,EAASP,EAAGC,CAAC,CACzD,EAEAwB,GAAO,UAAU,iBAAmB,UAAW,CAK3C,OAAI,KAAK,OAAS,QAAU,KAAK,KAAK,EAAI,KAAK,cACpC,GAEP,KAAK,SAAW,KAAK,KAAK,EAAI,KAAK,cACnC,KAAK,KAAO,OACZ,KAAK,SAAW,GAChB,KAAK,MAAQ,KAAK,OAAO,OAAS,IAClC,KAAK,SAAS,EACP,IAEJ,EACX,EAEAxC,GAAO,QAAU,CACb,QAAWE,EACX,OAAUsC,EACd,ICxYA,IAAAE,GAA2B,SCG3B,SAASC,GAAmBC,EAAU,CACpC,IAAIC,EAAc,KAAK,YACvB,OAAO,KAAK,KACV,SAASC,EAAO,CAEd,OAAOD,EAAY,QAAQD,EAAS,CAAC,EAAE,KAAK,UAAW,CACrD,OAAOE,CACT,CAAC,CACH,EACA,SAASC,EAAQ,CAEf,OAAOF,EAAY,QAAQD,EAAS,CAAC,EAAE,KAAK,UAAW,CAErD,OAAOC,EAAY,OAAOE,CAAM,CAClC,CAAC,CACH,CACF,CACF,CAEA,IAAOC,GAAQL,GCtBf,SAASM,GAAWC,EAAK,CACvB,IAAIC,EAAI,KACR,OAAO,IAAIA,EAAE,SAASC,EAASC,EAAQ,CACrC,GAAI,EAAEH,GAAO,OAAOA,EAAI,OAAW,KACjC,OAAOG,EACL,IAAI,UACF,OAAOH,EACL,IACAA,EACA,gEACJ,CACF,EAEF,IAAII,EAAO,MAAM,UAAU,MAAM,KAAKJ,CAAG,EACzC,GAAII,EAAK,SAAW,EAAG,OAAOF,EAAQ,CAAC,CAAC,EACxC,IAAIG,EAAYD,EAAK,OAErB,SAASE,EAAIC,EAAGC,EAAK,CACnB,GAAIA,IAAQ,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,YAAa,CACjE,IAAIC,EAAOD,EAAI,KACf,GAAI,OAAOC,GAAS,WAAY,CAC9BA,EAAK,KACHD,EACA,SAASA,EAAK,CACZF,EAAIC,EAAGC,CAAG,CACZ,EACA,SAASE,EAAG,CACVN,EAAKG,CAAC,EAAI,CAAE,OAAQ,WAAY,OAAQG,CAAE,EACtC,EAAEL,IAAc,GAClBH,EAAQE,CAAI,CAEhB,CACF,EACA,MACF,CACF,CACAA,EAAKG,CAAC,EAAI,CAAE,OAAQ,YAAa,MAAOC,CAAI,EACxC,EAAEH,IAAc,GAClBH,EAAQE,CAAI,CAEhB,CAEA,QAASG,EAAI,EAAGA,EAAIH,EAAK,OAAQG,IAC/BD,EAAIC,EAAGH,EAAKG,CAAC,CAAC,CAElB,CAAC,CACH,CAEA,IAAOI,GAAQZ,GC7Cf,SAASa,GAAeC,EAAQC,EAAS,CACtC,KAAK,KAAO,iBAAoB,KAAK,OAASD,EAC/C,KAAK,QAAUC,GAAW,EAC5B,CACAF,GAAe,UAAY,MAAM,UAEjC,SAASG,GAAIC,EAAK,CAChB,IAAIC,EAAI,KACR,OAAO,IAAIA,EAAE,SAASC,EAASC,EAAQ,CACrC,GAAI,EAAEH,GAAO,OAAOA,EAAI,OAAW,KACjC,OAAOG,EAAO,IAAI,UAAU,8BAA8B,CAAC,EAG7D,IAAIC,EAAO,MAAM,UAAU,MAAM,KAAKJ,CAAG,EACzC,GAAII,EAAK,SAAW,EAAG,OAAOD,EAAO,EAGrC,QADIE,EAAmB,CAAC,EACfC,EAAI,EAAGA,EAAIF,EAAK,OAAQE,IAC/B,GAAI,CACFL,EAAE,QAAQG,EAAKE,CAAC,CAAC,EACd,KAAKJ,CAAO,EACZ,MAAM,SAASK,EAAO,CACrBF,EAAiB,KAAKE,CAAK,EACvBF,EAAiB,SAAWD,EAAK,QACnCD,EACE,IAAIP,GACFS,EACA,4BACF,CACF,CAEJ,CAAC,CACL,OAASG,EAAP,CACAL,EAAOK,CAAE,CACX,CAEJ,CAAC,CACH,CAEA,IAAOC,GAAQV,GCpCf,IAAIW,GAAiB,WAErB,SAASC,GAAQC,EAAG,CAClB,OAAO,QAAQA,GAAK,OAAOA,EAAE,OAAW,GAAW,CACrD,CAEA,SAASC,IAAO,CAAC,CAGjB,SAASC,GAAKC,EAAIC,EAAS,CACzB,OAAO,UAAW,CAChBD,EAAG,MAAMC,EAAS,SAAS,CAC7B,CACF,CAMA,SAASC,EAAQF,EAAI,CACnB,GAAI,EAAE,gBAAgBE,GACpB,MAAM,IAAI,UAAU,sCAAsC,EAC5D,GAAI,OAAOF,GAAO,WAAY,MAAM,IAAI,UAAU,gBAAgB,EAElE,KAAK,OAAS,EAEd,KAAK,SAAW,GAEhB,KAAK,OAAS,OAEd,KAAK,WAAa,CAAC,EAEnBG,GAAUH,EAAI,IAAI,CACpB,CAEA,SAASI,GAAOC,EAAMC,EAAU,CAC9B,KAAOD,EAAK,SAAW,GACrBA,EAAOA,EAAK,OAEd,GAAIA,EAAK,SAAW,EAAG,CACrBA,EAAK,WAAW,KAAKC,CAAQ,EAC7B,MACF,CACAD,EAAK,SAAW,GAChBH,EAAQ,aAAa,UAAW,CAC9B,IAAIK,EAAKF,EAAK,SAAW,EAAIC,EAAS,YAAcA,EAAS,WAC7D,GAAIC,IAAO,KAAM,EACdF,EAAK,SAAW,EAAIG,GAAUC,IAAQH,EAAS,QAASD,EAAK,MAAM,EACpE,MACF,CACA,IAAIK,EACJ,GAAI,CACFA,EAAMH,EAAGF,EAAK,MAAM,CACtB,OAASM,EAAP,CACAF,GAAOH,EAAS,QAASK,CAAC,EAC1B,MACF,CACAH,GAAQF,EAAS,QAASI,CAAG,CAC/B,CAAC,CACH,CAEA,SAASF,GAAQH,EAAMO,EAAU,CAC/B,GAAI,CAEF,GAAIA,IAAaP,EACf,MAAM,IAAI,UAAU,2CAA2C,EACjE,GACEO,IACC,OAAOA,GAAa,UAAY,OAAOA,GAAa,YACrD,CACA,IAAIC,EAAOD,EAAS,KACpB,GAAIA,aAAoBV,EAAS,CAC/BG,EAAK,OAAS,EACdA,EAAK,OAASO,EACdE,GAAOT,CAAI,EACX,MACF,SAAW,OAAOQ,GAAS,WAAY,CACrCV,GAAUJ,GAAKc,EAAMD,CAAQ,EAAGP,CAAI,EACpC,MACF,CACF,CACAA,EAAK,OAAS,EACdA,EAAK,OAASO,EACdE,GAAOT,CAAI,CACb,OAASM,EAAP,CACAF,GAAOJ,EAAMM,CAAC,CAChB,CACF,CAEA,SAASF,GAAOJ,EAAMO,EAAU,CAC9BP,EAAK,OAAS,EACdA,EAAK,OAASO,EACdE,GAAOT,CAAI,CACb,CAEA,SAASS,GAAOT,EAAM,CAChBA,EAAK,SAAW,GAAKA,EAAK,WAAW,SAAW,GAClDH,EAAQ,aAAa,UAAW,CACzBG,EAAK,UACRH,EAAQ,sBAAsBG,EAAK,MAAM,CAE7C,CAAC,EAGH,QAASU,EAAI,EAAGC,EAAMX,EAAK,WAAW,OAAQU,EAAIC,EAAKD,IACrDX,GAAOC,EAAMA,EAAK,WAAWU,CAAC,CAAC,EAEjCV,EAAK,WAAa,IACpB,CAKA,SAASY,GAAQC,EAAaC,EAAYC,EAAS,CACjD,KAAK,YAAc,OAAOF,GAAgB,WAAaA,EAAc,KACrE,KAAK,WAAa,OAAOC,GAAe,WAAaA,EAAa,KAClE,KAAK,QAAUC,CACjB,CAQA,SAASjB,GAAUH,EAAIK,EAAM,CAC3B,IAAIgB,EAAO,GACX,GAAI,CACFrB,EACE,SAASsB,EAAO,CACVD,IACJA,EAAO,GACPb,GAAQH,EAAMiB,CAAK,EACrB,EACA,SAASC,EAAQ,CACXF,IACJA,EAAO,GACPZ,GAAOJ,EAAMkB,CAAM,EACrB,CACF,CACF,OAASC,EAAP,CACA,GAAIH,EAAM,OACVA,EAAO,GACPZ,GAAOJ,EAAMmB,CAAE,CACjB,CACF,CAEAtB,EAAQ,UAAU,MAAW,SAASiB,EAAY,CAChD,OAAO,KAAK,KAAK,KAAMA,CAAU,CACnC,EAEAjB,EAAQ,UAAU,KAAO,SAASgB,EAAaC,EAAY,CAEzD,IAAIM,EAAO,IAAI,KAAK,YAAY3B,EAAI,EAEpC,OAAAM,GAAO,KAAM,IAAIa,GAAQC,EAAaC,EAAYM,CAAI,CAAC,EAChDA,CACT,EAEAvB,EAAQ,UAAU,QAAawB,GAE/BxB,EAAQ,IAAM,SAASyB,EAAK,CAC1B,OAAO,IAAIzB,EAAQ,SAASM,EAASC,EAAQ,CAC3C,GAAI,CAACb,GAAQ+B,CAAG,EACd,OAAOlB,EAAO,IAAI,UAAU,8BAA8B,CAAC,EAG7D,IAAImB,EAAO,MAAM,UAAU,MAAM,KAAKD,CAAG,EACzC,GAAIC,EAAK,SAAW,EAAG,OAAOpB,EAAQ,CAAC,CAAC,EACxC,IAAIqB,EAAYD,EAAK,OAErB,SAASE,EAAIf,EAAGgB,EAAK,CACnB,GAAI,CACF,GAAIA,IAAQ,OAAOA,GAAQ,UAAY,OAAOA,GAAQ,YAAa,CACjE,IAAIlB,EAAOkB,EAAI,KACf,GAAI,OAAOlB,GAAS,WAAY,CAC9BA,EAAK,KACHkB,EACA,SAASA,EAAK,CACZD,EAAIf,EAAGgB,CAAG,CACZ,EACAtB,CACF,EACA,MACF,CACF,CACAmB,EAAKb,CAAC,EAAIgB,EACN,EAAEF,IAAc,GAClBrB,EAAQoB,CAAI,CAEhB,OAASJ,EAAP,CACAf,EAAOe,CAAE,CACX,CACF,CAEA,QAAST,EAAI,EAAGA,EAAIa,EAAK,OAAQb,IAC/Be,EAAIf,EAAGa,EAAKb,CAAC,CAAC,CAElB,CAAC,CACH,EAEAb,EAAQ,IAAM8B,GAEd9B,EAAQ,WAAa+B,GAErB/B,EAAQ,QAAU,SAASoB,EAAO,CAChC,OAAIA,GAAS,OAAOA,GAAU,UAAYA,EAAM,cAAgBpB,EACvDoB,EAGF,IAAIpB,EAAQ,SAASM,EAAS,CACnCA,EAAQc,CAAK,CACf,CAAC,CACH,EAEApB,EAAQ,OAAS,SAASoB,EAAO,CAC/B,OAAO,IAAIpB,EAAQ,SAASM,EAASC,EAAQ,CAC3CA,EAAOa,CAAK,CACd,CAAC,CACH,EAEApB,EAAQ,KAAO,SAASyB,EAAK,CAC3B,OAAO,IAAIzB,EAAQ,SAASM,EAASC,EAAQ,CAC3C,GAAI,CAACb,GAAQ+B,CAAG,EACd,OAAOlB,EAAO,IAAI,UAAU,+BAA+B,CAAC,EAG9D,QAASM,EAAI,EAAGC,EAAMW,EAAI,OAAQZ,EAAIC,EAAKD,IACzCb,EAAQ,QAAQyB,EAAIZ,CAAC,CAAC,EAAE,KAAKP,EAASC,CAAM,CAEhD,CAAC,CACH,EAGAP,EAAQ,aAEL,OAAO,cAAiB,YACvB,SAASF,EAAI,CAEX,aAAaA,CAAE,CACjB,GACF,SAASA,EAAI,CACXL,GAAeK,EAAI,CAAC,CACtB,EAEFE,EAAQ,sBAAwB,SAA+BgC,EAAK,CAC9D,OAAO,QAAY,KAAe,SACpC,QAAQ,KAAK,wCAAyCA,CAAG,CAE7D,EAEA,IAAOC,EAAQjC,EC/Pf,IAAMkC,GAAW,aACXC,GAAiB,IAIjB,SAAUC,GACdC,EACAC,EAA8C,KAA9CC,EAAAD,IAAA,OAA4C,CAAA,EAAEA,EAA5CE,EAAAD,EAAA,UAAAE,EAASD,IAAA,OAAG,KAAKA,EAAEE,EAAAH,EAAA,cAAAI,EAAaD,IAAA,OAAG,CAAA,EAAEA,EAEvC,GAAIL,EAAO,OACT,QAASO,EAAI,EAAGA,EAAIP,EAAO,OAAO,OAAQO,IAAK,CAC7C,IAAIC,EAAI,IAAIC,GAAU,CAAE,cAAaH,CAAA,CAAE,EACvCN,EAAO,OAAOO,CAAC,EAAIC,EAAE,SAASR,EAAO,OAAOO,CAAC,CAAC,EAMlD,QAFIG,EAAI,GACJC,EAAO,CAAC,UAAW,SAAU,cAAe,SAAS,EAChDC,EAAQ,EAAGA,EAAQ,EAAGA,IAAS,CAEtC,QADIC,EAAO,CAAE,MAAKD,EAAE,cAAaN,CAAA,EACjBQ,EAAA,EAAAC,EAAAJ,EAAAG,EAAAC,EAAA,OAAAD,IAAM,CAAjB,IAAIE,EAAGD,EAAAD,CAAA,EACNG,EAAMjB,EAAOgB,CAAG,EAChBC,IACFjB,EAAOgB,CAAG,EAAIE,GAASD,EAAKJ,CAAI,GAKpC,GADAH,EAAI,KAAK,UAAUV,CAAM,EACrBU,EAAE,OAASN,EACb,OAAOM,EAIX,IAAIS,EAAS,CACX,KAAMT,EAAE,MAAM,EAAG,KAAK,MAAMN,EAAY,CAAC,CAAC,EAAI,OAEhDO,EAAK,KAAK,QAAQ,EAClB,QAAgBS,EAAA,EAAAC,EAAAV,EAAAS,EAAAC,EAAA,OAAAD,IAAM,CAAjB,IAAIJ,EAAGK,EAAAD,CAAA,EACNH,EAAMjB,EAAOgB,CAAG,EACfC,IAILP,EAAI,KAAK,UAAUO,CAAG,EACtBE,EAAOH,CAAG,EAAIN,EAAE,QAGlB,IAAIY,EAAM,IAAI,MACZ,4DAA4D,EAE7D,MAAAA,EAAY,OAASH,EAChBG,CACR,CAEA,SAASC,GAAMC,EAAaZ,EAAa,CACvC,OAAOY,GAAOZ,GAAS,CACzB,CAOA,IAAAH,GAAA,UAAA,CAUE,SAAAA,EAAYI,EAAuB,CAT3B,KAAA,gBAAkB,KAClB,KAAA,gBAAkBf,GAClB,KAAA,eAAiBA,GACjB,KAAA,SAAW,EAEX,KAAA,KAAiB,CAAA,EACjB,KAAA,cAAuB,CAAA,EACvB,KAAA,KAAc,CAAA,EAGpB,IAAIc,EAAQC,EAAK,OAAS,EAC1B,KAAK,cAAgBA,EAAK,eAAiB,CAAA,EAE3C,KAAK,gBAAkBU,GAAM,KAAK,gBAAiBX,CAAK,EACxD,KAAK,gBAAkBW,GAAM,KAAK,gBAAiBX,CAAK,EACxD,KAAK,eAAiBW,GAAM,KAAK,eAAgBX,CAAK,EACtD,KAAK,SAAWW,GAAM,KAAK,SAAUX,CAAK,CAC5C,CAEO,OAAAH,EAAA,UAAA,SAAP,SAAgBgB,EAAYT,EAAUU,EAAS,CAC7C,GAD0BV,IAAA,SAAAA,EAAA,IAAUU,IAAA,SAAAA,EAAA,GAChCD,GAAU,KACZ,OAAOA,EAGT,OAAQ,OAAOA,EAAO,CACpB,IAAK,UACL,IAAK,SACL,IAAK,WACH,OAAOA,EACT,IAAK,SACH,OAAO,KAAK,eAAeA,CAAK,EAClC,IAAK,SACH,MACF,QACE,OAAO,KAAK,eAAe,OAAOA,CAAK,CAAC,EAG5C,GAAIA,aAAiB,OACnB,OAAO,KAAK,eAAeA,EAAM,SAAQ,CAAE,EAG7C,GACEA,aAAiB,SACjBA,aAAiB,QACjBA,aAAiB,MACjBA,aAAiB,OAEjB,OAAOA,EAGT,GAAIA,aAAiB,MACnB,OAAO,KAAK,eAAeA,EAAM,SAAQ,CAAE,EAG7C,GAAI,KAAK,KAAK,QAAQA,CAAK,GAAK,EAC9B,MAAO,aAAa,KAAK,QAAQA,CAAK,EAAC,IAGzC,IAAIE,EAAOC,GAAWH,CAAK,EAG3B,GADAC,IACIA,EAAQ,KAAK,SACf,MAAO,cAAcC,EAAI,IAM3B,OAHA,KAAK,KAAK,KAAKX,CAAG,EAClB,KAAK,KAAK,KAAKS,CAAK,EAEZE,EAAM,CACZ,IAAK,QACH,OAAO,KAAK,cAAcF,EAAOC,CAAK,EACxC,IAAK,SACH,OAAO,KAAK,eAAeD,EAAOC,CAAK,EACzC,QACE,IAAIG,EAAQ,KAAK,SACjB,KAAK,SAAW,EAEhB,IAAIZ,EAAM,KAAK,eAAeQ,EAAOC,CAAK,EAC1C,OAAAT,EAAI,OAASU,EAEb,KAAK,SAAWE,EAETZ,EAEb,EAEQR,EAAA,UAAA,QAAR,SAAgBgB,EAAK,CAGnB,QAFIK,EAAQ,KAAK,KAAK,QAAQL,CAAK,EAC/BM,EAAO,CAAC,KAAK,KAAKD,CAAK,CAAC,EACnB,EAAIA,EAAO,GAAK,EAAG,IAAK,CAC/B,IAAIE,EAAM,KAAK,KAAK,CAAC,EACjBA,GAAOC,GAAQD,EAAKD,EAAK,CAAC,CAAC,IAAMN,IACnCA,EAAQO,EACRD,EAAK,QAAQ,KAAK,KAAK,CAAC,CAAC,GAG7B,MAAO,IAAMA,EAAK,KAAK,GAAG,CAC5B,EAEQtB,EAAA,UAAA,eAAR,SAAuBC,EAAS,CAC9B,OAAIA,EAAE,OAAS,KAAK,gBACXA,EAAE,MAAM,EAAG,KAAK,eAAe,EAAI,MAErCA,CACT,EAEQD,EAAA,UAAA,cAAR,SAAsByB,EAAYR,EAAS,CAATA,IAAA,SAAAA,EAAA,GAGhC,QAFIS,EAAS,EACTC,EAAW,CAAA,EACN7B,EAAI,EAAGA,EAAI2B,EAAI,OAAQ3B,IAAK,CACnC,IAAI8B,EAAKH,EAAI3B,CAAC,EAId,GAHA6B,EAAI,KAAK,KAAK,SAASC,EAAI9B,EAAE,SAAQ,EAAImB,CAAK,CAAC,EAE/CS,IACIA,GAAU,KAAK,eACjB,MAGJ,OAAOC,CACT,EAEQ3B,EAAA,UAAA,eAAR,SAAuBQ,EAAUS,EAAS,CAATA,IAAA,SAAAA,EAAA,GAC/B,IAAIS,EAAS,EACTC,EAAM,CAAA,EACV,QAASpB,KAAOC,EACd,GAAK,OAAO,UAAU,eAAe,KAAKA,EAAKD,CAAG,EAGlD,IAAIsB,GAActB,EAAK,KAAK,aAAa,EAAG,CAC1CoB,EAAIpB,CAAG,EAAInB,GACX,SAGF,IAAI4B,EAAQQ,GAAQhB,EAAKD,CAAG,EAE5B,GAAI,EAAAS,IAAU,QAAa,OAAOA,GAAU,cAG5CW,EAAIpB,CAAG,EAAI,KAAK,SAASS,EAAOT,EAAKU,CAAK,EAE1CS,IACIA,GAAU,KAAK,iBACjB,MAGJ,OAAOC,CACT,EACF3B,CAAA,EApJA,EAsJM,SAAUS,GAASO,EAAYZ,EAA4B,CAA5BA,IAAA,SAAAA,EAAA,CAAA,GACnC,IAAIL,EAAI,IAAIC,GAAUI,CAAI,EAC1B,OAAOL,EAAE,SAASiB,CAAK,CACzB,CAEA,SAASQ,GAAQhB,EAAUsB,EAAY,CAErC,GAAI,CACF,OAAOtB,EAAIsB,CAAI,OACf,CACA,OAEJ,CAEA,SAASX,GAAWX,EAAQ,CAC1B,IAAIP,EAAI,OAAO,UAAU,SAAS,MAAMO,CAAG,EAC3C,OAAOP,EAAE,MAAM,EAAmB,EAAE,CACtC,CAEA,SAAS4B,GAActB,EAAaV,EAAoB,CACtD,QAAcQ,EAAA,EAAA0B,EAAAlC,EAAAQ,EAAA0B,EAAA,OAAA1B,IAAe,CAAxB,IAAI2B,EAACD,EAAA1B,CAAA,EAIR,GAHI2B,IAAMzB,GAGNyB,aAAa,QACXzB,EAAI,MAAMyB,CAAC,EACb,MAAO,GAIb,MAAO,EACT,CC/OA,IAAAC,GAAA,UAAA,CAUE,SAAAA,EAAYC,EAAiBC,EAAcC,EAAgB,CAH3D,KAAA,KAAO,EACP,KAAA,OAAS,EAGP,KAAK,QAAUF,EAEf,KAAK,KAAOC,EACZ,KAAK,UAAYC,GAAa,IAAI,IACpC,CAEA,OAAAH,EAAA,UAAA,IAAA,SAAII,EAAc,CAChB,KAAK,QAAUA,GAAoB,IAAI,KAEvC,KAAK,MAAQ,KAAK,QAAQ,QAAO,EAAK,KAAK,UAAU,QAAO,EAC5D,KAAK,QAAQ,UAAU,KAAK,KAAM,KAAK,IAAI,EAC3C,KAAK,QAAU,IACjB,EAEAJ,EAAA,UAAA,OAAA,UAAA,CACE,GAAI,MAAK,QAAO,EAGhB,KAAIK,EAAM,IAAI,KACd,KAAK,MAAQA,EAAI,QAAO,EAAK,KAAK,UAAU,QAAO,EACnD,KAAK,UAAY,KACnB,EAEAL,EAAA,UAAA,QAAA,UAAA,CACO,KAAK,QAAO,IAGjB,KAAK,UAAY,IAAI,KACvB,EAEAA,EAAA,UAAA,QAAA,UAAA,CACE,OAAO,KAAK,WAAa,IAC3B,EACFA,CAAA,EA5CA,EA8CA,IAAAM,GAAA,UAAA,CAOE,SAAAA,GAAA,CAHA,KAAA,OAAS,CAAA,EACT,KAAA,QAAU,CAAA,EAGR,KAAK,UAAY,IAAI,IACvB,CAEA,OAAAA,EAAA,UAAA,IAAA,SAAIC,EAAc,CACX,KAAK,UACR,KAAK,QAAUA,GAAW,IAAI,KAElC,EAEAD,EAAA,UAAA,YAAA,UAAA,CACE,MAAO,EACT,EAEAA,EAAA,UAAA,UAAA,SAAUE,EAAcC,EAAgB,CACtC,IAAIC,EAAO,KAAK,OAAOF,CAAI,EACvBE,EACFA,EAAK,UAELA,EAAO,IAAIC,GAAK,KAAMH,EAAMC,CAAS,EACrC,KAAK,OAAOD,CAAI,EAAIE,EAExB,EAEAJ,EAAA,UAAA,QAAA,SAAQE,EAAcD,EAAc,CAClC,IAAIG,EAAO,KAAK,OAAOF,CAAI,EAC3B,GAAI,CAACE,EAAM,CACT,QAAQ,MAAM,mCAAoCF,CAAI,EACtD,OAGEE,EAAK,OAAS,EAChBA,EAAK,UAELA,EAAK,IAAIH,CAAO,EAChB,OAAO,KAAK,OAAOG,EAAK,IAAI,EAEhC,EAEAJ,EAAA,UAAA,UAAA,SAAUE,EAAcI,EAAU,CAChC,KAAK,QAAQJ,CAAI,GAAK,KAAK,QAAQA,CAAI,GAAK,GAAKI,CACnD,EAEAN,EAAA,UAAA,UAAA,UAAA,CACE,OAAK,KAAK,UACR,KAAK,QAAU,IAAI,MAEd,KAAK,QAAQ,QAAO,EAAK,KAAK,UAAU,QAAO,CACxD,EACFA,CAAA,EAxDA,EA0DA,IAAAO,GAAA,UAAA,CAAA,SAAAA,GAAA,CAOA,CANE,OAAAA,EAAA,UAAA,YAAA,UAAA,CACE,MAAO,EACT,EACAA,EAAA,UAAA,UAAA,SAAUC,EAAeC,EAAiB,CAAS,EACnDF,EAAA,UAAA,QAAA,SAAQC,EAAeC,EAAiB,CAAS,EACjDF,EAAA,UAAA,UAAA,SAAUC,EAAeE,EAAW,CAAS,EAC/CH,CAAA,EAPA,4NCnGAI,GAAA,UAAA,CAAA,SAAAA,GAAA,CACE,KAAA,YAAc,IAAIC,GAIlB,KAAA,SAAiB,CAAA,EAEjB,KAAA,eAAiB,GACjB,KAAA,SAA6B,CAAA,CAyE/B,CAtEE,OAAAD,EAAA,UAAA,MAAA,UAAA,CACE,IAAME,EAAQ,IAAIF,EAClB,OAAAE,EAAM,SAAQC,GAAA,CAAA,EAAQ,KAAK,QAAQ,EACnCD,EAAM,SAAW,KAAK,SAAS,MAAK,EAC7BA,CACT,EAEAF,EAAA,UAAA,WAAA,SAAWI,EAAa,CACtB,KAAK,SAAQD,GAAAA,GAAA,CAAA,EAAQ,KAAK,QAAQ,EAAKC,CAAO,CAChD,EAEAJ,EAAA,UAAA,QAAA,UAAA,CACE,IAAMK,EAAGF,GAAA,CAAA,EAAQ,KAAK,QAAQ,EAC9B,OAAI,KAAK,SAAS,OAAS,IACzBE,EAAI,QAAU,KAAK,SAAS,MAAK,GAE5BA,CACT,EAEAL,EAAA,UAAA,YAAA,SAAYM,EAAqB,CAC/B,GAAI,KAAK,YAAYA,CAAK,EAAG,CACvB,KAAK,YAAY,IACnB,KAAK,YAAY,MAEjB,KAAK,YAAY,IAAM,EAEzB,OAGGA,EAAM,OACTA,EAAM,KAAO,IAAI,MAEnB,KAAK,SAAS,KAAKA,CAAK,EACxB,KAAK,YAAcA,EAEf,KAAK,SAAS,OAAS,KAAK,iBAC9B,KAAK,SAAW,KAAK,SAAS,MAAM,CAAC,KAAK,cAAc,EAE5D,EAEQN,EAAA,UAAA,YAAR,SAAoBM,EAAK,CACvB,GAAI,CAAC,KAAK,YACR,MAAO,GAET,QAASC,KAAOD,EACd,GAAI,GAACA,EAAM,eAAeC,CAAG,GAAKA,IAAQ,SAGtCD,EAAMC,CAAG,IAAM,KAAK,YAAYA,CAAG,EACrC,MAAO,GAGX,MAAO,EACT,EAEAP,EAAA,UAAA,YAAA,UAAA,CACE,OAAO,KAAK,cAAgB,KAAK,WACnC,EAEAA,EAAA,UAAA,eAAA,SAAeQ,EAAe,CAC5B,KAAK,aAAeA,CACtB,EAEAR,EAAA,UAAA,YAAA,UAAA,CACE,OAAO,KAAK,cAAgB,KAAK,WACnC,EAEAA,EAAA,UAAA,eAAA,SAAeQ,EAAe,CAC5B,KAAK,aAAeA,CACtB,EACFR,CAAA,EAjFA,ECVA,IAAAS,GAA6B,SAEvBC,GAAa,OAAO,SAAY,UAAY,QAAQ,KAa1D,SAASC,GAAMC,EAAW,CACxB,GAAI,CACF,OAAO,GAAAC,QAAiB,MAAMD,CAAG,QAC1BE,EAAP,CACIJ,IAAcE,EAAI,OACpB,QAAQ,KAAK,oBAAqBE,EAAS,SAAQ,EAAIF,EAAI,KAAK,EAIpE,OAAIA,EAAI,SACC,CAACA,CAAG,EAGN,CAAA,CACT,CAEM,SAAUG,GAAaH,EAAW,CACtC,IAAII,EAA4B,CAAA,EAEhC,GAAIJ,EAAI,QACNI,EAAU,KAAK,CACb,SAAUJ,EAAI,cAAgB,GAC9B,KAAMA,EAAI,UAAY,GACtB,KAAMA,EAAI,YAAc,EACxB,OAAQA,EAAI,cAAgB,EAC7B,MACI,CACL,IAAIK,EAASN,GAAMC,CAAG,EACtB,GAAIK,EAAO,SAAW,EACpB,GAAI,CACF,MAAM,IAAI,MAAM,MAAM,QACfC,EAAP,CACAD,EAASN,GAAMO,CAAO,EACtBD,EAAO,MAAK,EACZA,EAAO,MAAK,EAIhB,QAAkBE,EAAA,EAAAC,EAAAH,EAAAE,EAAAC,EAAA,OAAAD,IAAQ,CAArB,IAAIE,EAAKD,EAAAD,CAAA,EACZH,EAAU,KAAK,CACb,SAAUK,EAAM,cAAgB,GAChC,KAAMA,EAAM,UAAY,GACxB,KAAMA,EAAM,YAAc,EAC1B,OAAQA,EAAM,cAAgB,EAC/B,GAIL,IAAIC,EAAeV,EAAI,KAAOA,EAAI,KAAO,GACrCW,EAAcX,EAAI,QAAU,OAAOA,EAAI,OAAO,EAAI,OAAOA,CAAG,EAEhE,MAAO,CACL,KAAIU,EACJ,QAASC,EACT,UAASP,EAEb,CCvEA,IAAIQ,GAAK,IAAI,OACX,CACE,IACA,gBACA,MACA,cACA,KACA,KAAK,EAAE,CAAC,EAGN,SAAUC,GAAqBC,EAAe,CAClD,IAAIC,EAAMD,EAAO,OAAO,CAAC,EACzB,GAAIC,EAAI,OAAS,IAAMA,EAAI,OAAS,QAClC,OAAOD,EAGT,IAAIE,EAAID,EAAI,QAAQ,MAAMH,EAAE,EAC5B,OAAII,IAAM,OACRD,EAAI,KAAOC,EAAE,CAAC,EACdD,EAAI,QAAUC,EAAE,CAAC,GAGZF,CACT,CCtBM,SAAUG,IAAkB,CAChC,IAAIC,EACAC,EAEJ,OAAO,SAACC,EAAe,CACrB,IAAIC,EAAI,KAAK,UAAUD,EAAO,MAAM,EACpC,OAAIC,IAAMH,EACD,MAGLC,GACF,aAAaA,CAAO,EAGtBD,EAAiBG,EACjBF,EAAU,WAAW,UAAA,CACnBD,EAAiB,EACnB,EAAG,GAAI,EAEAE,EACT,CACF,CCtBA,IAAME,GAAmB,CACvB,eACA,gBACA,sBAGI,SAAUC,GAAkBC,EAAe,CAC/C,IAAIC,EAAMD,EAAO,OAAO,CAAC,EACzB,GAAIC,EAAI,OAAS,IAAMH,GAAiB,QAAQG,EAAI,OAAO,IAAM,GAC/D,OAAO,KAGT,GAAIA,EAAI,WAAaA,EAAI,UAAU,OAAS,EAAG,CAC7C,IAAIC,EAAQD,EAAI,UAAU,CAAC,EAC3B,GAAIC,EAAM,OAAS,cACjB,OAAO,KAIX,OAAOF,CACT,CCpBA,IAAIG,GAAK,IAAI,OACX,CACE,IACA,cACA,QACA,OACA,OACA,KACA,KAAK,EAAE,CAAC,EAEN,SAAUC,GAAsBC,EAAe,CACnD,IAAIC,EAAMD,EAAO,OAAO,CAAC,EACzB,GAAIC,EAAI,OAAS,IAAMA,EAAI,OAAS,QAClC,OAAOD,EAGT,IAAIE,EAAID,EAAI,QAAQ,MAAMH,EAAE,EAC5B,OAAII,IAAM,OACRD,EAAI,KAAOC,EAAE,CAAC,EACdD,EAAI,QAAUC,EAAE,CAAC,GAGZF,CACT,CCzBA,IAAAG,GAAkB,SCaX,IAAIC,EAAS,CAClB,aAAc,IAAI,MAChB,qDAAqD,EAEvD,cAAe,IAAI,MAAM,8BAA8B,GDbzD,IAAIC,GAAiB,EAEf,SAAUC,GAAQC,EAAiB,CACvC,IAAIC,EAAQ,KAAK,IAAG,EAAK,IACzB,GAAIA,EAAQH,GACV,OAAOI,EAAQ,OAAOC,EAAO,aAAa,EAG5C,IAAIC,EAAM,CACR,OAAQJ,EAAI,OACZ,KAAMA,EAAI,MAEZ,SAAO,GAAAK,SAAML,EAAI,IAAKI,CAAG,EAAE,KAAK,SAACE,EAAc,CAC7C,GAAIA,EAAK,SAAW,IAClB,MAAMH,EAAO,aAGf,GAAIG,EAAK,SAAW,IAAK,CACvB,IAAIC,EAAID,EAAK,QAAQ,IAAI,mBAAmB,EAC5C,GAAI,CAACC,EACH,MAAMJ,EAAO,cAGf,IAAIK,EAAI,SAASD,EAAG,EAAE,EACtB,MAAIC,EAAI,IACNV,GAAiB,KAAK,IAAG,EAAK,IAAOU,GAGjCL,EAAO,cAGf,GAAIG,EAAK,SAAW,IAClB,MAAO,CAAE,KAAM,IAAI,EAErB,GAAIA,EAAK,SAAW,IAClB,MAAM,IAAI,MAAM,eAAe,EAGjC,OAAIA,EAAK,QAAU,KAAOA,EAAK,OAAS,IAC/BA,EAAK,KAAI,EAAG,KAAK,SAACG,EAAI,CAC3B,MAAO,CAAE,KAAIA,CAAA,CACf,CAAC,EAGCH,EAAK,QAAU,KAAOA,EAAK,OAAS,IAC/BA,EAAK,KAAI,EAAG,KAAK,SAACG,EAAI,CAC3B,IAAIC,EAAM,IAAI,MAAMD,EAAK,OAAO,EAChC,MAAMC,CACR,CAAC,EAGIJ,EAAK,KAAI,EAAG,KAAK,SAACK,EAAI,CAC3B,IAAID,EAAM,IAAI,MACZ,8CAA8CJ,EAAK,OAAM,UAAUK,EAAI,GAAG,EAE5E,MAAMD,CACR,CAAC,CACH,CAAC,CACH,CEnDM,SAAUE,GAAcC,EAAe,CAC3C,OAAO,SAACC,EAAiB,CACvB,OAAOC,GAAQD,EAAKD,CAAG,CACzB,CACF,CAEA,IAAIG,GAAiB,EAErB,SAASD,GAAQD,EAAmBD,EAAe,CACjD,IAAII,EAAQ,KAAK,IAAG,EAAK,IACzB,OAAIA,EAAQD,GACHE,EAAQ,OAAOC,EAAO,aAAa,EAGrC,IAAID,EAAQ,SAACE,EAASC,EAAM,CACjCR,EACE,CACE,IAAKC,EAAI,IACT,OAAQA,EAAI,OACZ,KAAMA,EAAI,KACV,QAAS,CACP,eAAgB,oBAElB,QAASA,EAAI,SAEf,SAACQ,EAAYC,EAAmCC,EAAS,CACvD,GAAIF,EAAO,CACTD,EAAOC,CAAK,EACZ,OAGF,GAAI,CAACC,EAAK,WAAY,CACpBD,EAAQ,IAAI,MACV,6CAA6CC,EAAK,UAAY,EAEhEF,EAAOC,CAAK,EACZ,OAGF,GAAIC,EAAK,aAAe,IAAK,CAC3BF,EAAOF,EAAO,YAAY,EAC1B,OAGF,GAAII,EAAK,aAAe,IAAK,CAC3BF,EAAOF,EAAO,aAAa,EAE3B,IAAIM,EAAIF,EAAK,QAAQ,mBAAmB,EACxC,GAAI,CAACE,EACH,OAGF,IAAIC,EAAC,OACL,GAAI,OAAOD,GAAM,SACfC,EAAID,UACKA,aAAa,MACtBC,EAAID,EAAE,CAAC,MAEP,QAGF,IAAIE,EAAI,SAASD,EAAG,EAAE,EAClBC,EAAI,IACNX,GAAiB,KAAK,IAAG,EAAK,IAAOW,GAGvC,OAGF,GAAIJ,EAAK,aAAe,IAAK,CAC3BH,EAAQ,CAAE,KAAM,IAAI,CAAE,EACtB,OAGF,GAAIG,EAAK,YAAc,KAAOA,EAAK,WAAa,IAAK,CACnD,IAAIK,EAAI,OACR,GAAI,CACFA,EAAO,KAAK,MAAMJ,CAAI,QACfK,EAAP,CACAR,EAAOQ,CAAG,EACV,OAEFT,EAAQQ,CAAI,EACZ,OAGF,GAAIL,EAAK,YAAc,KAAOA,EAAK,WAAa,IAAK,CACnD,IAAIK,EAAI,OACR,GAAI,CACFA,EAAO,KAAK,MAAMJ,CAAI,QACfK,EAAP,CACAR,EAAOQ,CAAG,EACV,OAEFP,EAAQ,IAAI,MAAMM,EAAK,OAAO,EAC9BP,EAAOC,CAAK,EACZ,OAGFE,EAAOA,EAAK,KAAI,EAChBF,EAAQ,IAAI,MACV,6CAA6CC,EAAK,WAAU,UAAUC,EAAI,GAAG,EAE/EH,EAAOC,CAAK,CACd,CAAC,CAEL,CAAC,CACH,CC/GM,SAAUQ,EAAcC,EAAc,CAC1C,OAAIA,EAAK,QACAD,GAAkBC,EAAK,OAAO,EAEhCC,EACT,wWCZIC,GACOC,GAAa,GAExB,GAAI,CACFD,GAAU,KACVC,GAAa,QACb,CAAY,CAuBd,IAAAC,GAAA,UAAA,CAAA,SAAAA,GAAA,CACE,KAAA,MAAQ,EACR,KAAA,IAAM,EACN,KAAA,MAAQ,EACR,KAAA,IAAM,IAAIF,GAAQ,MAsBpB,CApBE,OAAAE,EAAA,UAAA,IAAA,SAAIC,EAAU,CACRA,IAAO,IACTA,EAAK,MAEP,KAAK,OAAS,EACd,KAAK,KAAOA,EACZ,KAAK,OAASA,EAAKA,EACf,KAAK,KACP,KAAK,IAAI,KAAKA,CAAE,CAEpB,EAEAD,EAAA,UAAA,OAAA,UAAA,CACE,MAAO,CACL,MAAO,KAAK,MACZ,IAAK,KAAK,IACV,MAAO,KAAK,MACZ,iBAAkBE,GAAiB,KAAK,GAAG,EAE/C,EACFF,CAAA,EA1BA,EA4BA,IAAAG,GAAA,SAAAC,EAAA,CAAuCC,GAAAF,EAAAC,CAAA,EAAvC,SAAAD,GAAA,CAAA,IAAAG,EAAAF,IAAA,MAAAA,EAAA,MAAA,KAAA,SAAA,GAAA,KACE,OAAAE,EAAA,OAAyC,CAAA,GA6B3C,CA3BE,OAAAH,EAAA,UAAA,UAAA,SAAUI,EAAiBC,EAAiC,CAC1D,KAAK,IAAID,CAAO,EAChB,QAAWE,KAAQD,EACbA,EAAO,eAAeC,CAAI,GAC5B,KAAK,SAASA,EAAMD,EAAOC,CAAI,CAAC,CAGtC,EAEAN,EAAA,UAAA,SAAA,SAASO,EAAcC,EAAU,CAC/B,IAAIC,EAAO,KAAK,OAAOF,CAAI,EACtBE,IACHA,EAAO,IAAIC,GACX,KAAK,OAAOH,CAAI,EAAIE,GAEtBA,EAAK,IAAID,CAAE,CACb,EAEAR,EAAA,UAAA,OAAA,UAAA,CACE,MAAO,CACL,MAAO,KAAK,MACZ,IAAK,KAAK,IACV,MAAO,KAAK,MACZ,iBAAkBW,GAAiB,KAAK,GAAG,EAC3C,OAAQ,KAAK,OAEjB,EACFX,CAAA,EA9BuCU,EAAW,EAgClD,SAASE,GAAiBC,EAAY,CACpC,IAAIC,EAAkB,CAAA,EAClBC,EAAmB,CAAA,EACvB,OAAAF,EAAG,UAAU,KAAK,SAACG,EAAY,CAC7BF,EAAM,KAAKE,EAAE,IAAI,EACjBD,EAAO,KAAKC,EAAE,CAAC,CACjB,CAAC,EACM,CACL,KAAMF,EACN,MAAOC,EAEX,2NChGME,GAAiB,KAYvBC,GAAA,UAAA,CAUE,SAAAA,EAAYC,EAAU,CAAVA,IAAA,SAAAA,EAAA,IATZ,KAAA,OAAS,GACT,KAAA,MAAQ,GACR,KAAA,MAAQ,GACR,KAAA,KAAO,GACP,KAAA,KAAO,GACP,KAAA,KAAO,EACP,KAAA,UAAY,IAAI,KAId,KAAK,MAAQA,CACf,CAEA,OAAAD,EAAA,UAAA,UAAA,UAAA,CACE,OAAK,KAAK,UACR,KAAK,QAAU,IAAI,MAEd,KAAK,QAAQ,QAAO,EAAK,KAAK,UAAU,QAAO,CACxD,EACFA,CAAA,EApBA,EAsBA,IAAAE,GAAA,UAAA,CAQE,SAAAA,EAAYC,EAAa,CAHzB,KAAA,GAAqC,CAAA,EAInC,KAAK,KAAOA,EACZ,KAAK,KAAUA,EAAI,KAAI,oBAAoBA,EAAI,UAAS,sBAAsBA,EAAI,WAClF,KAAK,WAAaC,EAAcD,CAAG,CACrC,CAEA,OAAAD,EAAA,UAAA,MAAA,SAAMG,EAAU,CAAV,OAAAA,IAAA,SAAAA,EAAA,IACG,IAAIC,GAAUD,CAAK,CAC5B,EAEAH,EAAA,UAAA,OAAA,SAAOK,EAAY,CAAnB,IAAAC,EAAA,KACE,GAAKC,GAIL,KAAIC,EAAKH,EAAE,UAAS,EAEdI,EAAS,GAAK,IAChBC,EAAY,IAAI,KAClB,KAAK,MAAML,EAAE,UAAU,QAAO,EAAKI,CAAM,EAAIA,CAAM,EAGjDE,EAAiB,CACnB,OAAQN,EAAE,OACV,MAAOA,EAAE,MACT,MAAOA,EAAE,MACT,KAAMA,EAAE,KACR,KAAMA,EAAE,KACR,KAAMA,EAAE,KACR,KAAMK,GAEJE,EAAS,KAAK,UAAUD,CAAG,EAE3BE,EAAO,KAAK,GAAGD,CAAM,EACpBC,IACHA,EAAO,IAAIC,GACX,KAAK,GAAGF,CAAM,EAAIC,GAGpBA,EAAK,IAAIL,CAAE,EAEP,MAAK,SAGT,KAAK,OAAS,WAAW,UAAA,CACvBF,EAAK,OAAM,CACb,EAAGS,EAAc,GACnB,EAEAf,EAAA,UAAA,OAAA,UAAA,CACE,IAAIgB,EAAU,CAAA,EACd,QAASJ,KAAU,KAAK,GACtB,GAAK,KAAK,GAAG,eAAeA,CAAM,EAIlC,KAAID,EAAiB,KAAK,MAAMC,CAAM,EAClCK,EAACC,GAAAA,GAAA,CAAA,EACAP,CAAG,EACH,KAAK,GAAGC,CAAM,EAAE,OAAM,CAAE,EAG7BI,EAAQ,KAAKC,CAAC,EAGhB,KAAK,GAAK,CAAA,EACV,KAAK,OAAS,KAEd,IAAIE,EAAU,KAAK,UAAU,CAC3B,YAAa,KAAK,KAAK,YACvB,QAAOH,EACR,EACGI,EAAM,CACR,OAAQ,OACR,IAAK,KAAK,KACV,KAAMD,GAER,KAAK,WAAWC,CAAG,EAChB,KAAK,SAACC,EAAK,CAEZ,CAAC,EACA,MAAM,SAACC,EAAG,CACL,QAAQ,OACV,QAAQ,MAAM,+BAAgCA,CAAG,CAErD,CAAC,CACL,EACFtB,CAAA,EA/FA,+jBCjCMuB,GAAiB,KAOvBC,GAAA,SAAAC,EAAA,CAAiCC,GAAAF,EAAAC,CAAA,EAG/B,SAAAD,EAAYG,EAAa,CAAzB,IAAAC,EACEH,EAAA,KAAA,IAAA,GAAO,KACP,OAAAG,EAAK,MAAQD,EACbC,EAAK,UAAY,IAAI,MACvB,CACF,OAAAJ,CAAA,EARiCK,EAAU,EAU3C,IAAAC,GAAA,UAAA,CAQE,SAAAA,EAAYC,EAAa,CAHzB,KAAA,GAA2C,CAAA,EAIzC,KAAK,KAAOA,EACZ,KAAK,KAAUA,EAAI,KAAI,oBAAoBA,EAAI,UAAS,qBAAqBA,EAAI,WACjF,KAAK,WAAaC,EAAcD,CAAG,CACrC,CAEA,OAAAD,EAAA,UAAA,OAAA,SAAOG,EAAc,CAArB,IAAAC,EAAA,KACE,GAAKC,GAIL,KAAIC,EAAKH,EAAE,UAAS,EAChBG,IAAO,IACTA,EAAK,MAGP,IAAMC,EAAS,GAAK,IAChBC,EAAY,IAAI,KAClB,KAAK,MAAML,EAAE,UAAU,QAAO,EAAKI,CAAM,EAAIA,CAAM,EAGjDE,EAAiB,CACnB,MAAON,EAAE,MACT,KAAMK,GAEJE,EAAS,KAAK,UAAUD,CAAG,EAE3BE,EAAO,KAAK,GAAGD,CAAM,EACpBC,IACHA,EAAO,IAAIC,GACX,KAAK,GAAGF,CAAM,EAAIC,GAGpBA,EAAK,UAAUL,EAAIH,EAAE,OAAO,EAExB,MAAK,SAGT,KAAK,OAAS,WAAW,UAAA,CACvBC,EAAK,OAAM,CACb,EAAGS,EAAc,GACnB,EAEAb,EAAA,UAAA,OAAA,UAAA,CACE,IAAIc,EAAS,CAAA,EACb,QAASJ,KAAU,KAAK,GACtB,GAAK,KAAK,GAAG,eAAeA,CAAM,EAIlC,KAAID,EAAiB,KAAK,MAAMC,CAAM,EAClCK,EAACC,GAAAA,GAAA,CAAA,EACAP,CAAG,EACH,KAAK,GAAGC,CAAM,EAAE,OAAM,CAAE,EAG7BI,EAAO,KAAKC,CAAC,EAGf,KAAK,GAAK,CAAA,EACV,KAAK,OAAS,KAEd,IAAIE,EAAU,KAAK,UAAU,CAC3B,YAAa,KAAK,KAAK,YACvB,OAAMH,EACP,EACGI,EAAM,CACR,OAAQ,OACR,IAAK,KAAK,KACV,KAAMD,GAER,KAAK,WAAWC,CAAG,EAChB,KAAK,SAACC,EAAK,CAEZ,CAAC,EACA,MAAM,SAACC,EAAG,CACL,QAAQ,OACV,QAAQ,MAAM,mCAAoCA,CAAG,CAEzD,CAAC,CACL,EACFpB,CAAA,EAzFA,+jBCjBMqB,GAAiB,KAgBvBC,GAAA,SAAAC,EAAA,CAAiCC,GAAAF,EAAAC,CAAA,EAM/B,SAAAD,EAAYG,EAAaC,EAAYC,EAAgBC,EAAgB,CAAzDH,IAAA,SAAAA,EAAA,IAAaC,IAAA,SAAAA,EAAA,IAAYC,IAAA,SAAAA,EAAA,GAAgBC,IAAA,SAAAA,EAAA,IAArD,IAAAC,EACEN,EAAA,KAAA,IAAA,GAAO,KACP,OAAAM,EAAK,OAASJ,EACdI,EAAK,MAAQH,EACbG,EAAK,WAAaF,EAClBE,EAAK,YAAcD,EACnBC,EAAK,UAAY,IAAI,MACvB,CACF,OAAAP,CAAA,EAdiCQ,EAAU,EAgB3C,IAAAC,GAAA,UAAA,CAQE,SAAAA,EAAYC,EAAa,CAHzB,KAAA,GAAqC,CAAA,EAInC,KAAK,KAAOA,EACZ,KAAK,KAAUA,EAAI,KAAI,oBAAoBA,EAAI,UAAS,qBAAqBA,EAAI,WACjF,KAAK,WAAaC,EAAcD,CAAG,CACrC,CAEA,OAAAD,EAAA,UAAA,OAAA,SAAOG,EAAgB,CAAvB,IAAAC,EAAA,KACE,GAAKC,GAIL,KAAIC,EAAKH,EAAI,UAAS,EAEhBI,EAAS,GAAK,IAChBC,EAAY,IAAI,KAClB,KAAK,MAAML,EAAI,UAAU,QAAO,EAAKI,CAAM,EAAIA,CAAM,EAGnDE,EAAiB,CACnB,OAAQN,EAAI,OACZ,MAAOA,EAAI,MACX,WAAYA,EAAI,WAChB,KAAMK,GAEJE,EAAS,KAAK,UAAUD,CAAG,EAE3BE,EAAO,KAAK,GAAGD,CAAM,EACpBC,IACHA,EAAO,IAAIC,GACX,KAAK,GAAGF,CAAM,EAAIC,GAGpBA,EAAK,IAAIL,CAAE,EAEP,MAAK,SAGT,KAAK,OAAS,WAAW,UAAA,CACvBF,EAAK,OAAM,CACb,EAAGS,EAAc,GACnB,EAEAb,EAAA,UAAA,OAAA,UAAA,CACE,IAAIc,EAAS,CAAA,EACb,QAASJ,KAAU,KAAK,GACtB,GAAK,KAAK,GAAG,eAAeA,CAAM,EAIlC,KAAID,EAAiB,KAAK,MAAMC,CAAM,EAClCK,EAACC,GAAAA,GAAA,CAAA,EACAP,CAAG,EACH,KAAK,GAAGC,CAAM,EAAE,OAAM,CAAE,EAG7BI,EAAO,KAAKC,CAAC,EAGf,KAAK,GAAK,CAAA,EACV,KAAK,OAAS,KAEd,IAAIE,EAAU,KAAK,UAAU,CAC3B,YAAa,KAAK,KAAK,YACvB,OAAMH,EACP,EACGX,EAAM,CACR,OAAQ,OACR,IAAK,KAAK,KACV,KAAMc,GAER,KAAK,WAAWd,CAAG,EAChB,KAAK,SAACe,EAAK,CAEZ,CAAC,EACA,MAAM,SAACC,EAAG,CACL,QAAQ,OACV,QAAQ,MAAM,8BAA+BA,CAAG,CAEpD,CAAC,CACL,EACFnB,CAAA,EAxFA,EA0FA,IAAAoB,GAAA,UAAA,CAQE,SAAAA,EAAYC,EAAa,CAHzB,KAAA,GAA2C,CAAA,EAIzC,KAAK,KAAOA,EACZ,KAAK,KAAUA,EAAI,KAAI,oBAAoBA,EAAI,UAAS,0BAA0BA,EAAI,WACtF,KAAK,WAAaC,EAAcD,CAAG,CACrC,CAEA,OAAAD,EAAA,UAAA,OAAA,SAAOG,EAAgB,CAAvB,IAAAC,EAAA,KACE,GAAKC,IAKH,EAAAF,EAAI,WAAa,KAChBA,EAAI,YAAc,KAAOA,EAAI,WAAa,KAC3CA,EAAI,aAAe,KACnB,OAAO,KAAKA,EAAI,OAAO,EAAE,SAAW,GAKtC,KAAIG,EAAKH,EAAI,UAAS,EAClBG,IAAO,IACTA,EAAK,MAGP,IAAMC,EAAS,GAAK,IAChBC,EAAY,IAAI,KAClB,KAAK,MAAML,EAAI,UAAU,QAAO,EAAKI,CAAM,EAAIA,CAAM,EAGnDE,EAAqB,CACvB,OAAQN,EAAI,OACZ,MAAOA,EAAI,MACX,aAAc,KAAK,cAAcA,CAAG,EACpC,KAAMK,GAEJE,EAAS,KAAK,UAAUD,CAAG,EAE3BE,EAAO,KAAK,GAAGD,CAAM,EACpBC,IACHA,EAAO,IAAIC,GACX,KAAK,GAAGF,CAAM,EAAIC,GAGpBA,EAAK,UAAUL,EAAIH,EAAI,OAAO,EAE1B,MAAK,SAGT,KAAK,OAAS,WAAW,UAAA,CACvBC,EAAK,OAAM,CACb,EAAGS,EAAc,GACnB,EAEAb,EAAA,UAAA,OAAA,UAAA,CACE,IAAIc,EAAS,CAAA,EACb,QAASJ,KAAU,KAAK,GACtB,GAAK,KAAK,GAAG,eAAeA,CAAM,EAIlC,KAAID,EAAqB,KAAK,MAAMC,CAAM,EACtCK,EAACC,GAAAA,GAAA,CAAA,EACAP,CAAG,EACH,KAAK,GAAGC,CAAM,EAAE,OAAM,CAAE,EAG7BI,EAAO,KAAKC,CAAC,EAGf,KAAK,GAAK,CAAA,EACV,KAAK,OAAS,KAEd,IAAIE,EAAU,KAAK,UAAU,CAC3B,YAAa,KAAK,KAAK,YACvB,OAAMH,EACP,EACGX,EAAM,CACR,OAAQ,OACR,IAAK,KAAK,KACV,KAAMc,GAER,KAAK,WAAWd,CAAG,EAChB,KAAK,SAACe,EAAK,CAEZ,CAAC,EACA,MAAM,SAACC,EAAG,CACL,QAAQ,OACV,QAAQ,MAAM,mCAAoCA,CAAG,CAEzD,CAAC,CACL,EAEAnB,EAAA,UAAA,cAAA,SAAcG,EAAgB,CAC5B,OAAIA,EAAI,YAAc,IACb,MAELA,EAAI,YAAc,IACb,MAEJA,EAAI,YAGFA,EAAI,YAAY,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,EAAE,EAFzC,EAGX,EACFH,CAAA,EAjHA,EC/HO,IAAMoB,GAAgB,sBAChBC,GAAmB,QACnBC,GACX,iSCsBFC,GAAA,UAAA,CAgBE,SAAAA,EAAYC,EAAa,CAAzB,IAAAC,EAAA,KACE,GAPF,KAAA,SAAqB,CAAA,EACrB,KAAA,oBAA2C,CAAA,EAC3C,KAAA,OAAS,IAAIC,GAEb,KAAA,SAA2B,CAAA,EAGrB,CAACF,EAAI,WAAa,CAACA,EAAI,WACzB,MAAM,IAAI,MAAM,iDAAiD,EAGnE,KAAK,KAAOA,EACZ,KAAK,KAAK,KAAO,KAAK,KAAK,MAAQ,0BACnC,KAAK,KAAK,QAAU,KAAK,KAAK,SAAW,IACzC,KAAK,KAAK,cAAgB,KAAK,KAAK,eAClC,KAAK,KAAK,eAAiB,CAAC,WAAY,QAAQ,EAClD,KAAK,KAAU,KAAK,KAAK,KAAI,oBAAoB,KAAK,KAAK,UAAS,gBAAgB,KAAK,KAAK,WAE9F,KAAK,WAAa,KAAK,KAAK,WAAaG,GACzC,KAAK,WAAaC,EAAc,KAAK,IAAI,EAEzC,KAAK,UAAUC,EAAiB,EAChC,KAAK,UAAUC,GAAkB,CAAE,EACnC,KAAK,UAAUC,EAAqB,EACpC,KAAK,UAAUC,EAAoB,EAEnC,KAAK,UAAU,SAACC,EAAe,CAC7B,OAAAA,EAAO,QAAQ,SAAW,CACxB,KAAMC,GACN,QAASC,GACT,IAAKC,IAEHX,EAAK,KAAK,cACZQ,EAAO,QAAQ,YAAcR,EAAK,KAAK,aAElCQ,CACT,CAAC,EAED,KAAK,OAAS,IAAII,GAAO,IAAI,EAC7B,KAAK,OAAS,IAAIC,GAAO,IAAI,EAC7B,KAAK,QAAU,IAAIC,GAAa,KAAK,IAAI,CAC3C,CAEA,OAAAhB,EAAA,UAAA,MAAA,UAAA,CACE,QAAeiB,EAAA,EAAAC,EAAA,KAAK,SAALD,EAAAC,EAAA,OAAAD,IAAe,CAAzB,IAAIE,EAAED,EAAAD,CAAA,EACTE,EAAE,EAEN,EAEAnB,EAAA,UAAA,MAAA,UAAA,CACE,OAAO,KAAK,MACd,EAEAA,EAAA,UAAA,eAAA,SAAeoB,EAAY,CACzB,KAAK,OAASA,CAChB,EAEApB,EAAA,UAAA,UAAA,SAAUqB,EAAc,CACtB,KAAK,SAAS,KAAKA,CAAM,CAC3B,EAEArB,EAAA,UAAA,qBAAA,SAAqBsB,EAAoC,CACvD,KAAK,oBAAoB,KAAKA,CAAiB,CACjD,EAEAtB,EAAA,UAAA,OAAA,SAAOuB,EAAQ,CACb,IAAIb,EAAkB,CACpB,OAAQ,CAAA,EACR,QAAOc,GAAAA,GAAA,CACL,SAAU,OAAO,EACd,KAAK,MAAK,EAAG,QAAO,CAAE,EACtBD,EAAI,OAAO,EAEhB,OAAQA,EAAI,QAAU,CAAA,EACtB,YAAaA,EAAI,aAAe,CAAA,EAChC,QAASA,EAAI,SAAW,CAAA,GAO1B,IAJI,OAAOA,GAAQ,UAAYA,EAAI,QAAU,UAC3CA,EAAM,CAAE,MAAOA,CAAG,GAGhB,CAACA,EAAI,MACP,OAAAb,EAAO,MAAQ,IAAI,MACjB,qBAAqB,KAAK,UAAUa,EAAI,KAAK,EAAC,mBAAmB,EAE5DE,EAAQ,QAAQf,CAAM,EAG/B,IAAIgB,EAAQ,KAAK,WAAWH,EAAI,KAAK,EACrCb,EAAO,OAAO,KAAKgB,CAAK,EAExB,QAAmBT,EAAA,EAAAC,EAAA,KAAK,SAALD,EAAAC,EAAA,OAAAD,IAAe,CAA7B,IAAII,EAAMH,EAAAD,CAAA,EACTU,EAAIN,EAAOX,CAAM,EACrB,GAAIiB,IAAM,KACR,OAAAjB,EAAO,MAAQ,IAAI,MAAM,6BAA6B,EAC/Ce,EAAQ,QAAQf,CAAM,EAE/BA,EAASiB,EAGX,OAAKjB,EAAO,UACVA,EAAO,QAAU,CAAA,GAEnBA,EAAO,QAAQ,SAAW,aACnB,KAAK,YAAYA,CAAM,CAChC,EAEAV,EAAA,UAAA,YAAA,SAAYU,EAAe,CACzB,IAAIkB,EAAOC,GAAcnB,EAAQ,CAC/B,cAAe,KAAK,KAAK,cAC1B,EACD,GAAI,KAAK,KAAK,SAAU,CACtB,GAAI,OAAO,KAAK,KAAK,UAAa,WAChC,OAAO,KAAK,KAAK,SAASA,CAAM,EAEhC,QAAQ,KAAK,+CAA+C,EAIhE,IAAIoB,EAAM,CACR,OAAQ,OACR,IAAK,KAAK,KACV,KAAIF,GAEN,OAAO,KAAK,WAAWE,CAAG,EACvB,KAAK,SAACC,EAAI,CACT,OAAArB,EAAO,GAAKqB,EAAK,KAAK,GACtBrB,EAAO,IAAMqB,EAAK,KAAK,IAChBrB,CACT,CAAC,EACA,MAAM,SAACa,EAAG,CACT,OAAAb,EAAO,MAAQa,EACRb,CACT,CAAC,CACL,EAEAV,EAAA,UAAA,KAAA,SAAKmB,EAAIa,EAAoB,CAC3B,GADOA,IAAA,SAAAA,EAAA,CAAA,GACHb,EAAG,UACL,OAAOA,EAIT,IAAIc,EAAS,KACTC,EAAkB,UAAA,CACpB,IAAIC,EAAS,MAAM,UAAU,MAAM,KAAK,SAAS,EAC7CC,EAAcH,EAAO,eAAeE,CAAM,EAC9C,GAAI,CACF,OAAOhB,EAAG,MAAM,KAAMiB,CAAW,QAC1Bb,EAAP,CACA,MAAAU,EAAO,OAAO,CAAE,MAAOV,EAAK,OAAQ,CAAE,UAAWY,CAAM,CAAE,CAAE,EAC3D,KAAK,uBAAsB,EACrBZ,EAEV,EAEA,QAASc,KAAQlB,EACXA,EAAG,eAAekB,CAAI,IACxBH,EAAgBG,CAAI,EAAIlB,EAAGkB,CAAI,GAGnC,QAAiBpB,EAAA,EAAAqB,EAAAN,EAAAf,EAAAqB,EAAA,OAAArB,IAAO,CAAnB,IAAIoB,EAAIC,EAAArB,CAAA,EACPE,EAAG,eAAekB,CAAI,IACxBH,EAAgBG,CAAI,EAAIlB,EAAGkB,CAAI,GAInC,OAAAH,EAAgB,UAAY,GAC5BA,EAAgB,MAAQf,EAEjBe,CACT,EAEAlC,EAAA,UAAA,eAAA,SAAeuC,EAAW,CACxB,QAASC,EAAI,EAAGA,EAAID,EAAK,OAAQC,IAAK,CACpC,IAAIC,EAAMF,EAAKC,CAAC,EACZ,OAAOC,GAAQ,aACjBF,EAAKC,CAAC,EAAI,KAAK,KAAKC,CAAG,GAG3B,OAAOF,CACT,EAEAvC,EAAA,UAAA,uBAAA,UAAA,CAA0B,EAE1BA,EAAA,UAAA,KAAA,SAAKmB,EAAE,SAAEuB,EAAA,CAAA,EAAAzB,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAyB,EAAAzB,EAAA,CAAA,EAAA,UAAAA,CAAA,EACP,IAAI0B,EAAU,KAAK,KAAKxB,CAAE,EAC1B,OAAOwB,EAAQ,MAAM,KAAM,MAAM,UAAU,MAAM,KAAK,UAAW,CAAC,CAAC,CACrE,EACF3C,CAAA,EAvMA,EAyMA,IAAA4C,GAAA,UAAA,CAKE,SAAAA,EAAYC,EAAsB,CAChC,KAAK,UAAYA,EACjB,KAAK,QAAU,IAAIC,GAAYD,EAAS,IAAI,EAC5C,KAAK,YAAc,IAAIE,GAAiBF,EAAS,IAAI,CACvD,CAEA,OAAAD,EAAA,UAAA,MAAA,SACEI,EACAC,EACAC,EACAC,EAAgB,CAHhBH,IAAA,SAAAA,EAAA,IACAC,IAAA,SAAAA,EAAA,IACAC,IAAA,SAAAA,EAAA,GACAC,IAAA,SAAAA,EAAA,IAEA,IAAMC,EAAS,IAAIC,GAAYL,EAAQC,EAAOC,EAAYC,CAAW,EAE/DG,EAAQ,KAAK,UAAU,MAAK,EAAG,MAAK,EAC1C,OAAAA,EAAM,WAAW,CAAE,WAAYN,EAAQ,MAAKC,CAAA,CAAE,EAC9CK,EAAM,eAAeF,CAAM,EAC3B,KAAK,UAAU,eAAeE,CAAK,EAE5BF,CACT,EAEAR,EAAA,UAAA,OAAA,SAAOW,EAAgB,CACrBA,EAAI,IAAG,EACP,QAAgCC,EAAA,EAAAC,EAAA,KAAK,UAAU,oBAAfD,EAAAC,EAAA,OAAAD,IAAoC,CAA/D,IAAME,EAAiBD,EAAAD,CAAA,EAC1B,GAAIE,EAAkBH,CAAG,IAAM,KAC7B,OAGJ,KAAK,QAAQ,OAAOA,CAAG,EACvB,KAAK,YAAY,OAAOA,CAAG,CAC7B,EACFX,CAAA,EArCA,EAuCAe,GAAA,UAAA,CAIE,SAAAA,EAAYd,EAAsB,CAChC,KAAK,UAAYA,EACjB,KAAK,QAAU,IAAIe,GAAYf,EAAS,IAAI,CAC9C,CAEA,OAAAc,EAAA,UAAA,MAAA,SAAME,EAAa,CACjB,IAAMT,EAAS,IAAIU,GAAYD,CAAK,EAE9BP,EAAQ,KAAK,UAAU,MAAK,EAAG,MAAK,EAC1C,OAAAA,EAAM,WAAW,CAAE,MAAKO,CAAA,CAAE,EAC1BP,EAAM,eAAeF,CAAM,EAC3B,KAAK,UAAU,eAAeE,CAAK,EAE5BF,CACT,EAEAO,EAAA,UAAA,OAAA,SAAOI,EAAc,CACnBA,EAAE,IAAG,EACL,KAAK,QAAQ,OAAOA,CAAC,CACvB,EACFJ,CAAA,EAxBA,ECvQM,SAAUK,GAAaC,EAAe,CAC1C,OAAI,OAAO,WAAa,OAAO,UAAU,YACvCA,EAAO,QAAQ,UAAY,OAAO,UAAU,WAE1C,OAAO,WACTA,EAAO,QAAQ,IAAM,OAAO,OAAO,QAAQ,EAE3CA,EAAO,QAAQ,cACb,OAAO,SAAS,SAAW,KAAO,OAAO,SAAS,MAE/CA,CACT,CCVA,IAAMC,GAAkB,CAAC,QAAS,MAAO,OAAQ,OAAQ,OAAO,EAE1D,SAAUC,GAAkBC,EAAkB,CAElD,mBAASC,EAAC,CACR,GAAI,EAAEA,KAAK,0BAIX,IAAMC,EAAQ,QAAQD,CAAC,EACnBE,EAAS,UAAA,SAACC,EAAA,CAAA,EAAAC,EAAA,EAAAA,EAAA,UAAA,OAAAA,IAAAD,EAAAC,CAAA,EAAA,UAAAA,CAAA,EACZH,EAAM,MAAM,QAASE,CAAI,EACzBJ,EAAS,MAAK,EAAG,YAAY,CAC3B,KAAM,MACN,SAAUC,EACV,UAAWG,EACZ,CACH,EACAD,EAAM,MAAQD,EACd,QAAQD,CAAC,EAAIE,GAfDE,EAAA,EAAAC,EAAAR,GAAAO,EAAAC,EAAA,OAAAD,IAAe,CAAxB,IAAIJ,EAACK,EAAAD,CAAA,IAADJ,CAAC,EAiBZ,CCtBA,IAAMM,GAAY,CAAC,OAAQ,OAAQ,KAAK,EAElC,SAAUC,GAAcC,EAAkB,CAC9C,IAAMC,EAAUC,GAAiBF,CAAQ,EAErC,OAAO,mBACT,OAAO,iBAAiB,OAAQC,CAAO,EACvC,OAAO,iBACL,QACA,SAACE,EAAY,CACPC,GAAQD,EAAO,OAAO,GAG1BF,EAAQE,CAAK,CACf,EACA,EAAI,GAIJ,OAAO,UAAa,UAAY,SAAS,mBAC3C,SAAS,iBAAiB,mBAAoBF,CAAO,EACrD,SAAS,iBAAiB,QAASA,CAAO,EAC1C,SAAS,iBAAiB,WAAYA,CAAO,EAEjD,CAEA,SAASC,GAAiBF,EAAkB,CAC1C,OAAO,SAACG,EAAY,CAClB,IAAIE,EAASD,GAAQD,EAAO,QAAQ,EACpC,GAAKE,EAIL,KAAIC,EAAa,CAAE,KAAMH,EAAM,IAAI,EAEnC,GAAI,CACFG,EAAM,OAASC,GAASF,CAAM,QACvBG,EAAP,CACAF,EAAM,OAAS,IAAI,OAAOE,CAAG,EAAC,IAGhCR,EAAS,MAAK,EAAG,YAAYM,CAAK,EACpC,CACF,CAEA,SAASG,GAASC,EAAiB,CACjC,GAAI,CAACA,EACH,MAAO,GAGT,IAAIC,EAAc,CAAA,EAWlB,GATID,EAAK,SACPC,EAAE,KAAKD,EAAK,QAAQ,YAAW,CAAE,EAG/BA,EAAK,KACPC,EAAE,KAAK,GAAG,EACVA,EAAE,KAAKD,EAAK,EAAE,GAGZA,EAAK,WAAa,MAAM,KAC1BC,EAAE,KAAK,GAAG,EACVA,EAAE,KAAK,MAAM,KAAKD,EAAK,SAAS,EAAE,KAAK,GAAG,CAAC,UAClCA,EAAK,UAAW,CACzB,IAAIE,EAAMC,GAAgBH,EAAK,SAAS,EACpCE,IAAQ,KACVD,EAAE,KAAK,GAAG,EACVA,EAAE,KAAKC,CAAG,GAId,GAAIF,EAAK,aACP,QAAiBI,EAAA,EAAAC,EAAAjB,GAAAgB,EAAAC,EAAA,OAAAD,IAAW,CAAvB,IAAIE,EAAID,EAAAD,CAAA,EACPG,EAAQP,EAAK,aAAaM,CAAI,EAC9BC,GACFN,EAAE,KAAK,IAAIK,EAAI,KAAKC,EAAK,IAAI,EAKnC,OAAON,EAAE,KAAK,EAAE,CAClB,CAEA,SAASE,GAAgBK,EAAS,CAChC,OAAIA,EAAK,MACAA,EAAK,MAAM,GAAG,EAAE,KAAK,GAAG,EAE7BA,EAAK,SAAWA,EAAK,QAAQ,MAExBA,EAAK,QAAQ,MAAM,GAAG,EAAE,KAAK,GAAG,GAEzC,QAAQ,MAAM,yCAA0C,OAAOA,CAAI,EAC5D,GACT,CAEA,SAASX,GAASG,EAAiB,CAMjC,QALMS,EAAS,GAEXC,EAAiB,CAAA,EAEjBC,EAASX,EACNW,GAAQ,CACb,IAAIC,EAAOb,GAASY,CAAM,EAC1B,GAAIC,IAAS,KACXF,EAAK,KAAKE,CAAI,EACVF,EAAK,OAASD,GAChB,MAGJE,EAASA,EAAO,WAGlB,OAAID,EAAK,SAAW,EACX,OAAOV,CAAI,EAGbU,EAAK,QAAO,EAAG,KAAK,KAAK,CAClC,CAEA,SAAShB,GAAQmB,EAAUC,EAAY,CACrC,GAAI,CACF,OAAOD,EAAIC,CAAI,OACf,CAEA,OAAO,KAEX,CC/HM,SAAUC,GAAgBC,EAAkB,CAEhD,IAAIC,EAAW,OAAO,MACtB,OAAO,MAAQ,SACbC,EACAC,EAAqB,CAErB,IAAIC,EAAa,CACf,KAAM,MACN,KAAM,IAAI,MAGZ,OAAAA,EAAM,OAASD,GAAWA,EAAQ,OAASA,EAAQ,OAAS,MACxD,OAAOD,GAAQ,SACjBE,EAAM,IAAMF,GAEZE,EAAM,OAASF,EAAI,OACnBE,EAAM,IAAMF,EAAI,KAIlBF,EAAS,iBACT,WAAW,UAAA,CAAM,OAAAA,EAAS,gBAAT,CAAyB,EAEnCC,EACJ,MAAM,KAAM,SAAS,EACrB,KAAK,SAACI,EAAc,CACnB,OAAAD,EAAM,WAAaC,EAAK,OACxBD,EAAM,SAAW,IAAI,KAAI,EAAG,QAAO,EAAKA,EAAM,KAAK,QAAO,EAC1DJ,EAAS,MAAK,EAAG,YAAYI,CAAK,EAC3BC,CACT,CAAC,EACA,MAAM,SAACC,EAAG,CACT,MAAAF,EAAM,MAAQE,EACdF,EAAM,SAAW,IAAI,KAAI,EAAG,QAAO,EAAKA,EAAM,KAAK,QAAO,EAC1DJ,EAAS,MAAK,EAAG,YAAYI,CAAK,EAC5BE,CACR,CAAC,CACL,CACF,CCvCA,IAAIC,GAAe,GAGnB,SAASC,IAAkB,CACzB,OAAO,SAAS,UAAY,SAAS,SAAS,QAChD,CAEM,SAAUC,GAAmBC,EAAkB,CACnDH,GAAeC,GAAkB,EAEjC,IAAMG,EAAQ,OAAO,WACrB,OAAO,WAAa,SAAsBC,EAAqB,CAC7D,IAAMC,EAAML,GAAkB,EAI9B,GAHIK,GACFC,GAAeJ,EAAUG,CAAG,EAE1BF,EACF,OAAOA,EAAM,MAAM,KAAM,SAAS,CAEtC,EAEA,IAAMI,EAAe,QAAQ,UAC7B,QAAQ,UAAY,SAClBC,EACAC,EACAJ,EAAmB,CAEfA,GACFC,GAAeJ,EAAUG,EAAI,SAAQ,CAAE,EAEzCE,EAAa,MAAM,KAAM,SAAS,CACpC,CACF,CAEA,SAASD,GAAeJ,EAAoBG,EAAW,CACrD,IAAIK,EAAQL,EAAI,QAAQ,KAAK,EACzBK,GAAS,GACXL,EAAMA,EAAI,MAAMK,EAAQ,CAAC,EACzBA,EAAQL,EAAI,QAAQ,GAAG,EACvBA,EAAMK,GAAS,EAAIL,EAAI,MAAMK,CAAK,EAAI,KAC7BL,EAAI,OAAO,CAAC,IAAM,MAC3BA,EAAM,IAAMA,GAGdH,EAAS,MAAK,EAAG,YAAY,CAC3B,KAAM,WACN,KAAMH,GACN,GAAIM,EACL,EACDN,GAAeM,CACjB,CC9CM,SAAUM,GAAcC,EAAkB,CAC9C,SAASC,EAAUC,EAA6B,CAC9C,IAAMC,EAAQD,EAAI,QAClBC,EAAM,WAAaD,EAAI,OACvBC,EAAM,SAAW,IAAI,KAAI,EAAG,QAAO,EAAKA,EAAM,KAAK,QAAO,EAC1DH,EAAS,MAAK,EAAG,YAAYG,CAAK,CACpC,CAEA,IAAMC,EAAU,eAAe,UAAU,KACzC,eAAe,UAAU,KAAO,SAC9BC,EACAC,EACAC,EACAC,EACAC,EAAkB,CAEdT,EAAS,iBAAmB,IAC9B,KAAK,QAAU,CACb,KAAM,MACN,OAAMK,EACN,IAAGC,IAGPF,EAAQ,MAAM,KAAM,SAAS,CAC/B,EAEA,IAAMM,EAAU,eAAe,UAAU,KACzC,eAAe,UAAU,KAAO,SAAgBC,EAAW,CACzD,IAAIC,EAAQ,KAAK,mBACjB,YAAK,mBAAqB,SAAUC,EAAU,CAI5C,GAHI,KAAK,aAAe,GAAK,KAAK,SAChCZ,EAAU,IAAI,EAEZW,EACF,OAAOA,EAAM,MAAM,KAAM,SAAS,CAEtC,EAEI,KAAK,UACN,KAAkC,QAAQ,KAAO,IAAI,MAEjDF,EAAQ,MAAM,KAAM,SAAS,CACtC,CACF,8jBChCAI,GAAA,SAAAC,EAAA,CAA8BC,GAAAF,EAAAC,CAAA,EAO5B,SAAAD,EAAYG,EAAa,CAAzB,IAAAC,EACEH,EAAA,KAAA,KAAME,CAAG,GAAC,KAEV,OATQC,EAAA,QAAU,GACVA,EAAA,KAAgB,CAAA,EAE1BA,EAAA,mBAAqB,EACrBA,EAAA,eAAiB,EAKX,OAAO,OAAW,MAItBA,EAAK,UAAUC,EAAY,EAEvB,OAAO,mBACTD,EAAK,SAAWA,EAAK,SAAS,KAAKA,CAAI,EACvC,OAAO,iBAAiB,SAAUA,EAAK,QAAQ,EAC/CA,EAAK,UAAYA,EAAK,UAAU,KAAKA,CAAI,EACzC,OAAO,iBAAiB,UAAWA,EAAK,SAAS,EAEjDA,EAAK,qBAAuBA,EAAK,qBAAqB,KAAKA,CAAI,EAC/D,OAAO,iBAAiB,qBAAsBA,EAAK,oBAAoB,EAEvEA,EAAK,SAAS,KAAK,UAAA,CACjB,OAAO,oBAAoB,SAAUA,EAAK,QAAQ,EAClD,OAAO,oBAAoB,UAAWA,EAAK,SAAS,EACpD,OAAO,oBACL,qBACAA,EAAK,oBAAoB,CAE7B,CAAC,GAICA,EAAK,KAAK,oBACZD,EAAI,gBAAgB,QAAU,IAGhCC,EAAK,YAAYD,EAAI,eAAe,IACtC,CAEA,OAAAH,EAAA,UAAA,YAAA,SAAYG,EAAiC,CAK3C,GALUA,IAAA,SAAAA,EAAA,CAAA,GACNA,EAAI,UAAY,SAClBA,EAAI,QAAU,CAACG,GAAS,KAAK,KAAK,WAAW,GAG3CC,GAAQJ,EAAI,OAAO,EAAG,CAExB,IAAIK,EAAO,KACPC,EAAa,OAAO,QACxB,OAAO,QAAU,UAAkB,CAC7BA,GACFA,EAAW,MAAM,KAAM,SAAS,EAElCD,EAAK,QAAQ,MAAMA,EAAM,SAAS,CACpC,EAGFE,GAAc,IAAI,EACdH,GAAQJ,EAAI,KAAK,GAAK,OAAO,OAAU,YACzCQ,GAAgB,IAAI,EAElBJ,GAAQJ,EAAI,OAAO,GAAK,OAAO,SAAY,UAC7CS,GAAmB,IAAI,EAErBL,GAAQJ,EAAI,OAAO,GAAK,OAAO,SAAY,UAC7CU,GAAkB,IAAI,EAEpBN,GAAQJ,EAAI,GAAG,GAAK,OAAO,eAAmB,KAChDW,GAAc,IAAI,CAEtB,EAEOd,EAAA,UAAA,OAAP,SAAce,EAAQ,CAAtB,IAAAX,EAAA,KACE,OAAI,KAAK,QACA,IAAIY,EAAQ,SAACC,EAASC,EAAM,CAMjC,IALAd,EAAK,KAAK,KAAK,CACb,IAAGW,EACH,QAAOE,EACP,OAAMC,EACP,EACMd,EAAK,KAAK,OAAS,KAAK,CAC7B,IAAIe,EAAIf,EAAK,KAAK,MAAK,EACvB,GAAIe,IAAM,OACR,MAEFA,EAAE,QAAQ,CACR,MAAO,IAAI,MAAM,sCAAsC,EACxD,EAEL,CAAC,EAGIlB,EAAA,UAAM,OAAM,KAAA,KAACc,CAAG,CACzB,EAEUf,EAAA,UAAA,SAAV,UAAA,CACE,KAAK,QAAU,GAEf,mBAASmB,EAAC,CACRC,EAAK,OAAOD,EAAE,GAAG,EAAE,KAAK,SAACE,EAAM,CAC7BF,EAAE,QAAQE,CAAM,CAClB,CAAC,UAHWC,EAAA,EAAAC,EAAA,KAAK,KAALD,EAAAC,EAAA,OAAAD,IAAS,CAAlB,IAAIH,EAACI,EAAAD,CAAA,IAADH,CAAC,EAKV,KAAK,KAAO,CAAA,CACd,EAEUnB,EAAA,UAAA,UAAV,UAAA,CACE,KAAK,QAAU,EACjB,EAEUA,EAAA,UAAA,qBAAV,SAA+BwB,EAAM,CAInC,IAAIC,EAASD,EAAE,QAAWA,EAAE,QAAUA,EAAE,OAAO,OAC/C,GAAKC,EAGL,KAAIC,EAAMD,EAAO,SAAW,OAAOA,CAAM,EACzC,GAAI,EAAAC,EAAI,SAAWA,EAAI,QAAQ,YAAY,IAAM,GAGjD,IAAI,OAAOD,GAAW,UAAYA,EAAO,QAAU,OAAW,CAC5D,KAAK,OAAO,CACV,MAAOA,EACP,QAAS,CACP,mBAAoB,IAEvB,EACD,OAEF,KAAK,OAAME,GAAAA,GAAA,CAAA,EACNF,CAAM,EAAA,CACT,QAAS,CACP,mBAAoB,GACrB,CAAA,CAAA,GAEL,EAEAzB,EAAA,UAAA,QAAA,SACE4B,EACAC,EACAC,EACAC,EACAhB,EAAW,CAEX,GAAI,OAAK,mBAAqB,GAI9B,IAAIA,EAAK,CACP,KAAK,OAAO,CACV,MAAOA,EACP,QAAS,CACP,YAAa,IAEhB,EACD,OAIE,CAACc,GAAY,CAACC,GAIlB,KAAK,OAAO,CACV,MAAO,CACL,QAAOF,EACP,SAAUC,EACV,WAAYC,EACZ,aAAcC,EACd,QAAS,IAEX,QAAS,CACP,YAAa,IAEhB,EACH,EAEA/B,EAAA,UAAA,uBAAA,UAAA,CAAA,IAAAI,EAAA,KACE,KAAK,qBACL,WAAW,UAAA,CAAM,OAAAA,EAAK,oBAAL,CAAyB,CAC5C,EACFJ,CAAA,EA1L8BgC,EAAY,EA4L1C,SAASC,GAASC,EAAQ,CACxB,OAAOA,GAAOA,EAAI,YAAcA,EAAI,WAAW,KAAK,CACtD,CAEA,SAASC,GAAQC,EAAsB,CACrC,OAAOA,IAAM,QAAaA,IAAM,EAClC,EC/MC,UAAY,CACT,GAAI,OAAO,UAAY,QACnB,OAAO,iBAAmB,QAC1B,OAAO,eAAe,0BACtB,OAEJ,IAAMC,EAAqB,YACrBC,EAAoB,CACtB,YAAa,UAAuB,CAChC,OAAO,QAAQ,UAAUD,EAAoB,CAAC,EAAG,KAAK,WAAW,CACrE,CACJ,EACA,OAAO,YAAcC,EAAkB,YACvC,YAAY,UAAYD,EAAmB,UAC3C,YAAY,UAAU,YAAc,YACpC,OAAO,eAAe,YAAaA,CAAkB,CACzD,GAAG,GA0BF,SAASE,EAAW,CACnB,GAAI,OAAOA,EAAU,eAAiB,WAAY,OAElDA,EAAU,cAAgB,SAASC,EAAW,CACxCA,GACFC,EAAkBD,EAAW,IAAI,EACjCA,EAAU,MAAM,IAEhBA,EAAY,SAAS,cAAc,OAAO,EAC1CA,EAAU,KAAO,SACjBA,EAAU,OAAS,GACnB,KAAK,YAAYA,CAAS,EAC1BA,EAAU,MAAM,EAChB,KAAK,YAAYA,CAAS,EAE9B,EAEA,SAASC,EAAkBD,EAAWE,EAAM,CAC1CF,aAAqB,aAAeG,EAAM,UAAW,0CAA0C,EAC/FH,EAAU,MAAQ,UAAYG,EAAM,UAAW,8CAA8C,EAC7FH,EAAU,MAAQE,GAAQC,EAAM,aAAc,0DAA2D,eAAe,CAC1H,CAEA,SAASA,EAAMC,EAAkBC,EAASC,EAAM,CAC9C,MAAM,IAAIF,EAAiB,2DAA6DC,EAAU,IAAKC,CAAI,CAC7G,CACF,GAAG,gBAAgB,SAAS,EAE5B,IAAMC,GAAmB,IAAI,QAC7B,SAASC,GAA6BC,EAAQ,CAC1C,IAAMC,EAAUD,aAAkB,QAAUA,EAASA,aAAkB,KAAOA,EAAO,cAAgB,KAC/FE,EAAYD,EAAUA,EAAQ,QAAQ,eAAe,EAAI,KAC/D,OAA8DC,GAAU,MAAS,SAAWA,EAAY,IAC5G,CACA,SAASC,GAAcC,EAAO,CAC1B,IAAMb,EAAYQ,GAA6BK,EAAM,MAAM,EACvDb,GAAaA,EAAU,MACvBO,GAAiB,IAAIP,EAAU,KAAMA,CAAS,CAEtD,EACC,UAAY,CACT,GAAI,cAAe,MAAM,UACrB,OACJ,IAAID,EAAY,OAAO,MAAM,UAC7B,GAAI,gBAAiB,QAAU,iBAAiB,KAAK,UAAU,MAAM,EACjEA,EAAY,OAAO,YAAY,kBAE1B,gBAAiB,OACtB,OAEJ,iBAAiB,QAASa,GAAe,EAAI,EAC7C,OAAO,eAAeb,EAAW,YAAa,CAC1C,KAAM,CACF,GAAI,KAAK,MAAQ,UAAY,KAAK,kBAAkB,gBAChD,OAAOQ,GAAiB,IAAI,KAAK,MAAM,CAE/C,CACJ,CAAC,CACL,GAAG,EAEH,IAAIO,IACH,SAAUA,EAAmB,CAC1BA,EAAkB,MAAW,QAC7BA,EAAkB,KAAU,MAChC,GAAGA,KAAsBA,GAAoB,CAAC,EAAE,EAChD,IAAMC,EAAN,cAA2B,WAAY,CACnC,WAAW,oBAAqB,CAC5B,MAAO,CAAC,WAAY,WAAY,UAAW,KAAK,CACpD,CACA,aAAc,CACV,MAAM,EACN,KAAK,OAAS,QAAQ,QAAQ,EAC9B,KAAK,SAAW,IAAIA,EAAa,oBAAoB,IAAI,CAC7D,CACA,mBAAoB,CAChB,KAAK,SAAS,QAAQ,CAC1B,CACA,sBAAuB,CACnB,KAAK,SAAS,WAAW,CAC7B,CACA,QAAS,CACL,OAAO,KAAK,SAAS,kBAAkB,CAC3C,CACA,yBAAyBT,EAAM,CACvBA,GAAQ,UACR,KAAK,SAAS,oBAAoB,EAE7BA,GAAQ,WACb,KAAK,SAAS,gBAAgB,EAEzBA,GAAQ,MACb,KAAK,SAAS,iBAAiB,EAG/B,KAAK,SAAS,gBAAgB,CAEtC,CACA,IAAI,KAAM,CACN,OAAO,KAAK,aAAa,KAAK,CAClC,CACA,IAAI,IAAIU,EAAO,CACPA,EACA,KAAK,aAAa,MAAOA,CAAK,EAG9B,KAAK,gBAAgB,KAAK,CAElC,CACA,IAAI,SAAU,CACV,OAAOC,GAA4B,KAAK,aAAa,SAAS,GAAK,EAAE,CACzE,CACA,IAAI,QAAQD,EAAO,CACXA,EACA,KAAK,aAAa,UAAWA,CAAK,EAGlC,KAAK,gBAAgB,SAAS,CAEtC,CACA,IAAI,UAAW,CACX,OAAO,KAAK,aAAa,UAAU,CACvC,CACA,IAAI,SAASA,EAAO,CACZA,EACA,KAAK,aAAa,WAAY,EAAE,EAGhC,KAAK,gBAAgB,UAAU,CAEvC,CACA,IAAI,YAAa,CACb,OAAO,KAAK,aAAa,YAAY,CACzC,CACA,IAAI,WAAWA,EAAO,CACdA,EACA,KAAK,aAAa,aAAc,EAAE,EAGlC,KAAK,gBAAgB,YAAY,CAEzC,CACA,IAAI,UAAW,CACX,MAAO,CAAC,KAAK,SAAS,SAC1B,CACA,IAAI,UAAW,CACX,OAAO,KAAK,gBAAkB,UAAY,CAAC,KAAK,SACpD,CACA,IAAI,WAAY,CACZ,IAAIE,EAAIC,EACR,OAAQA,GAAMD,EAAK,KAAK,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,mBAAqB,MAAQC,IAAO,OAAS,OAASA,EAAG,aAAa,oBAAoB,CAC7K,CACJ,EACA,SAASF,GAA4BG,EAAO,CACxC,OAAQA,EAAM,YAAY,EAAG,CACzB,IAAK,OACD,OAAON,GAAkB,KAC7B,QACI,OAAOA,GAAkB,KACjC,CACJ,CAEA,SAASO,EAAUC,EAAW,CAC1B,OAAO,IAAI,IAAIA,EAAU,SAAS,EAAG,SAAS,OAAO,CACzD,CACA,SAASC,GAAUC,EAAK,CACpB,IAAIC,EACJ,GAAID,EAAI,KACJ,OAAOA,EAAI,KAAK,MAAM,CAAC,EAEtB,GAAKC,EAAcD,EAAI,KAAK,MAAM,QAAQ,EAC3C,OAAOC,EAAY,CAAC,CAE5B,CACA,SAASC,GAAUxB,EAAMF,EAAW,CAChC,IAAM2B,EAAgE3B,GAAU,aAAa,YAAY,GAAME,EAAK,aAAa,QAAQ,GAAKA,EAAK,OACnJ,OAAOmB,EAAUM,CAAM,CAC3B,CACA,SAASC,GAAaJ,EAAK,CACvB,OAAQK,GAAqBL,CAAG,EAAE,MAAM,UAAU,GAAK,CAAC,GAAG,CAAC,GAAK,EACrE,CACA,SAASM,GAAON,EAAK,CACjB,MAAO,CAAC,CAACI,GAAaJ,CAAG,EAAE,MAAM,iCAAiC,CACtE,CACA,SAASO,GAAaC,EAASR,EAAK,CAChC,IAAMS,EAASC,GAAUV,CAAG,EAC5B,OAAOQ,EAAQ,OAASX,EAAUY,CAAM,EAAE,MAAQD,EAAQ,KAAK,WAAWC,CAAM,CACpF,CACA,SAASE,GAAoBC,EAAUC,EAAc,CACjD,OAAON,GAAaK,EAAUC,CAAY,GAAKP,GAAOM,CAAQ,CAClE,CACA,SAASE,GAAcd,EAAK,CACxB,IAAMe,EAAShB,GAAUC,CAAG,EAC5B,OAAOe,GAAU,KAAOf,EAAI,KAAK,MAAM,EAAG,EAAEe,EAAO,OAAS,EAAE,EAAIf,EAAI,IAC1E,CACA,SAASgB,GAAWhB,EAAK,CACrB,OAAOc,GAAcd,CAAG,CAC5B,CACA,SAASiB,GAAaC,EAAMC,EAAO,CAC/B,OAAOtB,EAAUqB,CAAI,EAAE,MAAQrB,EAAUsB,CAAK,EAAE,IACpD,CACA,SAASC,GAAkBpB,EAAK,CAC5B,OAAOA,EAAI,SAAS,MAAM,GAAG,EAAE,MAAM,CAAC,CAC1C,CACA,SAASK,GAAqBL,EAAK,CAC/B,OAAOoB,GAAkBpB,CAAG,EAAE,MAAM,EAAE,EAAE,CAAC,CAC7C,CACA,SAASU,GAAUV,EAAK,CACpB,OAAOqB,GAAiBrB,EAAI,OAASA,EAAI,QAAQ,CACrD,CACA,SAASqB,GAAiB7B,EAAO,CAC7B,OAAOA,EAAM,SAAS,GAAG,EAAIA,EAAQA,EAAQ,GACjD,CAEA,IAAM8B,GAAN,KAAoB,CAChB,YAAYC,EAAU,CAClB,KAAK,SAAWA,CACpB,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,SAAS,EACzB,CACA,IAAI,QAAS,CACT,MAAO,CAAC,KAAK,SACjB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,YAAc,KAAO,KAAK,YAAc,GACxD,CACA,IAAI,aAAc,CACd,OAAO,KAAK,YAAc,KAAO,KAAK,YAAc,GACxD,CACA,IAAI,YAAa,CACb,OAAO,KAAK,SAAS,UACzB,CACA,IAAI,UAAW,CACX,OAAO1B,EAAU,KAAK,SAAS,GAAG,CACtC,CACA,IAAI,QAAS,CACT,OAAO,KAAK,aAAe,KAAK,YAAY,MAAM,wDAAwD,CAC9G,CACA,IAAI,YAAa,CACb,OAAO,KAAK,SAAS,MACzB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,cAAc,CACrC,CACA,IAAI,cAAe,CACf,OAAO,KAAK,SAAS,MAAM,EAAE,KAAK,CACtC,CACA,IAAI,cAAe,CACf,OAAI,KAAK,OACE,KAAK,SAAS,MAAM,EAAE,KAAK,EAG3B,QAAQ,QAAQ,MAAS,CAExC,CACA,OAAOf,EAAM,CACT,OAAO,KAAK,SAAS,QAAQ,IAAIA,CAAI,CACzC,CACJ,EAEA,SAAS0C,GAAsBtC,EAAS,CACpC,GAAIA,EAAQ,aAAa,iBAAiB,GAAK,QAC3C,OAAOA,EAEN,CACD,IAAMuC,EAAuB,SAAS,cAAc,QAAQ,EACtDC,EAAWC,GAAe,WAAW,EAC3C,OAAID,IACAD,EAAqB,MAAQC,GAEjCD,EAAqB,YAAcvC,EAAQ,YAC3CuC,EAAqB,MAAQ,GAC7BG,GAAsBH,EAAsBvC,CAAO,EAC5CuC,CACX,CACJ,CACA,SAASG,GAAsBC,EAAoBC,EAAe,CAC9D,OAAW,CAAE,KAAAhD,EAAM,MAAAU,CAAM,IAAKsC,EAAc,WACxCD,EAAmB,aAAa/C,EAAMU,CAAK,CAEnD,CACA,SAASuC,GAAuBC,EAAM,CAClC,IAAMC,EAAW,SAAS,cAAc,UAAU,EAClD,OAAAA,EAAS,UAAYD,EACdC,EAAS,OACpB,CACA,SAASC,EAASC,EAAW,CAAE,OAAAlD,EAAQ,WAAAmD,EAAY,OAAAC,CAAO,EAAI,CAAC,EAAG,CAC9D,IAAMhD,EAAQ,IAAI,YAAY8C,EAAW,CACrC,WAAAC,EACA,QAAS,GACT,SAAU,GACV,OAAAC,CACJ,CAAC,EACD,OAAIpD,GAAUA,EAAO,YACjBA,EAAO,cAAcI,CAAK,EAG1B,SAAS,gBAAgB,cAAcA,CAAK,EAEzCA,CACX,CACA,SAASiD,IAAqB,CAC1B,OAAO,IAAI,QAASC,GAAY,sBAAsB,IAAMA,EAAQ,CAAC,CAAC,CAC1E,CACA,SAASC,IAAoB,CACzB,OAAO,IAAI,QAASD,GAAY,WAAW,IAAMA,EAAQ,EAAG,CAAC,CAAC,CAClE,CACA,SAASE,IAAgB,CACrB,OAAO,QAAQ,QAAQ,CAC3B,CACA,SAASC,GAAkBV,EAAO,GAAI,CAClC,OAAO,IAAI,UAAU,EAAE,gBAAgBA,EAAM,WAAW,CAC5D,CACA,SAASW,GAASC,KAAYC,EAAQ,CAClC,IAAMC,EAAQC,GAAYH,EAASC,CAAM,EAAE,QAAQ,MAAO,EAAE,EAAE,MAAM;AAAA,CAAI,EAClEG,EAAQF,EAAM,CAAC,EAAE,MAAM,MAAM,EAC7BG,EAASD,EAAQA,EAAM,CAAC,EAAE,OAAS,EACzC,OAAOF,EAAM,IAAKI,GAASA,EAAK,MAAMD,CAAM,CAAC,EAAE,KAAK;AAAA,CAAI,CAC5D,CACA,SAASF,GAAYH,EAASC,EAAQ,CAClC,OAAOD,EAAQ,OAAO,CAACO,EAAQC,EAAQ,IAAM,CACzC,IAAM5D,EAAQqD,EAAO,CAAC,GAAK,KAAY,GAAKA,EAAO,CAAC,EACpD,OAAOM,EAASC,EAAS5D,CAC7B,EAAG,EAAE,CACT,CACA,SAAS6D,IAAO,CACZ,OAAO,MAAM,KAAK,CAAE,OAAQ,EAAG,CAAC,EAC3B,IAAI,CAACC,EAAGC,IACLA,GAAK,GAAKA,GAAK,IAAMA,GAAK,IAAMA,GAAK,GAC9B,IAEFA,GAAK,GACH,IAEFA,GAAK,IACF,KAAK,MAAM,KAAK,OAAO,EAAI,CAAC,EAAI,GAAG,SAAS,EAAE,EAG/C,KAAK,MAAM,KAAK,OAAO,EAAI,EAAE,EAAE,SAAS,EAAE,CAExD,EACI,KAAK,EAAE,CAChB,CACA,SAASC,GAAaC,KAAkBC,EAAU,CAC9C,QAAWlE,KAASkE,EAAS,IAAKxE,GAA8DA,GAAQ,aAAauE,CAAa,CAAC,EAC/H,GAAI,OAAOjE,GAAS,SAChB,OAAOA,EAEf,OAAO,IACX,CACA,SAASmE,GAAaF,KAAkBC,EAAU,CAC9C,OAAOA,EAAS,KAAMxE,GAAYA,GAAWA,EAAQ,aAAauE,CAAa,CAAC,CACpF,CACA,SAASG,MAAcF,EAAU,CAC7B,QAAWxE,KAAWwE,EACdxE,EAAQ,WAAa,eACrBA,EAAQ,aAAa,OAAQ,EAAE,EAEnCA,EAAQ,aAAa,YAAa,MAAM,CAEhD,CACA,SAAS2E,MAAkBH,EAAU,CACjC,QAAWxE,KAAWwE,EACdxE,EAAQ,WAAa,eACrBA,EAAQ,gBAAgB,MAAM,EAElCA,EAAQ,gBAAgB,WAAW,CAE3C,CACA,SAAS4E,GAAY5E,EAAS6E,EAAwB,IAAM,CACxD,OAAO,IAAI,QAASxB,GAAY,CAC5B,IAAMyB,EAAa,IAAM,CACrB9E,EAAQ,oBAAoB,QAAS8E,CAAU,EAC/C9E,EAAQ,oBAAoB,OAAQ8E,CAAU,EAC9CzB,EAAQ,CACZ,EACArD,EAAQ,iBAAiB,OAAQ8E,EAAY,CAAE,KAAM,EAAK,CAAC,EAC3D9E,EAAQ,iBAAiB,QAAS8E,EAAY,CAAE,KAAM,EAAK,CAAC,EAC5D,WAAWzB,EAASwB,CAAqB,CAC7C,CAAC,CACL,CACA,SAASE,GAA0B9D,EAAQ,CACvC,OAAQA,EAAQ,CACZ,IAAK,UACD,OAAO,QAAQ,aACnB,IAAK,UACL,IAAK,UACD,OAAO,QAAQ,SACvB,CACJ,CACA,SAAS+D,GAAS/D,EAAQ,CACtB,OAAOA,GAAU,WAAaA,GAAU,WAAaA,GAAU,SACnE,CACA,SAASgE,MAAkBT,EAAU,CACjC,IAAMvD,EAASqD,GAAa,oBAAqB,GAAGE,CAAQ,EAC5D,OAAOQ,GAAS/D,CAAM,EAAIA,EAAS,IACvC,CACA,SAASiE,GAAetF,EAAM,CAC1B,OAAO,SAAS,cAAc,cAAcA,KAAQ,CACxD,CACA,SAAS6C,GAAe7C,EAAM,CAC1B,IAAMI,EAAUkF,GAAetF,CAAI,EACnC,OAAOI,GAAWA,EAAQ,OAC9B,CACA,SAASmF,GAAevF,EAAMwF,EAAS,CACnC,IAAIpF,EAAUkF,GAAetF,CAAI,EACjC,OAAKI,IACDA,EAAU,SAAS,cAAc,MAAM,EACvCA,EAAQ,aAAa,OAAQJ,CAAI,EACjC,SAAS,KAAK,YAAYI,CAAO,GAErCA,EAAQ,aAAa,UAAWoF,CAAO,EAChCpF,CACX,CACA,SAASqF,GAAuBrF,EAASsF,EAAU,CAC/C,IAAI9E,EACJ,GAAIR,aAAmB,QACnB,OAAQA,EAAQ,QAAQsF,CAAQ,GAC5BD,GAAuBrF,EAAQ,gBAAkBQ,EAAKR,EAAQ,YAAY,KAAO,MAAQQ,IAAO,OAAS,OAASA,EAAG,MAAO8E,CAAQ,CAEhJ,CAEA,IAAIC,GACH,SAAUA,EAAa,CACpBA,EAAYA,EAAY,IAAS,CAAC,EAAI,MACtCA,EAAYA,EAAY,KAAU,CAAC,EAAI,OACvCA,EAAYA,EAAY,IAAS,CAAC,EAAI,MACtCA,EAAYA,EAAY,MAAW,CAAC,EAAI,QACxCA,EAAYA,EAAY,OAAY,CAAC,EAAI,QAC7C,GAAGA,IAAgBA,EAAc,CAAC,EAAE,EACpC,SAASC,GAAsBC,EAAQ,CACnC,OAAQA,EAAO,YAAY,EAAG,CAC1B,IAAK,MACD,OAAOF,EAAY,IACvB,IAAK,OACD,OAAOA,EAAY,KACvB,IAAK,MACD,OAAOA,EAAY,IACvB,IAAK,QACD,OAAOA,EAAY,MACvB,IAAK,SACD,OAAOA,EAAY,MAC3B,CACJ,CACA,IAAMG,GAAN,KAAmB,CACf,YAAYC,EAAUF,EAAQ/D,EAAUkE,EAAO,IAAI,gBAAmB7F,EAAS,KAAM,CACjF,KAAK,gBAAkB,IAAI,gBAC3B,KAAK,sBAAyB8F,GAAW,CAAE,EAC3C,KAAK,SAAWF,EAChB,KAAK,OAASF,EACd,KAAK,QAAU,KAAK,eACpB,KAAK,KAAOG,EACZ,KAAK,IAAMlE,EACX,KAAK,OAAS3B,CAClB,CACA,IAAI,UAAW,CACX,OAAO,KAAK,GAChB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,IAAI,YACpB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,KAAO,MAAM,KAAK,KAAK,KAAK,QAAQ,CAAC,EAAI,CAAC,CAC1D,CACA,QAAS,CACL,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAM,SAAU,CACZ,GAAM,CAAE,aAAA+F,CAAa,EAAI,KACzB,KAAK,SAAS,eAAe,IAAI,EACjC,MAAM,KAAK,4BAA4BA,CAAY,EACnD,GAAI,CACA,KAAK,SAAS,eAAe,IAAI,EACjC,IAAMzD,EAAW,MAAM,MAAM,KAAK,IAAI,KAAMyD,CAAY,EACxD,OAAO,MAAM,KAAK,QAAQzD,CAAQ,CACtC,OACO0D,EAAP,CACI,GAAIA,EAAM,OAAS,aACf,MAAI,KAAK,0BAA0BA,CAAK,GACpC,KAAK,SAAS,eAAe,KAAMA,CAAK,EAEtCA,CAEd,QACA,CACI,KAAK,SAAS,gBAAgB,IAAI,CACtC,CACJ,CACA,MAAM,QAAQ1D,EAAU,CACpB,IAAM2D,EAAgB,IAAI5D,GAAcC,CAAQ,EAMhD,OALcW,EAAS,8BAA+B,CAClD,WAAY,GACZ,OAAQ,CAAE,cAAAgD,CAAc,EACxB,OAAQ,KAAK,MACjB,CAAC,EACS,iBACN,KAAK,SAAS,iCAAiC,KAAMA,CAAa,EAE7DA,EAAc,UACnB,KAAK,SAAS,6BAA6B,KAAMA,CAAa,EAG9D,KAAK,SAAS,0BAA0B,KAAMA,CAAa,EAExDA,CACX,CACA,IAAI,cAAe,CACf,IAAIxF,EACJ,MAAO,CACH,OAAQ+E,EAAY,KAAK,MAAM,EAAE,YAAY,EAC7C,YAAa,cACb,QAAS,KAAK,QACd,SAAU,SACV,KAAM,KAAK,OAAS,KAAO,KAAK,KAChC,OAAQ,KAAK,YACb,UAAW/E,EAAK,KAAK,SAAS,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,IACpF,CACJ,CACA,IAAI,gBAAiB,CACjB,MAAO,CACH,OAAQ,kCACZ,CACJ,CACA,IAAI,QAAS,CACT,OAAO,KAAK,SAAW+E,EAAY,GACvC,CACA,IAAI,aAAc,CACd,OAAO,KAAK,gBAAgB,MAChC,CACA,mBAAmBU,EAAU,CACzB,KAAK,QAAQ,OAAY,CAACA,EAAU,KAAK,QAAQ,MAAS,EAAE,KAAK,IAAI,CACzE,CACA,MAAM,4BAA4BH,EAAc,CAC5C,IAAMI,EAAsB,IAAI,QAAS7C,GAAa,KAAK,sBAAwBA,CAAQ,EAC7EL,EAAS,6BAA8B,CACjD,WAAY,GACZ,OAAQ,CACJ,aAAA8C,EACA,IAAK,KAAK,IACV,OAAQ,KAAK,qBACjB,EACA,OAAQ,KAAK,MACjB,CAAC,EACS,kBACN,MAAMI,CACd,CACA,0BAA0BH,EAAO,CAM7B,MAAO,CALO/C,EAAS,4BAA6B,CAChD,OAAQ,KAAK,OACb,WAAY,GACZ,OAAQ,CAAE,QAAS,KAAM,MAAO+C,CAAM,CAC1C,CAAC,EACa,gBAClB,CACJ,EAEMI,GAAN,KAAyB,CACrB,YAAYR,EAAU3F,EAAS,CAC3B,KAAK,QAAU,GACf,KAAK,UAAaoG,GAAY,CAC1B,IAAMC,EAAYD,EAAQ,MAAM,EAAE,EAAE,CAAC,EACqBC,GAAU,gBAChE,KAAK,SAAS,0BAA0B,KAAK,OAAO,CAE5D,EACA,KAAK,SAAWV,EAChB,KAAK,QAAU3F,EACf,KAAK,qBAAuB,IAAI,qBAAqB,KAAK,SAAS,CACvE,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,qBAAqB,QAAQ,KAAK,OAAO,EAEtD,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,KAAK,qBAAqB,UAAU,KAAK,OAAO,EAExD,CACJ,EAEMsG,EAAN,KAAoB,CAChB,OAAO,KAAK3G,EAAS,CACjB,OAAI,OAAOA,GAAW,SACX,IAAI,KAAKkD,GAAuBlD,CAAO,CAAC,EAGxCA,CAEf,CACA,YAAY4G,EAAU,CAClB,KAAK,SAAWC,GAAqBD,CAAQ,CACjD,CACJ,EACAD,EAAc,YAAc,6BAC5B,SAASE,GAAqBD,EAAU,CACpC,QAAWvG,KAAWuG,EAAS,iBAAiB,cAAc,EAAG,CAC7D,IAAME,EAAgB,SAAS,WAAWzG,EAAS,EAAI,EACvD,QAAW0G,KAAsBD,EAAc,gBAAgB,QAAQ,iBAAiB,QAAQ,EAC5FC,EAAmB,YAAYpE,GAAsBoE,CAAkB,CAAC,EAE5E1G,EAAQ,YAAYyG,CAAa,CACrC,CACA,OAAOF,CACX,CAEA,IAAII,IACH,SAAUA,EAAqB,CAC5BA,EAAoBA,EAAoB,YAAiB,CAAC,EAAI,cAC9DA,EAAoBA,EAAoB,WAAgB,CAAC,EAAI,aAC7DA,EAAoBA,EAAoB,QAAa,CAAC,EAAI,UAC1DA,EAAoBA,EAAoB,UAAe,CAAC,EAAI,YAC5DA,EAAoBA,EAAoB,SAAc,CAAC,EAAI,WAC3DA,EAAoBA,EAAoB,QAAa,CAAC,EAAI,SAC9D,GAAGA,KAAwBA,GAAsB,CAAC,EAAE,EACpD,IAAIC,IACH,SAAUA,EAAa,CACpBA,EAAY,WAAgB,oCAC5BA,EAAY,UAAe,sBAC3BA,EAAY,MAAW,YAC3B,GAAGA,KAAgBA,GAAc,CAAC,EAAE,EACpC,SAASC,GAAsBC,EAAU,CACrC,OAAQA,EAAS,YAAY,EAAG,CAC5B,KAAKF,GAAY,UACb,OAAOA,GAAY,UACvB,KAAKA,GAAY,MACb,OAAOA,GAAY,MACvB,QACI,OAAOA,GAAY,UAC3B,CACJ,CACA,IAAMG,GAAN,KAAqB,CACjB,OAAO,cAAcpH,EAASqH,EAAUC,EAAY,CAChD,OAAO,QAAQ,QAAQ,QAAQtH,CAAO,CAAC,CAC3C,CACA,YAAYgG,EAAUuB,EAAa5H,EAAW6H,EAAe,GAAO,CAChE,KAAK,MAAQR,GAAoB,YACjC,KAAK,SAAWhB,EAChB,KAAK,YAAcuB,EACnB,KAAK,UAAY5H,EACjB,KAAK,SAAW8H,GAAcF,EAAa5H,CAAS,EACpD,KAAK,SAAWqB,EAAU,KAAK,MAAM,EACjC,KAAK,QAAU4E,EAAY,KAC3B8B,GAAqB,KAAK,SAAU,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,EAEhE,KAAK,aAAe,IAAI3B,GAAa,KAAM,KAAK,OAAQ,KAAK,SAAU,KAAK,KAAM,KAAK,WAAW,EAClG,KAAK,aAAeyB,CACxB,CACA,IAAI,QAAS,CACT,IAAI3G,EACJ,IAAMiF,IAAWjF,EAAK,KAAK,aAAe,MAAQA,IAAO,OAAS,OAASA,EAAG,aAAa,YAAY,IAAM,KAAK,YAAY,aAAa,QAAQ,GAAK,GACxJ,OAAOgF,GAAsBC,EAAO,YAAY,CAAC,GAAKF,EAAY,GACtE,CACA,IAAI,QAAS,CACT,IAAI/E,EACJ,IAAM8G,EAAoB,OAAO,KAAK,YAAY,QAAW,SAAW,KAAK,YAAY,OAAS,KAClG,MAAK,GAAA9G,EAAK,KAAK,aAAe,MAAQA,IAAO,SAAkBA,EAAG,aAAa,YAAY,EAChF,KAAK,UAAU,aAAa,YAAY,GAAK,GAG7C,KAAK,YAAY,aAAa,QAAQ,GAAK8G,GAAqB,EAE/E,CACA,IAAI,MAAO,CACP,OAAI,KAAK,SAAWV,GAAY,YAAc,KAAK,QAAUrB,EAAY,IAC9D,IAAI,gBAAgB,KAAK,cAAc,EAGvC,KAAK,QAEpB,CACA,IAAI,SAAU,CACV,IAAI/E,EACJ,OAAOqG,KAAwBrG,EAAK,KAAK,aAAe,MAAQA,IAAO,OAAS,OAASA,EAAG,aAAa,aAAa,IAAM,KAAK,YAAY,OAAO,CACxJ,CACA,IAAI,QAAS,CACT,OAAO,KAAK,aAAa,MAC7B,CACA,IAAI,gBAAiB,CACjB,MAAO,CAAC,GAAG,KAAK,QAAQ,EAAE,OAAO,CAAC4F,EAAS,CAACxG,EAAMU,CAAK,IAC5C8F,EAAQ,OAAO,OAAO9F,GAAS,SAAW,CAAC,CAACV,EAAMU,CAAK,CAAC,EAAI,CAAC,CAAC,EACtE,CAAC,CAAC,CACT,CACA,MAAM,OAAQ,CACV,GAAM,CAAE,YAAAiH,EAAa,WAAAC,CAAW,EAAIb,GAC9Bc,EAAsBnD,GAAa,qBAAsB,KAAK,UAAW,KAAK,WAAW,EAC/F,GAAI,SAAOmD,GAAwB,UAE3B,CADW,MAAMV,GAAe,cAAcU,EAAqB,KAAK,YAAa,KAAK,SAAS,IAKvG,KAAK,OAASF,EACd,YAAK,MAAQC,EACN,KAAK,aAAa,QAAQ,CAEzC,CACA,MAAO,CACH,GAAM,CAAE,SAAAE,EAAU,QAAAC,CAAQ,EAAIhB,GAC9B,GAAI,KAAK,OAASe,GAAY,KAAK,OAASC,EACxC,YAAK,MAAQD,EACb,KAAK,aAAa,OAAO,EAClB,EAEf,CACA,eAAeE,EAAS,CACpB,GAAI,CAACA,EAAQ,OAAQ,CACjB,IAAMC,EAAQC,GAAerF,GAAe,YAAY,CAAC,GAAKA,GAAe,YAAY,EACrFoF,IACAD,EAAQ,QAAQ,cAAc,EAAIC,EAE1C,CACI,KAAK,kCAAkCD,CAAO,GAC9CA,EAAQ,mBAAmBtB,EAAc,WAAW,CAE5D,CACA,eAAeyB,EAAU,CACrB,IAAIvH,EACJ,KAAK,MAAQmG,GAAoB,SAChCnG,EAAK,KAAK,aAAe,MAAQA,IAAO,QAAkBA,EAAG,aAAa,WAAY,EAAE,EACzF,KAAK,eAAe,EACpBwC,EAAS,qBAAsB,CAC3B,OAAQ,KAAK,YACb,OAAQ,CAAE,eAAgB,IAAK,CACnC,CAAC,EACD,KAAK,SAAS,sBAAsB,IAAI,CAC5C,CACA,iCAAiC4E,EAASvF,EAAU,CAChD,KAAK,OAAS,CAAE,QAASA,EAAS,UAAW,cAAeA,CAAS,CACzE,CACA,6BAA6BuF,EAASvF,EAAU,CAC5C,GAAIA,EAAS,aAAeA,EAAS,YACjC,KAAK,SAAS,iCAAiC,KAAMA,CAAQ,UAExD,KAAK,oBAAoBuF,CAAO,GAAKI,GAAiC3F,CAAQ,EAAG,CACtF,IAAM0D,EAAQ,IAAI,MAAM,kDAAkD,EAC1E,KAAK,SAAS,sBAAsB,KAAMA,CAAK,CACnD,MAEI,KAAK,MAAQY,GAAoB,UACjC,KAAK,OAAS,CAAE,QAAS,GAAM,cAAetE,CAAS,EACvD,KAAK,SAAS,oCAAoC,KAAMA,CAAQ,CAExE,CACA,0BAA0BuF,EAASvF,EAAU,CACzC,KAAK,OAAS,CAAE,QAAS,GAAO,cAAeA,CAAS,EACxD,KAAK,SAAS,iCAAiC,KAAMA,CAAQ,CACjE,CACA,eAAeuF,EAAS7B,EAAO,CAC3B,KAAK,OAAS,CAAE,QAAS,GAAO,MAAAA,CAAM,EACtC,KAAK,SAAS,sBAAsB,KAAMA,CAAK,CACnD,CACA,gBAAgBgC,EAAU,CACtB,IAAIvH,EACJ,KAAK,MAAQmG,GAAoB,SAChCnG,EAAK,KAAK,aAAe,MAAQA,IAAO,QAAkBA,EAAG,gBAAgB,UAAU,EACxF,KAAK,mBAAmB,EACxBwC,EAAS,mBAAoB,CACzB,OAAQ,KAAK,YACb,OAAQ,OAAO,OAAO,CAAE,eAAgB,IAAK,EAAG,KAAK,MAAM,CAC/D,CAAC,EACD,KAAK,SAAS,uBAAuB,IAAI,CAC7C,CACA,gBAAiB,CACb,GAAI,GAAC,KAAK,WAAa,CAAC,KAAK,cAE7B,GAAI,KAAK,UAAU,QAAQ,QAAQ,EAC/B,KAAK,mBAAqB,KAAK,UAAU,UACzC,KAAK,UAAU,UAAY,KAAK,oBAE3B,KAAK,UAAU,QAAQ,OAAO,EAAG,CACtC,IAAMiF,EAAQ,KAAK,UACnB,KAAK,mBAAqBA,EAAM,MAChCA,EAAM,MAAQ,KAAK,WACvB,EACJ,CACA,oBAAqB,CACjB,GAAI,GAAC,KAAK,WAAa,CAAC,KAAK,qBAE7B,GAAI,KAAK,UAAU,QAAQ,QAAQ,EAC/B,KAAK,UAAU,UAAY,KAAK,2BAE3B,KAAK,UAAU,QAAQ,OAAO,EAAG,CACtC,IAAMA,EAAQ,KAAK,UACnBA,EAAM,MAAQ,KAAK,kBACvB,EACJ,CACA,oBAAoBL,EAAS,CACzB,MAAO,CAACA,EAAQ,QAAU,KAAK,YACnC,CACA,kCAAkCA,EAAS,CACvC,MAAO,CAACA,EAAQ,QAAUnD,GAAa,oBAAqB,KAAK,UAAW,KAAK,WAAW,CAChG,CACA,IAAI,aAAc,CACd,IAAIjE,EACJ,OAAQA,EAAK,KAAK,aAAe,MAAQA,IAAO,OAAS,OAASA,EAAG,aAAa,yBAAyB,CAC/G,CACJ,EACA,SAAS4G,GAAcF,EAAa5H,EAAW,CAC3C,IAAM4I,EAAW,IAAI,SAAShB,CAAW,EACnCtH,EAA6DN,GAAU,aAAa,MAAM,EAC1FgB,EAA8DhB,GAAU,aAAa,OAAO,EAClG,OAAIM,GACAsI,EAAS,OAAOtI,EAAMU,GAAS,EAAE,EAE9B4H,CACX,CACA,SAASJ,GAAeK,EAAY,CAChC,GAAIA,GAAc,KAAM,CAEpB,IAAMC,GADU,SAAS,OAAS,SAAS,OAAO,MAAM,IAAI,EAAI,CAAC,GAC1C,KAAMA,GAAWA,EAAO,WAAWD,CAAU,CAAC,EACrE,GAAIC,EAAQ,CACR,IAAM9H,EAAQ8H,EAAO,MAAM,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,GAAG,EACjD,OAAO9H,EAAQ,mBAAmBA,CAAK,EAAI,MAC/C,CACJ,CACJ,CACA,SAAS0H,GAAiC3F,EAAU,CAChD,OAAOA,EAAS,YAAc,KAAO,CAACA,EAAS,UACnD,CACA,SAASgF,GAAqBvG,EAAKsF,EAAS,CACxC,IAAMiC,EAAe,IAAI,gBACzB,OAAW,CAACzI,EAAMU,CAAK,IAAK8F,EACpB9F,aAAiB,MAErB+H,EAAa,OAAOzI,EAAMU,CAAK,EAEnC,OAAAQ,EAAI,OAASuH,EAAa,SAAS,EAC5BvH,CACX,CAEA,IAAMwH,GAAN,KAAe,CACX,YAAYtI,EAAS,CACjB,KAAK,QAAUA,CACnB,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,QAAQ,cAAc,aACtC,CACA,IAAI,UAAW,CACX,MAAO,CAAC,GAAG,KAAK,QAAQ,QAAQ,CACpC,CACA,UAAU6B,EAAQ,CACd,OAAO,KAAK,oBAAoBA,CAAM,GAAK,IAC/C,CACA,oBAAoBA,EAAQ,CACxB,OAAOA,EAAS,KAAK,QAAQ,cAAc,QAAQA,gBAAqBA,KAAU,EAAI,IAC1F,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,WACxB,CACA,IAAI,2BAA4B,CAC5B,IAAM0G,EAAwB,wEAC9B,QAAWvI,KAAW,KAAK,QAAQ,iBAAiB,aAAa,EAC7D,GAAIA,EAAQ,QAAQuI,CAAqB,GAAK,KAC1C,OAAOvI,EAIf,OAAO,IACX,CACA,IAAI,mBAAoB,CACpB,OAAOwI,GAA0B,KAAK,OAAO,CACjD,CACA,wBAAwBC,EAAI,CACxB,OAAOC,GAAwB,KAAK,QAASD,CAAE,CACnD,CACA,kCAAkCE,EAAU,CACxC,IAAMC,EAAsB,CAAC,EAC7B,QAAWC,KAA2B,KAAK,kBAAmB,CAC1D,GAAM,CAAE,GAAAJ,CAAG,EAAII,EACTC,EAAsBH,EAAS,wBAAwBF,CAAE,EAC3DK,IACAF,EAAoBH,CAAE,EAAI,CAACI,EAAyBC,CAAmB,EAE/E,CACA,OAAOF,CACX,CACJ,EACA,SAASF,GAAwBK,EAAMN,EAAI,CACvC,OAAOM,EAAK,cAAc,IAAIN,yBAA0B,CAC5D,CACA,SAASD,GAA0BO,EAAM,CACrC,OAAOA,EAAK,iBAAiB,4BAA4B,CAC7D,CAEA,IAAMC,GAAN,KAAyB,CACrB,YAAYrD,EAAUsD,EAAa,CAC/B,KAAK,QAAU,GACf,KAAK,eAAiB,IAAM,CACxB,KAAK,YAAY,oBAAoB,SAAU,KAAK,cAAe,EAAK,EACxE,KAAK,YAAY,iBAAiB,SAAU,KAAK,cAAe,EAAK,CACzE,EACA,KAAK,cAAkB9I,GAAU,CAC7B,GAAI,CAACA,EAAM,iBAAkB,CACzB,IAAMX,EAAOW,EAAM,kBAAkB,gBAAkBA,EAAM,OAAS,OAChEb,EAAYa,EAAM,WAAa,OACjCX,GACA0J,GAA+B1J,EAAMF,CAAS,GAC9C6J,GAA8B3J,EAAMF,CAAS,GAC7C,KAAK,SAAS,eAAeE,EAAMF,CAAS,IAC5Ca,EAAM,eAAe,EACrBA,EAAM,yBAAyB,EAC/B,KAAK,SAAS,cAAcX,EAAMF,CAAS,EAEnD,CACJ,EACA,KAAK,SAAWqG,EAChB,KAAK,YAAcsD,CACvB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,YAAY,iBAAiB,SAAU,KAAK,eAAgB,EAAI,EACrE,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,KAAK,YAAY,oBAAoB,SAAU,KAAK,eAAgB,EAAI,EACxE,KAAK,QAAU,GAEvB,CACJ,EACA,SAASC,GAA+B1J,EAAMF,EAAW,CAErD,OADsEA,GAAU,aAAa,YAAY,GAAME,EAAK,aAAa,QAAQ,IACxH,QACrB,CACA,SAAS2J,GAA8B3J,EAAMF,EAAW,CACpD,GAA2DA,GAAU,aAAa,YAAY,GAAME,EAAK,aAAa,QAAQ,EAAG,CAC7H,IAAMO,EAAgET,GAAU,aAAa,YAAY,GAAME,EAAK,OACpH,QAAWQ,KAAW,SAAS,kBAAkBD,CAAM,EACnD,GAAIC,aAAmB,kBACnB,MAAO,GAEf,MAAO,EACX,KAEI,OAAO,EAEf,CAEA,IAAMoJ,GAAN,KAAW,CACP,YAAYzD,EAAU3F,EAAS,CAC3B,KAAK,qBAAwB6F,GAAW,CAAE,EAC1C,KAAK,2BAA8BA,GAAW,CAAE,EAChD,KAAK,SAAWF,EAChB,KAAK,QAAU3F,CACnB,CACA,eAAe6B,EAAQ,CACnB,IAAM7B,EAAU,KAAK,SAAS,oBAAoB6B,CAAM,EACpD7B,GACA,KAAK,gBAAgBA,CAAO,EAC5B,KAAK,aAAaA,CAAO,GAGzB,KAAK,iBAAiB,CAAE,EAAG,EAAG,EAAG,CAAE,CAAC,CAE5C,CACA,2BAA2B0B,EAAU,CACjC,KAAK,eAAeb,GAAUa,CAAQ,CAAC,CAC3C,CACA,gBAAgB1B,EAAS,CACrBA,EAAQ,eAAe,CAC3B,CACA,aAAaA,EAAS,CACdA,aAAmB,cACfA,EAAQ,aAAa,UAAU,EAC/BA,EAAQ,MAAM,GAGdA,EAAQ,aAAa,WAAY,IAAI,EACrCA,EAAQ,MAAM,EACdA,EAAQ,gBAAgB,UAAU,GAG9C,CACA,iBAAiB,CAAE,EAAAqJ,EAAG,EAAAC,CAAE,EAAG,CACvB,KAAK,WAAW,SAASD,EAAGC,CAAC,CACjC,CACA,aAAc,CACV,KAAK,iBAAiB,CAAE,EAAG,EAAG,EAAG,CAAE,CAAC,CACxC,CACA,IAAI,YAAa,CACb,OAAO,MACX,CACA,MAAM,OAAOC,EAAU,CACnB,GAAM,CAAE,UAAAC,EAAW,aAAAC,EAAc,YAAad,CAAS,EAAIY,EAC3D,GAAIE,EACA,GAAI,CACA,KAAK,cAAgB,IAAI,QAASpG,GAAa,KAAK,qBAAuBA,CAAQ,EACnF,KAAK,SAAWkG,EAChB,MAAM,KAAK,wBAAwBA,CAAQ,EAC3C,IAAMG,EAAqB,IAAI,QAASrG,GAAa,KAAK,2BAA6BA,CAAQ,EACzFsG,EAAU,CAAE,OAAQ,KAAK,2BAA4B,OAAQ,KAAK,SAAS,aAAc,EACvE,KAAK,SAAS,sBAAsBhB,EAAUgB,CAAO,GAEzE,MAAMD,EACV,MAAM,KAAK,eAAeH,CAAQ,EAClC,KAAK,SAAS,qBAAqBZ,EAAUa,CAAS,EACtD,KAAK,SAAS,0BAA0B,KAAK,OAAO,EACpD,KAAK,wBAAwBD,CAAQ,CACzC,QACA,CACI,OAAO,KAAK,SACZ,KAAK,qBAAqB,MAAS,EACnC,OAAO,KAAK,aAChB,MAGA,KAAK,WAAWA,EAAS,YAAY,CAE7C,CACA,WAAWK,EAAQ,CACf,KAAK,SAAS,gBAAgBA,CAAM,CACxC,CACA,MAAM,wBAAwBL,EAAU,CACpC,KAAK,cAAcA,EAAS,SAAS,EACrC,MAAMA,EAAS,gBAAgB,CACnC,CACA,cAAcC,EAAW,CACjBA,EACA,KAAK,QAAQ,aAAa,qBAAsB,EAAE,EAGlD,KAAK,QAAQ,gBAAgB,oBAAoB,CAEzD,CACA,MAAM,eAAeD,EAAU,CAC3B,MAAMA,EAAS,OAAO,CAC1B,CACA,wBAAwBA,EAAU,CAC9BA,EAAS,gBAAgB,CAC7B,CACJ,EAEMM,GAAN,cAAwBT,EAAK,CACzB,SAAU,CACN,KAAK,QAAQ,UAAY,4DAC7B,CACA,IAAI,UAAW,CACX,OAAO,IAAId,GAAS,KAAK,OAAO,CACpC,CACJ,EAEMwB,GAAN,KAAsB,CAClB,YAAYnE,EAAU3F,EAAS,CAC3B,KAAK,aAAgBG,GAAU,CACvB,KAAK,sBAAsBA,EAAM,MAAM,EACvC,KAAK,WAAaA,EAGlB,OAAO,KAAK,UAEpB,EACA,KAAK,YAAgBA,GAAU,CACvB,KAAK,YAAc,KAAK,sBAAsBA,EAAM,MAAM,GAAKA,EAAM,kBAAkB,SACnF,KAAK,SAAS,yBAAyBA,EAAM,OAAQA,EAAM,OAAO,IAAKA,EAAM,OAAO,aAAa,IACjG,KAAK,WAAW,eAAe,EAC/BA,EAAM,eAAe,EACrB,KAAK,SAAS,qBAAqBA,EAAM,OAAQA,EAAM,OAAO,IAAKA,EAAM,OAAO,aAAa,GAGrG,OAAO,KAAK,UAChB,EACA,KAAK,UAAc4J,GAAW,CAC1B,OAAO,KAAK,UAChB,EACA,KAAK,SAAWpE,EAChB,KAAK,QAAU3F,CACnB,CACA,OAAQ,CACJ,KAAK,QAAQ,iBAAiB,QAAS,KAAK,YAAY,EACxD,SAAS,iBAAiB,cAAe,KAAK,WAAW,EACzD,SAAS,iBAAiB,qBAAsB,KAAK,SAAS,CAClE,CACA,MAAO,CACH,KAAK,QAAQ,oBAAoB,QAAS,KAAK,YAAY,EAC3D,SAAS,oBAAoB,cAAe,KAAK,WAAW,EAC5D,SAAS,oBAAoB,qBAAsB,KAAK,SAAS,CACrE,CACA,sBAAsBD,EAAQ,CAC1B,IAAMC,EAAUD,aAAkB,QAAUA,EAASA,aAAkB,KAAOA,EAAO,cAAgB,KACrG,OAAOC,GAAWA,EAAQ,QAAQ,mBAAmB,GAAK,KAAK,OACnE,CACJ,EAEMgK,GAAN,KAAwB,CACpB,YAAYrE,EAAUsD,EAAa,CAC/B,KAAK,QAAU,GACf,KAAK,cAAgB,IAAM,CACvB,KAAK,YAAY,oBAAoB,QAAS,KAAK,aAAc,EAAK,EACtE,KAAK,YAAY,iBAAiB,QAAS,KAAK,aAAc,EAAK,CACvE,EACA,KAAK,aAAgB9I,GAAU,CAC3B,GAAIA,aAAiB,YAAc,KAAK,wBAAwBA,CAAK,EAAG,CACpE,IAAMJ,EAAUI,EAAM,cAAgBA,EAAM,aAAa,EAAE,CAAC,GAAMA,EAAM,OAClE8J,EAAO,KAAK,wBAAwBlK,CAAM,EAChD,GAAIkK,GAAQC,GAAoBD,CAAI,EAAG,CACnC,IAAMvI,EAAW,KAAK,mBAAmBuI,CAAI,EACzC,KAAK,SAAS,yBAAyBA,EAAMvI,EAAUvB,CAAK,IAC5DA,EAAM,eAAe,EACrB,KAAK,SAAS,uBAAuB8J,EAAMvI,CAAQ,EAE3D,CACJ,CACJ,EACA,KAAK,SAAWiE,EAChB,KAAK,YAAcsD,CACvB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,YAAY,iBAAiB,QAAS,KAAK,cAAe,EAAI,EACnE,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,KAAK,YAAY,oBAAoB,QAAS,KAAK,cAAe,EAAI,EACtE,KAAK,QAAU,GAEvB,CACA,wBAAwB9I,EAAO,CAC3B,MAAO,EAAGA,EAAM,QAAUA,EAAM,OAAO,mBACnCA,EAAM,kBACNA,EAAM,MAAQ,GACdA,EAAM,QACNA,EAAM,SACNA,EAAM,SACNA,EAAM,SACd,CACA,wBAAwBJ,EAAQ,CAC5B,OAAOsF,GAAuBtF,EAAQ,0CAA0C,CACpF,CACA,mBAAmBkK,EAAM,CACrB,OAAOtJ,EAAUsJ,EAAK,aAAa,MAAM,GAAK,EAAE,CACpD,CACJ,EACA,SAASC,GAAoBrI,EAAQ,CACjC,GAAIA,EAAO,aAAa,QAAQ,EAAG,CAC/B,QAAW7B,KAAW,SAAS,kBAAkB6B,EAAO,MAAM,EAC1D,GAAI7B,aAAmB,kBACnB,MAAO,GAEf,MAAO,EACX,KAEI,OAAO,EAEf,CAEA,IAAMmK,GAAN,KAA4B,CACxB,YAAYxE,EAAU3F,EAAS,CAC3B,KAAK,SAAW2F,EAChB,KAAK,gBAAkB,IAAIqE,GAAkB,KAAMhK,CAAO,CAC9D,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,CAC9B,CACA,yBAAyBiK,EAAMvI,EAAU0I,EAAe,CACpD,OAAQ,KAAK,SAAS,6BAA6BH,EAAMvI,EAAU0I,CAAa,GAC5EH,EAAK,aAAa,mBAAmB,CAC7C,CACA,uBAAuBA,EAAMvI,EAAU,CACnC,IAAMlC,EAAO,SAAS,cAAc,MAAM,EACpC6K,EAAO,SACb,OAAW,CAACzK,EAAMU,CAAK,IAAKoB,EAAS,aACjClC,EAAK,OAAO,OAAO,OAAO,SAAS,cAAc,OAAO,EAAG,CAAE,KAAA6K,EAAM,KAAAzK,EAAM,MAAAU,CAAM,CAAC,CAAC,EAErF,IAAMW,EAAS,OAAO,OAAOS,EAAU,CAAE,OAAQ,EAAG,CAAC,EACrDlC,EAAK,aAAa,aAAc,MAAM,EACtCA,EAAK,aAAa,SAAUyB,EAAO,IAAI,EACvCzB,EAAK,aAAa,SAAU,EAAE,EAC9B,IAAMiG,EAASwE,EAAK,aAAa,mBAAmB,EAChDxE,GACAjG,EAAK,aAAa,SAAUiG,CAAM,EACtC,IAAM6E,EAAaL,EAAK,aAAa,kBAAkB,EACnDK,GACA9K,EAAK,aAAa,mBAAoB8K,CAAU,EACpD,IAAMC,EAActF,GAAegF,CAAI,EACnCM,GACA/K,EAAK,aAAa,oBAAqB+K,CAAW,EACtD,IAAMC,EAAeP,EAAK,aAAa,oBAAoB,EACvDO,GACAhL,EAAK,aAAa,qBAAsBgL,CAAY,EACpCP,EAAK,aAAa,mBAAmB,GAErDzK,EAAK,aAAa,oBAAqB,EAAE,EAC7C,KAAK,SAAS,4BAA4ByK,EAAMvI,EAAUlC,CAAI,EAC9D,SAAS,KAAK,YAAYA,CAAI,EAC9BA,EAAK,iBAAiB,mBAAoB,IAAMA,EAAK,OAAO,EAAG,CAAE,KAAM,EAAK,CAAC,EAC7E,sBAAsB,IAAMA,EAAK,cAAc,CAAC,CACpD,CACJ,EAEMiL,GAAN,KAAY,CACR,aAAa,4BAA4B9E,EAAUiD,EAAqB8B,EAAU,CAC9E,IAAMC,EAAQ,IAAI,KAAKhF,EAAUiD,CAAmB,EACpD+B,EAAM,MAAM,EACZ,MAAMD,EAAS,EACfC,EAAM,MAAM,CAChB,CACA,YAAYhF,EAAUiD,EAAqB,CACvC,KAAK,SAAWjD,EAChB,KAAK,oBAAsBiD,CAC/B,CACA,OAAQ,CACJ,QAAWH,KAAM,KAAK,oBAAqB,CACvC,GAAM,CAACI,EAAyBC,CAAmB,EAAI,KAAK,oBAAoBL,CAAE,EAClF,KAAK,SAAS,cAAcI,EAAyBC,CAAmB,EACxE,KAAK,0CAA0CA,CAAmB,CACtE,CACJ,CACA,OAAQ,CACJ,QAAWL,KAAM,KAAK,oBAAqB,CACvC,GAAM,CAACI,CAAuB,EAAI,KAAK,oBAAoBJ,CAAE,EAC7D,KAAK,wCAAwCI,CAAuB,EACpE,KAAK,uCAAuCA,CAAuB,EACnE,KAAK,SAAS,aAAaA,CAAuB,CACtD,CACJ,CACA,0CAA0C+B,EAAkB,CACxD,IAAMC,EAAcC,GAAqCF,CAAgB,EACzEA,EAAiB,YAAYC,CAAW,CAC5C,CACA,wCAAwCD,EAAkB,CACtD,IAAMG,EAAQH,EAAiB,UAAU,EAAI,EAC7CA,EAAiB,YAAYG,CAAK,CACtC,CACA,uCAAuCH,EAAkB,CACrD,IAAMC,EAAc,KAAK,mBAAmBD,EAAiB,EAAE,EACLC,GAAY,YAAYD,CAAgB,CACtG,CACA,mBAAmBnC,EAAI,CACnB,OAAO,KAAK,aAAa,KAAMzI,GAAYA,EAAQ,SAAWyI,CAAE,CACpE,CACA,IAAI,cAAe,CACf,MAAO,CAAC,GAAG,SAAS,iBAAiB,iDAAiD,CAAC,CAC3F,CACJ,EACA,SAASqC,GAAqCF,EAAkB,CAC5D,IAAM5K,EAAU,SAAS,cAAc,MAAM,EAC7C,OAAAA,EAAQ,aAAa,OAAQ,6BAA6B,EAC1DA,EAAQ,aAAa,UAAW4K,EAAiB,EAAE,EAC5C5K,CACX,CAEA,IAAMgL,GAAN,KAAe,CACX,YAAYC,EAAiBC,EAAaC,EAAe3B,EAAW4B,EAAa,GAAM,CACnF,KAAK,cAAgB,KACrB,KAAK,gBAAkBH,EACvB,KAAK,YAAcC,EACnB,KAAK,UAAY1B,EACjB,KAAK,WAAa4B,EAClB,KAAK,cAAgBD,EACrB,KAAK,QAAU,IAAI,QAAQ,CAAC9H,EAASgI,IAAY,KAAK,mBAAqB,CAAE,QAAAhI,EAAS,OAAAgI,CAAO,CAAE,CACnG,CACA,IAAI,cAAe,CACf,MAAO,EACX,CACA,IAAI,cAAe,CAEnB,CACA,iBAAkB,CAElB,CACA,iBAAkB,CACV,KAAK,qBACL,KAAK,mBAAmB,QAAQ,EAChC,OAAO,KAAK,mBAEpB,CACA,MAAM,4BAA4BX,EAAU,CACxC,MAAMD,GAAM,4BAA4B,KAAM,KAAK,oBAAqBC,CAAQ,CACpF,CACA,gCAAiC,CAC7B,IAAM1K,EAAU,KAAK,kBAAkB,0BACnCsL,GAAmBtL,CAAO,GAC1BA,EAAQ,MAAM,CAEtB,CACA,cAAc6I,EAAyB,CAC/B,KAAK,eAELA,EAAwB,SAAS,KAAK,gBAAgB,aAAa,IACnE,KAAK,cAAgB,KAAK,gBAAgB,cAElD,CACA,aAAaA,EAAyB,CAC9BA,EAAwB,SAAS,KAAK,aAAa,GAAK,KAAK,yBAAyB,cACtF,KAAK,cAAc,MAAM,EACzB,KAAK,cAAgB,KAE7B,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,YAAY,YAAc,KAAK,YAAc,KAAK,eAClE,CACA,IAAI,gBAAiB,CACjB,OAAO,KAAK,gBAAgB,OAChC,CACA,IAAI,YAAa,CACb,OAAO,KAAK,YAAY,OAC5B,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,gBAAgB,kCAAkC,KAAK,WAAW,CAClF,CACJ,EACA,SAASyC,GAAmBtL,EAAS,CACjC,OAAOA,GAAW,OAAOA,EAAQ,OAAS,UAC9C,CAEA,IAAMuL,GAAN,cAA4BP,EAAS,CACjC,OAAO,cAAcQ,EAAgBC,EAAY,CAC7C,IAAIjL,EACJ,IAAMkL,EAAmB,SAAS,YAAY,EAC9CA,EAAiB,mBAAmBF,CAAc,EAClDE,EAAiB,eAAe,EAChC,IAAMC,EAAeF,EACfG,GAAepL,EAAKmL,EAAa,iBAAmB,MAAQnL,IAAO,OAAS,OAASA,EAAG,YAAY,EACtGoL,IACAA,EAAY,mBAAmBD,CAAY,EAC3CH,EAAe,YAAYI,EAAY,gBAAgB,CAAC,EAEhE,CACA,YAAYjG,EAAUsF,EAAiBC,EAAaC,EAAe3B,EAAW4B,EAAa,GAAM,CAC7F,MAAMH,EAAiBC,EAAaC,EAAe3B,EAAW4B,CAAU,EACxE,KAAK,SAAWzF,CACpB,CACA,IAAI,cAAe,CACf,MAAO,EACX,CACA,MAAM,QAAS,CACX,MAAMvC,GAAmB,EACzB,KAAK,4BAA4B,IAAM,CACnC,KAAK,iBAAiB,CAC1B,CAAC,EACD,KAAK,oBAAoB,EACzB,MAAMA,GAAmB,EACzB,KAAK,+BAA+B,EACpC,MAAMA,GAAmB,EACzB,KAAK,uBAAuB,CAChC,CACA,kBAAmB,CACf,KAAK,SAAS,gBAAgB,KAAK,eAAgB,KAAK,UAAU,EAClE,KAAK,cAAc,KAAK,eAAgB,KAAK,UAAU,CAC3D,CACA,qBAAsB,CAClB,GAAI,KAAK,eAAe,YAAc,KAAK,WAAW,WAAY,CAC9D,IAAMpD,EAAU,KAAK,eAAe,kBAC9B6L,EAAQC,GAA0B,KAAK,eAAe,aAAa,uBAAuB,EAAG,KAAK,EAClGC,EAAWC,GAAmB,KAAK,eAAe,aAAa,0BAA0B,EAAG,MAAM,EACxG,GAAIhM,EACA,OAAAA,EAAQ,eAAe,CAAE,MAAA6L,EAAO,SAAAE,CAAS,CAAC,EACnC,EAEf,CACA,MAAO,EACX,CACA,wBAAyB,CACrB,QAAWrF,KAAsB,KAAK,kBAAmB,CACrD,IAAMuF,EAAyB3J,GAAsBoE,CAAkB,EACvEA,EAAmB,YAAYuF,CAAsB,CACzD,CACJ,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,eAAe,iBAAiB,QAAQ,CACxD,CACJ,EACA,SAASH,GAA0BxL,EAAO4L,EAAc,CACpD,OAAI5L,GAAS,OAASA,GAAS,SAAWA,GAAS,UAAYA,GAAS,UAC7DA,EAGA4L,CAEf,CACA,SAASF,GAAmB1L,EAAO4L,EAAc,CAC7C,OAAI5L,GAAS,QAAUA,GAAS,SACrBA,EAGA4L,CAEf,CAEA,IAAMC,EAAN,KAAkB,CACd,WAAW,YAAa,CACpB,OAAO1I;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAUG0I,EAAY;AAAA,oBACVA,EAAY,kBAAoB,OAAOA,EAAY,kBAAoB;AAAA;AAAA;AAAA,KAIvF,CACA,aAAc,CACV,KAAK,OAAS,GACd,KAAK,MAAQ,EACb,KAAK,QAAU,GACf,KAAK,QAAU,IAAM,CACjB,KAAK,SAAS,KAAK,MAAQ,KAAK,OAAO,EAAI,GAAG,CAClD,EACA,KAAK,kBAAoB,KAAK,wBAAwB,EACtD,KAAK,gBAAkB,KAAK,sBAAsB,EAClD,KAAK,yBAAyB,EAC9B,KAAK,SAAS,CAAC,CACnB,CACA,MAAO,CACE,KAAK,UACN,KAAK,QAAU,GACf,KAAK,uBAAuB,EAC5B,KAAK,eAAe,EAE5B,CACA,MAAO,CACC,KAAK,SAAW,CAAC,KAAK,SACtB,KAAK,OAAS,GACd,KAAK,oBAAoB,IAAM,CAC3B,KAAK,yBAAyB,EAC9B,KAAK,cAAc,EACnB,KAAK,QAAU,GACf,KAAK,OAAS,EAClB,CAAC,EAET,CACA,SAAS7L,EAAO,CACZ,KAAK,MAAQA,EACb,KAAK,QAAQ,CACjB,CACA,0BAA2B,CACvB,SAAS,KAAK,aAAa,KAAK,kBAAmB,SAAS,KAAK,UAAU,CAC/E,CACA,wBAAyB,CACrB,KAAK,gBAAgB,MAAM,MAAQ,IACnC,KAAK,gBAAgB,MAAM,QAAU,IACrC,SAAS,gBAAgB,aAAa,KAAK,gBAAiB,SAAS,IAAI,EACzE,KAAK,QAAQ,CACjB,CACA,oBAAoBoK,EAAU,CAC1B,KAAK,gBAAgB,MAAM,QAAU,IACrC,WAAWA,EAAUyB,EAAY,kBAAoB,GAAG,CAC5D,CACA,0BAA2B,CACnB,KAAK,gBAAgB,YACrB,SAAS,gBAAgB,YAAY,KAAK,eAAe,CAEjE,CACA,gBAAiB,CACR,KAAK,kBACN,KAAK,gBAAkB,OAAO,YAAY,KAAK,QAASA,EAAY,iBAAiB,EAE7F,CACA,eAAgB,CACZ,OAAO,cAAc,KAAK,eAAe,EACzC,OAAO,KAAK,eAChB,CACA,SAAU,CACN,sBAAsB,IAAM,CACxB,KAAK,gBAAgB,MAAM,MAAQ,GAAG,GAAK,KAAK,MAAQ,KAC5D,CAAC,CACL,CACA,yBAA0B,CACtB,IAAMnM,EAAU,SAAS,cAAc,OAAO,EAC9C,OAAAA,EAAQ,KAAO,WACfA,EAAQ,YAAcmM,EAAY,WAC9B,KAAK,WACLnM,EAAQ,MAAQ,KAAK,UAElBA,CACX,CACA,uBAAwB,CACpB,IAAMA,EAAU,SAAS,cAAc,KAAK,EAC5C,OAAAA,EAAQ,UAAY,qBACbA,CACX,CACA,IAAI,UAAW,CACX,OAAOyC,GAAe,WAAW,CACrC,CACJ,EACA0J,EAAY,kBAAoB,IAEhC,IAAMC,GAAN,cAA2B9D,EAAS,CAChC,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,mBAAqB,KAAK,SAC1B,OAAQtI,GAAY,CAACqM,GAAkBrM,CAAO,CAAC,EAC/C,IAAKA,GAAYsM,GAAoBtM,CAAO,CAAC,EAC7C,OAAO,CAACiE,EAAQjE,IAAY,CAC7B,GAAM,CAAE,UAAAuM,CAAU,EAAIvM,EAChBwM,EAAUD,KAAatI,EACvBA,EAAOsI,CAAS,EAChB,CACE,KAAME,GAAYzM,CAAO,EACzB,QAAS0M,GAAiB1M,CAAO,EACjC,SAAU,CAAC,CACf,EACJ,OAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGiE,CAAM,EAAG,CAAE,CAACsI,CAAS,EAAG,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGC,CAAO,EAAG,CAAE,SAAU,CAAC,GAAGA,EAAQ,SAAUxM,CAAO,CAAE,CAAC,CAAE,CAAC,CAC5J,EAAG,CAAC,CAAC,CACT,CACA,IAAI,yBAA0B,CAC1B,OAAO,OAAO,KAAK,KAAK,kBAAkB,EACrC,OAAQuM,GAAc,KAAK,mBAAmBA,CAAS,EAAE,OAAO,EAChE,KAAK,EAAE,CAChB,CACA,+BAA+B5D,EAAU,CACrC,OAAO,KAAK,qCAAqC,SAAUA,CAAQ,CACvE,CACA,mCAAmCA,EAAU,CACzC,OAAO,KAAK,qCAAqC,aAAcA,CAAQ,CAC3E,CACA,qCAAqCgE,EAAahE,EAAU,CACxD,OAAO,OAAO,KAAK,KAAK,kBAAkB,EACrC,OAAQ4D,GAAc,EAAEA,KAAa5D,EAAS,mBAAmB,EACjE,IAAK4D,GAAc,KAAK,mBAAmBA,CAAS,CAAC,EACrD,OAAO,CAAC,CAAE,KAAAlC,CAAK,IAAMA,GAAQsC,CAAW,EACxC,IAAI,CAAC,CAAE,SAAU,CAAC3M,CAAO,CAAE,IAAMA,CAAO,CACjD,CACA,IAAI,qBAAsB,CACtB,OAAO,OAAO,KAAK,KAAK,kBAAkB,EAAE,OAAO,CAACiE,EAAQsI,IAAc,CACtE,GAAM,CAAE,KAAAlC,EAAM,QAAAuC,EAAS,SAAApI,CAAS,EAAI,KAAK,mBAAmB+H,CAAS,EACrE,OAAIlC,GAAQ,MAAQ,CAACuC,EACV,CAAC,GAAG3I,EAAQ,GAAGO,CAAQ,EAEzBA,EAAS,OAAS,EAChB,CAAC,GAAGP,EAAQ,GAAGO,EAAS,MAAM,CAAC,CAAC,EAGhCP,CAEf,EAAG,CAAC,CAAC,CACT,CACA,aAAarE,EAAM,CACf,IAAMI,EAAU,KAAK,sBAAsBJ,CAAI,EAC/C,OAAOI,EAAUA,EAAQ,aAAa,SAAS,EAAI,IACvD,CACA,sBAAsBJ,EAAM,CACxB,OAAO,OAAO,KAAK,KAAK,kBAAkB,EAAE,OAAO,CAACqE,EAAQsI,IAAc,CACtE,GAAM,CAAE,SAAU,CAACvM,CAAO,CAAG,EAAI,KAAK,mBAAmBuM,CAAS,EAClE,OAAOM,GAA6B7M,EAASJ,CAAI,EAAII,EAAUiE,CACnE,EAAG,MAAS,CAChB,CACJ,EACA,SAASwI,GAAYzM,EAAS,CAC1B,GAAI8M,GAAgB9M,CAAO,EACvB,MAAO,SAEN,GAAI+M,GAAoB/M,CAAO,EAChC,MAAO,YAEf,CACA,SAAS0M,GAAiB1M,EAAS,CAC/B,OAAOA,EAAQ,aAAa,kBAAkB,GAAK,QACvD,CACA,SAAS8M,GAAgB9M,EAAS,CAE9B,OADgBA,EAAQ,WACN,QACtB,CACA,SAASqM,GAAkBrM,EAAS,CAEhC,OADgBA,EAAQ,WACN,UACtB,CACA,SAAS+M,GAAoB/M,EAAS,CAClC,IAAMgN,EAAUhN,EAAQ,UACxB,OAAOgN,GAAW,SAAYA,GAAW,QAAUhN,EAAQ,aAAa,KAAK,GAAK,YACtF,CACA,SAAS6M,GAA6B7M,EAASJ,EAAM,CAEjD,OADgBI,EAAQ,WACN,QAAUA,EAAQ,aAAa,MAAM,GAAKJ,CAChE,CACA,SAAS0M,GAAoBtM,EAAS,CAClC,OAAIA,EAAQ,aAAa,OAAO,GAC5BA,EAAQ,aAAa,QAAS,EAAE,EAE7BA,CACX,CAEA,IAAMiN,EAAN,cAA2B3E,EAAS,CAChC,OAAO,eAAexF,EAAO,GAAI,CAC7B,OAAO,KAAK,aAAaU,GAAkBV,CAAI,CAAC,CACpD,CACA,OAAO,YAAY9C,EAAS,CACxB,OAAO,KAAK,aAAaA,EAAQ,aAAa,CAClD,CACA,OAAO,aAAa,CAAE,KAAAkN,EAAM,KAAAtH,CAAK,EAAG,CAChC,OAAO,IAAI,KAAKA,EAAM,IAAIwG,GAAac,CAAI,CAAC,CAChD,CACA,YAAYlN,EAASmN,EAAc,CAC/B,MAAMnN,CAAO,EACb,KAAK,aAAemN,CACxB,CACA,OAAQ,CACJ,IAAMC,EAAgB,KAAK,QAAQ,UAAU,EAAI,EAC3CC,EAAiB,KAAK,QAAQ,iBAAiB,QAAQ,EACvDC,EAAuBF,EAAc,iBAAiB,QAAQ,EACpE,OAAW,CAACG,EAAOC,CAAM,IAAKH,EAAe,QAAQ,EAAG,CACpD,IAAMtC,EAAQuC,EAAqBC,CAAK,EACxC,QAAWE,KAAU1C,EAAM,gBACvB0C,EAAO,SAAW,GACtB,QAAWA,KAAUD,EAAO,gBACxBzC,EAAM,QAAQ0C,EAAO,KAAK,EAAE,SAAW,EAC/C,CACA,QAAWC,KAAuBN,EAAc,iBAAiB,wBAAwB,EACrFM,EAAoB,MAAQ,GAEhC,OAAO,IAAIT,EAAaG,EAAe,KAAK,YAAY,CAC5D,CACA,IAAI,aAAc,CACd,OAAO,KAAK,aAAa,OAC7B,CACA,IAAI,cAAe,CACf,IAAI5M,EACJ,IAAMmN,GAAQnN,EAAK,KAAK,WAAW,MAAM,KAAO,MAAQA,IAAO,OAASA,EAAK,IAC7E,OAAOG,EAAUgN,CAAI,CACzB,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,WAAW,eAAe,CAC1C,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,mBAAqB,YACrC,CACA,IAAI,aAAc,CACd,OAAO,KAAK,mBAAqB,UACrC,CACA,IAAI,aAAc,CACd,OAAO,KAAK,WAAW,eAAe,GAAK,QAC/C,CACA,WAAW/N,EAAM,CACb,OAAO,KAAK,aAAa,aAAa,SAASA,GAAM,CACzD,CACJ,EAEIgO,IACH,SAAUA,EAAc,CACrBA,EAAa,WAAgB,aAC7BA,EAAa,aAAkB,eAC/BA,EAAa,WAAgB,aAC7BA,EAAa,SAAc,UAC/B,GAAGA,KAAiBA,GAAe,CAAC,EAAE,EACtC,IAAIC,GACH,SAAUA,EAAY,CACnBA,EAAW,YAAiB,cAC5BA,EAAW,QAAa,UACxBA,EAAW,SAAc,WACzBA,EAAW,OAAY,SACvBA,EAAW,UAAe,WAC9B,GAAGA,IAAeA,EAAa,CAAC,EAAE,EAClC,IAAMC,GAAiB,CACnB,OAAQ,UACR,eAAgB,GAChB,oBAAqB,IAAM,CAAE,EAC7B,WAAY,GACZ,cAAe,GACf,oBAAqB,GACrB,sBAAuB,EAC3B,EACIC,IACH,SAAUA,EAAkB,CACzBA,EAAiBA,EAAiB,eAAoB,CAAC,EAAI,iBAC3DA,EAAiBA,EAAiB,eAAoB,EAAE,EAAI,iBAC5DA,EAAiBA,EAAiB,oBAAyB,EAAE,EAAI,qBACrE,GAAGA,KAAqBA,GAAmB,CAAC,EAAE,EAC9C,IAAMC,GAAN,KAAY,CACR,YAAYrI,EAAUjE,EAAUuM,EAAuBtE,EAAU,CAAC,EAAG,CACjE,KAAK,WAAaxF,GAAK,EACvB,KAAK,cAAgB,CAAC,EACtB,KAAK,iBAAmB,GACxB,KAAK,eAAiB,GACtB,KAAK,SAAW,GAChB,KAAK,oBAAsB,GAC3B,KAAK,sBAAwB,GAC7B,KAAK,eAAiB,GACtB,KAAK,MAAQ0J,EAAW,YACxB,KAAK,SAAWlI,EAChB,KAAK,SAAWjE,EAChB,KAAK,sBAAwBuM,GAAyB9J,GAAK,EAC3D,GAAM,CAAE,OAAAlD,EAAQ,eAAAiN,EAAgB,SAAAC,EAAU,SAAAxF,EAAU,aAAAyF,EAAc,SAAA/L,EAAU,oBAAAgM,EAAqB,WAAAjD,EAAY,cAAAkD,EAAe,oBAAAC,EAAqB,sBAAAC,CAAuB,EAAI,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGV,EAAc,EAAGnE,CAAO,EACpO,KAAK,OAAS1I,EACd,KAAK,eAAiBiN,EACtB,KAAK,SAAWC,EAChB,KAAK,SAAWxF,EAChB,KAAK,aAAeyF,EACpB,KAAK,SAAW/L,EAChB,KAAK,WAAa,KAAK,SAAS,6BAA6B,KAAK,SAAU,KAAK,MAAM,EACvF,KAAK,oBAAsBgM,EAC3B,KAAK,WAAajD,EAClB,KAAK,cAAgBkD,EACrB,KAAK,SAAW,CAAClD,EACjB,KAAK,oBAAsBmD,EAC3B,KAAK,sBAAwBC,CACjC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,SAAS,OACzB,CACA,IAAI,MAAO,CACP,OAAO,KAAK,SAAS,IACzB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,SAAS,OACzB,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,QAAQ,gCAAgC,KAAK,qBAAqB,CAClF,CACA,IAAI,QAAS,CACT,OAAO,KAAK,UAChB,CACA,OAAQ,CACA,KAAK,OAASX,EAAW,cACzB,KAAK,mBAAmBD,GAAa,UAAU,EAC/C,KAAK,MAAQC,EAAW,QACxB,KAAK,QAAQ,aAAa,IAAI,EAC9B,KAAK,SAAS,aAAa,IAAI,EAEvC,CACA,QAAS,CACD,KAAK,OAASA,EAAW,UACrB,KAAK,SACL,KAAK,QAAQ,OAAO,EAExB,KAAK,aAAa,EAClB,KAAK,MAAQA,EAAW,SAEhC,CACA,UAAW,CACH,KAAK,OAASA,EAAW,UACzB,KAAK,mBAAmBD,GAAa,QAAQ,EAC7C,KAAK,MAAQC,EAAW,UACxB,KAAK,eAAe,EACf,KAAK,mBACN,KAAK,QAAQ,eAAe,IAAI,EAChC,KAAK,SAAS,eAAe,IAAI,GAG7C,CACA,MAAO,CACC,KAAK,OAASA,EAAW,UACzB,KAAK,MAAQA,EAAW,OACxB,KAAK,QAAQ,YAAY,IAAI,EAErC,CACA,eAAgB,CACZ,IAAIrN,EACJ,GAAI,CAAC,KAAK,gBAAkB,KAAK,cAAe,CAC5C,IAAMiO,EAAmB,KAAK,SAAS,SAAWjO,EAAK,KAAK,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,MAAQ,UAAY,KAAK,OACjIiF,EAASV,GAA0B0J,CAAgB,EACzD,KAAK,QAAQ,OAAOhJ,EAAQ,KAAK,SAAU,KAAK,qBAAqB,EACrE,KAAK,eAAiB,EAC1B,CACJ,CACA,cAAe,CACP,KAAK,qBAAqB,EAC1B,KAAK,gBAAgB,EAEhB,KAAK,mBAAmB,GAAK,CAAC,KAAK,UACxC,KAAK,QAAU,IAAIC,GAAa,KAAMH,EAAY,IAAK,KAAK,QAAQ,EACpE,KAAK,QAAQ,QAAQ,EAE7B,CACA,iBAAkB,CACV,KAAK,WACL,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EAE3B,CACA,cAAe,CACX,KAAK,mBAAmBqI,GAAa,YAAY,EACjD,KAAK,QAAQ,oBAAoB,IAAI,CACzC,CACA,eAAevL,EAAW,KAAK,SAAU,CAErC,GADA,KAAK,SAAWA,EACZA,EAAU,CACV,GAAM,CAAE,WAAAqM,CAAW,EAAIrM,EACnBsM,GAAaD,CAAU,EACvB,KAAK,QAAQ,sBAAsB,IAAI,EAGvC,KAAK,QAAQ,iCAAiC,KAAMA,CAAU,CAEtE,CACJ,CACA,eAAgB,CACZ,KAAK,mBAAmBd,GAAa,UAAU,EAC/C,KAAK,QAAQ,qBAAqB,IAAI,CAC1C,CACA,cAAe,CACX,GAAI,KAAK,SAAU,CACf,GAAM,CAAE,WAAAc,EAAY,aAAAE,CAAa,EAAI,KAAK,SAC1C,KAAK,OAAO,SAAY,CAChB,KAAK,qBACL,KAAK,cAAc,EACnB,KAAK,KAAK,eACV,MAAM,KAAK,KAAK,cAChBD,GAAaD,CAAU,GAAKE,GAAgB,MAC5C,MAAM,KAAK,KAAK,WAAW3B,EAAa,eAAe2B,CAAY,EAAG,GAAO,KAAK,WAAY,IAAI,EAClG,KAAK,cAAc,EACnB,KAAK,QAAQ,cAAc,IAAI,EAC/B,KAAK,SAAS,IAGd,MAAM,KAAK,KAAK,YAAY3B,EAAa,eAAe2B,CAAY,EAAG,IAAI,EAC3E,KAAK,QAAQ,cAAc,IAAI,EAC/B,KAAK,KAAK,EAElB,CAAC,CACL,CACJ,CACA,mBAAoB,CAChB,IAAMjG,EAAW,KAAK,KAAK,6BAA6B,KAAK,QAAQ,GAAK,KAAK,qBAAqB,EACpG,GAAIA,IAAa,CAAC9H,GAAU,KAAK,QAAQ,GAAK8H,EAAS,UAAU9H,GAAU,KAAK,QAAQ,CAAC,KACjF,KAAK,QAAU,WAAa8H,EAAS,eACrC,OAAOA,CAGnB,CACA,sBAAuB,CACnB,GAAI,KAAK,aACL,OAAOsE,EAAa,eAAe,KAAK,YAAY,CAE5D,CACA,mBAAoB,CAChB,OAAO,KAAK,kBAAkB,GAAK,IACvC,CACA,oBAAqB,CACjB,IAAMtE,EAAW,KAAK,kBAAkB,EACxC,GAAIA,EAAU,CACV,IAAMa,EAAY,KAAK,mBAAmB,EAC1C,KAAK,OAAO,SAAY,CACpB,KAAK,cAAc,EACf,KAAK,WACL,KAAK,QAAQ,cAAc,IAAI,GAG3B,KAAK,KAAK,eACV,MAAM,KAAK,KAAK,cACpB,MAAM,KAAK,KAAK,WAAWb,EAAUa,EAAW,KAAK,WAAY,IAAI,EACrE,KAAK,cAAc,EACnB,KAAK,QAAQ,cAAc,IAAI,EAC1BA,GACD,KAAK,SAAS,EAG1B,CAAC,CACL,CACJ,CACA,gBAAiB,CACb,IAAIhJ,EACA,KAAK,sBAAwB,CAAC,KAAK,mBAAsB,GAAAA,EAAK,KAAK,YAAc,MAAQA,IAAO,SAAkBA,EAAG,cACrH,KAAK,QAAQ,wBAAwB,KAAK,qBAAsB,CAC5D,OAAQ,UACR,SAAU,KAAK,SACf,oBAAqB,GACrB,WAAY,EAChB,CAAC,EACD,KAAK,iBAAmB,GAEhC,CACA,oBAAqB,CACb,KAAK,YACL,KAAK,OAAO,SAAY,CACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,KAAK,QAAQ,cAAc,IAAI,CACnC,CAAC,CAET,CACA,eAAeoH,EAAS,CAChB,KAAK,uBACLA,EAAQ,mBAAmBtB,EAAc,WAAW,CAE5D,CACA,gBAAiB,CACb,KAAK,aAAa,CACtB,CACA,iCAAiCyB,EAAU8G,EAAW,CAAE,CACxD,MAAM,6BAA6BjH,EAASvF,EAAU,CAClD,IAAMuM,EAAe,MAAMvM,EAAS,aAC9B,CAAE,WAAAyM,EAAY,WAAAJ,CAAW,EAAIrM,EAC/BuM,GAAgB,KAChB,KAAK,eAAe,CAChB,WAAYb,GAAiB,oBAC7B,WAAAe,CACJ,CAAC,GAGD,KAAK,qBAAuBzM,EAAS,WAAaA,EAAS,SAAW,OACtE,KAAK,eAAe,CAAE,WAAYqM,EAAY,aAAAE,EAAc,WAAAE,CAAW,CAAC,EAEhF,CACA,MAAM,0BAA0BlH,EAASvF,EAAU,CAC/C,IAAMuM,EAAe,MAAMvM,EAAS,aAC9B,CAAE,WAAAyM,EAAY,WAAAJ,CAAW,EAAIrM,EAC/BuM,GAAgB,KAChB,KAAK,eAAe,CAChB,WAAYb,GAAiB,oBAC7B,WAAAe,CACJ,CAAC,EAGD,KAAK,eAAe,CAAE,WAAYJ,EAAY,aAAAE,EAAc,WAAAE,CAAW,CAAC,CAEhF,CACA,eAAe/G,EAAUgH,EAAQ,CAC7B,KAAK,eAAe,CAChB,WAAYhB,GAAiB,eAC7B,WAAY,EAChB,CAAC,CACL,CACA,iBAAkB,CACd,KAAK,cAAc,CACvB,CACA,eAAgB,CACR,CAAC,KAAK,UAAY,CAAC,KAAK,KAAK,gBACzB,KAAK,QAAU,UACf,KAAK,yBAAyB,GAAK,KAAK,eAAe,GAAK,KAAK,KAAK,YAAY,EAGlF,KAAK,eAAe,GAAK,KAAK,KAAK,YAAY,EAE/C,KAAK,YACL,KAAK,SAAS,gCAAgC,KAAK,KAAK,qBAAsB,KAAK,QAAQ,EAE/F,KAAK,SAAW,GAExB,CACA,0BAA2B,CACvB,GAAM,CAAE,eAAAiB,CAAe,EAAI,KAAK,gBAChC,GAAIA,EACA,YAAK,KAAK,iBAAiBA,CAAc,EAClC,EAEf,CACA,gBAAiB,CACb,IAAMnN,EAAShB,GAAU,KAAK,QAAQ,EACtC,GAAIgB,GAAU,KACV,YAAK,KAAK,eAAeA,CAAM,EACxB,EAEf,CACA,mBAAmBoN,EAAQ,CACvB,KAAK,cAAcA,CAAM,EAAI,IAAI,KAAK,EAAE,QAAQ,CACpD,CACA,kBAAmB,CACf,OAAO,OAAO,OAAO,CAAC,EAAG,KAAK,aAAa,CAC/C,CACA,0BAA0BhO,EAAQ,CAC9B,OAAQA,EAAQ,CACZ,IAAK,UACD,OAAO,QAAQ,aACnB,IAAK,UACL,IAAK,UACD,OAAO,QAAQ,SACvB,CACJ,CACA,sBAAuB,CACnB,OAAO,OAAO,KAAK,UAAY,QACnC,CACA,oBAAqB,CACjB,OAAI,KAAK,WACE,GAEF,KAAK,QAAU,UACb,CAAC,KAAK,kBAAkB,EAGxB,KAAK,UAEpB,CACA,eAAgB,CACP,KAAK,iBACN,KAAK,KAAK,cAAc,KAAK,QAAQ,EAAE,KAAM0H,GAAaA,GAAY,KAAK,oBAAoBA,CAAQ,CAAC,EACxG,KAAK,eAAiB,GAE9B,CACA,MAAM,OAAO+B,EAAU,CACnB,KAAK,aAAa,EAClB,MAAM,IAAI,QAASrH,GAAY,CAC3B,KAAK,MAAQ,sBAAsB,IAAMA,EAAQ,CAAC,CACtD,CAAC,EACD,MAAMqH,EAAS,EACf,OAAO,KAAK,KAChB,CACA,cAAe,CACP,KAAK,QACL,qBAAqB,KAAK,KAAK,EAC/B,OAAO,KAAK,MAEpB,CACJ,EACA,SAASiE,GAAaD,EAAY,CAC9B,OAAOA,GAAc,KAAOA,EAAa,GAC7C,CAEA,IAAMQ,GAAN,KAAqB,CACjB,YAAYC,EAAS,CACjB,KAAK,YAAc,IAAIhD,EACvB,KAAK,gBAAkB,IAAM,CACzB,KAAK,YAAY,KAAK,CAC1B,EACA,KAAK,QAAUgD,CACnB,CACA,wBAAwBzN,EAAUiI,EAAS,CACvC,KAAK,UAAU,WAAWjI,EAA6DiI,GAAQ,uBAA0BxF,GAAK,EAAGwF,CAAO,CAC5I,CACA,aAAayF,EAAO,CAChB,KAAK,SAAWA,EAAM,SACtBA,EAAM,mBAAmB,EACzBA,EAAM,aAAa,EACnBA,EAAM,mBAAmB,CAC7B,CACA,oBAAoBA,EAAO,CACvB,KAAK,YAAY,SAAS,CAAC,EACvBA,EAAM,kBAAkB,GAAKA,EAAM,QAAU,UAC7C,KAAK,+BAA+B,EAGpC,KAAK,gBAAgB,CAE7B,CACA,sBAAsBA,EAAO,CACzBA,EAAM,aAAa,CACvB,CACA,iCAAiCA,EAAOV,EAAY,CAChD,OAAQA,EAAY,CAChB,KAAKX,GAAiB,eACtB,KAAKA,GAAiB,eACtB,KAAKA,GAAiB,oBAClB,OAAO,KAAK,OAAO,CACf,OAAQ,iBACR,QAAS,CACL,WAAAW,CACJ,CACJ,CAAC,EACL,QACI,OAAOU,EAAM,aAAa,CAClC,CACJ,CACA,qBAAqBC,EAAQ,CACzB,KAAK,YAAY,SAAS,CAAC,EAC3B,KAAK,qBAAqB,CAC9B,CACA,eAAeA,EAAQ,CAAE,CACzB,gBAAgBzF,EAAQ,CACpB,KAAK,OAAOA,CAAM,CACtB,CACA,YAAYyF,EAAQ,CAAE,CACtB,cAAcA,EAAQ,CAAE,CACxB,sBAAsBC,EAAiB,CACnC,KAAK,YAAY,SAAS,CAAC,EAC3B,KAAK,8BAA8B,CACvC,CACA,uBAAuBA,EAAiB,CACpC,KAAK,YAAY,SAAS,CAAC,EAC3B,KAAK,oBAAoB,CAC7B,CACA,gCAAiC,CAC7B,KAAK,wBAA0B,OAAO,WAAW,KAAK,gBAAiB,KAAK,QAAQ,gBAAgB,CACxG,CACA,sBAAuB,CACnB,KAAK,YAAY,KAAK,EAClB,KAAK,yBAA2B,OAChC,OAAO,aAAa,KAAK,uBAAuB,EAChD,OAAO,KAAK,wBAEpB,CACA,+BAAgC,CACxB,KAAK,wBAA0B,OAC/B,KAAK,uBAAyB,OAAO,WAAW,KAAK,gBAAiB,KAAK,QAAQ,gBAAgB,EAE3G,CACA,qBAAsB,CAClB,KAAK,YAAY,KAAK,EAClB,KAAK,wBAA0B,OAC/B,OAAO,aAAa,KAAK,sBAAsB,EAC/C,OAAO,KAAK,uBAEpB,CACA,OAAO1F,EAAQ,CACX,IAAIpJ,EACJwC,EAAS,eAAgB,CAAE,OAAQ4G,CAAO,CAAC,EAC3C,OAAO,SAAS,OAASpJ,EAAK,KAAK,YAAc,MAAQA,IAAO,OAAS,OAASA,EAAG,SAAS,IAAM,OAAO,SAAS,IACxH,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,QAAQ,SACxB,CACJ,EAEM+O,GAAN,KAAoB,CAChB,aAAc,CACV,KAAK,SAAW,yBAChB,KAAK,mBAAqB,2BAC1B,KAAK,QAAU,GACf,KAAK,wBAA4BxF,GAAW,CACxC,QAAW/J,KAAW,KAAK,kBACvBA,EAAQ,OAAO,CAEvB,CACJ,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,iBAAiB,qBAAsB,KAAK,wBAAyB,EAAK,EAElF,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,oBAAoB,qBAAsB,KAAK,wBAAyB,EAAK,EAErF,CACA,IAAI,mBAAoB,CACpB,MAAO,CAAC,GAAG,SAAS,iBAAiB,KAAK,QAAQ,EAAG,GAAG,KAAK,gCAAgC,CACjG,CACA,IAAI,kCAAmC,CACnC,IAAMwE,EAAW,SAAS,iBAAiB,KAAK,kBAAkB,EAClE,OAAIA,EAAS,QACT,QAAQ,KAAK,OAAO,KAAK,0FAA0F,KAAK,mBAAmB,EAExI,CAAC,GAAGA,CAAQ,CACvB,CACJ,EAEMgL,GAAN,KAAsB,CAClB,YAAYL,EAASnP,EAAS,CAC1B,KAAK,QAAUmP,EACf,KAAK,QAAUnP,EACf,KAAK,gBAAkB,IAAI8J,GAAgB,KAAM9J,CAAO,EACxD,KAAK,mBAAqB,IAAIgJ,GAAmB,KAAMhJ,CAAO,CAClE,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,EAC3B,KAAK,mBAAmB,MAAM,CAClC,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,EAC1B,KAAK,mBAAmB,KAAK,CACjC,CACA,yBAAyBA,EAASyP,EAAW1F,EAAQ,CACjD,OAAO,KAAK,eAAe/J,CAAO,CACtC,CACA,qBAAqBA,EAASc,EAAKX,EAAO,CACtC,IAAMuP,EAAQ,KAAK,iBAAiB1P,CAAO,EACvC0P,GACAA,EAAM,SAAS,qBAAqB1P,EAASc,EAAKX,CAAK,CAE/D,CACA,eAAeH,EAASV,EAAW,CAC/B,OAAQU,EAAQ,QAAQ,aAAa,GAAK,MACtC,KAAK,aAAaA,EAASV,CAAS,GACpC,KAAK,eAAeU,EAASV,CAAS,CAC9C,CACA,cAAcU,EAASV,EAAW,CAC9B,IAAMoQ,EAAQ,KAAK,iBAAiB1P,EAASV,CAAS,EAClDoQ,GACAA,EAAM,SAAS,cAAc1P,EAASV,CAAS,CAEvD,CACA,aAAaE,EAAMF,EAAW,CAC1B,IAAIkB,EACJ,IAAMS,EAASD,GAAUxB,EAAMF,CAAS,EAClCqQ,EAAO,KAAK,QAAQ,cAAc,cAAc,yBAAyB,EACzEhO,EAAehB,GAAWH,EAAiDmP,GAAK,WAAa,MAAQnP,IAAO,OAASA,EAAK,GAAG,EACnI,OAAO,KAAK,eAAehB,EAAMF,CAAS,GAAKmC,GAAoBR,EAAQU,CAAY,CAC3F,CACA,eAAe3B,EAASV,EAAW,CAI/B,GAHsBU,aAAmB,gBACnC,KAAK,QAAQ,wBAAwBA,EAASV,CAAS,EACvD,KAAK,QAAQ,qBAAqBU,CAAO,EAC5B,CACf,IAAM0P,EAAQ,KAAK,iBAAiB1P,EAASV,CAAS,EACtD,OAAOoQ,EAAQA,GAAS1P,EAAQ,QAAQ,aAAa,EAAI,EAC7D,KAEI,OAAO,EAEf,CACA,iBAAiBA,EAASV,EAAW,CACjC,IAAMmJ,EAA4DnJ,GAAU,aAAa,kBAAkB,GAAMU,EAAQ,aAAa,kBAAkB,EACxJ,GAAIyI,GAAMA,GAAM,OAAQ,CACpB,IAAMiH,EAAQ,KAAK,QAAQ,cAAc,IAAIjH,mBAAoB,EACjE,GAAIiH,aAAiBrP,EACjB,OAAOqP,CAEf,CACJ,CACJ,EAEME,GAAN,KAAc,CACV,YAAYjK,EAAU,CAClB,KAAK,sBAAwBxB,GAAK,EAClC,KAAK,gBAAkB,CAAC,EACxB,KAAK,QAAU,GACf,KAAK,WAAa,GAClB,KAAK,WAAchE,GAAU,CACzB,GAAI,KAAK,qBAAqB,EAAG,CAC7B,GAAM,CAAE,MAAA0P,CAAM,EAAI1P,EAAM,OAAS,CAAC,EAClC,GAAI0P,EAAO,CACP,KAAK,SAAW,IAAI,IAAI,OAAO,SAAS,IAAI,EAC5C,GAAM,CAAE,sBAAA5B,CAAsB,EAAI4B,EAClC,KAAK,sBAAwB5B,EAC7B,KAAK,SAAS,iDAAiD,KAAK,SAAUA,CAAqB,CACvG,CACJ,CACJ,EACA,KAAK,WAAa,MAAOlE,GAAW,CAChC,MAAMxG,GAAc,EACpB,KAAK,WAAa,EACtB,EACA,KAAK,SAAWoC,CACpB,CACA,OAAQ,CACC,KAAK,UACN,iBAAiB,WAAY,KAAK,WAAY,EAAK,EACnD,iBAAiB,OAAQ,KAAK,WAAY,EAAK,EAC/C,KAAK,QAAU,GACf,KAAK,QAAQ,IAAI,IAAI,OAAO,SAAS,IAAI,CAAC,EAElD,CACA,MAAO,CACC,KAAK,UACL,oBAAoB,WAAY,KAAK,WAAY,EAAK,EACtD,oBAAoB,OAAQ,KAAK,WAAY,EAAK,EAClD,KAAK,QAAU,GAEvB,CACA,KAAKjE,EAAUuM,EAAuB,CAClC,KAAK,OAAO,QAAQ,UAAWvM,EAAUuM,CAAqB,CAClE,CACA,QAAQvM,EAAUuM,EAAuB,CACrC,KAAK,OAAO,QAAQ,aAAcvM,EAAUuM,CAAqB,CACrE,CACA,OAAOxI,EAAQ/D,EAAUuM,EAAwB9J,GAAK,EAAG,CACrD,IAAM2L,EAAQ,CAAE,MAAO,CAAE,sBAAA7B,CAAsB,CAAE,EACjDxI,EAAO,KAAK,QAASqK,EAAO,GAAIpO,EAAS,IAAI,EAC7C,KAAK,SAAWA,EAChB,KAAK,sBAAwBuM,CACjC,CACA,gCAAgCA,EAAuB,CACnD,OAAO,KAAK,gBAAgBA,CAAqB,GAAK,CAAC,CAC3D,CACA,sBAAsB8B,EAAgB,CAClC,GAAM,CAAE,sBAAA9B,CAAsB,EAAI,KAC5B+B,EAAkB,KAAK,gBAAgB/B,CAAqB,EAClE,KAAK,gBAAgBA,CAAqB,EAAI,OAAO,OAAO,OAAO,OAAO,CAAC,EAAG+B,CAAe,EAAGD,CAAc,CAClH,CACA,kCAAmC,CAC/B,IAAIvP,EACC,KAAK,4BACN,KAAK,2BAA6BA,EAAK,QAAQ,qBAAuB,MAAQA,IAAO,OAASA,EAAK,OACnG,QAAQ,kBAAoB,SAEpC,CACA,sCAAuC,CAC/B,KAAK,4BACL,QAAQ,kBAAoB,KAAK,0BACjC,OAAO,KAAK,0BAEpB,CACA,sBAAuB,CACnB,OAAO,KAAK,aAAa,CAC7B,CACA,cAAe,CACX,OAAO,KAAK,YAAc,SAAS,YAAc,UACrD,CACJ,EAEMyP,GAAN,KAAgB,CACZ,YAAYtK,EAAU,CAClB,KAAK,SAAWA,CACpB,CACA,aAAajE,EAAUiI,EAAU,CAAC,EAAG,CAC7B,KAAK,SAAS,iCAAiCjI,EAAUiI,EAAQ,MAAM,IACnElI,GAAoBC,EAAU,KAAK,KAAK,SAAS,YAAY,EAC7D,KAAK,SAAS,wBAAwBA,EAAUiI,CAAO,EAGvD,OAAO,SAAS,KAAOjI,EAAS,SAAS,EAGrD,CACA,WAAWd,EAAWqN,EAAuBtE,EAAU,CAAC,EAAG,CACvD,KAAK,KAAK,EACV,KAAK,aAAe,IAAIqE,GAAM,KAAMrN,EAAUC,CAAS,EAAGqN,EAAuB,OAAO,OAAO,CAAE,SAAU,KAAK,QAAS,EAAGtE,CAAO,CAAC,EACpI,KAAK,aAAa,MAAM,CAC5B,CACA,WAAWnK,EAAMF,EAAW,CACxB,KAAK,KAAK,EACV,KAAK,eAAiB,IAAIyH,GAAe,KAAMvH,EAAMF,EAAW,EAAI,EACpE,KAAK,eAAe,MAAM,CAC9B,CACA,MAAO,CACC,KAAK,iBACL,KAAK,eAAe,KAAK,EACzB,OAAO,KAAK,gBAEZ,KAAK,eACL,KAAK,aAAa,OAAO,EACzB,OAAO,KAAK,aAEpB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,SAAS,OACzB,CACA,IAAI,MAAO,CACP,OAAO,KAAK,SAAS,IACzB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,SAAS,OACzB,CACA,sBAAsB4Q,EAAgB,CAC9B,OAAO,KAAK,QAAQ,uBAA0B,YAC9C,KAAK,QAAQ,sBAAsBA,CAAc,CAEzD,CACA,MAAM,oCAAoCA,EAAgBlK,EAAe,CACrE,GAAIkK,GAAkB,KAAK,eAAgB,CACvC,IAAMtB,EAAe,MAAM5I,EAAc,aACzC,GAAI4I,EAAc,CACd,IAAML,EAAsB2B,EAAe,OACtC3B,GACD,KAAK,KAAK,mBAAmB,EAEjC,GAAM,CAAE,WAAAG,EAAY,WAAAI,CAAW,EAAI9I,EAE7BmK,EAAe,CACjB,OAFW,KAAK,2BAA2BD,CAAc,EAGzD,oBAAA3B,EACA,SAAU,CAAE,WAAAG,EAAY,aAAAE,EAAc,WAAAE,CAAW,CACrD,EACA,KAAK,aAAa9I,EAAc,SAAUmK,CAAY,CAC1D,CACJ,CACJ,CACA,MAAM,iCAAiCD,EAAgBlK,EAAe,CAClE,IAAM4I,EAAe,MAAM5I,EAAc,aACzC,GAAI4I,EAAc,CACd,IAAMjG,EAAWsE,EAAa,eAAe2B,CAAY,EACrD5I,EAAc,YACd,MAAM,KAAK,KAAK,YAAY2C,EAAU,KAAK,YAAY,EAGvD,MAAM,KAAK,KAAK,WAAWA,EAAU,GAAO,GAAM,KAAK,YAAY,EAEvE,KAAK,KAAK,YAAY,EACtB,KAAK,KAAK,mBAAmB,CACjC,CACJ,CACA,sBAAsBuH,EAAgBnK,EAAO,CACzC,QAAQ,MAAMA,CAAK,CACvB,CACA,uBAAuBmK,EAAgB,CAC/B,OAAO,KAAK,QAAQ,wBAA2B,YAC/C,KAAK,QAAQ,uBAAuBA,CAAc,CAE1D,CACA,aAAad,EAAO,CAChB,KAAK,SAAS,aAAaA,CAAK,CACpC,CACA,eAAeA,EAAO,CAClB,KAAK,SAAS,eAAeA,CAAK,CACtC,CACA,6BAA6B1N,EAAUT,EAAQ,CAC3C,IAAMY,EAAShB,GAAUa,CAAQ,EAC3B0O,EAAgBvP,GAAU,KAAK,KAAK,oBAAoB,EACxDwP,EAAqBpP,IAAW,WAAa,OAAOY,EAAW,IACrE,OAAQZ,IAAW,WACfW,GAAcF,CAAQ,IAAME,GAAc,KAAK,KAAK,oBAAoB,IACvEyO,GAAuBxO,GAAU,MAAQA,IAAWuO,EAC7D,CACA,gCAAgCE,EAAQC,EAAQ,CAC5C,KAAK,SAAS,gCAAgCD,EAAQC,CAAM,CAChE,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,QACxB,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,QAAQ,qBACxB,CACA,2BAA2B,CAAE,UAAAjR,EAAW,YAAA4H,CAAY,EAAG,CACnD,OAAOjC,GAAe3F,EAAW4H,CAAW,GAAK,SACrD,CACJ,EAEIsJ,GACH,SAAUA,EAAW,CAClBA,EAAUA,EAAU,QAAa,CAAC,EAAI,UACtCA,EAAUA,EAAU,QAAa,CAAC,EAAI,UACtCA,EAAUA,EAAU,YAAiB,CAAC,EAAI,cAC1CA,EAAUA,EAAU,SAAc,CAAC,EAAI,UAC3C,GAAGA,IAAcA,EAAY,CAAC,EAAE,EAChC,IAAMC,GAAN,KAAmB,CACf,YAAY9K,EAAU,CAClB,KAAK,MAAQ6K,EAAU,QACvB,KAAK,QAAU,GACf,KAAK,oBAAsB,IAAM,CAC7B,GAAM,CAAE,WAAAE,CAAW,EAAI,KACnBA,GAAc,cACd,KAAK,kBAAkB,EAElBA,GAAc,YACnB,KAAK,eAAe,CAE5B,EACA,KAAK,eAAiB,IAAM,CACxB,KAAK,SAAS,eAAe,CACjC,EACA,KAAK,SAAW/K,CACpB,CACA,OAAQ,CACC,KAAK,UACF,KAAK,OAAS6K,EAAU,UACxB,KAAK,MAAQA,EAAU,SAE3B,SAAS,iBAAiB,mBAAoB,KAAK,oBAAqB,EAAK,EAC7E,iBAAiB,WAAY,KAAK,eAAgB,EAAK,EACvD,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,SAAS,oBAAoB,mBAAoB,KAAK,oBAAqB,EAAK,EAChF,oBAAoB,WAAY,KAAK,eAAgB,EAAK,EAC1D,KAAK,QAAU,GAEvB,CACA,mBAAoB,CACZ,KAAK,OAASA,EAAU,UACxB,KAAK,MAAQA,EAAU,YACvB,KAAK,SAAS,sBAAsB,EAE5C,CACA,gBAAiB,CACb,KAAK,kBAAkB,EACnB,KAAK,OAASA,EAAU,cACxB,KAAK,MAAQA,EAAU,SACvB,KAAK,SAAS,WAAW,EAEjC,CACA,IAAI,YAAa,CACb,OAAO,SAAS,UACpB,CACJ,EAEMG,GAAN,KAAqB,CACjB,YAAYhL,EAAU,CAClB,KAAK,QAAU,GACf,KAAK,SAAW,IAAM,CAClB,KAAK,eAAe,CAAE,EAAG,OAAO,YAAa,EAAG,OAAO,WAAY,CAAC,CACxE,EACA,KAAK,SAAWA,CACpB,CACA,OAAQ,CACC,KAAK,UACN,iBAAiB,SAAU,KAAK,SAAU,EAAK,EAC/C,KAAK,SAAS,EACd,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,oBAAoB,SAAU,KAAK,SAAU,EAAK,EAClD,KAAK,QAAU,GAEvB,CACA,eAAeiL,EAAU,CACrB,KAAK,SAAS,sBAAsBA,CAAQ,CAChD,CACJ,EAEMC,GAAN,KAA4B,CACxB,OAAO,CAAE,SAAAtK,CAAS,EAAG,CACjBkE,GAAM,4BAA4B,KAAMqG,GAAkCvK,CAAQ,EAAG,IAAM,SAAS,gBAAgB,YAAYA,CAAQ,CAAC,CAC7I,CACA,cAAcsC,EAAyBC,EAAqB,CACxDA,EAAoB,YAAYD,EAAwB,UAAU,EAAI,CAAC,CAC3E,CACA,cAAe,CAAE,CACrB,EACA,SAASiI,GAAkCvK,EAAU,CACjD,IAAMwK,EAA8BvI,GAA0B,SAAS,eAAe,EAChFI,EAAsB,CAAC,EAC7B,QAAWoI,KAA8BD,EAA6B,CAClE,GAAM,CAAE,GAAAtI,CAAG,EAAIuI,EACf,QAAWvK,KAAiBF,EAAS,iBAAiB,cAAc,EAAG,CACnE,IAAM0K,EAAkBvI,GAAwBjC,EAAc,gBAAgB,QAASgC,CAAE,EACrFwI,IACArI,EAAoBH,CAAE,EAAI,CAACuI,EAA4BC,CAAe,EAE9E,CACJ,CACA,OAAOrI,CACX,CAEA,IAAMsI,GAAN,KAAqB,CACjB,YAAYvL,EAAU,CAClB,KAAK,QAAU,IAAI,IACnB,KAAK,QAAU,GACf,KAAK,qBAAyBxF,GAAU,CACpC,IAAMkC,EAAW8O,GAAuBhR,CAAK,EACzCkC,GAAY+O,GAAsB/O,CAAQ,IAC1ClC,EAAM,eAAe,EACrB,KAAK,uBAAuBkC,CAAQ,EAE5C,EACA,KAAK,oBAAuBlC,GAAU,CAC9B,KAAK,SAAW,OAAOA,EAAM,MAAQ,UACrC,KAAK,mBAAmBA,EAAM,IAAI,CAE1C,EACA,KAAK,SAAWwF,CACpB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,iBAAiB,8BAA+B,KAAK,qBAAsB,EAAK,EAExF,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,oBAAoB,8BAA+B,KAAK,qBAAsB,EAAK,EAE3F,CACA,oBAAoB6H,EAAQ,CACnB,KAAK,wBAAwBA,CAAM,IACpC,KAAK,QAAQ,IAAIA,CAAM,EACvBA,EAAO,iBAAiB,UAAW,KAAK,oBAAqB,EAAK,EAE1E,CACA,uBAAuBA,EAAQ,CACvB,KAAK,wBAAwBA,CAAM,IACnC,KAAK,QAAQ,OAAOA,CAAM,EAC1BA,EAAO,oBAAoB,UAAW,KAAK,oBAAqB,EAAK,EAE7E,CACA,wBAAwBA,EAAQ,CAC5B,OAAO,KAAK,QAAQ,IAAIA,CAAM,CAClC,CACA,MAAM,uBAAuBnL,EAAU,CACnC,IAAMS,EAAO,MAAMT,EAAS,aACxBS,GACA,KAAK,mBAAmBA,CAAI,CAEpC,CACA,mBAAmBA,EAAM,CACrB,KAAK,SAAS,0BAA0BwD,EAAc,KAAKxD,CAAI,CAAC,CACpE,CACJ,EACA,SAASqO,GAAuBhR,EAAO,CACnC,IAAIK,EACJ,IAAMwF,GAAiBxF,EAAKL,EAAM,UAAY,MAAQK,IAAO,OAAS,OAASA,EAAG,cAClF,GAAIwF,aAAyB5D,GACzB,OAAO4D,CAEf,CACA,SAASoL,GAAsB/O,EAAU,CACrC,IAAI7B,EAEJ,QADqBA,EAAK6B,EAAS,eAAiB,MAAQ7B,IAAO,OAASA,EAAK,IAC9D,WAAW8F,EAAc,WAAW,CAC3D,CAEA,IAAM+K,GAAN,cAA4BrG,EAAS,CACjC,OAAO,cAAcQ,EAAgBC,EAAY,CAC7C,GAAM,CAAE,gBAAA6F,EAAiB,KAAA1L,CAAK,EAAI,SAClC0L,EAAgB,aAAa7F,EAAY7F,CAAI,CACjD,CACA,MAAM,QAAS,CACX,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,CAChC,CACA,oBAAqB,CACjB,GAAM,CAAE,gBAAA0L,EAAiB,KAAApE,CAAK,EAAI,SAClCoE,EAAgB,aAAa,KAAK,QAASpE,CAAI,EAC/C,KAAK,cAAc,KAAK,eAAgB,KAAK,UAAU,CAC3D,CACA,wBAAyB,CACrB,QAAWqE,KAAsB,KAAK,eAAgB,CAClD,IAAMC,EAAaD,EAAmB,WACtC,GAAIC,EAAY,CACZ,IAAMxR,EAAUsC,GAAsBiP,CAAkB,EACxDC,EAAW,aAAaxR,EAASuR,CAAkB,CACvD,CACJ,CACJ,CACA,IAAI,SAAU,CACV,OAAO,KAAK,YAAY,aAAa,OACzC,CACA,IAAI,gBAAiB,CACjB,OAAO,SAAS,gBAAgB,iBAAiB,QAAQ,CAC7D,CACJ,EAEME,GAAN,cAA2BzG,EAAS,CAChC,OAAO,cAAcQ,EAAgBC,EAAY,CACzC,SAAS,MAAQA,aAAsB,gBACvC,SAAS,KAAK,YAAYA,CAAU,EAGpC,SAAS,gBAAgB,YAAYA,CAAU,CAEvD,CACA,IAAI,cAAe,CACf,OAAO,KAAK,YAAY,aAAe,KAAK,2BAChD,CACA,IAAI,cAAe,CACf,GAAI,CAAC,KAAK,YAAY,YAClB,MAAO,CACH,OAAQ,+BACZ,EAEJ,GAAI,CAAC,KAAK,4BACN,MAAO,CACH,OAAQ,0BACZ,CAER,CACA,MAAM,iBAAkB,CACpB,MAAM,KAAK,UAAU,CACzB,CACA,MAAM,QAAS,CACP,KAAK,YACL,MAAM,KAAK,YAAY,CAE/B,CACA,iBAAkB,CACd,MAAM,gBAAgB,EACjB,KAAK,WACN,KAAK,+BAA+B,CAE5C,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,gBAAgB,YAChC,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,YAAY,YAC5B,CACA,IAAI,YAAa,CACb,OAAO,KAAK,YAAY,OAC5B,CACA,MAAM,WAAY,CACd,IAAMiG,EAAqB,KAAK,yBAAyB,EACnDC,EAAwB,KAAK,8BAA8B,EACjE,KAAK,0BAA0B,EAC/B,MAAMD,EACN,MAAMC,CACV,CACA,MAAM,aAAc,CAChB,MAAM,KAAK,4BAA4B,SAAY,CAC/C,KAAK,gBAAgB,EACrB,MAAM,KAAK,cAAc,CAC7B,CAAC,CACL,CACA,IAAI,6BAA8B,CAC9B,OAAO,KAAK,oBAAoB,yBAA2B,KAAK,gBAAgB,uBACpF,CACA,MAAM,+BAAgC,CAClC,IAAMC,EAAkB,CAAC,EACzB,QAAW5R,KAAW,KAAK,0BACvB4R,EAAgB,KAAKhN,GAAY5E,CAAO,CAAC,EACzC,SAAS,KAAK,YAAYA,CAAO,EAErC,MAAM,QAAQ,IAAI4R,CAAe,CACrC,CACA,2BAA4B,CACxB,QAAW5R,KAAW,KAAK,sBACvB,SAAS,KAAK,YAAYsC,GAAsBtC,CAAO,CAAC,CAEhE,CACA,MAAM,0BAA2B,CAC7B,IAAM6R,EAAkB,CAAC,GAAG,KAAK,0BAA0B,EAC3D,QAAW7R,KAAW,KAAK,+BAClB,KAAK,8BAA8BA,EAAS6R,CAAe,GAC5D,SAAS,KAAK,YAAY7R,CAAO,EAGzC,QAAWA,KAAW6R,EAClB,SAAS,KAAK,YAAY7R,CAAO,CAEzC,CACA,8BAA8BA,EAAS8R,EAAa,CAChD,OAAW,CAACvE,EAAO9B,CAAU,IAAKqG,EAAY,QAAQ,EAAG,CACrD,GAAI9R,EAAQ,SAAW,QAAS,CAC5B,GAAIyL,EAAW,SAAW,QACtB,SAEJ,GAAIzL,EAAQ,WAAayL,EAAW,UAChC,OAAAqG,EAAY,OAAOvE,EAAO,CAAC,EACpB,EAEf,CACA,GAAI9B,EAAW,YAAYzL,CAAO,EAC9B,OAAA8R,EAAY,OAAOvE,EAAO,CAAC,EACpB,EAEf,CACA,MAAO,EACX,CACA,sCAAuC,CACnC,QAAWvN,KAAW,KAAK,+BACvB,SAAS,KAAK,YAAYA,CAAO,CAEzC,CACA,gCAAiC,CAC7B,QAAWA,KAAW,KAAK,2BACvB,SAAS,KAAK,YAAYA,CAAO,CAEzC,CACA,iBAAkB,CACd,SAAS,UAAU,KAAK,UAAU,EAClC,KAAK,8BAA8B,CACvC,CACA,+BAAgC,CAC5B,QAAW0G,KAAsB,KAAK,sBAAuB,CACzD,IAAMuF,EAAyB3J,GAAsBoE,CAAkB,EACvEA,EAAmB,YAAYuF,CAAsB,CACzD,CACJ,CACA,MAAM,eAAgB,CAClB,MAAM,KAAK,cAAc,KAAK,eAAgB,KAAK,UAAU,CACjE,CACA,IAAI,2BAA4B,CAC5B,OAAO,KAAK,gBAAgB,mCAAmC,KAAK,mBAAmB,CAC3F,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,gBAAgB,+BAA+B,KAAK,mBAAmB,CACvF,CACA,IAAI,gCAAiC,CACjC,OAAO,KAAK,oBAAoB,mBACpC,CACA,IAAI,4BAA6B,CAC7B,OAAO,KAAK,gBAAgB,mBAChC,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,WAAW,iBAAiB,QAAQ,CACpD,CACJ,EAEM8F,GAAN,KAAoB,CAChB,YAAYC,EAAM,CACd,KAAK,KAAO,CAAC,EACb,KAAK,UAAY,CAAC,EAClB,KAAK,KAAOA,CAChB,CACA,IAAItQ,EAAU,CACV,OAAOI,GAAWJ,CAAQ,IAAK,KAAK,SACxC,CACA,IAAIA,EAAU,CACV,GAAI,KAAK,IAAIA,CAAQ,EAAG,CACpB,IAAMiH,EAAW,KAAK,KAAKjH,CAAQ,EACnC,YAAK,MAAMA,CAAQ,EACZiH,CACX,CACJ,CACA,IAAIjH,EAAUiH,EAAU,CACpB,YAAK,MAAMjH,EAAUiH,CAAQ,EAC7B,KAAK,MAAMjH,CAAQ,EACZiH,CACX,CACA,OAAQ,CACJ,KAAK,UAAY,CAAC,CACtB,CACA,KAAKjH,EAAU,CACX,OAAO,KAAK,UAAUI,GAAWJ,CAAQ,CAAC,CAC9C,CACA,MAAMA,EAAUiH,EAAU,CACtB,KAAK,UAAU7G,GAAWJ,CAAQ,CAAC,EAAIiH,CAC3C,CACA,MAAMjH,EAAU,CACZ,IAAMuQ,EAAMnQ,GAAWJ,CAAQ,EACzB6L,EAAQ,KAAK,KAAK,QAAQ0E,CAAG,EAC/B1E,EAAQ,IACR,KAAK,KAAK,OAAOA,EAAO,CAAC,EAC7B,KAAK,KAAK,QAAQ0E,CAAG,EACrB,KAAK,KAAK,CACd,CACA,MAAO,CACH,QAAWA,KAAO,KAAK,KAAK,OAAO,KAAK,IAAI,EACxC,OAAO,KAAK,UAAUA,CAAG,CAEjC,CACJ,EAEMC,GAAN,cAAuB9I,EAAK,CACxB,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,cAAgB,IAAI2I,GAAc,EAAE,EACzC,KAAK,qBAAuB,IAAI,IAAI,SAAS,IAAI,EACjD,KAAK,cAAgB,EACzB,CACA,WAAWpJ,EAAUa,EAAY,GAAO4B,EAAa,GAAMgE,EAAO,CAC9D,IAAM7F,EAAW,IAAIkI,GAAa,KAAK,SAAU9I,EAAU8I,GAAa,cAAejI,EAAW4B,CAAU,EAC5G,OAAK7B,EAAS,aAIoC6F,GAAM,cAAc,EAHlE,KAAK,cAAgB,GAKlB,KAAK,OAAO7F,CAAQ,CAC/B,CACA,YAAYZ,EAAUyG,EAAO,CACqBA,GAAM,cAAc,EAClE,IAAM7F,EAAW,IAAI8H,GAAc,KAAK,SAAU1I,EAAU0I,GAAc,cAAe,EAAK,EAC9F,OAAO,KAAK,OAAO9H,CAAQ,CAC/B,CACA,oBAAqB,CACjB,KAAK,cAAc,MAAM,CAC7B,CACA,MAAM,cAAcZ,EAAW,KAAK,SAAU,CAC1C,GAAIA,EAAS,YAAa,CACtB,KAAK,SAAS,sBAAsB,EACpC,GAAM,CAAE,qBAAsBjH,CAAS,EAAI,KAC3C,MAAM4B,GAAkB,EACxB,IAAM6O,EAAiBxJ,EAAS,MAAM,EACtC,YAAK,cAAc,IAAIjH,EAAUyQ,CAAc,EACxCA,CACX,CACJ,CACA,6BAA6BzQ,EAAU,CACnC,OAAO,KAAK,cAAc,IAAIA,CAAQ,CAC1C,CACA,IAAI,UAAW,CACX,OAAOuL,EAAa,YAAY,KAAK,OAAO,CAChD,CACJ,EAEMmF,GAAN,KAAgB,CACZ,YAAYzM,EAAU,CAClB,KAAK,SAAW,wBAChB,KAAK,SAAWA,CACpB,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,SAAS,UAAU,KAAK,aACxC,CACA,OAAQ,CACJ,GAAI,SAAS,aAAe,UACxB,OAAO,SAAS,iBAAiB,mBAAoB,IAAM,CACvD,KAAK,0BAA0B,SAAS,IAAI,CAChD,CAAC,EAGD,KAAK,0BAA0B,SAAS,IAAI,CAEpD,CACA,0BAA0B3F,EAAS,CAC/B,QAAWiK,KAAQjK,EAAQ,iBAAiB,KAAK,QAAQ,EACrD,KAAK,WAAWiK,CAAI,CAE5B,CACA,MAAM,WAAWA,EAAM,CACnB,IAAMvI,EAAW,IAAI,IAAIuI,EAAK,IAAI,EAClC,GAAI,MAAK,cAAc,IAAIvI,CAAQ,EAGnC,GAAI,CAEA,IAAM2Q,EAAe,MADJ,MAAM,MAAM3Q,EAAS,SAAS,EAAG,CAAE,QAAS,CAAE,eAAgB,OAAQ,OAAQ,WAAY,CAAE,CAAC,GAC1E,KAAK,EACnCiH,EAAWsE,EAAa,eAAeoF,CAAY,EACzD,KAAK,cAAc,IAAI3Q,EAAUiH,CAAQ,CAC7C,MACA,CACA,CACJ,CACJ,EAEM2J,GAAN,KAAc,CACV,aAAc,CACV,KAAK,UAAY,IAAIrC,GAAU,IAAI,EACnC,KAAK,QAAU,IAAIL,GAAQ,IAAI,EAC/B,KAAK,UAAY,IAAIwC,GAAU,IAAI,EACnC,KAAK,KAAO,IAAIF,GAAS,KAAM,SAAS,eAAe,EACvD,KAAK,QAAU,IAAIhD,GAAe,IAAI,EACtC,KAAK,aAAe,IAAIuB,GAAa,IAAI,EACzC,KAAK,cAAgB,IAAIlB,GACzB,KAAK,kBAAoB,IAAIvF,GAAkB,KAAM,MAAM,EAC3D,KAAK,mBAAqB,IAAIhB,GAAmB,KAAM,QAAQ,EAC/D,KAAK,eAAiB,IAAI2H,GAAe,IAAI,EAC7C,KAAK,eAAiB,IAAIO,GAAe,IAAI,EAC7C,KAAK,sBAAwB,IAAI/G,GAAsB,KAAM,SAAS,eAAe,EACrF,KAAK,gBAAkB,IAAIqF,GAAgB,KAAM,SAAS,eAAe,EACzE,KAAK,sBAAwB,IAAIqB,GACjC,KAAK,MAAQ,GACb,KAAK,QAAU,GACf,KAAK,iBAAmB,IACxB,KAAK,QAAU,GACf,KAAK,SAAW,IACpB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,aAAa,MAAM,EACxB,KAAK,cAAc,MAAM,EACzB,KAAK,sBAAsB,MAAM,EACjC,KAAK,kBAAkB,MAAM,EAC7B,KAAK,mBAAmB,MAAM,EAC9B,KAAK,eAAe,MAAM,EAC1B,KAAK,eAAe,MAAM,EAC1B,KAAK,gBAAgB,MAAM,EAC3B,KAAK,QAAQ,MAAM,EACnB,KAAK,UAAU,MAAM,EACrB,KAAK,QAAU,GACf,KAAK,QAAU,GAEvB,CACA,SAAU,CACN,KAAK,QAAU,EACnB,CACA,MAAO,CACC,KAAK,UACL,KAAK,aAAa,KAAK,EACvB,KAAK,cAAc,KAAK,EACxB,KAAK,sBAAsB,KAAK,EAChC,KAAK,kBAAkB,KAAK,EAC5B,KAAK,mBAAmB,KAAK,EAC7B,KAAK,eAAe,KAAK,EACzB,KAAK,eAAe,KAAK,EACzB,KAAK,gBAAgB,KAAK,EAC1B,KAAK,QAAQ,KAAK,EAClB,KAAK,QAAU,GAEvB,CACA,gBAAgB0B,EAAS,CACrB,KAAK,QAAUA,CACnB,CACA,MAAM7Q,EAAUiI,EAAU,CAAC,EAAG,CAC1B,IAAMgC,EAAehC,EAAQ,MAAQ,SAAS,eAAeA,EAAQ,KAAK,EAAI,KAC1EgC,aAAwBtL,GACxBsL,EAAa,IAAMjK,EAAS,SAAS,EACrCiK,EAAa,QAGb,KAAK,UAAU,aAAahL,EAAUe,CAAQ,EAAGiI,CAAO,CAEhE,CACA,oBAAoB6D,EAAQ,CACxB,KAAK,eAAe,oBAAoBA,CAAM,CAClD,CACA,uBAAuBA,EAAQ,CAC3B,KAAK,eAAe,uBAAuBA,CAAM,CACrD,CACA,oBAAoB7N,EAAS,CACzB,KAAK,sBAAsB,OAAO2G,EAAc,KAAK3G,CAAO,CAAC,CACjE,CACA,YAAa,CACT,KAAK,KAAK,mBAAmB,CACjC,CACA,oBAAoB6S,EAAO,CACvB,KAAK,iBAAmBA,CAC5B,CACA,YAAYC,EAAM,CACd,KAAK,SAAWA,CACpB,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,QACxB,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,QAAQ,qBACxB,CACA,iDAAiD/Q,EAAUuM,EAAuB,CAC1E,KAAK,QACL,KAAK,UAAU,WAAWvM,EAAUuM,EAAuB,CACvD,OAAQ,UACR,eAAgB,EACpB,CAAC,EAGD,KAAK,QAAQ,gBAAgB,CACzB,OAAQ,gBACZ,CAAC,CAET,CACA,sBAAsB2C,EAAU,CAC5B,KAAK,QAAQ,sBAAsB,CAAE,eAAgBA,CAAS,CAAC,CACnE,CACA,6BAA6B3G,EAAMvI,EAAU,CACzC,OAAO,KAAK,qBAAqBuI,CAAI,GAAKxI,GAAoBC,EAAU,KAAK,SAAS,YAAY,CACtG,CACA,6BAA8B,CAAE,CAChC,yBAAyBuI,EAAMvI,EAAUvB,EAAO,CAC5C,OAAQ,KAAK,qBAAqB8J,CAAI,GAClCxI,GAAoBC,EAAU,KAAK,SAAS,YAAY,GACxD,KAAK,yCAAyCuI,EAAMvI,EAAUvB,CAAK,CAC3E,CACA,uBAAuB8J,EAAMvI,EAAU,CACnC,IAAMT,EAAS,KAAK,iBAAiBgJ,CAAI,EACnCuE,EAAwBvE,EAAK,aAAa,mBAAmB,EACnE,KAAK,MAAMvI,EAAS,KAAM,CAAE,OAAAT,EAAQ,sBAAAuN,CAAsB,CAAC,CAC/D,CACA,iCAAiC9M,EAAUT,EAAQ,CAC/C,OAAO,KAAK,6BAA6BS,EAAUT,CAAM,GAAK,KAAK,kCAAkCS,CAAQ,CACjH,CACA,wBAAwBA,EAAUiI,EAAS,CACvC+I,GAAkChR,CAAQ,EAC1C,KAAK,QAAQ,wBAAwBA,EAAUiI,CAAO,CAC1D,CACA,aAAayF,EAAO,CACXA,EAAM,uBACP1K,GAAW,SAAS,eAAe,EAEvCgO,GAAkCtD,EAAM,QAAQ,EAC3CA,EAAM,QACP,KAAK,uCAAuCA,EAAM,SAAUA,EAAM,MAAM,CAEhF,CACA,eAAeA,EAAO,CAClBzK,GAAe,SAAS,eAAe,EACvC,KAAK,+BAA+ByK,EAAM,iBAAiB,CAAC,CAChE,CACA,6BAA6B1N,EAAUT,EAAQ,CAC3C,OAAO,KAAK,UAAU,6BAA6BS,EAAUT,CAAM,CACvE,CACA,gCAAgCqP,EAAQC,EAAQ,CAC5C,KAAK,+CAA+CD,EAAQC,CAAM,CACtE,CACA,eAAe/Q,EAAMF,EAAW,CAC5B,IAAM2B,EAASD,GAAUxB,EAAMF,CAAS,EACxC,OAAQ,KAAK,wBAAwBE,EAAMF,CAAS,GAChDmC,GAAoBd,EAAUM,CAAM,EAAG,KAAK,SAAS,YAAY,CACzE,CACA,cAAczB,EAAMF,EAAW,CAC3B,KAAK,UAAU,WAAWE,EAAMF,CAAS,CAC7C,CACA,uBAAwB,CACpB,KAAK,KAAK,qBAAuB,KAAK,SACtC,KAAK,+BAA+B,CACxC,CACA,YAAa,CACT,KAAK,QAAQ,iCAAiC,CAClD,CACA,gBAAiB,CACb,KAAK,QAAQ,qCAAqC,CACtD,CACA,0BAA0BK,EAAS,CAC/B,KAAK,oBAAoBA,CAAO,CACpC,CACA,uBAAwB,CACpB,IAAIa,EACG,GAAAA,EAAK,KAAK,UAAU,gBAAkB,MAAQA,IAAO,SAAkBA,EAAG,QAC7E,KAAK,uCAAuC,CAEpD,CACA,sBAAsB,CAAE,QAAAR,CAAQ,EAAG2J,EAAS,CACxC,IAAMxJ,EAAQ,KAAK,8BAA8BH,EAAS2J,CAAO,EAC3D,CAAE,iBAAAgJ,EAAkB,OAAQ,CAAE,OAAAC,CAAO,CAAG,EAAIzS,EAClD,OAAI,KAAK,KAAK,UAAYyS,IACtB,KAAK,KAAK,SAAS,cAAgBA,GAEhC,CAACD,CACZ,CACA,qBAAqBE,EAAWC,EAAY,CACxC,KAAK,KAAK,qBAAuB,KAAK,QAAQ,SAC9C,KAAK,6BAA6B,CACtC,CACA,0BAA0B9S,EAAS,CAC/B,KAAK,UAAU,0BAA0BA,CAAO,CACpD,CACA,gBAAgB4J,EAAQ,CACpB,KAAK,QAAQ,gBAAgBA,CAAM,CACvC,CACA,YAAY8F,EAAO,CACf,KAAK,gCAAgCA,CAAK,CAC9C,CACA,cAAc1J,EAAe0J,EAAO,CAChC,KAAK,kCAAkC1J,EAAe0J,CAAK,CAC/D,CACA,yCAAyCzF,EAAMvI,EAAUqR,EAAI,CAEzD,MAAO,CADO,KAAK,6CAA6C9I,EAAMvI,EAAUqR,CAAE,EACpE,gBAClB,CACA,kCAAkCrR,EAAU,CAExC,MAAO,CADO,KAAK,wCAAwCA,CAAQ,EACrD,gBAClB,CACA,6CAA6CuI,EAAMvI,EAAUvB,EAAO,CAChE,OAAO6C,EAAS,cAAe,CAC3B,OAAQiH,EACR,OAAQ,CAAE,IAAKvI,EAAS,KAAM,cAAevB,CAAM,EACnD,WAAY,EAChB,CAAC,CACL,CACA,wCAAwCuB,EAAU,CAC9C,OAAOsB,EAAS,qBAAsB,CAClC,OAAQ,CAAE,IAAKtB,EAAS,IAAK,EAC7B,WAAY,EAChB,CAAC,CACL,CACA,uCAAuCA,EAAUT,EAAQ,CACrD,OAAO+B,EAAS,cAAe,CAAE,OAAQ,CAAE,IAAKtB,EAAS,KAAM,OAAAT,CAAO,CAAE,CAAC,CAC7E,CACA,wCAAyC,CACrC,OAAO+B,EAAS,oBAAoB,CACxC,CACA,8BAA8BgQ,EAASrJ,EAAS,CAC5C,OAAO3G,EAAS,sBAAuB,CACnC,OAAQ,OAAO,OAAO,CAAE,QAAAgQ,CAAQ,EAAGrJ,CAAO,EAC1C,WAAY,EAChB,CAAC,CACL,CACA,8BAA+B,CAC3B,OAAO3G,EAAS,cAAc,CAClC,CACA,+BAA+BiQ,EAAS,CAAC,EAAG,CACxC,OAAOjQ,EAAS,aAAc,CAC1B,OAAQ,CAAE,IAAK,KAAK,SAAS,KAAM,OAAAiQ,CAAO,CAC9C,CAAC,CACL,CACA,+CAA+C3C,EAAQC,EAAQ,CAC3D,cAAc,IAAI,gBAAgB,aAAc,CAC5C,OAAQD,EAAO,SAAS,EACxB,OAAQC,EAAO,SAAS,CAC5B,CAAC,CAAC,CACN,CACA,gCAAgCb,EAAO,CACnC,OAAO1M,EAAS,mBAAoB,CAAE,OAAQ0M,CAAM,CAAC,CACzD,CACA,kCAAkC1J,EAAe0J,EAAO,CACpD,OAAO1M,EAAS,qBAAsB,CAClC,OAAQ,CAAE,cAAAgD,CAAc,EACxB,OAAQ0J,EACR,WAAY,EAChB,CAAC,CACL,CACA,wBAAwBlQ,EAAMF,EAAW,CACrC,GAAI,KAAK,UAAY,MACjB,MAAO,GAEN,CACD,IAAM4T,EAAyB5T,EAAY,KAAK,qBAAqBA,CAAS,EAAI,GAClF,OAAI,KAAK,UAAY,QACV4T,GAA0B1T,EAAK,QAAQ,qBAAqB,GAAK,KAGjE0T,GAA0B,KAAK,qBAAqB1T,CAAI,CAEvE,CACJ,CACA,qBAAqBQ,EAAS,CAC1B,IAAMmT,EAAY9N,GAAuBrF,EAAS,cAAc,EAC1DoT,EAAc/N,GAAuBrF,EAAS,aAAa,EACjE,OAAI,KAAK,OAASoT,EACVD,EACOA,EAAU,aAAa,YAAY,GAAK,QAGxC,GAIPA,EACOA,EAAU,aAAa,YAAY,GAAK,OAGxC,EAGnB,CACA,iBAAiBlJ,EAAM,CACnB,OAAOhF,GAAegF,CAAI,GAAK,SACnC,CACA,IAAI,UAAW,CACX,OAAO,KAAK,KAAK,QACrB,CACJ,EACA,SAASyI,GAAkC5R,EAAK,CAC5C,OAAO,iBAAiBA,EAAKuS,EAAqC,CACtE,CACA,IAAMA,GAAwC,CAC1C,YAAa,CACT,KAAM,CACF,OAAO,KAAK,SAAS,CACzB,CACJ,CACJ,EAEMC,GAAN,KAAY,CACR,YAAYnE,EAAS,CACjB,KAAK,QAAUA,CACnB,CACA,OAAQ,CACJ,KAAK,QAAQ,WAAW,CAC5B,CACA,mBAAoB,CAChB,KAAK,gBAAgB,EAAE,CAC3B,CACA,qBAAsB,CAClB,KAAK,gBAAgB,UAAU,CACnC,CACA,uBAAwB,CACpB,KAAK,gBAAgB,YAAY,CACrC,CACA,gBAAgB7O,EAAO,CACnB6E,GAAe,sBAAuB7E,CAAK,CAC/C,CACJ,EAEMiT,GAAgB,CAClB,OAAQ,CACJ,KAAK,eAAe,QAASC,GAAM,CAAE,IAAIhT,EAAI,OAAQA,EAAKgT,EAAE,iBAAmB,MAAQhT,IAAO,OAAS,OAASA,EAAG,aAAa,KAAK,gBAAiBgT,EAAE,WAAW,CAAG,CAAC,CAC3K,EACA,QAAS,CACL,KAAK,8BAA8B,EACnC,KAAK,eAAe,QAASA,GAAMA,EAAE,OAAO,KAAK,eAAe,CAAC,CACrE,EACA,QAAS,CACL,KAAK,eAAe,QAASA,GAAM,CAAE,IAAIhT,EAAI,OAAQA,EAAKgT,EAAE,iBAAmB,MAAQhT,IAAO,OAAS,OAASA,EAAG,aAAa,KAAK,gBAAiBgT,CAAC,CAAG,CAAC,CAC/J,EACA,SAAU,CACN,KAAK,8BAA8B,EACnC,KAAK,eAAe,QAASA,GAAMA,EAAE,QAAQ,KAAK,eAAe,CAAC,CACtE,EACA,QAAS,CACL,KAAK,eAAe,QAASA,GAAMA,EAAE,OAAO,CAAC,CACjD,EACA,SAAU,CACN,KAAK,eAAe,QAASA,GAAMA,EAAE,YAAY,KAAK,eAAe,CAAC,CAC1E,EACA,QAAS,CACL,KAAK,eAAe,QAASC,GAAkB,CAC3CA,EAAc,UAAY,GAC1BA,EAAc,OAAO,KAAK,eAAe,CAC7C,CAAC,CACL,CACJ,EAEMtE,EAAU,IAAImD,GACdoB,GAAQ,IAAIJ,GAAMnE,CAAO,EACzB,CAAE,UAAWwE,EAAY,EAAIxE,EACnC,SAASyE,IAAQ,CACbzE,EAAQ,MAAM,CAClB,CACA,SAAS0E,GAAgBtB,EAAS,CAC9BpD,EAAQ,gBAAgBoD,CAAO,CACnC,CACA,SAASnD,GAAM1N,EAAUiI,EAAS,CAC9BwF,EAAQ,MAAMzN,EAAUiI,CAAO,CACnC,CACA,SAASmK,GAAoBtG,EAAQ,CACjC2B,EAAQ,oBAAoB3B,CAAM,CACtC,CACA,SAASuG,GAAuBvG,EAAQ,CACpC2B,EAAQ,uBAAuB3B,CAAM,CACzC,CACA,SAASwG,GAAoBrU,EAAS,CAClCwP,EAAQ,oBAAoBxP,CAAO,CACvC,CACA,SAASsU,IAAa,CAClB,QAAQ,KAAK,yJAAyJ,EACtK9E,EAAQ,WAAW,CACvB,CACA,SAAS+E,GAAoB1B,EAAO,CAChCrD,EAAQ,oBAAoBqD,CAAK,CACrC,CACA,SAAS2B,GAAiBC,EAAe,CACrCrN,GAAe,cAAgBqN,CACnC,CACA,SAASC,GAAY5B,EAAM,CACvBtD,EAAQ,YAAYsD,CAAI,CAC5B,CAEA,IAAI6B,GAAqB,OAAO,OAAO,CACnC,UAAW,KACX,UAAWX,GACX,QAASxE,EACT,MAAOuE,GACP,aAAcjC,GACd,aAAcxE,EACd,cAAe1B,GACf,MAAOqI,GACP,gBAAiBC,GACjB,MAAOzE,GACP,oBAAqB0E,GACrB,uBAAwBC,GACxB,oBAAqBC,GACrB,WAAYC,GACZ,oBAAqBC,GACrB,iBAAkBC,GAClB,YAAaE,GACb,cAAed,EACnB,CAAC,EAEKgB,GAAN,cAAqC,KAAM,CAC3C,EAEMC,GAAN,KAAsB,CAClB,YAAYxU,EAAS,CACjB,KAAK,oBAAuByU,GAAmB,CAAE,EACjD,KAAK,oBAAsB,KAC3B,KAAK,oBAAsB,IAAM,CAAE,EACnC,KAAK,UAAY,GACjB,KAAK,cAAgB,GACrB,KAAK,kBAAoB,IAAI,IAC7B,KAAK,OAAS,KACd,KAAK,oBAAsB,CAAC,CAAE,QAAAzU,CAAQ,IAAM,CACxC,IAAM0P,EAAQ1P,EAAQ,cAAc,IAAM,KAAK,QAAQ,EAAE,EACrD0P,GAAS,KAAK,sBACdA,EAAM,gBAAgB,GAAG,KAAK,qBAAqB,QAAQ,EAE/D,OAAO,KAAK,oBAChB,EACA,KAAK,QAAU1P,EACf,KAAK,KAAO,IAAI6J,GAAU,KAAM,KAAK,OAAO,EAC5C,KAAK,mBAAqB,IAAI1D,GAAmB,KAAM,KAAK,OAAO,EACnE,KAAK,sBAAwB,IAAIgE,GAAsB,KAAM,KAAK,OAAO,EACzE,KAAK,gBAAkB,IAAIL,GAAgB,KAAM,KAAK,OAAO,EAC7D,KAAK,sBAAwB3F,GAAK,EAClC,KAAK,mBAAqB,IAAI6E,GAAmB,KAAM,KAAK,OAAO,CACvE,CACA,SAAU,CACD,KAAK,YACN,KAAK,UAAY,GACb,KAAK,cAAgB5I,GAAkB,KACvC,KAAK,mBAAmB,MAAM,EAG9B,KAAK,cAAc,EAEvB,KAAK,sBAAsB,MAAM,EACjC,KAAK,gBAAgB,MAAM,EAC3B,KAAK,mBAAmB,MAAM,EAEtC,CACA,YAAa,CACL,KAAK,YACL,KAAK,UAAY,GACjB,KAAK,mBAAmB,KAAK,EAC7B,KAAK,sBAAsB,KAAK,EAChC,KAAK,gBAAgB,KAAK,EAC1B,KAAK,mBAAmB,KAAK,EAErC,CACA,iBAAkB,CACV,KAAK,cAAgBA,GAAkB,OACvC,KAAK,cAAc,CAE3B,CACA,kBAAmB,CACX,KAAK,oBAAoB,KAAK,IAE9B,KAAK,QAAQ,cACb,KAAK,SAAW,KAEhB,KAAK,cAAgBA,GAAkB,OAAS,KAAK,gBACrD,KAAK,cAAc,EAE3B,CACA,mBAAoB,CAChB,GAAM,CAAE,IAAAsU,CAAI,EAAI,KAAK,QACrB,YAAK,2BAA2B,WAAY,IAAM,CAC9C,KAAK,QAAQ,gBAAgB,UAAU,CAC3C,CAAC,EACD,KAAK,QAAQ,IAAM,KACnB,KAAK,QAAQ,IAAMA,EACZ,KAAK,QAAQ,MACxB,CACA,iBAAkB,CACV,KAAK,oBAAoB,UAAU,GAEvC,KAAK,cAAc,CACvB,CACA,qBAAsB,CACd,KAAK,cAAgBtU,GAAkB,KACvC,KAAK,mBAAmB,MAAM,GAG9B,KAAK,mBAAmB,KAAK,EAC7B,KAAK,cAAc,EAE3B,CACA,MAAM,eAAgB,CACd,KAAK,SAAW,KAAK,UAAY,CAAC,KAAK,UAAY,KAAK,YACxD,KAAK,QAAQ,OAAS,KAAK,MAAMO,EAAU,KAAK,SAAS,CAAC,EAC1D,KAAK,mBAAmB,KAAK,EAC7B,MAAM,KAAK,QAAQ,OACnB,KAAK,cAAgB,GAE7B,CACA,MAAM,aAAaqF,EAAe,EAC1BA,EAAc,YAAeA,EAAc,WAAaA,EAAc,UACtE,KAAK,UAAYA,EAAc,SAAS,KAE5C,GAAI,CACA,IAAMlD,EAAO,MAAMkD,EAAc,aACjC,GAAIlD,EAAM,CACN,IAAM6R,EAAWnR,GAAkBV,CAAI,EAClBmK,EAAa,aAAa0H,CAAQ,EACtC,YACb,MAAM,KAAK,kBAAkB3O,EAAe2O,CAAQ,EAGpD,MAAM,KAAK,+BAA+B3O,CAAa,CAE/D,CACJ,QACA,CACI,KAAK,oBAAsB,IAAM,CAAE,CACvC,CACJ,CACA,0BAA0BhG,EAAS,CAC/B,KAAK,kCAAkCA,EAASA,CAAO,EACvD,KAAK,cAAc,CACvB,CACA,6BAA6BiK,EAAM,CAC/B,OAAO,KAAK,0BAA0BA,CAAI,CAC9C,CACA,4BAA4BA,EAAMwF,EAAWjQ,EAAM,CAC/C,IAAMkQ,EAAQ,KAAK,iBAAiBzF,CAAI,EACpCyF,GACAlQ,EAAK,aAAa,mBAAoBkQ,EAAM,EAAE,CACtD,CACA,yBAAyB1P,EAASyP,EAAW1F,EAAQ,CACjD,OAAO,KAAK,0BAA0B/J,CAAO,CACjD,CACA,qBAAqBA,EAAS0B,EAAU,CACpC,KAAK,cAAc1B,EAAS0B,CAAQ,CACxC,CACA,eAAe1B,EAASV,EAAW,CAC/B,OAAOU,EAAQ,QAAQ,aAAa,GAAK,KAAK,SAAW,KAAK,0BAA0BA,EAASV,CAAS,CAC9G,CACA,cAAcU,EAASV,EAAW,CAC1B,KAAK,gBACL,KAAK,eAAe,KAAK,EAE7B,KAAK,eAAiB,IAAIyH,GAAe,KAAM/G,EAASV,CAAS,EACjE,GAAM,CAAE,aAAAsV,CAAa,EAAI,KAAK,eAC9B,KAAK,eAAeA,CAAY,EAChC,KAAK,eAAe,MAAM,CAC9B,CACA,eAAehN,EAAS,CACpB,IAAIpH,EACJoH,EAAQ,QAAQ,aAAa,EAAI,KAAK,GACjC,GAAApH,EAAK,KAAK,4BAA8B,MAAQA,IAAO,SAAkBA,EAAG,aAAa,mBAAmB,GAC7GoH,EAAQ,mBAAmBtB,EAAc,WAAW,CAE5D,CACA,eAAeyB,EAAU,CACrBrD,GAAW,KAAK,OAAO,CAC3B,CACA,iCAAiCqD,EAAU8G,EAAW,CAClD,KAAK,oBAAoB,CAC7B,CACA,MAAM,6BAA6BjH,EAASvF,EAAU,CAClD,MAAM,KAAK,aAAaA,CAAQ,EAChC,KAAK,oBAAoB,CAC7B,CACA,MAAM,0BAA0BuF,EAASvF,EAAU,CAC/C,MAAM,KAAK,aAAaA,CAAQ,EAChC,KAAK,oBAAoB,CAC7B,CACA,eAAeuF,EAAS7B,EAAO,CAC3B,QAAQ,MAAMA,CAAK,EACnB,KAAK,oBAAoB,CAC7B,CACA,gBAAgBgC,EAAU,CACtBpD,GAAe,KAAK,OAAO,CAC/B,CACA,sBAAsB,CAAE,YAAAuC,CAAY,EAAG,CACnCxC,GAAWwC,EAAa,KAAK,iBAAiBA,CAAW,CAAC,CAC9D,CACA,oCAAoCgJ,EAAgB7N,EAAU,CAC1D,IAAMqN,EAAQ,KAAK,iBAAiBQ,EAAe,YAAaA,EAAe,SAAS,EACxFR,EAAM,SAAS,kCAAkCA,EAAOQ,EAAe,YAAaA,EAAe,SAAS,EAC5GR,EAAM,SAAS,aAAarN,CAAQ,EAC/B6N,EAAe,QAChBf,EAAQ,WAAW,CAE3B,CACA,iCAAiCe,EAAgBlK,EAAe,CAC5D,KAAK,QAAQ,SAAS,aAAaA,CAAa,EAChDmJ,EAAQ,WAAW,CACvB,CACA,sBAAsBe,EAAgBnK,EAAO,CACzC,QAAQ,MAAMA,CAAK,CACvB,CACA,uBAAuB,CAAE,YAAAmB,CAAY,EAAG,CACpCvC,GAAeuC,EAAa,KAAK,iBAAiBA,CAAW,CAAC,CAClE,CACA,sBAAsB,CAAE,QAAS2N,CAAS,EAAGlL,EAAS,CAClD,IAAMxJ,EAAQ6C,EAAS,4BAA6B,CAChD,OAAQ,KAAK,QACb,OAAQ,OAAO,OAAO,CAAE,SAAA6R,CAAS,EAAGlL,CAAO,EAC3C,WAAY,EAChB,CAAC,EACK,CAAE,iBAAAgJ,EAAkB,OAAQ,CAAE,OAAAC,CAAO,CAAG,EAAIzS,EAClD,OAAI,KAAK,KAAK,UAAYyS,IACtB,KAAK,KAAK,SAAS,cAAgBA,GAEhC,CAACD,CACZ,CACA,qBAAqBE,EAAWC,EAAY,CAAE,CAC9C,0BAA0B9S,EAAS,CAC/BmP,EAAQ,0BAA0BnP,CAAO,CAC7C,CACA,iBAAkB,CAAE,CACpB,gBAAgBwL,EAAgBsJ,EAAa,CACzC,KAAK,qBAAuBtJ,EAAe,UAAU,EAAI,CAC7D,CACA,MAAM,kBAAkBxF,EAAe2O,EAAU,CAC7C,IAAMI,EAAkB,MAAM,KAAK,2BAA2BJ,EAAS,IAAI,EAC3E,GAAII,EAAiB,CACjB,IAAMpM,EAAW,IAAIL,GAASyM,CAAe,EACvCxL,EAAW,IAAIgC,GAAc,KAAM,KAAK,KAAK,SAAU5C,EAAU4C,GAAc,cAAe,GAAO,EAAK,EAC5G,KAAK,KAAK,eACV,MAAM,KAAK,KAAK,cACpB,KAAK,cAAc,EACnB,MAAM,KAAK,KAAK,OAAOhC,CAAQ,EAC/B,KAAK,SAAW,GAChB4F,EAAQ,cAAcnJ,EAAe,KAAK,OAAO,EACjDmJ,EAAQ,YAAY,KAAK,OAAO,EAChC,KAAK,oBAAoBnJ,CAAa,CAC1C,MACS,KAAK,mCAAmCA,CAAa,GAC1D,KAAK,+BAA+BA,CAAa,CAEzD,CACA,MAAM,MAAMlF,EAAK,CACb,IAAIN,EACJ,IAAMoH,EAAU,IAAIlC,GAAa,KAAMH,EAAY,IAAKzE,EAAK,IAAI,gBAAmB,KAAK,OAAO,EAChG,OAACN,EAAK,KAAK,uBAAyB,MAAQA,IAAO,QAAkBA,EAAG,OAAO,EAC/E,KAAK,oBAAsBoH,EACpB,IAAI,QAASvE,GAAY,CAC5B,KAAK,oBAAsB,IAAM,CAC7B,KAAK,oBAAsB,IAAM,CAAE,EACnC,KAAK,oBAAsB,KAC3BA,EAAQ,CACZ,EACAuE,EAAQ,QAAQ,CACpB,CAAC,CACL,CACA,cAAc5H,EAASc,EAAKxB,EAAW,CACnC,IAAMoQ,EAAQ,KAAK,iBAAiB1P,EAASV,CAAS,EACtDoQ,EAAM,SAAS,kCAAkCA,EAAO1P,EAASV,CAAS,EAC1E,KAAK,6BAA6BU,EAAS,IAAM,CAC7C0P,EAAM,IAAM5O,CAChB,CAAC,CACL,CACA,kCAAkC4O,EAAO1P,EAASV,EAAW,CAEzD,GADA,KAAK,OAAS2F,GAAe3F,EAAWU,EAAS0P,CAAK,EAClD,KAAK,OAAQ,CACb,IAAMsF,EAAe/H,EAAa,YAAYyC,CAAK,EAAE,MAAM,EACrD,CAAE,oBAAArB,CAAoB,EAAIqB,EAAM,SACtCA,EAAM,SAAS,oBAAuB1J,GAAkB,CACpD,GAAI0J,EAAM,IAAK,CACX,GAAM,CAAE,WAAAhB,EAAY,WAAAI,CAAW,EAAI9I,EAC7B4I,EAAec,EAAM,cAAc,gBAAgB,UAEnD/F,EAAU,CACZ,SAFa,CAAE,WAAA+E,EAAY,WAAAI,EAAY,aAAAF,CAAa,EAGpD,oBAAAP,EACA,WAAY,GACZ,cAAe,GACf,sBAAuB,KAAK,sBAC5B,SAAU2G,CACd,EACI,KAAK,SACLrL,EAAQ,OAAS,KAAK,QAC1BwF,EAAQ,MAAMO,EAAM,IAAK/F,CAAO,CACpC,CACJ,CACJ,CACJ,CACA,eAAgB,CACZ,GAAI,KAAK,OAAQ,CACb,IAAMlE,EAASV,GAA0B,KAAK,MAAM,EACpDoK,EAAQ,QAAQ,OAAO1J,EAAQ9E,EAAU,KAAK,QAAQ,KAAO,EAAE,EAAG,KAAK,qBAAqB,CAChG,CACJ,CACA,MAAM,+BAA+BqF,EAAe,CAChD,QAAQ,KAAK,iBAAiBA,EAAc,qCAAqC,KAAK,QAAQ,kEAAkE,EAChK,MAAM,KAAK,cAAcA,EAAc,QAAQ,CACnD,CACA,mCAAmCA,EAAe,CAC9C,KAAK,QAAQ,aAAa,WAAY,EAAE,EACxC,IAAM3D,EAAW2D,EAAc,SACzBoJ,EAAQ,MAAOtO,EAAK6I,EAAU,CAAC,IAAM,CACnC7I,aAAe,SACf,KAAK,cAAcA,CAAG,EAGtBqO,EAAQ,MAAMrO,EAAK6I,CAAO,CAElC,EAMA,MAAO,CALO3G,EAAS,sBAAuB,CAC1C,OAAQ,KAAK,QACb,OAAQ,CAAE,SAAAX,EAAU,MAAA+M,CAAM,EAC1B,WAAY,EAChB,CAAC,EACa,gBAClB,CACA,+BAA+BpJ,EAAe,CAC1C,KAAK,KAAK,QAAQ,EAClB,KAAK,uBAAuBA,CAAa,CAC7C,CACA,uBAAuBA,EAAe,CAClC,IAAMrG,EAAU,iBAAiBqG,EAAc,6DAA6D,KAAK,QAAQ,qGACzH,MAAM,IAAIuO,GAAuB5U,CAAO,CAC5C,CACA,MAAM,cAAc0C,EAAU,CAC1B,IAAM4S,EAAU,IAAI7S,GAAcC,CAAQ,EACpCuM,EAAe,MAAMqG,EAAQ,aAC7B,CAAE,SAAAvT,EAAU,WAAAoN,EAAY,WAAAJ,CAAW,EAAIuG,EAC7C,OAAO9F,EAAQ,MAAMzN,EAAU,CAAE,SAAU,CAAE,WAAAoN,EAAY,WAAAJ,EAAY,aAAAE,CAAa,CAAE,CAAC,CACzF,CACA,iBAAiB5O,EAASV,EAAW,CACjC,IAAIkB,EACJ,IAAMiI,EAAKnE,GAAa,mBAAoBhF,EAAWU,CAAO,GAAK,KAAK,QAAQ,aAAa,QAAQ,EACrG,OAAQQ,EAAK0U,GAAoBzM,CAAE,KAAO,MAAQjI,IAAO,OAASA,EAAK,KAAK,OAChF,CACA,MAAM,2BAA2B2S,EAAW,CACxC,IAAInT,EACEyI,EAAK,IAAI,OAAO,KAAK,EAAE,EAC7B,GAAI,CAEA,GADAzI,EAAUmV,GAAgBhC,EAAU,cAAc,eAAe1K,GAAI,EAAG,KAAK,SAAS,EAClFzI,EACA,OAAOA,EAGX,GADAA,EAAUmV,GAAgBhC,EAAU,cAAc,6BAA6B1K,IAAK,EAAG,KAAK,SAAS,EACjGzI,EACA,aAAMA,EAAQ,OACP,MAAM,KAAK,2BAA2BA,CAAO,CAE5D,OACO+F,EAAP,CACI,eAAQ,MAAMA,CAAK,EACZ,IAAI1F,CACf,CACA,OAAO,IACX,CACA,sBAAsBb,EAAMF,EAAW,CACnC,IAAM2B,EAASD,GAAUxB,EAAMF,CAAS,EACxC,OAAOmC,GAAoBd,EAAUM,CAAM,EAAG,KAAK,YAAY,CACnE,CACA,0BAA0BjB,EAASV,EAAW,CAC1C,IAAMmJ,EAAKnE,GAAa,mBAAoBhF,EAAWU,CAAO,GAAK,KAAK,QAAQ,aAAa,QAAQ,EAIrG,GAHIA,aAAmB,iBAAmB,CAAC,KAAK,sBAAsBA,EAASV,CAAS,GAGpF,CAAC,KAAK,SAAWmJ,GAAM,OACvB,MAAO,GAEX,GAAIA,EAAI,CACJ,IAAMkD,EAAeuJ,GAAoBzM,CAAE,EAC3C,GAAIkD,EACA,MAAO,CAACA,EAAa,QAE7B,CAIA,MAHI,GAACwD,EAAQ,qBAAqBnP,CAAO,GAGrCV,GAAa,CAAC6P,EAAQ,qBAAqB7P,CAAS,EAI5D,CACA,IAAI,IAAK,CACL,OAAO,KAAK,QAAQ,EACxB,CACA,IAAI,SAAU,CACV,MAAO,CAAC,KAAK,QAAQ,QACzB,CACA,IAAI,WAAY,CACZ,GAAI,KAAK,QAAQ,IACb,OAAO,KAAK,QAAQ,GAE5B,CACA,IAAI,UAAU8V,EAAW,CACrB,KAAK,2BAA2B,MAAO,IAAM,CACzC,KAAK,QAAQ,IAAMA,GAAyD,IAChF,CAAC,CACL,CACA,IAAI,cAAe,CACf,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,iBAAmB,QAAa,KAAK,oBAAoB,IAAM,MAC/E,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,aAAa,UAAU,CAC/C,CACA,IAAI,SAAS9U,EAAO,CAChB,KAAK,2BAA2B,WAAY,IAAM,CAC1CA,EACA,KAAK,QAAQ,aAAa,WAAY,EAAE,EAGxC,KAAK,QAAQ,gBAAgB,UAAU,CAE/C,CAAC,CACL,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,UAAY,KAAK,SACzC,CACA,IAAI,cAAe,CACf,IAAIE,EACJ,IAAMmP,EAAO,KAAK,QAAQ,cAAc,cAAc,yBAAyB,EACzEhC,GAAQnN,EAAiDmP,GAAK,WAAa,MAAQnP,IAAO,OAASA,EAAK,IAC9G,OAAOG,EAAUgN,CAAI,CACzB,CACA,oBAAoBpJ,EAAe,CAC/B,OAAO,KAAK,kBAAkB,IAAIA,CAAa,CACnD,CACA,2BAA2BA,EAAemG,EAAU,CAChD,KAAK,kBAAkB,IAAInG,CAAa,EACxCmG,EAAS,EACT,KAAK,kBAAkB,OAAOnG,CAAa,CAC/C,CACA,6BAA6BvE,EAAS0K,EAAU,CAC5C,KAAK,yBAA2B1K,EAChC0K,EAAS,EACT,OAAO,KAAK,wBAChB,CACJ,EACA,SAASwK,GAAoBzM,EAAI,CAC7B,GAAIA,GAAM,KAAM,CACZ,IAAMzI,EAAU,SAAS,eAAeyI,CAAE,EAC1C,GAAIzI,aAAmBK,EACnB,OAAOL,CAEf,CACJ,CACA,SAASmV,GAAgBnV,EAASqV,EAAY,CAC1C,GAAIrV,EAAS,CACT,IAAM0U,EAAM1U,EAAQ,aAAa,KAAK,EACtC,GAAI0U,GAAO,MAAQW,GAAc,MAAQtT,GAAa2S,EAAKW,CAAU,EACjE,MAAM,IAAI,MAAM,6BAA6BrV,EAAQ,uDAAuD,EAKhH,GAHIA,EAAQ,gBAAkB,WAC1BA,EAAU,SAAS,WAAWA,EAAS,EAAI,GAE3CA,aAAmBK,EACnB,OAAAL,EAAQ,kBAAkB,EAC1BA,EAAQ,qBAAqB,EACtBA,CAEf,CACJ,CAEA,IAAMsV,GAAN,cAA4B,WAAY,CACpC,aAAa,cAAc7J,EAAY,CACnC,MAAMA,EAAW,cAAc,CACnC,CACA,MAAM,mBAAoB,CACtB,GAAI,CACA,MAAM,KAAK,OAAO,CACtB,OACO1F,EAAP,CACI,QAAQ,MAAMA,CAAK,CACvB,QACA,CACI,KAAK,WAAW,CACpB,CACJ,CACA,MAAM,QAAS,CACX,IAAIvF,EACJ,OAASA,EAAK,KAAK,iBAAmB,MAAQA,IAAO,OAASA,EAAM,KAAK,eAAiB,SAAY,CAClG,IAAML,EAAQ,KAAK,kBACf,KAAK,cAAcA,CAAK,IACxB,MAAMiD,GAAmB,EACzB,MAAMjD,EAAM,OAAO,OAAO,IAAI,EAEtC,GAAG,CACP,CACA,YAAa,CACT,GAAI,CACA,KAAK,OAAO,CAChB,MACA,CAAa,CACjB,CACA,+BAAgC,CAC5B,KAAK,kBAAkB,QAASoV,GAAMA,EAAE,OAAO,CAAC,CACpD,CACA,IAAI,mBAAoB,CACpB,IAAI/U,EACJ,IAAMgV,EAAmB,KAAK,eAAe,QAAShC,GAAM,CAAC,GAAGA,EAAE,QAAQ,CAAC,EAAE,OAAQ+B,GAAM,CAAC,CAACA,EAAE,EAAE,EAC3FE,EAAiB,CAAC,KAAMjV,EAAK,KAAK,mBAAqB,MAAQA,IAAO,OAAS,OAASA,EAAG,WAAa,CAAC,CAAE,EAAE,OAAQ+U,GAAM,CAAC,CAACA,EAAE,EAAE,EAAE,IAAKA,GAAMA,EAAE,EAAE,EACxJ,OAAOC,EAAiB,OAAQD,GAAME,EAAe,SAASF,EAAE,EAAE,CAAC,CACvE,CACA,IAAI,eAAgB,CAChB,GAAI,KAAK,OAAQ,CACb,IAAMG,EAAiBnC,GAAc,KAAK,MAAM,EAChD,GAAImC,EACA,OAAOA,EAEX,KAAK,MAAM,gBAAgB,CAC/B,CACA,KAAK,MAAM,6BAA6B,CAC5C,CACA,IAAI,gBAAiB,CACjB,GAAI,KAAK,OACL,OAAO,KAAK,mBAEX,GAAI,KAAK,QACV,OAAO,KAAK,sBAGZ,KAAK,MAAM,wCAAwC,CAE3D,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,gBAAgB,QAAQ,UAAU,EAAI,CACtD,CACA,IAAI,iBAAkB,CAClB,GAAI,KAAK,oBAAsB,KAAM,CACjC,IAAM3S,EAAW,KAAK,cAAc,cAAc,UAAU,EAC5D,YAAK,YAAYA,CAAQ,EAClBA,CACX,SACS,KAAK,6BAA6B,oBACvC,OAAO,KAAK,kBAEhB,KAAK,MAAM,kDAAkD,CACjE,CACA,IAAI,QAAS,CACT,OAAO,KAAK,aAAa,QAAQ,CACrC,CACA,IAAI,QAAS,CACT,OAAO,KAAK,aAAa,QAAQ,CACrC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,aAAa,SAAS,CACtC,CACA,MAAMpD,EAAS,CACX,MAAM,IAAI,MAAM,GAAG,KAAK,gBAAgBA,GAAS,CACrD,CACA,IAAI,aAAc,CACd,IAAIa,EAAIC,EACR,OAAQA,IAAOD,EAAK,KAAK,UAAU,MAAM,SAAS,KAAO,MAAQA,IAAO,OAASA,EAAK,CAAC,GAAG,CAAC,KAAO,MAAQC,IAAO,OAASA,EAAK,gBACnI,CACA,IAAI,mBAAoB,CACpB,OAAO,IAAI,YAAY,6BAA8B,CACjD,QAAS,GACT,WAAY,GACZ,OAAQ,CAAE,UAAW,KAAM,OAAQ6U,GAAc,aAAc,CACnE,CAAC,CACL,CACA,IAAI,oBAAqB,CACrB,IAAI9U,EACJ,IAAMR,GAAWQ,EAAK,KAAK,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,eAAe,KAAK,MAAM,EAC5G,OAAIR,IAAY,KACL,CAACA,CAAO,EAGR,CAAC,CAEhB,CACA,IAAI,uBAAwB,CACxB,IAAIQ,EACJ,IAAMgE,GAAYhE,EAAK,KAAK,iBAAmB,MAAQA,IAAO,OAAS,OAASA,EAAG,iBAAiB,KAAK,OAAO,EAChH,OAAIgE,EAAS,SAAW,EACb,MAAM,UAAU,MAAM,KAAKA,CAAQ,EAGnC,CAAC,CAEhB,CACJ,EAEMmR,GAAN,cAAkC,WAAY,CAC1C,aAAc,CACV,MAAM,GAAG,SAAS,EAClB,KAAK,aAAe,IACxB,CACA,mBAAoB,CAChB,KAAK,aAAe,KAAK,IAAI,MAAM,WAAW,EAAI,IAAI,UAAU,KAAK,GAAG,EAAI,IAAI,YAAY,KAAK,GAAG,EACpG7B,GAAoB,KAAK,YAAY,CACzC,CACA,sBAAuB,CACf,KAAK,cACLC,GAAuB,KAAK,YAAY,CAEhD,CACA,IAAI,KAAM,CACN,OAAO,KAAK,aAAa,KAAK,GAAK,EACvC,CACJ,EAEA1T,EAAa,oBAAsBmU,GAC/B,eAAe,IAAI,aAAa,IAAM,QACtC,eAAe,OAAO,cAAenU,CAAY,EAEjD,eAAe,IAAI,cAAc,IAAM,QACvC,eAAe,OAAO,eAAgBiV,EAAa,EAEnD,eAAe,IAAI,qBAAqB,IAAM,QAC9C,eAAe,OAAO,sBAAuBK,EAAmB,GAGnE,IAAM,CACH,IAAI3V,EAAU,SAAS,cACvB,GAAKA,GAED,CAAAA,EAAQ,aAAa,6BAA6B,EAGtD,IADAA,EAAUA,EAAQ,cACXA,GAAS,CACZ,GAAIA,GAAW,SAAS,KACpB,OAAO,QAAQ,KAAKyD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QASvBzD,EAAQ,SAAS,EAElBA,EAAUA,EAAQ,aACtB,CACJ,GAAG,EAEH,OAAO,MAAQsU,GACfV,GAAM,EC13HN,IAAMgC,GAAN,KAAoB,CAChB,YAAYC,EAAaC,EAAWC,EAAc,CAC9C,KAAK,YAAcF,EACnB,KAAK,UAAYC,EACjB,KAAK,aAAeC,EACpB,KAAK,kBAAoB,IAAI,GACjC,CACA,SAAU,CACN,KAAK,YAAY,iBAAiB,KAAK,UAAW,KAAM,KAAK,YAAY,CAC7E,CACA,YAAa,CACT,KAAK,YAAY,oBAAoB,KAAK,UAAW,KAAM,KAAK,YAAY,CAChF,CACA,iBAAiBC,EAAS,CACtB,KAAK,kBAAkB,IAAIA,CAAO,CACtC,CACA,oBAAoBA,EAAS,CACzB,KAAK,kBAAkB,OAAOA,CAAO,CACzC,CACA,YAAYC,EAAO,CACf,IAAMC,EAAgBC,GAAYF,CAAK,EACvC,QAAWD,KAAW,KAAK,SAAU,CACjC,GAAIE,EAAc,4BACd,MAGAF,EAAQ,YAAYE,CAAa,CAEzC,CACJ,CACA,aAAc,CACV,OAAO,KAAK,kBAAkB,KAAO,CACzC,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,EAAE,KAAK,CAACE,EAAMC,IAAU,CAC5D,IAAMC,EAAYF,EAAK,MAAOG,EAAaF,EAAM,MACjD,OAAOC,EAAYC,EAAa,GAAKD,EAAYC,EAAa,EAAI,CACtE,CAAC,CACL,CACJ,EACA,SAASJ,GAAYF,EAAO,CACxB,GAAI,gCAAiCA,EACjC,OAAOA,EAEN,CACD,GAAM,CAAE,yBAAAO,CAAyB,EAAIP,EACrC,OAAO,OAAO,OAAOA,EAAO,CACxB,4BAA6B,GAC7B,0BAA2B,CACvB,KAAK,4BAA8B,GACnCO,EAAyB,KAAK,IAAI,CACtC,CACJ,CAAC,CACL,CACJ,CAEA,IAAMC,GAAN,KAAiB,CACb,YAAYC,EAAa,CACrB,KAAK,YAAcA,EACnB,KAAK,kBAAoB,IAAI,IAC7B,KAAK,QAAU,EACnB,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,eAAe,QAASC,GAAkBA,EAAc,QAAQ,CAAC,EAE9E,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,KAAK,eAAe,QAASA,GAAkBA,EAAc,WAAW,CAAC,EAEjF,CACA,IAAI,gBAAiB,CACjB,OAAO,MAAM,KAAK,KAAK,kBAAkB,OAAO,CAAC,EAAE,OAAO,CAACC,EAAWC,IAAQD,EAAU,OAAO,MAAM,KAAKC,EAAI,OAAO,CAAC,CAAC,EAAG,CAAC,CAAC,CAChI,CACA,iBAAiBb,EAAS,CACtB,KAAK,6BAA6BA,CAAO,EAAE,iBAAiBA,CAAO,CACvE,CACA,oBAAoBA,EAASc,EAAsB,GAAO,CACtD,KAAK,6BAA6Bd,CAAO,EAAE,oBAAoBA,CAAO,EAClEc,GACA,KAAK,8BAA8Bd,CAAO,CAClD,CACA,YAAYe,EAAOC,EAASC,EAAS,CAAC,EAAG,CACrC,KAAK,YAAY,YAAYF,EAAO,SAASC,IAAWC,CAAM,CAClE,CACA,8BAA8BjB,EAAS,CACnC,IAAMW,EAAgB,KAAK,6BAA6BX,CAAO,EAC1DW,EAAc,YAAY,IAC3BA,EAAc,WAAW,EACzB,KAAK,6BAA6BX,CAAO,EAEjD,CACA,6BAA6BA,EAAS,CAClC,GAAM,CAAE,YAAAH,EAAa,UAAAC,EAAW,aAAAC,CAAa,EAAIC,EAC3CkB,EAAmB,KAAK,oCAAoCrB,CAAW,EACvEsB,EAAW,KAAK,SAASrB,EAAWC,CAAY,EACtDmB,EAAiB,OAAOC,CAAQ,EAC5BD,EAAiB,MAAQ,GACzB,KAAK,kBAAkB,OAAOrB,CAAW,CACjD,CACA,6BAA6BG,EAAS,CAClC,GAAM,CAAE,YAAAH,EAAa,UAAAC,EAAW,aAAAC,CAAa,EAAIC,EACjD,OAAO,KAAK,mBAAmBH,EAAaC,EAAWC,CAAY,CACvE,CACA,mBAAmBF,EAAaC,EAAWC,EAAc,CACrD,IAAMmB,EAAmB,KAAK,oCAAoCrB,CAAW,EACvEsB,EAAW,KAAK,SAASrB,EAAWC,CAAY,EAClDY,EAAgBO,EAAiB,IAAIC,CAAQ,EACjD,OAAKR,IACDA,EAAgB,KAAK,oBAAoBd,EAAaC,EAAWC,CAAY,EAC7EmB,EAAiB,IAAIC,EAAUR,CAAa,GAEzCA,CACX,CACA,oBAAoBd,EAAaC,EAAWC,EAAc,CACtD,IAAMY,EAAgB,IAAIf,GAAcC,EAAaC,EAAWC,CAAY,EAC5E,OAAI,KAAK,SACLY,EAAc,QAAQ,EAEnBA,CACX,CACA,oCAAoCd,EAAa,CAC7C,IAAIqB,EAAmB,KAAK,kBAAkB,IAAIrB,CAAW,EAC7D,OAAKqB,IACDA,EAAmB,IAAI,IACvB,KAAK,kBAAkB,IAAIrB,EAAaqB,CAAgB,GAErDA,CACX,CACA,SAASpB,EAAWC,EAAc,CAC9B,IAAMqB,EAAQ,CAACtB,CAAS,EACxB,cAAO,KAAKC,CAAY,EACnB,KAAK,EACL,QAASsB,GAAQ,CAClBD,EAAM,KAAK,GAAGrB,EAAasB,CAAG,EAAI,GAAK,MAAMA,GAAK,CACtD,CAAC,EACMD,EAAM,KAAK,GAAG,CACzB,CACJ,EAEME,GAAiC,CACnC,KAAK,CAAE,MAAArB,EAAO,MAAAsB,CAAM,EAAG,CACnB,OAAIA,GACAtB,EAAM,gBAAgB,EACnB,EACX,EACA,QAAQ,CAAE,MAAAA,EAAO,MAAAsB,CAAM,EAAG,CACtB,OAAIA,GACAtB,EAAM,eAAe,EAClB,EACX,EACA,KAAK,CAAE,MAAAA,EAAO,MAAAsB,EAAO,QAAAC,CAAQ,EAAG,CAC5B,OAAID,EACOC,IAAYvB,EAAM,OAGlB,EAEf,CACJ,EACMwB,GAAoB,+FAC1B,SAASC,GAA4BC,EAAkB,CAEnD,IAAMC,EADSD,EAAiB,KAAK,EACd,MAAMF,EAAiB,GAAK,CAAC,EAChD3B,EAAY8B,EAAQ,CAAC,EACrBC,EAAYD,EAAQ,CAAC,EACzB,OAAIC,GAAa,CAAC,CAAC,UAAW,QAAS,UAAU,EAAE,SAAS/B,CAAS,IACjEA,GAAa,IAAI+B,IACjBA,EAAY,IAET,CACH,YAAaC,GAAiBF,EAAQ,CAAC,CAAC,EACxC,UAAA9B,EACA,aAAc8B,EAAQ,CAAC,EAAIG,GAAkBH,EAAQ,CAAC,CAAC,EAAI,CAAC,EAC5D,WAAYA,EAAQ,CAAC,EACrB,WAAYA,EAAQ,CAAC,EACrB,UAAWA,EAAQ,CAAC,GAAKC,CAC7B,CACJ,CACA,SAASC,GAAiBE,EAAiB,CACvC,GAAIA,GAAmB,SACnB,OAAO,OAEN,GAAIA,GAAmB,WACxB,OAAO,QAEf,CACA,SAASD,GAAkBhC,EAAc,CACrC,OAAOA,EACF,MAAM,GAAG,EACT,OAAO,CAACkC,EAASC,IAAU,OAAO,OAAOD,EAAS,CAAE,CAACC,EAAM,QAAQ,KAAM,EAAE,CAAC,EAAG,CAAC,KAAK,KAAKA,CAAK,CAAE,CAAC,EAAG,CAAC,CAAC,CAChH,CACA,SAASC,GAAqBtC,EAAa,CACvC,GAAIA,GAAe,OACf,MAAO,SAEN,GAAIA,GAAe,SACpB,MAAO,UAEf,CAEA,SAASuC,GAASb,EAAO,CACrB,OAAOA,EAAM,QAAQ,sBAAuB,CAACc,EAAGC,IAASA,EAAK,YAAY,CAAC,CAC/E,CACA,SAASC,GAAkBhB,EAAO,CAC9B,OAAOa,GAASb,EAAM,QAAQ,MAAO,GAAG,EAAE,QAAQ,MAAO,GAAG,CAAC,CACjE,CACA,SAASiB,GAAWjB,EAAO,CACvB,OAAOA,EAAM,OAAO,CAAC,EAAE,YAAY,EAAIA,EAAM,MAAM,CAAC,CACxD,CACA,SAASkB,GAAUlB,EAAO,CACtB,OAAOA,EAAM,QAAQ,WAAY,CAACc,EAAGC,IAAS,IAAIA,EAAK,YAAY,GAAG,CAC1E,CACA,SAASI,GAASnB,EAAO,CACrB,OAAOA,EAAM,MAAM,SAAS,GAAK,CAAC,CACtC,CAEA,SAASoB,GAAYC,EAAQ,CACzB,OAAOA,GAAW,IACtB,CACA,SAASC,GAAYD,EAAQE,EAAU,CACnC,OAAO,OAAO,UAAU,eAAe,KAAKF,EAAQE,CAAQ,CAChE,CAEA,IAAMC,GAAe,CAAC,OAAQ,OAAQ,MAAO,OAAO,EAC9CC,GAAN,KAAa,CACT,YAAYxB,EAASyB,EAAOC,EAAYC,EAAQ,CAC5C,KAAK,QAAU3B,EACf,KAAK,MAAQyB,EACb,KAAK,YAAcC,EAAW,aAAe1B,EAC7C,KAAK,UAAY0B,EAAW,WAAaE,GAA8B5B,CAAO,GAAKT,GAAM,oBAAoB,EAC7G,KAAK,aAAemC,EAAW,cAAgB,CAAC,EAChD,KAAK,WAAaA,EAAW,YAAcnC,GAAM,oBAAoB,EACrE,KAAK,WAAamC,EAAW,YAAcnC,GAAM,qBAAqB,EACtE,KAAK,UAAYmC,EAAW,WAAa,GACzC,KAAK,OAASC,CAClB,CACA,OAAO,SAASjB,EAAOiB,EAAQ,CAC3B,OAAO,IAAI,KAAKjB,EAAM,QAASA,EAAM,MAAOR,GAA4BQ,EAAM,OAAO,EAAGiB,CAAM,CAClG,CACA,UAAW,CACP,IAAME,EAAc,KAAK,UAAY,IAAI,KAAK,YAAc,GACtDxD,EAAc,KAAK,gBAAkB,IAAI,KAAK,kBAAoB,GACxE,MAAO,GAAG,KAAK,YAAYwD,IAAcxD,MAAgB,KAAK,cAAc,KAAK,YACrF,CACA,0BAA0BI,EAAO,CAC7B,GAAI,CAAC,KAAK,UACN,MAAO,GAEX,IAAMqD,EAAU,KAAK,UAAU,MAAM,GAAG,EACxC,GAAI,KAAK,sBAAsBrD,EAAOqD,CAAO,EACzC,MAAO,GAEX,IAAMC,EAAiBD,EAAQ,OAAQjC,GAAQ,CAAC0B,GAAa,SAAS1B,CAAG,CAAC,EAAE,CAAC,EAC7E,OAAKkC,GAGAV,GAAY,KAAK,YAAaU,CAAc,GAC7CxC,GAAM,gCAAgC,KAAK,WAAW,EAEnD,KAAK,YAAYwC,CAAc,EAAE,YAAY,IAAMtD,EAAM,IAAI,YAAY,GALrE,EAMf,CACA,uBAAuBA,EAAO,CAC1B,GAAI,CAAC,KAAK,UACN,MAAO,GAEX,IAAMqD,EAAU,CAAC,KAAK,SAAS,EAC/B,MAAI,OAAK,sBAAsBrD,EAAOqD,CAAO,CAIjD,CACA,IAAI,QAAS,CACT,IAAME,EAAS,CAAC,EACVC,EAAU,IAAI,OAAO,SAAS,KAAK,yBAA0B,GAAG,EACtE,OAAW,CAAE,KAAAC,EAAM,MAAAnC,CAAM,IAAK,MAAM,KAAK,KAAK,QAAQ,UAAU,EAAG,CAC/D,IAAMoC,EAAQD,EAAK,MAAMD,CAAO,EAC1BpC,EAAMsC,GAASA,EAAM,CAAC,EACxBtC,IACAmC,EAAOpB,GAASf,CAAG,CAAC,EAAIuC,GAASrC,CAAK,EAE9C,CACA,OAAOiC,CACX,CACA,IAAI,iBAAkB,CAClB,OAAOrB,GAAqB,KAAK,WAAW,CAChD,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,sBAAsBlC,EAAOqD,EAAS,CAClC,GAAM,CAACO,EAAMC,EAAMC,EAAKC,CAAK,EAAIjB,GAAa,IAAKkB,GAAaX,EAAQ,SAASW,CAAQ,CAAC,EAC1F,OAAOhE,EAAM,UAAY4D,GAAQ5D,EAAM,UAAY6D,GAAQ7D,EAAM,SAAW8D,GAAO9D,EAAM,WAAa+D,CAC1G,CACJ,EACME,GAAoB,CACtB,EAAG,IAAM,QACT,OAAQ,IAAM,QACd,KAAM,IAAM,SACZ,QAAS,IAAM,SACf,MAAQC,GAAOA,EAAE,aAAa,MAAM,GAAK,SAAW,QAAU,QAC9D,OAAQ,IAAM,SACd,SAAU,IAAM,OACpB,EACA,SAASf,GAA8B5B,EAAS,CAC5C,IAAM4C,EAAU5C,EAAQ,QAAQ,YAAY,EAC5C,GAAI4C,KAAWF,GACX,OAAOA,GAAkBE,CAAO,EAAE5C,CAAO,CAEjD,CACA,SAAST,GAAMC,EAAS,CACpB,MAAM,IAAI,MAAMA,CAAO,CAC3B,CACA,SAAS4C,GAASrC,EAAO,CACrB,GAAI,CACA,OAAO,KAAK,MAAMA,CAAK,CAC3B,MACA,CACI,OAAOA,CACX,CACJ,CAEA,IAAM8C,GAAN,KAAc,CACV,YAAYC,EAASC,EAAQ,CACzB,KAAK,QAAUD,EACf,KAAK,OAASC,CAClB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,OAAO,KACvB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,IAAI,cAAe,CACf,OAAO,KAAK,OAAO,YACvB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,YAAYtE,EAAO,CACf,IAAMuE,EAAc,KAAK,mBAAmBvE,CAAK,EAC7C,KAAK,qBAAqBA,CAAK,GAAK,KAAK,oBAAoBuE,CAAW,GACxE,KAAK,gBAAgBA,CAAW,CAExC,CACA,IAAI,WAAY,CACZ,OAAO,KAAK,OAAO,SACvB,CACA,IAAI,QAAS,CACT,IAAMC,EAAS,KAAK,WAAW,KAAK,UAAU,EAC9C,GAAI,OAAOA,GAAU,WACjB,OAAOA,EAEX,MAAM,IAAI,MAAM,WAAW,KAAK,wCAAwC,KAAK,aAAa,CAC9F,CACA,oBAAoBxE,EAAO,CACvB,GAAM,CAAE,QAAAuB,CAAQ,EAAI,KAAK,OACnB,CAAE,wBAAAkD,CAAwB,EAAI,KAAK,QAAQ,YAC3C,CAAE,WAAAC,CAAW,EAAI,KAAK,QACxBC,EAAS,GACb,OAAW,CAAClB,EAAMnC,CAAK,IAAK,OAAO,QAAQ,KAAK,YAAY,EACxD,GAAImC,KAAQgB,EAAyB,CACjC,IAAMG,EAASH,EAAwBhB,CAAI,EAC3CkB,EAASA,GAAUC,EAAO,CAAE,KAAAnB,EAAM,MAAAnC,EAAO,MAAAtB,EAAO,QAAAuB,EAAS,WAAAmD,CAAW,CAAC,CACzE,KAEI,UAGR,OAAOC,CACX,CACA,mBAAmB3E,EAAO,CACtB,OAAO,OAAO,OAAOA,EAAO,CAAE,OAAQ,KAAK,OAAO,MAAO,CAAC,CAC9D,CACA,gBAAgBA,EAAO,CACnB,GAAM,CAAE,OAAA6E,EAAQ,cAAAC,CAAc,EAAI9E,EAClC,GAAI,CACA,KAAK,OAAO,KAAK,KAAK,WAAYA,CAAK,EACvC,KAAK,QAAQ,iBAAiB,KAAK,WAAY,CAAE,MAAAA,EAAO,OAAA6E,EAAQ,cAAAC,EAAe,OAAQ,KAAK,UAAW,CAAC,CAC5G,OACOhE,EAAP,CACI,GAAM,CAAE,WAAAiE,EAAY,WAAAL,EAAY,QAAAnD,EAAS,MAAAyB,CAAM,EAAI,KAC7ChC,EAAS,CAAE,WAAA+D,EAAY,WAAAL,EAAY,QAAAnD,EAAS,MAAAyB,EAAO,MAAAhD,CAAM,EAC/D,KAAK,QAAQ,YAAYc,EAAO,oBAAoB,KAAK,UAAWE,CAAM,CAC9E,CACJ,CACA,qBAAqBhB,EAAO,CACxB,IAAMJ,EAAcI,EAAM,OAI1B,OAHIA,aAAiB,eAAiB,KAAK,OAAO,0BAA0BA,CAAK,GAG7EA,aAAiB,YAAc,KAAK,OAAO,uBAAuBA,CAAK,EAChE,GAEP,KAAK,UAAYJ,EACV,GAEFA,aAAuB,SAAW,KAAK,QAAQ,SAASA,CAAW,EACjE,KAAK,MAAM,gBAAgBA,CAAW,EAGtC,KAAK,MAAM,gBAAgB,KAAK,OAAO,OAAO,CAE7D,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,OAAO,UACvB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACJ,EAEMoF,GAAN,KAAsB,CAClB,YAAYzD,EAAS0D,EAAU,CAC3B,KAAK,qBAAuB,CAAE,WAAY,GAAM,UAAW,GAAM,QAAS,EAAK,EAC/E,KAAK,QAAU1D,EACf,KAAK,QAAU,GACf,KAAK,SAAW0D,EAChB,KAAK,SAAW,IAAI,IACpB,KAAK,iBAAmB,IAAI,iBAAkBC,GAAc,KAAK,iBAAiBA,CAAS,CAAC,CAChG,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,iBAAiB,QAAQ,KAAK,QAAS,KAAK,oBAAoB,EACrE,KAAK,QAAQ,EAErB,CACA,MAAMC,EAAU,CACR,KAAK,UACL,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,IAEnBA,EAAS,EACJ,KAAK,UACN,KAAK,iBAAiB,QAAQ,KAAK,QAAS,KAAK,oBAAoB,EACrE,KAAK,QAAU,GAEvB,CACA,MAAO,CACC,KAAK,UACL,KAAK,iBAAiB,YAAY,EAClC,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,GAEvB,CACA,SAAU,CACN,GAAI,KAAK,QAAS,CACd,IAAMxD,EAAU,IAAI,IAAI,KAAK,oBAAoB,CAAC,EAClD,QAAWJ,KAAW,MAAM,KAAK,KAAK,QAAQ,EACrCI,EAAQ,IAAIJ,CAAO,GACpB,KAAK,cAAcA,CAAO,EAGlC,QAAWA,KAAW,MAAM,KAAKI,CAAO,EACpC,KAAK,WAAWJ,CAAO,CAE/B,CACJ,CACA,iBAAiB2D,EAAW,CACxB,GAAI,KAAK,QACL,QAAWE,KAAYF,EACnB,KAAK,gBAAgBE,CAAQ,CAGzC,CACA,gBAAgBA,EAAU,CAClBA,EAAS,MAAQ,aACjB,KAAK,uBAAuBA,EAAS,OAAQA,EAAS,aAAa,EAE9DA,EAAS,MAAQ,cACtB,KAAK,oBAAoBA,EAAS,YAAY,EAC9C,KAAK,kBAAkBA,EAAS,UAAU,EAElD,CACA,uBAAuB7D,EAAS8D,EAAe,CACvC,KAAK,SAAS,IAAI9D,CAAO,EACrB,KAAK,SAAS,yBAA2B,KAAK,aAAaA,CAAO,EAClE,KAAK,SAAS,wBAAwBA,EAAS8D,CAAa,EAG5D,KAAK,cAAc9D,CAAO,EAGzB,KAAK,aAAaA,CAAO,GAC9B,KAAK,WAAWA,CAAO,CAE/B,CACA,oBAAoB+D,EAAO,CACvB,QAAWC,KAAQ,MAAM,KAAKD,CAAK,EAAG,CAClC,IAAM/D,EAAU,KAAK,gBAAgBgE,CAAI,EACrChE,GACA,KAAK,YAAYA,EAAS,KAAK,aAAa,CAEpD,CACJ,CACA,kBAAkB+D,EAAO,CACrB,QAAWC,KAAQ,MAAM,KAAKD,CAAK,EAAG,CAClC,IAAM/D,EAAU,KAAK,gBAAgBgE,CAAI,EACrChE,GAAW,KAAK,gBAAgBA,CAAO,GACvC,KAAK,YAAYA,EAAS,KAAK,UAAU,CAEjD,CACJ,CACA,aAAaA,EAAS,CAClB,OAAO,KAAK,SAAS,aAAaA,CAAO,CAC7C,CACA,oBAAoBiE,EAAO,KAAK,QAAS,CACrC,OAAO,KAAK,SAAS,oBAAoBA,CAAI,CACjD,CACA,YAAYA,EAAMC,EAAW,CACzB,QAAWlE,KAAW,KAAK,oBAAoBiE,CAAI,EAC/CC,EAAU,KAAK,KAAMlE,CAAO,CAEpC,CACA,gBAAgBgE,EAAM,CAClB,GAAIA,EAAK,UAAY,KAAK,aACtB,OAAOA,CAEf,CACA,gBAAgBhE,EAAS,CACrB,OAAIA,EAAQ,aAAe,KAAK,QAAQ,YAC7B,GAGA,KAAK,QAAQ,SAASA,CAAO,CAE5C,CACA,WAAWA,EAAS,CACX,KAAK,SAAS,IAAIA,CAAO,GACtB,KAAK,gBAAgBA,CAAO,IAC5B,KAAK,SAAS,IAAIA,CAAO,EACrB,KAAK,SAAS,gBACd,KAAK,SAAS,eAAeA,CAAO,EAIpD,CACA,cAAcA,EAAS,CACf,KAAK,SAAS,IAAIA,CAAO,IACzB,KAAK,SAAS,OAAOA,CAAO,EACxB,KAAK,SAAS,kBACd,KAAK,SAAS,iBAAiBA,CAAO,EAGlD,CACJ,EAEMmE,GAAN,KAAwB,CACpB,YAAYnE,EAAS8D,EAAeJ,EAAU,CAC1C,KAAK,cAAgBI,EACrB,KAAK,SAAWJ,EAChB,KAAK,gBAAkB,IAAID,GAAgBzD,EAAS,IAAI,CAC5D,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,IAAI,UAAW,CACX,MAAO,IAAI,KAAK,gBACpB,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAM4D,EAAU,CACZ,KAAK,gBAAgB,MAAMA,CAAQ,CACvC,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,CAC9B,CACA,SAAU,CACN,KAAK,gBAAgB,QAAQ,CACjC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,aAAa5D,EAAS,CAClB,OAAOA,EAAQ,aAAa,KAAK,aAAa,CAClD,CACA,oBAAoBiE,EAAM,CACtB,IAAM9B,EAAQ,KAAK,aAAa8B,CAAI,EAAI,CAACA,CAAI,EAAI,CAAC,EAC5C7D,EAAU,MAAM,KAAK6D,EAAK,iBAAiB,KAAK,QAAQ,CAAC,EAC/D,OAAO9B,EAAM,OAAO/B,CAAO,CAC/B,CACA,eAAeJ,EAAS,CAChB,KAAK,SAAS,yBACd,KAAK,SAAS,wBAAwBA,EAAS,KAAK,aAAa,CAEzE,CACA,iBAAiBA,EAAS,CAClB,KAAK,SAAS,2BACd,KAAK,SAAS,0BAA0BA,EAAS,KAAK,aAAa,CAE3E,CACA,wBAAwBA,EAAS8D,EAAe,CACxC,KAAK,SAAS,8BAAgC,KAAK,eAAiBA,GACpE,KAAK,SAAS,6BAA6B9D,EAAS8D,CAAa,CAEzE,CACJ,EAEA,SAASM,GAAI/E,EAAKQ,EAAKE,EAAO,CAC1BsE,GAAMhF,EAAKQ,CAAG,EAAE,IAAIE,CAAK,CAC7B,CACA,SAASuE,GAAIjF,EAAKQ,EAAKE,EAAO,CAC1BsE,GAAMhF,EAAKQ,CAAG,EAAE,OAAOE,CAAK,EAC5BwE,GAAMlF,EAAKQ,CAAG,CAClB,CACA,SAASwE,GAAMhF,EAAKQ,EAAK,CACrB,IAAI2E,EAASnF,EAAI,IAAIQ,CAAG,EACxB,OAAK2E,IACDA,EAAS,IAAI,IACbnF,EAAI,IAAIQ,EAAK2E,CAAM,GAEhBA,CACX,CACA,SAASD,GAAMlF,EAAKQ,EAAK,CACrB,IAAM2E,EAASnF,EAAI,IAAIQ,CAAG,EACtB2E,GAAU,MAAQA,EAAO,MAAQ,GACjCnF,EAAI,OAAOQ,CAAG,CAEtB,CAEA,IAAM4E,EAAN,KAAe,CACX,aAAc,CACV,KAAK,YAAc,IAAI,GAC3B,CACA,IAAI,MAAO,CACP,OAAO,MAAM,KAAK,KAAK,YAAY,KAAK,CAAC,CAC7C,CACA,IAAI,QAAS,CAET,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,OAAO,CAACD,EAAQE,IAAQF,EAAO,OAAO,MAAM,KAAKE,CAAG,CAAC,EAAG,CAAC,CAAC,CAC1E,CACA,IAAI,MAAO,CAEP,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,OAAO,CAACC,EAAMD,IAAQC,EAAOD,EAAI,KAAM,CAAC,CACxD,CACA,IAAI7E,EAAKE,EAAO,CACZqE,GAAI,KAAK,YAAavE,EAAKE,CAAK,CACpC,CACA,OAAOF,EAAKE,EAAO,CACfuE,GAAI,KAAK,YAAazE,EAAKE,CAAK,CACpC,CACA,IAAIF,EAAKE,EAAO,CACZ,IAAMyE,EAAS,KAAK,YAAY,IAAI3E,CAAG,EACvC,OAAO2E,GAAU,MAAQA,EAAO,IAAIzE,CAAK,CAC7C,CACA,OAAOF,EAAK,CACR,OAAO,KAAK,YAAY,IAAIA,CAAG,CACnC,CACA,SAASE,EAAO,CAEZ,OADa,MAAM,KAAK,KAAK,YAAY,OAAO,CAAC,EACrC,KAAM2E,GAAQA,EAAI,IAAI3E,CAAK,CAAC,CAC5C,CACA,gBAAgBF,EAAK,CACjB,IAAM2E,EAAS,KAAK,YAAY,IAAI3E,CAAG,EACvC,OAAO2E,EAAS,MAAM,KAAKA,CAAM,EAAI,CAAC,CAC1C,CACA,gBAAgBzE,EAAO,CACnB,OAAO,MAAM,KAAK,KAAK,WAAW,EAC7B,OAAO,CAAC,CAAC6E,EAAMJ,CAAM,IAAMA,EAAO,IAAIzE,CAAK,CAAC,EAC5C,IAAI,CAAC,CAACF,EAAKgF,CAAO,IAAMhF,CAAG,CACpC,CACJ,EA2BA,IAAMiF,GAAN,KAAuB,CACnB,YAAYC,EAASC,EAAUC,EAAUC,EAAS,CAC9C,KAAK,UAAYF,EACjB,KAAK,QAAUE,EACf,KAAK,gBAAkB,IAAIC,GAAgBJ,EAAS,IAAI,EACxD,KAAK,SAAWE,EAChB,KAAK,iBAAmB,IAAIG,CAChC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,IAAI,UAAW,CACX,OAAO,KAAK,SAChB,CACA,IAAI,SAASJ,EAAU,CACnB,KAAK,UAAYA,EACjB,KAAK,QAAQ,CACjB,CACA,OAAQ,CACJ,KAAK,gBAAgB,MAAM,CAC/B,CACA,MAAMK,EAAU,CACZ,KAAK,gBAAgB,MAAMA,CAAQ,CACvC,CACA,MAAO,CACH,KAAK,gBAAgB,KAAK,CAC9B,CACA,SAAU,CACN,KAAK,gBAAgB,QAAQ,CACjC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,gBAAgB,OAChC,CACA,aAAaN,EAAS,CAClB,GAAM,CAAE,SAAAC,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMM,EAAUP,EAAQ,QAAQC,CAAQ,EACxC,OAAI,KAAK,SAAS,qBACPM,GAAW,KAAK,SAAS,qBAAqBP,EAAS,KAAK,OAAO,EAEvEO,CACX,KAEI,OAAO,EAEf,CACA,oBAAoBC,EAAM,CACtB,GAAM,CAAE,SAAAP,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMQ,EAAQ,KAAK,aAAaD,CAAI,EAAI,CAACA,CAAI,EAAI,CAAC,EAC5CD,EAAU,MAAM,KAAKC,EAAK,iBAAiBP,CAAQ,CAAC,EAAE,OAAQQ,GAAU,KAAK,aAAaA,CAAK,CAAC,EACtG,OAAOA,EAAM,OAAOF,CAAO,CAC/B,KAEI,OAAO,CAAC,CAEhB,CACA,eAAeP,EAAS,CACpB,GAAM,CAAE,SAAAC,CAAS,EAAI,KACjBA,GACA,KAAK,gBAAgBD,EAASC,CAAQ,CAE9C,CACA,iBAAiBD,EAAS,CACtB,IAAMU,EAAY,KAAK,iBAAiB,gBAAgBV,CAAO,EAC/D,QAAWC,KAAYS,EACnB,KAAK,kBAAkBV,EAASC,CAAQ,CAEhD,CACA,wBAAwBD,EAASW,EAAgB,CAC7C,GAAM,CAAE,SAAAV,CAAS,EAAI,KACrB,GAAIA,EAAU,CACV,IAAMM,EAAU,KAAK,aAAaP,CAAO,EACnCY,EAAgB,KAAK,iBAAiB,IAAIX,EAAUD,CAAO,EAC7DO,GAAW,CAACK,EACZ,KAAK,gBAAgBZ,EAASC,CAAQ,EAEjC,CAACM,GAAWK,GACjB,KAAK,kBAAkBZ,EAASC,CAAQ,CAEhD,CACJ,CACA,gBAAgBD,EAASC,EAAU,CAC/B,KAAK,SAAS,gBAAgBD,EAASC,EAAU,KAAK,OAAO,EAC7D,KAAK,iBAAiB,IAAIA,EAAUD,CAAO,CAC/C,CACA,kBAAkBA,EAASC,EAAU,CACjC,KAAK,SAAS,kBAAkBD,EAASC,EAAU,KAAK,OAAO,EAC/D,KAAK,iBAAiB,OAAOA,EAAUD,CAAO,CAClD,CACJ,EAEMa,GAAN,KAAwB,CACpB,YAAYb,EAASE,EAAU,CAC3B,KAAK,QAAUF,EACf,KAAK,SAAWE,EAChB,KAAK,QAAU,GACf,KAAK,UAAY,IAAI,IACrB,KAAK,iBAAmB,IAAI,iBAAkBY,GAAc,KAAK,iBAAiBA,CAAS,CAAC,CAChG,CACA,OAAQ,CACC,KAAK,UACN,KAAK,QAAU,GACf,KAAK,iBAAiB,QAAQ,KAAK,QAAS,CAAE,WAAY,GAAM,kBAAmB,EAAK,CAAC,EACzF,KAAK,QAAQ,EAErB,CACA,MAAO,CACC,KAAK,UACL,KAAK,iBAAiB,YAAY,EAClC,KAAK,iBAAiB,WAAW,EACjC,KAAK,QAAU,GAEvB,CACA,SAAU,CACN,GAAI,KAAK,QACL,QAAWC,KAAiB,KAAK,oBAC7B,KAAK,iBAAiBA,EAAe,IAAI,CAGrD,CACA,iBAAiBD,EAAW,CACxB,GAAI,KAAK,QACL,QAAWE,KAAYF,EACnB,KAAK,gBAAgBE,CAAQ,CAGzC,CACA,gBAAgBA,EAAU,CACtB,IAAMD,EAAgBC,EAAS,cAC3BD,GACA,KAAK,iBAAiBA,EAAeC,EAAS,QAAQ,CAE9D,CACA,iBAAiBD,EAAeE,EAAU,CACtC,IAAMC,EAAM,KAAK,SAAS,4BAA4BH,CAAa,EACnE,GAAIG,GAAO,KAAM,CACR,KAAK,UAAU,IAAIH,CAAa,GACjC,KAAK,kBAAkBG,EAAKH,CAAa,EAE7C,IAAMI,EAAQ,KAAK,QAAQ,aAAaJ,CAAa,EAIrD,GAHI,KAAK,UAAU,IAAIA,CAAa,GAAKI,GACrC,KAAK,sBAAsBA,EAAOD,EAAKD,CAAQ,EAE/CE,GAAS,KAAM,CACf,IAAMF,EAAW,KAAK,UAAU,IAAIF,CAAa,EACjD,KAAK,UAAU,OAAOA,CAAa,EAC/BE,GACA,KAAK,oBAAoBC,EAAKH,EAAeE,CAAQ,CAC7D,MAEI,KAAK,UAAU,IAAIF,EAAeI,CAAK,CAE/C,CACJ,CACA,kBAAkBD,EAAKH,EAAe,CAC9B,KAAK,SAAS,mBACd,KAAK,SAAS,kBAAkBG,EAAKH,CAAa,CAE1D,CACA,sBAAsBI,EAAOD,EAAKD,EAAU,CACpC,KAAK,SAAS,uBACd,KAAK,SAAS,sBAAsBE,EAAOD,EAAKD,CAAQ,CAEhE,CACA,oBAAoBC,EAAKH,EAAeE,EAAU,CAC1C,KAAK,SAAS,qBACd,KAAK,SAAS,oBAAoBC,EAAKH,EAAeE,CAAQ,CAEtE,CACA,IAAI,qBAAsB,CACtB,OAAO,MAAM,KAAK,IAAI,IAAI,KAAK,sBAAsB,OAAO,KAAK,sBAAsB,CAAC,CAAC,CAC7F,CACA,IAAI,uBAAwB,CACxB,OAAO,MAAM,KAAK,KAAK,QAAQ,UAAU,EAAE,IAAKG,GAAcA,EAAU,IAAI,CAChF,CACA,IAAI,wBAAyB,CACzB,OAAO,MAAM,KAAK,KAAK,UAAU,KAAK,CAAC,CAC3C,CACJ,EAEMC,GAAN,KAAwB,CACpB,YAAYrB,EAASe,EAAeb,EAAU,CAC1C,KAAK,kBAAoB,IAAIoB,GAAkBtB,EAASe,EAAe,IAAI,EAC3E,KAAK,SAAWb,EAChB,KAAK,gBAAkB,IAAIG,CAC/B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAMC,EAAU,CACZ,KAAK,kBAAkB,MAAMA,CAAQ,CACzC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,SAAU,CACN,KAAK,kBAAkB,QAAQ,CACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,kBAAkB,aAClC,CACA,wBAAwBN,EAAS,CAC7B,KAAK,cAAc,KAAK,qBAAqBA,CAAO,CAAC,CACzD,CACA,6BAA6BA,EAAS,CAClC,GAAM,CAACuB,EAAiBC,CAAa,EAAI,KAAK,wBAAwBxB,CAAO,EAC7E,KAAK,gBAAgBuB,CAAe,EACpC,KAAK,cAAcC,CAAa,CACpC,CACA,0BAA0BxB,EAAS,CAC/B,KAAK,gBAAgB,KAAK,gBAAgB,gBAAgBA,CAAO,CAAC,CACtE,CACA,cAAcyB,EAAQ,CAClBA,EAAO,QAASC,GAAU,KAAK,aAAaA,CAAK,CAAC,CACtD,CACA,gBAAgBD,EAAQ,CACpBA,EAAO,QAASC,GAAU,KAAK,eAAeA,CAAK,CAAC,CACxD,CACA,aAAaA,EAAO,CAChB,KAAK,SAAS,aAAaA,CAAK,EAChC,KAAK,gBAAgB,IAAIA,EAAM,QAASA,CAAK,CACjD,CACA,eAAeA,EAAO,CAClB,KAAK,SAAS,eAAeA,CAAK,EAClC,KAAK,gBAAgB,OAAOA,EAAM,QAASA,CAAK,CACpD,CACA,wBAAwB1B,EAAS,CAC7B,IAAM2B,EAAiB,KAAK,gBAAgB,gBAAgB3B,CAAO,EAC7D4B,EAAgB,KAAK,qBAAqB5B,CAAO,EACjD6B,EAAsBC,GAAIH,EAAgBC,CAAa,EAAE,UAAU,CAAC,CAACG,EAAeC,CAAY,IAAM,CAACC,GAAeF,EAAeC,CAAY,CAAC,EACxJ,OAAIH,GAAuB,GAChB,CAAC,CAAC,EAAG,CAAC,CAAC,EAGP,CAACF,EAAe,MAAME,CAAmB,EAAGD,EAAc,MAAMC,CAAmB,CAAC,CAEnG,CACA,qBAAqB7B,EAAS,CAC1B,IAAMe,EAAgB,KAAK,cACrBmB,EAAclC,EAAQ,aAAae,CAAa,GAAK,GAC3D,OAAOoB,GAAiBD,EAAalC,EAASe,CAAa,CAC/D,CACJ,EACA,SAASoB,GAAiBD,EAAalC,EAASe,EAAe,CAC3D,OAAOmB,EACF,KAAK,EACL,MAAM,KAAK,EACX,OAAQE,GAAYA,EAAQ,MAAM,EAClC,IAAI,CAACA,EAASC,KAAW,CAAE,QAAArC,EAAS,cAAAe,EAAe,QAAAqB,EAAS,MAAAC,CAAM,EAAE,CAC7E,CACA,SAASP,GAAIQ,EAAMC,EAAO,CACtB,IAAMC,EAAS,KAAK,IAAIF,EAAK,OAAQC,EAAM,MAAM,EACjD,OAAO,MAAM,KAAK,CAAE,OAAAC,CAAO,EAAG,CAACC,EAAGJ,IAAU,CAACC,EAAKD,CAAK,EAAGE,EAAMF,CAAK,CAAC,CAAC,CAC3E,CACA,SAASJ,GAAeK,EAAMC,EAAO,CACjC,OAAOD,GAAQC,GAASD,EAAK,OAASC,EAAM,OAASD,EAAK,SAAWC,EAAM,OAC/E,CAEA,IAAMG,GAAN,KAAwB,CACpB,YAAY1C,EAASe,EAAeb,EAAU,CAC1C,KAAK,kBAAoB,IAAImB,GAAkBrB,EAASe,EAAe,IAAI,EAC3E,KAAK,SAAWb,EAChB,KAAK,oBAAsB,IAAI,QAC/B,KAAK,uBAAyB,IAAI,OACtC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,SAAU,CACN,KAAK,kBAAkB,QAAQ,CACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,kBAAkB,OAClC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,kBAAkB,aAClC,CACA,aAAawB,EAAO,CAChB,GAAM,CAAE,QAAA1B,CAAQ,EAAI0B,EACd,CAAE,MAAAP,CAAM,EAAI,KAAK,yBAAyBO,CAAK,EACjDP,IACA,KAAK,6BAA6BnB,CAAO,EAAE,IAAI0B,EAAOP,CAAK,EAC3D,KAAK,SAAS,oBAAoBnB,EAASmB,CAAK,EAExD,CACA,eAAeO,EAAO,CAClB,GAAM,CAAE,QAAA1B,CAAQ,EAAI0B,EACd,CAAE,MAAAP,CAAM,EAAI,KAAK,yBAAyBO,CAAK,EACjDP,IACA,KAAK,6BAA6BnB,CAAO,EAAE,OAAO0B,CAAK,EACvD,KAAK,SAAS,sBAAsB1B,EAASmB,CAAK,EAE1D,CACA,yBAAyBO,EAAO,CAC5B,IAAIiB,EAAc,KAAK,oBAAoB,IAAIjB,CAAK,EACpD,OAAKiB,IACDA,EAAc,KAAK,WAAWjB,CAAK,EACnC,KAAK,oBAAoB,IAAIA,EAAOiB,CAAW,GAE5CA,CACX,CACA,6BAA6B3C,EAAS,CAClC,IAAI4C,EAAgB,KAAK,uBAAuB,IAAI5C,CAAO,EAC3D,OAAK4C,IACDA,EAAgB,IAAI,IACpB,KAAK,uBAAuB,IAAI5C,EAAS4C,CAAa,GAEnDA,CACX,CACA,WAAWlB,EAAO,CACd,GAAI,CAEA,MAAO,CAAE,MADK,KAAK,SAAS,mBAAmBA,CAAK,CACrC,CACnB,OACOmB,EAAP,CACI,MAAO,CAAE,MAAAA,CAAM,CACnB,CACJ,CACJ,EAEMC,GAAN,KAAsB,CAClB,YAAYC,EAAS7C,EAAU,CAC3B,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,iBAAmB,IAAI,GAChC,CACA,OAAQ,CACC,KAAK,oBACN,KAAK,kBAAoB,IAAIwC,GAAkB,KAAK,QAAS,KAAK,gBAAiB,IAAI,EACvF,KAAK,kBAAkB,MAAM,EAErC,CACA,MAAO,CACC,KAAK,oBACL,KAAK,kBAAkB,KAAK,EAC5B,OAAO,KAAK,kBACZ,KAAK,qBAAqB,EAElC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,OAAO,eACvB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,QAAQ,MACxB,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,OAAO,CAAC,CACpD,CACA,cAAcM,EAAQ,CAClB,IAAMC,EAAU,IAAIC,GAAQ,KAAK,QAASF,CAAM,EAChD,KAAK,iBAAiB,IAAIA,EAAQC,CAAO,EACzC,KAAK,SAAS,iBAAiBA,CAAO,CAC1C,CACA,iBAAiBD,EAAQ,CACrB,IAAMC,EAAU,KAAK,iBAAiB,IAAID,CAAM,EAC5CC,IACA,KAAK,iBAAiB,OAAOD,CAAM,EACnC,KAAK,SAAS,oBAAoBC,CAAO,EAEjD,CACA,sBAAuB,CACnB,KAAK,SAAS,QAASA,GAAY,KAAK,SAAS,oBAAoBA,EAAS,EAAI,CAAC,EACnF,KAAK,iBAAiB,MAAM,CAChC,CACA,mBAAmBvB,EAAO,CACtB,IAAMsB,EAASG,GAAO,SAASzB,EAAO,KAAK,MAAM,EACjD,GAAIsB,EAAO,YAAc,KAAK,WAC1B,OAAOA,CAEf,CACA,oBAAoBhD,EAASgD,EAAQ,CACjC,KAAK,cAAcA,CAAM,CAC7B,CACA,sBAAsBhD,EAASgD,EAAQ,CACnC,KAAK,iBAAiBA,CAAM,CAChC,CACJ,EAEMI,GAAN,KAAoB,CAChB,YAAYL,EAASM,EAAU,CAC3B,KAAK,QAAUN,EACf,KAAK,SAAWM,EAChB,KAAK,kBAAoB,IAAIxC,GAAkB,KAAK,QAAS,IAAI,EACjE,KAAK,mBAAqB,KAAK,WAAW,kBAC9C,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,EAC7B,KAAK,uCAAuC,CAChD,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,4BAA4BE,EAAe,CACvC,GAAIA,KAAiB,KAAK,mBACtB,OAAO,KAAK,mBAAmBA,CAAa,EAAE,IAEtD,CACA,kBAAkBG,EAAKH,EAAe,CAClC,IAAMuC,EAAa,KAAK,mBAAmBvC,CAAa,EACnD,KAAK,SAASG,CAAG,GAClB,KAAK,sBAAsBA,EAAKoC,EAAW,OAAO,KAAK,SAASpC,CAAG,CAAC,EAAGoC,EAAW,OAAOA,EAAW,YAAY,CAAC,CAEzH,CACA,sBAAsBnC,EAAOoC,EAAMtC,EAAU,CACzC,IAAMqC,EAAa,KAAK,uBAAuBC,CAAI,EAC/CpC,IAAU,OAEVF,IAAa,OACbA,EAAWqC,EAAW,OAAOA,EAAW,YAAY,GAExD,KAAK,sBAAsBC,EAAMpC,EAAOF,CAAQ,EACpD,CACA,oBAAoBC,EAAKH,EAAeE,EAAU,CAC9C,IAAMqC,EAAa,KAAK,uBAAuBpC,CAAG,EAC9C,KAAK,SAASA,CAAG,EACjB,KAAK,sBAAsBA,EAAKoC,EAAW,OAAO,KAAK,SAASpC,CAAG,CAAC,EAAGD,CAAQ,EAG/E,KAAK,sBAAsBC,EAAKoC,EAAW,OAAOA,EAAW,YAAY,EAAGrC,CAAQ,CAE5F,CACA,wCAAyC,CACrC,OAAW,CAAE,IAAAC,EAAK,KAAAqC,EAAM,aAAAC,EAAc,OAAAC,CAAO,IAAK,KAAK,iBAC/CD,GAAgB,MAAa,CAAC,KAAK,WAAW,KAAK,IAAItC,CAAG,GAC1D,KAAK,sBAAsBqC,EAAME,EAAOD,CAAY,EAAG,MAAS,CAG5E,CACA,sBAAsBD,EAAMG,EAAUC,EAAa,CAC/C,IAAMC,EAAoB,GAAGL,WACvBM,EAAgB,KAAK,SAASD,CAAiB,EACrD,GAAI,OAAOC,GAAiB,WAAY,CACpC,IAAMP,EAAa,KAAK,uBAAuBC,CAAI,EACnD,GAAI,CACA,IAAMpC,EAAQmC,EAAW,OAAOI,CAAQ,EACpCzC,EAAW0C,EACXA,IACA1C,EAAWqC,EAAW,OAAOK,CAAW,GAE5CE,EAAc,KAAK,KAAK,SAAU1C,EAAOF,CAAQ,CACrD,OACO4B,EAAP,CACI,MAAIA,aAAiB,YACjBA,EAAM,QAAU,mBAAmB,KAAK,QAAQ,cAAcS,EAAW,WAAWT,EAAM,WAExFA,CACV,CACJ,CACJ,CACA,IAAI,kBAAmB,CACnB,GAAM,CAAE,mBAAAiB,CAAmB,EAAI,KAC/B,OAAO,OAAO,KAAKA,CAAkB,EAAE,IAAK5C,GAAQ4C,EAAmB5C,CAAG,CAAC,CAC/E,CACA,IAAI,wBAAyB,CACzB,IAAM6C,EAAc,CAAC,EACrB,cAAO,KAAK,KAAK,kBAAkB,EAAE,QAAS7C,GAAQ,CAClD,IAAMoC,EAAa,KAAK,mBAAmBpC,CAAG,EAC9C6C,EAAYT,EAAW,IAAI,EAAIA,CACnC,CAAC,EACMS,CACX,CACA,SAAShD,EAAe,CACpB,IAAMuC,EAAa,KAAK,uBAAuBvC,CAAa,EACtDiD,EAAgB,MAAMC,GAAWX,EAAW,IAAI,IACtD,OAAO,KAAK,SAASU,CAAa,CACtC,CACJ,EAEME,GAAN,KAAqB,CACjB,YAAYnB,EAAS7C,EAAU,CAC3B,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,cAAgB,IAAIG,CAC7B,CACA,OAAQ,CACC,KAAK,oBACN,KAAK,kBAAoB,IAAIgB,GAAkB,KAAK,QAAS,KAAK,cAAe,IAAI,EACrF,KAAK,kBAAkB,MAAM,EAErC,CACA,MAAO,CACC,KAAK,oBACL,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,KAAK,EAC5B,OAAO,KAAK,kBAEpB,CACA,aAAa,CAAE,QAAArB,EAAS,QAASuD,CAAK,EAAG,CACjC,KAAK,MAAM,gBAAgBvD,CAAO,GAClC,KAAK,cAAcA,EAASuD,CAAI,CAExC,CACA,eAAe,CAAE,QAAAvD,EAAS,QAASuD,CAAK,EAAG,CACvC,KAAK,iBAAiBvD,EAASuD,CAAI,CACvC,CACA,cAAcvD,EAASuD,EAAM,CACzB,IAAIY,EACC,KAAK,cAAc,IAAIZ,EAAMvD,CAAO,IACrC,KAAK,cAAc,IAAIuD,EAAMvD,CAAO,GACnCmE,EAAK,KAAK,qBAAuB,MAAQA,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,gBAAgBnE,EAASuD,CAAI,CAAC,EAEtI,CACA,iBAAiBvD,EAASuD,EAAM,CAC5B,IAAIY,EACA,KAAK,cAAc,IAAIZ,EAAMvD,CAAO,IACpC,KAAK,cAAc,OAAOuD,EAAMvD,CAAO,GACtCmE,EAAK,KAAK,qBAAuB,MAAQA,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,mBAAmBnE,EAASuD,CAAI,CAAC,EAEzI,CACA,sBAAuB,CACnB,QAAWA,KAAQ,KAAK,cAAc,KAClC,QAAWvD,KAAW,KAAK,cAAc,gBAAgBuD,CAAI,EACzD,KAAK,iBAAiBvD,EAASuD,CAAI,CAG/C,CACA,IAAI,eAAgB,CAChB,MAAO,QAAQ,KAAK,QAAQ,mBAChC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,QAAQ,OACxB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACJ,EAEA,SAASa,GAAiCC,EAAaC,EAAc,CACjE,IAAMC,EAAYC,GAA2BH,CAAW,EACxD,OAAO,MAAM,KAAKE,EAAU,OAAO,CAACE,EAAQJ,KACxCK,GAAwBL,EAAaC,CAAY,EAAE,QAASf,GAASkB,EAAO,IAAIlB,CAAI,CAAC,EAC9EkB,GACR,IAAI,GAAK,CAAC,CACjB,CACA,SAASE,GAAiCN,EAAaC,EAAc,CAEjE,OADkBE,GAA2BH,CAAW,EACvC,OAAO,CAACO,EAAOP,KAC5BO,EAAM,KAAK,GAAGC,GAAwBR,EAAaC,CAAY,CAAC,EACzDM,GACR,CAAC,CAAC,CACT,CACA,SAASJ,GAA2BH,EAAa,CAC7C,IAAME,EAAY,CAAC,EACnB,KAAOF,GACHE,EAAU,KAAKF,CAAW,EAC1BA,EAAc,OAAO,eAAeA,CAAW,EAEnD,OAAOE,EAAU,QAAQ,CAC7B,CACA,SAASG,GAAwBL,EAAaC,EAAc,CACxD,IAAMQ,EAAaT,EAAYC,CAAY,EAC3C,OAAO,MAAM,QAAQQ,CAAU,EAAIA,EAAa,CAAC,CACrD,CACA,SAASD,GAAwBR,EAAaC,EAAc,CACxD,IAAMQ,EAAaT,EAAYC,CAAY,EAC3C,OAAOQ,EAAa,OAAO,KAAKA,CAAU,EAAE,IAAK5D,GAAQ,CAACA,EAAK4D,EAAW5D,CAAG,CAAC,CAAC,EAAI,CAAC,CACxF,CAEA,IAAM6D,GAAN,KAAqB,CACjB,YAAYhC,EAAS7C,EAAU,CAC3B,KAAK,QAAU,GACf,KAAK,QAAU6C,EACf,KAAK,SAAW7C,EAChB,KAAK,cAAgB,IAAIG,EACzB,KAAK,qBAAuB,IAAIA,EAChC,KAAK,oBAAsB,IAAI,IAC/B,KAAK,qBAAuB,IAAI,GACpC,CACA,OAAQ,CACC,KAAK,UACN,KAAK,kBAAkB,QAAS2E,GAAe,CAC3C,KAAK,+BAA+BA,CAAU,EAC9C,KAAK,gCAAgCA,CAAU,CACnD,CAAC,EACD,KAAK,QAAU,GACf,KAAK,kBAAkB,QAASjC,GAAYA,EAAQ,QAAQ,CAAC,EAErE,CACA,SAAU,CACN,KAAK,oBAAoB,QAASkC,GAAaA,EAAS,QAAQ,CAAC,EACjE,KAAK,qBAAqB,QAASA,GAAaA,EAAS,QAAQ,CAAC,CACtE,CACA,MAAO,CACC,KAAK,UACL,KAAK,QAAU,GACf,KAAK,qBAAqB,EAC1B,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAEpC,CACA,uBAAwB,CAChB,KAAK,oBAAoB,KAAO,IAChC,KAAK,oBAAoB,QAASA,GAAaA,EAAS,KAAK,CAAC,EAC9D,KAAK,oBAAoB,MAAM,EAEvC,CACA,wBAAyB,CACjB,KAAK,qBAAqB,KAAO,IACjC,KAAK,qBAAqB,QAASA,GAAaA,EAAS,KAAK,CAAC,EAC/D,KAAK,qBAAqB,MAAM,EAExC,CACA,gBAAgBjF,EAASkF,EAAW,CAAE,WAAAF,CAAW,EAAG,CAChD,IAAMG,EAAS,KAAK,UAAUnF,EAASgF,CAAU,EAC7CG,GACA,KAAK,cAAcA,EAAQnF,EAASgF,CAAU,CAEtD,CACA,kBAAkBhF,EAASkF,EAAW,CAAE,WAAAF,CAAW,EAAG,CAClD,IAAMG,EAAS,KAAK,iBAAiBnF,EAASgF,CAAU,EACpDG,GACA,KAAK,iBAAiBA,EAAQnF,EAASgF,CAAU,CAEzD,CACA,qBAAqBhF,EAAS,CAAE,WAAAgF,CAAW,EAAG,CAC1C,IAAM/E,EAAW,KAAK,SAAS+E,CAAU,EACnCI,EAAY,KAAK,UAAUpF,EAASgF,CAAU,EAC9CK,EAAsBrF,EAAQ,QAAQ,IAAI,KAAK,OAAO,wBAAwBgF,IAAa,EACjG,OAAI/E,EACOmF,GAAaC,GAAuBrF,EAAQ,QAAQC,CAAQ,EAG5D,EAEf,CACA,wBAAwBqF,EAAUvE,EAAe,CAC7C,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,6BAA6BM,EAAUvE,EAAe,CAClD,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,0BAA0BM,EAAUvE,EAAe,CAC/C,IAAMiE,EAAa,KAAK,qCAAqCjE,CAAa,EACtEiE,GACA,KAAK,gCAAgCA,CAAU,CAEvD,CACA,cAAcG,EAAQnF,EAASgF,EAAY,CACvC,IAAIb,EACC,KAAK,qBAAqB,IAAIa,EAAYhF,CAAO,IAClD,KAAK,cAAc,IAAIgF,EAAYG,CAAM,EACzC,KAAK,qBAAqB,IAAIH,EAAYhF,CAAO,GAChDmE,EAAK,KAAK,oBAAoB,IAAIa,CAAU,KAAO,MAAQb,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,gBAAgBgB,EAAQnF,EAASgF,CAAU,CAAC,EAEtK,CACA,iBAAiBG,EAAQnF,EAASgF,EAAY,CAC1C,IAAIb,EACA,KAAK,qBAAqB,IAAIa,EAAYhF,CAAO,IACjD,KAAK,cAAc,OAAOgF,EAAYG,CAAM,EAC5C,KAAK,qBAAqB,OAAOH,EAAYhF,CAAO,GACnDmE,EAAK,KAAK,oBACN,IAAIa,CAAU,KAAO,MAAQb,IAAO,QAAkBA,EAAG,MAAM,IAAM,KAAK,SAAS,mBAAmBgB,EAAQnF,EAASgF,CAAU,CAAC,EAE/I,CACA,sBAAuB,CACnB,QAAWA,KAAc,KAAK,qBAAqB,KAC/C,QAAWhF,KAAW,KAAK,qBAAqB,gBAAgBgF,CAAU,EACtE,QAAWG,KAAU,KAAK,cAAc,gBAAgBH,CAAU,EAC9D,KAAK,iBAAiBG,EAAQnF,EAASgF,CAAU,CAIjE,CACA,gCAAgCA,EAAY,CACxC,IAAMC,EAAW,KAAK,oBAAoB,IAAID,CAAU,EACpDC,IACAA,EAAS,SAAW,KAAK,SAASD,CAAU,EAEpD,CACA,+BAA+BA,EAAY,CACvC,IAAM/E,EAAW,KAAK,SAAS+E,CAAU,EACnCO,EAAmB,IAAIxF,GAAiB,SAAS,KAAME,EAAU,KAAM,CAAE,WAAA+E,CAAW,CAAC,EAC3F,KAAK,oBAAoB,IAAIA,EAAYO,CAAgB,EACzDA,EAAiB,MAAM,CAC3B,CACA,gCAAgCP,EAAY,CACxC,IAAMjE,EAAgB,KAAK,2BAA2BiE,CAAU,EAC1DQ,EAAoB,IAAIlE,GAAkB,KAAK,MAAM,QAASP,EAAe,IAAI,EACvF,KAAK,qBAAqB,IAAIiE,EAAYQ,CAAiB,EAC3DA,EAAkB,MAAM,CAC5B,CACA,SAASR,EAAY,CACjB,OAAO,KAAK,MAAM,QAAQ,yBAAyBA,CAAU,CACjE,CACA,2BAA2BA,EAAY,CACnC,OAAO,KAAK,MAAM,OAAO,wBAAwB,KAAK,WAAYA,CAAU,CAChF,CACA,qCAAqCjE,EAAe,CAChD,OAAO,KAAK,kBAAkB,KAAMiE,GAAe,KAAK,2BAA2BA,CAAU,IAAMjE,CAAa,CACpH,CACA,IAAI,oBAAqB,CACrB,IAAM0E,EAAe,IAAIpF,EACzB,YAAK,OAAO,QAAQ,QAASqF,GAAW,CACpC,IAAMrB,EAAcqB,EAAO,WAAW,sBACtBtB,GAAiCC,EAAa,SAAS,EAC/D,QAASc,GAAWM,EAAa,IAAIN,EAAQO,EAAO,UAAU,CAAC,CAC3E,CAAC,EACMD,CACX,CACA,IAAI,mBAAoB,CACpB,OAAO,KAAK,mBAAmB,gBAAgB,KAAK,UAAU,CAClE,CACA,IAAI,gCAAiC,CACjC,OAAO,KAAK,mBAAmB,gBAAgB,KAAK,UAAU,CAClE,CACA,IAAI,mBAAoB,CACpB,IAAME,EAAc,KAAK,+BACzB,OAAO,KAAK,OAAO,SAAS,OAAQ5C,GAAY4C,EAAY,SAAS5C,EAAQ,UAAU,CAAC,CAC5F,CACA,UAAU/C,EAASgF,EAAY,CAC3B,MAAO,CAAC,CAAC,KAAK,UAAUhF,EAASgF,CAAU,GAAK,CAAC,CAAC,KAAK,iBAAiBhF,EAASgF,CAAU,CAC/F,CACA,UAAUhF,EAASgF,EAAY,CAC3B,OAAO,KAAK,YAAY,qCAAqChF,EAASgF,CAAU,CACpF,CACA,iBAAiBhF,EAASgF,EAAY,CAClC,OAAO,KAAK,cAAc,gBAAgBA,CAAU,EAAE,KAAMG,GAAWA,EAAO,UAAYnF,CAAO,CACrG,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,QAAQ,MACxB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,QAAQ,UACxB,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,WACxB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACJ,EAEM4F,GAAN,KAAc,CACV,YAAYF,EAAQG,EAAO,CACvB,KAAK,iBAAmB,CAACC,EAAcC,EAAS,CAAC,IAAM,CACnD,GAAM,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAI,KAC5C+F,EAAS,OAAO,OAAO,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAG+F,CAAM,EAClE,KAAK,YAAY,iBAAiB,KAAK,WAAYD,EAAcC,CAAM,CAC3E,EACA,KAAK,OAASL,EACd,KAAK,MAAQG,EACb,KAAK,WAAa,IAAIH,EAAO,sBAAsB,IAAI,EACvD,KAAK,gBAAkB,IAAI5C,GAAgB,KAAM,KAAK,UAAU,EAChE,KAAK,cAAgB,IAAIM,GAAc,KAAM,KAAK,UAAU,EAC5D,KAAK,eAAiB,IAAIc,GAAe,KAAM,IAAI,EACnD,KAAK,eAAiB,IAAIa,GAAe,KAAM,IAAI,EACnD,GAAI,CACA,KAAK,WAAW,WAAW,EAC3B,KAAK,iBAAiB,YAAY,CACtC,OACOlC,EAAP,CACI,KAAK,YAAYA,EAAO,yBAAyB,CACrD,CACJ,CACA,SAAU,CACN,KAAK,gBAAgB,MAAM,EAC3B,KAAK,cAAc,MAAM,EACzB,KAAK,eAAe,MAAM,EAC1B,KAAK,eAAe,MAAM,EAC1B,GAAI,CACA,KAAK,WAAW,QAAQ,EACxB,KAAK,iBAAiB,SAAS,CACnC,OACOA,EAAP,CACI,KAAK,YAAYA,EAAO,uBAAuB,CACnD,CACJ,CACA,SAAU,CACN,KAAK,eAAe,QAAQ,CAChC,CACA,YAAa,CACT,GAAI,CACA,KAAK,WAAW,WAAW,EAC3B,KAAK,iBAAiB,YAAY,CACtC,OACOA,EAAP,CACI,KAAK,YAAYA,EAAO,0BAA0B,CACtD,CACA,KAAK,eAAe,KAAK,EACzB,KAAK,eAAe,KAAK,EACzB,KAAK,cAAc,KAAK,EACxB,KAAK,gBAAgB,KAAK,CAC9B,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,WACvB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,OAAO,UACvB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,YAAa,CACb,OAAO,KAAK,YAAY,UAC5B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,QAAQ,aACxB,CACA,YAAYA,EAAOqD,EAASH,EAAS,CAAC,EAAG,CACrC,GAAM,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAI,KAC5C+F,EAAS,OAAO,OAAO,CAAE,WAAAC,EAAY,WAAAC,EAAY,QAAAjG,CAAQ,EAAG+F,CAAM,EAClE,KAAK,YAAY,YAAYlD,EAAO,SAASqD,IAAWH,CAAM,CAClE,CACA,gBAAgB/F,EAASuD,EAAM,CAC3B,KAAK,uBAAuB,GAAGA,mBAAuBvD,CAAO,CACjE,CACA,mBAAmBA,EAASuD,EAAM,CAC9B,KAAK,uBAAuB,GAAGA,sBAA0BvD,CAAO,CACpE,CACA,gBAAgBmF,EAAQnF,EAASuD,EAAM,CACnC,KAAK,uBAAuB,GAAG4C,GAAkB5C,CAAI,mBAAoB4B,EAAQnF,CAAO,CAC5F,CACA,mBAAmBmF,EAAQnF,EAASuD,EAAM,CACtC,KAAK,uBAAuB,GAAG4C,GAAkB5C,CAAI,sBAAuB4B,EAAQnF,CAAO,CAC/F,CACA,uBAAuBoG,KAAeC,EAAM,CACxC,IAAMJ,EAAa,KAAK,WACpB,OAAOA,EAAWG,CAAU,GAAK,YACjCH,EAAWG,CAAU,EAAE,GAAGC,CAAI,CAEtC,CACJ,EAEA,SAASC,GAAMjC,EAAa,CACxB,OAAOkC,GAAOlC,EAAamC,GAAqBnC,CAAW,CAAC,CAChE,CACA,SAASkC,GAAOlC,EAAaoC,EAAY,CACrC,IAAMC,EAAoBC,GAAOtC,CAAW,EACtCuC,EAAmBC,GAAoBxC,EAAY,UAAWoC,CAAU,EAC9E,cAAO,iBAAiBC,EAAkB,UAAWE,CAAgB,EAC9DF,CACX,CACA,SAASF,GAAqBnC,EAAa,CAEvC,OADkBD,GAAiCC,EAAa,WAAW,EAC1D,OAAO,CAACyC,EAAmBC,IAAa,CACrD,IAAMN,EAAaM,EAAS1C,CAAW,EACvC,QAAWnD,KAAOuF,EAAY,CAC1B,IAAMnD,EAAawD,EAAkB5F,CAAG,GAAK,CAAC,EAC9C4F,EAAkB5F,CAAG,EAAI,OAAO,OAAOoC,EAAYmD,EAAWvF,CAAG,CAAC,CACtE,CACA,OAAO4F,CACX,EAAG,CAAC,CAAC,CACT,CACA,SAASD,GAAoBG,EAAWP,EAAY,CAChD,OAAOQ,GAAWR,CAAU,EAAE,OAAO,CAACG,EAAkB1F,IAAQ,CAC5D,IAAMoC,EAAa4D,GAAsBF,EAAWP,EAAYvF,CAAG,EACnE,OAAIoC,GACA,OAAO,OAAOsD,EAAkB,CAAE,CAAC1F,CAAG,EAAGoC,CAAW,CAAC,EAElDsD,CACX,EAAG,CAAC,CAAC,CACT,CACA,SAASM,GAAsBF,EAAWP,EAAYvF,EAAK,CACvD,IAAMiG,EAAsB,OAAO,yBAAyBH,EAAW9F,CAAG,EAE1E,GAAI,EADoBiG,GAAuB,UAAWA,GACpC,CAClB,IAAM7D,EAAa,OAAO,yBAAyBmD,EAAYvF,CAAG,EAAE,MACpE,OAAIiG,IACA7D,EAAW,IAAM6D,EAAoB,KAAO7D,EAAW,IACvDA,EAAW,IAAM6D,EAAoB,KAAO7D,EAAW,KAEpDA,CACX,CACJ,CACA,IAAM2D,IAAc,IACZ,OAAO,OAAO,uBAAyB,WAC/BG,GAAW,CAAC,GAAG,OAAO,oBAAoBA,CAAM,EAAG,GAAG,OAAO,sBAAsBA,CAAM,CAAC,EAG3F,OAAO,qBAEnB,EACGT,IAAU,IAAM,CAClB,SAASU,EAAkBhD,EAAa,CACpC,SAASiD,GAAW,CAChB,OAAO,QAAQ,UAAUjD,EAAa,UAAW,UAAU,CAC/D,CACA,OAAAiD,EAAS,UAAY,OAAO,OAAOjD,EAAY,UAAW,CACtD,YAAa,CAAE,MAAOiD,CAAS,CACnC,CAAC,EACD,QAAQ,eAAeA,EAAUjD,CAAW,EACrCiD,CACX,CACA,SAASC,GAAuB,CAI5B,IAAMC,EAAIH,EAHA,UAAY,CAClB,KAAK,EAAE,KAAK,IAAI,CACpB,CAC6B,EAC7B,OAAAG,EAAE,UAAU,EAAI,UAAY,CAAE,EACvB,IAAIA,CACf,CACA,GAAI,CACA,OAAAD,EAAqB,EACdF,CACX,MACA,CACI,OAAQhD,GAAgB,cAAuBA,CAAY,CAC3D,CACJ,CACJ,GAAG,EAEH,SAASoD,GAAgB3C,EAAY,CACjC,MAAO,CACH,WAAYA,EAAW,WACvB,sBAAuBwB,GAAMxB,EAAW,qBAAqB,CACjE,CACJ,CAEA,IAAM4C,GAAN,KAAa,CACT,YAAYC,EAAa7C,EAAY,CACjC,KAAK,YAAc6C,EACnB,KAAK,WAAaF,GAAgB3C,CAAU,EAC5C,KAAK,gBAAkB,IAAI,QAC3B,KAAK,kBAAoB,IAAI,GACjC,CACA,IAAI,YAAa,CACb,OAAO,KAAK,WAAW,UAC3B,CACA,IAAI,uBAAwB,CACxB,OAAO,KAAK,WAAW,qBAC3B,CACA,IAAI,UAAW,CACX,OAAO,MAAM,KAAK,KAAK,iBAAiB,CAC5C,CACA,uBAAuBe,EAAO,CAC1B,IAAM9C,EAAU,KAAK,qBAAqB8C,CAAK,EAC/C,KAAK,kBAAkB,IAAI9C,CAAO,EAClCA,EAAQ,QAAQ,CACpB,CACA,0BAA0B8C,EAAO,CAC7B,IAAM9C,EAAU,KAAK,gBAAgB,IAAI8C,CAAK,EAC1C9C,IACA,KAAK,kBAAkB,OAAOA,CAAO,EACrCA,EAAQ,WAAW,EAE3B,CACA,qBAAqB8C,EAAO,CACxB,IAAI9C,EAAU,KAAK,gBAAgB,IAAI8C,CAAK,EAC5C,OAAK9C,IACDA,EAAU,IAAI6C,GAAQ,KAAMC,CAAK,EACjC,KAAK,gBAAgB,IAAIA,EAAO9C,CAAO,GAEpCA,CACX,CACJ,EAEM6E,GAAN,KAAe,CACX,YAAY/B,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAItC,EAAM,CACN,OAAO,KAAK,KAAK,IAAI,KAAK,WAAWA,CAAI,CAAC,CAC9C,CACA,IAAIA,EAAM,CACN,OAAO,KAAK,OAAOA,CAAI,EAAE,CAAC,CAC9B,CACA,OAAOA,EAAM,CACT,IAAMrB,EAAc,KAAK,KAAK,IAAI,KAAK,WAAWqB,CAAI,CAAC,GAAK,GAC5D,OAAOsE,GAAS3F,CAAW,CAC/B,CACA,iBAAiBqB,EAAM,CACnB,OAAO,KAAK,KAAK,uBAAuB,KAAK,WAAWA,CAAI,CAAC,CACjE,CACA,WAAWA,EAAM,CACb,MAAO,GAAGA,SACd,CACA,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,IACtB,CACJ,EAEMuE,GAAN,KAAc,CACV,YAAYjC,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI3E,EAAK,CACL,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,OAAO,KAAK,QAAQ,aAAaqC,CAAI,CACzC,CACA,IAAIrC,EAAKC,EAAO,CACZ,IAAMoC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,YAAK,QAAQ,aAAaqC,EAAMpC,CAAK,EAC9B,KAAK,IAAID,CAAG,CACvB,CACA,IAAIA,EAAK,CACL,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,OAAO,KAAK,QAAQ,aAAaqC,CAAI,CACzC,CACA,OAAOrC,EAAK,CACR,GAAI,KAAK,IAAIA,CAAG,EAAG,CACf,IAAMqC,EAAO,KAAK,uBAAuBrC,CAAG,EAC5C,YAAK,QAAQ,gBAAgBqC,CAAI,EAC1B,EACX,KAEI,OAAO,EAEf,CACA,uBAAuBrC,EAAK,CACxB,MAAO,QAAQ,KAAK,cAAc6G,GAAU7G,CAAG,GACnD,CACJ,EAEM8G,GAAN,KAAY,CACR,YAAYC,EAAQ,CAChB,KAAK,mBAAqB,IAAI,QAC9B,KAAK,OAASA,CAClB,CACA,KAAKb,EAAQlG,EAAKgF,EAAS,CACvB,IAAIgC,EAAa,KAAK,mBAAmB,IAAId,CAAM,EAC9Cc,IACDA,EAAa,IAAI,IACjB,KAAK,mBAAmB,IAAId,EAAQc,CAAU,GAE7CA,EAAW,IAAIhH,CAAG,IACnBgH,EAAW,IAAIhH,CAAG,EAClB,KAAK,OAAO,KAAKgF,EAASkB,CAAM,EAExC,CACJ,EAEA,SAASe,GAA4BpH,EAAeW,EAAO,CACvD,MAAO,IAAIX,OAAmBW,KAClC,CAEA,IAAM0G,GAAN,KAAgB,CACZ,YAAYvC,EAAO,CACf,KAAK,MAAQA,CACjB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,MAAM,MACtB,CACA,IAAIwC,EAAY,CACZ,OAAO,KAAK,KAAKA,CAAU,GAAK,IACpC,CACA,QAAQC,EAAa,CACjB,OAAOA,EAAY,OAAO,CAACC,EAAQF,IAAeE,GAAU,KAAK,WAAWF,CAAU,GAAK,KAAK,iBAAiBA,CAAU,EAAG,MAAS,CAC3I,CACA,WAAWC,EAAa,CACpB,OAAOA,EAAY,OAAO,CAACE,EAASH,IAAe,CAC/C,GAAGG,EACH,GAAG,KAAK,eAAeH,CAAU,EACjC,GAAG,KAAK,qBAAqBA,CAAU,CAC3C,EAAG,CAAC,CAAC,CACT,CACA,WAAWA,EAAY,CACnB,IAAMpI,EAAW,KAAK,yBAAyBoI,CAAU,EACzD,OAAO,KAAK,MAAM,YAAYpI,CAAQ,CAC1C,CACA,eAAeoI,EAAY,CACvB,IAAMpI,EAAW,KAAK,yBAAyBoI,CAAU,EACzD,OAAO,KAAK,MAAM,gBAAgBpI,CAAQ,CAC9C,CACA,yBAAyBoI,EAAY,CACjC,IAAMtH,EAAgB,KAAK,OAAO,wBAAwB,KAAK,UAAU,EACzE,OAAOoH,GAA4BpH,EAAesH,CAAU,CAChE,CACA,iBAAiBA,EAAY,CACzB,IAAMpI,EAAW,KAAK,+BAA+BoI,CAAU,EAC/D,OAAO,KAAK,UAAU,KAAK,MAAM,YAAYpI,CAAQ,EAAGoI,CAAU,CACtE,CACA,qBAAqBA,EAAY,CAC7B,IAAMpI,EAAW,KAAK,+BAA+BoI,CAAU,EAC/D,OAAO,KAAK,MAAM,gBAAgBpI,CAAQ,EAAE,IAAKD,GAAY,KAAK,UAAUA,EAASqI,CAAU,CAAC,CACpG,CACA,+BAA+BA,EAAY,CACvC,IAAMI,EAAmB,GAAG,KAAK,cAAcJ,IAC/C,OAAOF,GAA4B,KAAK,OAAO,gBAAiBM,CAAgB,CACpF,CACA,UAAUzI,EAASqI,EAAY,CAC3B,GAAIrI,EAAS,CACT,GAAM,CAAE,WAAAgG,CAAW,EAAI,KACjBjF,EAAgB,KAAK,OAAO,gBAC5B2H,EAAuB,KAAK,OAAO,wBAAwB1C,CAAU,EAC3E,KAAK,MAAM,KAAKhG,EAAS,UAAUqI,IAAc,kBAAkBtH,MAAkBiF,KAAcqC,WAAoBK,MAAyBL,WACrItH,gFAA4F,CAC3G,CACA,OAAOf,CACX,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,MAAM,KACtB,CACJ,EAEM2I,GAAN,KAAgB,CACZ,YAAY9C,EAAO+C,EAAmB,CAClC,KAAK,MAAQ/C,EACb,KAAK,kBAAoB+C,CAC7B,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,QAAS,CACT,OAAO,KAAK,MAAM,MACtB,CACA,IAAI5D,EAAY,CACZ,OAAO,KAAK,KAAKA,CAAU,GAAK,IACpC,CACA,QAAQ6D,EAAa,CACjB,OAAOA,EAAY,OAAO,CAAC1D,EAAQH,IAAeG,GAAU,KAAK,WAAWH,CAAU,EAAG,MAAS,CACtG,CACA,WAAW6D,EAAa,CACpB,OAAOA,EAAY,OAAO,CAACC,EAAS9D,IAAe,CAAC,GAAG8D,EAAS,GAAG,KAAK,eAAe9D,CAAU,CAAC,EAAG,CAAC,CAAC,CAC3G,CACA,yBAAyBA,EAAY,CACjC,IAAMjE,EAAgB,KAAK,OAAO,wBAAwB,KAAK,WAAYiE,CAAU,EACrF,OAAO,KAAK,kBAAkB,aAAajE,CAAa,CAC5D,CACA,WAAWiE,EAAY,CACnB,IAAM/E,EAAW,KAAK,yBAAyB+E,CAAU,EACzD,GAAI/E,EACA,OAAO,KAAK,YAAYA,EAAU+E,CAAU,CACpD,CACA,eAAeA,EAAY,CACvB,IAAM/E,EAAW,KAAK,yBAAyB+E,CAAU,EACzD,OAAO/E,EAAW,KAAK,gBAAgBA,EAAU+E,CAAU,EAAI,CAAC,CACpE,CACA,YAAY/E,EAAU+E,EAAY,CAE9B,OADiB,KAAK,MAAM,cAAc/E,CAAQ,EAClC,OAAQD,GAAY,KAAK,eAAeA,EAASC,EAAU+E,CAAU,CAAC,EAAE,CAAC,CAC7F,CACA,gBAAgB/E,EAAU+E,EAAY,CAElC,OADiB,KAAK,MAAM,cAAc/E,CAAQ,EAClC,OAAQD,GAAY,KAAK,eAAeA,EAASC,EAAU+E,CAAU,CAAC,CAC1F,CACA,eAAehF,EAASC,EAAU+E,EAAY,CAC1C,IAAM+D,EAAsB/I,EAAQ,aAAa,KAAK,MAAM,OAAO,mBAAmB,GAAK,GAC3F,OAAOA,EAAQ,QAAQC,CAAQ,GAAK8I,EAAoB,MAAM,GAAG,EAAE,SAAS/D,CAAU,CAC1F,CACJ,EAEMgE,GAAN,KAAY,CACR,YAAYC,EAAQjJ,EAASgG,EAAYiC,EAAQ,CAC7C,KAAK,QAAU,IAAIG,GAAU,IAAI,EACjC,KAAK,QAAU,IAAIR,GAAS,IAAI,EAChC,KAAK,KAAO,IAAIE,GAAQ,IAAI,EAC5B,KAAK,gBAAmB9H,GACbA,EAAQ,QAAQ,KAAK,kBAAkB,IAAM,KAAK,QAE7D,KAAK,OAASiJ,EACd,KAAK,QAAUjJ,EACf,KAAK,WAAagG,EAClB,KAAK,MAAQ,IAAIgC,GAAMC,CAAM,EAC7B,KAAK,QAAU,IAAIU,GAAU,KAAK,cAAe3I,CAAO,CAC5D,CACA,YAAYC,EAAU,CAClB,OAAO,KAAK,QAAQ,QAAQA,CAAQ,EAAI,KAAK,QAAU,KAAK,cAAcA,CAAQ,EAAE,KAAK,KAAK,eAAe,CACjH,CACA,gBAAgBA,EAAU,CACtB,MAAO,CACH,GAAI,KAAK,QAAQ,QAAQA,CAAQ,EAAI,CAAC,KAAK,OAAO,EAAI,CAAC,EACvD,GAAG,KAAK,cAAcA,CAAQ,EAAE,OAAO,KAAK,eAAe,CAC/D,CACJ,CACA,cAAcA,EAAU,CACpB,OAAO,MAAM,KAAK,KAAK,QAAQ,iBAAiBA,CAAQ,CAAC,CAC7D,CACA,IAAI,oBAAqB,CACrB,OAAOkI,GAA4B,KAAK,OAAO,oBAAqB,KAAK,UAAU,CACvF,CACA,IAAI,iBAAkB,CAClB,OAAO,KAAK,UAAY,SAAS,eACrC,CACA,IAAI,eAAgB,CAChB,OAAO,KAAK,gBACN,KACA,IAAIa,GAAM,KAAK,OAAQ,SAAS,gBAAiB,KAAK,WAAY,KAAK,MAAM,MAAM,CAC7F,CACJ,EAEME,GAAN,KAAoB,CAChB,YAAYlJ,EAASiJ,EAAQ/I,EAAU,CACnC,KAAK,QAAUF,EACf,KAAK,OAASiJ,EACd,KAAK,SAAW/I,EAChB,KAAK,kBAAoB,IAAIwC,GAAkB,KAAK,QAAS,KAAK,oBAAqB,IAAI,EAC3F,KAAK,4BAA8B,IAAI,QACvC,KAAK,qBAAuB,IAAI,OACpC,CACA,OAAQ,CACJ,KAAK,kBAAkB,MAAM,CACjC,CACA,MAAO,CACH,KAAK,kBAAkB,KAAK,CAChC,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,OAAO,mBACvB,CACA,mBAAmBhB,EAAO,CACtB,GAAM,CAAE,QAAA1B,EAAS,QAASgG,CAAW,EAAItE,EACzC,OAAO,KAAK,kCAAkC1B,EAASgG,CAAU,CACrE,CACA,kCAAkChG,EAASgG,EAAY,CACnD,IAAMmD,EAAqB,KAAK,kCAAkCnJ,CAAO,EACrE6F,EAAQsD,EAAmB,IAAInD,CAAU,EAC7C,OAAKH,IACDA,EAAQ,KAAK,SAAS,mCAAmC7F,EAASgG,CAAU,EAC5EmD,EAAmB,IAAInD,EAAYH,CAAK,GAErCA,CACX,CACA,oBAAoB7F,EAASmB,EAAO,CAChC,IAAMiI,GAAkB,KAAK,qBAAqB,IAAIjI,CAAK,GAAK,GAAK,EACrE,KAAK,qBAAqB,IAAIA,EAAOiI,CAAc,EAC/CA,GAAkB,GAClB,KAAK,SAAS,eAAejI,CAAK,CAE1C,CACA,sBAAsBnB,EAASmB,EAAO,CAClC,IAAMiI,EAAiB,KAAK,qBAAqB,IAAIjI,CAAK,EACtDiI,IACA,KAAK,qBAAqB,IAAIjI,EAAOiI,EAAiB,CAAC,EACnDA,GAAkB,GAClB,KAAK,SAAS,kBAAkBjI,CAAK,EAGjD,CACA,kCAAkCnB,EAAS,CACvC,IAAImJ,EAAqB,KAAK,4BAA4B,IAAInJ,CAAO,EACrE,OAAKmJ,IACDA,EAAqB,IAAI,IACzB,KAAK,4BAA4B,IAAInJ,EAASmJ,CAAkB,GAE7DA,CACX,CACJ,EAEME,GAAN,KAAa,CACT,YAAY1B,EAAa,CACrB,KAAK,YAAcA,EACnB,KAAK,cAAgB,IAAIuB,GAAc,KAAK,QAAS,KAAK,OAAQ,IAAI,EACtE,KAAK,mBAAqB,IAAI7I,EAC9B,KAAK,oBAAsB,IAAI,GACnC,CACA,IAAI,SAAU,CACV,OAAO,KAAK,YAAY,OAC5B,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,QAAS,CACT,OAAO,KAAK,YAAY,MAC5B,CACA,IAAI,qBAAsB,CACtB,OAAO,KAAK,OAAO,mBACvB,CACA,IAAI,SAAU,CACV,OAAO,MAAM,KAAK,KAAK,oBAAoB,OAAO,CAAC,CACvD,CACA,IAAI,UAAW,CACX,OAAO,KAAK,QAAQ,OAAO,CAACiJ,EAAU5D,IAAW4D,EAAS,OAAO5D,EAAO,QAAQ,EAAG,CAAC,CAAC,CACzF,CACA,OAAQ,CACJ,KAAK,cAAc,MAAM,CAC7B,CACA,MAAO,CACH,KAAK,cAAc,KAAK,CAC5B,CACA,eAAeZ,EAAY,CACvB,KAAK,iBAAiBA,EAAW,UAAU,EAC3C,IAAMY,EAAS,IAAIgC,GAAO,KAAK,YAAa5C,CAAU,EACtD,KAAK,cAAcY,CAAM,EACzB,IAAM6D,EAAYzE,EAAW,sBAAsB,UAC/CyE,GACAA,EAAU,KAAKzE,EAAW,sBAAuBA,EAAW,WAAY,KAAK,WAAW,CAEhG,CACA,iBAAiBkB,EAAY,CACzB,IAAMN,EAAS,KAAK,oBAAoB,IAAIM,CAAU,EAClDN,GACA,KAAK,iBAAiBA,CAAM,CAEpC,CACA,kCAAkC1F,EAASgG,EAAY,CACnD,IAAMN,EAAS,KAAK,oBAAoB,IAAIM,CAAU,EACtD,GAAIN,EACA,OAAOA,EAAO,SAAS,KAAM3C,GAAYA,EAAQ,SAAW/C,CAAO,CAE3E,CACA,6CAA6CA,EAASgG,EAAY,CAC9D,IAAMH,EAAQ,KAAK,cAAc,kCAAkC7F,EAASgG,CAAU,EAClFH,EACA,KAAK,cAAc,oBAAoBA,EAAM,QAASA,CAAK,EAG3D,QAAQ,MAAM,kDAAkDG,kBAA4BhG,CAAO,CAE3G,CACA,YAAY6C,EAAOqD,EAASH,EAAQ,CAChC,KAAK,YAAY,YAAYlD,EAAOqD,EAASH,CAAM,CACvD,CACA,mCAAmC/F,EAASgG,EAAY,CACpD,OAAO,IAAIgD,GAAM,KAAK,OAAQhJ,EAASgG,EAAY,KAAK,MAAM,CAClE,CACA,eAAeH,EAAO,CAClB,KAAK,mBAAmB,IAAIA,EAAM,WAAYA,CAAK,EACnD,IAAMH,EAAS,KAAK,oBAAoB,IAAIG,EAAM,UAAU,EACxDH,GACAA,EAAO,uBAAuBG,CAAK,CAE3C,CACA,kBAAkBA,EAAO,CACrB,KAAK,mBAAmB,OAAOA,EAAM,WAAYA,CAAK,EACtD,IAAMH,EAAS,KAAK,oBAAoB,IAAIG,EAAM,UAAU,EACxDH,GACAA,EAAO,0BAA0BG,CAAK,CAE9C,CACA,cAAcH,EAAQ,CAClB,KAAK,oBAAoB,IAAIA,EAAO,WAAYA,CAAM,EACvC,KAAK,mBAAmB,gBAAgBA,EAAO,UAAU,EACjE,QAASG,GAAUH,EAAO,uBAAuBG,CAAK,CAAC,CAClE,CACA,iBAAiBH,EAAQ,CACrB,KAAK,oBAAoB,OAAOA,EAAO,UAAU,EAClC,KAAK,mBAAmB,gBAAgBA,EAAO,UAAU,EACjE,QAASG,GAAUH,EAAO,0BAA0BG,CAAK,CAAC,CACrE,CACJ,EAEM2D,GAAgB,CAClB,oBAAqB,kBACrB,gBAAiB,cACjB,gBAAiB,cACjB,wBAA0BxD,GAAe,QAAQA,WACjD,wBAAyB,CAACA,EAAYb,IAAW,QAAQa,KAAcb,WACvE,YAAa,OAAO,OAAO,OAAO,OAAO,CAAE,MAAO,QAAS,IAAK,MAAO,IAAK,SAAU,MAAO,IAAK,GAAI,UAAW,KAAM,YAAa,KAAM,YAAa,MAAO,aAAc,KAAM,OAAQ,IAAK,MAAO,QAAS,SAAU,UAAW,UAAW,EAAGsE,GAAkB,6BAA6B,MAAM,EAAE,EAAE,IAAKC,GAAM,CAACA,EAAGA,CAAC,CAAC,CAAC,CAAC,EAAGD,GAAkB,aAAa,MAAM,EAAE,EAAE,IAAKE,GAAM,CAACA,EAAGA,CAAC,CAAC,CAAC,CAAC,CACjY,EACA,SAASF,GAAkBG,EAAO,CAC9B,OAAOA,EAAM,OAAO,CAACC,EAAM,CAACC,EAAGC,CAAC,IAAO,OAAO,OAAO,OAAO,OAAO,CAAC,EAAGF,CAAI,EAAG,CAAE,CAACC,CAAC,EAAGC,CAAE,CAAC,EAAI,CAAC,CAAC,CAClG,CAEA,IAAMC,GAAN,KAAkB,CACd,YAAYhK,EAAU,SAAS,gBAAiBiJ,EAASO,GAAe,CACpE,KAAK,OAAS,QACd,KAAK,MAAQ,GACb,KAAK,iBAAmB,CAACxD,EAAYF,EAAcC,EAAS,CAAC,IAAM,CAC3D,KAAK,OACL,KAAK,oBAAoBC,EAAYF,EAAcC,CAAM,CAEjE,EACA,KAAK,QAAU/F,EACf,KAAK,OAASiJ,EACd,KAAK,WAAa,IAAIgB,GAAW,IAAI,EACrC,KAAK,OAAS,IAAIZ,GAAO,IAAI,EAC7B,KAAK,wBAA0B,OAAO,OAAO,CAAC,EAAGa,EAA8B,CACnF,CACA,OAAO,MAAMlK,EAASiJ,EAAQ,CAC1B,IAAMtB,EAAc,IAAI,KAAK3H,EAASiJ,CAAM,EAC5C,OAAAtB,EAAY,MAAM,EACXA,CACX,CACA,MAAM,OAAQ,CACV,MAAMwC,GAAS,EACf,KAAK,iBAAiB,cAAe,UAAU,EAC/C,KAAK,WAAW,MAAM,EACtB,KAAK,OAAO,MAAM,EAClB,KAAK,iBAAiB,cAAe,OAAO,CAChD,CACA,MAAO,CACH,KAAK,iBAAiB,cAAe,UAAU,EAC/C,KAAK,WAAW,KAAK,EACrB,KAAK,OAAO,KAAK,EACjB,KAAK,iBAAiB,cAAe,MAAM,CAC/C,CACA,SAASnE,EAAYoE,EAAuB,CACxC,KAAK,KAAK,CAAE,WAAApE,EAAY,sBAAAoE,CAAsB,CAAC,CACnD,CACA,qBAAqB7G,EAAM8G,EAAQ,CAC/B,KAAK,wBAAwB9G,CAAI,EAAI8G,CACzC,CACA,KAAKC,KAASC,EAAM,EACI,MAAM,QAAQD,CAAI,EAAIA,EAAO,CAACA,EAAM,GAAGC,CAAI,GACnD,QAASzF,GAAe,CAC5BA,EAAW,sBAAsB,YACjC,KAAK,OAAO,eAAeA,CAAU,CAE7C,CAAC,CACL,CACA,OAAOwF,KAASC,EAAM,EACE,MAAM,QAAQD,CAAI,EAAIA,EAAO,CAACA,EAAM,GAAGC,CAAI,GACnD,QAASvE,GAAe,KAAK,OAAO,iBAAiBA,CAAU,CAAC,CAChF,CACA,IAAI,aAAc,CACd,OAAO,KAAK,OAAO,SAAS,IAAKjD,GAAYA,EAAQ,UAAU,CACnE,CACA,qCAAqC/C,EAASgG,EAAY,CACtD,IAAMjD,EAAU,KAAK,OAAO,kCAAkC/C,EAASgG,CAAU,EACjF,OAAOjD,EAAUA,EAAQ,WAAa,IAC1C,CACA,YAAYF,EAAOqD,EAASH,EAAQ,CAChC,IAAI5B,EACJ,KAAK,OAAO,MAAM;AAAA;AAAA;AAAA;AAAA,IAAkB+B,EAASrD,EAAOkD,CAAM,GACzD5B,EAAK,OAAO,WAAa,MAAQA,IAAO,QAAkBA,EAAG,KAAK,OAAQ+B,EAAS,GAAI,EAAG,EAAGrD,CAAK,CACvG,CACA,oBAAoBmD,EAAYF,EAAcC,EAAS,CAAC,EAAG,CACvDA,EAAS,OAAO,OAAO,CAAE,YAAa,IAAK,EAAGA,CAAM,EACpD,KAAK,OAAO,eAAe,GAAGC,MAAeF,GAAc,EAC3D,KAAK,OAAO,IAAI,WAAY,OAAO,OAAO,CAAC,EAAGC,CAAM,CAAC,EACrD,KAAK,OAAO,SAAS,CACzB,CACJ,EACA,SAASoE,IAAW,CAChB,OAAO,IAAI,QAASK,GAAY,CACxB,SAAS,YAAc,UACvB,SAAS,iBAAiB,mBAAoB,IAAMA,EAAQ,CAAC,EAG7DA,EAAQ,CAEhB,CAAC,CACL,CAEA,SAASC,GAAwBpG,EAAa,CAE1C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAYiE,IACxB,OAAO,OAAOjE,EAAYkE,GAA6BD,CAAe,CAAC,EAC/E,CAAC,CAAC,CACT,CACA,SAASC,GAA6BzJ,EAAK,CACvC,MAAO,CACH,CAAC,GAAGA,QAAU,EAAG,CACb,KAAM,CACF,GAAM,CAAE,QAAA0J,CAAQ,EAAI,KACpB,GAAIA,EAAQ,IAAI1J,CAAG,EACf,OAAO0J,EAAQ,IAAI1J,CAAG,EAErB,CACD,IAAME,EAAYwJ,EAAQ,iBAAiB1J,CAAG,EAC9C,MAAM,IAAI,MAAM,sBAAsBE,IAAY,CACtD,CACJ,CACJ,EACA,CAAC,GAAGF,UAAY,EAAG,CACf,KAAM,CACF,OAAO,KAAK,QAAQ,OAAOA,CAAG,CAClC,CACJ,EACA,CAAC,MAAM+C,GAAW/C,CAAG,QAAQ,EAAG,CAC5B,KAAM,CACF,OAAO,KAAK,QAAQ,IAAIA,CAAG,CAC/B,CACJ,CACJ,CACJ,CAEA,SAAS2J,GAAyBxG,EAAa,CAE3C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAYqE,IACxB,OAAO,OAAOrE,EAAYsE,GAA8BD,CAAgB,CAAC,EACjF,CAAC,CAAC,CACT,CACA,SAASE,GAAoB/E,EAAYjG,EAASgG,EAAY,CAC1D,OAAOC,EAAW,YAAY,qCAAqCjG,EAASgG,CAAU,CAC1F,CACA,SAASiF,GAAqChF,EAAYjG,EAASgF,EAAY,CAC3E,IAAIkG,EAAmBF,GAAoB/E,EAAYjG,EAASgF,CAAU,EAK1E,GAJIkG,IAEJjF,EAAW,YAAY,OAAO,6CAA6CjG,EAASgF,CAAU,EAC9FkG,EAAmBF,GAAoB/E,EAAYjG,EAASgF,CAAU,EAClEkG,GACA,OAAOA,CACf,CACA,SAASH,GAA8BxH,EAAM,CACzC,IAAM4H,EAAgBhF,GAAkB5C,CAAI,EAC5C,MAAO,CACH,CAAC,GAAG4H,SAAqB,EAAG,CACxB,KAAM,CACF,IAAMC,EAAgB,KAAK,QAAQ,KAAK7H,CAAI,EACtCtD,EAAW,KAAK,QAAQ,yBAAyBsD,CAAI,EAC3D,GAAI6H,EAAe,CACf,IAAMF,EAAmBD,GAAqC,KAAMG,EAAe7H,CAAI,EACvF,GAAI2H,EACA,OAAOA,EACX,MAAM,IAAI,MAAM,gEAAgE3H,oCAAuC,KAAK,aAAa,CAC7I,CACA,MAAM,IAAI,MAAM,2BAA2BA,2BAA8B,KAAK,iFAAiFtD,KAAY,CAC/K,CACJ,EACA,CAAC,GAAGkL,UAAsB,EAAG,CACzB,KAAM,CACF,IAAMrC,EAAU,KAAK,QAAQ,QAAQvF,CAAI,EACzC,OAAIuF,EAAQ,OAAS,EACVA,EACF,IAAKsC,GAAkB,CACxB,IAAMF,EAAmBD,GAAqC,KAAMG,EAAe7H,CAAI,EACvF,GAAI2H,EACA,OAAOA,EACX,QAAQ,KAAK,gEAAgE3H,oCAAuC,KAAK,cAAe6H,CAAa,CACzJ,CAAC,EACI,OAAQnF,GAAeA,CAAU,EAEnC,CAAC,CACZ,CACJ,EACA,CAAC,GAAGkF,gBAA4B,EAAG,CAC/B,KAAM,CACF,IAAMC,EAAgB,KAAK,QAAQ,KAAK7H,CAAI,EACtCtD,EAAW,KAAK,QAAQ,yBAAyBsD,CAAI,EAC3D,GAAI6H,EACA,OAAOA,EAGP,MAAM,IAAI,MAAM,2BAA2B7H,2BAA8B,KAAK,iFAAiFtD,KAAY,CAEnL,CACJ,EACA,CAAC,GAAGkL,iBAA6B,EAAG,CAChC,KAAM,CACF,OAAO,KAAK,QAAQ,QAAQ5H,CAAI,CACpC,CACJ,EACA,CAAC,MAAMU,GAAWkH,CAAa,SAAS,EAAG,CACvC,KAAM,CACF,OAAO,KAAK,QAAQ,IAAI5H,CAAI,CAChC,CACJ,CACJ,CACJ,CAEA,SAAS8H,GAAyBhH,EAAa,CAE3C,OADgBD,GAAiCC,EAAa,SAAS,EACxD,OAAO,CAACoC,EAAY6E,IACxB,OAAO,OAAO7E,EAAY8E,GAA8BD,CAAgB,CAAC,EACjF,CAAC,CAAC,CACT,CACA,SAASC,GAA8BhI,EAAM,CACzC,MAAO,CACH,CAAC,GAAGA,SAAY,EAAG,CACf,KAAM,CACF,IAAMgF,EAAS,KAAK,QAAQ,KAAKhF,CAAI,EACrC,GAAIgF,EACA,OAAOA,EAGP,MAAM,IAAI,MAAM,2BAA2BhF,WAAc,KAAK,wBAAwB,CAE9F,CACJ,EACA,CAAC,GAAGA,UAAa,EAAG,CAChB,KAAM,CACF,OAAO,KAAK,QAAQ,QAAQA,CAAI,CACpC,CACJ,EACA,CAAC,MAAMU,GAAWV,CAAI,SAAS,EAAG,CAC9B,KAAM,CACF,OAAO,KAAK,QAAQ,IAAIA,CAAI,CAChC,CACJ,CACJ,CACJ,CAEA,SAASiI,GAAwBnH,EAAa,CAC1C,IAAMoH,EAAuB9G,GAAiCN,EAAa,QAAQ,EAC7EqH,EAAwB,CAC1B,mBAAoB,CAChB,KAAM,CACF,OAAOD,EAAqB,OAAO,CAACE,EAAQC,IAAwB,CAChE,IAAMC,EAAkBC,GAAyBF,EAAqB,KAAK,UAAU,EAC/E7K,EAAgB,KAAK,KAAK,uBAAuB8K,EAAgB,GAAG,EAC1E,OAAO,OAAO,OAAOF,EAAQ,CAAE,CAAC5K,CAAa,EAAG8K,CAAgB,CAAC,CACrE,EAAG,CAAC,CAAC,CACT,CACJ,CACJ,EACA,OAAOJ,EAAqB,OAAO,CAAChF,EAAYmF,IACrC,OAAO,OAAOnF,EAAYsF,GAAiCH,CAAmB,CAAC,EACvFF,CAAqB,CAC5B,CACA,SAASK,GAAiCH,EAAqB3F,EAAY,CACvE,IAAMnB,EAAagH,GAAyBF,EAAqB3F,CAAU,EACrE,CAAE,IAAA/E,EAAK,KAAAqC,EAAM,OAAQyI,EAAM,OAAQC,CAAM,EAAInH,EACnD,MAAO,CACH,CAACvB,CAAI,EAAG,CACJ,KAAM,CACF,IAAMpC,EAAQ,KAAK,KAAK,IAAID,CAAG,EAC/B,OAAIC,IAAU,KACH6K,EAAK7K,CAAK,EAGV2D,EAAW,YAE1B,EACA,IAAI3D,EAAO,CACHA,IAAU,OACV,KAAK,KAAK,OAAOD,CAAG,EAGpB,KAAK,KAAK,IAAIA,EAAK+K,EAAM9K,CAAK,CAAC,CAEvC,CACJ,EACA,CAAC,MAAM8C,GAAWV,CAAI,GAAG,EAAG,CACxB,KAAM,CACF,OAAO,KAAK,KAAK,IAAIrC,CAAG,GAAK4D,EAAW,qBAC5C,CACJ,CACJ,CACJ,CACA,SAASgH,GAAyB,CAACpK,EAAOwK,CAAc,EAAGjG,EAAY,CACnE,OAAOkG,GAAyC,CAC5C,WAAAlG,EACA,MAAAvE,EACA,eAAAwK,CACJ,CAAC,CACL,CACA,SAASE,GAAuBC,EAAU,CACtC,OAAQA,EAAU,CACd,KAAK,MACD,MAAO,QACX,KAAK,QACD,MAAO,UACX,KAAK,OACD,MAAO,SACX,KAAK,OACD,MAAO,SACX,KAAK,OACD,MAAO,QACf,CACJ,CACA,SAASC,GAAsB9I,EAAc,CACzC,OAAQ,OAAOA,EAAc,CACzB,IAAK,UACD,MAAO,UACX,IAAK,SACD,MAAO,SACX,IAAK,SACD,MAAO,QACf,CACA,GAAI,MAAM,QAAQA,CAAY,EAC1B,MAAO,QACX,GAAI,OAAO,UAAU,SAAS,KAAKA,CAAY,IAAM,kBACjD,MAAO,QACf,CACA,SAAS+I,GAAqBC,EAAS,CACnC,GAAM,CAAE,WAAAvG,EAAY,MAAAvE,EAAO,WAAA+K,CAAW,EAAID,EACpCE,EAAUC,GAAYF,EAAW,IAAI,EACrCG,EAAaD,GAAYF,EAAW,OAAO,EAC3CI,EAAaH,GAAWE,EACxBE,EAAWJ,GAAW,CAACE,EACvBG,EAAc,CAACL,GAAWE,EAC1BI,EAAiBZ,GAAuBK,EAAW,IAAI,EACvDQ,EAAuBX,GAAsBE,EAAQ,WAAW,OAAO,EAC7E,GAAIM,EACA,OAAOE,EACX,GAAID,EACA,OAAOE,EACX,GAAID,IAAmBC,EAAsB,CACzC,IAAMC,EAAejH,EAAa,GAAGA,KAAcvE,IAAUA,EAC7D,MAAM,IAAI,MAAM,uDAAuDwL,mCAA8CF,sCAAmDP,EAAW,wBAAwBQ,KAAwB,CACvO,CACA,GAAIJ,EACA,OAAOG,CACf,CACA,SAASG,GAAyBX,EAAS,CACvC,GAAM,CAAE,WAAAvG,EAAY,MAAAvE,EAAO,eAAAwK,CAAe,EAAIM,EAExCQ,EAAiBT,GADJ,CAAE,WAAAtG,EAAY,MAAAvE,EAAO,WAAYwK,CAAe,CACb,EAChDe,EAAuBX,GAAsBJ,CAAc,EAC3DkB,EAAmBhB,GAAuBF,CAAc,EACxDmB,EAAOL,GAAkBC,GAAwBG,EACvD,GAAIC,EACA,OAAOA,EACX,IAAMH,EAAejH,EAAa,GAAGA,KAAciG,IAAmBxK,EACtE,MAAM,IAAI,MAAM,uBAAuBwL,WAAsBxL,UAAc,CAC/E,CACA,SAAS4L,GAA0BpB,EAAgB,CAC/C,IAAMG,EAAWD,GAAuBF,CAAc,EACtD,GAAIG,EACA,OAAOkB,GAAoBlB,CAAQ,EACvC,IAAMO,EAAaY,GAAYtB,EAAgB,SAAS,EAClDQ,EAAUc,GAAYtB,EAAgB,MAAM,EAC5CO,EAAaP,EACnB,GAAIU,EACA,OAAOH,EAAW,QACtB,GAAIC,EAAS,CACT,GAAM,CAAE,KAAAW,CAAK,EAAIZ,EACXgB,EAAmBrB,GAAuBiB,CAAI,EACpD,GAAII,EACA,OAAOF,GAAoBE,CAAgB,CACnD,CACA,OAAOvB,CACX,CACA,SAASC,GAAyCK,EAAS,CACvD,GAAM,CAAE,MAAA9K,EAAO,eAAAwK,CAAe,EAAIM,EAC5BtL,EAAM,GAAG6G,GAAUrG,CAAK,UACxB2L,EAAOF,GAAyBX,CAAO,EAC7C,MAAO,CACH,KAAAa,EACA,IAAAnM,EACA,KAAMwM,GAASxM,CAAG,EAClB,IAAI,cAAe,CACf,OAAOoM,GAA0BpB,CAAc,CACnD,EACA,IAAI,uBAAwB,CACxB,OAAOI,GAAsBJ,CAAc,IAAM,MACrD,EACA,OAAQyB,GAAQN,CAAI,EACpB,OAAQO,GAAQP,CAAI,GAAKO,GAAQ,OACrC,CACJ,CACA,IAAML,GAAsB,CACxB,IAAI,OAAQ,CACR,MAAO,CAAC,CACZ,EACA,QAAS,GACT,OAAQ,EACR,IAAI,QAAS,CACT,MAAO,CAAC,CACZ,EACA,OAAQ,EACZ,EACMI,GAAU,CACZ,MAAMxM,EAAO,CACT,IAAMyI,EAAQ,KAAK,MAAMzI,CAAK,EAC9B,GAAI,CAAC,MAAM,QAAQyI,CAAK,EACpB,MAAM,IAAI,UAAU,yDAAyDzI,eAAmBmL,GAAsB1C,CAAK,IAAI,EAEnI,OAAOA,CACX,EACA,QAAQzI,EAAO,CACX,MAAO,EAAEA,GAAS,KAAO,OAAOA,CAAK,EAAE,YAAY,GAAK,QAC5D,EACA,OAAOA,EAAO,CACV,OAAO,OAAOA,EAAM,QAAQ,KAAM,EAAE,CAAC,CACzC,EACA,OAAOA,EAAO,CACV,IAAMiG,EAAS,KAAK,MAAMjG,CAAK,EAC/B,GAAIiG,IAAW,MAAQ,OAAOA,GAAU,UAAY,MAAM,QAAQA,CAAM,EACpE,MAAM,IAAI,UAAU,0DAA0DjG,eAAmBmL,GAAsBlF,CAAM,IAAI,EAErI,OAAOA,CACX,EACA,OAAOjG,EAAO,CACV,OAAOA,CACX,CACJ,EACMyM,GAAU,CACZ,QAASC,GACT,MAAOC,GACP,OAAQA,EACZ,EACA,SAASA,GAAU3M,EAAO,CACtB,OAAO,KAAK,UAAUA,CAAK,CAC/B,CACA,SAAS0M,GAAY1M,EAAO,CACxB,MAAO,GAAGA,GACd,CAEA,IAAM4M,EAAN,KAAiB,CACb,YAAYhL,EAAS,CACjB,KAAK,QAAUA,CACnB,CACA,WAAW,YAAa,CACpB,MAAO,EACX,CACA,OAAO,UAAUiL,EAAaC,EAAc,CAE5C,CACA,IAAI,aAAc,CACd,OAAO,KAAK,QAAQ,WACxB,CACA,IAAI,OAAQ,CACR,OAAO,KAAK,QAAQ,KACxB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,YAAa,CACb,OAAO,KAAK,MAAM,UACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,SAAU,CACV,OAAO,KAAK,MAAM,OACtB,CACA,IAAI,MAAO,CACP,OAAO,KAAK,MAAM,IACtB,CACA,YAAa,CACb,CACA,SAAU,CACV,CACA,YAAa,CACb,CACA,SAASC,EAAW,CAAE,OAAA3F,EAAS,KAAK,QAAS,OAAAxC,EAAS,CAAC,EAAG,OAAAoI,EAAS,KAAK,WAAY,QAAAC,EAAU,GAAM,WAAAC,EAAa,EAAM,EAAI,CAAC,EAAG,CAC3H,IAAMhB,EAAOc,EAAS,GAAGA,KAAUD,IAAcA,EAC3CI,EAAQ,IAAI,YAAYjB,EAAM,CAAE,OAAAtH,EAAQ,QAAAqI,EAAS,WAAAC,CAAW,CAAC,EACnE,OAAA9F,EAAO,cAAc+F,CAAK,EACnBA,CACX,CACJ,EACAP,EAAW,UAAY,CACnBtD,GACAY,GACAG,GACAX,EACJ,EACAkD,EAAW,QAAU,CAAC,EACtBA,EAAW,QAAU,CAAC,EACtBA,EAAW,OAAS,CAAC,EC9/ErB,IAAOQ,GAAP,cAA6BC,CAAW,CACtC,OAAOC,EAAO,CACRA,EAAM,OAAO,SACf,SAAS,KAAK,MAAM,UAAY,SAChC,KAAK,QAAQ,MAAM,UAAY,SAC/B,KAAK,QAAQ,MAAM,UAAY,UAE/B,SAAS,KAAK,MAAM,UAAY,SAChC,KAAK,QAAQ,MAAM,UAAY,GAC/B,KAAK,QAAQ,MAAM,UAAY,GAEnC,CACF,ECZA,IAAOC,GAAP,cAA6BC,CAAW,CAatC,SAAU,CACR,KAAK,QAAQ,MAAM,OAAS,IAE5B,KAAK,iBAAiB,UAAY,OAAO,OAAO,OAAO,KACvD,KAAK,oBAAoB,UAAY,OAAO,OAAO,OAAO,QAC1D,KAAK,aAAa,UAAY,OAAO,OAAO,GAAG,KAC/C,KAAK,gBAAgB,UAAY,OAAO,OAAO,GAAG,QAClD,KAAK,iBAAiB,UAAY,OAAO,OAAO,OAAO,KAEvD,KAAK,oBAAoB,UAAY,OAAO,WAC5C,KAAK,qBAAqB,UAAY,OAAO,YAC7C,KAAK,uBAAuB,UAAY,OAAO,gBACjD,CAEA,QAASC,EAAO,CACd,KAAK,oBAAoB,UAAY,OAAO,WAC5C,KAAK,qBAAqB,UAAY,OAAO,WAC/C,CAEA,QAASA,EAAO,CACd,IAAIC,EAAQ,SAAS,KAAK,cAAc,eAAe,EAEpDA,EACDA,EAAM,OAAO,GAEbA,EAAQ,SAAS,cAAc,OAAO,EACtCA,EAAM,GAAK,UACXA,EAAM,OAAO,+BAA+B,EAE5C,SAAS,KAAK,YAAYA,CAAK,EAEnC,CAEA,WAAYD,EAAO,CACjB,KAAK,WAAW,OAAS,CAAC,KAAK,WAAW,MAC5C,CACF,EAhDEE,EADKJ,GACE,UAAU,CACf,aACA,gBACA,SACA,YACA,gBACA,iBACA,mBACA,aACA,MACF,GCXF,IAAOK,GAAP,cAA6BC,CAAW,CAOtC,MAAM,KAAKC,EAAO,CAChB,GAAI,EAAE,cAAe,WAAY,OAEjC,GAAI,CACF,MAAM,UAAU,UAAU,UAAU,KAAK,UAAU,KAAK,CAAC,CAC3D,OAAQC,EAAN,CACA,QAAQ,MAAM,gBAAiBA,CAAC,EAChC,MACF,CAEA,IAAMC,EAAa,KAAK,cAAgB,aAAe,UAEvD,KAAKA,CAAU,EAAE,UAAY,KAAK,kBAE9B,KAAK,eAAe,KAAK,WAAW,UAAU,IAAI,QAAQ,EAC1D,KAAK,2BAA2B,KAAK,uBAAuB,UAAU,OAAO,QAAQ,CAC3F,CACF,EAvBEC,EADKL,GACE,UAAU,CAAC,OAAQ,OAAQ,kBAAkB,GACpDK,EAFKL,GAEE,SAAS,CACd,KAAM,OACN,aAAc,MAChB,GCLF,IAAOM,GAAP,cAA6BC,CAAW,CA0BtC,SAAU,CACR,KAAK,kBAAoB,CAAC,EAC1B,KAAK,gBAAgB,CACvB,CAEA,OAAOC,EAAQ,OAAW,CACxB,GAAI,KAAK,uBAAyB,OAAW,OAE7C,KAAK,eAAiB,EAEtB,IAAMC,EAAwB,KAAK,qBAC7BC,EAAuB,KAAK,qBAElC,GAAID,GAAyBC,EAC3B,QAAWC,KAAY,KAAK,gBAC1B,KAAK,iBAAiBA,CAAQ,MAE3B,CACL,IAAMC,EAAY,MAAM,KAAK,KAAK,eAAe,EAEjD,QAAW,KAAK,KAAK,gBACnBA,EAAU,CAAC,EAAE,UAAY,KAAK,kBAAkB,CAAC,EAGnD,KAAK,kBAAoB,CAAC,EAE1B,KAAK,gBAAgB,CACvB,CACF,CAEA,iBAAkB,CAChB,IAAMC,EAAa,KAAK,QAAQ,iBAAiB,WAAW,EACtDD,EAAY,KAAK,QAAQ,iBAAiB,YAAY,EAE5D,KAAK,qBAAuB,KAAK,qBAEjC,QAAWE,KAAK,MAAM,KAAKD,CAAU,EAAG,CACtC,IAAME,EAAYF,EAAWC,CAAC,EACxBE,EAAWJ,EAAUE,CAAC,EACtBG,EAAWD,EAAS,cAAc,sBAAsB,EAE9D,KAAK,kBAAkB,KAAKA,EAAS,SAAS,EAE9CD,EAAU,QAAQ,SAAWC,EAAS,GACtCD,EAAU,QAAQ,MAAQ,QAC1BA,EAAU,QAAQ,gBAAkB,YAEhCE,IAAUA,EAAS,QAAQ,MAAQ,SACvCD,EAAS,QAAQ,UAAYD,EAAU,GAEvC,WAAW,IAAMC,EAAS,QAAQ,gBAAkB,WAAY,EAAEF,CAAC,CACrE,CACF,CAEA,wBAAwBE,EAAU,CAChC,IAAMD,EAAY,KAAK,iBAAiB,KAAKG,GAAKA,EAAE,KAAOF,EAAS,QAAQ,SAAS,EAIrF,GAFAA,EAAS,MAAM,kBAAoB,SAE/B,KAAK,qBACP,KAAK,iBAAiBA,EAAUD,CAAS,MACpC,CACLC,EAAS,QAAQ,OAAS,uBAE1BA,EAAS,UAAU,IAAI,GAAG,KAAK,sBAAsB,EACrDA,EAAS,UAAU,IAAI,GAAG,KAAK,eAAe,EAC9CA,EAAS,MAAM,OAAS,EACxBA,EAAS,MAAM,KAAO,EACtBA,EAAS,MAAM,OAAS,EACxBA,EAAS,QAAQ,OAASA,EAAS,aACnCA,EAAS,MAAM,OAAS,EACxBA,EAAS,UAAU,IAAI,YAAY,EACnCA,EAAS,UAAU,OAAO,GAAG,KAAK,sBAAsB,EAExD,IAAMC,EAAWD,EAAS,cAAc,sBAAsB,EAE1DC,IAAUA,EAAS,MAAM,QAAU,QAEvCF,EAAU,QAAQ,OAAS,iBAC3BA,EAAU,QAAQ,wBAA0BA,EAAU,GACtDA,EAAU,QAAQ,uBAAyBC,EAAS,EACtD,CACF,CAEA,IAAI,sBAAwB,CAC1B,IAAMG,EAAY,SAAS,KAAK,YAC1BC,EAAkB,KAAK,oBAAsB,KAAK,iBAAmB,KAAK,mBAAqB,EAErG,OAAQD,EAAYC,CACtB,CAEA,iBAAiBT,EAAUI,EAAY,OAAW,CAC3CA,IAAWA,EAAY,KAAK,iBAAiB,KAAKG,GAAKA,EAAE,KAAOP,EAAS,QAAQ,SAAS,GAE/F,IAAMM,EAAWN,EAAS,cAAc,sBAAsB,EACxDU,EAAY,KAAK,IAAIN,EAAU,UAAW,KAAK,cAAc,EAC7DO,EAAa,KAAK,QAAQ,WAAa,KAAK,QAAQ,YAAc,KAAK,iBAE7EX,EAAS,MAAM,IAAM,GAAGU,MACxBV,EAAS,MAAM,KAAO,GAAGW,MACzBX,EAAS,UAAU,IAAI,GAAG,KAAK,eAAe,EAC9CA,EAAS,QAAQ,OAAS,GAC1BI,EAAU,QAAQ,OAAS,GAEvBE,IAAUA,EAAS,MAAM,QAAU,IAEvC,KAAK,eAAiBI,EAAYV,EAAS,aAAe,KAAK,eACjE,CAEA,KAAKH,EAAO,CACV,IAAMQ,EAAW,KAAK,gBAAgB,KAAKE,GAAKA,EAAE,KAAOV,EAAM,OAAO,QAAQ,EAE9EA,EAAM,eAAe,EAErB,KAAK,KAAK,EAEVQ,EAAS,MAAM,OAAS,GAAGA,EAAS,QAAQ,WAC5CA,EAAS,UAAU,IAAI,GAAG,KAAK,sBAAsB,EACrDA,EAAS,aAAa,OAAQ,OAAO,EACrCA,EAAS,aAAa,WAAY,GAAG,EACrCA,EAAS,MAAM,CACjB,CAEA,KAAKR,EAAQ,OAAW,CACtB,QAAWQ,KAAY,KAAK,gBAC1BA,EAAS,MAAM,OAAS,EACxBA,EAAS,UAAU,OAAO,GAAG,KAAK,sBAAsB,EACxDA,EAAS,aAAa,OAAQ,EAAE,CAEpC,CACF,EA3JEO,EADKjB,GACE,UAAU,CAAC,WAAY,WAAW,GACzCiB,EAFKjB,GAEE,UAAU,CAAC,WAAY,kBAAmB,UAAU,GAC3DiB,EAHKjB,GAGE,SAAS,CACd,WAAY,CACV,KAAM,OACN,QAAS,EACX,EACA,UAAW,CACT,KAAM,OACN,QAAS,CACX,EACA,eAAgB,CACd,KAAM,OACN,QAAS,GACX,EACA,cAAe,CACb,KAAM,OACN,QAAS,GACX,EACA,YAAa,CACX,KAAM,OACN,QAAS,EACX,CACF,GCxBF,IAAOkB,GAAP,cAA6BC,CAAW,CAMtC,MAAM,SAAU,CACd,GAAI,CAAC,KAAK,qBAAsB,OAEhC,GAAI,CACF,IAAMC,EAAkB,IAAI,IAAI,KAAK,oBAAoB,EAErD,OAAO,SAAS,WAAaA,EAAgB,WAC/CA,EAAgB,SAAW,KAAK,SAChC,KAAK,qBAAuBA,EAAgB,SAAS,EAEzD,MAAE,CACA,QAAQ,MAAM,kBAAmB,KAAK,oBAAoB,EAC1D,MACF,CAEA,IAAMC,EAAW,MAAM,KAAK,cAAc,EAE1C,GAAI,CAACA,EAAU,OAEf,IAAMC,EAAeD,EAAS,QAAQ,OAASA,EAAS,QAClDE,EAAe,GAAGF,EAAS,QAAQ,MAAM,EAAGC,CAAY,KAAKD,EAAS,QAAQ,MAAMC,CAAY,IAChGE,EAAS,SAAS,cAAc,MAAM,EAAE,KAE9C,QAAWC,KAAQ,KAAK,YAAa,CACnC,IAAMC,EAAM,WAAWD,EAAK,aAAa,eAAe,GAAK,GAAG,EAC1DE,EAAM,KAAK,IAAI,IAAMJ,EAAeG,EAAO,GAAG,EACpDD,EAAK,MAAM,MAAQ,GAAGE,KACtBF,EAAK,aAAa,gBAAiBF,CAAY,CACjD,CAEA,GAAI,KAAK,iBAAkB,CACzB,IAAMK,EAAQ,WACRC,EAAWR,EAAS,SACpBS,EAAmB,IAAI,KAAK,aAAaN,EAAQ,CAAE,MAAAI,EAAO,SAAAC,CAAS,CAAC,EAE1E,KAAK,cAAc,UAAYC,EAAiB,OAAOP,CAAY,CACrE,CAEA,GAAI,KAAK,cAAe,CACtB,IAAMQ,EAAc,IAAI,KAAKV,EAAS,SAAS,EACzCW,EAAgB,IAAI,KAAK,eAAeR,EAAQ,CAAE,UAAW,MAAO,CAAC,EAE3E,KAAK,WAAW,UAAYQ,EAAc,OAAOD,CAAW,CAC9D,CACF,CAEA,MAAM,eAAgB,CACpB,GAAI,CAGF,OAAO,MAFU,MAAM,MAAM,KAAK,oBAAoB,GAEhC,KAAK,CAC7B,OAAQE,EAAN,CACA,eAAQ,MAAM,iBAAkB,KAAK,qBAAsBA,CAAC,EACrD,IACT,CACF,CAEA,IAAI,UAAW,CACb,OAAI,OAAO,SAAS,WAAa,QAAgB,QAE1C,OAAO,SAAS,QACzB,CACF,EAnEEC,EADKhB,GACE,UAAU,CAAC,OAAQ,UAAW,MAAM,GAC3CgB,EAFKhB,GAEE,SAAS,CACd,gBAAiB,MACnB,GCOF,IAAOiB,GAAP,cAA6BC,CAAW,CAMtC,YAAYC,EAAQ,OAAW,CAG7B,GAFAA,GAAO,eAAe,EAElB,CAACA,EAAM,OAAO,KAAM,CACtB,QAAQ,MAAM,0CAA2CA,EAAM,MAAM,EACrE,MACF,CAEKA,EAAM,OAAO,IAChB,QAAQ,MAAM,wEAAyEA,EAAM,MAAM,EAGrG,OAAO,cAAc,IAAI,YAAY,aAAc,CAAE,OAAQ,CAAE,GAAIA,EAAM,OAAO,KAAM,cAAeA,EAAM,OAAO,EAAG,CAAE,CAAC,CAAC,CAC3H,CASA,KAAKA,EAAQ,OAAW,CACtBA,GAAO,eAAe,EACtB,IAAMC,EAAUD,GAAO,QAAQ,GAE3BC,GAAW,KAAK,QAAQ,KAAOA,IAEnC,KAAK,YAAY,MAAM,QAAU,QACjC,KAAK,eAAe,MAAM,QAAU,QACpC,KAAK,YAAY,aAAa,OAAQ,QAAQ,EAC9C,KAAK,YAAY,aAAa,aAAc,EAAI,EAChD,KAAK,YAAY,gBAAgB,aAAa,EAE9C,OAAO,SAAS,KAAK,UAAU,IAAI,YAAY,EAE3CD,GAAO,QAAQ,cACjB,KAAK,cAAgB,OAAO,SAAS,eAAeA,EAAM,OAAO,aAAa,EAE9E,KAAK,cAAgBA,GAAO,OAG9B,WAAW,IAAM,CACf,KAAK,YAAY,UAAU,IAAI,MAAM,EACrC,KAAK,eAAe,UAAU,IAAI,MAAM,EAExC,KAAK,YAAY,MAAM,CACzB,EAAG,CAAC,EACN,CAEA,eAAeA,EAAO,CAChBA,GAAO,MAAQ,UAEnB,KAAK,KAAK,CACZ,CAEA,KAAKA,EAAQ,OAAW,CACtBA,GAAO,eAAe,EACtB,IAAMC,EAAUD,GAAO,QAAQ,GAE3BC,GAAW,KAAK,QAAQ,KAAOA,IAEnC,KAAK,eAAe,UAAU,OAAO,MAAM,EAC3C,KAAK,YAAY,UAAU,OAAO,MAAM,EAExC,KAAK,YAAY,aAAa,cAAe,EAAI,EACjD,KAAK,YAAY,gBAAgB,MAAM,EACvC,KAAK,YAAY,gBAAgB,YAAY,EAE7C,KAAK,eAAe,MAAM,EAE1B,KAAK,YAAY,iBAAiB,aAAa,EAAE,QAAQC,GAAKA,EAAE,MAAM,CAAC,EAEvE,WAAW,IAAM,CACf,KAAK,YAAY,MAAM,QAAU,GACjC,KAAK,eAAe,MAAM,QAAU,EACtC,EAAG,GAAG,EAEN,OAAO,SAAS,KAAK,UAAU,OAAO,YAAY,EACpD,CACF,EArFEC,EADKL,GACE,UAAU,CAAC,QAAS,UAAU,GCZvC,IAAOM,GAAP,cAA6BC,CAAW,CAMtC,QAASC,EAAO,CACd,KAAK,eAAe,UAAU,OAAO,YAAY,CACnD,CAEA,MAAM,OAAQA,EAAO,CACnB,KAAK,OAAO,EAGZ,IAAMC,EAAgB,KAAK,eAAe,MAAM,MAAM,MAAM,EAAE,IAAIC,GAAKA,EAAE,KAAK,CAAC,EAAE,OAAOA,GAAKA,EAAE,MAAM,EAC/FC,EAAgBF,EAAc,SAAW,EAAKA,EAAc,CAAC,EAAIA,EAAcA,EAAc,OAAS,CAAC,EAEvGG,EAAe,WAAWD,4CAAuDA,IACjFE,EAAS,YAAY,IAAI,CAAC,OAAO,gBAAgB,OAAQ,YAAY,QAAQ,GAAI,CAAC,CAAC,EACnFC,EAAU,CAAE,OAAQ,kBAAmB,EAE7C,GAAI,CAGF,IAAMC,GADY,MADD,MAAM,MAAMH,EAAc,CAAE,QAAAE,EAAS,OAAAD,CAAO,CAAC,GAC7B,KAAK,IACV,OAAO,KAAKH,GAAKA,GAAG,MAAQ,yCAAyC,GAAG,SAEpG,GAAI,CAACK,EAAU,MAAO,IAAI,MAAM,aAAaH,sCAAiD,EAE9F,IAAMI,EAAMD,EAAS,WAAW,QAAS,mBAAmB,KAAK,QAAQ,CAAC,EAE1E,WAAW,IAAM,MAAM,MAAMC,CAAG,EAAG,GAAG,CACxC,OAASC,EAAP,CACA,QAAQ,MAAMA,CAAC,EAEf,KAAK,eAAe,UAAU,IAAI,YAAY,CAChD,CAEA,KAAK,OAAO,CACd,CAEA,QAAS,CACP,QAAWC,KAAW,KAAK,QAAQ,SACjCA,EAAQ,SAAW,CAACA,EAAQ,QAEhC,CACF,EA5CEC,EADKb,GACE,UAAU,CAAC,UAAU,GAC5Ba,EAFKb,GAEE,SAAS,CACd,IAAK,MACP,GCJF,IAAOc,GAAP,cAA6BC,CAAW,CAItC,qBAAqBC,EAAa,CAChC,KAAK,OAAO,CACd,CAEA,OAAOC,EAAQ,OAAW,CACxB,IAAMC,EAAQ,KAAK,YAAY,OAAO,KAAK,EAE3C,QAAWC,KAAO,KAAK,WACjBD,IAAUC,EAAI,IAChBA,EAAI,UAAU,OAAO,SAAU,GAAG,KAAK,WAAW,EAElD,WAAW,IAAMA,EAAI,UAAU,IAAI,GAAG,KAAK,WAAW,EAAG,CAAC,IAE1DA,EAAI,UAAU,IAAI,SAAU,GAAG,KAAK,WAAW,EAC/C,WAAW,IAAMA,EAAI,UAAU,OAAO,GAAG,KAAK,WAAW,EAAG,CAAC,EAGnE,CACF,EArBEC,EADKN,GACE,UAAU,CAAC,MAAO,OAAO,GAChCM,EAFKN,GAEE,UAAU,CAAC,OAAQ,MAAM,GvCDlC,OAAO,eAAiB,IAAI,GAAAO,QAC5B,OAAO,OAAS,OAAO,eAAe,MAAM,UAAU,SAAS,EAE/D,GAAI,CACE,CAAC,OAAO,OAAO,KAAO,OAAO,IAAI,aAAe,eAClD,OAAO,SAAW,IAAIC,GAAS,CAC7B,UAAW,OAAO,IAAI,oBACtB,WAAY,OAAO,IAAI,qBACvB,KAAM,wBACR,CAAC,EAED,QAAQ,cAAgB,QAAQ,MAChC,QAAQ,MAAQ,IAAIC,KAClB,OAAO,SAAS,OAAOA,EAAE,KAAK,GAAG,CAAC,EAC3B,QAAQ,cAAc,GAAGA,CAAC,GAGvC,OAASA,EAAP,CACA,QAAQ,MAAMA,CAAC,CACjB,CAGMC,GAAM,EAGZ,OAAO,SAAWC,GAAY,MAAM,EACpC,OAAO,gBAAkB,IAAI,gBAW7B,SAAS,MAAS,OAAO,IAAI,aAAe,aAC5C,SAAS,SAAS,cAAeC,EAAoB,EACrD,SAAS,SAAS,kBAAmBC,EAAwB,EAC7D,SAAS,SAAS,cAAeC,EAAoB,EACrD,SAAS,SAAS,YAAaC,EAAmB,EAClD,SAAS,SAAS,aAAcC,EAAmB,EACnD,SAAS,SAAS,QAASC,EAAe,EAC1C,SAAS,SAAS,wBAAyBC,EAA8B,EACzE,SAAS,SAAS,OAAQC,EAAc,EAExC,SAAS,iBAAiB,cAAgBC,GAAU,CAClD,OAAO,gBAAgB,MAAM,CAC/B,CAAC", + "names": ["require_trim", "__commonJSMin", "exports", "str", "char", "require_version", "__commonJSMin", "exports", "trim_1", "version", "versionTruncation", "versionString", "versionParts", "userAgent", "engine", "geckoVersionRegex", "match", "regex", "require_variable_replacement", "__commonJSMin", "exports", "template", "variables", "regex", "match", "index", "require_memory_cache", "__commonJSMin", "exports", "memoryCacheBucket", "key", "value", "require_user_agent", "__commonJSMin", "exports", "memory_cache_1", "cache", "getRegexInstance", "rawRegex", "cachedRegexInstance", "regexInstance", "userAgent", "match", "require_browsers", "__commonJSMin", "exports", "module", "require_browser_engine", "__commonJSMin", "exports", "module", "require_available_browsers", "__commonJSMin", "exports", "module", "require_mobile_only_browsers", "__commonJSMin", "exports", "module", "require_browser", "__commonJSMin", "exports", "__importDefault", "mod", "version_1", "variable_replacement_1", "user_agent_1", "browsers_json_1", "browser_engine_json_1", "available_browsers_json_1", "mobile_only_browsers_json_1", "BrowserParser", "options", "userAgent", "result", "browser", "match", "vrpVersion", "version", "shortVersion", "sortedEngineVersions", "a", "b", "versionThreshold", "engineByVersion", "browserEngine", "browserName", "shortName", "name", "require_mobile_apps", "__commonJSMin", "exports", "module", "require_mobile_apps", "__commonJSMin", "exports", "__importDefault", "mod", "mobile_apps_json_1", "version_1", "variable_replacement_1", "user_agent_1", "MobileAppParser", "options", "userAgent", "result", "mobileApp", "match", "require_feed_readers", "__commonJSMin", "exports", "module", "require_feed_readers", "__commonJSMin", "exports", "__importDefault", "mod", "feed_readers_json_1", "version_1", "variable_replacement_1", "user_agent_1", "FeedReaderParser", "options", "userAgent", "result", "feedReader", "match", "require_libraries", "__commonJSMin", "exports", "module", "require_libraries", "__commonJSMin", "exports", "__importDefault", "mod", "libraries_json_1", "version_1", "variable_replacement_1", "user_agent_1", "LibraryParser", "options", "userAgent", "result", "library", "match", "require_mediaplayers", "__commonJSMin", "exports", "module", "require_media_players", "__commonJSMin", "exports", "__importDefault", "mod", "mediaplayers_json_1", "version_1", "variable_replacement_1", "user_agent_1", "MediaPlayerParser", "options", "userAgent", "result", "mediaPlayer", "match", "require_pim", "__commonJSMin", "exports", "module", "require_personal_information_managers", "__commonJSMin", "exports", "__importDefault", "mod", "pim_json_1", "version_1", "variable_replacement_1", "user_agent_1", "PersonalInformationManagerParser", "options", "userAgent", "result", "personalInformationManager", "match", "require_client", "__commonJSMin", "exports", "__importDefault", "mod", "browser_1", "mobile_apps_1", "feed_readers_1", "libraries_1", "media_players_1", "personal_information_managers_1", "clientParsers", "ClientParser", "options", "userAgent", "Parser", "client", "require_cameras", "__commonJSMin", "exports", "module", "require_cameras", "__commonJSMin", "exports", "__importDefault", "mod", "cameras_json_1", "variable_replacement_1", "user_agent_1", "CameraParser", "userAgent", "result", "brand", "camera", "match", "model", "modelMatch", "require_mobiles", "__commonJSMin", "exports", "module", "require_model", "__commonJSMin", "exports", "model", "require_mobiles", "__commonJSMin", "exports", "__importDefault", "mod", "mobiles_json_1", "variable_replacement_1", "user_agent_1", "model_1", "MobileParser", "userAgent", "result", "resultType", "brand", "mobile", "match", "model", "modelMatch", "require_televisions", "__commonJSMin", "exports", "module", "require_televisions", "__commonJSMin", "exports", "__importDefault", "mod", "televisions_json_1", "variable_replacement_1", "user_agent_1", "model_1", "TelevisionParser", "userAgent", "result", "brand", "television", "match", "model", "modelMatch", "require_car_browsers", "__commonJSMin", "exports", "module", "require_cars", "__commonJSMin", "exports", "__importDefault", "mod", "car_browsers_json_1", "variable_replacement_1", "user_agent_1", "CarParser", "userAgent", "result", "brand", "car", "model", "match", "require_consoles", "__commonJSMin", "exports", "module", "require_consoles", "__commonJSMin", "exports", "__importDefault", "mod", "consoles_json_1", "variable_replacement_1", "user_agent_1", "ConsoleParser", "userAgent", "result", "brand", "gameConsole", "match", "model", "modelMatch", "require_notebooks", "__commonJSMin", "exports", "module", "require_notebooks", "__commonJSMin", "exports", "__importDefault", "mod", "notebooks_json_1", "variable_replacement_1", "user_agent_1", "model_1", "NotebooksParser", "userAgent", "result", "brand", "notebook", "match", "model", "require_portable_media_player", "__commonJSMin", "exports", "module", "require_portable_media_players", "__commonJSMin", "exports", "__importDefault", "mod", "portable_media_player_json_1", "variable_replacement_1", "user_agent_1", "PortableMediaPlayersParser", "userAgent", "result", "brand", "portableMediaPlayer", "match", "model", "modelMatch", "require_device", "__commonJSMin", "exports", "__importDefault", "mod", "cameras_1", "mobiles_1", "televisions_1", "cars_1", "consoles_1", "notebooks_1", "portable_media_players_1", "deviceParsers", "ClientParser", "userAgent", "Parser", "device", "require_oss", "__commonJSMin", "exports", "module", "require_operating_system", "__commonJSMin", "exports", "module", "require_operating_system", "__commonJSMin", "exports", "__importDefault", "mod", "oss_json_1", "version_1", "variable_replacement_1", "user_agent_1", "operating_system_json_1", "desktopOsArray", "shortOsNames", "osFamilies", "OperatingSystemParser", "options", "userAgent", "result", "operatingSystem", "match", "osName", "osShortName", "osFamily", "shortNames", "shortName", "name", "require_vendorfragments", "__commonJSMin", "exports", "module", "require_vendor_fragment", "__commonJSMin", "exports", "__importDefault", "mod", "vendorfragments_json_1", "user_agent_1", "VendorFragmentParser", "userAgent", "brand", "vendorFragment", "regex", "require_bots", "__commonJSMin", "exports", "module", "require_bot", "__commonJSMin", "exports", "module", "__importDefault", "mod", "bots_json_1", "user_agent_1", "BotParser", "userAgent", "_a", "_b", "_c", "_d", "bot", "require_version_compare", "__commonJSMin", "exports", "v1", "v2", "operator", "i", "x", "compare", "vm", "prepVersion", "v", "numVersion", "require_dist", "__commonJSMin", "exports", "module", "__importDefault", "mod", "client_1", "device_1", "operating_system_1", "vendor_fragment_1", "browser_1", "BotParser", "user_agent_1", "version_compare_1", "DeviceDetector", "options", "userAgent", "_a", "_b", "_c", "_d", "_e", "_f", "_g", "_h", "_j", "_k", "_l", "_m", "_o", "_p", "result", "osName", "osVersion", "osFamily", "brand", "client", "require_stackframe", "__commonJSMin", "exports", "module", "root", "factory", "_isNumber", "n", "_capitalize", "str", "_getter", "p", "booleanProps", "numericProps", "stringProps", "arrayProps", "objectProps", "props", "StackFrame", "obj", "i", "v", "fileName", "lineNumber", "columnNumber", "functionName", "argsStartIndex", "argsEndIndex", "args", "locationString", "parts", "j", "k", "require_error_stack_parser", "__commonJSMin", "exports", "module", "root", "factory", "StackFrame", "FIREFOX_SAFARI_STACK_REGEXP", "CHROME_IE_STACK_REGEXP", "SAFARI_NATIVE_CODE_REGEXP", "error", "urlLike", "regExp", "parts", "filtered", "line", "sanitizedLine", "location", "locationParts", "functionName", "fileName", "functionNameRegex", "matches", "e", "lineRE", "lines", "result", "i", "len", "match", "tokens", "functionCall", "argsRaw", "args", "require_browser_ponyfill", "__commonJSMin", "exports", "module", "global", "__self__", "F", "self", "irrelevant", "support", "isDataView", "obj", "viewClasses", "isArrayBufferView", "normalizeName", "name", "normalizeValue", "value", "iteratorFor", "items", "iterator", "Headers", "headers", "header", "oldValue", "callback", "thisArg", "consumed", "body", "fileReaderReady", "reader", "resolve", "reject", "readBlobAsArrayBuffer", "blob", "promise", "readBlobAsText", "readArrayBufferAsText", "buf", "view", "chars", "i", "bufferClone", "Body", "rejected", "decode", "methods", "normalizeMethod", "method", "upcased", "Request", "input", "options", "form", "bytes", "split", "parseHeaders", "rawHeaders", "preProcessedHeaders", "line", "parts", "key", "Response", "bodyInit", "response", "redirectStatuses", "url", "status", "message", "error", "fetch", "init", "request", "xhr", "abortXhr", "ctx", "require_treebase", "__commonJSMin", "exports", "module", "TreeBase", "data", "res", "c", "iter", "item", "cur", "cmp", "i", "Iterator", "cb", "it", "tree", "root", "save", "start", "require_rbtree", "__commonJSMin", "exports", "module", "TreeBase", "Node", "data", "dir", "val", "RBTree", "comparator", "ret", "head", "last", "gp", "ggp", "p", "node", "is_red", "dir2", "single_rotate", "double_rotate", "cmp", "found", "sr", "sibling", "gpc", "root", "save", "require_bintree", "__commonJSMin", "exports", "module", "TreeBase", "Node", "data", "dir", "val", "BinTree", "comparator", "p", "node", "head", "found", "cmp", "require_bintrees", "__commonJSMin", "exports", "module", "require_tdigest", "__commonJSMin", "exports", "module", "RBTree", "TDigest", "delta", "K", "CX", "compare_centroid_means", "everything", "result", "c", "approx", "s", "a", "b", "compare_centroid_mean_cumns", "x", "n", "i", "exact", "cumn", "iter", "prev", "nearest", "min", "max", "p", "max_n", "lower", "upper", "x_or_xlist", "xs", "ps", "bound", "p_or_plist", "qs", "h", "pop_random", "choices", "idx", "points", "Digest", "config", "import_device_detector_js", "finallyConstructor", "callback", "constructor", "value", "reason", "finally_default", "allSettled", "arr", "P", "resolve", "reject", "args", "remaining", "res", "i", "val", "then", "e", "allSettled_default", "AggregateError", "errors", "message", "any", "arr", "P", "resolve", "reject", "args", "rejectionReasons", "i", "error", "ex", "any_default", "setTimeoutFunc", "isArray", "x", "noop", "bind", "fn", "thisArg", "Promise", "doResolve", "handle", "self", "deferred", "cb", "resolve", "reject", "ret", "e", "newValue", "then", "finale", "i", "len", "Handler", "onFulfilled", "onRejected", "promise", "done", "value", "reason", "ex", "prom", "finally_default", "arr", "args", "remaining", "res", "val", "any_default", "allSettled_default", "err", "src_default", "FILTERED", "MAX_OBJ_LENGTH", "jsonifyNotice", "notice", "_a", "_b", "_c", "maxLength", "_d", "keysBlocklist", "i", "t", "Truncator", "s", "keys", "level", "opts", "_i", "keys_1", "key", "obj", "truncate", "params", "_e", "keys_2", "err", "scale", "num", "value", "depth", "type", "objectType", "saved", "index", "path", "sub", "getAttr", "arr", "length", "dst", "el", "isBlocklisted", "attr", "keysBlocklist_1", "v", "Span", "metric", "name", "startTime", "endTime", "now", "BaseMetric", "endTime", "name", "startTime", "span", "Span", "ms", "NoopMetric", "_name", "_startTime", "_ms", "Scope", "NoopMetric", "clone", "__assign", "context", "ctx", "state", "key", "metric", "import_error_stack_parser", "hasConsole", "parse", "err", "ErrorStackParser", "parseErr", "espProcessor", "backtrace", "frames_2", "fakeErr", "_i", "frames_1", "frame", "type", "msg", "re", "angularMessageFilter", "notice", "err", "m", "makeDebounceFilter", "lastNoticeJSON", "timeout", "notice", "s", "IGNORED_MESSAGES", "ignoreNoiseFilter", "notice", "err", "frame", "re", "uncaughtMessageFilter", "notice", "err", "m", "import_cross_fetch", "errors", "rateLimitReset", "request", "req", "utime", "src_default", "errors", "opt", "fetch", "resp", "s", "n", "json", "err", "body", "makeRequester", "api", "req", "request", "rateLimitReset", "utime", "src_default", "errors", "resolve", "reject", "error", "resp", "body", "h", "s", "n", "json", "err", "makeRequester", "opts", "request", "tdigest", "hasTdigest", "TDigestStat", "ms", "tdigestCentroids", "TDigestStatGroups", "_super", "__extends", "_this", "totalMs", "groups", "name_1", "name", "ms", "stat", "TDigestStat", "tdigestCentroids", "tdigestCentroids", "td", "means", "counts", "c", "FLUSH_INTERVAL", "QueryInfo", "query", "QueriesStats", "opt", "makeRequester", "query", "QueryInfo", "q", "_this", "hasTdigest", "ms", "minute", "startTime", "key", "keyStr", "stat", "TDigestStat", "FLUSH_INTERVAL", "queries", "v", "__assign", "outJSON", "req", "_resp", "err", "FLUSH_INTERVAL", "QueueMetric", "_super", "__extends", "queue", "_this", "BaseMetric", "QueuesStats", "opt", "makeRequester", "q", "_this", "hasTdigest", "ms", "minute", "startTime", "key", "keyStr", "stat", "TDigestStatGroups", "FLUSH_INTERVAL", "queues", "v", "__assign", "outJSON", "req", "_resp", "err", "FLUSH_INTERVAL", "RouteMetric", "_super", "__extends", "method", "route", "statusCode", "contentType", "_this", "BaseMetric", "RoutesStats", "opt", "makeRequester", "req", "_this", "hasTdigest", "ms", "minute", "startTime", "key", "keyStr", "stat", "TDigestStat", "FLUSH_INTERVAL", "routes", "v", "__assign", "outJSON", "_resp", "err", "RoutesBreakdowns", "opt", "makeRequester", "req", "_this", "hasTdigest", "ms", "minute", "startTime", "key", "keyStr", "stat", "TDigestStatGroups", "FLUSH_INTERVAL", "routes", "v", "__assign", "outJSON", "_resp", "err", "NOTIFIER_NAME", "NOTIFIER_VERSION", "NOTIFIER_URL", "BaseNotifier", "opt", "_this", "Scope", "espProcessor", "makeRequester", "ignoreNoiseFilter", "makeDebounceFilter", "uncaughtMessageFilter", "angularMessageFilter", "notice", "NOTIFIER_NAME", "NOTIFIER_VERSION", "NOTIFIER_URL", "Routes", "Queues", "QueriesStats", "_i", "_a", "fn", "scope", "filter", "performanceFilter", "err", "__assign", "src_default", "error", "r", "body", "jsonifyNotice", "req", "resp", "props", "client", "airbrakeWrapper", "fnArgs", "wrappedArgs", "prop", "props_1", "args", "i", "arg", "_args", "wrapper", "Routes", "notifier", "RoutesStats", "RoutesBreakdowns", "method", "route", "statusCode", "contentType", "metric", "RouteMetric", "scope", "req", "_i", "_a", "performanceFilter", "Queues", "QueuesStats", "queue", "QueueMetric", "q", "windowFilter", "notice", "CONSOLE_METHODS", "instrumentConsole", "notifier", "m", "oldFn", "newFn", "args", "_i", "CONSOLE_METHODS_1", "elemAttrs", "instrumentDOM", "notifier", "handler", "makeEventHandler", "event", "getProp", "target", "state", "elemPath", "err", "elemName", "elem", "s", "str", "classNameString", "_i", "elemAttrs_1", "attr", "value", "name", "maxLen", "path", "parent", "name_1", "obj", "prop", "instrumentFetch", "notifier", "oldFetch", "req", "options", "state", "resp", "err", "lastLocation", "getCurrentLocation", "instrumentLocation", "notifier", "oldFn", "_event", "url", "recordLocation", "oldPushState", "_state", "_title", "index", "instrumentXHR", "notifier", "recordReq", "req", "state", "oldOpen", "method", "url", "_async", "_user", "_password", "oldSend", "_data", "oldFn", "_ev", "Notifier", "_super", "__extends", "opt", "_this", "windowFilter", "isDevEnv", "enabled", "self_1", "oldHandler_1", "instrumentDOM", "instrumentFetch", "instrumentLocation", "instrumentConsole", "instrumentXHR", "err", "src_default", "resolve", "reject", "j", "this_1", "notice", "_i", "_a", "e", "reason", "msg", "__assign", "message", "filename", "line", "column", "BaseNotifier", "isDevEnv", "env", "enabled", "v", "BuiltInHTMLElement", "wrapperForTheName", "prototype", "submitter", "validateSubmitter", "form", "raise", "errorConstructor", "message", "name", "submittersByForm", "findSubmitterFromClickTarget", "target", "element", "candidate", "clickCaptured", "event", "FrameLoadingStyle", "FrameElement", "value", "frameLoadingStyleFromString", "_a", "_b", "style", "expandURL", "locatable", "getAnchor", "url", "anchorMatch", "getAction", "action", "getExtension", "getLastPathComponent", "isHTML", "isPrefixedBy", "baseURL", "prefix", "getPrefix", "locationIsVisitable", "location", "rootLocation", "getRequestURL", "anchor", "toCacheKey", "urlsAreEqual", "left", "right", "getPathComponents", "addTrailingSlash", "FetchResponse", "response", "activateScriptElement", "createdScriptElement", "cspNonce", "getMetaContent", "copyElementAttributes", "destinationElement", "sourceElement", "createDocumentFragment", "html", "template", "dispatch", "eventName", "cancelable", "detail", "nextAnimationFrame", "resolve", "nextEventLoopTick", "nextMicrotask", "parseHTMLDocument", "unindent", "strings", "values", "lines", "interpolate", "match", "indent", "line", "result", "string", "uuid", "_", "i", "getAttribute", "attributeName", "elements", "hasAttribute", "markAsBusy", "clearBusyState", "waitForLoad", "timeoutInMilliseconds", "onComplete", "getHistoryMethodForAction", "isAction", "getVisitAction", "getMetaElement", "setMetaContent", "content", "findClosestRecursively", "selector", "FetchMethod", "fetchMethodFromString", "method", "FetchRequest", "delegate", "body", "_value", "fetchOptions", "error", "fetchResponse", "mimeType", "requestInterception", "AppearanceObserver", "entries", "lastEntry", "StreamMessage", "fragment", "importStreamElements", "streamElement", "inertScriptElement", "FormSubmissionState", "FormEnctype", "formEnctypeFromString", "encoding", "FormSubmission", "_element", "_submitter", "formElement", "mustRedirect", "buildFormData", "mergeFormDataEntries", "formElementAction", "initialized", "requesting", "confirmationMessage", "stopping", "stopped", "request", "token", "getCookieValue", "_request", "responseSucceededWithoutRedirect", "input", "formData", "cookieName", "cookie", "searchParams", "Snapshot", "inertDisabledOrHidden", "queryPermanentElementsAll", "id", "getPermanentElementById", "snapshot", "permanentElementMap", "currentPermanentElement", "newPermanentElement", "node", "FormSubmitObserver", "eventTarget", "submissionDoesNotDismissDialog", "submissionDoesNotTargetIFrame", "View", "x", "y", "renderer", "isPreview", "shouldRender", "renderInterception", "options", "reason", "FrameView", "LinkInterceptor", "_event", "LinkClickObserver", "link", "doesNotTargetIFrame", "FormLinkClickObserver", "originalEvent", "type", "turboFrame", "turboAction", "turboConfirm", "Bardo", "callback", "bardo", "permanentElement", "placeholder", "createPlaceholderForPermanentElement", "clone", "Renderer", "currentSnapshot", "newSnapshot", "renderElement", "willRender", "reject", "elementIsFocusable", "FrameRenderer", "currentElement", "newElement", "destinationRange", "frameElement", "sourceRange", "block", "readScrollLogicalPosition", "behavior", "readScrollBehavior", "activatedScriptElement", "defaultValue", "ProgressBar", "HeadSnapshot", "elementIsNoscript", "elementWithoutNonce", "outerHTML", "details", "elementType", "elementIsTracked", "matchedType", "tracked", "elementIsMetaElementWithName", "elementIsScript", "elementIsStylesheet", "tagName", "PageSnapshot", "head", "headSnapshot", "clonedElement", "selectElements", "clonedSelectElements", "index", "source", "option", "clonedPasswordInput", "root", "TimingMetric", "VisitState", "defaultOptions", "SystemStatusCode", "Visit", "restorationIdentifier", "historyChanged", "referrer", "snapshotHTML", "visitCachedSnapshot", "updateHistory", "shouldCacheSnapshot", "acceptsStreamResponse", "actionForHistory", "statusCode", "isSuccessful", "responseHTML", "_response", "redirected", "_error", "scrollPosition", "metric", "BrowserAdapter", "session", "visit", "_visit", "_formSubmission", "CacheObserver", "FrameRedirector", "_location", "frame", "meta", "History", "turbo", "state", "additionalData", "restorationData", "Navigator", "formSubmission", "visitOptions", "currentAnchor", "isRestorationToTop", "oldURL", "newURL", "PageStage", "PageObserver", "readyState", "ScrollObserver", "position", "StreamMessageRenderer", "getPermanentElementMapForFragment", "permanentElementsInDocument", "permanentElementInDocument", "elementInStream", "StreamObserver", "fetchResponseFromEvent", "fetchResponseIsStream", "ErrorRenderer", "documentElement", "replaceableElement", "parentNode", "PageRenderer", "mergedHeadElements", "newStylesheetElements", "loadingElements", "newHeadElements", "elementList", "SnapshotCache", "size", "key", "PageView", "cachedSnapshot", "Preloader", "responseText", "Session", "adapter", "delay", "mode", "extendURLWithDeprecatedProperties", "defaultPrevented", "render", "_snapshot", "_isPreview", "ev", "newBody", "timing", "submitterIsNavigatable", "container", "withinFrame", "deprecatedLocationPropertyDescriptors", "Cache", "StreamActions", "e", "targetElement", "cache", "navigator$1", "start", "registerAdapter", "connectStreamSource", "disconnectStreamSource", "renderStreamMessage", "clearCache", "setProgressBarDelay", "setConfirmMethod", "confirmMethod", "setFormMode", "Turbo", "TurboFrameMissingError", "FrameController", "_fetchResponse", "src", "document", "fetchRequest", "newFrame", "_newElement", "newFrameElement", "pageSnapshot", "wrapped", "getFrameElementById", "activateElement", "sourceURL", "currentURL", "StreamElement", "c", "existingChildren", "newChildrenIds", "actionFunction", "StreamSourceElement", "EventListener", "eventTarget", "eventName", "eventOptions", "binding", "event", "extendedEvent", "extendEvent", "left", "right", "leftIndex", "rightIndex", "stopImmediatePropagation", "Dispatcher", "application", "eventListener", "listeners", "map", "clearEventListeners", "error", "message", "detail", "eventListenerMap", "cacheKey", "parts", "key", "defaultActionDescriptorFilters", "value", "element", "descriptorPattern", "parseActionDescriptorString", "descriptorString", "matches", "keyFilter", "parseEventTarget", "parseEventOptions", "eventTargetName", "options", "token", "stringifyEventTarget", "camelize", "_", "char", "namespaceCamelize", "capitalize", "dasherize", "tokenize", "isSomething", "object", "hasProperty", "property", "allModifiers", "Action", "index", "descriptor", "schema", "getDefaultEventNameForElement", "eventFilter", "filters", "standardFilter", "params", "pattern", "name", "match", "typecast", "meta", "ctrl", "alt", "shift", "modifier", "defaultEventNames", "e", "tagName", "Binding", "context", "action", "actionEvent", "method", "actionDescriptorFilters", "controller", "passes", "filter", "target", "currentTarget", "identifier", "ElementObserver", "delegate", "mutations", "callback", "mutation", "attributeName", "nodes", "node", "tree", "processor", "AttributeObserver", "add", "fetch", "del", "prune", "values", "Multimap", "set", "size", "_key", "_values", "SelectorObserver", "element", "selector", "delegate", "details", "ElementObserver", "Multimap", "callback", "matches", "tree", "match", "selectors", "_attributeName", "matchedBefore", "StringMapObserver", "mutations", "attributeName", "mutation", "oldValue", "key", "value", "attribute", "TokenListObserver", "AttributeObserver", "unmatchedTokens", "matchedTokens", "tokens", "token", "previousTokens", "currentTokens", "firstDifferingIndex", "zip", "previousToken", "currentToken", "tokensAreEqual", "tokenString", "parseTokenString", "content", "index", "left", "right", "length", "_", "ValueListObserver", "parseResult", "valuesByToken", "error", "BindingObserver", "context", "action", "binding", "Binding", "Action", "ValueObserver", "receiver", "descriptor", "name", "defaultValue", "writer", "rawValue", "rawOldValue", "changedMethodName", "changedMethod", "valueDescriptorMap", "descriptors", "hasMethodName", "capitalize", "TargetObserver", "_a", "readInheritableStaticArrayValues", "constructor", "propertyName", "ancestors", "getAncestorsForConstructor", "values", "getOwnStaticArrayValues", "readInheritableStaticObjectPairs", "pairs", "getOwnStaticObjectPairs", "definition", "OutletObserver", "outletName", "observer", "_selector", "outlet", "hasOutlet", "hasOutletController", "_element", "selectorObserver", "attributeObserver", "dependencies", "module", "identifiers", "Context", "scope", "functionName", "detail", "identifier", "controller", "message", "namespaceCamelize", "methodName", "args", "bless", "shadow", "getBlessedProperties", "properties", "shadowConstructor", "extend", "shadowProperties", "getShadowProperties", "blessedProperties", "blessing", "prototype", "getOwnKeys", "getShadowedDescriptor", "shadowingDescriptor", "object", "extendWithReflect", "extended", "testReflectExtension", "b", "blessDefinition", "Module", "application", "ClassMap", "tokenize", "DataMap", "dasherize", "Guide", "logger", "warnedKeys", "attributeValueContainsToken", "TargetSet", "targetName", "targetNames", "target", "targets", "targetDescriptor", "revisedAttributeName", "OutletSet", "controllerElement", "outletNames", "outlets", "controllerAttribute", "Scope", "schema", "ScopeObserver", "scopesByIdentifier", "referenceCount", "Router", "contexts", "afterLoad", "defaultSchema", "objectFromEntries", "c", "n", "array", "memo", "k", "v", "Application", "Dispatcher", "defaultActionDescriptorFilters", "domReady", "controllerConstructor", "filter", "head", "rest", "resolve", "ClassPropertiesBlessing", "classDefinition", "propertiesForClassDefinition", "classes", "OutletPropertiesBlessing", "outletDefinition", "propertiesForOutletDefinition", "getOutletController", "getControllerAndEnsureConnectedScope", "outletController", "camelizedName", "outletElement", "TargetPropertiesBlessing", "targetDefinition", "propertiesForTargetDefinition", "ValuePropertiesBlessing", "valueDefinitionPairs", "propertyDescriptorMap", "result", "valueDefinitionPair", "valueDescriptor", "parseValueDefinitionPair", "propertiesForValueDefinitionPair", "read", "write", "typeDefinition", "valueDescriptorForTokenAndTypeDefinition", "parseValueTypeConstant", "constant", "parseValueTypeDefault", "parseValueTypeObject", "payload", "typeObject", "hasType", "isSomething", "hasDefault", "fullObject", "onlyType", "onlyDefault", "typeFromObject", "typeFromDefaultValue", "propertyPath", "parseValueTypeDefinition", "typeFromConstant", "type", "defaultValueForDefinition", "defaultValuesByType", "hasProperty", "constantFromType", "camelize", "readers", "writers", "writeString", "writeJSON", "Controller", "_identifier", "_application", "eventName", "prefix", "bubbles", "cancelable", "event", "body_scroll_controller_default", "Controller", "event", "device_detector_controller_default", "Controller", "event", "style", "__publicField", "button_copy_controller_default", "Controller", "event", "e", "textTarget", "__publicField", "footnotes_controller_default", "Controller", "event", "sidenotesWerePossible", "sidenotesArePossible", "sidenote", "footnotes", "references", "i", "reference", "footnote", "backlink", "x", "bodyWidth", "containerWidth", "offsetTop", "offsetLeft", "__publicField", "support_us_controller_default", "Controller", "monetizationUrl", "balances", "decimalIndex", "totalBalance", "locale", "goal", "max", "now", "style", "currency", "balanceFormatter", "balanceDate", "dateFormatter", "e", "__publicField", "modal_controller_default", "Controller", "event", "modalId", "x", "__publicField", "authorize_interaction_controller_default", "Controller", "event", "instanceParts", "x", "instanceHost", "webfingerURL", "signal", "headers", "template", "uri", "e", "element", "__publicField", "tabs_controller_default", "Controller", "valueTarget", "event", "value", "tab", "__publicField", "DeviceDetector", "Notifier", "e", "start", "Application", "body_scroll_controller_default", "device_detector_controller_default", "button_copy_controller_default", "footnotes_controller_default", "support_us_controller_default", "modal_controller_default", "authorize_interaction_controller_default", "tabs_controller_default", "event"] +}