diff --git a/js/main.js b/js/main.js index ed61f53b..b7cd083b 100644 --- a/js/main.js +++ b/js/main.js @@ -119,7 +119,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _voi /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nconst normalizedPrefix = \"da\";\nconst randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ClassNormalizer extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get id() {\n return \"classNormalizer\";\n }\n\n get category() {\n return \"general\";\n }\n\n get name() {\n return \"ClassNormalizer\";\n }\n\n enabled() {\n if (this.hasPatched) return;\n this.patchClassModules(modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModules(this.moduleFilter.bind(this)));\n this.normalizeElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = true;\n }\n\n disabled() {\n if (!this.hasPatched) return;\n this.unpatchClassModules(modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModules(this.moduleFilter.bind(this)));\n this.revertElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = false;\n }\n\n patchClassModules(modules) {\n for (const module of modules) {\n this.patchClassModule(normalizedPrefix, module);\n }\n }\n\n unpatchClassModules(modules) {\n for (const module of modules) {\n this.unpatchClassModule(normalizedPrefix, module);\n }\n }\n\n shouldIgnore(value) {\n if (!isNaN(value)) return true;\n if (value.endsWith(\"px\") || value.endsWith(\"ch\") || value.endsWith(\"em\") || value.endsWith(\"ms\")) return true;\n if (value.startsWith(\"layerContainer-\")) return true;\n if (value.startsWith(\"#\") && (value.length == 7 || value.length == 4)) return true;\n if (value.includes(\"calc(\") || value.includes(\"rgba\")) return true;\n return false;\n }\n\n moduleFilter(module) {\n if (typeof module !== \"object\" || Array.isArray(module)) return false;\n if (module.__esModule) return false;\n if (!Object.keys(module).length) return false;\n\n for (const baseClassName in module) {\n const value = module[baseClassName];\n if (typeof value !== \"string\") return false;\n if (this.shouldIgnore(value)) continue;\n if (value.split(\"-\").length === 1) return false;\n if (!randClass.test(value.split(\" \")[0])) return false;\n }\n\n return true;\n }\n\n patchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n const classList = value.split(\" \");\n\n for (const normalClass of classList) {\n const match = normalClass.match(randClass)[1];\n if (!match) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know\n\n const camelCase = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n classNames[baseClassName] += ` ${componentName}-${camelCase}`;\n }\n }\n }\n\n unpatchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n let newString = \"\";\n const classList = value.split(\" \");\n\n for (const normalClass of classList) {\n if (normalClass.startsWith(`${componentName}-`)) continue;\n newString += ` ${normalClass}`;\n }\n\n classNames[baseClassName] = newString.trim();\n }\n }\n\n normalizeElement(element) {\n if (!(element instanceof Element)) return;\n const classes = element.classList;\n\n for (let c = 0, clen = classes.length; c < clen; c++) {\n if (!randClass.test(classes[c])) continue;\n const match = classes[c].match(randClass)[1];\n const newClass = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n element.classList.add(`${normalizedPrefix}-${newClass}`);\n }\n\n for (const child of element.children) this.normalizeElement(child);\n }\n\n revertElement(element) {\n if (!(element instanceof Element)) return;\n if (element.children && element.children.length) this.revertElement(element.children[0]);\n if (element.nextElementSibling) this.revertElement(element.nextElementSibling);\n const classes = element.classList;\n const toRemove = [];\n\n for (let c = 0; c < classes.length; c++) {\n if (classes[c].startsWith(`${normalizedPrefix}-`)) toRemove.push(classes[c]);\n }\n\n element.classList.remove(...toRemove);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2NsYXNzbm9ybWFsaXplci5qcz9kZDc4Il0sIm5hbWVzIjpbIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJSZWdFeHAiLCJDbGFzc05vcm1hbGl6ZXIiLCJCdWlsdGluIiwiaWQiLCJjYXRlZ29yeSIsIm5hbWUiLCJlbmFibGVkIiwiaGFzUGF0Y2hlZCIsInBhdGNoQ2xhc3NNb2R1bGVzIiwiV2VicGFja01vZHVsZXMiLCJnZXRNb2R1bGVzIiwibW9kdWxlRmlsdGVyIiwiYmluZCIsIm5vcm1hbGl6ZUVsZW1lbnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJkaXNhYmxlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJyZXZlcnRFbGVtZW50IiwibW9kdWxlcyIsIm1vZHVsZSIsInBhdGNoQ2xhc3NNb2R1bGUiLCJ1bnBhdGNoQ2xhc3NNb2R1bGUiLCJzaG91bGRJZ25vcmUiLCJ2YWx1ZSIsImlzTmFOIiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiT2JqZWN0Iiwia2V5cyIsImJhc2VDbGFzc05hbWUiLCJzcGxpdCIsInRlc3QiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsImNsYXNzTGlzdCIsIm5vcm1hbENsYXNzIiwibWF0Y2giLCJjYW1lbENhc2UiLCJtYXAiLCJzIiwiaSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJqb2luIiwibmV3U3RyaW5nIiwidHJpbSIsImVsZW1lbnQiLCJFbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsImNoaWxkcmVuIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJwdXNoIiwicmVtb3ZlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUEsTUFBTUEsZ0JBQWdC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QixFQUFvQzJCLENBQUMsRUFBckMsRUFBeUM7QUFDckMsVUFBSUQsT0FBTyxDQUFDQyxDQUFELENBQVAsQ0FBVzVCLFVBQVgsQ0FBdUIsR0FBRTdCLGdCQUFpQixHQUExQyxDQUFKLEVBQW1EZ0UsUUFBUSxDQUFDQyxJQUFULENBQWNULE9BQU8sQ0FBQ0MsQ0FBRCxDQUFyQjtBQUN0RDs7QUFDREgsV0FBTyxDQUFDWixTQUFSLENBQWtCd0IsTUFBbEIsQ0FBeUIsR0FBR0YsUUFBNUI7QUFDSDs7QUF6R29ELENBQTFDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvY2xhc3Nub3JtYWxpemVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge1dlYnBhY2tNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuY29uc3Qgbm9ybWFsaXplZFByZWZpeCA9IFwiZGFcIjtcclxuY29uc3QgcmFuZENsYXNzID0gbmV3IFJlZ0V4cChgXig/ISR7bm9ybWFsaXplZFByZWZpeH0tKSgoPzpbQS1aYS16XXxbMC05XXwtKSspLSg/OltBLVphLXpdfFswLTldfC18Xyl7Nn0kYCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ2xhc3NOb3JtYWxpemVyIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiY2xhc3NOb3JtYWxpemVyXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJDbGFzc05vcm1hbGl6ZXJcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlcyhXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGVzKHRoaXMubW9kdWxlRmlsdGVyLmJpbmQodGhpcykpKTtcclxuICAgICAgICB0aGlzLm5vcm1hbGl6ZUVsZW1lbnQoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIiNhcHAtbW91bnRcIikpO1xyXG4gICAgICAgIHRoaXMuaGFzUGF0Y2hlZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZXMoV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlcyh0aGlzLm1vZHVsZUZpbHRlci5iaW5kKHRoaXMpKSk7XHJcbiAgICAgICAgdGhpcy5yZXZlcnRFbGVtZW50KGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIjYXBwLW1vdW50XCIpKTtcclxuICAgICAgICB0aGlzLmhhc1BhdGNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdW5wYXRjaENsYXNzTW9kdWxlcyhtb2R1bGVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xyXG4gICAgICAgICAgICB0aGlzLnVucGF0Y2hDbGFzc01vZHVsZShub3JtYWxpemVkUHJlZml4LCBtb2R1bGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzaG91bGRJZ25vcmUodmFsdWUpIHtcclxuICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmVuZHNXaXRoKFwicHhcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJjaFwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcImVtXCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwibXNcIikpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKFwibGF5ZXJDb250YWluZXItXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcIiNcIikgJiYgKHZhbHVlLmxlbmd0aCA9PSA3IHx8IHZhbHVlLmxlbmd0aCA9PSA0KSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLmluY2x1ZGVzKFwiY2FsYyhcIikgfHwgdmFsdWUuaW5jbHVkZXMoXCJyZ2JhXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgbW9kdWxlRmlsdGVyKG1vZHVsZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbW9kdWxlICE9PSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkobW9kdWxlKSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmIChtb2R1bGUuX19lc01vZHVsZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICghT2JqZWN0LmtleXMobW9kdWxlKS5sZW5ndGgpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gbW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbW9kdWxlW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSBcInN0cmluZ1wiKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUuc3BsaXQoXCItXCIpLmxlbmd0aCA9PT0gMSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXJhbmRDbGFzcy50ZXN0KHZhbHVlLnNwbGl0KFwiIFwiKVswXSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gbm9ybWFsQ2xhc3MubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgICAgIGlmICghbWF0Y2gpIGNvbnRpbnVlOyAvLyBTaG91bGRuJ3QgZXZlciBoYXBwZW4gc2luY2UgdGhleSBwYXNzZWQgdGhlIG1vZHVsZUZpbHRlciwgYnV0IHlvdSBuZXZlciBrbm93XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYW1lbENhc2UgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdICs9IGAgJHtjb21wb25lbnROYW1lfS0ke2NhbWVsQ2FzZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZShjb21wb25lbnROYW1lLCBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IG5ld1N0cmluZyA9IFwiXCI7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZhbHVlLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBub3JtYWxDbGFzcyBvZiBjbGFzc0xpc3QpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub3JtYWxDbGFzcy5zdGFydHNXaXRoKGAke2NvbXBvbmVudE5hbWV9LWApKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIG5ld1N0cmluZyArPSBgICR7bm9ybWFsQ2xhc3N9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjbGFzc05hbWVzW2Jhc2VDbGFzc05hbWVdID0gbmV3U3RyaW5nLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbm9ybWFsaXplRWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gY2xhc3Nlcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdChjbGFzc2VzW2NdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gY2xhc3Nlc1tjXS5tYXRjaChyYW5kQ2xhc3MpWzFdO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdDbGFzcyA9IG1hdGNoLnNwbGl0KFwiLVwiKS5tYXAoKHMsIGkpID0+IGkgPyBzWzBdLnRvVXBwZXJDYXNlKCkgKyBzLnNsaWNlKDEpIDogcykuam9pbihcIlwiKTtcclxuICAgICAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGAke25vcm1hbGl6ZWRQcmVmaXh9LSR7bmV3Q2xhc3N9YCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWxlbWVudC5jaGlsZHJlbikgdGhpcy5ub3JtYWxpemVFbGVtZW50KGNoaWxkKTtcclxuICAgIH1cclxuXHJcbiAgICByZXZlcnRFbGVtZW50KGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoIShlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBpZiAoZWxlbWVudC5jaGlsZHJlbiAmJiBlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQuY2hpbGRyZW5bMF0pO1xyXG4gICAgICAgIGlmIChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZykgdGhpcy5yZXZlcnRFbGVtZW50KGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nKTtcclxuICAgICAgICBjb25zdCBjbGFzc2VzID0gZWxlbWVudC5jbGFzc0xpc3Q7XHJcbiAgICAgICAgY29uc3QgdG9SZW1vdmUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNsYXNzZXMubGVuZ3RoOyBjKyspIHtcclxuICAgICAgICAgICAgaWYgKGNsYXNzZXNbY10uc3RhcnRzV2l0aChgJHtub3JtYWxpemVkUHJlZml4fS1gKSkgdG9SZW1vdmUucHVzaChjbGFzc2VzW2NdKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKC4uLnRvUmVtb3ZlKTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/classnormalizer.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nconst normalizedPrefix = \"da\";\nconst randClass = new RegExp(`^(?!${normalizedPrefix}-)((?:[A-Za-z]|[0-9]|-)+)-(?:[A-Za-z]|[0-9]|-|_){6}$`);\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ClassNormalizer extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get id() {\n return \"classNormalizer\";\n }\n\n get category() {\n return \"general\";\n }\n\n get name() {\n return \"ClassNormalizer\";\n }\n\n enabled() {\n if (this.hasPatched) return;\n this.patchClassModules(modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModules(this.moduleFilter.bind(this)));\n this.normalizeElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = true;\n this.patchDOMMethods();\n }\n\n disabled() {\n if (!this.hasPatched) return;\n this.unpatchClassModules(modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModules(this.moduleFilter.bind(this)));\n this.revertElement(document.querySelector(\"#app-mount\"));\n this.hasPatched = false;\n }\n\n patchClassModules(modules) {\n for (const module of modules) {\n this.patchClassModule(normalizedPrefix, module);\n }\n }\n\n unpatchClassModules(modules) {\n for (const module of modules) {\n this.unpatchClassModule(normalizedPrefix, module);\n }\n }\n\n shouldIgnore(value) {\n if (!isNaN(value)) return true;\n if (value.endsWith(\"px\") || value.endsWith(\"ch\") || value.endsWith(\"em\") || value.endsWith(\"ms\")) return true;\n if (value.startsWith(\"layerContainer-\")) return true;\n if (value.startsWith(\"#\") && (value.length == 7 || value.length == 4)) return true;\n if (value.includes(\"calc(\") || value.includes(\"rgba\")) return true;\n return false;\n }\n\n moduleFilter(module) {\n if (typeof module !== \"object\" || Array.isArray(module)) return false;\n if (module.__esModule) return false;\n if (!Object.keys(module).length) return false;\n\n for (const baseClassName in module) {\n const value = module[baseClassName];\n if (typeof value !== \"string\") return false;\n if (this.shouldIgnore(value)) continue;\n if (value.split(\"-\").length === 1) return false;\n if (!randClass.test(value.split(\" \")[0])) return false;\n }\n\n return true;\n }\n\n patchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n const classList = value.split(\" \");\n\n for (const normalClass of classList) {\n const match = normalClass.match(randClass)[1];\n if (!match) continue; // Shouldn't ever happen since they passed the moduleFilter, but you never know\n\n const camelCase = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n classNames[baseClassName] += ` ${componentName}-${camelCase}`;\n }\n }\n }\n\n unpatchClassModule(componentName, classNames) {\n for (const baseClassName in classNames) {\n const value = classNames[baseClassName];\n if (this.shouldIgnore(value)) continue;\n let newString = \"\";\n const classList = value.split(\" \");\n\n for (const normalClass of classList) {\n if (normalClass.startsWith(`${componentName}-`)) continue;\n newString += ` ${normalClass}`;\n }\n\n classNames[baseClassName] = newString.trim();\n }\n }\n\n normalizeElement(element) {\n if (!(element instanceof Element)) return;\n const classes = element.classList;\n\n for (let c = 0, clen = classes.length; c < clen; c++) {\n if (!randClass.test(classes[c])) continue;\n const match = classes[c].match(randClass)[1];\n const newClass = match.split(\"-\").map((s, i) => i ? s[0].toUpperCase() + s.slice(1) : s).join(\"\");\n element.classList.add(`${normalizedPrefix}-${newClass}`);\n }\n\n for (const child of element.children) this.normalizeElement(child);\n }\n\n revertElement(element) {\n if (!(element instanceof Element)) return;\n if (element.children && element.children.length) this.revertElement(element.children[0]);\n if (element.nextElementSibling) this.revertElement(element.nextElementSibling);\n const classes = element.classList;\n const toRemove = [];\n\n for (let c = 0; c < classes.length; c++) {\n if (classes[c].startsWith(`${normalizedPrefix}-`)) toRemove.push(classes[c]);\n }\n\n element.classList.remove(...toRemove);\n }\n\n patchDOMMethods() {\n const contains = DOMTokenList.prototype.contains;\n\n DOMTokenList.prototype.contains = function (token) {\n const tokens = token.split(\" \");\n return tokens.every(t => contains.call(this, t));\n };\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2NsYXNzbm9ybWFsaXplci5qcz9kZDc4Il0sIm5hbWVzIjpbIm5vcm1hbGl6ZWRQcmVmaXgiLCJyYW5kQ2xhc3MiLCJSZWdFeHAiLCJDbGFzc05vcm1hbGl6ZXIiLCJCdWlsdGluIiwiaWQiLCJjYXRlZ29yeSIsIm5hbWUiLCJlbmFibGVkIiwiaGFzUGF0Y2hlZCIsInBhdGNoQ2xhc3NNb2R1bGVzIiwiV2VicGFja01vZHVsZXMiLCJnZXRNb2R1bGVzIiwibW9kdWxlRmlsdGVyIiwiYmluZCIsIm5vcm1hbGl6ZUVsZW1lbnQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJwYXRjaERPTU1ldGhvZHMiLCJkaXNhYmxlZCIsInVucGF0Y2hDbGFzc01vZHVsZXMiLCJyZXZlcnRFbGVtZW50IiwibW9kdWxlcyIsIm1vZHVsZSIsInBhdGNoQ2xhc3NNb2R1bGUiLCJ1bnBhdGNoQ2xhc3NNb2R1bGUiLCJzaG91bGRJZ25vcmUiLCJ2YWx1ZSIsImlzTmFOIiwiZW5kc1dpdGgiLCJzdGFydHNXaXRoIiwibGVuZ3RoIiwiaW5jbHVkZXMiLCJBcnJheSIsImlzQXJyYXkiLCJfX2VzTW9kdWxlIiwiT2JqZWN0Iiwia2V5cyIsImJhc2VDbGFzc05hbWUiLCJzcGxpdCIsInRlc3QiLCJjb21wb25lbnROYW1lIiwiY2xhc3NOYW1lcyIsImNsYXNzTGlzdCIsIm5vcm1hbENsYXNzIiwibWF0Y2giLCJjYW1lbENhc2UiLCJtYXAiLCJzIiwiaSIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJqb2luIiwibmV3U3RyaW5nIiwidHJpbSIsImVsZW1lbnQiLCJFbGVtZW50IiwiY2xhc3NlcyIsImMiLCJjbGVuIiwibmV3Q2xhc3MiLCJhZGQiLCJjaGlsZCIsImNoaWxkcmVuIiwibmV4dEVsZW1lbnRTaWJsaW5nIiwidG9SZW1vdmUiLCJwdXNoIiwicmVtb3ZlIiwiY29udGFpbnMiLCJET01Ub2tlbkxpc3QiLCJwcm90b3R5cGUiLCJ0b2tlbiIsInRva2VucyIsImV2ZXJ5IiwidCIsImNhbGwiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSxNQUFNQSxnQkFBZ0IsR0FBRyxJQUF6QjtBQUNBLE1BQU1DLFNBQVMsR0FBRyxJQUFJQyxNQUFKLENBQVksT0FBTUYsZ0JBQWlCLHNEQUFuQyxDQUFsQjtBQUVlLG1FQUFJLE1BQU1HLGVBQU4sU0FBOEJDLHdEQUE5QixDQUFzQztBQUNyRCxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGlCQUFQO0FBQTBCOztBQUNwQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFNBQVA7QUFBa0I7O0FBQ2xDLE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8saUJBQVA7QUFBMEI7O0FBRXRDQyxTQUFPLEdBQUc7QUFDTixRQUFJLEtBQUtDLFVBQVQsRUFBcUI7QUFDckIsU0FBS0MsaUJBQUwsQ0FBdUJDLHNEQUFjLENBQUNDLFVBQWYsQ0FBMEIsS0FBS0MsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBMUIsQ0FBdkI7QUFDQSxTQUFLQyxnQkFBTCxDQUFzQkMsUUFBUSxDQUFDQyxhQUFULENBQXVCLFlBQXZCLENBQXRCO0FBQ0EsU0FBS1IsVUFBTCxHQUFrQixJQUFsQjtBQUNBLFNBQUtTLGVBQUw7QUFDSDs7QUFFREMsVUFBUSxHQUFHO0FBQ1AsUUFBSSxDQUFDLEtBQUtWLFVBQVYsRUFBc0I7QUFDdEIsU0FBS1csbUJBQUwsQ0FBeUJULHNEQUFjLENBQUNDLFVBQWYsQ0FBMEIsS0FBS0MsWUFBTCxDQUFrQkMsSUFBbEIsQ0FBdUIsSUFBdkIsQ0FBMUIsQ0FBekI7QUFDQSxTQUFLTyxhQUFMLENBQW1CTCxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsWUFBdkIsQ0FBbkI7QUFDQSxTQUFLUixVQUFMLEdBQWtCLEtBQWxCO0FBQ0g7O0FBRURDLG1CQUFpQixDQUFDWSxPQUFELEVBQVU7QUFDdkIsU0FBSyxNQUFNQyxNQUFYLElBQXFCRCxPQUFyQixFQUE4QjtBQUMxQixXQUFLRSxnQkFBTCxDQUFzQnhCLGdCQUF0QixFQUF3Q3VCLE1BQXhDO0FBQ0g7QUFDSjs7QUFFREgscUJBQW1CLENBQUNFLE9BQUQsRUFBVTtBQUN6QixTQUFLLE1BQU1DLE1BQVgsSUFBcUJELE9BQXJCLEVBQThCO0FBQzFCLFdBQUtHLGtCQUFMLENBQXdCekIsZ0JBQXhCLEVBQTBDdUIsTUFBMUM7QUFDSDtBQUNKOztBQUVERyxjQUFZLENBQUNDLEtBQUQsRUFBUTtBQUNoQixRQUFJLENBQUNDLEtBQUssQ0FBQ0QsS0FBRCxDQUFWLEVBQW1CLE9BQU8sSUFBUDtBQUNuQixRQUFJQSxLQUFLLENBQUNFLFFBQU4sQ0FBZSxJQUFmLEtBQXdCRixLQUFLLENBQUNFLFFBQU4sQ0FBZSxJQUFmLENBQXhCLElBQWdERixLQUFLLENBQUNFLFFBQU4sQ0FBZSxJQUFmLENBQWhELElBQXdFRixLQUFLLENBQUNFLFFBQU4sQ0FBZSxJQUFmLENBQTVFLEVBQWtHLE9BQU8sSUFBUDtBQUNsRyxRQUFJRixLQUFLLENBQUNHLFVBQU4sQ0FBaUIsaUJBQWpCLENBQUosRUFBeUMsT0FBTyxJQUFQO0FBQ3pDLFFBQUlILEtBQUssQ0FBQ0csVUFBTixDQUFpQixHQUFqQixNQUEwQkgsS0FBSyxDQUFDSSxNQUFOLElBQWdCLENBQWhCLElBQXFCSixLQUFLLENBQUNJLE1BQU4sSUFBZ0IsQ0FBL0QsQ0FBSixFQUF1RSxPQUFPLElBQVA7QUFDdkUsUUFBSUosS0FBSyxDQUFDSyxRQUFOLENBQWUsT0FBZixLQUEyQkwsS0FBSyxDQUFDSyxRQUFOLENBQWUsTUFBZixDQUEvQixFQUF1RCxPQUFPLElBQVA7QUFDdkQsV0FBTyxLQUFQO0FBQ0g7O0FBRURuQixjQUFZLENBQUNVLE1BQUQsRUFBUztBQUNqQixRQUFJLE9BQU9BLE1BQVAsS0FBa0IsUUFBbEIsSUFBOEJVLEtBQUssQ0FBQ0MsT0FBTixDQUFjWCxNQUFkLENBQWxDLEVBQXlELE9BQU8sS0FBUDtBQUN6RCxRQUFJQSxNQUFNLENBQUNZLFVBQVgsRUFBdUIsT0FBTyxLQUFQO0FBQ3ZCLFFBQUksQ0FBQ0MsTUFBTSxDQUFDQyxJQUFQLENBQVlkLE1BQVosRUFBb0JRLE1BQXpCLEVBQWlDLE9BQU8sS0FBUDs7QUFDakMsU0FBSyxNQUFNTyxhQUFYLElBQTRCZixNQUE1QixFQUFvQztBQUNoQyxZQUFNSSxLQUFLLEdBQUdKLE1BQU0sQ0FBQ2UsYUFBRCxDQUFwQjtBQUNBLFVBQUksT0FBT1gsS0FBUCxLQUFpQixRQUFyQixFQUErQixPQUFPLEtBQVA7QUFDL0IsVUFBSSxLQUFLRCxZQUFMLENBQWtCQyxLQUFsQixDQUFKLEVBQThCO0FBQzlCLFVBQUlBLEtBQUssQ0FBQ1ksS0FBTixDQUFZLEdBQVosRUFBaUJSLE1BQWpCLEtBQTRCLENBQWhDLEVBQW1DLE9BQU8sS0FBUDtBQUNuQyxVQUFJLENBQUM5QixTQUFTLENBQUN1QyxJQUFWLENBQWViLEtBQUssQ0FBQ1ksS0FBTixDQUFZLEdBQVosRUFBaUIsQ0FBakIsQ0FBZixDQUFMLEVBQTBDLE9BQU8sS0FBUDtBQUM3Qzs7QUFFRCxXQUFPLElBQVA7QUFDSDs7QUFFRGYsa0JBQWdCLENBQUNpQixhQUFELEVBQWdCQyxVQUFoQixFQUE0QjtBQUN4QyxTQUFLLE1BQU1KLGFBQVgsSUFBNEJJLFVBQTVCLEVBQXdDO0FBQ3BDLFlBQU1mLEtBQUssR0FBR2UsVUFBVSxDQUFDSixhQUFELENBQXhCO0FBQ0EsVUFBSSxLQUFLWixZQUFMLENBQWtCQyxLQUFsQixDQUFKLEVBQThCO0FBQzlCLFlBQU1nQixTQUFTLEdBQUdoQixLQUFLLENBQUNZLEtBQU4sQ0FBWSxHQUFaLENBQWxCOztBQUNBLFdBQUssTUFBTUssV0FBWCxJQUEwQkQsU0FBMUIsRUFBcUM7QUFDakMsY0FBTUUsS0FBSyxHQUFHRCxXQUFXLENBQUNDLEtBQVosQ0FBa0I1QyxTQUFsQixFQUE2QixDQUE3QixDQUFkO0FBQ0EsWUFBSSxDQUFDNEMsS0FBTCxFQUFZLFNBRnFCLENBRVg7O0FBQ3RCLGNBQU1DLFNBQVMsR0FBR0QsS0FBSyxDQUFDTixLQUFOLENBQVksR0FBWixFQUFpQlEsR0FBakIsQ0FBcUIsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEtBQVVBLENBQUMsR0FBR0QsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLRSxXQUFMLEtBQXFCRixDQUFDLENBQUNHLEtBQUYsQ0FBUSxDQUFSLENBQXhCLEdBQXFDSCxDQUFyRSxFQUF3RUksSUFBeEUsQ0FBNkUsRUFBN0UsQ0FBbEI7QUFDQVYsa0JBQVUsQ0FBQ0osYUFBRCxDQUFWLElBQThCLElBQUdHLGFBQWMsSUFBR0ssU0FBVSxFQUE1RDtBQUNIO0FBQ0o7QUFDSjs7QUFFRHJCLG9CQUFrQixDQUFDZ0IsYUFBRCxFQUFnQkMsVUFBaEIsRUFBNEI7QUFDMUMsU0FBSyxNQUFNSixhQUFYLElBQTRCSSxVQUE1QixFQUF3QztBQUNwQyxZQUFNZixLQUFLLEdBQUdlLFVBQVUsQ0FBQ0osYUFBRCxDQUF4QjtBQUNBLFVBQUksS0FBS1osWUFBTCxDQUFrQkMsS0FBbEIsQ0FBSixFQUE4QjtBQUM5QixVQUFJMEIsU0FBUyxHQUFHLEVBQWhCO0FBQ0EsWUFBTVYsU0FBUyxHQUFHaEIsS0FBSyxDQUFDWSxLQUFOLENBQVksR0FBWixDQUFsQjs7QUFDQSxXQUFLLE1BQU1LLFdBQVgsSUFBMEJELFNBQTFCLEVBQXFDO0FBQ2pDLFlBQUlDLFdBQVcsQ0FBQ2QsVUFBWixDQUF3QixHQUFFVyxhQUFjLEdBQXhDLENBQUosRUFBaUQ7QUFDakRZLGlCQUFTLElBQUssSUFBR1QsV0FBWSxFQUE3QjtBQUNIOztBQUNERixnQkFBVSxDQUFDSixhQUFELENBQVYsR0FBNEJlLFNBQVMsQ0FBQ0MsSUFBVixFQUE1QjtBQUNIO0FBQ0o7O0FBRUR2QyxrQkFBZ0IsQ0FBQ3dDLE9BQUQsRUFBVTtBQUN0QixRQUFJLEVBQUVBLE9BQU8sWUFBWUMsT0FBckIsQ0FBSixFQUFtQztBQUNuQyxVQUFNQyxPQUFPLEdBQUdGLE9BQU8sQ0FBQ1osU0FBeEI7O0FBQ0EsU0FBSyxJQUFJZSxDQUFDLEdBQUcsQ0FBUixFQUFXQyxJQUFJLEdBQUdGLE9BQU8sQ0FBQzFCLE1BQS9CLEVBQXVDMkIsQ0FBQyxHQUFHQyxJQUEzQyxFQUFpREQsQ0FBQyxFQUFsRCxFQUFzRDtBQUNsRCxVQUFJLENBQUN6RCxTQUFTLENBQUN1QyxJQUFWLENBQWVpQixPQUFPLENBQUNDLENBQUQsQ0FBdEIsQ0FBTCxFQUFpQztBQUNqQyxZQUFNYixLQUFLLEdBQUdZLE9BQU8sQ0FBQ0MsQ0FBRCxDQUFQLENBQVdiLEtBQVgsQ0FBaUI1QyxTQUFqQixFQUE0QixDQUE1QixDQUFkO0FBQ0EsWUFBTTJELFFBQVEsR0FBR2YsS0FBSyxDQUFDTixLQUFOLENBQVksR0FBWixFQUFpQlEsR0FBakIsQ0FBcUIsQ0FBQ0MsQ0FBRCxFQUFJQyxDQUFKLEtBQVVBLENBQUMsR0FBR0QsQ0FBQyxDQUFDLENBQUQsQ0FBRCxDQUFLRSxXQUFMLEtBQXFCRixDQUFDLENBQUNHLEtBQUYsQ0FBUSxDQUFSLENBQXhCLEdBQXFDSCxDQUFyRSxFQUF3RUksSUFBeEUsQ0FBNkUsRUFBN0UsQ0FBakI7QUFDQUcsYUFBTyxDQUFDWixTQUFSLENBQWtCa0IsR0FBbEIsQ0FBdUIsR0FBRTdELGdCQUFpQixJQUFHNEQsUUFBUyxFQUF0RDtBQUNIOztBQUNELFNBQUssTUFBTUUsS0FBWCxJQUFvQlAsT0FBTyxDQUFDUSxRQUE1QixFQUFzQyxLQUFLaEQsZ0JBQUwsQ0FBc0IrQyxLQUF0QjtBQUN6Qzs7QUFFRHpDLGVBQWEsQ0FBQ2tDLE9BQUQsRUFBVTtBQUNuQixRQUFJLEVBQUVBLE9BQU8sWUFBWUMsT0FBckIsQ0FBSixFQUFtQztBQUNuQyxRQUFJRCxPQUFPLENBQUNRLFFBQVIsSUFBb0JSLE9BQU8sQ0FBQ1EsUUFBUixDQUFpQmhDLE1BQXpDLEVBQWlELEtBQUtWLGFBQUwsQ0FBbUJrQyxPQUFPLENBQUNRLFFBQVIsQ0FBaUIsQ0FBakIsQ0FBbkI7QUFDakQsUUFBSVIsT0FBTyxDQUFDUyxrQkFBWixFQUFnQyxLQUFLM0MsYUFBTCxDQUFtQmtDLE9BQU8sQ0FBQ1Msa0JBQTNCO0FBQ2hDLFVBQU1QLE9BQU8sR0FBR0YsT0FBTyxDQUFDWixTQUF4QjtBQUNBLFVBQU1zQixRQUFRLEdBQUcsRUFBakI7O0FBQ0EsU0FBSyxJQUFJUCxDQUFDLEdBQUcsQ0FBYixFQUFnQkEsQ0FBQyxHQUFHRCxPQUFPLENBQUMxQixNQUE1QixFQUFvQzJCLENBQUMsRUFBckMsRUFBeUM7QUFDckMsVUFBSUQsT0FBTyxDQUFDQyxDQUFELENBQVAsQ0FBVzVCLFVBQVgsQ0FBdUIsR0FBRTlCLGdCQUFpQixHQUExQyxDQUFKLEVBQW1EaUUsUUFBUSxDQUFDQyxJQUFULENBQWNULE9BQU8sQ0FBQ0MsQ0FBRCxDQUFyQjtBQUN0RDs7QUFDREgsV0FBTyxDQUFDWixTQUFSLENBQWtCd0IsTUFBbEIsQ0FBeUIsR0FBR0YsUUFBNUI7QUFDSDs7QUFFRC9DLGlCQUFlLEdBQUc7QUFDZCxVQUFNa0QsUUFBUSxHQUFHQyxZQUFZLENBQUNDLFNBQWIsQ0FBdUJGLFFBQXhDOztBQUNBQyxnQkFBWSxDQUFDQyxTQUFiLENBQXVCRixRQUF2QixHQUFrQyxVQUFTRyxLQUFULEVBQWdCO0FBQzlDLFlBQU1DLE1BQU0sR0FBR0QsS0FBSyxDQUFDaEMsS0FBTixDQUFZLEdBQVosQ0FBZjtBQUNBLGFBQU9pQyxNQUFNLENBQUNDLEtBQVAsQ0FBYUMsQ0FBQyxJQUFJTixRQUFRLENBQUNPLElBQVQsQ0FBYyxJQUFkLEVBQW9CRCxDQUFwQixDQUFsQixDQUFQO0FBQ0gsS0FIRDtBQUlIOztBQWxIb0QsQ0FBMUMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9jbGFzc25vcm1hbGl6ZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7V2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5jb25zdCBub3JtYWxpemVkUHJlZml4ID0gXCJkYVwiO1xyXG5jb25zdCByYW5kQ2xhc3MgPSBuZXcgUmVnRXhwKGBeKD8hJHtub3JtYWxpemVkUHJlZml4fS0pKCg/OltBLVphLXpdfFswLTldfC0pKyktKD86W0EtWmEtel18WzAtOV18LXxfKXs2fSRgKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDbGFzc05vcm1hbGl6ZXIgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJjbGFzc05vcm1hbGl6ZXJcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkNsYXNzTm9ybWFsaXplclwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc1BhdGNoZWQpIHJldHVybjtcclxuICAgICAgICB0aGlzLnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZXModGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMubm9ybWFsaXplRWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnBhdGNoRE9NTWV0aG9kcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNQYXRjaGVkKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGVzKFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZXModGhpcy5tb2R1bGVGaWx0ZXIuYmluZCh0aGlzKSkpO1xyXG4gICAgICAgIHRoaXMucmV2ZXJ0RWxlbWVudChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiI2FwcC1tb3VudFwiKSk7XHJcbiAgICAgICAgdGhpcy5oYXNQYXRjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy5wYXRjaENsYXNzTW9kdWxlKG5vcm1hbGl6ZWRQcmVmaXgsIG1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVucGF0Y2hDbGFzc01vZHVsZXMobW9kdWxlcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgbW9kdWxlIG9mIG1vZHVsZXMpIHtcclxuICAgICAgICAgICAgdGhpcy51bnBhdGNoQ2xhc3NNb2R1bGUobm9ybWFsaXplZFByZWZpeCwgbW9kdWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2hvdWxkSWdub3JlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5lbmRzV2l0aChcInB4XCIpIHx8IHZhbHVlLmVuZHNXaXRoKFwiY2hcIikgfHwgdmFsdWUuZW5kc1dpdGgoXCJlbVwiKSB8fCB2YWx1ZS5lbmRzV2l0aChcIm1zXCIpKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aChcImxheWVyQ29udGFpbmVyLVwiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCIjXCIpICYmICh2YWx1ZS5sZW5ndGggPT0gNyB8fCB2YWx1ZS5sZW5ndGggPT0gNCkpIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGlmICh2YWx1ZS5pbmNsdWRlcyhcImNhbGMoXCIpIHx8IHZhbHVlLmluY2x1ZGVzKFwicmdiYVwiKSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIG1vZHVsZUZpbHRlcihtb2R1bGUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KG1vZHVsZSkpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAobW9kdWxlLl9fZXNNb2R1bGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKG1vZHVsZSkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgZm9yIChjb25zdCBiYXNlQ2xhc3NOYW1lIGluIG1vZHVsZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IG1vZHVsZVtiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJzdHJpbmdcIikgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRJZ25vcmUodmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlLnNwbGl0KFwiLVwiKS5sZW5ndGggPT09IDEpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFyYW5kQ2xhc3MudGVzdCh2YWx1ZS5zcGxpdChcIiBcIilbMF0pKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaENsYXNzTW9kdWxlKGNvbXBvbmVudE5hbWUsIGNsYXNzTmFtZXMpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGJhc2VDbGFzc05hbWUgaW4gY2xhc3NOYW1lcykge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGNsYXNzTmFtZXNbYmFzZUNsYXNzTmFtZV07XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNob3VsZElnbm9yZSh2YWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5vcm1hbENsYXNzLm1hdGNoKHJhbmRDbGFzcylbMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoKSBjb250aW51ZTsgLy8gU2hvdWxkbid0IGV2ZXIgaGFwcGVuIHNpbmNlIHRoZXkgcGFzc2VkIHRoZSBtb2R1bGVGaWx0ZXIsIGJ1dCB5b3UgbmV2ZXIga25vd1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2FtZWxDYXNlID0gbWF0Y2guc3BsaXQoXCItXCIpLm1hcCgocywgaSkgPT4gaSA/IHNbMF0udG9VcHBlckNhc2UoKSArIHMuc2xpY2UoMSkgOiBzKS5qb2luKFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSArPSBgICR7Y29tcG9uZW50TmFtZX0tJHtjYW1lbENhc2V9YDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1bnBhdGNoQ2xhc3NNb2R1bGUoY29tcG9uZW50TmFtZSwgY2xhc3NOYW1lcykge1xyXG4gICAgICAgIGZvciAoY29uc3QgYmFzZUNsYXNzTmFtZSBpbiBjbGFzc05hbWVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2hvdWxkSWdub3JlKHZhbHVlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGxldCBuZXdTdHJpbmcgPSBcIlwiO1xyXG4gICAgICAgICAgICBjb25zdCBjbGFzc0xpc3QgPSB2YWx1ZS5zcGxpdChcIiBcIik7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qgbm9ybWFsQ2xhc3Mgb2YgY2xhc3NMaXN0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9ybWFsQ2xhc3Muc3RhcnRzV2l0aChgJHtjb21wb25lbnROYW1lfS1gKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBuZXdTdHJpbmcgKz0gYCAke25vcm1hbENsYXNzfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2xhc3NOYW1lc1tiYXNlQ2xhc3NOYW1lXSA9IG5ld1N0cmluZy50cmltKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG5vcm1hbGl6ZUVsZW1lbnQoZWxlbWVudCkge1xyXG4gICAgICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGNsYXNzZXMgPSBlbGVtZW50LmNsYXNzTGlzdDtcclxuICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IGNsYXNzZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmICghcmFuZENsYXNzLnRlc3QoY2xhc3Nlc1tjXSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IGNsYXNzZXNbY10ubWF0Y2gocmFuZENsYXNzKVsxXTtcclxuICAgICAgICAgICAgY29uc3QgbmV3Q2xhc3MgPSBtYXRjaC5zcGxpdChcIi1cIikubWFwKChzLCBpKSA9PiBpID8gc1swXS50b1VwcGVyQ2FzZSgpICsgcy5zbGljZSgxKSA6IHMpLmpvaW4oXCJcIik7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChgJHtub3JtYWxpemVkUHJlZml4fS0ke25ld0NsYXNzfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGVsZW1lbnQuY2hpbGRyZW4pIHRoaXMubm9ybWFsaXplRWxlbWVudChjaGlsZCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV2ZXJ0RWxlbWVudChlbGVtZW50KSB7XHJcbiAgICAgICAgaWYgKCEoZWxlbWVudCBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGVsZW1lbnQuY2hpbGRyZW4gJiYgZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50LmNoaWxkcmVuWzBdKTtcclxuICAgICAgICBpZiAoZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmcpIHRoaXMucmV2ZXJ0RWxlbWVudChlbGVtZW50Lm5leHRFbGVtZW50U2libGluZyk7XHJcbiAgICAgICAgY29uc3QgY2xhc3NlcyA9IGVsZW1lbnQuY2xhc3NMaXN0O1xyXG4gICAgICAgIGNvbnN0IHRvUmVtb3ZlID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCBjbGFzc2VzLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGlmIChjbGFzc2VzW2NdLnN0YXJ0c1dpdGgoYCR7bm9ybWFsaXplZFByZWZpeH0tYCkpIHRvUmVtb3ZlLnB1c2goY2xhc3Nlc1tjXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSguLi50b1JlbW92ZSk7XHJcbiAgICB9XHJcbiAgICBcclxuICAgIHBhdGNoRE9NTWV0aG9kcygpIHtcclxuICAgICAgICBjb25zdCBjb250YWlucyA9IERPTVRva2VuTGlzdC5wcm90b3R5cGUuY29udGFpbnM7XHJcbiAgICAgICAgRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5jb250YWlucyA9IGZ1bmN0aW9uKHRva2VuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRva2VucyA9IHRva2VuLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRva2Vucy5ldmVyeSh0ID0+IGNvbnRhaW5zLmNhbGwodGhpcywgdCkpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/classnormalizer.js\n"); /***/ }), @@ -167,7 +167,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteAutocaps extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteAutocapitalize\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"autoCaps\";\n }\n\n enabled() {\n $(\"body\").off(\".bdac\");\n $(\"body\").on(\"keyup.bdac change.bdac paste.bdac\", $(\".channelTextArea-1LDbYG textarea:first\"), () => {\n const text = $(\".channelTextArea-1LDbYG textarea:first\").val();\n if (text == undefined) return;\n const lastWord = text.split(\" \").pop();\n\n if (lastWord.length > 3) {\n if (lastWord == \"danSgame\") return;\n const ret = this.capitalize(lastWord.toLowerCase());\n\n if (ret !== null && ret !== undefined) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].insertText(modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].getTextArea()[0], text.replace(lastWord, ret));\n }\n }\n });\n }\n\n disabled() {\n $(\"body\").off(\".bdac\");\n }\n\n capitalize(value) {\n const res = data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].TwitchGlobal;\n\n for (const p in res) {\n if (res.hasOwnProperty(p) && value == (p + \"\").toLowerCase()) {\n return p;\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlYXV0b2NhcHMuanM/MTY0NyJdLCJuYW1lcyI6WyJFbW90ZUF1dG9jYXBzIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCIkIiwib2ZmIiwib24iLCJ0ZXh0IiwidmFsIiwidW5kZWZpbmVkIiwibGFzdFdvcmQiLCJzcGxpdCIsInBvcCIsImxlbmd0aCIsInJldCIsImNhcGl0YWxpemUiLCJ0b0xvd2VyQ2FzZSIsIlV0aWxpdGllcyIsImluc2VydFRleHQiLCJnZXRUZXh0QXJlYSIsInJlcGxhY2UiLCJkaXNhYmxlZCIsInZhbHVlIiwicmVzIiwiRW1vdGVzIiwiVHdpdGNoR2xvYmFsIiwicCIsImhhc093blByb3BlcnR5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLGFBQU4sU0FBNEJDLHdEQUE1QixDQUFvQztBQUNuRCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLHFCQUFQO0FBQThCOztBQUMxQyxNQUFJQyxVQUFKLEdBQWlCO0FBQUMsV0FBTyxRQUFQO0FBQWlCOztBQUNuQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFNBQVA7QUFBa0I7O0FBQ2xDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sVUFBUDtBQUFtQjs7QUFFN0JDLFNBQU8sR0FBRztBQUNOQyxLQUFDLENBQUMsTUFBRCxDQUFELENBQVVDLEdBQVYsQ0FBYyxPQUFkO0FBQ0FELEtBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUUsRUFBVixDQUFhLG1DQUFiLEVBQWtERixDQUFDLENBQUMsd0NBQUQsQ0FBbkQsRUFBK0YsTUFBTTtBQUNqRyxZQUFNRyxJQUFJLEdBQUdILENBQUMsQ0FBQyx3Q0FBRCxDQUFELENBQTRDSSxHQUE1QyxFQUFiO0FBQ0EsVUFBSUQsSUFBSSxJQUFJRSxTQUFaLEVBQXVCO0FBRXZCLFlBQU1DLFFBQVEsR0FBR0gsSUFBSSxDQUFDSSxLQUFMLENBQVcsR0FBWCxFQUFnQkMsR0FBaEIsRUFBakI7O0FBQ0EsVUFBSUYsUUFBUSxDQUFDRyxNQUFULEdBQWtCLENBQXRCLEVBQXlCO0FBQ3JCLFlBQUlILFFBQVEsSUFBSSxVQUFoQixFQUE0QjtBQUM1QixjQUFNSSxHQUFHLEdBQUcsS0FBS0MsVUFBTCxDQUFnQkwsUUFBUSxDQUFDTSxXQUFULEVBQWhCLENBQVo7O0FBQ0EsWUFBSUYsR0FBRyxLQUFLLElBQVIsSUFBZ0JBLEdBQUcsS0FBS0wsU0FBNUIsRUFBdUM7QUFDbkNRLDJEQUFTLENBQUNDLFVBQVYsQ0FBcUJELGlEQUFTLENBQUNFLFdBQVYsR0FBd0IsQ0FBeEIsQ0FBckIsRUFBaURaLElBQUksQ0FBQ2EsT0FBTCxDQUFhVixRQUFiLEVBQXVCSSxHQUF2QixDQUFqRDtBQUNIO0FBQ0o7QUFDSixLQVpEO0FBYUg7O0FBRURPLFVBQVEsR0FBRztBQUNQakIsS0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVQyxHQUFWLENBQWMsT0FBZDtBQUNIOztBQUVEVSxZQUFVLENBQUNPLEtBQUQsRUFBUTtBQUNkLFVBQU1DLEdBQUcsR0FBR0MsMkNBQU0sQ0FBQ0MsWUFBbkI7O0FBQ0EsU0FBSyxNQUFNQyxDQUFYLElBQWdCSCxHQUFoQixFQUFxQjtBQUNqQixVQUFJQSxHQUFHLENBQUNJLGNBQUosQ0FBbUJELENBQW5CLEtBQXlCSixLQUFLLElBQUksQ0FBQ0ksQ0FBQyxHQUFHLEVBQUwsRUFBU1YsV0FBVCxFQUF0QyxFQUE4RDtBQUMxRCxlQUFPVSxDQUFQO0FBQ0g7QUFDSjtBQUNKOztBQWxDa0QsQ0FBeEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9lbW90ZWF1dG9jYXBzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5cclxuaW1wb3J0IHtFbW90ZXN9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7VXRpbGl0aWVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlQXV0b2NhcHMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkVtb3RlQXV0b2NhcGl0YWxpemVcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJhdXRvQ2Fwc1wiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgICQoXCJib2R5XCIpLm9mZihcIi5iZGFjXCIpO1xyXG4gICAgICAgICQoXCJib2R5XCIpLm9uKFwia2V5dXAuYmRhYyBjaGFuZ2UuYmRhYyBwYXN0ZS5iZGFjXCIsICQoXCIuY2hhbm5lbFRleHRBcmVhLTFMRGJZRyB0ZXh0YXJlYTpmaXJzdFwiKSwgKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gJChcIi5jaGFubmVsVGV4dEFyZWEtMUxEYllHIHRleHRhcmVhOmZpcnN0XCIpLnZhbCgpO1xyXG4gICAgICAgICAgICBpZiAodGV4dCA9PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RXb3JkID0gdGV4dC5zcGxpdChcIiBcIikucG9wKCk7XHJcbiAgICAgICAgICAgIGlmIChsYXN0V29yZC5sZW5ndGggPiAzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFzdFdvcmQgPT0gXCJkYW5TZ2FtZVwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZXQgPSB0aGlzLmNhcGl0YWxpemUobGFzdFdvcmQudG9Mb3dlckNhc2UoKSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0ICE9PSBudWxsICYmIHJldCAhPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbGl0aWVzLmluc2VydFRleHQoVXRpbGl0aWVzLmdldFRleHRBcmVhKClbMF0sIHRleHQucmVwbGFjZShsYXN0V29yZCwgcmV0KSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICAkKFwiYm9keVwiKS5vZmYoXCIuYmRhY1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBjYXBpdGFsaXplKHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgcmVzID0gRW1vdGVzLlR3aXRjaEdsb2JhbDtcclxuICAgICAgICBmb3IgKGNvbnN0IHAgaW4gcmVzKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXMuaGFzT3duUHJvcGVydHkocCkgJiYgdmFsdWUgPT0gKHAgKyBcIlwiKS50b0xvd2VyQ2FzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/emoteautocaps.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes.js\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteAutocaps extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteAutocapitalize\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"autoCaps\";\n }\n\n enabled() {\n $(\"body\").off(\".bdac\");\n $(\"body\").on(\"keyup.bdac change.bdac paste.bdac\", $(\".channelTextArea-1LDbYG textarea:first\"), () => {\n const text = $(\".channelTextArea-1LDbYG textarea:first\").val();\n if (text == undefined) return;\n const lastWord = text.split(\" \").pop();\n\n if (lastWord.length > 3) {\n if (lastWord == \"danSgame\") return;\n const ret = this.capitalize(lastWord.toLowerCase());\n\n if (ret !== null && ret !== undefined) {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea()[0], text.replace(lastWord, ret));\n }\n }\n });\n }\n\n disabled() {\n $(\"body\").off(\".bdac\");\n }\n\n capitalize(value) {\n const res = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\");\n\n for (const p in res) {\n if (res.hasOwnProperty(p) && value == (p + \"\").toLowerCase()) {\n return p;\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlYXV0b2NhcHMuanM/MTY0NyJdLCJuYW1lcyI6WyJFbW90ZUF1dG9jYXBzIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCIkIiwib2ZmIiwib24iLCJ0ZXh0IiwidmFsIiwidW5kZWZpbmVkIiwibGFzdFdvcmQiLCJzcGxpdCIsInBvcCIsImxlbmd0aCIsInJldCIsImNhcGl0YWxpemUiLCJ0b0xvd2VyQ2FzZSIsIlV0aWxpdGllcyIsImluc2VydFRleHQiLCJnZXRUZXh0QXJlYSIsInJlcGxhY2UiLCJkaXNhYmxlZCIsInZhbHVlIiwicmVzIiwiRW1vdGVNb2R1bGUiLCJnZXRDYXRlZ29yeSIsInAiLCJoYXNPd25Qcm9wZXJ0eSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVBO0FBRUE7QUFFZSxtRUFBSSxNQUFNQSxhQUFOLFNBQTRCQyx3REFBNUIsQ0FBb0M7QUFDbkQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxxQkFBUDtBQUE4Qjs7QUFDMUMsTUFBSUMsVUFBSixHQUFpQjtBQUFDLFdBQU8sUUFBUDtBQUFpQjs7QUFDbkMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLFVBQVA7QUFBbUI7O0FBRTdCQyxTQUFPLEdBQUc7QUFDTkMsS0FBQyxDQUFDLE1BQUQsQ0FBRCxDQUFVQyxHQUFWLENBQWMsT0FBZDtBQUNBRCxLQUFDLENBQUMsTUFBRCxDQUFELENBQVVFLEVBQVYsQ0FBYSxtQ0FBYixFQUFrREYsQ0FBQyxDQUFDLHdDQUFELENBQW5ELEVBQStGLE1BQU07QUFDakcsWUFBTUcsSUFBSSxHQUFHSCxDQUFDLENBQUMsd0NBQUQsQ0FBRCxDQUE0Q0ksR0FBNUMsRUFBYjtBQUNBLFVBQUlELElBQUksSUFBSUUsU0FBWixFQUF1QjtBQUV2QixZQUFNQyxRQUFRLEdBQUdILElBQUksQ0FBQ0ksS0FBTCxDQUFXLEdBQVgsRUFBZ0JDLEdBQWhCLEVBQWpCOztBQUNBLFVBQUlGLFFBQVEsQ0FBQ0csTUFBVCxHQUFrQixDQUF0QixFQUF5QjtBQUNyQixZQUFJSCxRQUFRLElBQUksVUFBaEIsRUFBNEI7QUFDNUIsY0FBTUksR0FBRyxHQUFHLEtBQUtDLFVBQUwsQ0FBZ0JMLFFBQVEsQ0FBQ00sV0FBVCxFQUFoQixDQUFaOztBQUNBLFlBQUlGLEdBQUcsS0FBSyxJQUFSLElBQWdCQSxHQUFHLEtBQUtMLFNBQTVCLEVBQXVDO0FBQ25DUSwyREFBUyxDQUFDQyxVQUFWLENBQXFCRCxpREFBUyxDQUFDRSxXQUFWLEdBQXdCLENBQXhCLENBQXJCLEVBQWlEWixJQUFJLENBQUNhLE9BQUwsQ0FBYVYsUUFBYixFQUF1QkksR0FBdkIsQ0FBakQ7QUFDSDtBQUNKO0FBQ0osS0FaRDtBQWFIOztBQUVETyxVQUFRLEdBQUc7QUFDUGpCLEtBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUMsR0FBVixDQUFjLE9BQWQ7QUFDSDs7QUFFRFUsWUFBVSxDQUFDTyxLQUFELEVBQVE7QUFDZCxVQUFNQyxHQUFHLEdBQUdDLCtDQUFXLENBQUNDLFdBQVosQ0FBd0IsY0FBeEIsQ0FBWjs7QUFDQSxTQUFLLE1BQU1DLENBQVgsSUFBZ0JILEdBQWhCLEVBQXFCO0FBQ2pCLFVBQUlBLEdBQUcsQ0FBQ0ksY0FBSixDQUFtQkQsQ0FBbkIsS0FBeUJKLEtBQUssSUFBSSxDQUFDSSxDQUFDLEdBQUcsRUFBTCxFQUFTVixXQUFULEVBQXRDLEVBQThEO0FBQzFELGVBQU9VLENBQVA7QUFDSDtBQUNKO0FBQ0o7O0FBbENrRCxDQUF4QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3RlYXV0b2NhcHMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcblxyXG5pbXBvcnQge1V0aWxpdGllc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW90ZUF1dG9jYXBzIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZUF1dG9jYXBpdGFsaXplXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwiZW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiYXV0b0NhcHNcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICAkKFwiYm9keVwiKS5vZmYoXCIuYmRhY1wiKTtcclxuICAgICAgICAkKFwiYm9keVwiKS5vbihcImtleXVwLmJkYWMgY2hhbmdlLmJkYWMgcGFzdGUuYmRhY1wiLCAkKFwiLmNoYW5uZWxUZXh0QXJlYS0xTERiWUcgdGV4dGFyZWE6Zmlyc3RcIiksICgpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgdGV4dCA9ICQoXCIuY2hhbm5lbFRleHRBcmVhLTFMRGJZRyB0ZXh0YXJlYTpmaXJzdFwiKS52YWwoKTtcclxuICAgICAgICAgICAgaWYgKHRleHQgPT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICBjb25zdCBsYXN0V29yZCA9IHRleHQuc3BsaXQoXCIgXCIpLnBvcCgpO1xyXG4gICAgICAgICAgICBpZiAobGFzdFdvcmQubGVuZ3RoID4gMykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhc3RXb3JkID09IFwiZGFuU2dhbWVcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0ID0gdGhpcy5jYXBpdGFsaXplKGxhc3RXb3JkLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldCAhPT0gbnVsbCAmJiByZXQgIT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxpdGllcy5pbnNlcnRUZXh0KFV0aWxpdGllcy5nZXRUZXh0QXJlYSgpWzBdLCB0ZXh0LnJlcGxhY2UobGFzdFdvcmQsIHJldCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgJChcImJvZHlcIikub2ZmKFwiLmJkYWNcIik7XHJcbiAgICB9XHJcblxyXG4gICAgY2FwaXRhbGl6ZSh2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IEVtb3RlTW9kdWxlLmdldENhdGVnb3J5KFwiVHdpdGNoR2xvYmFsXCIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgcCBpbiByZXMpIHtcclxuICAgICAgICAgICAgaWYgKHJlcy5oYXNPd25Qcm9wZXJ0eShwKSAmJiB2YWx1ZSA9PSAocCArIFwiXCIpLnRvTG93ZXJDYXNlKCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/emoteautocaps.js\n"); /***/ }), @@ -179,7 +179,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n\nconst headerHTML = `
\n \n \n
`;\nconst twitchEmoteHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\nconst favoritesHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\n\nconst makeEmote = (emote, url, options = {}) => {\n const {\n onContextMenu,\n onClick\n } = options;\n const emoteContainer = $(`
\n \"${emote}\"\n
`)[0];\n if (onContextMenu) emoteContainer.addEventListener(\"contextmenu\", onContextMenu);\n emoteContainer.addEventListener(\"click\", onClick);\n return emoteContainer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteMenu\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emoteMenu\";\n }\n\n get hideEmojisID() {\n return \"hideEmojiMenu\";\n }\n\n get hideEmojis() {\n return this.get(this.hideEmojisID);\n }\n\n constructor() {\n super();\n this.lastTab = \"bda-qem-emojis\";\n this.favoriteEmotes = {};\n this.qmeHeader = $(headerHTML)[0];\n\n for (const button of this.qmeHeader.getElementsByTagName(\"button\")) button.addEventListener(\"click\", this.switchMenu.bind(this));\n\n this.teContainer = $(twitchEmoteHTML)[0];\n this.teContainerInner = this.teContainer.querySelector(\".emote-menu-inner\");\n this.faContainer = $(favoritesHTML)[0];\n this.faContainerInner = this.faContainer.querySelector(\".emote-menu-inner\");\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) this.observe(mutation);\n });\n this.enableHideEmojis = this.enableHideEmojis.bind(this);\n this.disableHideEmojis = this.disableHideEmojis.bind(this);\n this.updateTwitchEmotes = this.updateTwitchEmotes.bind(this);\n }\n\n initialize() {\n super.initialize();\n const fe = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"bdfavemotes\");\n if (fe !== \"\" && fe !== null) this.favoriteEmotes = JSON.parse(atob(fe));\n this.updateFavorites();\n }\n\n async enabled() {\n this.log(\"Starting to observe\");\n this.observer.observe(document.getElementById(\"app-mount\"), {\n childList: true,\n subtree: true\n });\n this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis);\n if (this.hideEmojis) this.enableHideEmojis(); // await this.waitForEmotes();\n // this.updateTwitchEmotes();\n\n if (data__WEBPACK_IMPORTED_MODULE_1__[\"State\"].emotesLoaded) this.updateTwitchEmotes();\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"emotes-loaded\", this.updateTwitchEmotes);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].off(\"emotes-loaded\", this.updateTwitchEmotes);\n this.observer.disconnect();\n this.disableHideEmojis();\n if (this.hideEmojiCancel) this.hideEmojiCancel();\n }\n\n async waitForEmotes() {\n if (data__WEBPACK_IMPORTED_MODULE_1__[\"State\"].emotesLoaded) return;\n return new Promise(resolve => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"emotes-loaded\", resolve);\n });\n }\n\n enableHideEmojis() {\n $(\".emojiPicker-3m1S-j\").addClass(\"bda-qme-hidden\");\n }\n\n disableHideEmojis() {\n $(\".emojiPicker-3m1S-j\").removeClass(\"bda-qme-hidden\");\n }\n\n insertEmote(emote) {\n const ta = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].getTextArea();\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].insertText(ta[0], ta.val().slice(-1) == \" \" ? ta.val() + emote : ta.val() + \" \" + emote);\n }\n\n favContext(e) {\n e.stopPropagation();\n const em = e.target.closest(\".emote-container\").children[0];\n const menu = $(`
Remove
`);\n menu.css({\n top: e.pageY - $(\"#bda-qem-favourite-container\").offset().top,\n left: e.pageX - $(\"#bda-qem-favourite-container\").offset().left\n });\n $(em).parent().append(menu);\n menu.on(\"click\", e => {\n e.preventDefault();\n e.stopPropagation();\n $(em).remove();\n delete this.favoriteEmotes[$(em).attr(\"title\")];\n this.updateFavorites();\n $(document).off(\"mousedown.emotemenu\");\n });\n $(document).on(\"mousedown.emotemenu\", function (e) {\n if (e.target.id == \"removemenu\") return;\n $(\"#removemenu\").remove();\n $(document).off(\"mousedown.emotemenu\");\n });\n }\n\n switchMenu(e) {\n let id = typeof e == \"string\" ? e : $(e.target).attr(\"id\");\n if (id == \"bda-qem-emojis\" && this.hideEmojis) id = \"bda-qem-favourite\";\n const twitch = $(\"#bda-qem-twitch\");\n const fav = $(\"#bda-qem-favourite\");\n const emojis = $(\"#bda-qem-emojis\");\n twitch.removeClass(\"active\");\n fav.removeClass(\"active\");\n emojis.removeClass(\"active\");\n $(\".emojiPicker-3m1S-j\").hide();\n $(\"#bda-qem-favourite-container\").hide();\n $(\"#bda-qem-twitch-container\").hide();\n\n switch (id) {\n case \"bda-qem-twitch\":\n twitch.addClass(\"active\");\n $(\"#bda-qem-twitch-container\").show();\n break;\n\n case \"bda-qem-favourite\":\n fav.addClass(\"active\");\n $(\"#bda-qem-favourite-container\").show();\n break;\n\n case \"bda-qem-emojis\":\n emojis.addClass(\"active\");\n $(\".emojiPicker-3m1S-j\").show();\n $(\".emojiPicker-3m1S-j input\").focus();\n break;\n }\n\n if (id) this.lastTab = id;\n }\n\n observe(mutation) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return;\n const node = mutation.addedNodes[0];\n if (!node.classList.contains(\"popout-3sVMXz\") || node.classList.contains(\"popoutLeft-30WmrD\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length) return;\n const e = $(node);\n if (this.hideEmojis) e.addClass(\"bda-qme-hidden\");else e.removeClass(\"bda-qme-hidden\");\n e.prepend(this.qmeHeader);\n e.append(this.teContainer);\n e.append(this.faContainer);\n this.switchMenu(this.lastTab);\n }\n\n favorite(name, url) {\n if (!this.favoriteEmotes.hasOwnProperty(name)) this.favoriteEmotes[name] = url;\n this.updateFavorites();\n }\n\n updateTwitchEmotes() {\n while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove();\n\n for (const emote in data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].TwitchGlobal) {\n if (!data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].TwitchGlobal.hasOwnProperty(emote)) continue;\n const url = data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].TwitchGlobal[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote)\n });\n this.teContainerInner.append(emoteElement);\n }\n }\n\n updateFavorites() {\n while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove();\n\n for (const emote in this.favoriteEmotes) {\n const url = this.favoriteEmotes[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote),\n onContextMenu: this.favContext.bind(this)\n });\n this.faContainerInner.append(emoteElement);\n }\n\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"bdfavemotes\", btoa(JSON.stringify(this.favoriteEmotes)));\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcz8yYWNlIl0sIm5hbWVzIjpbImhlYWRlckhUTUwiLCJ0d2l0Y2hFbW90ZUhUTUwiLCJmYXZvcml0ZXNIVE1MIiwibWFrZUVtb3RlIiwiZW1vdGUiLCJ1cmwiLCJvcHRpb25zIiwib25Db250ZXh0TWVudSIsIm9uQ2xpY2siLCJlbW90ZUNvbnRhaW5lciIsIiQiLCJhZGRFdmVudExpc3RlbmVyIiwiRW1vdGVNZW51IiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImhpZGVFbW9qaXNJRCIsImhpZGVFbW9qaXMiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImxhc3RUYWIiLCJmYXZvcml0ZUVtb3RlcyIsInFtZUhlYWRlciIsImJ1dHRvbiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3dpdGNoTWVudSIsImJpbmQiLCJ0ZUNvbnRhaW5lciIsInRlQ29udGFpbmVySW5uZXIiLCJxdWVyeVNlbGVjdG9yIiwiZmFDb250YWluZXIiLCJmYUNvbnRhaW5lcklubmVyIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibXV0YXRpb24iLCJvYnNlcnZlIiwiZW5hYmxlSGlkZUVtb2ppcyIsImRpc2FibGVIaWRlRW1vamlzIiwidXBkYXRlVHdpdGNoRW1vdGVzIiwiaW5pdGlhbGl6ZSIsImZlIiwiRGF0YVN0b3JlIiwiZ2V0QkREYXRhIiwiSlNPTiIsInBhcnNlIiwiYXRvYiIsInVwZGF0ZUZhdm9yaXRlcyIsImVuYWJsZWQiLCJsb2ciLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImhpZGVFbW9qaUNhbmNlbCIsInJlZ2lzdGVyU2V0dGluZyIsIlN0YXRlIiwiZW1vdGVzTG9hZGVkIiwiRXZlbnRzIiwib24iLCJkaXNhYmxlZCIsIm9mZiIsImRpc2Nvbm5lY3QiLCJ3YWl0Rm9yRW1vdGVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiaW5zZXJ0RW1vdGUiLCJ0YSIsIlV0aWxpdGllcyIsImdldFRleHRBcmVhIiwiaW5zZXJ0VGV4dCIsInZhbCIsInNsaWNlIiwiZmF2Q29udGV4dCIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJlbSIsInRhcmdldCIsImNsb3Nlc3QiLCJjaGlsZHJlbiIsIm1lbnUiLCJjc3MiLCJ0b3AiLCJwYWdlWSIsIm9mZnNldCIsImxlZnQiLCJwYWdlWCIsInBhcmVudCIsImFwcGVuZCIsInByZXZlbnREZWZhdWx0IiwicmVtb3ZlIiwiYXR0ciIsInR3aXRjaCIsImZhdiIsImVtb2ppcyIsImhpZGUiLCJzaG93IiwiZm9jdXMiLCJhZGRlZE5vZGVzIiwibGVuZ3RoIiwiRWxlbWVudCIsIm5vZGUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJwcmVwZW5kIiwiZmF2b3JpdGUiLCJoYXNPd25Qcm9wZXJ0eSIsImZpcnN0Q2hpbGQiLCJFbW90ZXMiLCJUd2l0Y2hHbG9iYWwiLCJlbW90ZUVsZW1lbnQiLCJzZXRCRERhdGEiLCJidG9hIiwic3RyaW5naWZ5Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFVBQVUsR0FBSTs7OztPQUFwQjtBQU1BLE1BQU1DLGVBQWUsR0FBSTs7Ozs7Ozs7T0FBekI7QUFVQSxNQUFNQyxhQUFhLEdBQUk7Ozs7Ozs7O09BQXZCOztBQVVBLE1BQU1DLFNBQVMsR0FBRyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYUMsT0FBTyxHQUFHLEVBQXZCLEtBQThCO0FBQzVDLFFBQU07QUFBQ0MsaUJBQUQ7QUFBZ0JDO0FBQWhCLE1BQTJCRixPQUFqQztBQUNBLFFBQU1HLGNBQWMsR0FBR0MsQ0FBQyxDQUFFO3VDQUNTTixLQUFNLFVBQVNDLEdBQUksWUFBV0QsS0FBTTtXQUQvQyxDQUFELENBRWQsQ0FGYyxD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QyxZQUFNbEIsR0FBRyxHQUFHLEtBQUtrQixjQUFMLENBQW9CbkIsS0FBcEIsQ0FBWjtBQUNBLFlBQU0rRyxZQUFZLEdBQUdoSCxTQUFTLENBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFhO0FBQUNHLGVBQU8sRUFBRSxLQUFLOEQsV0FBTCxDQUFpQjFDLElBQWpCLENBQXNCLElBQXRCLEVBQTRCeEIsS0FBNUIsQ0FBVjtBQUE4Q0cscUJBQWEsRUFBRSxLQUFLc0UsVUFBTCxDQUFnQmpELElBQWhCLENBQXFCLElBQXJCO0FBQTdELE9BQWIsQ0FBOUI7QUFDQSxXQUFLSyxnQkFBTCxDQUFzQjJELE1BQXRCLENBQTZCdUIsWUFBN0I7QUFDSDs7QUFDRHZFLHFEQUFTLENBQUN3RSxTQUFWLENBQW9CLGFBQXBCLEVBQW1DQyxJQUFJLENBQUN2RSxJQUFJLENBQUN3RSxTQUFMLENBQWUsS0FBSy9GLGNBQXBCLENBQUQsQ0FBdkM7QUFDSDs7QUEzSzhDLENBQXBDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZW1vdGVtZW51LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge0Vtb3RlcywgU3RhdGV9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7RGF0YVN0b3JlLCBVdGlsaXRpZXMsIEV2ZW50c30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmNvbnN0IGhlYWRlckhUTUwgPSBgPGRpdiBpZD1cImJkYS1xZW1cIj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJhY3RpdmVcIiBpZD1cImJkYS1xZW0tdHdpdGNoXCI+VHdpdGNoPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiYmRhLXFlbS1mYXZvdXJpdGVcIj5GYXZvdXJpdGU8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJiZGEtcWVtLWVtb2ppc1wiPkVtb2ppczwvYnV0dG9uZD5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IHR3aXRjaEVtb3RlSFRNTCA9IGA8ZGl2IGlkPVwiYmRhLXFlbS10d2l0Y2gtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBzY3JvbGxlcldyYXAtMmxKRWtkIGZhZGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXIgc2Nyb2xsZXItMkZLRlBHXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW90ZS1tZW51LWlubmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgZmF2b3JpdGVzSFRNTCA9IGA8ZGl2IGlkPVwiYmRhLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXItd3JhcCBzY3JvbGxlcldyYXAtMmxKRWtkIGZhZGVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwic2Nyb2xsZXIgc2Nyb2xsZXItMkZLRlBHXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJlbW90ZS1tZW51LWlubmVyXCI+XHJcblxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgbWFrZUVtb3RlID0gKGVtb3RlLCB1cmwsIG9wdGlvbnMgPSB7fSkgPT4ge1xyXG4gICAgY29uc3Qge29uQ29udGV4dE1lbnUsIG9uQ2xpY2t9ID0gb3B0aW9ucztcclxuICAgIGNvbnN0IGVtb3RlQ29udGFpbmVyID0gJChgPGRpdiBjbGFzcz1cImVtb3RlLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbWcgY2xhc3M9XCJlbW90ZS1pY29uXCIgYWx0PVwiJHtlbW90ZX1cIiBzcmM9XCIke3VybH1cIiB0aXRsZT1cIiR7ZW1vdGV9XCI+XHJcbiAgICA8L2Rpdj5gKVswXTtcclxuICAgIGlmIChvbkNvbnRleHRNZW51KSBlbW90ZUNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgb25Db250ZXh0TWVudSk7XHJcbiAgICBlbW90ZUNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgb25DbGljayk7XHJcbiAgICByZXR1cm4gZW1vdGVDb250YWluZXI7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vdGVNZW51IGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZU1lbnVcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJlbW90ZU1lbnVcIjt9XHJcbiAgICBnZXQgaGlkZUVtb2ppc0lEKCkge3JldHVybiBcImhpZGVFbW9qaU1lbnVcIjt9XHJcbiAgICBnZXQgaGlkZUVtb2ppcygpIHtyZXR1cm4gdGhpcy5nZXQodGhpcy5oaWRlRW1vamlzSUQpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubGFzdFRhYiA9IFwiYmRhLXFlbS1lbW9qaXNcIjtcclxuICAgICAgICB0aGlzLmZhdm9yaXRlRW1vdGVzID0ge307XHJcblxyXG4gICAgICAgIHRoaXMucW1lSGVhZGVyID0gJChoZWFkZXJIVE1MKVswXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvbiBvZiB0aGlzLnFtZUhlYWRlci5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJ1dHRvblwiKSkgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCB0aGlzLnN3aXRjaE1lbnUuYmluZCh0aGlzKSk7XHJcblxyXG4gICAgICAgIHRoaXMudGVDb250YWluZXIgPSAkKHR3aXRjaEVtb3RlSFRNTClbMF07XHJcbiAgICAgICAgdGhpcy50ZUNvbnRhaW5lcklubmVyID0gdGhpcy50ZUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmVtb3RlLW1lbnUtaW5uZXJcIik7XHJcblxyXG4gICAgICAgIHRoaXMuZmFDb250YWluZXIgPSAkKGZhdm9yaXRlc0hUTUwpWzBdO1xyXG4gICAgICAgIHRoaXMuZmFDb250YWluZXJJbm5lciA9IHRoaXMuZmFDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbW90ZS1tZW51LWlubmVyXCIpO1xyXG5cclxuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIobXV0YXRpb25zID0+IHtmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykgdGhpcy5vYnNlcnZlKG11dGF0aW9uKTt9KTtcclxuICAgICAgICB0aGlzLmVuYWJsZUhpZGVFbW9qaXMgPSB0aGlzLmVuYWJsZUhpZGVFbW9qaXMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVIaWRlRW1vamlzID0gdGhpcy5kaXNhYmxlSGlkZUVtb2ppcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzID0gdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICBjb25zdCBmZSA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJiZGZhdmVtb3Rlc1wiKTtcclxuICAgICAgICBpZiAoZmUgIT09IFwiXCIgJiYgZmUgIT09IG51bGwpIHRoaXMuZmF2b3JpdGVFbW90ZXMgPSBKU09OLnBhcnNlKGF0b2IoZmUpKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJTdGFydGluZyB0byBvYnNlcnZlXCIpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcC1tb3VudFwiKSwge1xyXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmhpZGVFbW9qaUNhbmNlbCA9IHRoaXMucmVnaXN0ZXJTZXR0aW5nKHRoaXMuaGlkZUVtb2ppc0lELCB0aGlzLmVuYWJsZUhpZGVFbW9qaXMsIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVFbW9qaXMpIHRoaXMuZW5hYmxlSGlkZUVtb2ppcygpO1xyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMud2FpdEZvckVtb3RlcygpO1xyXG4gICAgICAgIC8vIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKCk7XHJcbiAgICAgICAgaWYgKFN0YXRlLmVtb3Rlc0xvYWRlZCkgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMoKTtcclxuICAgICAgICBFdmVudHMub24oXCJlbW90ZXMtbG9hZGVkXCIsIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBFdmVudHMub2ZmKFwiZW1vdGVzLWxvYWRlZFwiLCB0aGlzLnVwZGF0ZVR3aXRjaEVtb3Rlcyk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5kaXNjb25uZWN0KCk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVFbW9qaUNhbmNlbCkgdGhpcy5oaWRlRW1vamlDYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB3YWl0Rm9yRW1vdGVzKCkge1xyXG4gICAgICAgIGlmIChTdGF0ZS5lbW90ZXNMb2FkZWQpIHJldHVybjtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIEV2ZW50cy5vbihcImVtb3Rlcy1sb2FkZWRcIiwgcmVzb2x2ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlSGlkZUVtb2ppcygpIHtcclxuICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5hZGRDbGFzcyhcImJkYS1xbWUtaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVIaWRlRW1vamlzKCkge1xyXG4gICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnJlbW92ZUNsYXNzKFwiYmRhLXFtZS1oaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0RW1vdGUoZW1vdGUpIHtcclxuICAgICAgICBjb25zdCB0YSA9IFV0aWxpdGllcy5nZXRUZXh0QXJlYSgpO1xyXG4gICAgICAgIFV0aWxpdGllcy5pbnNlcnRUZXh0KHRhWzBdLCB0YS52YWwoKS5zbGljZSgtMSkgPT0gXCIgXCIgPyB0YS52YWwoKSArIGVtb3RlIDogdGEudmFsKCkgKyBcIiBcIiArIGVtb3RlKTtcclxuICAgIH1cclxuXHJcbiAgICBmYXZDb250ZXh0KGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IGVtID0gZS50YXJnZXQuY2xvc2VzdChcIi5lbW90ZS1jb250YWluZXJcIikuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgY29uc3QgbWVudSA9ICQoYDxkaXYgaWQ9XCJyZW1vdmVtZW51XCIgY2xhc3M9XCJiZC1jb250ZXh0LW1lbnUgY29udGV4dC1tZW51IHRoZW1lLWRhcmtcIj5SZW1vdmU8L2Rpdj5gKTtcclxuICAgICAgICBtZW51LmNzcyh7XHJcbiAgICAgICAgICAgIHRvcDogZS5wYWdlWSAtICQoXCIjYmRhLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLm9mZnNldCgpLnRvcCxcclxuICAgICAgICAgICAgbGVmdDogZS5wYWdlWCAtICQoXCIjYmRhLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLm9mZnNldCgpLmxlZnRcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGVtKS5wYXJlbnQoKS5hcHBlbmQobWVudSk7XHJcbiAgICAgICAgbWVudS5vbihcImNsaWNrXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgJChlbSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZhdm9yaXRlRW1vdGVzWyQoZW0pLmF0dHIoXCJ0aXRsZVwiKV07XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJtb3VzZWRvd24uZW1vdGVtZW51XCIsIGZ1bmN0aW9uKGUpIHtcclxuICAgICAgICAgICAgaWYgKGUudGFyZ2V0LmlkID09IFwicmVtb3ZlbWVudVwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICQoXCIjcmVtb3ZlbWVudVwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwibW91c2Vkb3duLmVtb3RlbWVudVwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzd2l0Y2hNZW51KGUpIHtcclxuICAgICAgICBsZXQgaWQgPSB0eXBlb2YoZSkgPT0gXCJzdHJpbmdcIiA/IGUgOiAkKGUudGFyZ2V0KS5hdHRyKFwiaWRcIik7XHJcbiAgICAgICAgaWYgKGlkID09IFwiYmRhLXFlbS1lbW9qaXNcIiAmJiB0aGlzLmhpZGVFbW9qaXMpIGlkID0gXCJiZGEtcWVtLWZhdm91cml0ZVwiO1xyXG4gICAgICAgIGNvbnN0IHR3aXRjaCA9ICQoXCIjYmRhLXFlbS10d2l0Y2hcIik7XHJcbiAgICAgICAgY29uc3QgZmF2ID0gJChcIiNiZGEtcWVtLWZhdm91cml0ZVwiKTtcclxuICAgICAgICBjb25zdCBlbW9qaXMgPSAkKFwiI2JkYS1xZW0tZW1vamlzXCIpO1xyXG4gICAgICAgIHR3aXRjaC5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICBmYXYucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgZW1vamlzLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG5cclxuICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5oaWRlKCk7XHJcbiAgICAgICAgJChcIiNiZGEtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikuaGlkZSgpO1xyXG4gICAgICAgICQoXCIjYmRhLXFlbS10d2l0Y2gtY29udGFpbmVyXCIpLmhpZGUoKTtcclxuXHJcbiAgICAgICAgc3dpdGNoIChpZCkge1xyXG4gICAgICAgICAgICBjYXNlIFwiYmRhLXFlbS10d2l0Y2hcIjpcclxuICAgICAgICAgICAgICAgIHR3aXRjaC5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICQoXCIjYmRhLXFlbS10d2l0Y2gtY29udGFpbmVyXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYmRhLXFlbS1mYXZvdXJpdGVcIjpcclxuICAgICAgICAgICAgICAgIGZhdi5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICQoXCIjYmRhLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiYmRhLXFlbS1lbW9qaXNcIjpcclxuICAgICAgICAgICAgICAgIGVtb2ppcy5hZGRDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICAgICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qIGlucHV0XCIpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGlkKSB0aGlzLmxhc3RUYWIgPSBpZDtcclxuICAgIH1cclxuXHJcbiAgICBvYnNlcnZlKG11dGF0aW9uKSB7XHJcbiAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xyXG4gICAgICAgIGlmICghbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJwb3BvdXQtM3NWTVh6XCIpIHx8IG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwicG9wb3V0TGVmdC0zMFdtckRcIikgfHwgIW5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImVtb2ppUGlja2VyLTNtMVMtalwiKS5sZW5ndGgpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgZSA9ICQobm9kZSk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppcykgZS5hZGRDbGFzcyhcImJkYS1xbWUtaGlkZGVuXCIpO1xyXG4gICAgICAgIGVsc2UgZS5yZW1vdmVDbGFzcyhcImJkYS1xbWUtaGlkZGVuXCIpO1xyXG5cclxuICAgICAgICBlLnByZXBlbmQodGhpcy5xbWVIZWFkZXIpO1xyXG4gICAgICAgIGUuYXBwZW5kKHRoaXMudGVDb250YWluZXIpO1xyXG4gICAgICAgIGUuYXBwZW5kKHRoaXMuZmFDb250YWluZXIpO1xyXG5cclxuICAgICAgICB0aGlzLnN3aXRjaE1lbnUodGhpcy5sYXN0VGFiKTtcclxuICAgIH1cclxuXHJcbiAgICBmYXZvcml0ZShuYW1lLCB1cmwpIHtcclxuICAgICAgICBpZiAoIXRoaXMuZmF2b3JpdGVFbW90ZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHRoaXMuZmF2b3JpdGVFbW90ZXNbbmFtZV0gPSB1cmw7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVUd2l0Y2hFbW90ZXMoKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMudGVDb250YWluZXJJbm5lci5maXJzdENoaWxkKSB0aGlzLnRlQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZC5yZW1vdmUoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIEVtb3Rlcy5Ud2l0Y2hHbG9iYWwpIHtcclxuICAgICAgICAgICAgaWYgKCFFbW90ZXMuVHdpdGNoR2xvYmFsLmhhc093blByb3BlcnR5KGVtb3RlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IEVtb3Rlcy5Ud2l0Y2hHbG9iYWxbZW1vdGVdO1xyXG4gICAgICAgICAgICBjb25zdCBlbW90ZUVsZW1lbnQgPSBtYWtlRW1vdGUoZW1vdGUsIHVybCwge29uQ2xpY2s6IHRoaXMuaW5zZXJ0RW1vdGUuYmluZCh0aGlzLCBlbW90ZSl9KTtcclxuICAgICAgICAgICAgdGhpcy50ZUNvbnRhaW5lcklubmVyLmFwcGVuZChlbW90ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVGYXZvcml0ZXMoKSB7XHJcbiAgICAgICAgd2hpbGUgKHRoaXMuZmFDb250YWluZXJJbm5lci5maXJzdENoaWxkKSB0aGlzLmZhQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZC5yZW1vdmUoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIHRoaXMuZmF2b3JpdGVFbW90ZXMpIHtcclxuICAgICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5mYXZvcml0ZUVtb3Rlc1tlbW90ZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGVtb3RlRWxlbWVudCA9IG1ha2VFbW90ZShlbW90ZSwgdXJsLCB7b25DbGljazogdGhpcy5pbnNlcnRFbW90ZS5iaW5kKHRoaXMsIGVtb3RlKSwgb25Db250ZXh0TWVudTogdGhpcy5mYXZDb250ZXh0LmJpbmQodGhpcyl9KTtcclxuICAgICAgICAgICAgdGhpcy5mYUNvbnRhaW5lcklubmVyLmFwcGVuZChlbW90ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiYmRmYXZlbW90ZXNcIiwgYnRvYShKU09OLnN0cmluZ2lmeSh0aGlzLmZhdm9yaXRlRW1vdGVzKSkpO1xyXG4gICAgfVxyXG5cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/emotemenu.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes.js\");\n\n\n\n\nconst headerHTML = `
\n \n \n
`;\nconst twitchEmoteHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\nconst favoritesHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\n\nconst makeEmote = (emote, url, options = {}) => {\n const {\n onContextMenu,\n onClick\n } = options;\n const emoteContainer = $(`
\n \"${emote}\"\n
`)[0];\n if (onContextMenu) emoteContainer.addEventListener(\"contextmenu\", onContextMenu);\n emoteContainer.addEventListener(\"click\", onClick);\n return emoteContainer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteMenu\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emoteMenu\";\n }\n\n get hideEmojisID() {\n return \"hideEmojiMenu\";\n }\n\n get hideEmojis() {\n return this.get(this.hideEmojisID);\n }\n\n constructor() {\n super();\n this.lastTab = \"bda-qem-emojis\";\n this.favoriteEmotes = {};\n this.qmeHeader = $(headerHTML)[0];\n\n for (const button of this.qmeHeader.getElementsByTagName(\"button\")) button.addEventListener(\"click\", this.switchMenu.bind(this));\n\n this.teContainer = $(twitchEmoteHTML)[0];\n this.teContainerInner = this.teContainer.querySelector(\".emote-menu-inner\");\n this.faContainer = $(favoritesHTML)[0];\n this.faContainerInner = this.faContainer.querySelector(\".emote-menu-inner\");\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) this.observe(mutation);\n });\n this.enableHideEmojis = this.enableHideEmojis.bind(this);\n this.disableHideEmojis = this.disableHideEmojis.bind(this);\n this.updateTwitchEmotes = this.updateTwitchEmotes.bind(this);\n }\n\n initialize() {\n super.initialize();\n const fe = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"bdfavemotes\");\n if (fe !== \"\" && fe !== null) this.favoriteEmotes = JSON.parse(atob(fe));\n this.updateFavorites();\n }\n\n async enabled() {\n this.log(\"Starting to observe\");\n this.observer.observe(document.getElementById(\"app-mount\"), {\n childList: true,\n subtree: true\n });\n this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis);\n if (this.hideEmojis) this.enableHideEmojis(); // await this.waitForEmotes();\n // this.updateTwitchEmotes();\n\n if (data__WEBPACK_IMPORTED_MODULE_1__[\"State\"].emotesLoaded) this.updateTwitchEmotes();\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"emotes-loaded\", this.updateTwitchEmotes);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].off(\"emotes-loaded\", this.updateTwitchEmotes);\n this.observer.disconnect();\n this.disableHideEmojis();\n if (this.hideEmojiCancel) this.hideEmojiCancel();\n }\n\n async waitForEmotes() {\n if (data__WEBPACK_IMPORTED_MODULE_1__[\"State\"].emotesLoaded) return;\n return new Promise(resolve => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].on(\"emotes-loaded\", resolve);\n });\n }\n\n enableHideEmojis() {\n $(\".emojiPicker-3m1S-j\").addClass(\"bda-qme-hidden\");\n }\n\n disableHideEmojis() {\n $(\".emojiPicker-3m1S-j\").removeClass(\"bda-qme-hidden\");\n }\n\n insertEmote(emote) {\n const ta = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].getTextArea();\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].insertText(ta[0], ta.val().slice(-1) == \" \" ? ta.val() + emote : ta.val() + \" \" + emote);\n }\n\n favContext(e) {\n e.stopPropagation();\n const em = e.target.closest(\".emote-container\").children[0];\n const menu = $(`
Remove
`);\n menu.css({\n top: e.pageY - $(\"#bda-qem-favourite-container\").offset().top,\n left: e.pageX - $(\"#bda-qem-favourite-container\").offset().left\n });\n $(em).parent().append(menu);\n menu.on(\"click\", e => {\n e.preventDefault();\n e.stopPropagation();\n $(em).remove();\n delete this.favoriteEmotes[$(em).attr(\"title\")];\n this.updateFavorites();\n $(document).off(\"mousedown.emotemenu\");\n });\n $(document).on(\"mousedown.emotemenu\", function (e) {\n if (e.target.id == \"removemenu\") return;\n $(\"#removemenu\").remove();\n $(document).off(\"mousedown.emotemenu\");\n });\n }\n\n switchMenu(e) {\n let id = typeof e == \"string\" ? e : $(e.target).attr(\"id\");\n if (id == \"bda-qem-emojis\" && this.hideEmojis) id = \"bda-qem-favourite\";\n const twitch = $(\"#bda-qem-twitch\");\n const fav = $(\"#bda-qem-favourite\");\n const emojis = $(\"#bda-qem-emojis\");\n twitch.removeClass(\"active\");\n fav.removeClass(\"active\");\n emojis.removeClass(\"active\");\n $(\".emojiPicker-3m1S-j\").hide();\n $(\"#bda-qem-favourite-container\").hide();\n $(\"#bda-qem-twitch-container\").hide();\n\n switch (id) {\n case \"bda-qem-twitch\":\n twitch.addClass(\"active\");\n $(\"#bda-qem-twitch-container\").show();\n break;\n\n case \"bda-qem-favourite\":\n fav.addClass(\"active\");\n $(\"#bda-qem-favourite-container\").show();\n break;\n\n case \"bda-qem-emojis\":\n emojis.addClass(\"active\");\n $(\".emojiPicker-3m1S-j\").show();\n $(\".emojiPicker-3m1S-j input\").focus();\n break;\n }\n\n if (id) this.lastTab = id;\n }\n\n observe(mutation) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return;\n const node = mutation.addedNodes[0];\n if (!node.classList.contains(\"popout-3sVMXz\") || node.classList.contains(\"popoutLeft-30WmrD\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length) return;\n const e = $(node);\n if (this.hideEmojis) e.addClass(\"bda-qme-hidden\");else e.removeClass(\"bda-qme-hidden\");\n e.prepend(this.qmeHeader);\n e.append(this.teContainer);\n e.append(this.faContainer);\n this.switchMenu(this.lastTab);\n }\n\n favorite(name, url) {\n if (!this.favoriteEmotes.hasOwnProperty(name)) this.favoriteEmotes[name] = url;\n this.updateFavorites();\n }\n\n updateTwitchEmotes() {\n while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCategory(\"TwitchGlobal\")) {\n if (!_emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCategory(\"TwitchGlobal\").hasOwnProperty(emote)) continue;\n const url = _emotes__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getCategory(\"TwitchGlobal\")[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote)\n });\n this.teContainerInner.append(emoteElement);\n }\n }\n\n updateFavorites() {\n while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove();\n\n for (const emote in this.favoriteEmotes) {\n const url = this.favoriteEmotes[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote),\n onContextMenu: this.favContext.bind(this)\n });\n this.faContainerInner.append(emoteElement);\n }\n\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"bdfavemotes\", btoa(JSON.stringify(this.favoriteEmotes)));\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcz8yYWNlIl0sIm5hbWVzIjpbImhlYWRlckhUTUwiLCJ0d2l0Y2hFbW90ZUhUTUwiLCJmYXZvcml0ZXNIVE1MIiwibWFrZUVtb3RlIiwiZW1vdGUiLCJ1cmwiLCJvcHRpb25zIiwib25Db250ZXh0TWVudSIsIm9uQ2xpY2siLCJlbW90ZUNvbnRhaW5lciIsIiQiLCJhZGRFdmVudExpc3RlbmVyIiwiRW1vdGVNZW51IiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImhpZGVFbW9qaXNJRCIsImhpZGVFbW9qaXMiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImxhc3RUYWIiLCJmYXZvcml0ZUVtb3RlcyIsInFtZUhlYWRlciIsImJ1dHRvbiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3dpdGNoTWVudSIsImJpbmQiLCJ0ZUNvbnRhaW5lciIsInRlQ29udGFpbmVySW5uZXIiLCJxdWVyeVNlbGVjdG9yIiwiZmFDb250YWluZXIiLCJmYUNvbnRhaW5lcklubmVyIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibXV0YXRpb24iLCJvYnNlcnZlIiwiZW5hYmxlSGlkZUVtb2ppcyIsImRpc2FibGVIaWRlRW1vamlzIiwidXBkYXRlVHdpdGNoRW1vdGVzIiwiaW5pdGlhbGl6ZSIsImZlIiwiRGF0YVN0b3JlIiwiZ2V0QkREYXRhIiwiSlNPTiIsInBhcnNlIiwiYXRvYiIsInVwZGF0ZUZhdm9yaXRlcyIsImVuYWJsZWQiLCJsb2ciLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImhpZGVFbW9qaUNhbmNlbCIsInJlZ2lzdGVyU2V0dGluZyIsIlN0YXRlIiwiZW1vdGVzTG9hZGVkIiwiRXZlbnRzIiwib24iLCJkaXNhYmxlZCIsIm9mZiIsImRpc2Nvbm5lY3QiLCJ3YWl0Rm9yRW1vdGVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiaW5zZXJ0RW1vdGUiLCJ0YSIsIlV0aWxpdGllcyIsImdldFRleHRBcmVhIiwiaW5zZXJ0VGV4dCIsInZhbCIsInNsaWNlIiwiZmF2Q29udGV4dCIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJlbSIsInRhcmdldCIsImNsb3Nlc3QiLCJjaGlsZHJlbiIsIm1lbnUiLCJjc3MiLCJ0b3AiLCJwYWdlWSIsIm9mZnNldCIsImxlZnQiLCJwYWdlWCIsInBhcmVudCIsImFwcGVuZCIsInByZXZlbnREZWZhdWx0IiwicmVtb3ZlIiwiYXR0ciIsInR3aXRjaCIsImZhdiIsImVtb2ppcyIsImhpZGUiLCJzaG93IiwiZm9jdXMiLCJhZGRlZE5vZGVzIiwibGVuZ3RoIiwiRWxlbWVudCIsIm5vZGUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJwcmVwZW5kIiwiZmF2b3JpdGUiLCJoYXNPd25Qcm9wZXJ0eSIsImZpcnN0Q2hpbGQiLCJFbW90ZU1vZHVsZSIsImdldENhdGVnb3J5IiwiZW1vdGVFbGVtZW50Iiwic2V0QkREYXRhIiwiYnRvYSIsInN0cmluZ2lmeSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBO0FBRUEsTUFBTUEsVUFBVSxHQUFJOzs7O09BQXBCO0FBTUEsTUFBTUMsZUFBZSxHQUFJOzs7Ozs7OztPQUF6QjtBQVVBLE1BQU1DLGFBQWEsR0FBSTs7Ozs7Ozs7T0FBdkI7O0FBVUEsTUFBTUMsU0FBUyxHQUFHLENBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFhQyxPQUFPLEdBQUcsRUFBdkIsS0FBOEI7QUFDNUMsUUFBTTtBQUFDQyxpQkFBRDtBQUFnQkM7QUFBaEIsTUFBMkJGLE9BQWpDO0FBQ0EsUUFBTUcsY0FBYyxHQUFHQyxDQUFDLENBQUU7dUNBQ1NOLEtBQU0sVUFBU0MsR0FBSSxZQUFXRCxLQUFNO1dBRC9DLENB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Qzs7QUFDekMsU0FBSyxNQUFNMUYsS0FBWCxJQUFvQixLQUFLbUIsY0FBekIsRUFBeUM7QUFDckMsWUFBTWxCLEdBQUcsR0FBRyxLQUFLa0IsY0FBTCxDQUFvQm5CLEtBQXBCLENBQVo7QUFDQSxZQUFNK0csWUFBWSxHQUFHaEgsU0FBUyxDQUFDQyxLQUFELEVBQVFDLEdBQVIsRUFBYTtBQUFDRyxlQUFPLEVBQUUsS0FBSzhELFdBQUwsQ0FBaUIxQyxJQUFqQixDQUFzQixJQUF0QixFQUE0QnhCLEtBQTVCLENBQVY7QUFBOENHLHFCQUFhLEVBQUUsS0FBS3NFLFVBQUwsQ0FBZ0JqRCxJQUFoQixDQUFxQixJQUFyQjtBQUE3RCxPQUFiLENBQTlCO0FBQ0EsV0FBS0ssZ0JBQUwsQ0FBc0IyRCxNQUF0QixDQUE2QnVCLFlBQTdCO0FBQ0g7O0FBQ0R2RSxxREFBUyxDQUFDd0UsU0FBVixDQUFvQixhQUFwQixFQUFtQ0MsSUFBSSxDQUFDdkUsSUFBSSxDQUFDd0UsU0FBTCxDQUFlLEtBQUsvRixjQUFwQixDQUFELENBQXZDO0FBQ0g7O0FBM0s4QyxDQUFwQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtTdGF0ZX0gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IHtEYXRhU3RvcmUsIFV0aWxpdGllcywgRXZlbnRzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG5cclxuY29uc3QgaGVhZGVySFRNTCA9IGA8ZGl2IGlkPVwiYmRhLXFlbVwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImFjdGl2ZVwiIGlkPVwiYmRhLXFlbS10d2l0Y2hcIj5Ud2l0Y2g8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJiZGEtcWVtLWZhdm91cml0ZVwiPkZhdm91cml0ZTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImJkYS1xZW0tZW1vamlzXCI+RW1vamlzPC9idXR0b25kPlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgdHdpdGNoRW1vdGVIVE1MID0gYDxkaXYgaWQ9XCJiZGEtcWVtLXR3aXRjaC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIHNjcm9sbGVyV3JhcC0ybEpFa2QgZmFkZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlciBzY3JvbGxlci0yRktGUEdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtb3RlLW1lbnUtaW5uZXJcIj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmA7XHJcblxyXG5jb25zdCBmYXZvcml0ZXNIVE1MID0gYDxkaXYgaWQ9XCJiZGEtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIHNjcm9sbGVyV3JhcC0ybEpFa2QgZmFkZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlciBzY3JvbGxlci0yRktGUEdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtb3RlLW1lbnUtaW5uZXJcIj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmA7XHJcblxyXG5jb25zdCBtYWtlRW1vdGUgPSAoZW1vdGUsIHVybCwgb3B0aW9ucyA9IHt9KSA9PiB7XHJcbiAgICBjb25zdCB7b25Db250ZXh0TWVudSwgb25DbGlja30gPSBvcHRpb25zO1xyXG4gICAgY29uc3QgZW1vdGVDb250YWluZXIgPSAkKGA8ZGl2IGNsYXNzPVwiZW1vdGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGltZyBjbGFzcz1cImVtb3RlLWljb25cIiBhbHQ9XCIke2Vtb3RlfVwiIHNyYz1cIiR7dXJsfVwiIHRpdGxlPVwiJHtlbW90ZX1cIj5cclxuICAgIDwvZGl2PmApWzBdO1xyXG4gICAgaWYgKG9uQ29udGV4dE1lbnUpIGVtb3RlQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCBvbkNvbnRleHRNZW51KTtcclxuICAgIGVtb3RlQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcclxuICAgIHJldHVybiBlbW90ZUNvbnRhaW5lcjtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW90ZU1lbnUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkVtb3RlTWVudVwiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcImVtb3Rlc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImVtb3RlTWVudVwiO31cclxuICAgIGdldCBoaWRlRW1vamlzSUQoKSB7cmV0dXJuIFwiaGlkZUVtb2ppTWVudVwiO31cclxuICAgIGdldCBoaWRlRW1vamlzKCkge3JldHVybiB0aGlzLmdldCh0aGlzLmhpZGVFbW9qaXNJRCk7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5sYXN0VGFiID0gXCJiZGEtcWVtLWVtb2ppc1wiO1xyXG4gICAgICAgIHRoaXMuZmF2b3JpdGVFbW90ZXMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5xbWVIZWFkZXIgPSAkKGhlYWRlckhUTUwpWzBdO1xyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHRoaXMucW1lSGVhZGVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpKSBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuc3dpdGNoTWVudS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZUNvbnRhaW5lciA9ICQodHdpdGNoRW1vdGVIVE1MKVswXTtcclxuICAgICAgICB0aGlzLnRlQ29udGFpbmVySW5uZXIgPSB0aGlzLnRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vdGUtbWVudS1pbm5lclwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5mYUNvbnRhaW5lciA9ICQoZmF2b3JpdGVzSFRNTClbMF07XHJcbiAgICAgICAgdGhpcy5mYUNvbnRhaW5lcklubmVyID0gdGhpcy5mYUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmVtb3RlLW1lbnUtaW5uZXJcIik7XHJcblxyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4ge2ZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB0aGlzLm9ic2VydmUobXV0YXRpb24pO30pO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlSGlkZUVtb2ppcyA9IHRoaXMuZW5hYmxlSGlkZUVtb2ppcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMgPSB0aGlzLmRpc2FibGVIaWRlRW1vamlzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMgPSB0aGlzLnVwZGF0ZVR3aXRjaEVtb3Rlcy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgIGNvbnN0IGZlID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkZmF2ZW1vdGVzXCIpO1xyXG4gICAgICAgIGlmIChmZSAhPT0gXCJcIiAmJiBmZSAhPT0gbnVsbCkgdGhpcy5mYXZvcml0ZUVtb3RlcyA9IEpTT04ucGFyc2UoYXRvYihmZSkpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICB0aGlzLmxvZyhcIlN0YXJ0aW5nIHRvIG9ic2VydmVcIik7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYXBwLW1vdW50XCIpLCB7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaGlkZUVtb2ppQ2FuY2VsID0gdGhpcy5yZWdpc3RlclNldHRpbmcodGhpcy5oaWRlRW1vamlzSUQsIHRoaXMuZW5hYmxlSGlkZUVtb2ppcywgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcyk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppcykgdGhpcy5lbmFibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy53YWl0Rm9yRW1vdGVzKCk7XHJcbiAgICAgICAgLy8gdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMoKTtcclxuICAgICAgICBpZiAoU3RhdGUuZW1vdGVzTG9hZGVkKSB0aGlzLnVwZGF0ZVR3aXRjaEVtb3RlcygpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcImVtb3Rlcy1sb2FkZWRcIiwgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIEV2ZW50cy5vZmYoXCJlbW90ZXMtbG9hZGVkXCIsIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppQ2FuY2VsKSB0aGlzLmhpZGVFbW9qaUNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRGb3JFbW90ZXMoKSB7XHJcbiAgICAgICAgaWYgKFN0YXRlLmVtb3Rlc0xvYWRlZCkgcmV0dXJuO1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgRXZlbnRzLm9uKFwiZW1vdGVzLWxvYWRlZFwiLCByZXNvbHZlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVIaWRlRW1vamlzKCkge1xyXG4gICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLmFkZENsYXNzKFwiYmRhLXFtZS1oaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUhpZGVFbW9qaXMoKSB7XHJcbiAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikucmVtb3ZlQ2xhc3MoXCJiZGEtcW1lLWhpZGRlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRFbW90ZShlbW90ZSkge1xyXG4gICAgICAgIGNvbnN0IHRhID0gVXRpbGl0aWVzLmdldFRleHRBcmVhKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLmluc2VydFRleHQodGFbMF0sIHRhLnZhbCgpLnNsaWNlKC0xKSA9PSBcIiBcIiA/IHRhLnZhbCgpICsgZW1vdGUgOiB0YS52YWwoKSArIFwiIFwiICsgZW1vdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGZhdkNvbnRleHQoZSkge1xyXG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgY29uc3QgZW0gPSBlLnRhcmdldC5jbG9zZXN0KFwiLmVtb3RlLWNvbnRhaW5lclwiKS5jaGlsZHJlblswXTtcclxuICAgICAgICBjb25zdCBtZW51ID0gJChgPGRpdiBpZD1cInJlbW92ZW1lbnVcIiBjbGFzcz1cImJkLWNvbnRleHQtbWVudSBjb250ZXh0LW1lbnUgdGhlbWUtZGFya1wiPlJlbW92ZTwvZGl2PmApO1xyXG4gICAgICAgIG1lbnUuY3NzKHtcclxuICAgICAgICAgICAgdG9wOiBlLnBhZ2VZIC0gJChcIiNiZGEtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikub2Zmc2V0KCkudG9wLFxyXG4gICAgICAgICAgICBsZWZ0OiBlLnBhZ2VYIC0gJChcIiNiZGEtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikub2Zmc2V0KCkubGVmdFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoZW0pLnBhcmVudCgpLmFwcGVuZChtZW51KTtcclxuICAgICAgICBtZW51Lm9uKFwiY2xpY2tcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAkKGVtKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZmF2b3JpdGVFbW90ZXNbJChlbSkuYXR0cihcInRpdGxlXCIpXTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXMoKTtcclxuICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwibW91c2Vkb3duLmVtb3RlbWVudVwiKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGRvY3VtZW50KS5vbihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIiwgZnVuY3Rpb24oZSkge1xyXG4gICAgICAgICAgICBpZiAoZS50YXJnZXQuaWQgPT0gXCJyZW1vdmVtZW51XCIpIHJldHVybjtcclxuICAgICAgICAgICAgJChcIiNyZW1vdmVtZW51XCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJtb3VzZWRvd24uZW1vdGVtZW51XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaE1lbnUoZSkge1xyXG4gICAgICAgIGxldCBpZCA9IHR5cGVvZihlKSA9PSBcInN0cmluZ1wiID8gZSA6ICQoZS50YXJnZXQpLmF0dHIoXCJpZFwiKTtcclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtcWVtLWVtb2ppc1wiICYmIHRoaXMuaGlkZUVtb2ppcykgaWQgPSBcImJkYS1xZW0tZmF2b3VyaXRlXCI7XHJcbiAgICAgICAgY29uc3QgdHdpdGNoID0gJChcIiNiZGEtcWVtLXR3aXRjaFwiKTtcclxuICAgICAgICBjb25zdCBmYXYgPSAkKFwiI2JkYS1xZW0tZmF2b3VyaXRlXCIpO1xyXG4gICAgICAgIGNvbnN0IGVtb2ppcyA9ICQoXCIjYmRhLXFlbS1lbW9qaXNcIik7XHJcbiAgICAgICAgdHdpdGNoLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGZhdi5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICBlbW9qaXMucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkYS1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5oaWRlKCk7XHJcbiAgICAgICAgJChcIiNiZGEtcWVtLXR3aXRjaC1jb250YWluZXJcIikuaGlkZSgpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZGEtcWVtLXR3aXRjaFwiOlxyXG4gICAgICAgICAgICAgICAgdHdpdGNoLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNiZGEtcWVtLXR3aXRjaC1jb250YWluZXJcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZGEtcWVtLWZhdm91cml0ZVwiOlxyXG4gICAgICAgICAgICAgICAgZmF2LmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNiZGEtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZGEtcWVtLWVtb2ppc1wiOlxyXG4gICAgICAgICAgICAgICAgZW1vamlzLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWogaW5wdXRcIikuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQpIHRoaXMubGFzdFRhYiA9IGlkO1xyXG4gICAgfVxyXG5cclxuICAgIG9ic2VydmUobXV0YXRpb24pIHtcclxuICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcbiAgICAgICAgaWYgKCFub2RlLmNsYXNzTGlzdC5jb250YWlucyhcInBvcG91dC0zc1ZNWHpcIikgfHwgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJwb3BvdXRMZWZ0LTMwV21yRFwiKSB8fCAhbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBlID0gJChub2RlKTtcclxuICAgICAgICBpZiAodGhpcy5oaWRlRW1vamlzKSBlLmFkZENsYXNzKFwiYmRhLXFtZS1oaWRkZW5cIik7XHJcbiAgICAgICAgZWxzZSBlLnJlbW92ZUNsYXNzKFwiYmRhLXFtZS1oaWRkZW5cIik7XHJcblxyXG4gICAgICAgIGUucHJlcGVuZCh0aGlzLnFtZUhlYWRlcik7XHJcbiAgICAgICAgZS5hcHBlbmQodGhpcy50ZUNvbnRhaW5lcik7XHJcbiAgICAgICAgZS5hcHBlbmQodGhpcy5mYUNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIHRoaXMuc3dpdGNoTWVudSh0aGlzLmxhc3RUYWIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZhdm9yaXRlKG5hbWUsIHVybCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mYXZvcml0ZUVtb3Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgdGhpcy5mYXZvcml0ZUVtb3Rlc1tuYW1lXSA9IHVybDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVR3aXRjaEVtb3RlcygpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy50ZUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQpIHRoaXMudGVDb250YWluZXJJbm5lci5maXJzdENoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gRW1vdGVNb2R1bGUuZ2V0Q2F0ZWdvcnkoXCJUd2l0Y2hHbG9iYWxcIikpIHtcclxuICAgICAgICAgICAgaWYgKCFFbW90ZU1vZHVsZS5nZXRDYXRlZ29yeShcIlR3aXRjaEdsb2JhbFwiKS5oYXNPd25Qcm9wZXJ0eShlbW90ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBFbW90ZU1vZHVsZS5nZXRDYXRlZ29yeShcIlR3aXRjaEdsb2JhbFwiKVtlbW90ZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGVtb3RlRWxlbWVudCA9IG1ha2VFbW90ZShlbW90ZSwgdXJsLCB7b25DbGljazogdGhpcy5pbnNlcnRFbW90ZS5iaW5kKHRoaXMsIGVtb3RlKX0pO1xyXG4gICAgICAgICAgICB0aGlzLnRlQ29udGFpbmVySW5uZXIuYXBwZW5kKGVtb3RlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUZhdm9yaXRlcygpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5mYUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQpIHRoaXMuZmFDb250YWluZXJJbm5lci5maXJzdENoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gdGhpcy5mYXZvcml0ZUVtb3Rlcykge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmZhdm9yaXRlRW1vdGVzW2Vtb3RlXTtcclxuICAgICAgICAgICAgY29uc3QgZW1vdGVFbGVtZW50ID0gbWFrZUVtb3RlKGVtb3RlLCB1cmwsIHtvbkNsaWNrOiB0aGlzLmluc2VydEVtb3RlLmJpbmQodGhpcywgZW1vdGUpLCBvbkNvbnRleHRNZW51OiB0aGlzLmZhdkNvbnRleHQuYmluZCh0aGlzKX0pO1xyXG4gICAgICAgICAgICB0aGlzLmZhQ29udGFpbmVySW5uZXIuYXBwZW5kKGVtb3RlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGZhdmVtb3Rlc1wiLCBidG9hKEpTT04uc3RyaW5naWZ5KHRoaXMuZmF2b3JpdGVFbW90ZXMpKSk7XHJcbiAgICB9XHJcblxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/emotemenu.js\n"); /***/ }), @@ -191,7 +191,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_emote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/emote */ \"./src/ui/emote.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\n\n\nconst bdEmoteSettingIDs = {\n TwitchGlobal: \"twitch\",\n TwitchSubscriber: \"twitch\",\n BTTV: \"bttv\",\n FrankerFaceZ: \"ffz\",\n BTTV2: \"bttv\"\n};\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteModule extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Emotes\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emotes\";\n }\n\n get categories() {\n return Object.keys(bdEmoteSettingIDs).filter(k => this.isCategoryEnabled(bdEmoteSettingIDs[k]));\n }\n\n get MessageContentComponent() {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n }\n\n isCategoryEnabled(id) {\n return super.get(\"emotes\", \"categories\", id);\n }\n\n get(id) {\n return super.get(\"emotes\", \"general\", id);\n }\n\n async enabled() {// Disable emote module for now because it's annoying and slow\n // await this.getBlacklist();\n // await this.loadEmoteData(EmoteInfo);\n // while (!this.MessageContentComponent) await new Promise(resolve => setTimeout(resolve, 100));\n // this.patchMessageContent();\n }\n\n disabled() {\n this.emptyEmotes();\n if (this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n delete this.cancelEmoteRender;\n }\n\n emptyEmotes() {\n for (const cat in data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"]) Object.assign(data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"], {\n [cat]: {}\n });\n }\n\n patchMessageContent() {\n if (this.cancelEmoteRender) return;\n this.cancelEmoteRender = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].monkeyPatch(this.MessageContentComponent.prototype, \"render\", {\n after: ({\n returnValue\n }) => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].monkeyPatch(returnValue.props, \"children\", {\n silent: true,\n after: ({\n returnValue\n }) => {\n if (this.categories.length == 0) return;\n const markup = returnValue.props.children[1];\n if (!markup.props.children) return;\n const nodes = markup.props.children[1];\n if (!nodes || !nodes.length) return;\n\n for (let n = 0; n < nodes.length; n++) {\n const node = nodes[n];\n if (typeof node !== \"string\") continue;\n const words = node.split(/([^\\s]+)([\\s]|$)/g);\n\n for (let c = 0, clen = this.categories.length; c < clen; c++) {\n for (let w = 0, wlen = words.length; w < wlen; w++) {\n const emote = words[w];\n const emoteSplit = emote.split(\":\");\n const emoteName = emoteSplit[0];\n let emoteModifier = emoteSplit[1] ? emoteSplit[1] : \"\";\n let emoteOverride = emoteModifier.slice(0);\n if (emoteName.length < 4 || data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteBlacklist\"].includes(emoteName)) continue;\n if (!data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteModifiers\"].includes(emoteModifier) || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"general\", \"modifiers\")) emoteModifier = \"\";\n if (!data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteOverrides\"].includes(emoteOverride)) emoteOverride = \"\";else emoteModifier = emoteOverride;\n let current = this.categories[c];\n\n if (emoteOverride === \"twitch\") {\n if (data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].TwitchGlobal[emoteName]) current = \"TwitchGlobal\";else if (data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].TwitchSubscriber[emoteName]) current = \"TwitchSubscriber\";\n } else if (emoteOverride === \"bttv\") {\n if (data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].BTTV[emoteName]) current = \"BTTV\";else if (data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].BTTV2[emoteName]) current = \"BTTV2\";\n } else if (emoteOverride === \"ffz\") {\n if (data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"].FrankerFaceZ[emoteName]) current = \"FrankerFaceZ\";\n }\n\n if (!data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"][current][emoteName] || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"categories\", bdEmoteSettingIDs[current])) continue;\n const results = nodes[n].match(new RegExp(`([\\\\s]|^)${modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].escape(emoteModifier ? emoteName + \":\" + emoteModifier : emoteName)}([\\\\s]|$)`));\n if (!results) continue;\n const pre = nodes[n].substring(0, results.index + results[1].length);\n const post = nodes[n].substring(results.index + results[0].length - results[2].length);\n nodes[n] = pre;\n const emoteComponent = modules__WEBPACK_IMPORTED_MODULE_2__[\"DiscordModules\"].React.createElement(_ui_emote__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: emoteName,\n url: data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"][current][emoteName],\n modifier: emoteModifier\n });\n nodes.splice(n + 1, 0, post);\n nodes.splice(n + 1, 0, emoteComponent);\n }\n }\n }\n\n const onlyEmotes = nodes.every(r => {\n if (typeof r == \"string\" && r.replace(/\\s*/, \"\") == \"\") return true;else if (r.type && r.type.name == \"BDEmote\") return true;else if (r.props && r.props.children && r.props.children.props && r.props.children.props.emojiName) return true;\n return false;\n });\n if (!onlyEmotes) return;\n\n for (const node of nodes) {\n if (typeof node != \"object\") continue;\n if (node.type.name == \"BDEmote\") node.props.jumboable = true;else if (node.props && node.props.children && node.props.children.props && node.props.children.props.emojiName) node.props.children.props.jumboable = true;\n }\n }\n });\n }\n });\n }\n\n async loadEmoteData(emoteInfo) {\n const _fs = __webpack_require__(/*! fs */ \"fs\");\n\n const emoteFile = \"emote_data.json\";\n const file = data__WEBPACK_IMPORTED_MODULE_1__[\"Config\"].dataPath + emoteFile;\n\n const exists = _fs.existsSync(file);\n\n if (exists && this.isCacheValid()) {\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Loading emotes from cache.\", {\n type: \"info\"\n });\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Loading emotes from local cache.\");\n const data = await new Promise(resolve => {\n _fs.readFile(file, \"utf8\", (err, data) => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Emotes loaded from cache.\");\n if (err) data = {};\n resolve(data);\n });\n });\n let isValid = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].testJSON(data);\n if (isValid) Object.assign(data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"], JSON.parse(data));\n\n for (const e in emoteInfo) {\n isValid = Object.keys(data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"][emoteInfo[e].variable]).length > 0;\n }\n\n if (isValid) {\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Emotes successfully loaded.\", {\n type: \"success\"\n });\n data__WEBPACK_IMPORTED_MODULE_1__[\"State\"].emotesLoaded = true;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].dispatch(\"emotes-loaded\");\n return;\n }\n\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Cache was corrupt, downloading...\");\n\n _fs.unlinkSync(file);\n }\n\n if (!modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"general\", \"download\")) return;\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Downloading emotes in the background do not reload.\", {\n type: \"info\"\n });\n\n for (const e in emoteInfo) {\n await new Promise(r => setTimeout(r, 1000));\n const data = await this.downloadEmotes(emoteInfo[e]);\n data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"][emoteInfo[e].variable] = data;\n }\n\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"All emotes successfully downloaded.\", {\n type: \"success\"\n });\n\n try {\n _fs.writeFileSync(file, JSON.stringify(data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"]), \"utf8\");\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not save emote data.\", err);\n }\n\n data__WEBPACK_IMPORTED_MODULE_1__[\"State\"].emotesLoaded = true;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].dispatch(\"emotes-loaded\");\n }\n\n downloadEmotes(emoteMeta) {\n const request = __webpack_require__(/*! request */ \"request\");\n\n const options = {\n url: emoteMeta.url,\n timeout: emoteMeta.timeout ? emoteMeta.timeout : 5000\n };\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", `Downloading: ${emoteMeta.variable} (${emoteMeta.url})`);\n return new Promise((resolve, reject) => {\n request(options, (error, response, body) => {\n if (error) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not download \" + emoteMeta.variable, error);\n\n if (emoteMeta.backup) {\n emoteMeta.url = emoteMeta.backup;\n emoteMeta.backup = null;\n if (emoteMeta.backupParser) emoteMeta.parser = emoteMeta.backupParser;\n return resolve(this.downloadEmotes(emoteMeta));\n }\n\n return reject({});\n }\n\n let parsedData = {};\n\n try {\n parsedData = JSON.parse(body);\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not download \" + emoteMeta.variable, err);\n\n if (emoteMeta.backup) {\n emoteMeta.url = emoteMeta.backup;\n emoteMeta.backup = null;\n if (emoteMeta.backupParser) emoteMeta.parser = emoteMeta.backupParser;\n return resolve(this.downloadEmotes(emoteMeta));\n }\n\n return reject({});\n }\n\n if (typeof emoteMeta.parser === \"function\") parsedData = emoteMeta.parser(parsedData);\n\n for (const emote in parsedData) {\n if (emote.length < 4 || data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteBlacklist\"].includes(emote)) {\n delete parsedData[emote];\n continue;\n }\n\n parsedData[emote] = emoteMeta.getEmoteURL(parsedData[emote]);\n }\n\n resolve(parsedData);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Downloaded: \" + emoteMeta.variable);\n });\n });\n }\n\n getBlacklist() {\n return new Promise(resolve => {\n $.getJSON(`https://rauenzi.github.io/BetterDiscordApp/data/emotefilter.json`, function (data) {\n resolve(data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteBlacklist\"].push(...data.blacklist));\n });\n });\n }\n\n isCacheValid() {\n const cacheLength = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDays\") || modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDays\", 7) || 7;\n const cacheDate = new Date(modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDate\") || null);\n const currentDate = new Date();\n const daysBetween = Math.round(Math.abs((currentDate.getTime() - cacheDate.getTime()) / (24 * 60 * 60 * 1000)));\n\n if (daysBetween > cacheLength) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", currentDate.toJSON());\n return false;\n }\n\n return true;\n }\n\n clearEmoteData() {\n const _fs = __webpack_require__(/*! fs */ \"fs\");\n\n const emoteFile = \"emote_data.json\";\n const file = data__WEBPACK_IMPORTED_MODULE_1__[\"Config\"].dataPath + emoteFile;\n\n const exists = _fs.existsSync(file);\n\n if (exists) _fs.unlinkSync(file);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", new Date().toJSON());\n\n for (const category in data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"]) Object.assign(data__WEBPACK_IMPORTED_MODULE_1__[\"Emotes\"], {\n [category]: {}\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbImJkRW1vdGVTZXR0aW5nSURzIiwiVHdpdGNoR2xvYmFsIiwiVHdpdGNoU3Vic2NyaWJlciIsIkJUVFYiLCJGcmFua2VyRmFjZVoiLCJCVFRWMiIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldCIsImVuYWJsZWQiLCJkaXNhYmxlZCIsImVtcHR5RW1vdGVzIiwiY2FuY2VsRW1vdGVSZW5kZXIiLCJjYXQiLCJFbW90ZXMiLCJhc3NpZ24iLCJwYXRjaE1lc3NhZ2VDb250ZW50IiwiVXRpbGl0aWVzIiwibW9ua2V5UGF0Y2giLCJwcm90b3R5cGUiLCJhZnRlciIsInJldHVyblZhbHVlIiwicHJvcHMiLCJzaWxlbnQiLCJsZW5ndGgiLCJtYXJrdXAiLCJjaGlsZHJlbiIsIm5vZGVzIiwibiIsIm5vZGUiLCJ3b3JkcyIsInNwbGl0IiwiYyIsImNsZW4iLCJ3Iiwid2xlbiIsImVtb3RlIiwiZW1vdGVTcGxpdCIsImVtb3RlTmFtZSIsImVtb3RlTW9kaWZpZXIiLCJlbW90ZU92ZXJyaWRlIiwic2xpY2UiLCJFbW90ZUJsYWNrbGlzdCIsImluY2x1ZGVzIiwiRW1vdGVNb2RpZmllcnMiLCJTZXR0aW5ncyIsIkVtb3RlT3ZlcnJpZGVzIiwiY3VycmVudCIsInJlc3VsdHMiLCJtYXRjaCIsIlJlZ0V4cCIsImVzY2FwZSIsInByZSIsInN1YnN0cmluZyIsImluZGV4IiwicG9zdCIsImVtb3RlQ29tcG9uZW50IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJCREVtb3RlIiwidXJsIiwibW9kaWZpZXIiLCJzcGxpY2UiLCJvbmx5RW1vdGVzIiwiZXZlcnkiLCJyIiwicmVwbGFjZSIsInR5cGUiLCJlbW9qaU5hbWUiLCJqdW1ib2FibGUiLCJsb2FkRW1vdGVEYXRhIiwiZW1vdGVJbmZvIiwiX2ZzIiwicmVxdWlyZSIsImVtb3RlRmlsZSIsImZpbGUiLCJDb25maWciLCJkYXRhUGF0aCIsImV4aXN0cyIsImV4aXN0c1N5bmMiLCJpc0NhY2hlVmFsaWQiLCJUb2FzdHMiLCJzaG93IiwibG9nIiwiZGF0YSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVhZEZpbGUiLCJlcnIiLCJpc1ZhbGlkIiwidGVzdEpTT04iLCJKU09OIiwicGFyc2UiLCJlIiwidmFyaWFibGUiLCJTdGF0ZSIsImVtb3Rlc0xvYWRlZCIsIkV2ZW50cyIsImRpc3BhdGNoIiwidW5saW5rU3luYyIsInNldFRpbWVvdXQiLCJkb3dubG9hZEVtb3RlcyIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJlbW90ZU1ldGEiLCJyZXF1ZXN0Iiwib3B0aW9ucyIsInRpbWVvdXQiLCJyZWplY3QiLCJlcnJvciIsInJlc3BvbnNlIiwiYm9keSIsImJhY2t1cCIsImJhY2t1cFBhcnNlciIsInBhcnNlciIsInBhcnNlZERhdGEiLCJnZXRFbW90ZVVSTCIsImdldEJsYWNrbGlzdCIsIiQiLCJnZXRKU09OIiwicHVzaCIsImJsYWNrbGlzdCIsImNhY2hlTGVuZ3RoIiwiRGF0YVN0b3JlIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwiY2FjaGVEYXRlIiwiRGF0ZSIsImN1cnJlbnREYXRlIiwiZGF5c0JldHdlZW4iLCJNYXRoIiwicm91bmQiLCJhYnMiLCJnZXRUaW1lIiwidG9KU09OIiwiY2xlYXJFbW90ZURhdGEiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFN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R0FBTCxDQUFTLENBQUNKLFdBQVcsQ0FBQ0ssT0FBWixLQUF3QlAsU0FBUyxDQUFDTyxPQUFWLEVBQXpCLEtBQWlELEtBQUssRUFBTCxHQUFVLEVBQVYsR0FBZSxJQUFoRSxDQUFULENBQVgsQ0FBcEI7O0FBQ0EsUUFBSUosV0FBVyxHQUFHUCxXQUFsQixFQUErQjtBQUMzQkMsdURBQVMsQ0FBQ0UsU0FBVixDQUFvQixnQkFBcEIsRUFBc0NHLFdBQVcsQ0FBQ00sTUFBWixFQUF0QztBQUNBLGFBQU8sS0FBUDtBQUNIOztBQUNELFdBQU8sSUFBUDtBQUNIOztBQUVEQyxnQkFBYyxHQUFHO0FBQ2IsVUFBTS9ELEdBQUcsR0FBR0MsbUJBQU8sQ0FBQyxjQUFELENBQW5COztBQUNBLFVBQU1DLFNBQVMsR0FBRyxpQkFBbEI7QUFDQSxVQUFNQyxJQUFJLEdBQUdDLDJDQUFNLENBQUNDLFFBQVAsR0FBa0JILFNBQS9COztBQUNBLFVBQU1JLE1BQU0sR0FBR04sR0FBRyxDQUFDTyxVQUFKLENBQWVKLElBQWYsQ0FBZjs7QUFDQSxRQUFJRyxNQUFKLEVBQVlOLEdBQUcsQ0FBQzJCLFVBQUosQ0FBZXhCLElBQWY7QUFDWmdELHFEQUFTLENBQUNFLFNBQVYsQ0FBb0IsZ0JBQXBCLEVBQXVDLElBQUlFLElBQUosRUFBRCxDQUFhTyxNQUFiLEVBQXRDOztBQUNBLFNBQUssTUFBTTdJLFFBQVgsSUFBdUJvQiwyQ0FBdkIsRUFBK0JqQixNQUFNLENBQUNrQixNQUFQLENBQWNELDJDQUFkLEVBQXNCO0FBQUMsT0FBQ3BCLFFBQUQsR0FBWTtBQUFiLEtBQXRCO0FBQ2xDOztBQTlPZ0QsQ0FBdEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9lbW90ZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcblxyXG5pbXBvcnQge0NvbmZpZywgRW1vdGVzLCBFbW90ZUJsYWNrbGlzdCwgRW1vdGVJbmZvLCBFbW90ZU1vZGlmaWVycywgRW1vdGVPdmVycmlkZXMsIFN0YXRlfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1V0aWxpdGllcywgV2VicGFja01vZHVsZXMsIERhdGFTdG9yZSwgRGlzY29yZE1vZHVsZXMsIEV2ZW50cywgU2V0dGluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBCREVtb3RlIGZyb20gXCIuLi91aS9lbW90ZVwiO1xyXG5pbXBvcnQge1RvYXN0c30gZnJvbSBcInVpXCI7XHJcblxyXG5jb25zdCBiZEVtb3RlU2V0dGluZ0lEcyA9IHtcclxuICAgIFR3aXRjaEdsb2JhbDogXCJ0d2l0Y2hcIixcclxuICAgIFR3aXRjaFN1YnNjcmliZXI6IFwidHdpdGNoXCIsXHJcbiAgICBCVFRWOiBcImJ0dHZcIixcclxuICAgIEZyYW5rZXJGYWNlWjogXCJmZnpcIixcclxuICAgIEJUVFYyOiBcImJ0dHZcIlxyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlTW9kdWxlIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJFbW90ZXNcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJzZXR0aW5nc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImVtb3Rlc1wiO31cclxuICAgIGdldCBjYXRlZ29yaWVzKCkgeyByZXR1cm4gT2JqZWN0LmtleXMoYmRFbW90ZVNldHRpbmdJRHMpLmZpbHRlcihrID0+IHRoaXMuaXNDYXRlZ29yeUVuYWJsZWQoYmRFbW90ZVNldHRpbmdJRHNba10pKTsgfVxyXG5cclxuICAgIGdldCBNZXNzYWdlQ29udGVudENvbXBvbmVudCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlQnV0dG9uc1wiKSk7fVxyXG5cclxuICAgIGlzQ2F0ZWdvcnlFbmFibGVkKGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldChcImVtb3Rlc1wiLCBcImNhdGVnb3JpZXNcIiwgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChpZCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXQoXCJlbW90ZXNcIiwgXCJnZW5lcmFsXCIsIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbmFibGVkKCkge1xyXG4gICAgICAgIC8vIERpc2FibGUgZW1vdGUgbW9kdWxlIGZvciBub3cgYmVjYXVzZSBpdCdzIGFubm95aW5nIGFuZCBzbG93XHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5nZXRCbGFja2xpc3QoKTtcclxuICAgICAgICAvLyBhd2FpdCB0aGlzLmxvYWRFbW90ZURhdGEoRW1vdGVJbmZvKTtcclxuXHJcbiAgICAgICAgLy8gd2hpbGUgKCF0aGlzLk1lc3NhZ2VDb250ZW50Q29tcG9uZW50KSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwKSk7XHJcbiAgICAgICAgLy8gdGhpcy5wYXRjaE1lc3NhZ2VDb250ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5lbXB0eUVtb3RlcygpO1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcigpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGVtcHR5RW1vdGVzKCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgY2F0IGluIEVtb3RlcykgT2JqZWN0LmFzc2lnbihFbW90ZXMsIHtbY2F0XToge319KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaE1lc3NhZ2VDb250ZW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxFbW90ZVJlbmRlciA9IFV0aWxpdGllcy5tb25rZXlQYXRjaCh0aGlzLk1lc3NhZ2VDb250ZW50Q29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoe3JldHVyblZhbHVlfSkgPT4ge1xyXG4gICAgICAgICAgICBVdGlsaXRpZXMubW9ua2V5UGF0Y2gocmV0dXJuVmFsdWUucHJvcHMsIFwiY2hpbGRyZW5cIiwge3NpbGVudDogdHJ1ZSwgYWZ0ZXI6ICh7cmV0dXJuVmFsdWV9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrdXAgPSByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXTtcclxuICAgICAgICAgICAgICAgIGlmICghbWFya3VwLnByb3BzLmNoaWxkcmVuKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IG1hcmt1cC5wcm9wcy5jaGlsZHJlblsxXTtcclxuICAgICAgICAgICAgICAgIGlmICghbm9kZXMgfHwgIW5vZGVzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoLyhbXlxcc10rKShbXFxzXXwkKS9nKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IHRoaXMuY2F0ZWdvcmllcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdyA9IDAsIHdsZW4gPSB3b3Jkcy5sZW5ndGg7IHcgPCB3bGVuOyB3KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlID0gd29yZHNbd107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZVNwbGl0ID0gZW1vdGUuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGVOYW1lID0gZW1vdGVTcGxpdFswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbW90ZU1vZGlmaWVyID0gZW1vdGVTcGxpdFsxXSA/IGVtb3RlU3BsaXRbMV0gOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVtb3RlT3ZlcnJpZGUgPSBlbW90ZU1vZGlmaWVyLnNsaWNlKDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU5hbWUubGVuZ3RoIDwgNCB8fCBFbW90ZUJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZU5hbWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRW1vdGVNb2RpZmllcnMuaW5jbHVkZXMoZW1vdGVNb2RpZmllcikgfHwgIVNldHRpbmdzLmdldCh0aGlzLmNhdGVnb3J5LCBcImdlbmVyYWxcIiwgXCJtb2RpZmllcnNcIikpIGVtb3RlTW9kaWZpZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFFbW90ZU92ZXJyaWRlcy5pbmNsdWRlcyhlbW90ZU92ZXJyaWRlKSkgZW1vdGVPdmVycmlkZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGVtb3RlTW9kaWZpZXIgPSBlbW90ZU92ZXJyaWRlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5jYXRlZ29yaWVzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwidHdpdGNoXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLlR3aXRjaEdsb2JhbFtlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJUd2l0Y2hHbG9iYWxcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChFbW90ZXMuVHdpdGNoU3Vic2NyaWJlcltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJUd2l0Y2hTdWJzY3JpYmVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbW90ZU92ZXJyaWRlID09PSBcImJ0dHZcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuQlRUVltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJCVFRWXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRW1vdGVzLkJUVFYyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkJUVFYyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbW90ZU92ZXJyaWRlID09PSBcImZmelwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5GcmFua2VyRmFjZVpbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiRnJhbmtlckZhY2VaXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFFbW90ZXNbY3VycmVudF1bZW1vdGVOYW1lXSB8fCAhU2V0dGluZ3MuZ2V0KHRoaXMuY2F0ZWdvcnksIFwiY2F0ZWdvcmllc1wiLCBiZEVtb3RlU2V0dGluZ0lEc1tjdXJyZW50XSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5vZGVzW25dLm1hdGNoKG5ldyBSZWdFeHAoYChbXFxcXHNdfF4pJHtVdGlsaXRpZXMuZXNjYXBlKGVtb3RlTW9kaWZpZXIgPyBlbW90ZU5hbWUgKyBcIjpcIiArIGVtb3RlTW9kaWZpZXIgOiBlbW90ZU5hbWUpfShbXFxcXHNdfCQpYCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZSA9IG5vZGVzW25dLnN1YnN0cmluZygwLCByZXN1bHRzLmluZGV4ICsgcmVzdWx0c1sxXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zdCA9IG5vZGVzW25dLnN1YnN0cmluZyhyZXN1bHRzLmluZGV4ICsgcmVzdWx0c1swXS5sZW5ndGggLSByZXN1bHRzWzJdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1tuXSA9IHByZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlQ29tcG9uZW50ID0gRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChCREVtb3RlLCB7bmFtZTogZW1vdGVOYW1lLCB1cmw6IEVtb3Rlc1tjdXJyZW50XVtlbW90ZU5hbWVdLCBtb2RpZmllcjogZW1vdGVNb2RpZmllcn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKG4gKyAxLCAwLCBwb3N0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShuICsgMSwgMCwgZW1vdGVDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seUVtb3RlcyA9IG5vZGVzLmV2ZXJ5KHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YocikgPT0gXCJzdHJpbmdcIiAmJiByLnJlcGxhY2UoL1xccyovLCBcIlwiKSA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyLnR5cGUgJiYgci50eXBlLm5hbWUgPT0gXCJCREVtb3RlXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIucHJvcHMgJiYgci5wcm9wcy5jaGlsZHJlbiAmJiByLnByb3BzLmNoaWxkcmVuLnByb3BzICYmIHIucHJvcHMuY2hpbGRyZW4ucHJvcHMuZW1vamlOYW1lKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghb25seUVtb3RlcykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT0gXCJvYmplY3RcIikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudHlwZS5uYW1lID09IFwiQkRFbW90ZVwiKSBub2RlLnByb3BzLmp1bWJvYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5wcm9wcyAmJiBub2RlLnByb3BzLmNoaWxkcmVuICYmIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMgJiYgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcy5lbW9qaU5hbWUpIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMuanVtYm9hYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkRW1vdGVEYXRhKGVtb3RlSW5mbykge1xyXG4gICAgICAgIGNvbnN0IF9mcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgICAgICBjb25zdCBlbW90ZUZpbGUgPSBcImVtb3RlX2RhdGEuanNvblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBDb25maWcuZGF0YVBhdGggKyBlbW90ZUZpbGU7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gX2ZzLmV4aXN0c1N5bmMoZmlsZSk7XHJcblxyXG4gICAgICAgIGlmIChleGlzdHMgJiYgdGhpcy5pc0NhY2hlVmFsaWQoKSkge1xyXG4gICAgICAgICAgICBUb2FzdHMuc2hvdyhcIkxvYWRpbmcgZW1vdGVzIGZyb20gY2FjaGUuXCIsIHt0eXBlOiBcImluZm9cIn0pO1xyXG4gICAgICAgICAgICBVdGlsaXRpZXMubG9nKFwiRW1vdGVzXCIsIFwiTG9hZGluZyBlbW90ZXMgZnJvbSBsb2NhbCBjYWNoZS5cIik7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfZnMucmVhZEZpbGUoZmlsZSwgXCJ1dGY4XCIsIChlcnIsIGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBVdGlsaXRpZXMubG9nKFwiRW1vdGVzXCIsIFwiRW1vdGVzIGxvYWRlZCBmcm9tIGNhY2hlLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSBkYXRhID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gVXRpbGl0aWVzLnRlc3RKU09OKGRhdGEpO1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCkgT2JqZWN0LmFzc2lnbihFbW90ZXMsIEpTT04ucGFyc2UoZGF0YSkpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChjb25zdCBlIGluIGVtb3RlSW5mbykge1xyXG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IE9iamVjdC5rZXlzKEVtb3Rlc1tlbW90ZUluZm9bZV0udmFyaWFibGVdKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICAgICAgICAgICAgVG9hc3RzLnNob3coXCJFbW90ZXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICAgICAgICAgICAgICBTdGF0ZS5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgRXZlbnRzLmRpc3BhdGNoKFwiZW1vdGVzLWxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBcIkNhY2hlIHdhcyBjb3JydXB0LCBkb3dubG9hZGluZy4uLlwiKTtcclxuICAgICAgICAgICAgX2ZzLnVubGlua1N5bmMoZmlsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIVNldHRpbmdzLmdldCh0aGlzLmNhdGVnb3J5LCBcImdlbmVyYWxcIiwgXCJkb3dubG9hZFwiKSkgcmV0dXJuO1xyXG4gICAgICAgIFRvYXN0cy5zaG93KFwiRG93bmxvYWRpbmcgZW1vdGVzIGluIHRoZSBiYWNrZ3JvdW5kIGRvIG5vdCByZWxvYWQuXCIsIHt0eXBlOiBcImluZm9cIn0pO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGUgaW4gZW1vdGVJbmZvKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMDAwKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRvd25sb2FkRW1vdGVzKGVtb3RlSW5mb1tlXSk7XHJcbiAgICAgICAgICAgIEVtb3Rlc1tlbW90ZUluZm9bZV0udmFyaWFibGVdID0gZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFRvYXN0cy5zaG93KFwiQWxsIGVtb3RlcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZC5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcblxyXG4gICAgICAgIHRyeSB7IF9mcy53cml0ZUZpbGVTeW5jKGZpbGUsIEpTT04uc3RyaW5naWZ5KEVtb3RlcyksIFwidXRmOFwiKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbGl0aWVzLmVycihcIkVtb3Rlc1wiLCBcIkNvdWxkIG5vdCBzYXZlIGVtb3RlIGRhdGEuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgU3RhdGUuZW1vdGVzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBFdmVudHMuZGlzcGF0Y2goXCJlbW90ZXMtbG9hZGVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRvd25sb2FkRW1vdGVzKGVtb3RlTWV0YSkge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKFwicmVxdWVzdFwiKTtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICB1cmw6IGVtb3RlTWV0YS51cmwsXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IGVtb3RlTWV0YS50aW1lb3V0ID8gZW1vdGVNZXRhLnRpbWVvdXQgOiA1MDAwXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBgRG93bmxvYWRpbmc6ICR7ZW1vdGVNZXRhLnZhcmlhYmxlfSAoJHtlbW90ZU1ldGEudXJsfSlgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBVdGlsaXRpZXMuZXJyKFwiRW1vdGVzXCIsIFwiQ291bGQgbm90IGRvd25sb2FkIFwiICsgZW1vdGVNZXRhLnZhcmlhYmxlLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTWV0YS5iYWNrdXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vdGVNZXRhLnVybCA9IGVtb3RlTWV0YS5iYWNrdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb3RlTWV0YS5iYWNrdXAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVNZXRhLmJhY2t1cFBhcnNlcikgZW1vdGVNZXRhLnBhcnNlciA9IGVtb3RlTWV0YS5iYWNrdXBQYXJzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuZG93bmxvYWRFbW90ZXMoZW1vdGVNZXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwYXJzZWREYXRhID0ge307XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxpdGllcy5lcnIoXCJFbW90ZXNcIiwgXCJDb3VsZCBub3QgZG93bmxvYWQgXCIgKyBlbW90ZU1ldGEudmFyaWFibGUsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTWV0YS5iYWNrdXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vdGVNZXRhLnVybCA9IGVtb3RlTWV0YS5iYWNrdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb3RlTWV0YS5iYWNrdXAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVNZXRhLmJhY2t1cFBhcnNlcikgZW1vdGVNZXRhLnBhcnNlciA9IGVtb3RlTWV0YS5iYWNrdXBQYXJzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuZG93bmxvYWRFbW90ZXMoZW1vdGVNZXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlbW90ZU1ldGEucGFyc2VyKSA9PT0gXCJmdW5jdGlvblwiKSBwYXJzZWREYXRhID0gZW1vdGVNZXRhLnBhcnNlcihwYXJzZWREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIHBhcnNlZERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGUubGVuZ3RoIDwgNCB8fCBFbW90ZUJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFbZW1vdGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YVtlbW90ZV0gPSBlbW90ZU1ldGEuZ2V0RW1vdGVVUkwocGFyc2VkRGF0YVtlbW90ZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwYXJzZWREYXRhKTtcclxuICAgICAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJEb3dubG9hZGVkOiBcIiArIGVtb3RlTWV0YS52YXJpYWJsZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJsYWNrbGlzdCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICQuZ2V0SlNPTihgaHR0cHM6Ly9yYXVlbnppLmdpdGh1Yi5pby9CZXR0ZXJEaXNjb3JkQXBwL2RhdGEvZW1vdGVmaWx0ZXIuanNvbmAsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKEVtb3RlQmxhY2tsaXN0LnB1c2goLi4uZGF0YS5ibGFja2xpc3QpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNDYWNoZVZhbGlkKCkge1xyXG4gICAgICAgIGNvbnN0IGNhY2hlTGVuZ3RoID0gRGF0YVN0b3JlLmdldEJERGF0YShcImVtb3RlQ2FjaGVEYXlzXCIpIHx8IERhdGFTdG9yZS5zZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF5c1wiLCA3KSB8fCA3O1xyXG4gICAgICAgIGNvbnN0IGNhY2hlRGF0ZSA9IG5ldyBEYXRlKERhdGFTdG9yZS5nZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF0ZVwiKSB8fCBudWxsKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgZGF5c0JldHdlZW4gPSBNYXRoLnJvdW5kKE1hdGguYWJzKChjdXJyZW50RGF0ZS5nZXRUaW1lKCkgLSBjYWNoZURhdGUuZ2V0VGltZSgpKSAvICgyNCAqIDYwICogNjAgKiAxMDAwKSkpO1xyXG4gICAgICAgIGlmIChkYXlzQmV0d2VlbiA+IGNhY2hlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF0ZVwiLCBjdXJyZW50RGF0ZS50b0pTT04oKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJFbW90ZURhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgX2ZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgICAgIGNvbnN0IGVtb3RlRmlsZSA9IFwiZW1vdGVfZGF0YS5qc29uXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IENvbmZpZy5kYXRhUGF0aCArIGVtb3RlRmlsZTtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSBfZnMuZXhpc3RzU3luYyhmaWxlKTtcclxuICAgICAgICBpZiAoZXhpc3RzKSBfZnMudW5saW5rU3luYyhmaWxlKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiZW1vdGVDYWNoZURhdGVcIiwgKG5ldyBEYXRlKCkpLnRvSlNPTigpKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IGluIEVtb3RlcykgT2JqZWN0LmFzc2lnbihFbW90ZXMsIHtbY2F0ZWdvcnldOiB7fX0pO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/emotes.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_emote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/emote */ \"./src/ui/emote.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\n\n\nconst Emotes = {\n TwitchGlobal: {},\n TwitchSubscriber: {},\n BTTV: {},\n FrankerFaceZ: {},\n BTTV2: {}\n};\nconst bdEmoteSettingIDs = {\n TwitchGlobal: \"twitch\",\n TwitchSubscriber: \"twitch\",\n BTTV: \"bttv\",\n FrankerFaceZ: \"ffz\",\n BTTV2: \"bttv\"\n};\nconst blacklist = [];\nconst overrides = [\"twitch\", \"bttv\", \"ffz\"];\nconst modifiers = [\"flip\", \"spin\", \"pulse\", \"spin2\", \"spin3\", \"1spin\", \"2spin\", \"3spin\", \"tr\", \"bl\", \"br\", \"shake\", \"shake2\", \"shake3\", \"flap\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteModule extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Emotes\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emotes\";\n }\n\n get categories() {\n return Object.keys(bdEmoteSettingIDs).filter(k => this.isCategoryEnabled(bdEmoteSettingIDs[k]));\n }\n\n isCategoryEnabled(id) {\n return super.get(\"emotes\", \"categories\", id);\n }\n\n get(id) {\n return super.get(\"emotes\", \"general\", id);\n }\n\n get MessageContentComponent() {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n }\n\n get Emotes() {\n return Emotes;\n }\n\n get TwitchGlobal() {\n return Emotes.TwitchGlobal;\n }\n\n get TwitchSubscriber() {\n return Emotes.TwitchSubscriber;\n }\n\n get BTTV() {\n return Emotes.BTTV;\n }\n\n get FrankerFaceZ() {\n return Emotes.FrankerFaceZ;\n }\n\n get BTTV2() {\n return Emotes.BTTV2;\n }\n\n get blacklist() {\n return blacklist;\n }\n\n getCategory(category) {\n return Emotes[category];\n }\n\n initialize() {\n super.initialize(); // EmoteConfig;\n // emoteCollection.button = {title: \"Clear Emote Cache\", onClick: () => { this.clearEmoteData(); this.loadEmoteData(EmoteInfo); }};\n }\n\n async enabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].registerCollection(\"emotes\", \"Emotes\", data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteConfig\"], {\n title: \"Clear Emote Cache\",\n onClick: () => {\n this.clearEmoteData();\n this.loadEmoteData(data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteInfo\"]);\n }\n }); // Disable emote module for now because it's annoying and slow\n // await this.getBlacklist();\n // await this.loadEmoteData(EmoteInfo);\n // while (!this.MessageContentComponent) await new Promise(resolve => setTimeout(resolve, 100));\n // this.patchMessageContent();\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].removeCollection(\"emotes\");\n this.emptyEmotes();\n if (!this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n delete this.cancelEmoteRender;\n }\n\n emptyEmotes() {\n for (const cat in Emotes) Object.assign(Emotes, {\n [cat]: {}\n });\n }\n\n patchMessageContent() {\n if (this.cancelEmoteRender) return;\n this.cancelEmoteRender = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].monkeyPatch(this.MessageContentComponent.prototype, \"render\", {\n after: ({\n returnValue\n }) => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].monkeyPatch(returnValue.props, \"children\", {\n silent: true,\n after: ({\n returnValue\n }) => {\n if (this.categories.length == 0) return;\n const markup = returnValue.props.children[1];\n if (!markup.props.children) return;\n const nodes = markup.props.children[1];\n if (!nodes || !nodes.length) return;\n\n for (let n = 0; n < nodes.length; n++) {\n const node = nodes[n];\n if (typeof node !== \"string\") continue;\n const words = node.split(/([^\\s]+)([\\s]|$)/g);\n\n for (let c = 0, clen = this.categories.length; c < clen; c++) {\n for (let w = 0, wlen = words.length; w < wlen; w++) {\n const emote = words[w];\n const emoteSplit = emote.split(\":\");\n const emoteName = emoteSplit[0];\n let emoteModifier = emoteSplit[1] ? emoteSplit[1] : \"\";\n let emoteOverride = emoteModifier.slice(0);\n if (emoteName.length < 4 || blacklist.includes(emoteName)) continue;\n if (!modifiers.includes(emoteModifier) || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"general\", \"modifiers\")) emoteModifier = \"\";\n if (!overrides.includes(emoteOverride)) emoteOverride = \"\";else emoteModifier = emoteOverride;\n let current = this.categories[c];\n\n if (emoteOverride === \"twitch\") {\n if (Emotes.TwitchGlobal[emoteName]) current = \"TwitchGlobal\";else if (Emotes.TwitchSubscriber[emoteName]) current = \"TwitchSubscriber\";\n } else if (emoteOverride === \"bttv\") {\n if (Emotes.BTTV[emoteName]) current = \"BTTV\";else if (Emotes.BTTV2[emoteName]) current = \"BTTV2\";\n } else if (emoteOverride === \"ffz\") {\n if (Emotes.FrankerFaceZ[emoteName]) current = \"FrankerFaceZ\";\n }\n\n if (!Emotes[current][emoteName] || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"categories\", bdEmoteSettingIDs[current])) continue;\n const results = nodes[n].match(new RegExp(`([\\\\s]|^)${modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].escape(emoteModifier ? emoteName + \":\" + emoteModifier : emoteName)}([\\\\s]|$)`));\n if (!results) continue;\n const pre = nodes[n].substring(0, results.index + results[1].length);\n const post = nodes[n].substring(results.index + results[0].length - results[2].length);\n nodes[n] = pre;\n const emoteComponent = modules__WEBPACK_IMPORTED_MODULE_2__[\"DiscordModules\"].React.createElement(_ui_emote__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: emoteName,\n url: Emotes[current][emoteName],\n modifier: emoteModifier\n });\n nodes.splice(n + 1, 0, post);\n nodes.splice(n + 1, 0, emoteComponent);\n }\n }\n }\n\n const onlyEmotes = nodes.every(r => {\n if (typeof r == \"string\" && r.replace(/\\s*/, \"\") == \"\") return true;else if (r.type && r.type.name == \"BDEmote\") return true;else if (r.props && r.props.children && r.props.children.props && r.props.children.props.emojiName) return true;\n return false;\n });\n if (!onlyEmotes) return;\n\n for (const node of nodes) {\n if (typeof node != \"object\") continue;\n if (node.type.name == \"BDEmote\") node.props.jumboable = true;else if (node.props && node.props.children && node.props.children.props && node.props.children.props.emojiName) node.props.children.props.jumboable = true;\n }\n }\n });\n }\n });\n }\n\n async loadEmoteData(emoteInfo) {\n const _fs = __webpack_require__(/*! fs */ \"fs\");\n\n const emoteFile = \"emote_data.json\";\n const file = data__WEBPACK_IMPORTED_MODULE_1__[\"Config\"].dataPath + emoteFile;\n\n const exists = _fs.existsSync(file);\n\n if (exists && this.isCacheValid()) {\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Loading emotes from cache.\", {\n type: \"info\"\n });\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Loading emotes from local cache.\");\n const data = await new Promise(resolve => {\n _fs.readFile(file, \"utf8\", (err, data) => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Emotes loaded from cache.\");\n if (err) data = {};\n resolve(data);\n });\n });\n let isValid = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].testJSON(data);\n if (isValid) Object.assign(Emotes, JSON.parse(data));\n\n for (const e in emoteInfo) {\n isValid = Object.keys(Emotes[emoteInfo[e].variable]).length > 0;\n }\n\n if (isValid) {\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Emotes successfully loaded.\", {\n type: \"success\"\n });\n data__WEBPACK_IMPORTED_MODULE_1__[\"State\"].emotesLoaded = true;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].dispatch(\"emotes-loaded\");\n return;\n }\n\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Cache was corrupt, downloading...\");\n\n _fs.unlinkSync(file);\n }\n\n if (!modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"general\", \"download\")) return;\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Downloading emotes in the background do not reload.\", {\n type: \"info\"\n });\n\n for (const e in emoteInfo) {\n await new Promise(r => setTimeout(r, 1000));\n const data = await this.downloadEmotes(emoteInfo[e]);\n Emotes[emoteInfo[e].variable] = data;\n }\n\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"All emotes successfully downloaded.\", {\n type: \"success\"\n });\n\n try {\n _fs.writeFileSync(file, JSON.stringify(Emotes), \"utf8\");\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not save emote data.\", err);\n }\n\n data__WEBPACK_IMPORTED_MODULE_1__[\"State\"].emotesLoaded = true;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].dispatch(\"emotes-loaded\");\n }\n\n downloadEmotes(emoteMeta) {\n const request = __webpack_require__(/*! request */ \"request\");\n\n const options = {\n url: emoteMeta.url,\n timeout: emoteMeta.timeout ? emoteMeta.timeout : 5000\n };\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", `Downloading: ${emoteMeta.variable} (${emoteMeta.url})`);\n return new Promise((resolve, reject) => {\n request(options, (error, response, body) => {\n if (error) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not download \" + emoteMeta.variable, error);\n\n if (emoteMeta.backup) {\n emoteMeta.url = emoteMeta.backup;\n emoteMeta.backup = null;\n if (emoteMeta.backupParser) emoteMeta.parser = emoteMeta.backupParser;\n return resolve(this.downloadEmotes(emoteMeta));\n }\n\n return reject({});\n }\n\n let parsedData = {};\n\n try {\n parsedData = JSON.parse(body);\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not download \" + emoteMeta.variable, err);\n\n if (emoteMeta.backup) {\n emoteMeta.url = emoteMeta.backup;\n emoteMeta.backup = null;\n if (emoteMeta.backupParser) emoteMeta.parser = emoteMeta.backupParser;\n return resolve(this.downloadEmotes(emoteMeta));\n }\n\n return reject({});\n }\n\n if (typeof emoteMeta.parser === \"function\") parsedData = emoteMeta.parser(parsedData);\n\n for (const emote in parsedData) {\n if (emote.length < 4 || blacklist.includes(emote)) {\n delete parsedData[emote];\n continue;\n }\n\n parsedData[emote] = emoteMeta.getEmoteURL(parsedData[emote]);\n }\n\n resolve(parsedData);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Downloaded: \" + emoteMeta.variable);\n });\n });\n }\n\n getBlacklist() {\n return new Promise(resolve => {\n $.getJSON(`https://rauenzi.github.io/BetterDiscordApp/data/emotefilter.json`, function (data) {\n resolve(blacklist.push(...data.blacklist));\n });\n });\n }\n\n isCacheValid() {\n const cacheLength = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDays\") || modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDays\", 7) || 7;\n const cacheDate = new Date(modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDate\") || null);\n const currentDate = new Date();\n const daysBetween = Math.round(Math.abs((currentDate.getTime() - cacheDate.getTime()) / (24 * 60 * 60 * 1000)));\n\n if (daysBetween > cacheLength) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", currentDate.toJSON());\n return false;\n }\n\n return true;\n }\n\n clearEmoteData() {\n const _fs = __webpack_require__(/*! fs */ \"fs\");\n\n const emoteFile = \"emote_data.json\";\n const file = data__WEBPACK_IMPORTED_MODULE_1__[\"Config\"].dataPath + emoteFile;\n\n const exists = _fs.existsSync(file);\n\n if (exists) _fs.unlinkSync(file);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", new Date().toJSON());\n\n for (const category in Emotes) Object.assign(Emotes, {\n [category]: {}\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbIkVtb3RlcyIsIlR3aXRjaEdsb2JhbCIsIlR3aXRjaFN1YnNjcmliZXIiLCJCVFRWIiwiRnJhbmtlckZhY2VaIiwiQlRUVjIiLCJiZEVtb3RlU2V0dGluZ0lEcyIsImJsYWNrbGlzdCIsIm92ZXJyaWRlcyIsIm1vZGlmaWVycyIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwiZ2V0IiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENhdGVnb3J5IiwiaW5pdGlhbGl6ZSIsImVuYWJsZWQiLCJTZXR0aW5ncyIsInJlZ2lzdGVyQ29sbGVjdGlvbiIsIkVtb3RlQ29uZmlnIiwidGl0bGUiLCJvbkNsaWNrIiwiY2xlYXJFbW90ZURhdGEiLCJsb2FkRW1vdGVEYXRhIiwiRW1vdGVJbmZvIiwiZGlzYWJsZWQiLCJyZW1vdmVDb2xsZWN0aW9uIiwiZW1wdHlFbW90ZXMiLCJjYW5jZWxFbW90ZVJlbmRlciIsImNhdCIsImFzc2lnbiIsInBhdGNoTWVzc2FnZUNvbnRlbnQiLCJVdGlsaXRpZXMiLCJtb25rZXlQYXRjaCIsInByb3RvdHlwZSIsImFmdGVyIiwicmV0dXJuVmFsdWUiLCJwcm9wcyIsInNpbGVudCIsImxlbmd0aCIsIm1hcmt1cCIsImNoaWxkcmVuIiwibm9kZXMiLCJuIiwibm9kZSIsIndvcmRzIiwic3BsaXQiLCJjIiwiY2xlbiIsInciLCJ3bGVuIiwiZW1vdGUiLCJlbW90ZVNwbGl0IiwiZW1vdGVOYW1lIiwiZW1vdGVNb2RpZmllciIsImVtb3RlT3ZlcnJpZGUiLCJzbGljZSIsImluY2x1ZGVzIiwiY3VycmVudCIsInJlc3VsdHMiLCJtYXRjaCIsIlJlZ0V4cCIsImVzY2FwZSIsInByZSIsInN1YnN0cmluZyIsImluZGV4IiwicG9zdCIsImVtb3RlQ29tcG9uZW50IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJCREVtb3RlIiwidXJsIiwibW9kaWZpZXIiLCJzcGxpY2UiLCJvbmx5RW1vdGVzIiwiZXZlcnkiLCJyIiwicmVwbGFjZSIsInR5cGUiLCJlbW9qaU5hbWUiLCJqdW1ib2FibGUiLCJlbW90ZUluZm8iLCJfZnMiLCJyZXF1aXJlIiwiZW1vdGVGaWxlIiwiZmlsZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwiZXhpc3RzIiwiZXhpc3RzU3luYyIsImlzQ2FjaGVWYWxpZCIsIlRvYXN0cyIsInNob3ciLCJsb2ciLCJkYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWFkRmlsZSIsImVyciIsImlzVmFsaWQiLCJ0ZXN0SlNPTiIsIkpTT04iLCJwYXJzZSIsImUiLCJ2YXJpYWJsZSIsIlN0YXRlIiwiZW1vdGVzTG9hZGVkIiwiRXZlbnRzIiwiZGlzcGF0Y2giLCJ1bmxpbmtTeW5jIiwic2V0VGltZW91dCIsImRvd25sb2FkRW1vdGVzIiwid3JpdGVGaWxlU3luYyIsInN0cmluZ2lmeSIsImVtb3RlTWV0YSIsInJlcXVlc3QiLCJvcHRpb25zIiwidGltZW91dCIsInJlamVjdCIsImVycm9yIiwicmVzcG9uc2UiLCJib2R5IiwiYmFja3VwIiwiYmFja3VwUGFyc2VyIiwicGFyc2VyIiwicGFyc2VkRGF0YSIsImdldEVtb3RlVVJMIiwiZ2V0QmxhY2tsaXN0IiwiJCIsImdldEpTT04iLCJwdXNoIiwiY2FjaGVMZW5ndGgiLCJEYXRhU3RvcmUiLCJnZXRCRERhdGEiLCJzZXRCRERhdGEiLCJjYWNoZURhdGUiLCJEYXRlIiwiY3VycmVudERhdGUiLCJkYXlzQmV0d2VlbiIsIk1hdGgiLCJyb3VuZCIsImFicyIsImdldFRpbWUiLCJ0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LFNBQUssTUFBTWpKLFFBQVgsSUFBdUJkLE1BQXZCLEVBQStCaUIsTUFBTSxDQUFDNEIsTUFBUCxDQUFjN0MsTUFBZCxFQUFzQjtBQUFDLE9BQUNjLFFBQUQsR0FBWTtBQUFiLEtBQXRCO0FBQ2xDOztBQWxRZ0QsQ0FBdEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9lbW90ZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcblxyXG5pbXBvcnQge0NvbmZpZywgRW1vdGVJbmZvLCBTdGF0ZSwgRW1vdGVDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7VXRpbGl0aWVzLCBXZWJwYWNrTW9kdWxlcywgRGF0YVN0b3JlLCBEaXNjb3JkTW9kdWxlcywgRXZlbnRzLCBTZXR0aW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IEJERW1vdGUgZnJvbSBcIi4uL3VpL2Vtb3RlXCI7XHJcbmltcG9ydCB7VG9hc3RzfSBmcm9tIFwidWlcIjtcclxuXHJcbmNvbnN0IEVtb3RlcyA9IHtcclxuICAgIFR3aXRjaEdsb2JhbDoge30sXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiB7fSxcclxuICAgIEJUVFY6IHt9LFxyXG4gICAgRnJhbmtlckZhY2VaOiB7fSxcclxuICAgIEJUVFYyOiB7fVxyXG59O1xyXG5cclxuY29uc3QgYmRFbW90ZVNldHRpbmdJRHMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IFwidHdpdGNoXCIsXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiBcInR3aXRjaFwiLFxyXG4gICAgQlRUVjogXCJidHR2XCIsXHJcbiAgICBGcmFua2VyRmFjZVo6IFwiZmZ6XCIsXHJcbiAgICBCVFRWMjogXCJidHR2XCJcclxufTtcclxuXHJcbmNvbnN0IGJsYWNrbGlzdCA9IFtdO1xyXG5jb25zdCBvdmVycmlkZXMgPSBbXCJ0d2l0Y2hcIiwgXCJidHR2XCIsIFwiZmZ6XCJdO1xyXG5jb25zdCBtb2RpZmllcnMgPSBbXCJmbGlwXCIsIFwic3BpblwiLCBcInB1bHNlXCIsIFwic3BpbjJcIiwgXCJzcGluM1wiLCBcIjFzcGluXCIsIFwiMnNwaW5cIiwgXCIzc3BpblwiLCBcInRyXCIsIFwiYmxcIiwgXCJiclwiLCBcInNoYWtlXCIsIFwic2hha2UyXCIsIFwic2hha2UzXCIsIFwiZmxhcFwiXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW90ZU1vZHVsZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcmllcygpIHsgcmV0dXJuIE9iamVjdC5rZXlzKGJkRW1vdGVTZXR0aW5nSURzKS5maWx0ZXIoayA9PiB0aGlzLmlzQ2F0ZWdvcnlFbmFibGVkKGJkRW1vdGVTZXR0aW5nSURzW2tdKSk7IH1cclxuXHJcbiAgICBpc0NhdGVnb3J5RW5hYmxlZChpZCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXQoXCJlbW90ZXNcIiwgXCJjYXRlZ29yaWVzXCIsIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoaWQpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KFwiZW1vdGVzXCIsIFwiZ2VuZXJhbFwiLCBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcblxyXG4gICAgZ2V0IEVtb3RlcygpIHtyZXR1cm4gRW1vdGVzO31cclxuICAgIGdldCBUd2l0Y2hHbG9iYWwoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hHbG9iYWw7fVxyXG4gICAgZ2V0IFR3aXRjaFN1YnNjcmliZXIoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyO31cclxuICAgIGdldCBCVFRWKCkge3JldHVybiBFbW90ZXMuQlRUVjt9XHJcbiAgICBnZXQgRnJhbmtlckZhY2VaKCkge3JldHVybiBFbW90ZXMuRnJhbmtlckZhY2VaO31cclxuICAgIGdldCBCVFRWMigpIHtyZXR1cm4gRW1vdGVzLkJUVFYyO31cclxuICAgIGdldCBibGFja2xpc3QoKSB7cmV0dXJuIGJsYWNrbGlzdDt9XHJcblxyXG4gICAgZ2V0Q2F0ZWdvcnkoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gRW1vdGVzW2NhdGVnb3J5XTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICAvLyBFbW90ZUNvbmZpZztcclxuICAgICAgICAvLyBlbW90ZUNvbGxlY3Rpb24uYnV0dG9uID0ge3RpdGxlOiBcIkNsZWFyIEVtb3RlIENhY2hlXCIsIG9uQ2xpY2s6ICgpID0+IHsgdGhpcy5jbGVhckVtb3RlRGF0YSgpOyB0aGlzLmxvYWRFbW90ZURhdGEoRW1vdGVJbmZvKTsgfX07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlckNvbGxlY3Rpb24oXCJlbW90ZXNcIiwgXCJFbW90ZXNcIiwgRW1vdGVDb25maWcsIHt0aXRsZTogXCJDbGVhciBFbW90ZSBDYWNoZVwiLCBvbkNsaWNrOiAoKSA9PiB7IHRoaXMuY2xlYXJFbW90ZURhdGEoKTsgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7IH19KTtcclxuICAgICAgICAvLyBEaXNhYmxlIGVtb3RlIG1vZHVsZSBmb3Igbm93IGJlY2F1c2UgaXQncyBhbm5veWluZyBhbmQgc2xvd1xyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QmxhY2tsaXN0KCk7XHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7XHJcblxyXG4gICAgICAgIC8vIHdoaWxlICghdGhpcy5NZXNzYWdlQ29udGVudENvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG4gICAgICAgIC8vIHRoaXMucGF0Y2hNZXNzYWdlQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZUNvbGxlY3Rpb24oXCJlbW90ZXNcIik7XHJcbiAgICAgICAgdGhpcy5lbXB0eUVtb3RlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBlbXB0eUVtb3RlcygpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdCBpbiBFbW90ZXMpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCB7W2NhdF06IHt9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hNZXNzYWdlQ29udGVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBVdGlsaXRpZXMubW9ua2V5UGF0Y2godGhpcy5NZXNzYWdlQ29udGVudENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKHtyZXR1cm5WYWx1ZX0pID0+IHtcclxuICAgICAgICAgICAgVXRpbGl0aWVzLm1vbmtleVBhdGNoKHJldHVyblZhbHVlLnByb3BzLCBcImNoaWxkcmVuXCIsIHtzaWxlbnQ6IHRydWUsIGFmdGVyOiAoe3JldHVyblZhbHVlfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFya3VwID0gcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hcmt1cC5wcm9wcy5jaGlsZHJlbikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBtYXJrdXAucHJvcHMuY2hpbGRyZW5bMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGVzIHx8ICFub2Rlcy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBub2RlLnNwbGl0KC8oW15cXHNdKykoW1xcc118JCkvZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNsZW4gPSB0aGlzLmNhdGVnb3JpZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHcgPSAwLCB3bGVuID0gd29yZHMubGVuZ3RoOyB3IDwgd2xlbjsgdysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZSA9IHdvcmRzW3ddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGVTcGxpdCA9IGVtb3RlLnNwbGl0KFwiOlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlTmFtZSA9IGVtb3RlU3BsaXRbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW1vdGVNb2RpZmllciA9IGVtb3RlU3BsaXRbMV0gPyBlbW90ZVNwbGl0WzFdIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbW90ZU92ZXJyaWRlID0gZW1vdGVNb2RpZmllci5zbGljZSgwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVOYW1lLmxlbmd0aCA8IDQgfHwgYmxhY2tsaXN0LmluY2x1ZGVzKGVtb3RlTmFtZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllcnMuaW5jbHVkZXMoZW1vdGVNb2RpZmllcikgfHwgIVNldHRpbmdzLmdldCh0aGlzLmNhdGVnb3J5LCBcImdlbmVyYWxcIiwgXCJtb2RpZmllcnNcIikpIGVtb3RlTW9kaWZpZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVycmlkZXMuaW5jbHVkZXMoZW1vdGVPdmVycmlkZSkpIGVtb3RlT3ZlcnJpZGUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBlbW90ZU1vZGlmaWVyID0gZW1vdGVPdmVycmlkZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHRoaXMuY2F0ZWdvcmllc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU92ZXJyaWRlID09PSBcInR3aXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5Ud2l0Y2hHbG9iYWxbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiVHdpdGNoR2xvYmFsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRW1vdGVzLlR3aXRjaFN1YnNjcmliZXJbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiVHdpdGNoU3Vic2NyaWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJidHR2XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLkJUVFZbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiQlRUVlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEVtb3Rlcy5CVFRWMltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJCVFRWMlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJmZnpcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuRnJhbmtlckZhY2VaW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkZyYW5rZXJGYWNlWlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRW1vdGVzW2N1cnJlbnRdW2Vtb3RlTmFtZV0gfHwgIVNldHRpbmdzLmdldCh0aGlzLmNhdGVnb3J5LCBcImNhdGVnb3JpZXNcIiwgYmRFbW90ZVNldHRpbmdJRHNbY3VycmVudF0pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBub2Rlc1tuXS5tYXRjaChuZXcgUmVnRXhwKGAoW1xcXFxzXXxeKSR7VXRpbGl0aWVzLmVzY2FwZShlbW90ZU1vZGlmaWVyID8gZW1vdGVOYW1lICsgXCI6XCIgKyBlbW90ZU1vZGlmaWVyIDogZW1vdGVOYW1lKX0oW1xcXFxzXXwkKWApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmUgPSBub2Rlc1tuXS5zdWJzdHJpbmcoMCwgcmVzdWx0cy5pbmRleCArIHJlc3VsdHNbMV0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc3QgPSBub2Rlc1tuXS5zdWJzdHJpbmcocmVzdWx0cy5pbmRleCArIHJlc3VsdHNbMF0ubGVuZ3RoIC0gcmVzdWx0c1syXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNbbl0gPSBwcmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZUNvbXBvbmVudCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRFbW90ZSwge25hbWU6IGVtb3RlTmFtZSwgdXJsOiBFbW90ZXNbY3VycmVudF1bZW1vdGVOYW1lXSwgbW9kaWZpZXI6IGVtb3RlTW9kaWZpZXJ9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShuICsgMSwgMCwgcG9zdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UobiArIDEsIDAsIGVtb3RlQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlFbW90ZXMgPSBub2Rlcy5ldmVyeShyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHIpID09IFwic3RyaW5nXCIgJiYgci5yZXBsYWNlKC9cXHMqLywgXCJcIikgPT0gXCJcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoci50eXBlICYmIHIudHlwZS5uYW1lID09IFwiQkRFbW90ZVwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyLnByb3BzICYmIHIucHJvcHMuY2hpbGRyZW4gJiYgci5wcm9wcy5jaGlsZHJlbi5wcm9wcyAmJiByLnByb3BzLmNoaWxkcmVuLnByb3BzLmVtb2ppTmFtZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ubHlFbW90ZXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGUubmFtZSA9PSBcIkJERW1vdGVcIikgbm9kZS5wcm9wcy5qdW1ib2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUucHJvcHMgJiYgbm9kZS5wcm9wcy5jaGlsZHJlbiAmJiBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzICYmIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMuZW1vamlOYW1lKSBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzLmp1bWJvYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgbG9hZEVtb3RlRGF0YShlbW90ZUluZm8pIHtcclxuICAgICAgICBjb25zdCBfZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICAgICAgY29uc3QgZW1vdGVGaWxlID0gXCJlbW90ZV9kYXRhLmpzb25cIjtcclxuICAgICAgICBjb25zdCBmaWxlID0gQ29uZmlnLmRhdGFQYXRoICsgZW1vdGVGaWxlO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IF9mcy5leGlzdHNTeW5jKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoZXhpc3RzICYmIHRoaXMuaXNDYWNoZVZhbGlkKCkpIHtcclxuICAgICAgICAgICAgVG9hc3RzLnNob3coXCJMb2FkaW5nIGVtb3RlcyBmcm9tIGNhY2hlLlwiLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuICAgICAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBcIkxvYWRpbmcgZW1vdGVzIGZyb20gbG9jYWwgY2FjaGUuXCIpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgX2ZzLnJlYWRGaWxlKGZpbGUsIFwidXRmOFwiLCAoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBcIkVtb3RlcyBsb2FkZWQgZnJvbSBjYWNoZS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNWYWxpZCA9IFV0aWxpdGllcy50ZXN0SlNPTihkYXRhKTtcclxuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCBKU09OLnBhcnNlKGRhdGEpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBpbiBlbW90ZUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBPYmplY3Qua2V5cyhFbW90ZXNbZW1vdGVJbmZvW2VdLnZhcmlhYmxlXSkubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIFRvYXN0cy5zaG93KFwiRW1vdGVzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgICAgICAgICAgICAgU3RhdGUuZW1vdGVzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJDYWNoZSB3YXMgY29ycnVwdCwgZG93bmxvYWRpbmcuLi5cIik7XHJcbiAgICAgICAgICAgIF9mcy51bmxpbmtTeW5jKGZpbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFTZXR0aW5ncy5nZXQodGhpcy5jYXRlZ29yeSwgXCJnZW5lcmFsXCIsIFwiZG93bmxvYWRcIikpIHJldHVybjtcclxuICAgICAgICBUb2FzdHMuc2hvdyhcIkRvd25sb2FkaW5nIGVtb3RlcyBpbiB0aGUgYmFja2dyb3VuZCBkbyBub3QgcmVsb2FkLlwiLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBlIGluIGVtb3RlSW5mbykge1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kb3dubG9hZEVtb3RlcyhlbW90ZUluZm9bZV0pO1xyXG4gICAgICAgICAgICBFbW90ZXNbZW1vdGVJbmZvW2VdLnZhcmlhYmxlXSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBUb2FzdHMuc2hvdyhcIkFsbCBlbW90ZXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG5cclxuICAgICAgICB0cnkgeyBfZnMud3JpdGVGaWxlU3luYyhmaWxlLCBKU09OLnN0cmluZ2lmeShFbW90ZXMpLCBcInV0ZjhcIik7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxpdGllcy5lcnIoXCJFbW90ZXNcIiwgXCJDb3VsZCBub3Qgc2F2ZSBlbW90ZSBkYXRhLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgIFN0YXRlLmVtb3Rlc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgRXZlbnRzLmRpc3BhdGNoKFwiZW1vdGVzLWxvYWRlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZEVtb3RlcyhlbW90ZU1ldGEpIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgdXJsOiBlbW90ZU1ldGEudXJsLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBlbW90ZU1ldGEudGltZW91dCA/IGVtb3RlTWV0YS50aW1lb3V0IDogNTAwMFxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgYERvd25sb2FkaW5nOiAke2Vtb3RlTWV0YS52YXJpYWJsZX0gKCR7ZW1vdGVNZXRhLnVybH0pYCk7XHJcblxyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgIHJlcXVlc3Qob3B0aW9ucywgKGVycm9yLCByZXNwb25zZSwgYm9keSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbGl0aWVzLmVycihcIkVtb3Rlc1wiLCBcIkNvdWxkIG5vdCBkb3dubG9hZCBcIiArIGVtb3RlTWV0YS52YXJpYWJsZSwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU1ldGEuYmFja3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb3RlTWV0YS51cmwgPSBlbW90ZU1ldGEuYmFja3VwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW90ZU1ldGEuYmFja3VwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTWV0YS5iYWNrdXBQYXJzZXIpIGVtb3RlTWV0YS5wYXJzZXIgPSBlbW90ZU1ldGEuYmFja3VwUGFyc2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmRvd25sb2FkRW1vdGVzKGVtb3RlTWV0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VkRGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRhID0gSlNPTi5wYXJzZShib2R5KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgICAgICBVdGlsaXRpZXMuZXJyKFwiRW1vdGVzXCIsIFwiQ291bGQgbm90IGRvd25sb2FkIFwiICsgZW1vdGVNZXRhLnZhcmlhYmxlLCBlcnIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU1ldGEuYmFja3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb3RlTWV0YS51cmwgPSBlbW90ZU1ldGEuYmFja3VwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW90ZU1ldGEuYmFja3VwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTWV0YS5iYWNrdXBQYXJzZXIpIGVtb3RlTWV0YS5wYXJzZXIgPSBlbW90ZU1ldGEuYmFja3VwUGFyc2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmRvd25sb2FkRW1vdGVzKGVtb3RlTWV0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoZW1vdGVNZXRhLnBhcnNlcikgPT09IFwiZnVuY3Rpb25cIikgcGFyc2VkRGF0YSA9IGVtb3RlTWV0YS5wYXJzZXIocGFyc2VkRGF0YSk7XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBlbW90ZSBpbiBwYXJzZWREYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlLmxlbmd0aCA8IDQgfHwgYmxhY2tsaXN0LmluY2x1ZGVzKGVtb3RlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyc2VkRGF0YVtlbW90ZV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBwYXJzZWREYXRhW2Vtb3RlXSA9IGVtb3RlTWV0YS5nZXRFbW90ZVVSTChwYXJzZWREYXRhW2Vtb3RlXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKHBhcnNlZERhdGEpO1xyXG4gICAgICAgICAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBcIkRvd25sb2FkZWQ6IFwiICsgZW1vdGVNZXRhLnZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmxhY2tsaXN0KCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgJC5nZXRKU09OKGBodHRwczovL3JhdWVuemkuZ2l0aHViLmlvL0JldHRlckRpc2NvcmRBcHAvZGF0YS9lbW90ZWZpbHRlci5qc29uYCwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoYmxhY2tsaXN0LnB1c2goLi4uZGF0YS5ibGFja2xpc3QpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNDYWNoZVZhbGlkKCkge1xyXG4gICAgICAgIGNvbnN0IGNhY2hlTGVuZ3RoID0gRGF0YVN0b3JlLmdldEJERGF0YShcImVtb3RlQ2FjaGVEYXlzXCIpIHx8IERhdGFTdG9yZS5zZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF5c1wiLCA3KSB8fCA3O1xyXG4gICAgICAgIGNvbnN0IGNhY2hlRGF0ZSA9IG5ldyBEYXRlKERhdGFTdG9yZS5nZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF0ZVwiKSB8fCBudWxsKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgZGF5c0JldHdlZW4gPSBNYXRoLnJvdW5kKE1hdGguYWJzKChjdXJyZW50RGF0ZS5nZXRUaW1lKCkgLSBjYWNoZURhdGUuZ2V0VGltZSgpKSAvICgyNCAqIDYwICogNjAgKiAxMDAwKSkpO1xyXG4gICAgICAgIGlmIChkYXlzQmV0d2VlbiA+IGNhY2hlTGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF0ZVwiLCBjdXJyZW50RGF0ZS50b0pTT04oKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJFbW90ZURhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgX2ZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgICAgIGNvbnN0IGVtb3RlRmlsZSA9IFwiZW1vdGVfZGF0YS5qc29uXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IENvbmZpZy5kYXRhUGF0aCArIGVtb3RlRmlsZTtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSBfZnMuZXhpc3RzU3luYyhmaWxlKTtcclxuICAgICAgICBpZiAoZXhpc3RzKSBfZnMudW5saW5rU3luYyhmaWxlKTtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiZW1vdGVDYWNoZURhdGVcIiwgKG5ldyBEYXRlKCkpLnRvSlNPTigpKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IGluIEVtb3RlcykgT2JqZWN0LmFzc2lnbihFbW90ZXMsIHtbY2F0ZWdvcnldOiB7fX0pO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/emotes.js\n"); /***/ }), @@ -259,35 +259,23 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /*!**************************!*\ !*** ./src/data/data.js ***! \**************************/ -/*! exports provided: State, Config, Emotes, EmoteBlacklist, EmoteInfo, EmoteModifiers, EmoteOverrides, SettingsConfig, SettingsState */ +/*! exports provided: State, Config, EmoteInfo, EmoteConfig, SettingsConfig, SettingsState */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./state */ \"./src/data/state.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"State\", function() { return _state__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config */ \"./src/data/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return _config__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _emotes_emotes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes/emotes */ \"./src/data/emotes/emotes.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Emotes\", function() { return _emotes_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _emotes_blacklist__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emotes/blacklist */ \"./src/data/emotes/blacklist.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteBlacklist\", function() { return _emotes_blacklist__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _emotes_info__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./emotes/info */ \"./src/data/emotes/info.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteInfo\", function() { return _emotes_info__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _emotes_modifiers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./emotes/modifiers */ \"./src/data/emotes/modifiers.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteModifiers\", function() { return _emotes_modifiers__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _emotes_overrides__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./emotes/overrides */ \"./src/data/emotes/overrides.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteOverrides\", function() { return _emotes_overrides__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _settings_config__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./settings/config */ \"./src/data/settings/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SettingsConfig\", function() { return _settings_config__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _settings_state__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./settings/state */ \"./src/data/settings/state.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SettingsState\", function() { return _settings_state__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n // import SettingsInfo from \"./settings\";\n// import SettingsCookie from \"./cookies/settingscookie\";\n\n // import PluginCookie from \"./cookies/plugincookie\";\n// import ThemeCookie from \"./cookies/themecookie\";\n// import Themes from \"./themes\";\n// import Plugins from \"./plugins\";\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZGF0YS5qcz9kNWM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0NBQ0E7QUFDQTs7Q0FFQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQSIsImZpbGUiOiIuL3NyYy9kYXRhL2RhdGEuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgU3RhdGUgZnJvbSBcIi4vc3RhdGVcIjtcclxuLy8gaW1wb3J0IFNldHRpbmdzSW5mbyBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG4vLyBpbXBvcnQgU2V0dGluZ3NDb29raWUgZnJvbSBcIi4vY29va2llcy9zZXR0aW5nc2Nvb2tpZVwiO1xyXG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuL2NvbmZpZ1wiO1xyXG4vLyBpbXBvcnQgUGx1Z2luQ29va2llIGZyb20gXCIuL2Nvb2tpZXMvcGx1Z2luY29va2llXCI7XHJcbi8vIGltcG9ydCBUaGVtZUNvb2tpZSBmcm9tIFwiLi9jb29raWVzL3RoZW1lY29va2llXCI7XHJcbi8vIGltcG9ydCBUaGVtZXMgZnJvbSBcIi4vdGhlbWVzXCI7XHJcbi8vIGltcG9ydCBQbHVnaW5zIGZyb20gXCIuL3BsdWdpbnNcIjtcclxuaW1wb3J0IEVtb3RlcyBmcm9tIFwiLi9lbW90ZXMvZW1vdGVzXCI7XHJcbmltcG9ydCBFbW90ZUJsYWNrbGlzdCBmcm9tIFwiLi9lbW90ZXMvYmxhY2tsaXN0XCI7XHJcbmltcG9ydCBFbW90ZUluZm8gZnJvbSBcIi4vZW1vdGVzL2luZm9cIjtcclxuaW1wb3J0IEVtb3RlTW9kaWZpZXJzIGZyb20gXCIuL2Vtb3Rlcy9tb2RpZmllcnNcIjtcclxuaW1wb3J0IEVtb3RlT3ZlcnJpZGVzIGZyb20gXCIuL2Vtb3Rlcy9vdmVycmlkZXNcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc0NvbmZpZyBmcm9tIFwiLi9zZXR0aW5ncy9jb25maWdcIjtcclxuaW1wb3J0IFNldHRpbmdzU3RhdGUgZnJvbSBcIi4vc2V0dGluZ3Mvc3RhdGVcIjtcclxuXHJcbmV4cG9ydCB7U3RhdGUsIENvbmZpZywgLypTZXR0aW5nc0luZm8sIFNldHRpbmdzQ29va2llLCBQbHVnaW5Db29raWUsIFRoZW1lQ29va2llLCBUaGVtZXMsIFBsdWdpbnMsKi8gRW1vdGVzLCBFbW90ZUJsYWNrbGlzdCwgRW1vdGVJbmZvLCBFbW90ZU1vZGlmaWVycywgRW1vdGVPdmVycmlkZXMsIFNldHRpbmdzQ29uZmlnLCBTZXR0aW5nc1N0YXRlfTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/data/data.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _state__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./state */ \"./src/data/state.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"State\", function() { return _state__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _config__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./config */ \"./src/data/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Config\", function() { return _config__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _emotes_info__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes/info */ \"./src/data/emotes/info.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteInfo\", function() { return _emotes_info__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _emotes_config__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emotes/config */ \"./src/data/emotes/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"EmoteConfig\", function() { return _emotes_config__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _settings_config__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings/config */ \"./src/data/settings/config.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SettingsConfig\", function() { return _settings_config__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _settings_state__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settings/state */ \"./src/data/settings/state.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SettingsState\", function() { return _settings_state__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZGF0YS5qcz9kNWM3Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2RhdGEvZGF0YS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdGF0ZSBmcm9tIFwiLi9zdGF0ZVwiO1xyXG5pbXBvcnQgQ29uZmlnIGZyb20gXCIuL2NvbmZpZ1wiO1xyXG5pbXBvcnQgRW1vdGVJbmZvIGZyb20gXCIuL2Vtb3Rlcy9pbmZvXCI7XHJcbmltcG9ydCBFbW90ZUNvbmZpZyBmcm9tIFwiLi9lbW90ZXMvY29uZmlnXCI7XHJcblxyXG5pbXBvcnQgU2V0dGluZ3NDb25maWcgZnJvbSBcIi4vc2V0dGluZ3MvY29uZmlnXCI7XHJcbmltcG9ydCBTZXR0aW5nc1N0YXRlIGZyb20gXCIuL3NldHRpbmdzL3N0YXRlXCI7XHJcblxyXG5leHBvcnQge1N0YXRlLCBDb25maWcsIEVtb3RlSW5mbywgRW1vdGVDb25maWcsIFNldHRpbmdzQ29uZmlnLCBTZXR0aW5nc1N0YXRlfTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/data/data.js\n"); /***/ }), -/***/ "./src/data/emotes/blacklist.js": -/*!**************************************!*\ - !*** ./src/data/emotes/blacklist.js ***! - \**************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZW1vdGVzL2JsYWNrbGlzdC5qcz8wNzQwIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQWUsaUVBQWYiLCJmaWxlIjoiLi9zcmMvZGF0YS9lbW90ZXMvYmxhY2tsaXN0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgW107Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/emotes/blacklist.js\n"); - -/***/ }), - -/***/ "./src/data/emotes/emotes.js": +/***/ "./src/data/emotes/config.js": /*!***********************************!*\ - !*** ./src/data/emotes/emotes.js ***! + !*** ./src/data/emotes/config.js ***! \***********************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ({\n TwitchGlobal: {},\n TwitchSubscriber: {},\n BTTV: {},\n FrankerFaceZ: {},\n BTTV2: {}\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZW1vdGVzL2Vtb3Rlcy5qcz81MjU4Il0sIm5hbWVzIjpbIlR3aXRjaEdsb2JhbCIsIlR3aXRjaFN1YnNjcmliZXIiLCJCVFRWIiwiRnJhbmtlckZhY2VaIiwiQlRUVjIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQWU7QUFDWEEsY0FBWSxFQUFFLEVBREg7QUFFWEMsa0JBQWdCLEVBQUUsRUFGUDtBQUdYQyxNQUFJLEVBQUUsRUFISztBQUlYQyxjQUFZLEVBQUUsRUFKSDtBQUtYQyxPQUFLLEVBQUU7QUFMSSxDQUFmIiwiZmlsZSI6Ii4vc3JjL2RhdGEvZW1vdGVzL2Vtb3Rlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IHtcclxuICAgIFR3aXRjaEdsb2JhbDoge30sXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiB7fSxcclxuICAgIEJUVFY6IHt9LFxyXG4gICAgRnJhbmtlckZhY2VaOiB7fSxcclxuICAgIEJUVFYyOiB7fVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/data/emotes/emotes.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"category\",\n id: \"general\",\n name: \"General\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"download\",\n name: \"Download Emotes\",\n note: \"Download emotes once a week to stay up to date\",\n value: true\n }, {\n type: \"switch\",\n id: \"emoteMenu\",\n name: \"Emote Menu\",\n note: \"Show Twitch/Favourite emotes in emote menu\",\n value: true\n }, {\n type: \"switch\",\n id: \"hideEmojiMenu\",\n name: \"Hide Emoji Menu\",\n note: \"Hides Discord's emoji menu when using emote menu\",\n value: false,\n enableWith: \"emoteMenu\"\n }, {\n type: \"switch\",\n id: \"autoCaps\",\n name: \"Emote Autocapitalization\",\n note: \"Autocapitalize emote commands\",\n value: false\n }, {\n type: \"switch\",\n id: \"showNames\",\n name: \"Show Names\",\n note: \"Show emote names on hover\",\n value: true\n }, {\n type: \"switch\",\n id: \"modifiers\",\n name: \"Show Emote Modifiers\",\n note: \"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)\",\n value: true\n }, {\n type: \"switch\",\n id: \"animateOnHover\",\n name: \"Animate On Hover\",\n note: \"Only animate the emote modifiers on hover\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"categories\",\n name: \"Categories\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"twitch\",\n name: \"Twitch\",\n note: \"Show Twitch global & subscriber emotes\",\n value: true\n }, {\n type: \"switch\",\n id: \"ffz\",\n name: \"FrankerFaceZ\",\n note: \"Show emotes from FFZ\",\n value: true\n }, {\n type: \"switch\",\n id: \"bttv\",\n name: \"BetterTTV\",\n note: \"Show emotes from BTTV\",\n value: true\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZW1vdGVzL2NvbmZpZy5qcz8yZDVkIl0sIm5hbWVzIjpbInR5cGUiLCJpZCIsIm5hbWUiLCJjb2xsYXBzaWJsZSIsInNldHRpbmdzIiwibm90ZSIsInZhbHVlIiwiZW5hYmxlV2l0aCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBZSxnRUFDWDtBQUNJQSxNQUFJLEVBQUUsVUFEVjtBQUVJQyxJQUFFLEVBQUUsU0FGUjtBQUdJQyxNQUFJLEVBQUUsU0FIVjtBQUlJQyxhQUFXLEVBQUUsSUFKakI7QUFLSUMsVUFBUSxFQUFFLENBQ047QUFDSUosUUFBSSxFQUFFLFFBRFY7QUFFSUMsTUFBRSxFQUFFLFVBRlI7QUFHSUMsUUFBSSxFQUFFLGlCQUhWO0FBSUlHLFFBQUksRUFBRSxnREFKVjtBQUtJQyxTQUFLLEVBQUU7QUFMWCxHQURNLEVBUU47QUFDSU4sUUFBSSxFQUFFLFFBRFY7QUFFSUMsTUFBRSxFQUFFLFdBRlI7QUFHSUMsUUFBSSxFQUFFLFlBSFY7QUFJSUcsUUFBSSxFQUFFLDRDQUpWO0FBS0lDLFNBQUssRUFBRTtBQUxYLEdBUk0sRUFlTjtBQUNJTixRQUFJLEVBQUUsUUFEVjtBQUVJQyxNQUFFLEVBQUUsZUFGUjtBQUdJQyxRQUFJLEVBQUUsaUJBSFY7QUFJSUcsUUFBSSxFQUFFLGtEQUpWO0FBS0lDLFNBQUssRUFBRSxLQUxYO0FBTUlDLGNBQVUsRUFBRTtBQU5oQixHQWZNLEVBdUJOO0FBQ0lQLFFBQUksRUFBRSxRQURWO0FBRUlDLE1BQUUsRUFBRSxVQUZSO0FBR0lDLFFBQUksRUFBRSwwQkFIVjtBQUlJRyxRQUFJLEVBQUUsK0JBSlY7QUFLSUMsU0FBSyxFQUFFO0FBTFgsR0F2Qk0sRUE4Qk47QUFDSU4sUUFBSSxFQUFFLFFBRFY7QUFFSUMsTUFBRSxFQUFFLFdBRlI7QUFHSUMsUUFBSSxFQUFFLFlBSFY7QUFJSUcsUUFBSSxFQUFFLDJCQUpWO0FBS0lDLFNBQUssRUFBRTtBQUxYLEdBOUJNLEVBcUNOO0FBQ0lOLFFBQUksRUFBRSxRQURWO0FBRUlDLE1BQUUsRUFBRSxXQUZSO0FBR0lDLFFBQUksRUFBRSxzQkFIVjtBQUlJRyxRQUFJLEVBQUUsbUhBSlY7QUFLSUMsU0FBSyxFQUFFO0FBTFgsR0FyQ00sRUE0Q047QUFDSU4sUUFBSSxFQUFFLFFBRFY7QUFFSUMsTUFBRSxFQUFFLGdCQUZSO0FBR0lDLFFBQUksRUFBRSxrQkFIVjtBQUlJRyxRQUFJLEVBQUUsMkNBSlY7QUFLSUMsU0FBSyxFQUFFO0FBTFgsR0E1Q007QUFMZCxDQURXLEVBMkRYO0FBQ0lOLE1BQUksRUFBRSxVQURWO0FBRUlDLElBQUUsRUFBRSxZQUZSO0FBR0lDLE1BQUksRUFBRSxZQUhWO0FBSUlDLGFBQVcsRUFBRSxJQUpqQjtBQUtJQyxVQUFRLEVBQUUsQ0FDTjtBQUNJSixRQUFJLEVBQUUsUUFEVjtBQUVJQyxNQUFFLEVBQUUsUUFGUjtBQUdJQyxRQUFJLEVBQUUsUUFIVjtBQUlJRyxRQUFJLEVBQUUsd0NBSlY7QUFLSUMsU0FBSyxFQUFFO0FBTFgsR0FETSxFQVFOO0FBQ0lOLFFBQUksRUFBRSxRQURWO0FBRUlDLE1BQUUsRUFBRSxLQUZSO0FBR0lDLFFBQUksRUFBRSxjQUhWO0FBSUlHLFFBQUksRUFBRSxzQkFKVjtBQUtJQyxTQUFLLEVBQUU7QUFMWCxHQVJNLEVBZU47QUFDSU4sUUFBSSxFQUFFLFFBRFY7QUFFSUMsTUFBRSxFQUFFLE1BRlI7QUFHSUMsUUFBSSxFQUFFLFdBSFY7QUFJSUcsUUFBSSxFQUFFLHVCQUpWO0FBS0lDLFNBQUssRUFBRTtBQUxYLEdBZk07QUFMZCxDQTNEVyxDQUFmIiwiZmlsZSI6Ii4vc3JjL2RhdGEvZW1vdGVzL2NvbmZpZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFtcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgaWQ6IFwiZ2VuZXJhbFwiLFxyXG4gICAgICAgIG5hbWU6IFwiR2VuZXJhbFwiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJkb3dubG9hZFwiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJEb3dubG9hZCBFbW90ZXNcIixcclxuICAgICAgICAgICAgICAgIG5vdGU6IFwiRG93bmxvYWQgZW1vdGVzIG9uY2UgYSB3ZWVrIHRvIHN0YXkgdXAgdG8gZGF0ZVwiLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImVtb3RlTWVudVwiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJFbW90ZSBNZW51XCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgVHdpdGNoL0Zhdm91cml0ZSBlbW90ZXMgaW4gZW1vdGUgbWVudVwiLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImhpZGVFbW9qaU1lbnVcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiSGlkZSBFbW9qaSBNZW51XCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIERpc2NvcmQncyBlbW9qaSBtZW51IHdoZW4gdXNpbmcgZW1vdGUgbWVudVwiLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlV2l0aDogXCJlbW90ZU1lbnVcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiYXV0b0NhcHNcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiRW1vdGUgQXV0b2NhcGl0YWxpemF0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIkF1dG9jYXBpdGFsaXplIGVtb3RlIGNvbW1hbmRzXCIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2VcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcInNob3dOYW1lc1wiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJTaG93IE5hbWVzXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgZW1vdGUgbmFtZXMgb24gaG92ZXJcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJtb2RpZmllcnNcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiU2hvdyBFbW90ZSBNb2RpZmllcnNcIixcclxuICAgICAgICAgICAgICAgIG5vdGU6IFwiRW5hYmxlIGVtb3RlIG1vZHMgKGZsaXAsIHNwaW4sIHB1bHNlLCBzcGluMiwgc3BpbjMsIDFzcGluLCAyc3BpbiwgM3NwaW4sIHRyLCBibCwgYnIsIHNoYWtlLCBzaGFrZTIsIHNoYWtlMywgZmxhcClcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJhbmltYXRlT25Ib3ZlclwiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJBbmltYXRlIE9uIEhvdmVyXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIk9ubHkgYW5pbWF0ZSB0aGUgZW1vdGUgbW9kaWZpZXJzIG9uIGhvdmVyXCIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImNhdGVnb3JpZXNcIixcclxuICAgICAgICBuYW1lOiBcIkNhdGVnb3JpZXNcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwidHdpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlR3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IFR3aXRjaCBnbG9iYWwgJiBzdWJzY3JpYmVyIGVtb3Rlc1wiLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImZmelwiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJGcmFua2VyRmFjZVpcIixcclxuICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBlbW90ZXMgZnJvbSBGRlpcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJidHR2XCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkJldHRlclRUVlwiLFxyXG4gICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IGVtb3RlcyBmcm9tIEJUVFZcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9XHJcbl07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/emotes/config.js\n"); /***/ }), @@ -303,30 +291,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ }), -/***/ "./src/data/emotes/modifiers.js": -/*!**************************************!*\ - !*** ./src/data/emotes/modifiers.js ***! - \**************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([\"flip\", \"spin\", \"pulse\", \"spin2\", \"spin3\", \"1spin\", \"2spin\", \"3spin\", \"tr\", \"bl\", \"br\", \"shake\", \"shake2\", \"shake3\", \"flap\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZW1vdGVzL21vZGlmaWVycy5qcz84YThmIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQWUsZ0VBQUMsTUFBRCxFQUFTLE1BQVQsRUFBaUIsT0FBakIsRUFBMEIsT0FBMUIsRUFBbUMsT0FBbkMsRUFBNEMsT0FBNUMsRUFBcUQsT0FBckQsRUFBOEQsT0FBOUQsRUFBdUUsSUFBdkUsRUFBNkUsSUFBN0UsRUFBbUYsSUFBbkYsRUFBeUYsT0FBekYsRUFBa0csUUFBbEcsRUFBNEcsUUFBNUcsRUFBc0gsTUFBdEgsQ0FBZiIsImZpbGUiOiIuL3NyYy9kYXRhL2Vtb3Rlcy9tb2RpZmllcnMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBbXCJmbGlwXCIsIFwic3BpblwiLCBcInB1bHNlXCIsIFwic3BpbjJcIiwgXCJzcGluM1wiLCBcIjFzcGluXCIsIFwiMnNwaW5cIiwgXCIzc3BpblwiLCBcInRyXCIsIFwiYmxcIiwgXCJiclwiLCBcInNoYWtlXCIsIFwic2hha2UyXCIsIFwic2hha2UzXCIsIFwiZmxhcFwiXTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/data/emotes/modifiers.js\n"); - -/***/ }), - -/***/ "./src/data/emotes/overrides.js": -/*!**************************************!*\ - !*** ./src/data/emotes/overrides.js ***! - \**************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([\"twitch\", \"bttv\", \"ffz\"]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvZW1vdGVzL292ZXJyaWRlcy5qcz9lYjkyIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0FBQWUsZ0VBQUMsUUFBRCxFQUFXLE1BQVgsRUFBbUIsS0FBbkIsQ0FBZiIsImZpbGUiOiIuL3NyYy9kYXRhL2Vtb3Rlcy9vdmVycmlkZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBbXCJ0d2l0Y2hcIiwgXCJidHR2XCIsIFwiZmZ6XCJdOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/data/emotes/overrides.js\n"); - -/***/ }), - /***/ "./src/data/settings/config.js": /*!*************************************!*\ !*** ./src/data/settings/config.js ***! @@ -335,7 +299,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"collection\",\n id: \"settings\",\n name: \"Settings\",\n settings: [{\n type: \"category\",\n id: \"general\",\n name: \"General\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"emotes\",\n name: \"Emote System\",\n note: \"Enables BD's emote system\",\n value: true\n }, {\n type: \"switch\",\n id: \"publicServers\",\n name: \"Public Servers\",\n note: \"Display public servers button\",\n value: true\n }, {\n type: \"switch\",\n id: \"voiceDisconnect\",\n name: \"Voice Disconnect\",\n note: \"Disconnect from voice server when closing Discord\",\n value: false\n }, {\n type: \"switch\",\n id: \"twentyFourHour\",\n name: \"24 Hour Timestamps\",\n note: \"Hides channels when in minimal mode\",\n value: false\n }, {\n type: \"switch\",\n id: \"classNormalizer\",\n name: \"Normalize Classes\",\n note: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\",\n value: true\n }, {\n type: \"switch\",\n id: \"showToasts\",\n name: \"Show Toasts\",\n note: \"Shows a small notification for important information\",\n value: true\n }]\n }, {\n type: \"category\",\n id: \"appearance\",\n name: \"Appearance\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"voiceMode\",\n name: \"Voice Mode\",\n note: \"Hides everything that isn't voice chat\",\n value: false\n }, {\n type: \"switch\",\n id: \"minimalMode\",\n name: \"Minimal Mode\",\n note: \"Hide elements and reduce the size of elements\",\n value: false\n }, {\n type: \"switch\",\n id: \"hideChannels\",\n name: \"Hide Channels\",\n note: \"Hides channels when in minimal mode\",\n value: false,\n enableWith: \"minimalMode\"\n }, {\n type: \"switch\",\n id: \"darkMode\",\n name: \"Dark Mode\",\n note: \"Make certain elements dark by default\",\n value: true\n }, {\n type: \"switch\",\n id: \"coloredText\",\n name: \"Colored Text\",\n note: \"Make text colour the same as role color\",\n value: false\n }]\n }, {\n type: \"category\",\n id: \"content\",\n name: \"Content Manager\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"contentErrors\",\n name: \"Show Content Errors\",\n note: \"Shows a modal with plugin/theme errors\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoScroll\",\n name: \"Scroll To Settings\",\n note: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoReload\",\n name: \"Automatic Loading\",\n note: \"Automatically loads, reloads, and unloads plugins and themes\",\n value: true\n }]\n }, {\n type: \"category\",\n id: \"developer\",\n name: \"Developer Settings\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"developerMode\",\n name: \"Developer Mode\",\n note: \"Allows activating debugger when pressing F8\",\n value: false\n }, {\n type: \"switch\",\n id: \"copySelector\",\n name: \"Copy Selector\",\n note: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\",\n value: false,\n enableWith: \"developerMode\"\n }]\n }, {\n type: \"category\",\n id: \"window\",\n name: \"Window Preferences\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"transparency\",\n name: \"Enable Transparency\",\n note: \"Enables the main window to be see-through (requires restart)\",\n value: false\n }, {\n type: \"switch\",\n id: \"frame\",\n name: \"Window Frame\",\n note: \"Adds the native os window frame to the main window\",\n value: false,\n hidden: true\n }]\n }]\n}, {\n type: \"collection\",\n id: \"emotes\",\n name: \"Emotes\",\n enableWith: \"settings.general.emotes\",\n settings: [{\n type: \"category\",\n id: \"general\",\n name: \"General\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"download\",\n name: \"Download Emotes\",\n note: \"Download emotes once a week to stay up to date\",\n value: true\n }, {\n type: \"switch\",\n id: \"emoteMenu\",\n name: \"Emote Menu\",\n note: \"Show Twitch/Favourite emotes in emote menu\",\n value: true\n }, {\n type: \"switch\",\n id: \"hideEmojiMenu\",\n name: \"Hide Emoji Menu\",\n note: \"Hides Discord's emoji menu when using emote menu\",\n value: false,\n enableWith: \"emoteMenu\"\n }, {\n type: \"switch\",\n id: \"autoCaps\",\n name: \"Emote Autocapitalization\",\n note: \"Autocapitalize emote commands\",\n value: false\n }, {\n type: \"switch\",\n id: \"showNames\",\n name: \"Show Names\",\n note: \"Show emote names on hover\",\n value: true\n }, {\n type: \"switch\",\n id: \"modifiers\",\n name: \"Show Emote Modifiers\",\n note: \"Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)\",\n value: true\n }, {\n type: \"switch\",\n id: \"animateOnHover\",\n name: \"Animate On Hover\",\n note: \"Only animate the emote modifiers on hover\",\n value: false\n }]\n }, {\n type: \"category\",\n id: \"categories\",\n name: \"Categories\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"twitch\",\n name: \"Twitch\",\n note: \"Show Twitch global & subscriber emotes\",\n value: true\n }, {\n type: \"switch\",\n id: \"ffz\",\n name: \"FrankerFaceZ\",\n note: \"Show emotes from FFZ\",\n value: true\n }, {\n type: \"switch\",\n id: \"bttv\",\n name: \"BetterTTV\",\n note: \"Show emotes from BTTV\",\n value: true\n }]\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc2V0dGluZ3MvY29uZmlnLmpzP2ZmOGUiXSwibmFtZXMiOlsidHlwZSIsImlkIiwibmFtZSIsInNldHRpbmdzIiwiY29sbGFwc2libGUiLCJub3RlIiwidmFsdWUiLCJlbmFibGVXaXRoIiwic2hvd24iLCJoaWRkZW4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQWUsZ0VBQ1g7QUFDSUEsTUFBSSxFQUFFLFlBRFY7QUFFSUMsSUFBRSxFQUFFLFVBRlI7QUFHSUMsTUFBSSxFQUFFLFVBSFY7QUFJSUMsVUFBUSxFQUFFLENBQ047QUFDSUgsUUFBSSxFQUFFLFVBRFY7QUFFSUMsTUFBRSxFQUFFLFNBRlI7QUFHSUMsUUFBSSxFQUFFLFNBSFY7QUFJSUUsZUFBVyxFQUFFLElBSmpCO0FBS0lELFlBQVEsRUFBRSxDQUNOO0FBQ0lILFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxRQUZSO0FBR0lDLFVBQUksRUFBRSxjQUhWO0FBSUlHLFVBQUksRUFBRSwyQkFKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQURNLEVBUU47QUFDSU4sVUFBSSxFQUFFLFFBRFY7QUFFSUMsUUFBRSxFQUFFLGVBRlI7QUFHSUMsVUFBSSxFQUFFLGdCQUhWO0FBSUlHLFVBQUksRUFBRSwrQkFKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQVJNLEVBZU47QUFDSU4sVUFBSSxFQUFFLFFBRFY7QUFFSUMsUUFBRSxFQUFFLGlCQUZSO0FBR0lDLFVBQUksRUFBRSxrQkFIVjtBQUlJRyxVQUFJLEVBQUUsbURBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0FmTSxFQXNCTjtBQUNJTixVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsZ0JBRlI7QUFHSUMsVUFBSSxFQUFFLG9CQUhWO0FBSUlHLFVBQUksRUFBRSxxQ0FKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQXRCTSxFQTZCTjtBQUNJTixVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsaUJBRlI7QUFHSUMsVUFBSSxFQUFFLG1CQUhWO0FBSUlHLFVBQUksRUFBRSw4RkFKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQTdCTSxFQW9DTjtBQUNJTixVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsWUFGUjtBQUdJQyxVQUFJLEVBQUUsYUFIVjtBQUlJRyxVQUFJLEVBQUUsc0RBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0FwQ007QUFMZCxHQURNLEVBbUROO0FBQ0lOLFFBQUksRUFBRSxVQURWO0FBRUlDLE1BQUUsRUFBRSxZQUZSO0FBR0lDLFFBQUksRUFBRSxZQUhWO0FBSUlFLGVBQVcsRUFBRSxJQUpqQjtBQUtJRCxZQUFRLEVBQUUsQ0FDTjtBQUNJSCxVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsV0FGUjtBQUdJQyxVQUFJLEVBQUUsWUFIVjtBQUlJRyxVQUFJLEVBQUUsd0NBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0FETSxFQVFOO0FBQ0lOLFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxhQUZSO0FBR0lDLFVBQUksRUFBRSxjQUhWO0FBSUlHLFVBQUksRUFBRSwrQ0FKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQVJNLEVBZU47QUFDSU4sVUFBSSxFQUFFLFFBRFY7QUFFSUMsUUFBRSxFQUFFLGNBRlI7QUFHSUMsVUFBSSxFQUFFLGVBSFY7QUFJSUcsVUFBSSxFQUFFLHFDQUpWO0FBS0lDLFdBQUssRUFBRSxLQUxYO0FBTUlDLGdCQUFVLEVBQUU7QUFOaEIsS0FmTSxFQXVCTjtBQUNJUCxVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsVUFGUjtBQUdJQyxVQUFJLEVBQUUsV0FIVjtBQUlJRyxVQUFJLEVBQUUsdUNBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0F2Qk0sRUE4Qk47QUFDSU4sVUFBSSxFQUFFLFFBRFY7QUFFSUMsUUFBRSxFQUFFLGFBRlI7QUFHSUMsVUFBSSxFQUFFLGNBSFY7QUFJSUcsVUFBSSxFQUFFLHlDQUpWO0FBS0lDLFdBQUssRUFBRTtBQUxYLEtBOUJNO0FBTGQsR0FuRE0sRUErRk47QUFDSU4sUUFBSSxFQUFFLFVBRFY7QUFFSUMsTUFBRSxFQUFFLFNBRlI7QUFHSUMsUUFBSSxFQUFFLGlCQUhWO0FBSUlFLGVBQVcsRUFBRSxJQUpqQjtBQUtJRCxZQUFRLEVBQUUsQ0FDTjtBQUNJSCxVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsZUFGUjtBQUdJQyxVQUFJLEVBQUUscUJBSFY7QUFJSUcsVUFBSSxFQUFFLHdDQUpWO0FBS0lDLFdBQUssRUFBRTtBQUxYLEtBRE0sRUFRTjtBQUNJTixVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsWUFGUjtBQUdJQyxVQUFJLEVBQUUsb0JBSFY7QUFJSUcsVUFBSSxFQUFFLHNGQUpWO0FBS0lDLFdBQUssRUFBRTtBQUxYLEtBUk0sRUFlTjtBQUNJTixVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsWUFGUjtBQUdJQyxVQUFJLEVBQUUsbUJBSFY7QUFJSUcsVUFBSSxFQUFFLDhEQUpWO0FBS0lDLFdBQUssRUFBRTtBQUxYLEtBZk07QUFMZCxHQS9GTSxFQTRITjtBQUNJTixRQUFJLEVBQUUsVUFEVjtBQUVJQyxNQUFFLEVBQUUsV0FGUjtBQUdJQyxRQUFJLEVBQUUsb0JBSFY7QUFJSUUsZUFBVyxFQUFFLElBSmpCO0FBS0lJLFNBQUssRUFBRSxLQUxYO0FBTUlMLFlBQVEsRUFBRSxDQUNOO0FBQ0lILFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxlQUZSO0FBR0lDLFVBQUksRUFBRSxnQkFIVjtBQUlJRyxVQUFJLEVBQUUsNkNBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0FETSxFQVFOO0FBQ0lOLFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxjQUZSO0FBR0lDLFVBQUksRUFBRSxlQUhWO0FBSUlHLFVBQUksRUFBRSxnRkFKVjtBQUtJQyxXQUFLLEVBQUUsS0FMWDtBQU1JQyxnQkFBVSxFQUFFO0FBTmhCLEtBUk07QUFOZCxHQTVITSxFQW9KTjtBQUNJUCxRQUFJLEVBQUUsVUFEVjtBQUVJQyxNQUFFLEVBQUUsUUFGUjtBQUdJQyxRQUFJLEVBQUUsb0JBSFY7QUFJSUUsZUFBVyxFQUFFLElBSmpCO0FBS0lJLFNBQUssRUFBRSxLQUxYO0FBTUlMLFlBQVEsRUFBRSxDQUNOO0FBQ0lILFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxjQUZSO0FBR0lDLFVBQUksRUFBRSxxQkFIVjtBQUlJRyxVQUFJLEVBQUUsOERBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0FETSxFQVFOO0FBQ0lOLFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxPQUZSO0FBR0lDLFVBQUksRUFBRSxjQUhWO0FBSUlHLFVBQUksRUFBRSxvREFKVjtBQUtJQyxXQUFLLEVBQUUsS0FMWDtBQU1JRyxZQUFNLEVBQUU7QUFOWixLQVJNO0FBTmQsR0FwSk07QUFKZCxDQURXLEVBbUxYO0FBQ0lULE1BQUksRUFBRSxZQURWO0FBRUlDLElBQUUsRUFBRSxRQUZSO0FBR0lDLE1BQUksRUFBRSxRQUhWO0FBSUlLLFlBQVUsRUFBRSx5QkFKaEI7QUFLSUosVUFBUSxFQUFFLENBQ047QUFDSUgsUUFBSSxFQUFFLFVBRFY7QUFFSUMsTUFBRSxFQUFFLFNBRlI7QUFHSUMsUUFBSSxFQUFFLFNBSFY7QUFJSUUsZUFBVyxFQUFFLElBSmpCO0FBS0lELFlBQVEsRUFBRSxDQUNOO0FBQ0lILFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxVQUZSO0FBR0lDLFVBQUksRUFBRSxpQkFIVjtBQUlJRyxVQUFJLEVBQUUsZ0RBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0FETSxFQVFOO0FBQ0lOLFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxXQUZSO0FBR0lDLFVBQUksRUFBRSxZQUhWO0FBSUlHLFVBQUksRUFBRSw0Q0FKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQVJNLEVBZU47QUFDSU4sVUFBSSxFQUFFLFFBRFY7QUFFSUMsUUFBRSxFQUFFLGVBRlI7QUFHSUMsVUFBSSxFQUFFLGlCQUhWO0FBSUlHLFVBQUksRUFBRSxrREFKVjtBQUtJQyxXQUFLLEVBQUUsS0FMWDtBQU1JQyxnQkFBVSxFQUFFO0FBTmhCLEtBZk0sRUF1Qk47QUFDSVAsVUFBSSxFQUFFLFFBRFY7QUFFSUMsUUFBRSxFQUFFLFVBRlI7QUFHSUMsVUFBSSxFQUFFLDBCQUhWO0FBSUlHLFVBQUksRUFBRSwrQkFKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQXZCTSxFQThCTjtBQUNJTixVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsV0FGUjtBQUdJQyxVQUFJLEVBQUUsWUFIVjtBQUlJRyxVQUFJLEVBQUUsMkJBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0E5Qk0sRUFxQ047QUFDSU4sVUFBSSxFQUFFLFFBRFY7QUFFSUMsUUFBRSxFQUFFLFdBRlI7QUFHSUMsVUFBSSxFQUFFLHNCQUhWO0FBSUlHLFVBQUksRUFBRSxtSEFKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQXJDTSxFQTRDTjtBQUNJTixVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsZ0JBRlI7QUFHSUMsVUFBSSxFQUFFLGtCQUhWO0FBSUlHLFVBQUksRUFBRSwyQ0FKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQTVDTTtBQUxkLEdBRE0sRUEyRE47QUFDSU4sUUFBSSxFQUFFLFVBRFY7QUFFSUMsTUFBRSxFQUFFLFlBRlI7QUFHSUMsUUFBSSxFQUFFLFlBSFY7QUFJSUUsZUFBVyxFQUFFLElBSmpCO0FBS0lELFlBQVEsRUFBRSxDQUNOO0FBQ0lILFVBQUksRUFBRSxRQURWO0FBRUlDLFFBQUUsRUFBRSxRQUZSO0FBR0lDLFVBQUksRUFBRSxRQUhWO0FBSUlHLFVBQUksRUFBRSx3Q0FKVjtBQUtJQyxXQUFLLEVBQUU7QUFMWCxLQURNLEVBUU47QUFDSU4sVUFBSSxFQUFFLFFBRFY7QUFFSUMsUUFBRSxFQUFFLEtBRlI7QUFHSUMsVUFBSSxFQUFFLGNBSFY7QUFJSUcsVUFBSSxFQUFFLHNCQUpWO0FBS0lDLFdBQUssRUFBRTtBQUxYLEtBUk0sRUFlTjtBQUNJTixVQUFJLEVBQUUsUUFEVjtBQUVJQyxRQUFFLEVBQUUsTUFGUjtBQUdJQyxVQUFJLEVBQUUsV0FIVjtBQUlJRyxVQUFJLEVBQUUsdUJBSlY7QUFLSUMsV0FBSyxFQUFFO0FBTFgsS0FmTTtBQUxkLEdBM0RNO0FBTGQsQ0FuTFcsQ0FBZiIsImZpbGUiOiIuL3NyYy9kYXRhL3NldHRpbmdzL2NvbmZpZy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IFtcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNvbGxlY3Rpb25cIixcclxuICAgICAgICBpZDogXCJzZXR0aW5nc1wiLFxyXG4gICAgICAgIG5hbWU6IFwiU2V0dGluZ3NcIixcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJnZW5lcmFsXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkdlbmVyYWxcIixcclxuICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImVtb3Rlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkVtb3RlIFN5c3RlbVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkVuYWJsZXMgQkQncyBlbW90ZSBzeXN0ZW1cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwicHVibGljU2VydmVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlB1YmxpYyBTZXJ2ZXJzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRGlzcGxheSBwdWJsaWMgc2VydmVycyBidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwidm9pY2VEaXNjb25uZWN0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVm9pY2UgRGlzY29ubmVjdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkRpc2Nvbm5lY3QgZnJvbSB2b2ljZSBzZXJ2ZXIgd2hlbiBjbG9zaW5nIERpc2NvcmRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInR3ZW50eUZvdXJIb3VyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiMjQgSG91ciBUaW1lc3RhbXBzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZXMgY2hhbm5lbHMgd2hlbiBpbiBtaW5pbWFsIG1vZGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjbGFzc05vcm1hbGl6ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJOb3JtYWxpemUgQ2xhc3Nlc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgc3RhYmxlIGNsYXNzZXMgdG8gZWxlbWVudHMgdG8gaGVscCB0aGVtZXMuIChlLmcuIGFkZHMgLmRhLWNoYW5uZWxzIHRvIC5jaGFubmVscy1JZTJsNkEpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInNob3dUb2FzdHNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTaG93IFRvYXN0c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImFwcGVhcmFuY2VcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQXBwZWFyYW5jZVwiLFxyXG4gICAgICAgICAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwidm9pY2VNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiVm9pY2UgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIGV2ZXJ5dGhpbmcgdGhhdCBpc24ndCB2b2ljZSBjaGF0XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJtaW5pbWFsTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIk1pbmltYWwgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGUgZWxlbWVudHMgYW5kIHJlZHVjZSB0aGUgc2l6ZSBvZiBlbGVtZW50c1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiaGlkZUNoYW5uZWxzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiSGlkZSBDaGFubmVsc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIGNoYW5uZWxzIHdoZW4gaW4gbWluaW1hbCBtb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlV2l0aDogXCJtaW5pbWFsTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImRhcmtNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGFyayBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiTWFrZSBjZXJ0YWluIGVsZW1lbnRzIGRhcmsgYnkgZGVmYXVsdFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjb2xvcmVkVGV4dFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkNvbG9yZWQgVGV4dFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIk1ha2UgdGV4dCBjb2xvdXIgdGhlIHNhbWUgYXMgcm9sZSBjb2xvclwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcImNvbnRlbnRcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiQ29udGVudCBNYW5hZ2VyXCIsXHJcbiAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjb250ZW50RXJyb3JzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiU2hvdyBDb250ZW50IEVycm9yc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3dzIGEgbW9kYWwgd2l0aCBwbHVnaW4vdGhlbWUgZXJyb3JzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImF1dG9TY3JvbGxcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJTY3JvbGwgVG8gU2V0dGluZ3NcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiYXV0b1JlbG9hZFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkF1dG9tYXRpYyBMb2FkaW5nXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQXV0b21hdGljYWxseSBsb2FkcywgcmVsb2FkcywgYW5kIHVubG9hZHMgcGx1Z2lucyBhbmQgdGhlbWVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJkZXZlbG9wZXJcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiRGV2ZWxvcGVyIFNldHRpbmdzXCIsXHJcbiAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNob3duOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJkZXZlbG9wZXJNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRGV2ZWxvcGVyIE1vZGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJBbGxvd3MgYWN0aXZhdGluZyBkZWJ1Z2dlciB3aGVuIHByZXNzaW5nIEY4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJjb3B5U2VsZWN0b3JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJDb3B5IFNlbGVjdG9yXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZVdpdGg6IFwiZGV2ZWxvcGVyTW9kZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJ3aW5kb3dcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiV2luZG93IFByZWZlcmVuY2VzXCIsXHJcbiAgICAgICAgICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHNob3duOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJ0cmFuc3BhcmVuY3lcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbmFibGUgVHJhbnNwYXJlbmN5XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRW5hYmxlcyB0aGUgbWFpbiB3aW5kb3cgdG8gYmUgc2VlLXRocm91Z2ggKHJlcXVpcmVzIHJlc3RhcnQpXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJmcmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIldpbmRvdyBGcmFtZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgdGhlIG5hdGl2ZSBvcyB3aW5kb3cgZnJhbWUgdG8gdGhlIG1haW4gd2luZG93XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZGVuOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXVxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgICB0eXBlOiBcImNvbGxlY3Rpb25cIixcclxuICAgICAgICBpZDogXCJlbW90ZXNcIixcclxuICAgICAgICBuYW1lOiBcIkVtb3Rlc1wiLFxyXG4gICAgICAgIGVuYWJsZVdpdGg6IFwic2V0dGluZ3MuZ2VuZXJhbC5lbW90ZXNcIixcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJnZW5lcmFsXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkdlbmVyYWxcIixcclxuICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImRvd25sb2FkXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRG93bmxvYWQgRW1vdGVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRG93bmxvYWQgZW1vdGVzIG9uY2UgYSB3ZWVrIHRvIHN0YXkgdXAgdG8gZGF0ZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogXCJlbW90ZU1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJFbW90ZSBNZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvdyBUd2l0Y2gvRmF2b3VyaXRlIGVtb3RlcyBpbiBlbW90ZSBtZW51XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImhpZGVFbW9qaU1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJIaWRlIEVtb2ppIE1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJIaWRlcyBEaXNjb3JkJ3MgZW1vamkgbWVudSB3aGVuIHVzaW5nIGVtb3RlIG1lbnVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVXaXRoOiBcImVtb3RlTWVudVwiXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImF1dG9DYXBzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IFwiRW1vdGUgQXV0b2NhcGl0YWxpemF0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiQXV0b2NhcGl0YWxpemUgZW1vdGUgY29tbWFuZHNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInNob3dOYW1lc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgTmFtZXNcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IGVtb3RlIG5hbWVzIG9uIGhvdmVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcIm1vZGlmaWVyc1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgRW1vdGUgTW9kaWZpZXJzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiRW5hYmxlIGVtb3RlIG1vZHMgKGZsaXAsIHNwaW4sIHB1bHNlLCBzcGluMiwgc3BpbjMsIDFzcGluLCAyc3BpbiwgM3NwaW4sIHRyLCBibCwgYnIsIHNoYWtlLCBzaGFrZTIsIHNoYWtlMywgZmxhcClcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiYW5pbWF0ZU9uSG92ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJBbmltYXRlIE9uIEhvdmVyXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdGU6IFwiT25seSBhbmltYXRlIHRoZSBlbW90ZSBtb2RpZmllcnMgb24gaG92ZXJcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcImNhdGVnb3J5XCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJjYXRlZ29yaWVzXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkNhdGVnb3JpZXNcIixcclxuICAgICAgICAgICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcInR3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIlR3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgVHdpdGNoIGdsb2JhbCAmIHN1YnNjcmliZXIgZW1vdGVzXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImZmelwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBcIkZyYW5rZXJGYWNlWlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RlOiBcIlNob3cgZW1vdGVzIGZyb20gRkZaXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBcImJ0dHZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogXCJCZXR0ZXJUVFZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90ZTogXCJTaG93IGVtb3RlcyBmcm9tIEJUVFZcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9XHJcbl07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/data/settings/config.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ __webpack_exports__[\"default\"] = ([{\n type: \"category\",\n id: \"general\",\n name: \"General\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"emotes\",\n name: \"Emote System\",\n note: \"Enables BD's emote system\",\n value: true\n }, {\n type: \"switch\",\n id: \"publicServers\",\n name: \"Public Servers\",\n note: \"Display public servers button\",\n value: true\n }, {\n type: \"switch\",\n id: \"voiceDisconnect\",\n name: \"Voice Disconnect\",\n note: \"Disconnect from voice server when closing Discord\",\n value: false\n }, {\n type: \"switch\",\n id: \"twentyFourHour\",\n name: \"24 Hour Timestamps\",\n note: \"Hides channels when in minimal mode\",\n value: false\n }, {\n type: \"switch\",\n id: \"classNormalizer\",\n name: \"Normalize Classes\",\n note: \"Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)\",\n value: true\n }, {\n type: \"switch\",\n id: \"showToasts\",\n name: \"Show Toasts\",\n note: \"Shows a small notification for important information\",\n value: true\n }]\n}, {\n type: \"category\",\n id: \"appearance\",\n name: \"Appearance\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"voiceMode\",\n name: \"Voice Mode\",\n note: \"Hides everything that isn't voice chat\",\n value: false\n }, {\n type: \"switch\",\n id: \"minimalMode\",\n name: \"Minimal Mode\",\n note: \"Hide elements and reduce the size of elements\",\n value: false\n }, {\n type: \"switch\",\n id: \"hideChannels\",\n name: \"Hide Channels\",\n note: \"Hides channels when in minimal mode\",\n value: false,\n enableWith: \"minimalMode\"\n }, {\n type: \"switch\",\n id: \"darkMode\",\n name: \"Dark Mode\",\n note: \"Make certain elements dark by default\",\n value: true\n }, {\n type: \"switch\",\n id: \"coloredText\",\n name: \"Colored Text\",\n note: \"Make text colour the same as role color\",\n value: false\n }]\n}, {\n type: \"category\",\n id: \"content\",\n name: \"Content Manager\",\n collapsible: true,\n settings: [{\n type: \"switch\",\n id: \"contentErrors\",\n name: \"Show Content Errors\",\n note: \"Shows a modal with plugin/theme errors\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoScroll\",\n name: \"Scroll To Settings\",\n note: \"Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)\",\n value: true\n }, {\n type: \"switch\",\n id: \"autoReload\",\n name: \"Automatic Loading\",\n note: \"Automatically loads, reloads, and unloads plugins and themes\",\n value: true\n }]\n}, {\n type: \"category\",\n id: \"developer\",\n name: \"Developer Settings\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"developerMode\",\n name: \"Developer Mode\",\n note: \"Allows activating debugger when pressing F8\",\n value: false\n }, {\n type: \"switch\",\n id: \"copySelector\",\n name: \"Copy Selector\",\n note: \"Adds a \\\"Copy Selector\\\" option to context menus when developer mode is active\",\n value: false,\n enableWith: \"developerMode\"\n }]\n}, {\n type: \"category\",\n id: \"window\",\n name: \"Window Preferences\",\n collapsible: true,\n shown: false,\n settings: [{\n type: \"switch\",\n id: \"transparency\",\n name: \"Enable Transparency\",\n note: \"Enables the main window to be see-through (requires restart)\",\n value: false\n }, {\n type: \"switch\",\n id: \"frame\",\n name: \"Window Frame\",\n note: \"Adds the native os window frame to the main window\",\n value: false,\n hidden: true\n }]\n}]);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2RhdGEvc2V0dGluZ3MvY29uZmlnLmpzP2ZmOGUiXSwibmFtZXMiOlsidHlwZSIsImlkIiwibmFtZSIsImNvbGxhcHNpYmxlIiwic2V0dGluZ3MiLCJub3RlIiwidmFsdWUiLCJlbmFibGVXaXRoIiwic2hvd24iLCJoaWRkZW4iXSwibWFwcGluZ3MiOiJBQUFBO0FBQWUsZ0VBQ1g7QUFDSUEsTUFBSSxFQUFFLFVBRFY7QUFFSUMsSUFBRSxFQUFFLFNBRlI7QUFHSUMsTUFBSSxFQUFFLFNBSFY7QUFJSUMsYUFBVyxFQUFFLElBSmpCO0FBS0lDLFVBQVEsRUFBRSxDQUNOO0FBQ0lKLFFBQUksRUFBRSxRQURWO0FBRUlDLE1BQUUsRUFBRSxRQUZSO0FBR0lDLFFBQUksRUFBRSxjQUhWO0FBSUlHLFFBQUksRUFBRSwyQkFKVjtBQUtJQyxTQUFLLEVBQUU7QUFMWCxHQURNLEVBUU47QUFDSU4sUUFBSSxFQUFFLFFBRFY7QUFFSUMsTUFBRSxFQUFFLGVBRlI7QUFHSUMsUUFBSSxFQUFFLGdCQUhWO0FBSUlHLFFBQUksRUFBRSwrQkFKVjtBQUtJQyxTQUFLLEVBQUU7QUFMWCxHQVJNLEVBZU47QUFDSU4sUUFBSSxFQUFFLFFBRFY7QUFFSUMsTUFBRSxFQUFFLGlCQUZSO0FBR0lDLFFBQUksRUFBRSxrQkFIVjtBQUlJRyxRQUFJLEVBQUUsbURBSlY7QUFLSUMsU0FBSyxFQUFFO0FBTFgsR0FmTSxFQXNCTjtBQUNJTixRQUFJLEVBQUUsUUFEVjtBQUVJQyxNQUFFLEVBQUUsZ0JBRlI7QUFHSUMsUUFBSSxFQUFFLG9CQUhWO0FBSUlHLFFBQUksRUFBRSxxQ0FKVjtBQUtJQyxTQUFLLEVBQUU7QUFMWCxHQXRCTSxFQTZCTjtBQUNJTixRQUFJLEVBQUUsUUFEVjtBQUVJQyxNQUFFLEVBQUUsaUJBRlI7QUFHSUMsUUFBSSxFQUFFLG1CQUhWO0FBSUlHLFFBQUksRUFBRSw4RkFKVjtBQUtJQyxTQUFLLEVBQUU7QUFMWCxHQTdCTSxFQW9D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QUpqQjtBQUtJSyxPQUFLLEVBQUUsS0FMWDtBQU1JSixVQUFRLEVBQUUsQ0FDTjtBQUNJSixRQUFJLEVBQUUsUUFEVjtBQUVJQyxNQUFFLEVBQUUsY0FGUjtBQUdJQyxRQUFJLEVBQUUscUJBSFY7QUFJSUcsUUFBSSxFQUFFLDhEQUpWO0FBS0lDLFNBQUssRUFBRTtBQUxYLEdBRE0sRUFRTjtBQUNJTixRQUFJLEVBQUUsUUFEVjtBQUVJQyxNQUFFLEVBQUUsT0FGUjtBQUdJQyxRQUFJLEVBQUUsY0FIVjtBQUlJRyxRQUFJLEVBQUUsb0RBSlY7QUFLSUMsU0FBSyxFQUFFLEtBTFg7QUFNSUcsVUFBTSxFQUFFO0FBTlosR0FSTTtBQU5kLENBcEpXLENBQWYiLCJmaWxlIjoiLi9zcmMvZGF0YS9zZXR0aW5ncy9jb25maWcuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBbXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImdlbmVyYWxcIixcclxuICAgICAgICBuYW1lOiBcIkdlbmVyYWxcIixcclxuICAgICAgICBjb2xsYXBzaWJsZTogdHJ1ZSxcclxuICAgICAgICBzZXR0aW5nczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiZW1vdGVzXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkVtb3RlIFN5c3RlbVwiLFxyXG4gICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIEJEJ3MgZW1vdGUgc3lzdGVtXCIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdHJ1ZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwicHVibGljU2VydmVyc1wiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJQdWJsaWMgU2VydmVyc1wiLFxyXG4gICAgICAgICAgICAgICAgbm90ZTogXCJEaXNwbGF5IHB1YmxpYyBzZXJ2ZXJzIGJ1dHRvblwiLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcInZvaWNlRGlzY29ubmVjdFwiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJWb2ljZSBEaXNjb25uZWN0XCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIkRpc2Nvbm5lY3QgZnJvbSB2b2ljZSBzZXJ2ZXIgd2hlbiBjbG9zaW5nIERpc2NvcmRcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwidHdlbnR5Rm91ckhvdXJcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiMjQgSG91ciBUaW1lc3RhbXBzXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIGNoYW5uZWxzIHdoZW4gaW4gbWluaW1hbCBtb2RlXCIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJjbGFzc05vcm1hbGl6ZXJcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiTm9ybWFsaXplIENsYXNzZXNcIixcclxuICAgICAgICAgICAgICAgIG5vdGU6IFwiQWRkcyBzdGFibGUgY2xhc3NlcyB0byBlbGVtZW50cyB0byBoZWxwIHRoZW1lcy4gKGUuZy4gYWRkcyAuZGEtY2hhbm5lbHMgdG8gLmNoYW5uZWxzLUllMmw2QSlcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJzaG93VG9hc3RzXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgVG9hc3RzXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIlNob3dzIGEgc21hbGwgbm90aWZpY2F0aW9uIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb25cIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBdXHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICAgIHR5cGU6IFwiY2F0ZWdvcnlcIixcclxuICAgICAgICBpZDogXCJhcHBlYXJhbmNlXCIsXHJcbiAgICAgICAgbmFtZTogXCJBcHBlYXJhbmNlXCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2V0dGluZ3M6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcInZvaWNlTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJWb2ljZSBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIkhpZGVzIGV2ZXJ5dGhpbmcgdGhhdCBpc24ndCB2b2ljZSBjaGF0XCIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2VcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJzd2l0Y2hcIixcclxuICAgICAgICAgICAgICAgIGlkOiBcIm1pbmltYWxNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIk1pbmltYWwgTW9kZVwiLFxyXG4gICAgICAgICAgICAgICAgbm90ZTogXCJIaWRlIGVsZW1lbnRzIGFuZCByZWR1Y2UgdGhlIHNpemUgb2YgZWxlbWVudHNcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiaGlkZUNoYW5uZWxzXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkhpZGUgQ2hhbm5lbHNcIixcclxuICAgICAgICAgICAgICAgIG5vdGU6IFwiSGlkZXMgY2hhbm5lbHMgd2hlbiBpbiBtaW5pbWFsIG1vZGVcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIGVuYWJsZVdpdGg6IFwibWluaW1hbE1vZGVcIlxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiZGFya01vZGVcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiRGFyayBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIk1ha2UgY2VydGFpbiBlbGVtZW50cyBkYXJrIGJ5IGRlZmF1bHRcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJjb2xvcmVkVGV4dFwiLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogXCJDb2xvcmVkIFRleHRcIixcclxuICAgICAgICAgICAgICAgIG5vdGU6IFwiTWFrZSB0ZXh0IGNvbG91ciB0aGUgc2FtZSBhcyByb2xlIGNvbG9yXCIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImNvbnRlbnRcIixcclxuICAgICAgICBuYW1lOiBcIkNvbnRlbnQgTWFuYWdlclwiLFxyXG4gICAgICAgIGNvbGxhcHNpYmxlOiB0cnVlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJjb250ZW50RXJyb3JzXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlNob3cgQ29udGVudCBFcnJvcnNcIixcclxuICAgICAgICAgICAgICAgIG5vdGU6IFwiU2hvd3MgYSBtb2RhbCB3aXRoIHBsdWdpbi90aGVtZSBlcnJvcnNcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJhdXRvU2Nyb2xsXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIlNjcm9sbCBUbyBTZXR0aW5nc1wiLFxyXG4gICAgICAgICAgICAgICAgbm90ZTogXCJBdXRvLXNjcm9sbHMgdG8gYSBwbHVnaW4ncyBzZXR0aW5ncyB3aGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCAob25seSBpZiBvdXQgb2YgdmlldylcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiB0cnVlXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJhdXRvUmVsb2FkXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkF1dG9tYXRpYyBMb2FkaW5nXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIkF1dG9tYXRpY2FsbHkgbG9hZHMsIHJlbG9hZHMsIGFuZCB1bmxvYWRzIHBsdWdpbnMgYW5kIHRoZW1lc1wiLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcImRldmVsb3BlclwiLFxyXG4gICAgICAgIG5hbWU6IFwiRGV2ZWxvcGVyIFNldHRpbmdzXCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2hvd246IGZhbHNlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJkZXZlbG9wZXJNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkRldmVsb3BlciBNb2RlXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIkFsbG93cyBhY3RpdmF0aW5nIGRlYnVnZ2VyIHdoZW4gcHJlc3NpbmcgRjhcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiY29weVNlbGVjdG9yXCIsXHJcbiAgICAgICAgICAgICAgICBuYW1lOiBcIkNvcHkgU2VsZWN0b3JcIixcclxuICAgICAgICAgICAgICAgIG5vdGU6IFwiQWRkcyBhIFxcXCJDb3B5IFNlbGVjdG9yXFxcIiBvcHRpb24gdG8gY29udGV4dCBtZW51cyB3aGVuIGRldmVsb3BlciBtb2RlIGlzIGFjdGl2ZVwiLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgZW5hYmxlV2l0aDogXCJkZXZlbG9wZXJNb2RlXCJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgICAgdHlwZTogXCJjYXRlZ29yeVwiLFxyXG4gICAgICAgIGlkOiBcIndpbmRvd1wiLFxyXG4gICAgICAgIG5hbWU6IFwiV2luZG93IFByZWZlcmVuY2VzXCIsXHJcbiAgICAgICAgY29sbGFwc2libGU6IHRydWUsXHJcbiAgICAgICAgc2hvd246IGZhbHNlLFxyXG4gICAgICAgIHNldHRpbmdzOiBbXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHR5cGU6IFwic3dpdGNoXCIsXHJcbiAgICAgICAgICAgICAgICBpZDogXCJ0cmFuc3BhcmVuY3lcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiRW5hYmxlIFRyYW5zcGFyZW5jeVwiLFxyXG4gICAgICAgICAgICAgICAgbm90ZTogXCJFbmFibGVzIHRoZSBtYWluIHdpbmRvdyB0byBiZSBzZWUtdGhyb3VnaCAocmVxdWlyZXMgcmVzdGFydClcIixcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBmYWxzZVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcInN3aXRjaFwiLFxyXG4gICAgICAgICAgICAgICAgaWQ6IFwiZnJhbWVcIixcclxuICAgICAgICAgICAgICAgIG5hbWU6IFwiV2luZG93IEZyYW1lXCIsXHJcbiAgICAgICAgICAgICAgICBub3RlOiBcIkFkZHMgdGhlIG5hdGl2ZSBvcyB3aW5kb3cgZnJhbWUgdG8gdGhlIG1haW4gd2luZG93XCIsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBoaWRkZW46IHRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIF1cclxuICAgIH1cclxuXTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/data/settings/config.js\n"); /***/ }), @@ -371,7 +335,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CoreWrapper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"patchModuleLoad\", function() { return patchModuleLoad; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _localstorage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./localstorage */ \"./src/localstorage.js\");\n/* harmony import */ var _modules_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/core */ \"./src/modules/core.js\");\n/* harmony import */ var _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _modules_thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _modules_oldstorage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/oldstorage */ \"./src/modules/oldstorage.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/emitter */ \"./src/modules/emitter.js\");\n\n\n\n\n\n\n\n // Perform some setup\n\nObject(_localstorage__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\nconst loadingIcon = document.createElement(\"div\");\nloadingIcon.className = \"bd-loaderv2\";\nloadingIcon.title = \"BandagedBD is loading...\";\ndocument.body.appendChild(loadingIcon); // window.Core = Core;\n\nwindow.BdApi = _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; // window.settings = SettingsInfo;\n// window.settingsCookie = SettingsCookie;\n// window.pluginCookie = PluginCookie;\n// window.themeCookie = ThemeCookie;\n\nwindow.pluginModule = _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\nwindow.themeModule = _modules_thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; // window.bdthemes = Themes;\n// window.bdplugins = Plugins;\n\nwindow.bdEmotes = data__WEBPACK_IMPORTED_MODULE_0__[\"Emotes\"];\nwindow.bemotes = data__WEBPACK_IMPORTED_MODULE_0__[\"EmoteBlacklist\"];\nwindow.bdPluginStorage = _modules_oldstorage__WEBPACK_IMPORTED_MODULE_6__[\"bdPluginStorage\"];\nwindow.BDEvents = _modules_emitter__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nwindow.bdConfig = data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"];\nclass CoreWrapper {\n constructor(config) {\n _modules_core__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setConfig(config);\n }\n\n init() {\n _modules_core__WEBPACK_IMPORTED_MODULE_2__[\"default\"].init();\n }\n\n}\nfunction patchModuleLoad() {\n const namespace = \"betterdiscord\";\n const prefix = `${namespace}/`;\n\n const Module = __webpack_require__(/*! module */ \"module\");\n\n const load = Module._load; // const resolveFilename = Module._resolveFilename;\n\n Module._load = function (request) {\n if (request === namespace || request.startsWith(prefix)) {\n const requested = request.substr(prefix.length);\n if (requested == \"api\") return _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n }\n\n return load.apply(this, arguments);\n }; // Module._resolveFilename = function (request, parent, isMain) {\n // if (request === \"betterdiscord\" || request.startsWith(\"betterdiscord/\")) {\n // const contentPath = PluginManager.getPluginPathByModule(parent);\n // if (contentPath) return request;\n // }\n // return resolveFilename.apply(this, arguments);\n // };\n\n\n return function () {\n Module._load = load;\n };\n} // export function getPluginByModule(module) {\n// return this.localContent.find(plugin => module.filename === plugin.contentPath || module.filename.startsWith(plugin.contentPath + path.sep));\n// }\n// export function getPluginPathByModule(module) {\n// return Object.keys(this.pluginApiInstances).find(contentPath => module.filename === contentPath || module.filename.startsWith(contentPath + path.sep));\n// }\n// var settingsPanel, emoteModule, quickEmoteMenu, voiceMode,, dMode, publicServersModule;\n// var bdConfig = null;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2luZGV4LmpzP2I2MzUiXSwibmFtZXMiOlsicHJveHlMb2NhbFN0b3JhZ2UiLCJsb2FkaW5nSWNvbiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInRpdGxlIiwiYm9keSIsImFwcGVuZENoaWxkIiwid2luZG93IiwiQmRBcGkiLCJwbHVnaW5Nb2R1bGUiLCJQbHVnaW5NYW5hZ2VyIiwidGhlbWVNb2R1bGUiLCJUaGVtZU1hbmFnZXIiLCJiZEVtb3RlcyIsIkVtb3RlcyIsImJlbW90ZXMiLCJFbW90ZUJsYWNrbGlzdCIsImJkUGx1Z2luU3RvcmFnZSIsIkJERXZlbnRzIiwiRXZlbnRzIiwiYmRDb25maWciLCJDb25maWciLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiQ29yZSIsInNldENvbmZpZyIsImluaXQiLCJwYXRjaE1vZHVsZUxvYWQiLCJuYW1lc3BhY2UiLCJwcmVmaXgiLCJNb2R1bGUiLCJyZXF1aXJlIiwibG9hZCIsIl9sb2FkIiwicmVxdWVzdCIsInN0YXJ0c1dpdGgiLCJyZXF1ZXN0ZWQiLCJzdWJzdHIiLCJsZW5ndGgiLCJhcHBseSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBR0E7O0FBQ0FBLDZEQUFpQjtBQUNqQixNQUFNQyxXQUFXLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixLQUF2QixDQUFwQjtBQUNBRixXQUFXLENBQUNHLFNBQVosR0FBd0IsYUFBeEI7QUFDQUgsV0FBVyxDQUFDSSxLQUFaLEdBQW9CLDBCQUFwQjtBQUNBSCxRQUFRLENBQUNJLElBQVQsQ0FBY0MsV0FBZCxDQUEwQk4sV0FBMUIsRSxDQUVBOztBQUNBTyxNQUFNLENBQUNDLEtBQVAsR0FBZUEsMERBQWYsQyxDQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBRCxNQUFNLENBQUNFLFlBQVAsR0FBc0JDLDhEQUF0QjtBQUNBSCxNQUFNLENBQUNJLFdBQVAsR0FBcUJDLDZEQUFyQixDLENBQ0E7QUFDQTs7QUFDQUwsTUFBTSxDQUFDTSxRQUFQLEdBQWtCQywyQ0FBbEI7QUFDQVAsTUFBTSxDQUFDUSxPQUFQLEdBQWlCQyxtREFBakI7QUFDQVQsTUFBTSxDQUFDVSxlQUFQLEdBQXlCQSxtRUFBekI7QUFHQVYsTUFBTSxDQUFDVyxRQUFQLEdBQWtCQyx3REFBbEI7QUFDQVosTUFBTSxDQUFDYSxRQUFQLEdBQWtCQywyQ0FBbEI7QUFFZSxNQUFNQyxXQUFOLENBQWtCO0FBQzdCQyxhQUFXLENBQUNDLE1BQUQsRUFBUztBQUNoQkMseURBQUksQ0FBQ0MsU0FBTCxDQUFlRixNQUFmO0FBQ0g7O0FBRURHLE1BQUksR0FBRztBQUNIRix5REFBSSxDQUFDRSxJQUFMO0FBQ0g7O0FBUDRCO0FBVTFCLFNBQVNDLGVBQVQsR0FBMkI7QUFDOUIsUUFBTUMsU0FBUyxHQUFHLGVBQWxCO0FBQ0EsUUFBTUMsTUFBTSxHQUFJLEdBQUVELFNBQVUsR0FBNUI7O0FBQ0EsUUFBTUUsTUFBTSxHQUFHQyxtQkFBTyxDQUFDLHNCQUFELENBQXRCOztBQUNBLFFBQU1DLElBQUksR0FBR0YsTUFBTSxDQUFDRyxLQUFwQixDQUo4QixDQUs5Qjs7QUFFQUgsUUFBTSxDQUFDRyxLQUFQLEdBQWUsVUFBVUMsT0FBVixFQUFtQjtBQUM5QixRQUFJQSxPQUFPLEtBQUtOLFNBQVosSUFBeUJNLE9BQU8sQ0FBQ0MsVUFBUixDQUFtQk4sTUFBbkIsQ0FBN0IsRUFBeUQ7QUFDckQsWUFBTU8sU0FBUyxHQUFHRixPQUFPLENBQUNHLE1BQVIsQ0FBZVIsTUFBTSxDQUFDUyxNQUF0QixDQUFsQjtBQUNBLFVBQUlGLFNBQVMsSUFBSSxLQUFqQixFQUF3QixPQUFPN0IsMERBQVA7QUFDM0I7O0FBRUQsV0FBT3lCLElBQUksQ0FBQ08sS0FBTCxDQUFXLElBQVgsRUFBaUJDLFNBQWpCLENBQVA7QUFDSCxHQVBELENBUDhCLENBZ0I5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7O0FBRUEsU0FBTyxZQUFXO0FBQ2RWLFVBQU0sQ0FBQ0csS0FBUCxHQUFlRCxJQUFmO0FBQ0gsR0FGRDtBQUdILEMsQ0FFRDtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWcsIC8qU2V0dGluZ3NDb29raWUsIFNldHRpbmdzSW5mbywgUGx1Z2luQ29va2llLCBUaGVtZUNvb2tpZSwgUGx1Z2lucywgVGhlbWVzLCovIEVtb3RlcywgRW1vdGVCbGFja2xpc3R9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBwcm94eUxvY2FsU3RvcmFnZSBmcm9tIFwiLi9sb2NhbHN0b3JhZ2VcIjtcclxuaW1wb3J0IENvcmUgZnJvbSBcIi4vbW9kdWxlcy9jb3JlXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi9tb2R1bGVzL3BsdWdpbmFwaVwiO1xyXG5pbXBvcnQgUGx1Z2luTWFuYWdlciBmcm9tIFwiLi9tb2R1bGVzL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi9tb2R1bGVzL3RoZW1lbWFuYWdlclwiO1xyXG5pbXBvcnQge2JkUGx1Z2luU3RvcmFnZX0gZnJvbSBcIi4vbW9kdWxlcy9vbGRzdG9yYWdlXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vbW9kdWxlcy9lbWl0dGVyXCI7XHJcblxyXG4vLyBQZXJmb3JtIHNvbWUgc2V0dXBcclxucHJveHlMb2NhbFN0b3JhZ2UoKTtcclxuY29uc3QgbG9hZGluZ0ljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5sb2FkaW5nSWNvbi5jbGFzc05hbWUgPSBcImJkLWxvYWRlcnYyXCI7XHJcbmxvYWRpbmdJY29uLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsb2FkaW5nSWNvbik7XHJcblxyXG4vLyB3aW5kb3cuQ29yZSA9IENvcmU7XHJcbndpbmRvdy5CZEFwaSA9IEJkQXBpO1xyXG4vLyB3aW5kb3cuc2V0dGluZ3MgPSBTZXR0aW5nc0luZm87XHJcbi8vIHdpbmRvdy5zZXR0aW5nc0Nvb2tpZSA9IFNldHRpbmdzQ29va2llO1xyXG4vLyB3aW5kb3cucGx1Z2luQ29va2llID0gUGx1Z2luQ29va2llO1xyXG4vLyB3aW5kb3cudGhlbWVDb29raWUgPSBUaGVtZUNvb2tpZTtcclxud2luZG93LnBsdWdpbk1vZHVsZSA9IFBsdWdpbk1hbmFnZXI7XHJcbndpbmRvdy50aGVtZU1vZHVsZSA9IFRoZW1lTWFuYWdlcjtcclxuLy8gd2luZG93LmJkdGhlbWVzID0gVGhlbWVzO1xyXG4vLyB3aW5kb3cuYmRwbHVnaW5zID0gUGx1Z2lucztcclxud2luZG93LmJkRW1vdGVzID0gRW1vdGVzO1xyXG53aW5kb3cuYmVtb3RlcyA9IEVtb3RlQmxhY2tsaXN0O1xyXG53aW5kb3cuYmRQbHVnaW5TdG9yYWdlID0gYmRQbHVnaW5TdG9yYWdlO1xyXG5cclxuXHJcbndpbmRvdy5CREV2ZW50cyA9IEV2ZW50cztcclxud2luZG93LmJkQ29uZmlnID0gQ29uZmlnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29yZVdyYXBwZXIge1xyXG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XHJcbiAgICAgICAgQ29yZS5zZXRDb25maWcoY29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0KCkge1xyXG4gICAgICAgIENvcmUuaW5pdCgpO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2hNb2R1bGVMb2FkKCkge1xyXG4gICAgY29uc3QgbmFtZXNwYWNlID0gXCJiZXR0ZXJkaXNjb3JkXCI7XHJcbiAgICBjb25zdCBwcmVmaXggPSBgJHtuYW1lc3BhY2V9L2A7XHJcbiAgICBjb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpO1xyXG4gICAgY29uc3QgbG9hZCA9IE1vZHVsZS5fbG9hZDtcclxuICAgIC8vIGNvbnN0IHJlc29sdmVGaWxlbmFtZSA9IE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lO1xyXG5cclxuICAgIE1vZHVsZS5fbG9hZCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XHJcbiAgICAgICAgaWYgKHJlcXVlc3QgPT09IG5hbWVzcGFjZSB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ZWQgPSByZXF1ZXN0LnN1YnN0cihwcmVmaXgubGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlcXVlc3RlZCA9PSBcImFwaVwiKSByZXR1cm4gQmRBcGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbG9hZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZSA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBwYXJlbnQsIGlzTWFpbikge1xyXG4gICAgLy8gICAgIGlmIChyZXF1ZXN0ID09PSBcImJldHRlcmRpc2NvcmRcIiB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgoXCJiZXR0ZXJkaXNjb3JkL1wiKSkge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBjb250ZW50UGF0aCA9IFBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luUGF0aEJ5TW9kdWxlKHBhcmVudCk7XHJcbiAgICAvLyAgICAgICAgIGlmIChjb250ZW50UGF0aCkgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICByZXR1cm4gcmVzb2x2ZUZpbGVuYW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAvLyB9O1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICBNb2R1bGUuX2xvYWQgPSBsb2FkO1xyXG4gICAgfTtcclxufVxyXG5cclxuLy8gZXhwb3J0IGZ1bmN0aW9uIGdldFBsdWdpbkJ5TW9kdWxlKG1vZHVsZSkge1xyXG4vLyAgICAgcmV0dXJuIHRoaXMubG9jYWxDb250ZW50LmZpbmQocGx1Z2luID0+IG1vZHVsZS5maWxlbmFtZSA9PT0gcGx1Z2luLmNvbnRlbnRQYXRoIHx8IG1vZHVsZS5maWxlbmFtZS5zdGFydHNXaXRoKHBsdWdpbi5jb250ZW50UGF0aCArIHBhdGguc2VwKSk7XHJcbi8vIH1cclxuXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiBnZXRQbHVnaW5QYXRoQnlNb2R1bGUobW9kdWxlKSB7XHJcbi8vICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5wbHVnaW5BcGlJbnN0YW5jZXMpLmZpbmQoY29udGVudFBhdGggPT4gbW9kdWxlLmZpbGVuYW1lID09PSBjb250ZW50UGF0aCB8fCBtb2R1bGUuZmlsZW5hbWUuc3RhcnRzV2l0aChjb250ZW50UGF0aCArIHBhdGguc2VwKSk7XHJcbi8vIH1cclxuXHJcbi8vIHZhciBzZXR0aW5nc1BhbmVsLCBlbW90ZU1vZHVsZSwgcXVpY2tFbW90ZU1lbnUsIHZvaWNlTW9kZSwsIGRNb2RlLCBwdWJsaWNTZXJ2ZXJzTW9kdWxlO1xyXG4vLyB2YXIgYmRDb25maWcgPSBudWxsOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/index.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CoreWrapper; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"patchModuleLoad\", function() { return patchModuleLoad; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _localstorage__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./localstorage */ \"./src/localstorage.js\");\n/* harmony import */ var _modules_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/core */ \"./src/modules/core.js\");\n/* harmony import */ var _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _modules_thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _modules_oldstorage__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/oldstorage */ \"./src/modules/oldstorage.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./builtins/emotes */ \"./src/builtins/emotes.js\");\n\n\n\n\n\n\n\n\n\n // Perform some setup\n\nObject(_localstorage__WEBPACK_IMPORTED_MODULE_1__[\"default\"])();\nconst loadingIcon = document.createElement(\"div\");\nloadingIcon.className = \"bd-loaderv2\";\nloadingIcon.title = \"BandagedBD is loading...\";\ndocument.body.appendChild(loadingIcon); // window.Core = Core;\n\nwindow.BdApi = _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; // window.settings = SettingsInfo;\n// window.settingsCookie = SettingsCookie;\n// window.pluginCookie = PluginCookie;\n// window.themeCookie = ThemeCookie;\n\nwindow.pluginModule = _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"];\nwindow.themeModule = _modules_thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; // window.bdthemes = Themes;\n// window.bdplugins = Plugins;\n\nwindow.bdEmotes = _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Emotes;\nwindow.bemotes = _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__[\"default\"].blacklist;\nwindow.bdPluginStorage = _modules_oldstorage__WEBPACK_IMPORTED_MODULE_6__[\"bdPluginStorage\"];\nwindow.settingsModule = _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\nwindow.BDEvents = _modules_emitter__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nwindow.bdConfig = data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"];\nclass CoreWrapper {\n constructor(config) {\n _modules_core__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setConfig(config);\n }\n\n init() {\n _modules_core__WEBPACK_IMPORTED_MODULE_2__[\"default\"].init();\n }\n\n}\nfunction patchModuleLoad() {\n const namespace = \"betterdiscord\";\n const prefix = `${namespace}/`;\n\n const Module = __webpack_require__(/*! module */ \"module\");\n\n const load = Module._load; // const resolveFilename = Module._resolveFilename;\n\n Module._load = function (request) {\n if (request === namespace || request.startsWith(prefix)) {\n const requested = request.substr(prefix.length);\n if (requested == \"api\") return _modules_pluginapi__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\n }\n\n return load.apply(this, arguments);\n }; // Module._resolveFilename = function (request, parent, isMain) {\n // if (request === \"betterdiscord\" || request.startsWith(\"betterdiscord/\")) {\n // const contentPath = PluginManager.getPluginPathByModule(parent);\n // if (contentPath) return request;\n // }\n // return resolveFilename.apply(this, arguments);\n // };\n\n\n return function () {\n Module._load = load;\n };\n} // export function getPluginByModule(module) {\n// return this.localContent.find(plugin => module.filename === plugin.contentPath || module.filename.startsWith(plugin.contentPath + path.sep));\n// }\n// export function getPluginPathByModule(module) {\n// return Object.keys(this.pluginApiInstances).find(contentPath => module.filename === contentPath || module.filename.startsWith(contentPath + path.sep));\n// }\n// var settingsPanel, emoteModule, quickEmoteMenu, voiceMode,, dMode, publicServersModule;\n// var bdConfig = null;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2luZGV4LmpzP2I2MzUiXSwibmFtZXMiOlsicHJveHlMb2NhbFN0b3JhZ2UiLCJsb2FkaW5nSWNvbiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInRpdGxlIiwiYm9keSIsImFwcGVuZENoaWxkIiwid2luZG93IiwiQmRBcGkiLCJwbHVnaW5Nb2R1bGUiLCJQbHVnaW5NYW5hZ2VyIiwidGhlbWVNb2R1bGUiLCJUaGVtZU1hbmFnZXIiLCJiZEVtb3RlcyIsIkVtb3RlTW9kdWxlIiwiRW1vdGVzIiwiYmVtb3RlcyIsImJsYWNrbGlzdCIsImJkUGx1Z2luU3RvcmFnZSIsInNldHRpbmdzTW9kdWxlIiwiU2V0dGluZ3MiLCJCREV2ZW50cyIsIkV2ZW50cyIsImJkQ29uZmlnIiwiQ29uZmlnIiwiQ29yZVdyYXBwZXIiLCJjb25zdHJ1Y3RvciIsImNvbmZpZyIsIkNvcmUiLCJzZXRDb25maWciLCJpbml0IiwicGF0Y2hNb2R1bGVMb2FkIiwibmFtZXNwYWNlIiwicHJlZml4IiwiTW9kdWxlIiwicmVxdWlyZSIsImxvYWQiLCJfbG9hZCIsInJlcXVlc3QiLCJzdGFydHNXaXRoIiwicmVxdWVzdGVkIiwic3Vic3RyIiwibGVuZ3RoIiwiYXBwbHkiLCJhcmd1bWVudHMiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0NBR0E7O0FBQ0FBLDZEQUFpQjtBQUNqQixNQUFNQyxXQUFXLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixLQUF2QixDQUFwQjtBQUNBRixXQUFXLENBQUNHLFNBQVosR0FBd0IsYUFBeEI7QUFDQUgsV0FBVyxDQUFDSSxLQUFaLEdBQW9CLDBCQUFwQjtBQUNBSCxRQUFRLENBQUNJLElBQVQsQ0FBY0MsV0FBZCxDQUEwQk4sV0FBMUIsRSxDQUVBOztBQUNBTyxNQUFNLENBQUNDLEtBQVAsR0FBZUEsMERBQWYsQyxDQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUNBRCxNQUFNLENBQUNFLFlBQVAsR0FBc0JDLDhEQUF0QjtBQUNBSCxNQUFNLENBQUNJLFdBQVAsR0FBcUJDLDZEQUFyQixDLENBQ0E7QUFDQTs7QUFDQUwsTUFBTSxDQUFDTSxRQUFQLEdBQWtCQyx3REFBVyxDQUFDQyxNQUE5QjtBQUNBUixNQUFNLENBQUNTLE9BQVAsR0FBaUJGLHdEQUFXLENBQUNHLFNBQTdCO0FBQ0FWLE1BQU0sQ0FBQ1csZUFBUCxHQUF5QkEsbUVBQXpCO0FBQ0FYLE1BQU0sQ0FBQ1ksY0FBUCxHQUF3QkMsZ0VBQXhCO0FBR0FiLE1BQU0sQ0FBQ2MsUUFBUCxHQUFrQkMsd0RBQWxCO0FBQ0FmLE1BQU0sQ0FBQ2dCLFFBQVAsR0FBa0JDLDJDQUFsQjtBQUVlLE1BQU1DLFdBQU4sQ0FBa0I7QUFDN0JDLGFBQVcsQ0FBQ0MsTUFBRCxFQUFTO0FBQ2hCQyx5REFBSSxDQUFDQyxTQUFMLENBQWVGLE1BQWY7QUFDSDs7QUFFREcsTUFBSSxHQUFHO0FBQ0hGLHlEQUFJLENBQUNFLElBQUw7QUFDSDs7QUFQNEI7QUFVMUIsU0FBU0MsZUFBVCxHQUEyQjtBQUM5QixRQUFNQyxTQUFTLEdBQUcsZUFBbEI7QUFDQSxRQUFNQyxNQUFNLEdBQUksR0FBRUQsU0FBVSxHQUE1Qjs7QUFDQSxRQUFNRSxNQUFNLEdBQUdDLG1CQUFPLENBQUMsc0JBQUQsQ0FBdEI7O0FBQ0EsUUFBTUMsSUFBSSxHQUFHRixNQUFNLENBQUNHLEtBQXBCLENBSjhCLENBSzlCOztBQUVBSCxRQUFNLENBQUNHLEtBQVAsR0FBZSxVQUFVQyxPQUFWLEVBQW1CO0FBQzlCLFFBQUlBLE9BQU8sS0FBS04sU0FBWixJQUF5Qk0sT0FBTyxDQUFDQyxVQUFSLENBQW1CTixNQUFuQixDQUE3QixFQUF5RDtBQUNyRCxZQUFNTyxTQUFTLEdBQUdGLE9BQU8sQ0FBQ0csTUFBUixDQUFlUixNQUFNLENBQUNTLE1BQXRCLENBQWxCO0FBQ0EsVUFBSUYsU0FBUyxJQUFJLEtBQWpCLEVBQXdCLE9BQU9oQywwREFBUDtBQUMzQjs7QUFFRCxXQUFPNEIsSUFBSSxDQUFDTyxLQUFMLENBQVcsSUFBWCxFQUFpQkMsU0FBakIsQ0FBUDtBQUNILEdBUEQsQ0FQOEIsQ0FnQjlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBOzs7QUFFQSxTQUFPLFlBQVc7QUFDZFYsVUFBTSxDQUFDRyxLQUFQLEdBQWVELElBQWY7QUFDSCxHQUZEO0FBR0gsQyxDQUVEO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0EiLCJmaWxlIjoiLi9zcmMvaW5kZXguanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IHByb3h5TG9jYWxTdG9yYWdlIGZyb20gXCIuL2xvY2Fsc3RvcmFnZVwiO1xyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9tb2R1bGVzL2NvcmVcIjtcclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL21vZHVsZXMvcGx1Z2luYXBpXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvcGx1Z2lubWFuYWdlclwiO1xyXG5pbXBvcnQgVGhlbWVNYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvdGhlbWVtYW5hZ2VyXCI7XHJcbmltcG9ydCB7YmRQbHVnaW5TdG9yYWdlfSBmcm9tIFwiLi9tb2R1bGVzL29sZHN0b3JhZ2VcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi9tb2R1bGVzL2VtaXR0ZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL21vZHVsZXMvc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9idWlsdGlucy9lbW90ZXNcIjtcclxuXHJcbi8vIFBlcmZvcm0gc29tZSBzZXR1cFxyXG5wcm94eUxvY2FsU3RvcmFnZSgpO1xyXG5jb25zdCBsb2FkaW5nSWNvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XHJcbmxvYWRpbmdJY29uLmNsYXNzTmFtZSA9IFwiYmQtbG9hZGVydjJcIjtcclxubG9hZGluZ0ljb24udGl0bGUgPSBcIkJhbmRhZ2VkQkQgaXMgbG9hZGluZy4uLlwiO1xyXG5kb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxvYWRpbmdJY29uKTtcclxuXHJcbi8vIHdpbmRvdy5Db3JlID0gQ29yZTtcclxud2luZG93LkJkQXBpID0gQmRBcGk7XHJcbi8vIHdpbmRvdy5zZXR0aW5ncyA9IFNldHRpbmdzSW5mbztcclxuLy8gd2luZG93LnNldHRpbmdzQ29va2llID0gU2V0dGluZ3NDb29raWU7XHJcbi8vIHdpbmRvdy5wbHVnaW5Db29raWUgPSBQbHVnaW5Db29raWU7XHJcbi8vIHdpbmRvdy50aGVtZUNvb2tpZSA9IFRoZW1lQ29va2llO1xyXG53aW5kb3cucGx1Z2luTW9kdWxlID0gUGx1Z2luTWFuYWdlcjtcclxud2luZG93LnRoZW1lTW9kdWxlID0gVGhlbWVNYW5hZ2VyO1xyXG4vLyB3aW5kb3cuYmR0aGVtZXMgPSBUaGVtZXM7XHJcbi8vIHdpbmRvdy5iZHBsdWdpbnMgPSBQbHVnaW5zO1xyXG53aW5kb3cuYmRFbW90ZXMgPSBFbW90ZU1vZHVsZS5FbW90ZXM7XHJcbndpbmRvdy5iZW1vdGVzID0gRW1vdGVNb2R1bGUuYmxhY2tsaXN0O1xyXG53aW5kb3cuYmRQbHVnaW5TdG9yYWdlID0gYmRQbHVnaW5TdG9yYWdlO1xyXG53aW5kb3cuc2V0dGluZ3NNb2R1bGUgPSBTZXR0aW5ncztcclxuXHJcblxyXG53aW5kb3cuQkRFdmVudHMgPSBFdmVudHM7XHJcbndpbmRvdy5iZENvbmZpZyA9IENvbmZpZztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xyXG4gICAgICAgIENvcmUuc2V0Q29uZmlnKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBDb3JlLmluaXQoKTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoTW9kdWxlTG9hZCgpIHtcclxuICAgIGNvbnN0IG5hbWVzcGFjZSA9IFwiYmV0dGVyZGlzY29yZFwiO1xyXG4gICAgY29uc3QgcHJlZml4ID0gYCR7bmFtZXNwYWNlfS9gO1xyXG4gICAgY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKTtcclxuICAgIGNvbnN0IGxvYWQgPSBNb2R1bGUuX2xvYWQ7XHJcbiAgICAvLyBjb25zdCByZXNvbHZlRmlsZW5hbWUgPSBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZTtcclxuXHJcbiAgICBNb2R1bGUuX2xvYWQgPSBmdW5jdGlvbiAocmVxdWVzdCkge1xyXG4gICAgICAgIGlmIChyZXF1ZXN0ID09PSBuYW1lc3BhY2UgfHwgcmVxdWVzdC5zdGFydHNXaXRoKHByZWZpeCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdGVkID0gcmVxdWVzdC5zdWJzdHIocHJlZml4Lmxlbmd0aCk7XHJcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0ZWQgPT0gXCJhcGlcIikgcmV0dXJuIEJkQXBpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGxvYWQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxuICAgIH07XHJcblxyXG4gICAgLy8gTW9kdWxlLl9yZXNvbHZlRmlsZW5hbWUgPSBmdW5jdGlvbiAocmVxdWVzdCwgcGFyZW50LCBpc01haW4pIHtcclxuICAgIC8vICAgICBpZiAocmVxdWVzdCA9PT0gXCJiZXR0ZXJkaXNjb3JkXCIgfHwgcmVxdWVzdC5zdGFydHNXaXRoKFwiYmV0dGVyZGlzY29yZC9cIikpIHtcclxuICAgIC8vICAgICAgICAgY29uc3QgY29udGVudFBhdGggPSBQbHVnaW5NYW5hZ2VyLmdldFBsdWdpblBhdGhCeU1vZHVsZShwYXJlbnQpO1xyXG4gICAgLy8gICAgICAgICBpZiAoY29udGVudFBhdGgpIHJldHVybiByZXF1ZXN0O1xyXG4gICAgLy8gICAgIH1cclxuXHJcbiAgICAvLyAgICAgcmV0dXJuIHJlc29sdmVGaWxlbmFtZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgLy8gfTtcclxuXHJcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgTW9kdWxlLl9sb2FkID0gbG9hZDtcclxuICAgIH07XHJcbn1cclxuXHJcbi8vIGV4cG9ydCBmdW5jdGlvbiBnZXRQbHVnaW5CeU1vZHVsZShtb2R1bGUpIHtcclxuLy8gICAgIHJldHVybiB0aGlzLmxvY2FsQ29udGVudC5maW5kKHBsdWdpbiA9PiBtb2R1bGUuZmlsZW5hbWUgPT09IHBsdWdpbi5jb250ZW50UGF0aCB8fCBtb2R1bGUuZmlsZW5hbWUuc3RhcnRzV2l0aChwbHVnaW4uY29udGVudFBhdGggKyBwYXRoLnNlcCkpO1xyXG4vLyB9XHJcblxyXG4vLyBleHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luUGF0aEJ5TW9kdWxlKG1vZHVsZSkge1xyXG4vLyAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMucGx1Z2luQXBpSW5zdGFuY2VzKS5maW5kKGNvbnRlbnRQYXRoID0+IG1vZHVsZS5maWxlbmFtZSA9PT0gY29udGVudFBhdGggfHwgbW9kdWxlLmZpbGVuYW1lLnN0YXJ0c1dpdGgoY29udGVudFBhdGggKyBwYXRoLnNlcCkpO1xyXG4vLyB9XHJcblxyXG4vLyB2YXIgc2V0dGluZ3NQYW5lbCwgZW1vdGVNb2R1bGUsIHF1aWNrRW1vdGVNZW51LCB2b2ljZU1vZGUsLCBkTW9kZSwgcHVibGljU2VydmVyc01vZHVsZTtcclxuLy8gdmFyIGJkQ29uZmlnID0gbnVsbDsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/index.js\n"); /***/ }), @@ -407,7 +371,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _web /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ContentManager; });\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../structs/contenterror */ \"./src/structs/contenterror.js\");\n/* harmony import */ var _structs_metaerror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/metaerror */ \"./src/structs/metaerror.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst Module = __webpack_require__(/*! module */ \"module\").Module;\n\nModule.globalPaths.push(path.resolve(__webpack_require__(/*! electron */ \"electron\").remote.app.getAppPath(), \"node_modules\"));\nconst splitRegex = /[^\\S\\r\\n]*?\\n[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\nconst escapedAtRegex = /^\\\\@/;\nclass ContentManager {\n get name() {\n return \"\";\n }\n\n get moduleExtension() {\n return \"\";\n }\n\n get extension() {\n return \"\";\n }\n\n get contentFolder() {\n return \"\";\n }\n\n get prefix() {\n return \"content\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"content\";\n }\n\n get id() {\n return \"autoReload\";\n }\n\n emit(event, ...args) {\n return _emitter__WEBPACK_IMPORTED_MODULE_2__[\"default\"].emit(`${this.prefix}-${event}`, ...args);\n }\n\n constructor() {\n this.timeCache = {};\n this.contentList = [];\n this.state = {};\n this.originalRequire = Module._extensions[this.moduleExtension];\n Module._extensions[this.moduleExtension] = this.getContentRequire();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"].on(this.collection, this.category, this.id, enabled => {\n if (enabled) this.watchContent();else this.unwatchContent();\n });\n } // Subclasses should overload this and modify the content object as needed to fully load it\n\n\n initializeContent() {\n return;\n } // Subclasses should overload this and modify the content as needed to require() the file\n\n\n getContentModification(module, content) {\n return content;\n }\n\n startContent() {\n return;\n }\n\n stopContent() {\n return;\n }\n\n loadState() {\n const saved = _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getData(`${this.prefix}s`);\n console.log(saved);\n if (!saved) return;\n Object.assign(this.state, saved);\n }\n\n saveState() {\n _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setData(`${this.prefix}s`, this.state);\n }\n\n watchContent() {\n if (this.watcher) return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(this.name, \"Already watching content.\");\n _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].log(this.name, \"Starting to watch content.\");\n this.watcher = fs.watch(this.contentFolder, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(this.extension)) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(path.resolve(this.contentFolder, filename));\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n this.unloadContent(filename, true);\n }\n\n if (!fs.statSync(path.resolve(this.contentFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(this.contentFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") this.loadContent(filename, true);\n if (eventType == \"change\") this.reloadContent(filename, true);\n });\n }\n\n unwatchContent() {\n if (!this.watcher) return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(this.name, \"Was not watching content.\");\n this.watcher.close();\n delete this.watcher;\n _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].log(this.name, \"No longer watching content.\");\n }\n\n extractMeta(content) {\n const firstLine = content.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(content);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(content);\n throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](\"META was not found.\");\n }\n\n parseOldMeta(content) {\n const meta = content.split(\"\\n\")[0];\n const metaData = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\n if (!_utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(metaData)) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](\"META could not be parsed.\");\n const parsed = JSON.parse(metaData);\n if (!parsed.name) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](\"META missing name data.\");\n return parsed;\n }\n\n parseNewMeta(content) {\n const block = content.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\n const out = {};\n let field = \"\";\n let accum = \"\";\n\n for (const line of block.split(splitRegex)) {\n if (line.length === 0) continue;\n\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\n out[field] = accum;\n const l = line.indexOf(\" \");\n field = line.substr(1, l - 1);\n accum = line.substr(l + 1);\n } else {\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\n }\n }\n\n out[field] = accum.trim();\n delete out[\"\"];\n return out;\n }\n\n getContentRequire() {\n const self = this; // const baseFolder = this.contentFolder;\n\n const originalRequire = this.originalRequire;\n return function (module, filename) {\n const possiblePath = path.resolve(self.contentFolder, path.basename(filename));\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\n let content = fs.readFileSync(filename, \"utf8\");\n content = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stripBOM(content);\n const meta = self.extractMeta(content);\n meta.id = meta.name;\n meta.filename = path.basename(filename);\n content = self.getContentModification(module, content, meta);\n\n module._compile(content, filename);\n };\n } // Subclasses should use the return (if not ContentError) and push to this.contentList\n\n\n loadContent(filename, shouldToast = true) {\n if (typeof filename === \"undefined\") return;\n\n try {\n require(path.resolve(this.contentFolder, filename));\n } catch (error) {\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](filename, filename, \"Could not be compiled.\", {\n message: error.message,\n stack: error.stack\n });\n }\n\n const content = require(path.resolve(this.contentFolder, filename));\n\n console.log(content);\n if (this.contentList.find(c => c.id == content.id)) return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, filename, `There is already a plugin with name ${content.name}`);\n const error = this.initializeContent(content);\n if (error) return error;\n this.contentList.push(content);\n if (shouldToast) ui__WEBPACK_IMPORTED_MODULE_6__[\"Toasts\"].success(`${content.name} v${content.version} was loaded.`);\n this.emit(\"loaded\", content.id);\n if (!this.state[content.id]) return this.state[content.id] = false;\n return this.startContent(content);\n }\n\n unloadContent(idOrFileOrContent, shouldToast = true) {\n const content = typeof idOrFileOrContent == \"string\" ? this.contentList.find(c => c.id == idOrFileOrContent || c.filename == idOrFileOrContent) : idOrFileOrContent;\n if (!content) return false;\n if (this.state[content.id]) this.disableContent(content);\n delete require.cache[require.resolve(path.resolve(this.contentFolder, content.filename))];\n this.contentList.splice(this.contentList.indexOf(content), 1);\n this.emit(\"unloaded\", content.id);\n if (shouldToast) ui__WEBPACK_IMPORTED_MODULE_6__[\"Toasts\"].success(`${content.name} was unloaded.`);\n return true;\n }\n\n reloadContent(filename) {\n const didUnload = this.unloadContent(filename);\n if (!didUnload) return didUnload;\n return this.loadContent(filename);\n }\n\n isLoaded(idOrFile) {\n const content = this.contentList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!content) return false;\n return true;\n }\n\n isEnabled(idOrFile) {\n const content = this.contentList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!content) return false;\n return this.state[content.id];\n }\n\n enableContent(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n if (this.state[content.id]) return;\n this.state[content.id] = true;\n this.startContent(content);\n this.saveState();\n }\n\n disableContent(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n if (!this.state[content.id]) return;\n this.state[content.id] = false;\n this.stopContent(content);\n this.saveState();\n }\n\n toggleContent(id) {\n if (this.state[id]) this.disableContent(id);else this.enableContent(id);\n }\n\n loadNewContent() {\n const files = fs.readdirSync(this.contentFolder);\n const removed = this.contentList.filter(t => !files.includes(t.filename)).map(c => c.id);\n const added = files.filter(f => !this.contentList.find(t => t.filename == f) && f.endsWith(this.extension) && fs.statSync(path.resolve(this.contentFolder, f)).isFile());\n return {\n added,\n removed\n };\n }\n\n updateList() {\n const results = this.loadNewContent();\n\n for (const filename of results.added) this.loadContent(filename);\n\n for (const name of results.removed) this.unloadContent(name);\n }\n\n loadAllContent() {\n this.loadState();\n const errors = [];\n const files = fs.readdirSync(this.contentFolder);\n\n for (const filename of files) {\n if (!fs.statSync(path.resolve(this.contentFolder, filename)).isFile() || !filename.endsWith(this.extension)) continue;\n const content = this.loadContent(filename, false);\n if (content instanceof _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"]) errors.push(content);\n }\n\n this.saveState();\n if (_settingsmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get(this.collection, this.category, this.id)) this.watchContent();\n return errors;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29udGVudG1hbmFnZXIuanM/OTA0MyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwiTW9kdWxlIiwiZ2xvYmFsUGF0aHMiLCJwdXNoIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJzcGxpdFJlZ2V4IiwiZXNjYXBlZEF0UmVnZXgiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicHJlZml4IiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJlbWl0IiwiZXZlbnQiLCJhcmdzIiwiRXZlbnRzIiwiY29uc3RydWN0b3IiLCJ0aW1lQ2FjaGUiLCJjb250ZW50TGlzdCIsInN0YXRlIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRDb250ZW50UmVxdWlyZSIsIlNldHRpbmdzIiwib24iLCJlbmFibGVkIiwid2F0Y2hDb250ZW50IiwidW53YXRjaENvbnRlbnQiLCJpbml0aWFsaXplQ29udGVudCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJjb250ZW50Iiwic3RhcnRDb250ZW50Iiwic3RvcENvbnRlbnQiLCJsb2FkU3RhdGUiLCJzYXZlZCIsIkRhdGFTdG9yZSIsImdldERhdGEiLCJjb25zb2xlIiwibG9nIiwiT2JqZWN0IiwiYXNzaWduIiwic2F2ZVN0YXRlIiwic2V0RGF0YSIsIndhdGNoZXIiLCJVdGlsaXRpZXMiLCJlcnIiLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsImVuZHNXaXRoIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJjb2RlIiwidW5sb2FkQ29udGVudCIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZENvbnRlbnQiLCJyZWxvYWRDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsInNwbGl0IiwiaGFzT2xkTWV0YSIsImluY2x1ZGVzIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIk1ldGFFcnJvciIsIm1ldGEiLCJtZXRhRGF0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwidGVzdEpTT04iLCJwYXJzZWQiLCJKU09OIiwicGFyc2UiLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwibGVuZ3RoIiwiY2hhckF0IiwibCIsImluZGV4T2YiLCJzdWJzdHIiLCJyZXBsYWNlIiwidHJpbSIsInNlbGYiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFscGF0aFN5bmMiLCJSZWZsZWN0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZWFkRmlsZVN5bmMiLCJzdHJpcEJPTSIsIl9jb21waWxlIiwic2hvdWxkVG9hc3QiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsImVycm9yIiwiQ29udGVudEVycm9yIiwibWVzc2FnZSIsInN0YWNrIiwiZmluZCIsImMiLCJUb2FzdHMiLCJzdWNjZXNzIiwidmVyc2lvbiIsImlkT3JGaWxlT3JDb250ZW50IiwiZGlzYWJsZUNvbnRlbnQiLCJjYWNoZSIsInNwbGljZSIsImRpZFVubG9hZCIsImlzTG9hZGVkIiwiaWRPckZpbGUiLCJpc0VuYWJsZWQiLCJlbmFibGVDb250ZW50IiwiaWRPckNvbnRlbnQiLCJwIiwidG9nZ2xlQ29udGVudCIsImxvYWROZXdDb250ZW50IiwiZmlsZXMiLCJyZWFkZGlyU3luYyIsInJlbW92ZWQiLCJmaWx0ZXIiLCJ0IiwibWFwIiwiYWRkZWQiLCJmIiwidXBkYXRlTGlzdCIsInJlc3VsdHMiLCJsb2FkQWxsQ29udGVudCIsImVycm9ycyIsImdldCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFD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S1csU0FBTDtBQUNBLFFBQUluQix3REFBUSxDQUFDc0gsR0FBVCxDQUFhLEtBQUtwSSxVQUFsQixFQUE4QixLQUFLQyxRQUFuQyxFQUE2QyxLQUFLQyxFQUFsRCxDQUFKLEVBQTJELEtBQUtlLFlBQUw7QUFDM0QsV0FBT2tILE1BQVA7QUFDSDs7QUFyTytCIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvY29udGVudG1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZW1pdHRlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgQ29udGVudEVycm9yIGZyb20gXCIuLi9zdHJ1Y3RzL2NvbnRlbnRlcnJvclwiO1xyXG5pbXBvcnQgTWV0YUVycm9yIGZyb20gXCIuLi9zdHJ1Y3RzL21ldGFlcnJvclwiO1xyXG5pbXBvcnQge1RvYXN0c30gZnJvbSBcInVpXCI7XHJcblxyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpLk1vZHVsZTtcclxuTW9kdWxlLmdsb2JhbFBhdGhzLnB1c2gocGF0aC5yZXNvbHZlKHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwLmdldEFwcFBhdGgoKSwgXCJub2RlX21vZHVsZXNcIikpO1xyXG5cclxuY29uc3Qgc3BsaXRSZWdleCA9IC9bXlxcU1xcclxcbl0qP1xcblteXFxTXFxyXFxuXSo/XFwqW15cXFNcXHJcXG5dPy87XHJcbmNvbnN0IGVzY2FwZWRBdFJlZ2V4ID0gL15cXFxcQC87XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZW50TWFuYWdlciB7XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IG1vZHVsZUV4dGVuc2lvbigpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgZXh0ZW5zaW9uKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBwcmVmaXgoKSB7cmV0dXJuIFwiY29udGVudFwiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcInNldHRpbmdzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImNvbnRlbnRcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiYXV0b1JlbG9hZFwiO31cclxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtyZXR1cm4gRXZlbnRzLmVtaXQoYCR7dGhpcy5wcmVmaXh9LSR7ZXZlbnR9YCwgLi4uYXJncyk7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudGltZUNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5jb250ZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1t0aGlzLm1vZHVsZUV4dGVuc2lvbl07XHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW3RoaXMubW9kdWxlRXh0ZW5zaW9uXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoKTtcclxuICAgICAgICBTZXR0aW5ncy5vbih0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQsIChlbmFibGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB0aGlzLndhdGNoQ29udGVudCgpO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudW53YXRjaENvbnRlbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCBvdmVybG9hZCB0aGlzIGFuZCBtb2RpZnkgdGhlIGNvbnRlbnQgb2JqZWN0IGFzIG5lZWRlZCB0byBmdWxseSBsb2FkIGl0XHJcbiAgICBpbml0aWFsaXplQ29udGVudCgpIHtyZXR1cm47fVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJsb2FkIHRoaXMgYW5kIG1vZGlmeSB0aGUgY29udGVudCBhcyBuZWVkZWQgdG8gcmVxdWlyZSgpIHRoZSBmaWxlXHJcbiAgICBnZXRDb250ZW50TW9kaWZpY2F0aW9uKG1vZHVsZSwgY29udGVudCkge3JldHVybiBjb250ZW50O31cclxuXHJcbiAgICBzdGFydENvbnRlbnQoKSB7cmV0dXJuO31cclxuICAgIHN0b3BDb250ZW50KCkge3JldHVybjt9XHJcblxyXG4gICAgbG9hZFN0YXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldERhdGEoYCR7dGhpcy5wcmVmaXh9c2ApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHNhdmVkKTtcclxuICAgICAgICBpZiAoIXNhdmVkKSByZXR1cm47XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnN0YXRlLCBzYXZlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVN0YXRlKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXREYXRhKGAke3RoaXMucHJlZml4fXNgLCB0aGlzLnN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB3YXRjaENvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcikgcmV0dXJuIFV0aWxpdGllcy5lcnIodGhpcy5uYW1lLCBcIkFscmVhZHkgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICAgICAgVXRpbGl0aWVzLmxvZyh0aGlzLm5hbWUsIFwiU3RhcnRpbmcgdG8gd2F0Y2ggY29udGVudC5cIik7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyID0gZnMud2F0Y2godGhpcy5jb250ZW50Rm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVOT0VOVFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJyZW5hbWVcIikgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikgdGhpcy5yZWxvYWRDb250ZW50KGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQ29udGVudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcikgcmV0dXJuIFV0aWxpdGllcy5lcnIodGhpcy5uYW1lLCBcIldhcyBub3Qgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyLmNsb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcjtcclxuICAgICAgICBVdGlsaXRpZXMubG9nKHRoaXMubmFtZSwgXCJObyBsb25nZXIgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0cmFjdE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgaGFzT2xkTWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8vTUVUQVwiKTtcclxuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIGNvbnN0IGhhc05ld01ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvKipcIik7XHJcbiAgICAgICAgaWYgKGhhc05ld01ldGEpIHJldHVybiB0aGlzLnBhcnNlTmV3TWV0YShjb250ZW50KTtcclxuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU9sZE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IG1ldGFEYXRhID0gbWV0YS5zdWJzdHJpbmcobWV0YS5sYXN0SW5kZXhPZihcIi8vTUVUQVwiKSArIDYsIG1ldGEubGFzdEluZGV4T2YoXCIqLy9cIikpO1xyXG4gICAgICAgIGlmICghVXRpbGl0aWVzLnRlc3RKU09OKG1ldGFEYXRhKSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgY291bGQgbm90IGJlIHBhcnNlZC5cIik7XHJcblxyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UobWV0YURhdGEpO1xyXG4gICAgICAgIGlmICghcGFyc2VkLm5hbWUpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIG1pc3NpbmcgbmFtZSBkYXRhLlwiKTtcclxuICAgICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlTmV3TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgYmxvY2sgPSBjb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XHJcbiAgICAgICAgY29uc3Qgb3V0ID0ge307XHJcbiAgICAgICAgbGV0IGZpZWxkID0gXCJcIjtcclxuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9jay5zcGxpdChzcGxpdFJlZ2V4KSkge1xyXG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGxpbmUuaW5kZXhPZihcIiBcIik7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcclxuICAgICAgICAgICAgICAgIGFjY3VtID0gbGluZS5zdWJzdHIobCArIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gKz0gXCIgXCIgKyBsaW5lLnJlcGxhY2UoXCJcXFxcblwiLCBcIlxcblwiKS5yZXBsYWNlKGVzY2FwZWRBdFJlZ2V4LCBcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtLnRyaW0oKTtcclxuICAgICAgICBkZWxldGUgb3V0W1wiXCJdO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudFJlcXVpcmUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gY29uc3QgYmFzZUZvbGRlciA9IHRoaXMuY29udGVudEZvbGRlcjtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSB0aGlzLm9yaWdpbmFsUmVxdWlyZTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoc2VsZi5jb250ZW50Rm9sZGVyLCBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwb3NzaWJsZVBhdGgpIHx8IGZpbGVuYW1lICE9PSBmcy5yZWFscGF0aFN5bmMocG9zc2libGVQYXRoKSkgcmV0dXJuIFJlZmxlY3QuYXBwbHkob3JpZ2luYWxSZXF1aXJlLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgXCJ1dGY4XCIpO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gVXRpbGl0aWVzLnN0cmlwQk9NKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShjb250ZW50KTtcclxuICAgICAgICAgICAgbWV0YS5pZCA9IG1ldGEubmFtZTtcclxuICAgICAgICAgICAgbWV0YS5maWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gc2VsZi5nZXRDb250ZW50TW9kaWZpY2F0aW9uKG1vZHVsZSwgY29udGVudCwgbWV0YSk7XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCB1c2UgdGhlIHJldHVybiAoaWYgbm90IENvbnRlbnRFcnJvcikgYW5kIHB1c2ggdG8gdGhpcy5jb250ZW50TGlzdFxyXG4gICAgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHNob3VsZFRvYXN0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgdHJ5IHtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4gbmV3IENvbnRlbnRFcnJvcihmaWxlbmFtZSwgZmlsZW5hbWUsIFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfSk7fVxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGNvbnRlbnQpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRMaXN0LmZpbmQoYyA9PiBjLmlkID09IGNvbnRlbnQuaWQpKSByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGZpbGVuYW1lLCBgVGhlcmUgaXMgYWxyZWFkeSBhIHBsdWdpbiB3aXRoIG5hbWUgJHtjb250ZW50Lm5hbWV9YCk7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmluaXRpYWxpemVDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgICAgIGlmIChlcnJvcikgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIHRoaXMuY29udGVudExpc3QucHVzaChjb250ZW50KTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdChcImxvYWRlZFwiLCBjb250ZW50LmlkKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSByZXR1cm4gdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWRDb250ZW50KGlkT3JGaWxlT3JDb250ZW50LCBzaG91bGRUb2FzdCA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JGaWxlT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQ29udGVudCB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JDb250ZW50KSA6IGlkT3JGaWxlT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSB0aGlzLmRpc2FibGVDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgICAgIGRlbGV0ZSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5jYWNoZVtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5yZXNvbHZlKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGNvbnRlbnQuZmlsZW5hbWUpKV07XHJcbiAgICAgICAgdGhpcy5jb250ZW50TGlzdC5zcGxpY2UodGhpcy5jb250ZW50TGlzdC5pbmRleE9mKGNvbnRlbnQpLCAxKTtcclxuICAgICAgICB0aGlzLmVtaXQoXCJ1bmxvYWRlZFwiLCBjb250ZW50LmlkKTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2NvbnRlbnQubmFtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZENvbnRlbnQoZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBkaWRVbmxvYWQgPSB0aGlzLnVubG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGlmICghZGlkVW5sb2FkKSByZXR1cm4gZGlkVW5sb2FkO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBpc0xvYWRlZChpZE9yRmlsZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnRMaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGUpO1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzRW5hYmxlZChpZE9yRmlsZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmNvbnRlbnRMaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlIHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGUpO1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZUNvbnRlbnQoaWRPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQ29udGVudCkgOiBpZE9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtjb250ZW50LmlkXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3RhcnRDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUNvbnRlbnQoaWRPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQ29udGVudCkgOiBpZE9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVbY29udGVudC5pZF0pIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdG9wQ29udGVudChjb250ZW50KTtcclxuICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRvZ2dsZUNvbnRlbnQoaWQpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtpZF0pIHRoaXMuZGlzYWJsZUNvbnRlbnQoaWQpO1xyXG4gICAgICAgIGVsc2UgdGhpcy5lbmFibGVDb250ZW50KGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkTmV3Q29udGVudCgpIHtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRoaXMuY29udGVudEZvbGRlcik7XHJcbiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMuY29udGVudExpc3QuZmlsdGVyKHQgPT4gIWZpbGVzLmluY2x1ZGVzKHQuZmlsZW5hbWUpKS5tYXAoYyA9PiBjLmlkKTtcclxuICAgICAgICBjb25zdCBhZGRlZCA9IGZpbGVzLmZpbHRlcihmID0+ICF0aGlzLmNvbnRlbnRMaXN0LmZpbmQodCA9PiB0LmZpbGVuYW1lID09IGYpICYmIGYuZW5kc1dpdGgodGhpcy5leHRlbnNpb24pICYmIGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGYpKS5pc0ZpbGUoKSk7XHJcbiAgICAgICAgcmV0dXJuIHthZGRlZCwgcmVtb3ZlZH07XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlTGlzdCgpIHtcclxuICAgICAgICBjb25zdCByZXN1bHRzID0gdGhpcy5sb2FkTmV3Q29udGVudCgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgcmVzdWx0cy5hZGRlZCkgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIHJlc3VsdHMucmVtb3ZlZCkgdGhpcy51bmxvYWRDb250ZW50KG5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGxDb250ZW50KCkge1xyXG4gICAgICAgIHRoaXMubG9hZFN0YXRlKCk7XHJcbiAgICAgICAgY29uc3QgZXJyb3JzID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmNvbnRlbnRGb2xkZXIpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIGZpbGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgodGhpcy5leHRlbnNpb24pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIGZhbHNlKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnQgaW5zdGFuY2VvZiBDb250ZW50RXJyb3IpIGVycm9ycy5wdXNoKGNvbnRlbnQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgICAgICBpZiAoU2V0dGluZ3MuZ2V0KHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgdGhpcy5pZCkpIHRoaXMud2F0Y2hDb250ZW50KCk7XHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/contentmanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return ContentManager; });\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../structs/contenterror */ \"./src/structs/contenterror.js\");\n/* harmony import */ var _structs_metaerror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/metaerror */ \"./src/structs/metaerror.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst Module = __webpack_require__(/*! module */ \"module\").Module;\n\nModule.globalPaths.push(path.resolve(__webpack_require__(/*! electron */ \"electron\").remote.app.getAppPath(), \"node_modules\"));\nconst splitRegex = /[^\\S\\r\\n]*?\\n[^\\S\\r\\n]*?\\*[^\\S\\r\\n]?/;\nconst escapedAtRegex = /^\\\\@/;\nclass ContentManager {\n get name() {\n return \"\";\n }\n\n get moduleExtension() {\n return \"\";\n }\n\n get extension() {\n return \"\";\n }\n\n get contentFolder() {\n return \"\";\n }\n\n get prefix() {\n return \"content\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"content\";\n }\n\n get id() {\n return \"autoReload\";\n }\n\n emit(event, ...args) {\n return _emitter__WEBPACK_IMPORTED_MODULE_2__[\"default\"].emit(`${this.prefix}-${event}`, ...args);\n }\n\n constructor() {\n this.timeCache = {};\n this.contentList = [];\n this.state = {};\n this.originalRequire = Module._extensions[this.moduleExtension];\n Module._extensions[this.moduleExtension] = this.getContentRequire();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"].on(this.collection, this.category, this.id, enabled => {\n if (enabled) this.watchContent();else this.unwatchContent();\n });\n } // Subclasses should overload this and modify the content object as needed to fully load it\n\n\n initializeContent() {\n return;\n } // Subclasses should overload this and modify the content as needed to require() the file\n\n\n getContentModification(module, content) {\n return content;\n }\n\n startContent() {\n return;\n }\n\n stopContent() {\n return;\n }\n\n loadState() {\n const saved = _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getData(`${this.prefix}s`);\n if (!saved) return;\n Object.assign(this.state, saved);\n }\n\n saveState() {\n _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setData(`${this.prefix}s`, this.state);\n }\n\n watchContent() {\n if (this.watcher) return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(this.name, \"Already watching content.\");\n _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].log(this.name, \"Starting to watch content.\");\n this.watcher = fs.watch(this.contentFolder, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(this.extension)) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(path.resolve(this.contentFolder, filename));\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n this.unloadContent(filename, true);\n }\n\n if (!fs.statSync(path.resolve(this.contentFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(this.contentFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") this.loadContent(filename, true);\n if (eventType == \"change\") this.reloadContent(filename, true);\n });\n }\n\n unwatchContent() {\n if (!this.watcher) return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(this.name, \"Was not watching content.\");\n this.watcher.close();\n delete this.watcher;\n _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].log(this.name, \"No longer watching content.\");\n }\n\n extractMeta(content) {\n const firstLine = content.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(content);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(content);\n throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](\"META was not found.\");\n }\n\n parseOldMeta(content) {\n const meta = content.split(\"\\n\")[0];\n const metaData = meta.substring(meta.lastIndexOf(\"//META\") + 6, meta.lastIndexOf(\"*//\"));\n if (!_utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(metaData)) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](\"META could not be parsed.\");\n const parsed = JSON.parse(metaData);\n if (!parsed.name) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_5__[\"default\"](\"META missing name data.\");\n return parsed;\n }\n\n parseNewMeta(content) {\n const block = content.split(\"/**\", 2)[1].split(\"*/\", 1)[0];\n const out = {};\n let field = \"\";\n let accum = \"\";\n\n for (const line of block.split(splitRegex)) {\n if (line.length === 0) continue;\n\n if (line.charAt(0) === \"@\" && line.charAt(1) !== \" \") {\n out[field] = accum;\n const l = line.indexOf(\" \");\n field = line.substr(1, l - 1);\n accum = line.substr(l + 1);\n } else {\n accum += \" \" + line.replace(\"\\\\n\", \"\\n\").replace(escapedAtRegex, \"@\");\n }\n }\n\n out[field] = accum.trim();\n delete out[\"\"];\n return out;\n }\n\n getContentRequire() {\n const self = this; // const baseFolder = this.contentFolder;\n\n const originalRequire = this.originalRequire;\n return function (module, filename) {\n const possiblePath = path.resolve(self.contentFolder, path.basename(filename));\n if (!fs.existsSync(possiblePath) || filename !== fs.realpathSync(possiblePath)) return Reflect.apply(originalRequire, this, arguments);\n let content = fs.readFileSync(filename, \"utf8\");\n content = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stripBOM(content);\n const meta = self.extractMeta(content);\n meta.id = meta.name;\n meta.filename = path.basename(filename);\n content = self.getContentModification(module, content, meta);\n\n module._compile(content, filename);\n };\n } // Subclasses should use the return (if not ContentError) and push to this.contentList\n\n\n loadContent(filename, shouldToast = true) {\n if (typeof filename === \"undefined\") return;\n\n try {\n require(path.resolve(this.contentFolder, filename));\n } catch (error) {\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](filename, filename, \"Could not be compiled.\", {\n message: error.message,\n stack: error.stack\n });\n }\n\n const content = require(path.resolve(this.contentFolder, filename));\n\n if (this.contentList.find(c => c.id == content.id)) return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, filename, `There is already a plugin with name ${content.name}`);\n const error = this.initializeContent(content);\n if (error) return error;\n this.contentList.push(content);\n if (shouldToast) ui__WEBPACK_IMPORTED_MODULE_6__[\"Toasts\"].success(`${content.name} v${content.version} was loaded.`);\n this.emit(\"loaded\", content.id);\n if (!this.state[content.id]) return this.state[content.id] = false;\n return this.startContent(content);\n }\n\n unloadContent(idOrFileOrContent, shouldToast = true) {\n const content = typeof idOrFileOrContent == \"string\" ? this.contentList.find(c => c.id == idOrFileOrContent || c.filename == idOrFileOrContent) : idOrFileOrContent;\n if (!content) return false;\n if (this.state[content.id]) this.disableContent(content);\n delete require.cache[require.resolve(path.resolve(this.contentFolder, content.filename))];\n this.contentList.splice(this.contentList.indexOf(content), 1);\n this.emit(\"unloaded\", content.id);\n if (shouldToast) ui__WEBPACK_IMPORTED_MODULE_6__[\"Toasts\"].success(`${content.name} was unloaded.`);\n return true;\n }\n\n reloadContent(filename) {\n const didUnload = this.unloadContent(filename);\n if (!didUnload) return didUnload;\n return this.loadContent(filename);\n }\n\n isLoaded(idOrFile) {\n const content = this.contentList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!content) return false;\n return true;\n }\n\n isEnabled(idOrFile) {\n const content = this.contentList.find(c => c.id == idOrFile || c.filename == idOrFile);\n if (!content) return false;\n return this.state[content.id];\n }\n\n enableContent(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n if (this.state[content.id]) return;\n this.state[content.id] = true;\n this.startContent(content);\n this.saveState();\n }\n\n disableContent(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n if (!this.state[content.id]) return;\n this.state[content.id] = false;\n this.stopContent(content);\n this.saveState();\n }\n\n toggleContent(id) {\n if (this.state[id]) this.disableContent(id);else this.enableContent(id);\n }\n\n loadNewContent() {\n const files = fs.readdirSync(this.contentFolder);\n const removed = this.contentList.filter(t => !files.includes(t.filename)).map(c => c.id);\n const added = files.filter(f => !this.contentList.find(t => t.filename == f) && f.endsWith(this.extension) && fs.statSync(path.resolve(this.contentFolder, f)).isFile());\n return {\n added,\n removed\n };\n }\n\n updateList() {\n const results = this.loadNewContent();\n\n for (const filename of results.added) this.loadContent(filename);\n\n for (const name of results.removed) this.unloadContent(name);\n }\n\n loadAllContent() {\n this.loadState();\n const errors = [];\n const files = fs.readdirSync(this.contentFolder);\n\n for (const filename of files) {\n if (!fs.statSync(path.resolve(this.contentFolder, filename)).isFile() || !filename.endsWith(this.extension)) continue;\n const content = this.loadContent(filename, false);\n if (content instanceof _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"]) errors.push(content);\n }\n\n this.saveState();\n if (_settingsmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"].get(this.collection, this.category, this.id)) this.watchContent();\n return errors;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29udGVudG1hbmFnZXIuanM/OTA0MyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwiTW9kdWxlIiwiZ2xvYmFsUGF0aHMiLCJwdXNoIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJzcGxpdFJlZ2V4IiwiZXNjYXBlZEF0UmVnZXgiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicHJlZml4IiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJlbWl0IiwiZXZlbnQiLCJhcmdzIiwiRXZlbnRzIiwiY29uc3RydWN0b3IiLCJ0aW1lQ2FjaGUiLCJjb250ZW50TGlzdCIsInN0YXRlIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRDb250ZW50UmVxdWlyZSIsIlNldHRpbmdzIiwib24iLCJlbmFibGVkIiwid2F0Y2hDb250ZW50IiwidW53YXRjaENvbnRlbnQiLCJpbml0aWFsaXplQ29udGVudCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJjb250ZW50Iiwic3RhcnRDb250ZW50Iiwic3RvcENvbnRlbnQiLCJsb2FkU3RhdGUiLCJzYXZlZCIsIkRhdGFTdG9yZSIsImdldERhdGEiLCJPYmplY3QiLCJhc3NpZ24iLCJzYXZlU3RhdGUiLCJzZXREYXRhIiwid2F0Y2hlciIsIlV0aWxpdGllcyIsImVyciIsImxvZyIsIndhdGNoIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiZW5kc1dpdGgiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImNvZGUiLCJ1bmxvYWRDb250ZW50IiwiaXNGaWxlIiwic3RhdHMiLCJtdGltZSIsImdldFRpbWUiLCJsb2FkQ29udGVudCIsInJlbG9hZENvbnRlbnQiLCJjbG9zZSIsImV4dHJhY3RNZXRhIiwiZmlyc3RMaW5lIiwic3BsaXQiLCJoYXNPbGRNZXRhIiwiaW5jbHVkZXMiLCJwYXJzZU9sZE1ldGEiLCJoYXNOZXdNZXRhIiwicGFyc2VOZXdNZXRhIiwiTWV0YUVycm9yIiwibWV0YSIsIm1ldGFEYXRhIiwic3Vic3RyaW5nIiwibGFzdEluZGV4T2YiLCJ0ZXN0SlNPTiIsInBhcnNlZCIsIkpTT04iLCJwYXJzZSIsImJsb2NrIiwib3V0IiwiZmllbGQiLCJhY2N1bSIsImxpbmUiLCJsZW5ndGgiLCJjaGFyQXQiLCJsIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJ0cmltIiwic2VsZiIsInBvc3NpYmxlUGF0aCIsImJhc2VuYW1lIiwiZXhpc3RzU3luYyIsInJlYWxwYXRoU3luYyIsIlJlZmxlY3QiLCJhcHBseSIsImFyZ3VtZW50cyIsInJlYWRGaWxlU3luYyIsInN0cmlwQk9NIiwiX2NvbXBpbGUiLCJzaG91bGRUb2FzdCIsIl9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fIiwiZXJyb3IiLCJDb250ZW50RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJmaW5kIiwiYyIsIlRvYXN0cyIsInN1Y2Nlc3MiLCJ2ZXJzaW9uIiwiaWRPckZpbGVPckNvbnRlbnQiLCJkaXNhYmxlQ29udGVudCIsImNhY2hlIiwic3BsaWNlIiwiZGlkVW5sb2FkIiwiaXNMb2FkZWQiLCJpZE9yRmlsZSIsImlzRW5hYmxlZCIsImVuYWJsZUNvbnRlbnQiLCJpZE9yQ29udGVudCIsInAiLCJ0b2dnbGVDb250ZW50IiwibG9hZE5ld0NvbnRlbnQiLCJmaWxlcyIsInJlYWRkaXJTeW5jIiwicmVtb3ZlZCIsImZpbHRlciIsInQiLCJtYXAiLCJhZGRlZCIsImYiLCJ1cGRhdGVMaXN0IiwicmVzdWx0cyIsImxvYWRBbGxDb250ZW50IiwiZXJyb3JzIiwiZ2V0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFD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QTZDLEtBQUtDLEVBQWxELENBQUosRUFBMkQsS0FBS2UsWUFBTDtBQUMzRCxXQUFPaUgsTUFBUDtBQUNIOztBQW5PK0IiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb250ZW50bWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi9lbWl0dGVyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBDb250ZW50RXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvY29udGVudGVycm9yXCI7XHJcbmltcG9ydCBNZXRhRXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvbWV0YWVycm9yXCI7XHJcbmltcG9ydCB7VG9hc3RzfSBmcm9tIFwidWlcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xyXG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUocmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHAuZ2V0QXBwUGF0aCgpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XHJcblxyXG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/XFxuW15cXFNcXHJcXG5dKj9cXCpbXlxcU1xcclxcbl0/LztcclxuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRlbnRNYW5hZ2VyIHtcclxuXHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgbW9kdWxlRXh0ZW5zaW9uKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IGNvbnRlbnRGb2xkZXIoKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IHByZWZpeCgpIHtyZXR1cm4gXCJjb250ZW50XCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiY29udGVudFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJhdXRvUmVsb2FkXCI7fVxyXG4gICAgZW1pdChldmVudCwgLi4uYXJncykge3JldHVybiBFdmVudHMuZW1pdChgJHt0aGlzLnByZWZpeH0tJHtldmVudH1gLCAuLi5hcmdzKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW3RoaXMubW9kdWxlRXh0ZW5zaW9uXTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbdGhpcy5tb2R1bGVFeHRlbnNpb25dID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZSgpO1xyXG4gICAgICAgIFNldHRpbmdzLm9uKHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgdGhpcy5pZCwgKGVuYWJsZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHRoaXMud2F0Y2hDb250ZW50KCk7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy51bndhdGNoQ29udGVudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJsb2FkIHRoaXMgYW5kIG1vZGlmeSB0aGUgY29udGVudCBvYmplY3QgYXMgbmVlZGVkIHRvIGZ1bGx5IGxvYWQgaXRcclxuICAgIGluaXRpYWxpemVDb250ZW50KCkge3JldHVybjt9XHJcblxyXG4gICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcmxvYWQgdGhpcyBhbmQgbW9kaWZ5IHRoZSBjb250ZW50IGFzIG5lZWRlZCB0byByZXF1aXJlKCkgdGhlIGZpbGVcclxuICAgIGdldENvbnRlbnRNb2RpZmljYXRpb24obW9kdWxlLCBjb250ZW50KSB7cmV0dXJuIGNvbnRlbnQ7fVxyXG5cclxuICAgIHN0YXJ0Q29udGVudCgpIHtyZXR1cm47fVxyXG4gICAgc3RvcENvbnRlbnQoKSB7cmV0dXJuO31cclxuXHJcbiAgICBsb2FkU3RhdGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0RGF0YShgJHt0aGlzLnByZWZpeH1zYCk7XHJcbiAgICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTdGF0ZSgpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0RGF0YShgJHt0aGlzLnByZWZpeH1zYCwgdGhpcy5zdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2F0Y2hDb250ZW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXIpIHJldHVybiBVdGlsaXRpZXMuZXJyKHRoaXMubmFtZSwgXCJBbHJlYWR5IHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIFV0aWxpdGllcy5sb2codGhpcy5uYW1lLCBcIlN0YXJ0aW5nIHRvIHdhdGNoIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlciA9IGZzLndhdGNoKHRoaXMuY29udGVudEZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwicmVuYW1lXCIpIHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHRoaXMucmVsb2FkQ29udGVudChmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaENvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXIpIHJldHVybiBVdGlsaXRpZXMuZXJyKHRoaXMubmFtZSwgXCJXYXMgbm90IHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlci5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXI7XHJcbiAgICAgICAgVXRpbGl0aWVzLmxvZyh0aGlzLm5hbWUsIFwiTm8gbG9uZ2VyIHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShjb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoY29udGVudCk7XHJcbiAgICAgICAgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VPbGRNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBtZXRhRGF0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcclxuICAgICAgICBpZiAoIVV0aWxpdGllcy50ZXN0SlNPTihtZXRhRGF0YSkpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIGNvdWxkIG5vdCBiZSBwYXJzZWQuXCIpO1xyXG5cclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKG1ldGFEYXRhKTtcclxuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gY29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xyXG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xyXG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XHJcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRlbnRSZXF1aXJlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGNvbnN0IGJhc2VGb2xkZXIgPSB0aGlzLmNvbnRlbnRGb2xkZXI7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gdGhpcy5vcmlnaW5hbFJlcXVpcmU7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1vZHVsZSwgZmlsZW5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgcG9zc2libGVQYXRoID0gcGF0aC5yZXNvbHZlKHNlbGYuY29udGVudEZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgY29udGVudCA9IFV0aWxpdGllcy5zdHJpcEJPTShjb250ZW50KTtcclxuICAgICAgICAgICAgY29uc3QgbWV0YSA9IHNlbGYuZXh0cmFjdE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgICAgIG1ldGEuaWQgPSBtZXRhLm5hbWU7XHJcbiAgICAgICAgICAgIG1ldGEuZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKTtcclxuICAgICAgICAgICAgY29udGVudCA9IHNlbGYuZ2V0Q29udGVudE1vZGlmaWNhdGlvbihtb2R1bGUsIGNvbnRlbnQsIG1ldGEpO1xyXG4gICAgICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgZmlsZW5hbWUpO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgdXNlIHRoZSByZXR1cm4gKGlmIG5vdCBDb250ZW50RXJyb3IpIGFuZCBwdXNoIHRvIHRoaXMuY29udGVudExpc3RcclxuICAgIGxvYWRDb250ZW50KGZpbGVuYW1lLCBzaG91bGRUb2FzdCA9IHRydWUpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIG5ldyBDb250ZW50RXJyb3IoZmlsZW5hbWUsIGZpbGVuYW1lLCBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO31cclxuICAgICAgICBjb25zdCBjb250ZW50ID0gX19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICBpZiAodGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBjb250ZW50LmlkKSkgcmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBmaWxlbmFtZSwgYFRoZXJlIGlzIGFscmVhZHkgYSBwbHVnaW4gd2l0aCBuYW1lICR7Y29udGVudC5uYW1lfWApO1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5pbml0aWFsaXplQ29udGVudChjb250ZW50KTtcclxuICAgICAgICBpZiAoZXJyb3IpIHJldHVybiBlcnJvcjtcclxuICAgICAgICB0aGlzLmNvbnRlbnRMaXN0LnB1c2goY29udGVudCk7XHJcbiAgICAgICAgaWYgKHNob3VsZFRvYXN0KSBUb2FzdHMuc3VjY2VzcyhgJHtjb250ZW50Lm5hbWV9IHYke2NvbnRlbnQudmVyc2lvbn0gd2FzIGxvYWRlZC5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoXCJsb2FkZWRcIiwgY29udGVudC5pZCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZVtjb250ZW50LmlkXSkgcmV0dXJuIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5sb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCwgc2hvdWxkVG9hc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yRmlsZU9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGVPckNvbnRlbnQgfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZU9yQ29udGVudCkgOiBpZE9yRmlsZU9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtjb250ZW50LmlkXSkgdGhpcy5kaXNhYmxlQ29udGVudChjb250ZW50KTtcclxuICAgICAgICBkZWxldGUgX19ub25fd2VicGFja19yZXF1aXJlX18uY2FjaGVbX19ub25fd2VicGFja19yZXF1aXJlX18ucmVzb2x2ZShwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBjb250ZW50LmZpbGVuYW1lKSldO1xyXG4gICAgICAgIHRoaXMuY29udGVudExpc3Quc3BsaWNlKHRoaXMuY29udGVudExpc3QuaW5kZXhPZihjb250ZW50KSwgMSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KFwidW5sb2FkZWRcIiwgY29udGVudC5pZCk7XHJcbiAgICAgICAgaWYgKHNob3VsZFRvYXN0KSBUb2FzdHMuc3VjY2VzcyhgJHtjb250ZW50Lm5hbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRDb250ZW50KGZpbGVuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgZGlkVW5sb2FkID0gdGhpcy51bmxvYWRDb250ZW50KGZpbGVuYW1lKTtcclxuICAgICAgICBpZiAoIWRpZFVubG9hZCkgcmV0dXJuIGRpZFVubG9hZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2FkZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VuYWJsZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVtjb250ZW50LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVDb250ZW50KGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29udGVudC5pZF0pIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXJ0Q29udGVudChjb250ZW50KTtcclxuICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVDb250ZW50KGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcENvbnRlbnQoY29udGVudCk7XHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVDb250ZW50KGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbaWRdKSB0aGlzLmRpc2FibGVDb250ZW50KGlkKTtcclxuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlQ29udGVudChpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE5ld0NvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmNvbnRlbnRGb2xkZXIpO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gYy5pZCk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhdGhpcy5jb250ZW50TGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmKSkuaXNGaWxlKCkpO1xyXG4gICAgICAgIHJldHVybiB7YWRkZWQsIHJlbW92ZWR9O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpc3QoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMubG9hZE5ld0NvbnRlbnQoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkQ29udGVudChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQWxsQ29udGVudCgpIHtcclxuICAgICAgICB0aGlzLmxvYWRTdGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5jb250ZW50Rm9sZGVyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgQ29udGVudEVycm9yKSBlcnJvcnMucHVzaChjb250ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICAgICAgaWYgKFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQpKSB0aGlzLndhdGNoQ29udGVudCgpO1xyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/contentmanager.js\n"); /***/ }), @@ -491,7 +455,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _uti /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../structs/contenterror */ \"./src/structs/contenterror.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst electronRemote = __webpack_require__(/*! electron */ \"electron\").remote;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PluginManager extends _contentmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n get name() {\n return \"PluginManager\";\n }\n\n get moduleExtension() {\n return \".js\";\n }\n\n get extension() {\n return \".plugin.js\";\n }\n\n get contentFolder() {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"plugins\");\n }\n\n get prefix() {\n return \"plugin\";\n }\n\n constructor() {\n super();\n this.onSwitch = this.onSwitch.bind(this);\n this.observer = new MutationObserver(mutations => {\n for (let i = 0, mlen = mutations.length; i < mlen; i++) {\n this.onMutation(mutations[i]);\n }\n });\n }\n /* Aliases */\n\n\n updatePluginList() {\n return this.updateList();\n }\n\n enablePlugin(idOrContent) {\n return this.enableContent(idOrContent);\n }\n\n disablePlugin(idOrContent) {\n return this.disableContent(idOrContent);\n }\n\n togglePlugin(id) {\n return this.toggleContent(id);\n }\n\n unloadPlugin(idOrFileOrContent) {\n return this.unloadContent(idOrFileOrContent);\n }\n\n loadPlugin(filename) {\n const error = this.loadContent(filename);\n if (error) ui__WEBPACK_IMPORTED_MODULE_3__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n\n reloadPlugin(filename) {\n const error = this.reloadContent(filename);\n if (error) ui__WEBPACK_IMPORTED_MODULE_3__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n\n loadAllPlugins() {\n const errors = this.loadAllContent();\n this.setupFunctions();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].registerPanel(\"Plugins\", {\n element: () => ui__WEBPACK_IMPORTED_MODULE_3__[\"SettingsPanel\"].getPluginsPanel(this.contentList)\n });\n return errors;\n }\n /* Overrides */\n\n\n initializeContent(content) {\n if (!content.type) return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"Plugin had no exports\", {\n message: \"Plugin had no exports or no name property.\",\n stack: \"\"\n });\n\n try {\n const thePlugin = new content.type();\n content.plugin = thePlugin;\n content.name = content.name || thePlugin.getName();\n content.author = content.author || thePlugin.getAuthor() || \"No author\";\n content.description = content.description || thePlugin.getDescription() || \"No description\";\n content.version = content.version || thePlugin.getVersion() || \"No version\";\n\n try {\n if (typeof content.plugin.load == \"function\") content.plugin.load();\n } catch (error) {\n this.state[content.id] = false;\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"load() could not be fired.\", {\n message: error.message,\n stack: error.stack\n });\n }\n } catch (error) {\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"Could not be constructed.\", {\n message: error.message,\n stack: error.stack\n });\n }\n }\n\n getContentModification(module, content, meta) {\n module._compile(content, module.filename);\n\n const didExport = !_utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isEmpty(module.exports);\n\n if (didExport) {\n meta.type = module.exports;\n module.exports = meta;\n return \"\";\n }\n\n content += `\\nmodule.exports = ${JSON.stringify(meta)};\\nmodule.exports.type = ${meta.exports || meta.name};`;\n return content;\n }\n\n startContent(id) {\n return this.startPlugin(id);\n }\n\n stopContent(id) {\n return this.stopPlugin(id);\n }\n\n startPlugin(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n const plugin = content.plugin;\n\n try {\n plugin.start();\n this.emit(\"started\", content.id);\n ui__WEBPACK_IMPORTED_MODULE_3__[\"Toasts\"].show(`${content.name} v${content.version} has started.`);\n } catch (err) {\n this.state[content.id] = false;\n ui__WEBPACK_IMPORTED_MODULE_3__[\"Toasts\"].error(`${content.name} v${content.version} could not be started.`);\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].err(\"Plugins\", content.name + \" could not be started.\", err);\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"start() could not be fired.\", {\n message: err.message,\n stack: err.stack\n });\n }\n }\n\n stopPlugin(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n const plugin = content.plugin;\n\n try {\n plugin.stop();\n this.emit(\"stopped\", content.id);\n ui__WEBPACK_IMPORTED_MODULE_3__[\"Toasts\"].show(`${content.name} v${content.version} has stopped.`);\n } catch (err) {\n this.state[content.id] = false;\n ui__WEBPACK_IMPORTED_MODULE_3__[\"Toasts\"].error(`${content.name} v${content.version} could not be stopped.`);\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].err(\"Plugins\", content.name + \" could not be stopped.\", err);\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"stop() could not be fired.\", {\n message: err.message,\n stack: err.stack\n });\n }\n }\n\n setupFunctions() {\n electronRemote.getCurrentWebContents().on(\"did-navigate-in-page\", this.onSwitch.bind(this));\n this.observer.observe(document, {\n childList: true,\n subtree: true\n });\n }\n\n onSwitch() {\n this.emit(\"page-switch\");\n\n for (let i = 0; i < this.contentList.length; i++) {\n const plugin = this.contentList[i].plugin;\n if (!this.state[this.contentList[i].id]) continue;\n\n if (typeof plugin.onSwitch === \"function\") {\n try {\n plugin.onSwitch();\n } catch (err) {\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].err(\"Plugins\", \"Unable to fire onSwitch for \" + this.contentList[i].name + \".\", err);\n }\n }\n }\n }\n\n onMutation(mutation) {\n for (let i = 0; i < this.contentList.length; i++) {\n const plugin = this.contentList[i].plugin;\n if (!this.state[this.contentList[i].id]) continue;\n\n if (typeof plugin.observer === \"function\") {\n try {\n plugin.observer(mutation);\n } catch (err) {\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].err(\"Plugins\", \"Unable to fire observer for \" + this.contentList[i].name + \".\", err);\n }\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcz9kMTczIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwiZWxlY3Ryb25SZW1vdGUiLCJyZW1vdGUiLCJQbHVnaW5NYW5hZ2VyIiwiQ29udGVudE1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiY29udGVudEZvbGRlciIsInJlc29sdmUiLCJDb25maWciLCJkYXRhUGF0aCIsInByZWZpeCIsImNvbnN0cnVjdG9yIiwib25Td2l0Y2giLCJiaW5kIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiaSIsIm1sZW4iLCJsZW5ndGgiLCJvbk11dGF0aW9uIiwidXBkYXRlUGx1Z2luTGlzdCIsInVwZGF0ZUxpc3QiLCJlbmFibGVQbHVnaW4iLCJpZE9yQ29udGVudCIsImVuYWJsZUNvbnRlbnQiLCJkaXNhYmxlUGx1Z2luIiwiZGlzYWJsZUNvbnRlbnQiLCJ0b2dnbGVQbHVnaW4iLCJpZCIsInRvZ2dsZUNvbnRlbnQiLCJ1bmxvYWRQbHVnaW4iLCJpZE9yRmlsZU9yQ29udGVudCIsInVubG9hZENvbnRlbnQiLCJsb2FkUGx1Z2luIiwiZmlsZW5hbWUiLCJlcnJvciIsImxvYWRDb250ZW50IiwiTW9kYWxzIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJ0aGVtZXMiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRDb250ZW50IiwibG9hZEFsbFBsdWdpbnMiLCJlcnJvcnMiLCJsb2FkQWxsQ29udGVudCIsInNldHVwRnVuY3Rpb25zIiwiU2V0dGluZ3MiLCJyZWdpc3RlclBhbmVsIiwiZWxlbWVudCIsIlNldHRpbmdzUmVuZGVyZXIiLCJnZXRQbHVnaW5zUGFuZWwiLCJjb250ZW50TGlzdCIsImluaXRpYWxpemVDb250ZW50IiwiY29udGVudCIsInR5cGUiLCJDb250ZW50RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJ0aGVQbHVnaW4iLCJwbHVnaW4iLCJnZXROYW1lIiwiYXV0aG9yIiwiZ2V0QXV0aG9yIiwiZGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwibG9hZCIsInN0YXRlIiwiZ2V0Q29udGVudE1vZGlmaWNhdGlvbiIsIm1vZHVsZSIsIm1ldGEiLCJfY29tcGlsZSIsImRpZEV4cG9ydCIsIlV0aWxpdGllcyIsImlzRW1wdHkiLCJleHBvcnRzIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXJ0Q29udGVudCIsInN0YXJ0UGx1Z2luIiwic3RvcENvbnRlbnQiLCJzdG9wUGx1Z2luIiwiZmluZCIsInAiLCJzdGFydCIsImVtaXQiLCJUb2FzdHMiLCJzaG93IiwiZXJyIiwic3RvcCIsImdldEN1cnJlbnRXZWJDb250ZW50cyIsIm9uIiwib2JzZXJ2ZSIsImRvY3VtZW50IiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsIm11dGF0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1BLElBQUksR0FBR0MsbUJBQU8sQ0FBQyxrQkFBRCxDQUFwQjs7QUFDQSxNQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQkUsTUFBM0M7O0FBRWUsbUVBQUksTUFBTUMsYUFBTixTQUE0QkMsdURBQTVCLENBQTJDO0FBQzFELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFDcEMsTUFBSUMsZUFBSixHQUFzQjtBQUFDLFdBQU8sS0FBUDtBQUFjOztBQUNyQyxNQUFJQyxTQUFKLEdBQWdCO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUN0QyxNQUFJQyxhQUFKLEdBQW9CO0FBQUMsV0FBT1QsSUFBSSxDQUFDVSxPQUFMLENBQWFDLDJDQUFNLENBQUNDLFFBQXBCLEVBQThCLFNBQTlCLENBQVA7QUFBaUQ7O0FBQ3RFLE1BQUlDLE1BQUos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QW9CLFNBQTFCLENBQ0EsT0FBTzhFLEdBQVAsRUFBWTtBQUFFZiw0REFBUyxDQUFDZSxHQUFWLENBQWMsU0FBZCxFQUF5QixpQ0FBaUMsS0FBS3RDLFdBQUwsQ0FBaUJuQyxDQUFqQixFQUFvQmQsSUFBckQsR0FBNEQsR0FBckYsRUFBMEZ1RixHQUExRjtBQUFpRztBQUNsSDtBQUNKO0FBQ0o7O0FBRUR0RSxZQUFVLENBQUM4RSxRQUFELEVBQVc7QUFDakIsU0FBSyxJQUFJakYsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxLQUFLbUMsV0FBTCxDQUFpQmpDLE1BQXJDLEVBQTZDRixDQUFDLEVBQTlDLEVBQWtEO0FBQzlDLFlBQU0yQyxNQUFNLEdBQUcsS0FBS1IsV0FBTCxDQUFpQm5DLENBQWpCLEVBQW9CMkMsTUFBbkM7QUFDQSxVQUFJLENBQUMsS0FBS1MsS0FBTCxDQUFXLEtBQUtqQixXQUFMLENBQWlCbkMsQ0FBakIsRUFBb0JZLEVBQS9CLENBQUwsRUFBeUM7O0FBQ3pDLFVBQUksT0FBTytCLE1BQU0sQ0FBQzlDLFFBQWQsS0FBMkIsVUFBL0IsRUFBMkM7QUFDdkMsWUFBSTtBQUFFOEMsZ0JBQU0sQ0FBQzlDLFFBQVAsQ0FBZ0JvRixRQUFoQjtBQUE0QixTQUFsQyxDQUNBLE9BQU9SLEdBQVAsRUFBWTtBQUFFZiw0REFBUyxDQUFDZSxHQUFWLENBQWMsU0FBZCxFQUF5QixpQ0FBaUMsS0FBS3RDLFdBQUwsQ0FBaUJuQyxDQUFqQixFQUFvQmQsSUFBckQsR0FBNEQsR0FBckYsRUFBMEZ1RixHQUExRjtBQUFpRztBQUNsSDtBQUNKO0FBQ0o7O0FBOUl5RCxDQUEvQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudG1hbmFnZXJcIjtcclxuaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IHtUb2FzdHMsIE1vZGFsc30gZnJvbSBcInVpXCI7XHJcbmltcG9ydCBDb250ZW50RXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvY29udGVudGVycm9yXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1BhbmVsIGFzIFNldHRpbmdzUmVuZGVyZXJ9IGZyb20gXCJ1aVwiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBlbGVjdHJvblJlbW90ZSA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luTWFuYWdlciBleHRlbmRzIENvbnRlbnRNYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlBsdWdpbk1hbmFnZXJcIjt9XHJcbiAgICBnZXQgbW9kdWxlRXh0ZW5zaW9uKCkge3JldHVybiBcIi5qc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnBsdWdpbi5qc1wiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcInBsdWdpbnNcIik7fVxyXG4gICAgZ2V0IHByZWZpeCgpIHtyZXR1cm4gXCJwbHVnaW5cIjt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLm9uU3dpdGNoID0gdGhpcy5vblN3aXRjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk11dGF0aW9uKG11dGF0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBBbGlhc2VzICovXHJcbiAgICB1cGRhdGVQbHVnaW5MaXN0KCkge3JldHVybiB0aGlzLnVwZGF0ZUxpc3QoKTt9XHJcblxyXG4gICAgZW5hYmxlUGx1Z2luKGlkT3JDb250ZW50KSB7cmV0dXJuIHRoaXMuZW5hYmxlQ29udGVudChpZE9yQ29udGVudCk7fVxyXG4gICAgZGlzYWJsZVBsdWdpbihpZE9yQ29udGVudCkge3JldHVybiB0aGlzLmRpc2FibGVDb250ZW50KGlkT3JDb250ZW50KTt9XHJcbiAgICB0b2dnbGVQbHVnaW4oaWQpIHtyZXR1cm4gdGhpcy50b2dnbGVDb250ZW50KGlkKTt9XHJcblxyXG4gICAgdW5sb2FkUGx1Z2luKGlkT3JGaWxlT3JDb250ZW50KSB7cmV0dXJuIHRoaXMudW5sb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCk7fVxyXG5cclxuICAgIGxvYWRQbHVnaW4oZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGlmIChlcnJvcikgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRQbHVnaW4oZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucmVsb2FkQ29udGVudChmaWxlbmFtZSk7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGxQbHVnaW5zKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMubG9hZEFsbENvbnRlbnQoKTtcclxuICAgICAgICB0aGlzLnNldHVwRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgU2V0dGluZ3MucmVnaXN0ZXJQYW5lbChcIlBsdWdpbnNcIiwge2VsZW1lbnQ6ICgpID0+IFNldHRpbmdzUmVuZGVyZXIuZ2V0UGx1Z2luc1BhbmVsKHRoaXMuY29udGVudExpc3QpfSk7XHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICAvKiBPdmVycmlkZXMgKi9cclxuICAgIGluaXRpYWxpemVDb250ZW50KGNvbnRlbnQpIHtcclxuICAgICAgICBpZiAoIWNvbnRlbnQudHlwZSkgcmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBjb250ZW50LmZpbGVuYW1lLCBcIlBsdWdpbiBoYWQgbm8gZXhwb3J0c1wiLCB7bWVzc2FnZTogXCJQbHVnaW4gaGFkIG5vIGV4cG9ydHMgb3Igbm8gbmFtZSBwcm9wZXJ0eS5cIiwgc3RhY2s6IFwiXCJ9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0aGVQbHVnaW4gPSBuZXcgY29udGVudC50eXBlKCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQucGx1Z2luID0gdGhlUGx1Z2luO1xyXG4gICAgICAgICAgICBjb250ZW50Lm5hbWUgPSBjb250ZW50Lm5hbWUgfHwgdGhlUGx1Z2luLmdldE5hbWUoKTtcclxuICAgICAgICAgICAgY29udGVudC5hdXRob3IgPSBjb250ZW50LmF1dGhvciB8fCB0aGVQbHVnaW4uZ2V0QXV0aG9yKCkgfHwgXCJObyBhdXRob3JcIjtcclxuICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbiA9IGNvbnRlbnQuZGVzY3JpcHRpb24gfHwgdGhlUGx1Z2luLmdldERlc2NyaXB0aW9uKCkgfHwgXCJObyBkZXNjcmlwdGlvblwiO1xyXG4gICAgICAgICAgICBjb250ZW50LnZlcnNpb24gPSBjb250ZW50LnZlcnNpb24gfHwgdGhlUGx1Z2luLmdldFZlcnNpb24oKSB8fCBcIk5vIHZlcnNpb25cIjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoY29udGVudC5wbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBjb250ZW50LnBsdWdpbi5sb2FkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGNvbnRlbnQuZmlsZW5hbWUsIFwibG9hZCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiBuZXcgQ29udGVudEVycm9yKGNvbnRlbnQubmFtZSwgY29udGVudC5maWxlbmFtZSwgXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9KTt9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudE1vZGlmaWNhdGlvbihtb2R1bGUsIGNvbnRlbnQsIG1ldGEpIHtcclxuICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgbW9kdWxlLmZpbGVuYW1lKTtcclxuICAgICAgICBjb25zdCBkaWRFeHBvcnQgPSAhVXRpbGl0aWVzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xyXG4gICAgICAgIGlmIChkaWRFeHBvcnQpIHtcclxuICAgICAgICAgICAgbWV0YS50eXBlID0gbW9kdWxlLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRlbnQgKz0gYFxcbm1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07XFxubW9kdWxlLmV4cG9ydHMudHlwZSA9ICR7bWV0YS5leHBvcnRzIHx8IG1ldGEubmFtZX07YDtcclxuICAgICAgICByZXR1cm4gY29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydENvbnRlbnQoaWQpIHtyZXR1cm4gdGhpcy5zdGFydFBsdWdpbihpZCk7fVxyXG4gICAgc3RvcENvbnRlbnQoaWQpIHtyZXR1cm4gdGhpcy5zdG9wUGx1Z2luKGlkKTt9XHJcblxyXG4gICAgc3RhcnRQbHVnaW4oaWRPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQ29udGVudCkgOiBpZE9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBjb250ZW50LnBsdWdpbjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwbHVnaW4uc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwic3RhcnRlZFwiLCBjb250ZW50LmlkKTtcclxuICAgICAgICAgICAgVG9hc3RzLnNob3coYCR7Y29udGVudC5uYW1lfSB2JHtjb250ZW50LnZlcnNpb259IGhhcyBzdGFydGVkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgVG9hc3RzLmVycm9yKGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSBjb3VsZCBub3QgYmUgc3RhcnRlZC5gKTtcclxuICAgICAgICAgICAgVXRpbGl0aWVzLmVycihcIlBsdWdpbnNcIiwgY29udGVudC5uYW1lICsgXCIgY291bGQgbm90IGJlIHN0YXJ0ZWQuXCIsIGVycik7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29udGVudEVycm9yKGNvbnRlbnQubmFtZSwgY29udGVudC5maWxlbmFtZSwgXCJzdGFydCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0b3BQbHVnaW4oaWRPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQ29udGVudCkgOiBpZE9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBjb250ZW50LnBsdWdpbjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwbHVnaW4uc3RvcCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJzdG9wcGVkXCIsIGNvbnRlbnQuaWQpO1xyXG4gICAgICAgICAgICBUb2FzdHMuc2hvdyhgJHtjb250ZW50Lm5hbWV9IHYke2NvbnRlbnQudmVyc2lvbn0gaGFzIHN0b3BwZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBUb2FzdHMuZXJyb3IoYCR7Y29udGVudC5uYW1lfSB2JHtjb250ZW50LnZlcnNpb259IGNvdWxkIG5vdCBiZSBzdG9wcGVkLmApO1xyXG4gICAgICAgICAgICBVdGlsaXRpZXMuZXJyKFwiUGx1Z2luc1wiLCBjb250ZW50Lm5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBjb250ZW50LmZpbGVuYW1lLCBcInN0b3AoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXR1cEZ1bmN0aW9ucygpIHtcclxuICAgICAgICBlbGVjdHJvblJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMub25Td2l0Y2guYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU3dpdGNoKCkge1xyXG4gICAgICAgIHRoaXMuZW1pdChcInBhZ2Utc3dpdGNoXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb250ZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzLmNvbnRlbnRMaXN0W2ldLnBsdWdpbjtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW3RoaXMuY29udGVudExpc3RbaV0uaWRdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihwbHVnaW4ub25Td2l0Y2gpID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxpdGllcy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgdGhpcy5jb250ZW50TGlzdFtpXS5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk11dGF0aW9uKG11dGF0aW9uKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbnRlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuY29udGVudExpc3RbaV0ucGx1Z2luO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbdGhpcy5jb250ZW50TGlzdFtpXS5pZF0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkgeyBwbHVnaW4ub2JzZXJ2ZXIobXV0YXRpb24pOyB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxpdGllcy5lcnIoXCJQbHVnaW5zXCIsIFwiVW5hYmxlIHRvIGZpcmUgb2JzZXJ2ZXIgZm9yIFwiICsgdGhpcy5jb250ZW50TGlzdFtpXS5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/pluginmanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../structs/contenterror */ \"./src/structs/contenterror.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\nconst electronRemote = __webpack_require__(/*! electron */ \"electron\").remote;\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PluginManager extends _contentmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n get name() {\n return \"PluginManager\";\n }\n\n get moduleExtension() {\n return \".js\";\n }\n\n get extension() {\n return \".plugin.js\";\n }\n\n get contentFolder() {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"plugins\");\n }\n\n get prefix() {\n return \"plugin\";\n }\n\n constructor() {\n super();\n this.onSwitch = this.onSwitch.bind(this);\n this.observer = new MutationObserver(mutations => {\n for (let i = 0, mlen = mutations.length; i < mlen; i++) {\n this.onMutation(mutations[i]);\n }\n });\n }\n /* Aliases */\n\n\n updatePluginList() {\n return this.updateList();\n }\n\n enablePlugin(idOrContent) {\n return this.enableContent(idOrContent);\n }\n\n disablePlugin(idOrContent) {\n return this.disableContent(idOrContent);\n }\n\n togglePlugin(id) {\n return this.toggleContent(id);\n }\n\n unloadPlugin(idOrFileOrContent) {\n return this.unloadContent(idOrFileOrContent);\n }\n\n loadPlugin(filename) {\n const error = this.loadContent(filename);\n if (error) ui__WEBPACK_IMPORTED_MODULE_3__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n\n reloadPlugin(filename) {\n const error = this.reloadContent(filename);\n if (error) ui__WEBPACK_IMPORTED_MODULE_3__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n\n loadAllPlugins() {\n const errors = this.loadAllContent();\n this.setupFunctions();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].registerPanel(\"Plugins\", {\n element: () => ui__WEBPACK_IMPORTED_MODULE_3__[\"SettingsPanel\"].getPluginsPanel(this.contentList, this.contentFolder)\n });\n return errors;\n }\n /* Overrides */\n\n\n initializeContent(content) {\n if (!content.type) return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"Plugin had no exports\", {\n message: \"Plugin had no exports or no name property.\",\n stack: \"\"\n });\n\n try {\n const thePlugin = new content.type();\n content.plugin = thePlugin;\n content.name = thePlugin.getName() || content.name;\n content.author = content.author || thePlugin.getAuthor() || \"No author\";\n content.description = content.description || thePlugin.getDescription() || \"No description\";\n content.version = content.version || thePlugin.getVersion() || \"No version\";\n\n try {\n if (typeof content.plugin.load == \"function\") content.plugin.load();\n } catch (error) {\n this.state[content.id] = false;\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"load() could not be fired.\", {\n message: error.message,\n stack: error.stack\n });\n }\n } catch (error) {\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"Could not be constructed.\", {\n message: error.message,\n stack: error.stack\n });\n }\n }\n\n getContentModification(module, content, meta) {\n module._compile(content, module.filename);\n\n const didExport = !_utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isEmpty(module.exports);\n\n if (didExport) {\n meta.type = module.exports;\n module.exports = meta;\n return \"\";\n }\n\n content += `\\nmodule.exports = ${JSON.stringify(meta)};\\nmodule.exports.type = ${meta.exports || meta.name};`;\n return content;\n }\n\n startContent(id) {\n return this.startPlugin(id);\n }\n\n stopContent(id) {\n return this.stopPlugin(id);\n }\n\n startPlugin(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n const plugin = content.plugin;\n\n try {\n plugin.start();\n this.emit(\"started\", content.id);\n ui__WEBPACK_IMPORTED_MODULE_3__[\"Toasts\"].show(`${content.name} v${content.version} has started.`);\n } catch (err) {\n this.state[content.id] = false;\n ui__WEBPACK_IMPORTED_MODULE_3__[\"Toasts\"].error(`${content.name} v${content.version} could not be started.`);\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].err(\"Plugins\", content.name + \" could not be started.\", err);\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"start() could not be fired.\", {\n message: err.message,\n stack: err.stack\n });\n }\n }\n\n stopPlugin(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n const plugin = content.plugin;\n\n try {\n plugin.stop();\n this.emit(\"stopped\", content.id);\n ui__WEBPACK_IMPORTED_MODULE_3__[\"Toasts\"].show(`${content.name} v${content.version} has stopped.`);\n } catch (err) {\n this.state[content.id] = false;\n ui__WEBPACK_IMPORTED_MODULE_3__[\"Toasts\"].error(`${content.name} v${content.version} could not be stopped.`);\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].err(\"Plugins\", content.name + \" could not be stopped.\", err);\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_4__[\"default\"](content.name, content.filename, \"stop() could not be fired.\", {\n message: err.message,\n stack: err.stack\n });\n }\n }\n\n setupFunctions() {\n electronRemote.getCurrentWebContents().on(\"did-navigate-in-page\", this.onSwitch.bind(this));\n this.observer.observe(document, {\n childList: true,\n subtree: true\n });\n }\n\n onSwitch() {\n this.emit(\"page-switch\");\n\n for (let i = 0; i < this.contentList.length; i++) {\n const plugin = this.contentList[i].plugin;\n if (!this.state[this.contentList[i].id]) continue;\n\n if (typeof plugin.onSwitch === \"function\") {\n try {\n plugin.onSwitch();\n } catch (err) {\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].err(\"Plugins\", \"Unable to fire onSwitch for \" + this.contentList[i].name + \".\", err);\n }\n }\n }\n }\n\n onMutation(mutation) {\n for (let i = 0; i < this.contentList.length; i++) {\n const plugin = this.contentList[i].plugin;\n if (!this.state[this.contentList[i].id]) continue;\n\n if (typeof plugin.observer === \"function\") {\n try {\n plugin.observer(mutation);\n } catch (err) {\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].err(\"Plugins\", \"Unable to fire observer for \" + this.contentList[i].name + \".\", err);\n }\n }\n }\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcz9kMTczIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwiZWxlY3Ryb25SZW1vdGUiLCJyZW1vdGUiLCJQbHVnaW5NYW5hZ2VyIiwiQ29udGVudE1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiY29udGVudEZvbGRlciIsInJlc29sdmUiLCJDb25maWciLCJkYXRhUGF0aCIsInByZWZpeCIsImNvbnN0cnVjdG9yIiwib25Td2l0Y2giLCJiaW5kIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiaSIsIm1sZW4iLCJsZW5ndGgiLCJvbk11dGF0aW9uIiwidXBkYXRlUGx1Z2luTGlzdCIsInVwZGF0ZUxpc3QiLCJlbmFibGVQbHVnaW4iLCJpZE9yQ29udGVudCIsImVuYWJsZUNvbnRlbnQiLCJkaXNhYmxlUGx1Z2luIiwiZGlzYWJsZUNvbnRlbnQiLCJ0b2dnbGVQbHVnaW4iLCJpZCIsInRvZ2dsZUNvbnRlbnQiLCJ1bmxvYWRQbHVnaW4iLCJpZE9yRmlsZU9yQ29udGVudCIsInVubG9hZENvbnRlbnQiLCJsb2FkUGx1Z2luIiwiZmlsZW5hbWUiLCJlcnJvciIsImxvYWRDb250ZW50IiwiTW9kYWxzIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJ0aGVtZXMiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRDb250ZW50IiwibG9hZEFsbFBsdWdpbnMiLCJlcnJvcnMiLCJsb2FkQWxsQ29udGVudCIsInNldHVwRnVuY3Rpb25zIiwiU2V0dGluZ3MiLCJyZWdpc3RlclBhbmVsIiwiZWxlbWVudCIsIlNldHRpbmdzUmVuZGVyZXIiLCJnZXRQbHVnaW5zUGFuZWwiLCJjb250ZW50TGlzdCIsImluaXRpYWxpemVDb250ZW50IiwiY29udGVudCIsInR5cGUiLCJDb250ZW50RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJ0aGVQbHVnaW4iLCJwbHVnaW4iLCJnZXROYW1lIiwiYXV0aG9yIiwiZ2V0QXV0aG9yIiwiZGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwibG9hZCIsInN0YXRlIiwiZ2V0Q29udGVudE1vZGlmaWNhdGlvbiIsIm1vZHVsZSIsIm1ldGEiLCJfY29tcGlsZSIsImRpZEV4cG9ydCIsIlV0aWxpdGllcyIsImlzRW1wdHkiLCJleHBvcnRzIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YXJ0Q29udGVudCIsInN0YXJ0UGx1Z2luIiwic3RvcENvbnRlbnQiLCJzdG9wUGx1Z2luIiwiZmluZCIsInAiLCJzdGFydCIsImVtaXQiLCJUb2FzdHMiLCJzaG93IiwiZXJyIiwic3RvcCIsImdldEN1cnJlbnRXZWJDb250ZW50cyIsIm9uIiwib2JzZXJ2ZSIsImRvY3VtZW50IiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsIm11dGF0aW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1BLElBQUksR0FBR0MsbUJBQU8sQ0FBQyxrQkFBRCxDQUFwQjs7QUFDQSxNQUFNQyxjQUFjLEdBQUdELG1CQUFPLENBQUMsMEJBQUQsQ0FBUCxDQUFvQkUsTUFBM0M7O0FBRWUsbUVBQUksTUFBTUMsYUFBTixTQUE0QkMsdURBQTVCLENBQTJDO0FBQzFELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFDcEMsTUFBSUMsZUFBSixHQUFzQjtBQUFDLFdBQU8sS0FBUDtBQUFjOztBQUNyQyxNQUFJQyxTQUFKLEdBQWdCO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUN0QyxNQUFJQyxhQUFKLEdBQW9CO0FBQUMsV0FBT1QsSUFBSSxDQUFDVSxPQUFMLENBQWFDLDJDQUFNLENBQUNDLFFBQXBCLEVBQThCLFNBQTlCLENBQVA7QUFBaUQ7O0FBQ3RFLE1BQUlDLE1BQUos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LENBQUNoRCxRQUFQO0FBQW9CLFNBQTFCLENBQ0EsT0FBTzhFLEdBQVAsRUFBWTtBQUFFZiw0REFBUyxDQUFDZSxHQUFWLENBQWMsU0FBZCxFQUF5QixpQ0FBaUMsS0FBS3RDLFdBQUwsQ0FBaUJuQyxDQUFqQixFQUFvQmQsSUFBckQsR0FBNEQsR0FBckYsRUFBMEZ1RixHQUExRjtBQUFpRztBQUNsSDtBQUNKO0FBQ0o7O0FBRUR0RSxZQUFVLENBQUM4RSxRQUFELEVBQVc7QUFDakIsU0FBSyxJQUFJakYsQ0FBQyxHQUFHLENBQWIsRUFBZ0JBLENBQUMsR0FBRyxLQUFLbUMsV0FBTCxDQUFpQmpDLE1BQXJDLEVBQTZDRixDQUFDLEVBQTlDLEVBQWtEO0FBQzlDLFlBQU0yQyxNQUFNLEdBQUcsS0FBS1IsV0FBTCxDQUFpQm5DLENBQWpCLEVBQW9CMkMsTUFBbkM7QUFDQSxVQUFJLENBQUMsS0FBS1MsS0FBTCxDQUFXLEtBQUtqQixXQUFMLENBQWlCbkMsQ0FBakIsRUFBb0JZLEVBQS9CLENBQUwsRUFBeUM7O0FBQ3pDLFVBQUksT0FBTytCLE1BQU0sQ0FBQzlDLFFBQWQsS0FBMkIsVUFBL0IsRUFBMkM7QUFDdkMsWUFBSTtBQUFFOEMsZ0JBQU0sQ0FBQzlDLFFBQVAsQ0FBZ0JvRixRQUFoQjtBQUE0QixTQUFsQyxDQUNBLE9BQU9SLEdBQVAsRUFBWTtBQUFFZiw0REFBUyxDQUFDZSxHQUFWLENBQWMsU0FBZCxFQUF5QixpQ0FBaUMsS0FBS3RDLFdBQUwsQ0FBaUJuQyxDQUFqQixFQUFvQmQsSUFBckQsR0FBNEQsR0FBckYsRUFBMEZ1RixHQUExRjtBQUFpRztBQUNsSDtBQUNKO0FBQ0o7O0FBOUl5RCxDQUEvQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudG1hbmFnZXJcIjtcclxuaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IHtUb2FzdHMsIE1vZGFsc30gZnJvbSBcInVpXCI7XHJcbmltcG9ydCBDb250ZW50RXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvY29udGVudGVycm9yXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1BhbmVsIGFzIFNldHRpbmdzUmVuZGVyZXJ9IGZyb20gXCJ1aVwiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBlbGVjdHJvblJlbW90ZSA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luTWFuYWdlciBleHRlbmRzIENvbnRlbnRNYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlBsdWdpbk1hbmFnZXJcIjt9XHJcbiAgICBnZXQgbW9kdWxlRXh0ZW5zaW9uKCkge3JldHVybiBcIi5qc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnBsdWdpbi5qc1wiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcInBsdWdpbnNcIik7fVxyXG4gICAgZ2V0IHByZWZpeCgpIHtyZXR1cm4gXCJwbHVnaW5cIjt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLm9uU3dpdGNoID0gdGhpcy5vblN3aXRjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk11dGF0aW9uKG11dGF0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBBbGlhc2VzICovXHJcbiAgICB1cGRhdGVQbHVnaW5MaXN0KCkge3JldHVybiB0aGlzLnVwZGF0ZUxpc3QoKTt9XHJcblxyXG4gICAgZW5hYmxlUGx1Z2luKGlkT3JDb250ZW50KSB7cmV0dXJuIHRoaXMuZW5hYmxlQ29udGVudChpZE9yQ29udGVudCk7fVxyXG4gICAgZGlzYWJsZVBsdWdpbihpZE9yQ29udGVudCkge3JldHVybiB0aGlzLmRpc2FibGVDb250ZW50KGlkT3JDb250ZW50KTt9XHJcbiAgICB0b2dnbGVQbHVnaW4oaWQpIHtyZXR1cm4gdGhpcy50b2dnbGVDb250ZW50KGlkKTt9XHJcblxyXG4gICAgdW5sb2FkUGx1Z2luKGlkT3JGaWxlT3JDb250ZW50KSB7cmV0dXJuIHRoaXMudW5sb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCk7fVxyXG5cclxuICAgIGxvYWRQbHVnaW4oZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGlmIChlcnJvcikgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRQbHVnaW4oZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucmVsb2FkQ29udGVudChmaWxlbmFtZSk7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGxQbHVnaW5zKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMubG9hZEFsbENvbnRlbnQoKTtcclxuICAgICAgICB0aGlzLnNldHVwRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgU2V0dGluZ3MucmVnaXN0ZXJQYW5lbChcIlBsdWdpbnNcIiwge2VsZW1lbnQ6ICgpID0+IFNldHRpbmdzUmVuZGVyZXIuZ2V0UGx1Z2luc1BhbmVsKHRoaXMuY29udGVudExpc3QsIHRoaXMuY29udGVudEZvbGRlcil9KTtcclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIE92ZXJyaWRlcyAqL1xyXG4gICAgaW5pdGlhbGl6ZUNvbnRlbnQoY29udGVudCkge1xyXG4gICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGNvbnRlbnQuZmlsZW5hbWUsIFwiUGx1Z2luIGhhZCBubyBleHBvcnRzXCIsIHttZXNzYWdlOiBcIlBsdWdpbiBoYWQgbm8gZXhwb3J0cyBvciBubyBuYW1lIHByb3BlcnR5LlwiLCBzdGFjazogXCJcIn0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoZVBsdWdpbiA9IG5ldyBjb250ZW50LnR5cGUoKTtcclxuICAgICAgICAgICAgY29udGVudC5wbHVnaW4gPSB0aGVQbHVnaW47XHJcbiAgICAgICAgICAgIGNvbnRlbnQubmFtZSA9IHRoZVBsdWdpbi5nZXROYW1lKCkgfHwgY29udGVudC5uYW1lO1xyXG4gICAgICAgICAgICBjb250ZW50LmF1dGhvciA9IGNvbnRlbnQuYXV0aG9yIHx8IHRoZVBsdWdpbi5nZXRBdXRob3IoKSB8fCBcIk5vIGF1dGhvclwiO1xyXG4gICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uID0gY29udGVudC5kZXNjcmlwdGlvbiB8fCB0aGVQbHVnaW4uZ2V0RGVzY3JpcHRpb24oKSB8fCBcIk5vIGRlc2NyaXB0aW9uXCI7XHJcbiAgICAgICAgICAgIGNvbnRlbnQudmVyc2lvbiA9IGNvbnRlbnQudmVyc2lvbiB8fCB0aGVQbHVnaW4uZ2V0VmVyc2lvbigpIHx8IFwiTm8gdmVyc2lvblwiO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihjb250ZW50LnBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIGNvbnRlbnQucGx1Z2luLmxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29udGVudEVycm9yKGNvbnRlbnQubmFtZSwgY29udGVudC5maWxlbmFtZSwgXCJsb2FkKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBjb250ZW50LmZpbGVuYW1lLCBcIkNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO31cclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250ZW50TW9kaWZpY2F0aW9uKG1vZHVsZSwgY29udGVudCwgbWV0YSkge1xyXG4gICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRpZEV4cG9ydCA9ICFVdGlsaXRpZXMuaXNFbXB0eShtb2R1bGUuZXhwb3J0cyk7XHJcbiAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xyXG4gICAgICAgICAgICBtZXRhLnR5cGUgPSBtb2R1bGUuZXhwb3J0cztcclxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRhO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xyXG4gICAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0Q29udGVudChpZCkge3JldHVybiB0aGlzLnN0YXJ0UGx1Z2luKGlkKTt9XHJcbiAgICBzdG9wQ29udGVudChpZCkge3JldHVybiB0aGlzLnN0b3BQbHVnaW4oaWQpO31cclxuXHJcbiAgICBzdGFydFBsdWdpbihpZE9yQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JDb250ZW50KSA6IGlkT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGNvbnRlbnQucGx1Z2luO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHBsdWdpbi5zdGFydCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJzdGFydGVkXCIsIGNvbnRlbnQuaWQpO1xyXG4gICAgICAgICAgICBUb2FzdHMuc2hvdyhgJHtjb250ZW50Lm5hbWV9IHYke2NvbnRlbnQudmVyc2lvbn0gaGFzIHN0YXJ0ZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBUb2FzdHMuZXJyb3IoYCR7Y29udGVudC5uYW1lfSB2JHtjb250ZW50LnZlcnNpb259IGNvdWxkIG5vdCBiZSBzdGFydGVkLmApO1xyXG4gICAgICAgICAgICBVdGlsaXRpZXMuZXJyKFwiUGx1Z2luc1wiLCBjb250ZW50Lm5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBjb250ZW50LmZpbGVuYW1lLCBcInN0YXJ0KCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFBsdWdpbihpZE9yQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JDb250ZW50KSA6IGlkT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGNvbnRlbnQucGx1Z2luO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHBsdWdpbi5zdG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChcInN0b3BwZWRcIiwgY29udGVudC5pZCk7XHJcbiAgICAgICAgICAgIFRvYXN0cy5zaG93KGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSBoYXMgc3RvcHBlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFRvYXN0cy5lcnJvcihgJHtjb250ZW50Lm5hbWV9IHYke2NvbnRlbnQudmVyc2lvbn0gY291bGQgbm90IGJlIHN0b3BwZWQuYCk7XHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5lcnIoXCJQbHVnaW5zXCIsIGNvbnRlbnQubmFtZSArIFwiIGNvdWxkIG5vdCBiZSBzdG9wcGVkLlwiLCBlcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGNvbnRlbnQuZmlsZW5hbWUsIFwic3RvcCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwge21lc3NhZ2U6IGVyci5tZXNzYWdlLCBzdGFjazogZXJyLnN0YWNrfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNldHVwRnVuY3Rpb25zKCkge1xyXG4gICAgICAgIGVsZWN0cm9uUmVtb3RlLmdldEN1cnJlbnRXZWJDb250ZW50cygpLm9uKFwiZGlkLW5hdmlnYXRlLWluLXBhZ2VcIiwgdGhpcy5vblN3aXRjaC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcclxuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25Td2l0Y2goKSB7XHJcbiAgICAgICAgdGhpcy5lbWl0KFwicGFnZS1zd2l0Y2hcIik7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbnRlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuY29udGVudExpc3RbaV0ucGx1Z2luO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbdGhpcy5jb250ZW50TGlzdFtpXS5pZF0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHBsdWdpbi5vblN3aXRjaCkgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHsgcGx1Z2luLm9uU3dpdGNoKCk7IH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbGl0aWVzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvblN3aXRjaCBmb3IgXCIgKyB0aGlzLmNvbnRlbnRMaXN0W2ldLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTXV0YXRpb24obXV0YXRpb24pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udGVudExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcy5jb250ZW50TGlzdFtpXS5wbHVnaW47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZVt0aGlzLmNvbnRlbnRMaXN0W2ldLmlkXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vYnNlcnZlcihtdXRhdGlvbik7IH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbGl0aWVzLmVycihcIlBsdWdpbnNcIiwgXCJVbmFibGUgdG8gZmlyZSBvYnNlcnZlciBmb3IgXCIgKyB0aGlzLmNvbnRlbnRMaXN0W2ldLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/pluginmanager.js\n"); /***/ }), @@ -503,7 +467,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _pluginapi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n\n // import PluginManager from \"./pluginmanager\";\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsManager {\n constructor() {\n this.config = data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsConfig\"];\n this.state = data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsState\"];\n this.panels = [];\n this.setup(data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsConfig\"], data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsState\"]);\n }\n\n initialize() {\n _datastore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].initialize();\n this.loadSettings();\n this.patchSections(); // this.registerPanel(\"Plugins\", {element: () => SettingsRenderer.getPluginsPanel(PluginManager.contentList)});\n }\n\n registerPanel(name, options) {\n const {\n element,\n onClick\n } = options;\n const section = {\n label: name,\n section: name\n };\n if (onClick) section.onClick = onClick;else section.element = element instanceof _webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"DiscordModules\"].React.Component ? () => _webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"DiscordModules\"].React.createElement(element, {}) : typeof element == \"function\" ? element : () => element;\n this.panels.push(section);\n }\n\n getPath(path, collectionId = \"\", categoryId = \"\") {\n const collection = path.length == 3 ? path[0] : collectionId;\n const category = path.length == 3 ? path[1] : path.length == 2 ? path[0] : categoryId;\n const setting = path[path.length - 1];\n return {\n collection,\n category,\n setting\n };\n }\n\n setup(collections, state) {\n const config = {};\n\n for (let c = 0; c < collections.length; c++) {\n const collection = collections[c];\n const categories = collections[c].settings;\n config[collection.id] = {};\n\n for (let s = 0; s < categories.length; s++) {\n const category = categories[s];\n\n if (category.type != \"category\") {\n config[collection.id][category.id] = category.value;\n } else {\n config[collection.id][category.id] = {};\n\n for (let s = 0; s < category.settings.length; s++) {\n const setting = category.settings[s];\n config[collection.id][category.id][setting.id] = setting.value;\n\n if (setting.enableWith) {\n const path = this.getPath(setting.enableWith.split(\".\"), collection.id, category.id);\n Object.defineProperty(setting, \"disabled\", {\n get: () => {\n return !state[path.collection][path.category][path.setting];\n }\n });\n }\n }\n }\n }\n\n if (collection.enableWith) {\n const path = this.getPath(collection.enableWith.split(\".\"));\n Object.defineProperty(collection, \"disabled\", {\n get: () => {\n return !state[path.collection][path.category][path.setting];\n }\n });\n }\n }\n\n this.defaultState = config;\n Object.assign(this.state, this.defaultState);\n }\n\n async patchSections() {\n const UserSettings = await this.getUserSettings();\n _utilities__WEBPACK_IMPORTED_MODULE_6__[\"default\"].monkeyPatch(UserSettings.prototype, \"generateSections\", {\n after: data => {\n let location = data.returnValue.findIndex(s => s.section.toLowerCase() == \"linux\") + 1;\n\n const insert = section => {\n data.returnValue.splice(location, 0, section);\n location++;\n };\n\n console.log(data);\n /* eslint-disable-line no-console */\n\n insert({\n section: \"DIVIDER\"\n });\n insert({\n section: \"HEADER\",\n label: \"BandagedBD\"\n });\n\n for (const collection of this.config) {\n if (collection.disabled) continue;\n insert({\n section: collection.name,\n label: collection.name,\n element: () => ui__WEBPACK_IMPORTED_MODULE_5__[\"SettingsPanel\"].buildSettingsPanel(collection.name, collection.settings, data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsState\"][collection.id], this.onSettingChange.bind(this, collection.id))\n });\n }\n\n for (const panel of this.panels) insert(panel);\n\n insert({\n section: \"BBD Test\",\n label: \"Test Tab\",\n onClick: function () {\n ui__WEBPACK_IMPORTED_MODULE_5__[\"Toasts\"].success(\"This can just be a click listener!\", {\n forceShow: true\n });\n }\n });\n insert({\n section: \"CUSTOM\",\n element: () => ui__WEBPACK_IMPORTED_MODULE_5__[\"SettingsPanel\"].attribution\n });\n }\n });\n this.forceUpdate();\n }\n\n forceUpdate() {\n const viewClass = _webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getByProps(\"standardSidebarView\").standardSidebarView.split(\" \")[0];\n const node = document.querySelector(`.${viewClass}`);\n _utilities__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getInternalInstance(node).return.return.return.return.return.return.stateNode.forceUpdate();\n }\n\n getUserSettings() {\n return new Promise(resolve => {\n const cancel = _utilities__WEBPACK_IMPORTED_MODULE_6__[\"default\"].monkeyPatch(_webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getByProps(\"getUserSettingsSections\").default.prototype, \"render\", {\n after: data => {\n resolve(data.returnValue.type);\n data.thisObject.forceUpdate();\n cancel();\n }\n });\n });\n }\n\n saveSettings() {\n _datastore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setData(\"settings\", this.state);\n }\n\n loadSettings() {\n const previousState = _datastore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getData(\"settings\");\n if (!previousState) return this.saveSettings();\n\n for (const collection in this.defaultState) {\n if (!previousState[collection]) Object.assign(previousState, {\n [collection]: this.defaultState[collection]\n });\n\n for (const category in this.defaultState[collection]) {\n if (!previousState[collection][category]) Object.assign(previousState[collection][category], {\n [category]: this.defaultState[collection][category]\n });\n\n for (const setting in this.defaultState[collection][category]) {\n if (previousState[collection][category][setting] == undefined) continue;\n this.state[collection][category][setting] = previousState[collection][category][setting];\n }\n }\n }\n\n this.saveSettings(); // in case new things were added\n }\n\n onSettingChange(collection, category, id, value) {\n const before = this.config.filter(c => c.disabled).length;\n this.state[collection][category][id] = value;\n _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].dispatch(\"setting-updated\", collection, category, id, value);\n const after = this.config.filter(c => c.disabled).length;\n this.saveSettings();\n if (before != after) this.forceUpdate();\n }\n\n getSetting(collection, category, id) {\n if (arguments.length == 2) return this.config[0].find(c => c.id == arguments[0]).settings.find(s => s.id == arguments[1]);\n return this.config.find(c => c.id == collection).find(c => c.id == category).settings.find(s => s.id == id);\n }\n\n get(collection, category, id) {\n if (arguments.length == 2) return this.state[this.config[0].id][arguments[0]][arguments[1]];\n return this.state[collection][category][id];\n }\n\n on(collection, category, identifier, callback) {\n const handler = (col, cat, id, value) => {\n if (col !== collection || cat !== category || id !== identifier) return;\n callback(value);\n };\n\n _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].on(\"setting-updated\", handler);\n return () => {\n _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].off(\"setting-updated\", handler);\n };\n }\n\n updateSettings(collection, category, id, enabled) {\n if (id == \"fork-wp-1\") {\n _pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setWindowPreference(\"transparent\", enabled);\n if (enabled) _pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setWindowPreference(\"backgroundColor\", null);else _pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setWindowPreference(\"backgroundColor\", \"#2f3136\");\n } // this.saveSettings();\n\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvc2V0dGluZ3NtYW5hZ2VyLmpzP2IyZjkiXSwibmFtZXMiOlsiU2V0dGluZ3NNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJTZXR0aW5nc0NvbmZpZyIsInN0YXRlIiwiU2V0dGluZ3NTdGF0ZSIsInBhbmVscyIsInNldHVwIiwiaW5pdGlhbGl6ZSIsIkRhdGFTdG9yZSIsImxvYWRTZXR0aW5ncyIsInBhdGNoU2VjdGlvbnMiLCJyZWdpc3RlclBhbmVsIiwibmFtZSIsIm9wdGlvbnMiLCJlbGVtZW50Iiwib25DbGljayIsInNlY3Rpb24iLCJsYWJlbCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjcmVhdGVFbGVtZW50IiwicHVzaCIsImdldFBhdGgiLCJwYXRoIiwiY29sbGVjdGlvbklkIiwiY2F0ZWdvcnlJZCIsImNvbGxlY3Rpb24iLCJsZW5ndGgiLCJjYXRlZ29yeSIsInNldHRpbmciLCJjb2xsZWN0aW9ucyIsImMiLCJjYXRlZ29yaWVzIiwic2V0dGluZ3MiLCJpZCIsInMiLCJ0eXBlIiwidmFsdWUiLCJlbmFibGVXaXRoIiwic3BsaXQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImRlZmF1bHRTdGF0ZSIsImFzc2lnbiIsIlVzZXJTZXR0aW5ncyIsImdldFVzZXJTZXR0aW5ncyIsIlV0aWxpdGllcyIsIm1vbmtleVBhdGNoIiwicHJvdG90eXBlIiwiYWZ0ZXIiLCJkYXRhIiwibG9jYXRpb24iLCJyZXR1cm5WYWx1ZSIsImZpbmRJbmRleCIsInRvTG93ZXJDYXNlIiwiaW5zZXJ0Iiwic3BsaWNlIiwiY29uc29sZSIsImxvZyIsImRpc2FibGVkIiwiU2V0dGluZ3NSZW5kZXJlciIsImJ1aWxkU2V0dGluZ3NQYW5lbCIsIm9uU2V0dGluZ0NoYW5nZSIsImJpbmQiLCJwYW5lbCIsIlRvYXN0cyIsInN1Y2Nlc3MiLCJmb3JjZVNob3ciLCJhdHRyaWJ1dGlvbiIsImZvcmNlVXBkYXRlIiwidmlld0NsYXNzIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsIm5vZGUiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJnZXRJbnRlcm5hbEluc3RhbmNlIiwicmV0dXJuIiwic3RhdGVOb2RlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYW5jZWwiLCJkZWZhdWx0IiwidGhpc09iamVjdCIsInNhdmVTZXR0aW5ncyIsInNldERhdGEiLCJwcmV2aW91c1N0YXRlIiwiZ2V0RGF0YSIsInVuZGVmaW5lZCIsImJlZm9yZSIsImZpbHRlciIsIkV2ZW50cyIsImRpc3BhdGNoIiwiZ2V0U2V0dGluZyIsImFyZ3VtZW50cyIsImZpbmQiLCJvbiIsImlkZW50aWZpZXIiLCJjYWxsYmFjayIsImhhbmRsZXIiLCJjb2wiLCJjYXQiLCJvZmYiLCJ1cGRhdGVTZXR0aW5ncyIsImVuYWJsZWQiLCJCZEFwaSIsInNldFdpbmRvd1ByZWZlcmVuY2UiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtDQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLGVBQU4sQ0FBc0I7QUFFckNDLGFBQVcsR0FBRztBQUNWLFNBQUtDLE1BQUwsR0FBY0MsbURBQWQ7QUFDQSxTQUFLQyxLQUFMLEdBQWFDLGtEQUFiO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDQSxTQUFLQyxLQUFMLENBQVdKLG1EQUFYLEVBQTJCRSxrREFBM0I7QUFDSDs7QUFFREcsWUFBVSxHQUFHO0FBQ1RDLHNEQUFTLENBQUNELFVBQVY7QUFDQSxTQUFLRSxZQUFMO0FBQ0EsU0FBS0MsYUFBTCxHQUhTLENBSVQ7QUFDSDs7QUFFREMsZUFBYSxDQUFDQyxJQUFELEVBQU9DLE9BQVAsRUFBZ0I7QUFDekIsVUFBTTtBQUFDQyxhQUFEO0FBQVVDO0FBQVYsUUFBcUJGLE9BQTNC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Q0FBUjtBQUNILEtBSEQ7O0FBSUF3RCxvREFBTSxDQUFDSyxFQUFQLENBQVUsaUJBQVYsRUFBNkJHLE9BQTdCO0FBQ0EsV0FBTyxNQUFNO0FBQUNSLHNEQUFNLENBQUNXLEdBQVAsQ0FBVyxpQkFBWCxFQUE4QkgsT0FBOUI7QUFBd0MsS0FBdEQ7QUFDSDs7QUFFREksZ0JBQWMsQ0FBQy9FLFVBQUQsRUFBYUUsUUFBYixFQUF1Qk0sRUFBdkIsRUFBMkJ3RSxPQUEzQixFQUFvQztBQUU5QyxRQUFJeEUsRUFBRSxJQUFJLFdBQVYsRUFBdUI7QUFDbkJ5RSx3REFBSyxDQUFDQyxtQkFBTixDQUEwQixhQUExQixFQUF5Q0YsT0FBekM7QUFDQSxVQUFJQSxPQUFKLEVBQWFDLGtEQUFLLENBQUNDLG1CQUFOLENBQTBCLGlCQUExQixFQUE2QyxJQUE3QyxFQUFiLEtBQ0tELGtEQUFLLENBQUNDLG1CQUFOLENBQTBCLGlCQUExQixFQUE2QyxTQUE3QztBQUNSLEtBTjZDLENBUTlDOztBQUNIOztBQTFLb0MsQ0FBMUIsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL3NldHRpbmdzbWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2V0dGluZ3NDb25maWcsIFNldHRpbmdzU3RhdGV9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbi8vIGltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL3BsdWdpbmFwaVwiO1xyXG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL2VtaXR0ZXJcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzLCB7RGlzY29yZE1vZHVsZXN9IGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQge1NldHRpbmdzUGFuZWwgYXMgU2V0dGluZ3NSZW5kZXJlcn0gZnJvbSBcInVpXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCB7VG9hc3RzfSBmcm9tIFwidWlcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBTZXR0aW5nc01hbmFnZXIge1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuY29uZmlnID0gU2V0dGluZ3NDb25maWc7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFNldHRpbmdzU3RhdGU7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMgPSBbXTtcclxuICAgICAgICB0aGlzLnNldHVwKFNldHRpbmdzQ29uZmlnLCBTZXR0aW5nc1N0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuICAgICAgICB0aGlzLnBhdGNoU2VjdGlvbnMoKTtcclxuICAgICAgICAvLyB0aGlzLnJlZ2lzdGVyUGFuZWwoXCJQbHVnaW5zXCIsIHtlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmdldFBsdWdpbnNQYW5lbChQbHVnaW5NYW5hZ2VyLmNvbnRlbnRMaXN0KX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyUGFuZWwobmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGNvbnN0IHtlbGVtZW50LCBvbkNsaWNrfSA9IG9wdGlvbnM7XHJcbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHtsYWJlbDogbmFtZSwgc2VjdGlvbjogbmFtZX07XHJcbiAgICAgICAgaWYgKG9uQ2xpY2spIHNlY3Rpb24ub25DbGljayA9IG9uQ2xpY2s7XHJcbiAgICAgICAgZWxzZSBzZWN0aW9uLmVsZW1lbnQgPSBlbGVtZW50IGluc3RhbmNlb2YgRGlzY29yZE1vZHVsZXMuUmVhY3QuQ29tcG9uZW50ID8gKCkgPT4gRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChlbGVtZW50LCB7fSkgOiB0eXBlb2YoZWxlbWVudCkgPT0gXCJmdW5jdGlvblwiID8gZWxlbWVudCA6ICgpID0+IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMucHVzaChzZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQYXRoKHBhdGgsIGNvbGxlY3Rpb25JZCA9IFwiXCIsIGNhdGVnb3J5SWQgPSBcIlwiKSB7XHJcbiAgICAgICAgY29uc3QgY29sbGVjdGlvbiA9IHBhdGgubGVuZ3RoID09IDMgPyBwYXRoWzBdIDogY29sbGVjdGlvbklkO1xyXG4gICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gcGF0aC5sZW5ndGggPT0gMyA/IHBhdGhbMV0gOiBwYXRoLmxlbmd0aCA9PSAyID8gcGF0aFswXSA6IGNhdGVnb3J5SWQ7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZyA9IHBhdGhbcGF0aC5sZW5ndGggLSAxXTtcclxuICAgICAgICByZXR1cm4ge2NvbGxlY3Rpb24sIGNhdGVnb3J5LCBzZXR0aW5nfTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cChjb2xsZWN0aW9ucywgc3RhdGUpIHtcclxuICAgICAgICBjb25zdCBjb25maWcgPSB7fTtcclxuICAgICAgICBmb3IgKGxldCBjID0gMDsgYyA8IGNvbGxlY3Rpb25zLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uc1tjXTtcclxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IGNvbGxlY3Rpb25zW2NdLnNldHRpbmdzO1xyXG4gICAgICAgICAgICBjb25maWdbY29sbGVjdGlvbi5pZF0gPSB7fTtcclxuICAgICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBjYXRlZ29yaWVzLmxlbmd0aDsgcysrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRlZ29yeSA9IGNhdGVnb3JpZXNbc107XHJcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkudHlwZSAhPSBcImNhdGVnb3J5XCIpIHtjb25maWdbY29sbGVjdGlvbi5pZF1bY2F0ZWdvcnkuaWRdID0gY2F0ZWdvcnkudmFsdWU7fVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnW2NvbGxlY3Rpb24uaWRdW2NhdGVnb3J5LmlkXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgY2F0ZWdvcnkuc2V0dGluZ3MubGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IGNhdGVnb3J5LnNldHRpbmdzW3NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maWdbY29sbGVjdGlvbi5pZF1bY2F0ZWdvcnkuaWRdW3NldHRpbmcuaWRdID0gc2V0dGluZy52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuZW5hYmxlV2l0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aChzZXR0aW5nLmVuYWJsZVdpdGguc3BsaXQoXCIuXCIpLCBjb2xsZWN0aW9uLmlkLCBjYXRlZ29yeS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2V0dGluZywgXCJkaXNhYmxlZFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc3RhdGVbcGF0aC5jb2xsZWN0aW9uXVtwYXRoLmNhdGVnb3J5XVtwYXRoLnNldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uLmVuYWJsZVdpdGgpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFBhdGgoY29sbGVjdGlvbi5lbmFibGVXaXRoLnNwbGl0KFwiLlwiKSk7XHJcbiAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29sbGVjdGlvbiwgXCJkaXNhYmxlZFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhc3RhdGVbcGF0aC5jb2xsZWN0aW9uXVtwYXRoLmNhdGVnb3J5XVtwYXRoLnNldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRlZmF1bHRTdGF0ZSA9IGNvbmZpZztcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuc3RhdGUsIHRoaXMuZGVmYXVsdFN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwYXRjaFNlY3Rpb25zKCkge1xyXG4gICAgICAgIGNvbnN0IFVzZXJTZXR0aW5ncyA9IGF3YWl0IHRoaXMuZ2V0VXNlclNldHRpbmdzKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLm1vbmtleVBhdGNoKFVzZXJTZXR0aW5ncy5wcm90b3R5cGUsIFwiZ2VuZXJhdGVTZWN0aW9uc1wiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbiA9IGRhdGEucmV0dXJuVmFsdWUuZmluZEluZGV4KHMgPT4gcy5zZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT0gXCJsaW51eFwiKSArIDE7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc2VydCA9IChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLnJldHVyblZhbHVlLnNwbGljZShsb2NhdGlvbiwgMCwgc2VjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBsb2NhdGlvbisrO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhkYXRhKTsgLyogZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlICovXHJcbiAgICAgICAgICAgIGluc2VydCh7c2VjdGlvbjogXCJESVZJREVSXCJ9KTtcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkhFQURFUlwiLCBsYWJlbDogXCJCYW5kYWdlZEJEXCJ9KTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIHRoaXMuY29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5kaXNhYmxlZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGNvbGxlY3Rpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sbGVjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6ICgpID0+IFNldHRpbmdzUmVuZGVyZXIuYnVpbGRTZXR0aW5nc1BhbmVsKGNvbGxlY3Rpb24ubmFtZSwgY29sbGVjdGlvbi5zZXR0aW5ncywgU2V0dGluZ3NTdGF0ZVtjb2xsZWN0aW9uLmlkXSwgdGhpcy5vblNldHRpbmdDaGFuZ2UuYmluZCh0aGlzLCBjb2xsZWN0aW9uLmlkKSlcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgcGFuZWwgb2YgdGhpcy5wYW5lbHMpIGluc2VydChwYW5lbCk7XHJcbiAgICAgICAgICAgIGluc2VydCh7c2VjdGlvbjogXCJCQkQgVGVzdFwiLCBsYWJlbDogXCJUZXN0IFRhYlwiLCBvbkNsaWNrOiBmdW5jdGlvbigpIHtUb2FzdHMuc3VjY2VzcyhcIlRoaXMgY2FuIGp1c3QgYmUgYSBjbGljayBsaXN0ZW5lciFcIiwge2ZvcmNlU2hvdzogdHJ1ZX0pO319KTtcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmF0dHJpYnV0aW9ufSk7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgICAgIHRoaXMuZm9yY2VVcGRhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3JjZVVwZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCB2aWV3Q2xhc3MgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic3RhbmRhcmRTaWRlYmFyVmlld1wiKS5zdGFuZGFyZFNpZGViYXJWaWV3LnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBub2RlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7dmlld0NsYXNzfWApO1xyXG4gICAgICAgIFV0aWxpdGllcy5nZXRJbnRlcm5hbEluc3RhbmNlKG5vZGUpLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnN0YXRlTm9kZS5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFVzZXJTZXR0aW5ncygpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNhbmNlbCA9IFV0aWxpdGllcy5tb25rZXlQYXRjaChXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0VXNlclNldHRpbmdzU2VjdGlvbnNcIikuZGVmYXVsdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YS5yZXR1cm5WYWx1ZS50eXBlKTtcclxuICAgICAgICAgICAgICAgIGRhdGEudGhpc09iamVjdC5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgY2FuY2VsKCk7XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldERhdGEoXCJzZXR0aW5nc1wiLCB0aGlzLnN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IERhdGFTdG9yZS5nZXREYXRhKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c1N0YXRlKSAgcmV0dXJuIHRoaXMuc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIGluIHRoaXMuZGVmYXVsdFN0YXRlKSB7XHJcbiAgICAgICAgICAgIGlmICghcHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXSkgT2JqZWN0LmFzc2lnbihwcmV2aW91c1N0YXRlLCB7W2NvbGxlY3Rpb25dOiB0aGlzLmRlZmF1bHRTdGF0ZVtjb2xsZWN0aW9uXX0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IGluIHRoaXMuZGVmYXVsdFN0YXRlW2NvbGxlY3Rpb25dKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByZXZpb3VzU3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldKSBPYmplY3QuYXNzaWduKHByZXZpb3VzU3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldLCB7W2NhdGVnb3J5XTogdGhpcy5kZWZhdWx0U3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldfSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gdGhpcy5kZWZhdWx0U3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzU3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldW3NldHRpbmddID09IHVuZGVmaW5lZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV1bc2V0dGluZ10gPSBwcmV2aW91c1N0YXRlW2NvbGxlY3Rpb25dW2NhdGVnb3J5XVtzZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTsgLy8gaW4gY2FzZSBuZXcgdGhpbmdzIHdlcmUgYWRkZWRcclxuICAgIH1cclxuXHJcbiAgICBvblNldHRpbmdDaGFuZ2UoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCB2YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGJlZm9yZSA9IHRoaXMuY29uZmlnLmZpbHRlcihjID0+IGMuZGlzYWJsZWQpLmxlbmd0aDtcclxuICAgICAgICB0aGlzLnN0YXRlW2NvbGxlY3Rpb25dW2NhdGVnb3J5XVtpZF0gPSB2YWx1ZTtcclxuICAgICAgICBFdmVudHMuZGlzcGF0Y2goXCJzZXR0aW5nLXVwZGF0ZWRcIiwgY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCB2YWx1ZSk7XHJcbiAgICAgICAgY29uc3QgYWZ0ZXIgPSB0aGlzLmNvbmZpZy5maWx0ZXIoYyA9PiBjLmRpc2FibGVkKS5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICBpZiAoYmVmb3JlICE9IGFmdGVyKSB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZyhjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSByZXR1cm4gdGhpcy5jb25maWdbMF0uZmluZChjID0+IGMuaWQgPT0gYXJndW1lbnRzWzBdKS5zZXR0aW5ncy5maW5kKHMgPT4gcy5pZCA9PSBhcmd1bWVudHNbMV0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5maW5kKGMgPT4gYy5pZCA9PSBjb2xsZWN0aW9uKS5maW5kKGMgPT4gYy5pZCA9PSBjYXRlZ29yeSkuc2V0dGluZ3MuZmluZChzID0+IHMuaWQgPT0gaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSByZXR1cm4gdGhpcy5zdGF0ZVt0aGlzLmNvbmZpZ1swXS5pZF1bYXJndW1lbnRzWzBdXVthcmd1bWVudHNbMV1dO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXRlW2NvbGxlY3Rpb25dW2NhdGVnb3J5XVtpZF07XHJcbiAgICB9XHJcblxyXG4gICAgb24oY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkZW50aWZpZXIsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IChjb2wsIGNhdCwgaWQsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wgIT09IGNvbGxlY3Rpb24gfHwgY2F0ICE9PSBjYXRlZ29yeSB8fCBpZCAhPT0gaWRlbnRpZmllcikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBFdmVudHMub24oXCJzZXR0aW5nLXVwZGF0ZWRcIiwgaGFuZGxlcik7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtFdmVudHMub2ZmKFwic2V0dGluZy11cGRhdGVkXCIsIGhhbmRsZXIpO307XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlU2V0dGluZ3MoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCBlbmFibGVkKSB7XHJcblxyXG4gICAgICAgIGlmIChpZCA9PSBcImZvcmstd3AtMVwiKSB7XHJcbiAgICAgICAgICAgIEJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJ0cmFuc3BhcmVudFwiLCBlbmFibGVkKTtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIEJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgbnVsbCk7XHJcbiAgICAgICAgICAgIGVsc2UgQmRBcGkuc2V0V2luZG93UHJlZmVyZW5jZShcImJhY2tncm91bmRDb2xvclwiLCBcIiMyZjMxMzZcIik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aGlzLnNhdmVTZXR0aW5ncygpO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/settingsmanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _pluginapi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsManager {\n constructor() {\n this.config = data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsConfig\"];\n this.state = data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsState\"];\n this.collections = [];\n this.panels = [];\n this.registerCollection(\"settings\", \"Settings\", data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsConfig\"]);\n }\n\n initialize() {\n _datastore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].initialize();\n this.loadSettings();\n this.patchSections();\n }\n\n registerCollection(id, name, settings, button = null) {\n if (this.collections.find(c => c.id == id)) _utilities__WEBPACK_IMPORTED_MODULE_6__[\"default\"].err(\"Settings\", \"Already have a collection with id \" + id);\n this.collections.push({\n type: \"collection\",\n id: id,\n name: name,\n settings: settings,\n button: button\n });\n this.setup();\n }\n\n removeCollection(id) {\n const location = this.collections.findIndex(c => c.id == id);\n if (!location < 0) _utilities__WEBPACK_IMPORTED_MODULE_6__[\"default\"].err(\"Settings\", \"No collection with id \" + id);\n this.collections.splice(location, 1);\n }\n\n registerPanel(name, options) {\n const {\n element,\n onClick\n } = options;\n const section = {\n label: name,\n section: name\n };\n if (onClick) section.onClick = onClick;else section.element = element instanceof _webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"DiscordModules\"].React.Component ? () => _webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"DiscordModules\"].React.createElement(element, {}) : typeof element == \"function\" ? element : () => element;\n this.panels.push(section);\n }\n\n getPath(path, collectionId = \"\", categoryId = \"\") {\n const collection = path.length == 3 ? path[0] : collectionId;\n const category = path.length == 3 ? path[1] : path.length == 2 ? path[0] : categoryId;\n const setting = path[path.length - 1];\n return {\n collection,\n category,\n setting\n };\n }\n\n setup() {\n console.log(\"before state\");\n console.log(this.state);\n\n for (let c = 0; c < this.collections.length; c++) {\n const collection = this.collections[c];\n const categories = this.collections[c].settings;\n if (!this.state[collection.id]) this.state[collection.id] = {};\n\n for (let s = 0; s < categories.length; s++) {\n const category = categories[s];\n\n if (category.type != \"category\") {\n if (!this.state[collection.id].hasOwnProperty(category.id)) this.state[collection.id][category.id] = category.value;\n } else {\n if (!this.state[collection.id].hasOwnProperty(category.id)) this.state[collection.id][category.id] = {};\n\n for (let s = 0; s < category.settings.length; s++) {\n const setting = category.settings[s];\n if (!this.state[collection.id][category.id].hasOwnProperty(setting.id)) this.state[collection.id][category.id][setting.id] = setting.value;\n\n if (setting.enableWith) {\n const path = this.getPath(setting.enableWith.split(\".\"), collection.id, category.id);\n if (setting.hasOwnProperty(\"disabled\")) continue;\n Object.defineProperty(setting, \"disabled\", {\n get: () => {\n return !this.state[path.collection][path.category][path.setting];\n }\n });\n }\n }\n }\n }\n\n if (collection.enableWith) {\n const path = this.getPath(collection.enableWith.split(\".\"));\n Object.defineProperty(collection, \"disabled\", {\n get: () => {\n return !this.state[path.collection][path.category][path.setting];\n }\n });\n }\n }\n\n console.log(\"after state\");\n console.log(this.state);\n }\n\n async patchSections() {\n const UserSettings = await this.getUserSettings();\n _utilities__WEBPACK_IMPORTED_MODULE_6__[\"default\"].monkeyPatch(UserSettings.prototype, \"generateSections\", {\n after: data => {\n let location = data.returnValue.findIndex(s => s.section.toLowerCase() == \"linux\") + 1;\n\n const insert = section => {\n data.returnValue.splice(location, 0, section);\n location++;\n };\n\n console.log(data);\n /* eslint-disable-line no-console */\n\n insert({\n section: \"DIVIDER\"\n });\n insert({\n section: \"HEADER\",\n label: \"BandagedBD\"\n });\n\n for (const collection of this.collections) {\n if (collection.disabled) continue;\n insert({\n section: collection.name,\n label: collection.name,\n element: () => ui__WEBPACK_IMPORTED_MODULE_5__[\"SettingsPanel\"].buildSettingsPanel(collection.name, collection.settings, data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsState\"][collection.id], this.onSettingChange.bind(this, collection.id), collection.button ? collection.button : null)\n });\n }\n\n for (const panel of this.panels) insert(panel);\n\n insert({\n section: \"BBD Test\",\n label: \"Test Tab\",\n onClick: function () {\n ui__WEBPACK_IMPORTED_MODULE_5__[\"Toasts\"].success(\"This can just be a click listener!\", {\n forceShow: true\n });\n }\n });\n insert({\n section: \"CUSTOM\",\n element: () => ui__WEBPACK_IMPORTED_MODULE_5__[\"SettingsPanel\"].attribution\n });\n }\n });\n this.forceUpdate();\n }\n\n forceUpdate() {\n const viewClass = _webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getByProps(\"standardSidebarView\").standardSidebarView.split(\" \")[0];\n const node = document.querySelector(`.${viewClass}`);\n _utilities__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getInternalInstance(node).return.return.return.return.return.return.stateNode.forceUpdate();\n }\n\n getUserSettings() {\n return new Promise(resolve => {\n const cancel = _utilities__WEBPACK_IMPORTED_MODULE_6__[\"default\"].monkeyPatch(_webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getByProps(\"getUserSettingsSections\").default.prototype, \"render\", {\n after: data => {\n resolve(data.returnValue.type);\n data.thisObject.forceUpdate();\n cancel();\n }\n });\n });\n }\n\n saveSettings() {\n _datastore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setData(\"settings\", this.state);\n }\n\n loadSettings() {\n const previousState = _datastore__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getData(\"settings\");\n if (!previousState) return this.saveSettings();\n\n for (const collection in this.defaultState) {\n if (!previousState[collection]) Object.assign(previousState, {\n [collection]: this.defaultState[collection]\n });\n\n for (const category in this.defaultState[collection]) {\n if (!previousState[collection][category]) Object.assign(previousState[collection][category], {\n [category]: this.defaultState[collection][category]\n });\n\n for (const setting in this.defaultState[collection][category]) {\n if (previousState[collection][category][setting] == undefined) continue;\n this.state[collection][category][setting] = previousState[collection][category][setting];\n }\n }\n }\n\n this.saveSettings(); // in case new things were added\n }\n\n onSettingChange(collection, category, id, value) {\n const before = this.collections.length;\n this.state[collection][category][id] = value;\n _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].dispatch(\"setting-updated\", collection, category, id, value);\n const after = this.collections.length;\n this.saveSettings();\n if (before != after) this.forceUpdate();\n }\n\n getSetting(collection, category, id) {\n if (arguments.length == 2) return this.collections[0].find(c => c.id == arguments[0]).settings.find(s => s.id == arguments[1]);\n return this.collections.find(c => c.id == collection).find(c => c.id == category).settings.find(s => s.id == id);\n }\n\n get(collection, category, id) {\n if (arguments.length == 2) {\n id = category;\n category = collection;\n collection = \"settings\";\n }\n\n if (!this.state[collection] || !this.state[collection][category]) return false;\n return this.state[collection][category][id];\n }\n\n on(collection, category, identifier, callback) {\n const handler = (col, cat, id, value) => {\n if (col !== collection || cat !== category || id !== identifier) return;\n callback(value);\n };\n\n _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].on(\"setting-updated\", handler);\n return () => {\n _emitter__WEBPACK_IMPORTED_MODULE_3__[\"default\"].off(\"setting-updated\", handler);\n };\n }\n\n updateSettings(collection, category, id, enabled) {\n if (id == \"fork-wp-1\") {\n _pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setWindowPreference(\"transparent\", enabled);\n if (enabled) _pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setWindowPreference(\"backgroundColor\", null);else _pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setWindowPreference(\"backgroundColor\", \"#2f3136\");\n } // this.saveSettings();\n\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvc2V0dGluZ3NtYW5hZ2VyLmpzP2IyZjkiXSwibmFtZXMiOlsiU2V0dGluZ3NNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJTZXR0aW5nc0NvbmZpZyIsInN0YXRlIiwiU2V0dGluZ3NTdGF0ZSIsImNvbGxlY3Rpb25zIiwicGFuZWxzIiwicmVnaXN0ZXJDb2xsZWN0aW9uIiwiaW5pdGlhbGl6ZSIsIkRhdGFTdG9yZSIsImxvYWRTZXR0aW5ncyIsInBhdGNoU2VjdGlvbnMiLCJpZCIsIm5hbWUiLCJzZXR0aW5ncyIsImJ1dHRvbiIsImZpbmQiLCJjIiwiVXRpbGl0aWVzIiwiZXJyIiwicHVzaCIsInR5cGUiLCJzZXR1cCIsInJlbW92ZUNvbGxlY3Rpb24iLCJsb2NhdGlvbiIsImZpbmRJbmRleCIsInNwbGljZSIsInJlZ2lzdGVyUGFuZWwiLCJvcHRpb25zIiwiZWxlbWVudCIsIm9uQ2xpY2siLCJzZWN0aW9uIiwibGFiZWwiLCJEaXNjb3JkTW9kdWxlcyIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY3JlYXRlRWxlbWVudCIsImdldFBhdGgiLCJwYXRoIiwiY29sbGVjdGlvbklkIiwiY2F0ZWdvcnlJZCIsImNvbGxlY3Rpb24iLCJsZW5ndGgiLCJjYXRlZ29yeSIsInNldHRpbmciLCJjb25zb2xlIiwibG9nIiwiY2F0ZWdvcmllcyIsInMiLCJoYXNPd25Qcm9wZXJ0eSIsInZhbHVlIiwiZW5hYmxlV2l0aCIsInNwbGl0IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJVc2VyU2V0dGluZ3MiLCJnZXRVc2VyU2V0dGluZ3MiLCJtb25rZXlQYXRjaCIsInByb3RvdHlwZSIsImFmdGVyIiwiZGF0YSIsInJldHVyblZhbHVlIiwidG9Mb3dlckNhc2UiLCJpbnNlcnQiLCJkaXNhYmxlZCIsIlNldHRpbmdzUmVuZGVyZXIiLCJidWlsZFNldHRpbmdzUGFuZWwiLCJvblNldHRpbmdDaGFuZ2UiLCJiaW5kIiwicGFuZWwiLCJUb2FzdHMiLCJzdWNjZXNzIiwiZm9yY2VTaG93IiwiYXR0cmlidXRpb24iLCJmb3JjZVVwZGF0ZSIsInZpZXdDbGFzcyIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsInN0YW5kYXJkU2lkZWJhclZpZXciLCJub2RlIiwiZG9jdW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZSIsInJldHVybiIsInN0YXRlTm9kZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiY2FuY2VsIiwiZGVmYXVsdCIsInRoaXNPYmplY3QiLCJzYXZlU2V0dGluZ3MiLCJzZXREYXRhIiwicHJldmlvdXNTdGF0ZSIsImdldERhdGEiLCJkZWZhdWx0U3RhdGUiLCJhc3NpZ24iLCJ1bmRlZmluZWQiLCJiZWZvcmUiLCJFdmVudHMiLCJkaXNwYXRjaCIsImdldFNldHRpbmciLCJhcmd1bWVudHMiLCJvbiIsImlkZW50aWZpZXIiLCJjYWxsYmFjayIsImhhbmRsZXIiLCJjb2wiLCJjYXQiLCJvZmYiLCJ1cGRhdGVTZXR0aW5ncyIsImVuYWJsZWQiLCJCZEFwaSIsInNldFdpbmRvd1ByZWZlcmVuY2UiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsZUFBTixDQUFzQjtBQUVyQ0MsYUFBVyxHQUFHO0FBQ1YsU0FBS0MsTUFBTCxHQUFjQyxtREFBZDtBQUNBLFNBQUtDLEtBQUwsR0FBYUMsa0RBQWI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDQSxTQUFLQyxrQkFBTCxDQUF3QixVQUF4QixFQUFvQyxVQUFwQyxFQUFnREwsbURBQWhEO0FBQ0g7O0FBRURNLFlBQVUsR0FBRztBQUNUQyxzREFBUyxDQUFDRCxVQUFWO0FBQ0EsU0FBS0UsWUFBTDtBQUNBLFNBQUtDLGFB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bWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2V0dGluZ3NDb25maWcsIFNldHRpbmdzU3RhdGV9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBCZEFwaSBmcm9tIFwiLi9wbHVnaW5hcGlcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi9lbWl0dGVyXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcywge0Rpc2NvcmRNb2R1bGVzfSBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IHtTZXR0aW5nc1BhbmVsIGFzIFNldHRpbmdzUmVuZGVyZXJ9IGZyb20gXCJ1aVwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQge1RvYXN0c30gZnJvbSBcInVpXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgU2V0dGluZ3NNYW5hZ2VyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmNvbmZpZyA9IFNldHRpbmdzQ29uZmlnO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSBTZXR0aW5nc1N0YXRlO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbnMgPSBbXTtcclxuICAgICAgICB0aGlzLnBhbmVscyA9IFtdO1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXJDb2xsZWN0aW9uKFwic2V0dGluZ3NcIiwgXCJTZXR0aW5nc1wiLCBTZXR0aW5nc0NvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBEYXRhU3RvcmUuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgIHRoaXMubG9hZFNldHRpbmdzKCk7XHJcbiAgICAgICAgdGhpcy5wYXRjaFNlY3Rpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDb2xsZWN0aW9uKGlkLCBuYW1lLCBzZXR0aW5ncywgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb25zLmZpbmQoYyA9PiBjLmlkID09IGlkKSkgVXRpbGl0aWVzLmVycihcIlNldHRpbmdzXCIsIFwiQWxyZWFkeSBoYXZlIGEgY29sbGVjdGlvbiB3aXRoIGlkIFwiICsgaWQpO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiBzZXR0aW5ncyxcclxuICAgICAgICAgICAgYnV0dG9uOiBidXR0b25cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29sbGVjdGlvbihpZCkge1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5jb2xsZWN0aW9ucy5maW5kSW5kZXgoYyA9PiBjLmlkID09IGlkKTtcclxuICAgICAgICBpZiAoIWxvY2F0aW9uIDwgMCkgVXRpbGl0aWVzLmVycihcIlNldHRpbmdzXCIsIFwiTm8gY29sbGVjdGlvbiB3aXRoIGlkIFwiICsgaWQpO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbnMuc3BsaWNlKGxvY2F0aW9uLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlclBhbmVsKG5hbWUsIG9wdGlvbnMpIHtcclxuICAgICAgICBjb25zdCB7ZWxlbWVudCwgb25DbGlja30gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSB7bGFiZWw6IG5hbWUsIHNlY3Rpb246IG5hbWV9O1xyXG4gICAgICAgIGlmIChvbkNsaWNrKSBzZWN0aW9uLm9uQ2xpY2sgPSBvbkNsaWNrO1xyXG4gICAgICAgIGVsc2Ugc2VjdGlvbi5lbGVtZW50ID0gZWxlbWVudCBpbnN0YW5jZW9mIERpc2NvcmRNb2R1bGVzLlJlYWN0LkNvbXBvbmVudCA/ICgpID0+IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwge30pIDogdHlwZW9mKGVsZW1lbnQpID09IFwiZnVuY3Rpb25cIiA/IGVsZW1lbnQgOiAoKSA9PiBlbGVtZW50O1xyXG4gICAgICAgIHRoaXMucGFuZWxzLnB1c2goc2VjdGlvbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGF0aChwYXRoLCBjb2xsZWN0aW9uSWQgPSBcIlwiLCBjYXRlZ29yeUlkID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBwYXRoLmxlbmd0aCA9PSAzID8gcGF0aFswXSA6IGNvbGxlY3Rpb25JZDtcclxuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHBhdGgubGVuZ3RoID09IDMgPyBwYXRoWzFdIDogcGF0aC5sZW5ndGggPT0gMiA/IHBhdGhbMF0gOiBjYXRlZ29yeUlkO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgcmV0dXJuIHtjb2xsZWN0aW9uLCBjYXRlZ29yeSwgc2V0dGluZ307XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXAoKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJiZWZvcmUgc3RhdGVcIik7XHJcbiAgICAgICAgY29uc29sZS5sb2codGhpcy5zdGF0ZSk7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmNvbGxlY3Rpb25zLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb25zW2NdO1xyXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5jb2xsZWN0aW9uc1tjXS5zZXR0aW5ncztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdKSB0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdID0ge307XHJcbiAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgY2F0ZWdvcmllcy5sZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW3NdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNhdGVnb3J5LnR5cGUgIT0gXCJjYXRlZ29yeVwiKSB7aWYgKCF0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdLmhhc093blByb3BlcnR5KGNhdGVnb3J5LmlkKSkgdGhpcy5zdGF0ZVtjb2xsZWN0aW9uLmlkXVtjYXRlZ29yeS5pZF0gPSBjYXRlZ29yeS52YWx1ZTt9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbY29sbGVjdGlvbi5pZF0uaGFzT3duUHJvcGVydHkoY2F0ZWdvcnkuaWQpKSB0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdW2NhdGVnb3J5LmlkXSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHMgPSAwOyBzIDwgY2F0ZWdvcnkuc2V0dGluZ3MubGVuZ3RoOyBzKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0dGluZyA9IGNhdGVnb3J5LnNldHRpbmdzW3NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbY29sbGVjdGlvbi5pZF1bY2F0ZWdvcnkuaWRdLmhhc093blByb3BlcnR5KHNldHRpbmcuaWQpKSB0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdW2NhdGVnb3J5LmlkXVtzZXR0aW5nLmlkXSA9IHNldHRpbmcudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmVuYWJsZVdpdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFBhdGgoc2V0dGluZy5lbmFibGVXaXRoLnNwbGl0KFwiLlwiKSwgY29sbGVjdGlvbi5pZCwgY2F0ZWdvcnkuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlZFwiKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2V0dGluZywgXCJkaXNhYmxlZFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAhdGhpcy5zdGF0ZVtwYXRoLmNvbGxlY3Rpb25dW3BhdGguY2F0ZWdvcnldW3BhdGguc2V0dGluZ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24uZW5hYmxlV2l0aCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aChjb2xsZWN0aW9uLmVuYWJsZVdpdGguc3BsaXQoXCIuXCIpKTtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb2xsZWN0aW9uLCBcImRpc2FibGVkXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLnN0YXRlW3BhdGguY29sbGVjdGlvbl1bcGF0aC5jYXRlZ29yeV1bcGF0aC5zZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZyhcImFmdGVyIHN0YXRlXCIpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKHRoaXMuc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHBhdGNoU2VjdGlvbnMoKSB7XHJcbiAgICAgICAgY29uc3QgVXNlclNldHRpbmdzID0gYXdhaXQgdGhpcy5nZXRVc2VyU2V0dGluZ3MoKTtcclxuICAgICAgICBVdGlsaXRpZXMubW9ua2V5UGF0Y2goVXNlclNldHRpbmdzLnByb3RvdHlwZSwgXCJnZW5lcmF0ZVNlY3Rpb25zXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgbGV0IGxvY2F0aW9uID0gZGF0YS5yZXR1cm5WYWx1ZS5maW5kSW5kZXgocyA9PiBzLnNlY3Rpb24udG9Mb3dlckNhc2UoKSA9PSBcImxpbnV4XCIpICsgMTtcclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0ID0gKHNlY3Rpb24pID0+IHtcclxuICAgICAgICAgICAgICAgIGRhdGEucmV0dXJuVmFsdWUuc3BsaWNlKGxvY2F0aW9uLCAwLCBzZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uKys7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEpOyAvKiBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGUgKi9cclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkRJVklERVJcIn0pO1xyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiSEVBREVSXCIsIGxhYmVsOiBcIkJhbmRhZ2VkQkRcIn0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgdGhpcy5jb2xsZWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24uZGlzYWJsZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaW5zZXJ0KHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBjb2xsZWN0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbGxlY3Rpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmJ1aWxkU2V0dGluZ3NQYW5lbChjb2xsZWN0aW9uLm5hbWUsIGNvbGxlY3Rpb24uc2V0dGluZ3MsIFNldHRpbmdzU3RhdGVbY29sbGVjdGlvbi5pZF0sIHRoaXMub25TZXR0aW5nQ2hhbmdlLmJpbmQodGhpcywgY29sbGVjdGlvbi5pZCksIGNvbGxlY3Rpb24uYnV0dG9uID8gY29sbGVjdGlvbi5idXR0b24gOiBudWxsKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChjb25zdCBwYW5lbCBvZiB0aGlzLnBhbmVscykgaW5zZXJ0KHBhbmVsKTtcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkJCRCBUZXN0XCIsIGxhYmVsOiBcIlRlc3QgVGFiXCIsIG9uQ2xpY2s6IGZ1bmN0aW9uKCkge1RvYXN0cy5zdWNjZXNzKFwiVGhpcyBjYW4ganVzdCBiZSBhIGNsaWNrIGxpc3RlbmVyIVwiLCB7Zm9yY2VTaG93OiB0cnVlfSk7fX0pO1xyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiQ1VTVE9NXCIsIGVsZW1lbnQ6ICgpID0+IFNldHRpbmdzUmVuZGVyZXIuYXR0cmlidXRpb259KTtcclxuICAgICAgICB9fSk7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlVXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdDbGFzcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzdGFuZGFyZFNpZGViYXJWaWV3XCIpLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt2aWV3Q2xhc3N9YCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLmdldEludGVybmFsSW5zdGFuY2Uobm9kZSkucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4uc3RhdGVOb2RlLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlclNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gVXRpbGl0aWVzLm1vbmtleVBhdGNoKFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRVc2VyU2V0dGluZ3NTZWN0aW9uc1wiKS5kZWZhdWx0LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwge2FmdGVyOiAoZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShkYXRhLnJldHVyblZhbHVlLnR5cGUpO1xyXG4gICAgICAgICAgICAgICAgZGF0YS50aGlzT2JqZWN0LmZvcmNlVXBkYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBjYW5jZWwoKTtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTZXR0aW5ncygpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0RGF0YShcInNldHRpbmdzXCIsIHRoaXMuc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRTZXR0aW5ncygpIHtcclxuICAgICAgICBjb25zdCBwcmV2aW91c1N0YXRlID0gRGF0YVN0b3JlLmdldERhdGEoXCJzZXR0aW5nc1wiKTtcclxuICAgICAgICBpZiAoIXByZXZpb3VzU3RhdGUpICByZXR1cm4gdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gaW4gdGhpcy5kZWZhdWx0U3RhdGUpIHtcclxuICAgICAgICAgICAgaWYgKCFwcmV2aW91c1N0YXRlW2NvbGxlY3Rpb25dKSBPYmplY3QuYXNzaWduKHByZXZpb3VzU3RhdGUsIHtbY29sbGVjdGlvbl06IHRoaXMuZGVmYXVsdFN0YXRlW2NvbGxlY3Rpb25dfSk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgaW4gdGhpcy5kZWZhdWx0U3RhdGVbY29sbGVjdGlvbl0pIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV0pIE9iamVjdC5hc3NpZ24ocHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV0sIHtbY2F0ZWdvcnldOiB0aGlzLmRlZmF1bHRTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV19KTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgc2V0dGluZyBpbiB0aGlzLmRlZmF1bHRTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV1bc2V0dGluZ10gPT0gdW5kZWZpbmVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlW2NvbGxlY3Rpb25dW2NhdGVnb3J5XVtzZXR0aW5nXSA9IHByZXZpb3VzU3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldW3NldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpOyAvLyBpbiBjYXNlIG5ldyB0aGluZ3Mgd2VyZSBhZGRlZFxyXG4gICAgfVxyXG5cclxuICAgIG9uU2V0dGluZ0NoYW5nZShjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQsIHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlID0gdGhpcy5jb2xsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV1baWRdID0gdmFsdWU7XHJcbiAgICAgICAgRXZlbnRzLmRpc3BhdGNoKFwic2V0dGluZy11cGRhdGVkXCIsIGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCwgdmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGFmdGVyID0gdGhpcy5jb2xsZWN0aW9ucy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICBpZiAoYmVmb3JlICE9IGFmdGVyKSB0aGlzLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZyhjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSByZXR1cm4gdGhpcy5jb2xsZWN0aW9uc1swXS5maW5kKGMgPT4gYy5pZCA9PSBhcmd1bWVudHNbMF0pLnNldHRpbmdzLmZpbmQocyA9PiBzLmlkID09IGFyZ3VtZW50c1sxXSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29sbGVjdGlvbnMuZmluZChjID0+IGMuaWQgPT0gY29sbGVjdGlvbikuZmluZChjID0+IGMuaWQgPT0gY2F0ZWdvcnkpLnNldHRpbmdzLmZpbmQocyA9PiBzLmlkID09IGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICBpZCA9IGNhdGVnb3J5O1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IGNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSBcInNldHRpbmdzXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXSB8fCAhdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV0pIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV1baWRdO1xyXG4gICAgfVxyXG5cclxuICAgIG9uKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZGVudGlmaWVyLCBjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSAoY29sLCBjYXQsIGlkLCB2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sICE9PSBjb2xsZWN0aW9uIHx8IGNhdCAhPT0gY2F0ZWdvcnkgfHwgaWQgIT09IGlkZW50aWZpZXIpIHJldHVybjtcclxuICAgICAgICAgICAgY2FsbGJhY2sodmFsdWUpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgRXZlbnRzLm9uKFwic2V0dGluZy11cGRhdGVkXCIsIGhhbmRsZXIpO1xyXG4gICAgICAgIHJldHVybiAoKSA9PiB7RXZlbnRzLm9mZihcInNldHRpbmctdXBkYXRlZFwiLCBoYW5kbGVyKTt9O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVNldHRpbmdzKGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCwgZW5hYmxlZCkge1xyXG5cclxuICAgICAgICBpZiAoaWQgPT0gXCJmb3JrLXdwLTFcIikge1xyXG4gICAgICAgICAgICBCZEFwaS5zZXRXaW5kb3dQcmVmZXJlbmNlKFwidHJhbnNwYXJlbnRcIiwgZW5hYmxlZCk7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSBCZEFwaS5zZXRXaW5kb3dQcmVmZXJlbmNlKFwiYmFja2dyb3VuZENvbG9yXCIsIG51bGwpO1xyXG4gICAgICAgICAgICBlbHNlIEJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UoXCJiYWNrZ3JvdW5kQ29sb3JcIiwgXCIjMmYzMTM2XCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/settingsmanager.js\n"); /***/ }), @@ -515,7 +479,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ThemeManager extends _contentmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n get name() {\n return \"ThemeManager\";\n }\n\n get moduleExtension() {\n return \".css\";\n }\n\n get extension() {\n return \".theme.css\";\n }\n\n get contentFolder() {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"themes\");\n }\n\n get prefix() {\n return \"theme\";\n }\n /* Aliases */\n\n\n updateThemeList() {\n return this.updateList();\n }\n\n loadAllThemes() {\n _settingsmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].registerPanel(\"Themes\", {\n element: () => ui__WEBPACK_IMPORTED_MODULE_3__[\"SettingsPanel\"].getThemesPanel(this.contentList)\n });\n return this.loadAllContent();\n }\n\n enableTheme(idOrContent) {\n return this.enableContent(idOrContent);\n }\n\n disableTheme(idOrContent) {\n return this.disableContent(idOrContent);\n }\n\n toggleTheme(id) {\n return this.toggleContent(id);\n }\n\n unloadTheme(idOrFileOrContent) {\n return this.unloadContent(idOrFileOrContent);\n }\n\n loadTheme(filename) {\n const error = this.loadContent(filename);\n if (error) ui__WEBPACK_IMPORTED_MODULE_3__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n\n reloadTheme(filename) {\n const error = this.reloadContent(filename);\n if (error) ui__WEBPACK_IMPORTED_MODULE_3__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n /* Overrides */\n\n\n getContentModification(module, content, meta) {\n meta.css = content.split(\"\\n\").slice(1).join(\"\\n\");\n return `module.exports = ${JSON.stringify(meta)};`;\n }\n\n startContent(id) {\n return this.addTheme(id);\n }\n\n stopContent(id) {\n return this.removeTheme(id);\n }\n\n addTheme(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n const style = document.createElement(\"style\");\n style.id = _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].escapeID(content.id);\n style.textContent = unescape(content.css);\n document.head.append(style);\n content.element = style;\n }\n\n removeTheme(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n const element = content.element || document.getElementById(_utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].escapeID(content.id));\n if (element) element.remove();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdGhlbWVtYW5hZ2VyLmpzPzQwNzgiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJUaGVtZU1hbmFnZXIiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicmVzb2x2ZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwicHJlZml4IiwidXBkYXRlVGhlbWVMaXN0IiwidXBkYXRlTGlzdCIsImxvYWRBbGxUaGVtZXMiLCJTZXR0aW5ncyIsInJlZ2lzdGVyUGFuZWwiLCJlbGVtZW50IiwiU2V0dGluZ3NSZW5kZXJlciIsImdldFRoZW1lc1BhbmVsIiwiY29udGVudExpc3QiLCJsb2FkQWxsQ29udGVudCIsImVuYWJsZVRoZW1lIiwiaWRPckNvbnRlbnQiLCJlbmFibGVDb250ZW50IiwiZGlzYWJsZVRoZW1lIiwiZGlzYWJsZUNvbnRlbnQiLCJ0b2dnbGVUaGVtZSIsImlkIiwidG9nZ2xlQ29udGVudCIsInVubG9hZFRoZW1lIiwiaWRPckZpbGVPckNvbnRlbnQiLCJ1bmxvYWRDb250ZW50IiwibG9hZFRoZW1lIiwiZmlsZW5hbWUiLCJlcnJvciIsImxvYWRDb250ZW50IiwiTW9kYWxzIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJ0aGVtZXMiLCJyZWxvYWRUaGVtZSIsInJlbG9hZENvbnRlbnQiLCJnZXRDb250ZW50TW9kaWZpY2F0aW9uIiwibW9kdWxlIiwiY29udGVudCIsIm1ldGEiLCJjc3MiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydENvbnRlbnQiLCJhZGRUaGVtZSIsInN0b3BDb250ZW50IiwicmVtb3ZlVGhlbWUiLCJmaW5kIiwicCIsInN0eWxlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiVXRpbGl0aWVzIiwiZXNjYXBlSUQiLCJ0ZXh0Q29udGVudCIsInVuZXNjYXBlIiwi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QUFLSCxXQUFMLENBQWlCb0MsSUFBakIsQ0FBc0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDN0IsRUFBRixJQUFRTCxXQUFuQyxDQUFsQyxHQUFvRkEsV0FBcEc7QUFDQSxRQUFJLENBQUNxQixPQUFMLEVBQWM7QUFDZCxVQUFNYyxLQUFLLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixPQUF2QixDQUFkO0FBQ0FGLFNBQUssQ0FBQzlCLEVBQU4sR0FBV2lDLGtEQUFTLENBQUNDLFFBQVYsQ0FBbUJsQixPQUFPLENBQUNoQixFQUEzQixDQUFYO0FBQ0E4QixTQUFLLENBQUNLLFdBQU4sR0FBb0JDLFFBQVEsQ0FBQ3BCLE9BQU8sQ0FBQ0UsR0FBVCxDQUE1QjtBQUNBYSxZQUFRLENBQUNNLElBQVQsQ0FBY0MsTUFBZCxDQUFxQlIsS0FBckI7QUFDQWQsV0FBTyxDQUFDM0IsT0FBUixHQUFrQnlDLEtBQWxCO0FBQ0g7O0FBRURILGFBQVcsQ0FBQ2hDLFdBQUQsRUFBYztBQUNyQixVQUFNcUIsT0FBTyxHQUFHLE9BQU9yQixXQUFQLElBQXVCLFFBQXZCLEdBQWtDLEtBQUtILFdBQUwsQ0FBaUJvQyxJQUFqQixDQUFzQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUM3QixFQUFGLElBQVFMLFdBQW5DLENBQWxDLEdBQW9GQSxXQUFwRztBQUNBLFFBQUksQ0FBQ3FCLE9BQUwsRUFBYztBQUNkLFVBQU0zQixPQUFPLEdBQUcyQixPQUFPLENBQUMzQixPQUFSLElBQW1CMEMsUUFBUSxDQUFDUSxjQUFULENBQXdCTixrREFBUyxDQUFDQyxRQUFWLENBQW1CbEIsT0FBTyxDQUFDaEIsRUFBM0IsQ0FBeEIsQ0FBbkM7QUFDQSxRQUFJWCxPQUFKLEVBQWFBLE9BQU8sQ0FBQ21ELE1BQVI7QUFDaEI7O0FBdER3RCxDQUE5QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvdGhlbWVtYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50bWFuYWdlclwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQge01vZGFsc30gZnJvbSBcInVpXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1BhbmVsIGFzIFNldHRpbmdzUmVuZGVyZXJ9IGZyb20gXCJ1aVwiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRoZW1lTWFuYWdlciBleHRlbmRzIENvbnRlbnRNYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlRoZW1lTWFuYWdlclwiO31cclxuICAgIGdldCBtb2R1bGVFeHRlbnNpb24oKSB7cmV0dXJuIFwiLmNzc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnRoZW1lLmNzc1wiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcInRoZW1lc1wiKTt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcInRoZW1lXCI7fVxyXG5cclxuICAgIC8qIEFsaWFzZXMgKi9cclxuICAgIHVwZGF0ZVRoZW1lTGlzdCgpIHtyZXR1cm4gdGhpcy51cGRhdGVMaXN0KCk7fVxyXG4gICAgbG9hZEFsbFRoZW1lcygpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKFwiVGhlbWVzXCIsIHtlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmdldFRoZW1lc1BhbmVsKHRoaXMuY29udGVudExpc3QpfSk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZEFsbENvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVUaGVtZShpZE9yQ29udGVudCkge3JldHVybiB0aGlzLmVuYWJsZUNvbnRlbnQoaWRPckNvbnRlbnQpO31cclxuICAgIGRpc2FibGVUaGVtZShpZE9yQ29udGVudCkge3JldHVybiB0aGlzLmRpc2FibGVDb250ZW50KGlkT3JDb250ZW50KTt9XHJcbiAgICB0b2dnbGVUaGVtZShpZCkge3JldHVybiB0aGlzLnRvZ2dsZUNvbnRlbnQoaWQpO31cclxuXHJcbiAgICB1bmxvYWRUaGVtZShpZE9yRmlsZU9yQ29udGVudCkge3JldHVybiB0aGlzLnVubG9hZENvbnRlbnQoaWRPckZpbGVPckNvbnRlbnQpO31cclxuXHJcbiAgICBsb2FkVGhlbWUoZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGlmIChlcnJvcikgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRUaGVtZShmaWxlbmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5yZWxvYWRDb250ZW50KGZpbGVuYW1lKTtcclxuICAgICAgICBpZiAoZXJyb3IpIE1vZGFscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogT3ZlcnJpZGVzICovXHJcbiAgICBnZXRDb250ZW50TW9kaWZpY2F0aW9uKG1vZHVsZSwgY29udGVudCwgbWV0YSkge1xyXG4gICAgICAgIG1ldGEuY3NzID0gY29udGVudC5zcGxpdChcIlxcblwiKS5zbGljZSgxKS5qb2luKFwiXFxuXCIpO1xyXG4gICAgICAgIHJldHVybiBgbW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtgO1xyXG4gICAgfSAgICBcclxuXHJcbiAgICBzdGFydENvbnRlbnQoaWQpIHtyZXR1cm4gdGhpcy5hZGRUaGVtZShpZCk7fVxyXG4gICAgc3RvcENvbnRlbnQoaWQpIHtyZXR1cm4gdGhpcy5yZW1vdmVUaGVtZShpZCk7fVxyXG5cclxuICAgIGFkZFRoZW1lKGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XHJcbiAgICAgICAgc3R5bGUuaWQgPSBVdGlsaXRpZXMuZXNjYXBlSUQoY29udGVudC5pZCk7XHJcbiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSB1bmVzY2FwZShjb250ZW50LmNzcyk7XHJcbiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoc3R5bGUpO1xyXG4gICAgICAgIGNvbnRlbnQuZWxlbWVudCA9IHN0eWxlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVRoZW1lKGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGNvbnRlbnQuZWxlbWVudCB8fCBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChVdGlsaXRpZXMuZXNjYXBlSUQoY29udGVudC5pZCkpO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBlbGVtZW50LnJlbW92ZSgpO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/thememanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n\n\n\n\n\n\n\nconst path = __webpack_require__(/*! path */ \"path\");\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ThemeManager extends _contentmanager__WEBPACK_IMPORTED_MODULE_1__[\"default\"] {\n get name() {\n return \"ThemeManager\";\n }\n\n get moduleExtension() {\n return \".css\";\n }\n\n get extension() {\n return \".theme.css\";\n }\n\n get contentFolder() {\n return path.resolve(data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].dataPath, \"themes\");\n }\n\n get prefix() {\n return \"theme\";\n }\n /* Aliases */\n\n\n updateThemeList() {\n return this.updateList();\n }\n\n loadAllThemes() {\n _settingsmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].registerPanel(\"Themes\", {\n element: () => ui__WEBPACK_IMPORTED_MODULE_3__[\"SettingsPanel\"].getThemesPanel(this.contentList, this.contentFolder)\n });\n return this.loadAllContent();\n }\n\n enableTheme(idOrContent) {\n return this.enableContent(idOrContent);\n }\n\n disableTheme(idOrContent) {\n return this.disableContent(idOrContent);\n }\n\n toggleTheme(id) {\n return this.toggleContent(id);\n }\n\n unloadTheme(idOrFileOrContent) {\n return this.unloadContent(idOrFileOrContent);\n }\n\n loadTheme(filename) {\n const error = this.loadContent(filename);\n if (error) ui__WEBPACK_IMPORTED_MODULE_3__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n\n reloadTheme(filename) {\n const error = this.reloadContent(filename);\n if (error) ui__WEBPACK_IMPORTED_MODULE_3__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n /* Overrides */\n\n\n getContentModification(module, content, meta) {\n meta.css = content.split(\"\\n\").slice(1).join(\"\\n\");\n return `module.exports = ${JSON.stringify(meta)};`;\n }\n\n startContent(id) {\n return this.addTheme(id);\n }\n\n stopContent(id) {\n return this.removeTheme(id);\n }\n\n addTheme(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n const style = document.createElement(\"style\");\n style.id = _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].escapeID(content.id);\n style.textContent = unescape(content.css);\n document.head.append(style);\n content.element = style;\n }\n\n removeTheme(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n const element = content.element || document.getElementById(_utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].escapeID(content.id));\n if (element) element.remove();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdGhlbWVtYW5hZ2VyLmpzPzQwNzgiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJUaGVtZU1hbmFnZXIiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicmVzb2x2ZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwicHJlZml4IiwidXBkYXRlVGhlbWVMaXN0IiwidXBkYXRlTGlzdCIsImxvYWRBbGxUaGVtZXMiLCJTZXR0aW5ncyIsInJlZ2lzdGVyUGFuZWwiLCJlbGVtZW50IiwiU2V0dGluZ3NSZW5kZXJlciIsImdldFRoZW1lc1BhbmVsIiwiY29udGVudExpc3QiLCJsb2FkQWxsQ29udGVudCIsImVuYWJsZVRoZW1lIiwiaWRPckNvbnRlbnQiLCJlbmFibGVDb250ZW50IiwiZGlzYWJsZVRoZW1lIiwiZGlzYWJsZUNvbnRlbnQiLCJ0b2dnbGVUaGVtZSIsImlkIiwidG9nZ2xlQ29udGVudCIsInVubG9hZFRoZW1lIiwiaWRPckZpbGVPckNvbnRlbnQiLCJ1bmxvYWRDb250ZW50IiwibG9hZFRoZW1lIiwiZmlsZW5hbWUiLCJlcnJvciIsImxvYWRDb250ZW50IiwiTW9kYWxzIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJ0aGVtZXMiLCJyZWxvYWRUaGVtZSIsInJlbG9hZENvbnRlbnQiLCJnZXRDb250ZW50TW9kaWZpY2F0aW9uIiwibW9kdWxlIiwiY29udGVudCIsIm1ldGEiLCJjc3MiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydENvbnRlbnQiLCJhZGRUaGVtZSIsInN0b3BDb250ZW50IiwicmVtb3ZlVGhlbWUiLCJmaW5kIiwicCIsInN0eWxlIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiVXRpbGl0aWVzIiwiZXNjYXBlSUQiLCJ0ZXh0Q29udGVudCIsInVuZXNjYXBlIiwi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QUF1QixRQUF2QixHQUFrQyxLQUFLSCxXQUFMLENBQWlCb0MsSUFBakIsQ0FBc0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDN0IsRUFBRixJQUFRTCxXQUFuQyxDQUFsQyxHQUFvRkEsV0FBcEc7QUFDQSxRQUFJLENBQUNxQixPQUFMLEVBQWM7QUFDZCxVQUFNYyxLQUFLLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixPQUF2QixDQUFkO0FBQ0FGLFNBQUssQ0FBQzlCLEVBQU4sR0FBV2lDLGtEQUFTLENBQUNDLFFBQVYsQ0FBbUJsQixPQUFPLENBQUNoQixFQUEzQixDQUFYO0FBQ0E4QixTQUFLLENBQUNLLFdBQU4sR0FBb0JDLFFBQVEsQ0FBQ3BCLE9BQU8sQ0FBQ0UsR0FBVCxDQUE1QjtBQUNBYSxZQUFRLENBQUNNLElBQVQsQ0FBY0MsTUFBZCxDQUFxQlIsS0FBckI7QUFDQWQsV0FBTyxDQUFDM0IsT0FBUixHQUFrQnlDLEtBQWxCO0FBQ0g7O0FBRURILGFBQVcsQ0FBQ2hDLFdBQUQsRUFBYztBQUNyQixVQUFNcUIsT0FBTyxHQUFHLE9BQU9yQixXQUFQLElBQXVCLFFBQXZCLEdBQWtDLEtBQUtILFdBQUwsQ0FBaUJvQyxJQUFqQixDQUFzQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUM3QixFQUFGLElBQVFMLFdBQW5DLENBQWxDLEdBQW9GQSxXQUFwRztBQUNBLFFBQUksQ0FBQ3FCLE9BQUwsRUFBYztBQUNkLFVBQU0zQixPQUFPLEdBQUcyQixPQUFPLENBQUMzQixPQUFSLElBQW1CMEMsUUFBUSxDQUFDUSxjQUFULENBQXdCTixrREFBUyxDQUFDQyxRQUFWLENBQW1CbEIsT0FBTyxDQUFDaEIsRUFBM0IsQ0FBeEIsQ0FBbkM7QUFDQSxRQUFJWCxPQUFKLEVBQWFBLE9BQU8sQ0FBQ21ELE1BQVI7QUFDaEI7O0FBdER3RCxDQUE5QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvdGhlbWVtYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50bWFuYWdlclwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQge01vZGFsc30gZnJvbSBcInVpXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1BhbmVsIGFzIFNldHRpbmdzUmVuZGVyZXJ9IGZyb20gXCJ1aVwiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRoZW1lTWFuYWdlciBleHRlbmRzIENvbnRlbnRNYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlRoZW1lTWFuYWdlclwiO31cclxuICAgIGdldCBtb2R1bGVFeHRlbnNpb24oKSB7cmV0dXJuIFwiLmNzc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnRoZW1lLmNzc1wiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcInRoZW1lc1wiKTt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcInRoZW1lXCI7fVxyXG5cclxuICAgIC8qIEFsaWFzZXMgKi9cclxuICAgIHVwZGF0ZVRoZW1lTGlzdCgpIHtyZXR1cm4gdGhpcy51cGRhdGVMaXN0KCk7fVxyXG4gICAgbG9hZEFsbFRoZW1lcygpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKFwiVGhlbWVzXCIsIHtlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmdldFRoZW1lc1BhbmVsKHRoaXMuY29udGVudExpc3QsIHRoaXMuY29udGVudEZvbGRlcil9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQWxsQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZVRoZW1lKGlkT3JDb250ZW50KSB7cmV0dXJuIHRoaXMuZW5hYmxlQ29udGVudChpZE9yQ29udGVudCk7fVxyXG4gICAgZGlzYWJsZVRoZW1lKGlkT3JDb250ZW50KSB7cmV0dXJuIHRoaXMuZGlzYWJsZUNvbnRlbnQoaWRPckNvbnRlbnQpO31cclxuICAgIHRvZ2dsZVRoZW1lKGlkKSB7cmV0dXJuIHRoaXMudG9nZ2xlQ29udGVudChpZCk7fVxyXG5cclxuICAgIHVubG9hZFRoZW1lKGlkT3JGaWxlT3JDb250ZW50KSB7cmV0dXJuIHRoaXMudW5sb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCk7fVxyXG5cclxuICAgIGxvYWRUaGVtZShmaWxlbmFtZSkge1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSk7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZFRoZW1lKGZpbGVuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnJlbG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGlmIChlcnJvcikgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBPdmVycmlkZXMgKi9cclxuICAgIGdldENvbnRlbnRNb2RpZmljYXRpb24obW9kdWxlLCBjb250ZW50LCBtZXRhKSB7XHJcbiAgICAgICAgbWV0YS5jc3MgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpLnNsaWNlKDEpLmpvaW4oXCJcXG5cIik7XHJcbiAgICAgICAgcmV0dXJuIGBtb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O2A7XHJcbiAgICB9ICAgIFxyXG5cclxuICAgIHN0YXJ0Q29udGVudChpZCkge3JldHVybiB0aGlzLmFkZFRoZW1lKGlkKTt9XHJcbiAgICBzdG9wQ29udGVudChpZCkge3JldHVybiB0aGlzLnJlbW92ZVRoZW1lKGlkKTt9XHJcblxyXG4gICAgYWRkVGhlbWUoaWRPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQ29udGVudCkgOiBpZE9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcclxuICAgICAgICBzdHlsZS5pZCA9IFV0aWxpdGllcy5lc2NhcGVJRChjb250ZW50LmlkKTtcclxuICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IHVuZXNjYXBlKGNvbnRlbnQuY3NzKTtcclxuICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZChzdHlsZSk7XHJcbiAgICAgICAgY29udGVudC5lbGVtZW50ID0gc3R5bGU7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlVGhlbWUoaWRPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQ29udGVudCkgOiBpZE9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gY29udGVudC5lbGVtZW50IHx8IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFV0aWxpdGllcy5lc2NhcGVJRChjb250ZW50LmlkKSk7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIGVsZW1lbnQucmVtb3ZlKCk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/thememanager.js\n"); /***/ }), @@ -551,7 +515,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BuiltinModule; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _modules_utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modules/utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n\n\n\n\nclass BuiltinModule {\n get name() {\n return \"Unnamed Builtin\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"None\";\n }\n\n async initialize() {\n if (data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsState\"][this.collection][this.category][this.id]) await this.enable();\n _modules_emitter__WEBPACK_IMPORTED_MODULE_2__[\"default\"].on(\"setting-updated\", (collection, category, id, enabled) => {\n if (collection != this.collection || category !== this.category || id !== this.id) return;\n if (enabled) this.enable();else this.disable();\n });\n }\n\n registerSetting(collection, category, id, onEnable, onDisable) {\n if (arguments.length == 4) {\n collection = this.collection;\n category = arguments[0];\n id = arguments[1];\n onEnable = arguments[2];\n onDisable = arguments[3];\n } else if (arguments.length == 3) {\n collection = this.collection;\n category = this.category;\n id = arguments[0];\n onEnable = arguments[1];\n onDisable = arguments[2];\n }\n\n return _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].on(collection, category, id, value => {\n if (value) onEnable();else onDisable();\n });\n }\n\n get(collection, category, id) {\n if (arguments.length == 2) {\n collection = this.collection;\n category = arguments[0];\n id = arguments[1];\n } else if (arguments.length == 1) {\n collection = this.collection;\n category = this.category;\n id = arguments[0];\n }\n\n return _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].get(collection, category, id);\n }\n\n async enable() {\n this.log(\"Enabled\");\n await this.enabled();\n }\n\n async disable() {\n this.log(\"Disabled\");\n await this.disabled();\n }\n\n async enabled() {}\n\n async disabled() {}\n\n log(...message) {\n _modules_utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, ...message);\n }\n\n warn(...message) {\n _modules_utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].warn(this.name, ...message);\n }\n\n error(...message) {\n _modules_utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].err(this.name, ...message);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3N0cnVjdHMvYnVpbHRpbi5qcz85NTYyIl0sIm5hbWVzIjpbIkJ1aWx0aW5Nb2R1bGUiLCJuYW1lIiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJpbml0aWFsaXplIiwiU2V0dGluZ3NTdGF0ZSIsImVuYWJsZSIsIkV2ZW50cyIsIm9uIiwiZW5hYmxlZCIsImRpc2FibGUiLCJyZWdpc3RlclNldHRpbmciLCJvbkVuYWJsZSIsIm9uRGlzYWJsZSIsImFyZ3VtZW50cyIsImxlbmd0aCIsIlNldHRpbmdzIiwidmFsdWUiLCJnZXQiLCJsb2ciLCJkaXNhYmxlZCIsIm1lc3NhZ2UiLCJVdGlsaXRpZXMiLCJ3YXJuIiwiZXJyb3IiLCJlcnIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBRWUsTUFBTUEsYUFBTixDQUFvQjtBQUUvQixNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGlCQUFQO0FBQTBCOztBQUN0QyxNQUFJQyxVQUFKLEdBQWlCO0FBQUMsV0FBTyxVQUFQO0FBQW1COztBQUNyQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFNBQVA7QUFBa0I7O0FBQ2xDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sTUFBUDtBQUFlOztBQUV6QixRQUFNQyxVQUFOLEdBQW1CO0FBQ2YsUUFBSUMsa0RBQWEsQ0FBQyxLQUFLSixVQUFOLENBQWIsQ0FBK0IsS0FBS0MsUUFBcEMsRUFBOEMsS0FBS0MsRUFBbkQsQ0FBSixFQUE0RCxNQUFNLEtBQUtHLE1BQUwsRUFBTjtBQUM1REMsNERBQU0sQ0FBQ0MsRUFBUCxDQUFVLGlCQUFWLEVBQTZCLENBQUNQLFVBQUQsRUFBYUMsUUFBYixFQUF1QkMsRUFBdkIsRUFBMkJNLE9BQTNCLEtBQXVDO0FBQ2hFLFVBQUlSLFVBQVUsSUFBSSxLQUFLQSxVQUFuQixJQUFpQ0MsUUFBUSxLQUFLLEtBQUtBLFFBQW5ELElBQStEQyxFQUFFLEtBQUssS0FBS0EsRUFBL0UsRUFBbUY7QUFDbkYsVUFBSU0sT0FBSixFQUFhLEtBQUtILE1BQUwsR0FBYixLQUNLLEtBQUtJLE9BQUw7QUFDUixLQUpEO0FBS0g7O0FBRURDLGlCQUFlLENBQUNWLFVBQUQsRUFBYUMsUUFBYixFQUF1QkMsRUFBdkIsRUFBMkJTLFFBQTNCLEVBQXFDQyxTQUFyQyxFQUFnRDtBQUMzRCxRQUFJQyxTQUFTLENBQUNDLE1BQVYsSUFBb0IsQ0FBeEIsRUFBMkI7QUFDdkJkLGdCQUFVLEdBQUcsS0FBS0EsVUFBbEI7QUFDQUMsY0FBUSxHQUFHWSxTQUFTLENBQUMsQ0FBRCxDQUFwQjtBQUNBWCxRQUFFLEdBQUdXLFNBQVMsQ0FBQyxDQUFELENBQWQ7QUFDQUYsY0FBUSxHQUFHRSxTQUFTLENBQUMsQ0FBRCxDQUFwQjtBQUNBRCxlQUFTLEdBQUdDLFNBQVMsQ0FBQyxDQUFELENBQXJCO0FBQ0gsS0FORCxNQU9LLElBQUlBLFNBQVMsQ0FBQ0MsTUFBVixJQUFvQixDQUF4QixFQUEyQjtBQUM1QmQsZ0JBQVUsR0FBRyxLQUFLQSxVQUFsQjtBQUNBQyxjQUFRLEdBQUcsS0FBS0EsUUFBaEI7QUFDQUMsUUFBRSxHQUFHVyxTQUFTLENBQUMsQ0FBRCxDQUFkO0FBQ0FGLGNBQVEsR0FBR0UsU0FBUyxDQUFDLENBQUQsQ0FBcEI7QUFDQUQsZUFBUyxHQUFHQyxTQUFTLENBQUMsQ0FBRCxDQUFyQjtBQUNIOztBQUNELFdBQU9FLGdFQUFRLENBQUNSLEVBQVQsQ0FBWVAsVUFBWixFQUF3QkMsUUFBeEIsRUFBa0NDLEVBQWxDLEVBQXVDYyxLQUFELElBQVc7QUFDcEQsVUFBSUEsS0FBSixFQUFXTCxRQUFRLEdBQW5CLEtBQ0tDLFNBQVM7QUFDakIsS0FITSxDQUFQO0FBSUg7O0FBRURLLEtBQUcsQ0FBQ2pCLFVBQUQsRUFBYUMsUUFBYixFQUF1QkMsRUFBdkIsRUFBMkI7QUFDMUIsUUFBSVcsU0FBUyxDQUFDQyxNQUFWLElBQW9CLENBQXhCLEVBQTJCO0FBQ3ZCZCxnQkFBVSxHQUFHLEtBQUtBLFVBQWxCO0FBQ0FDLGNBQVEsR0FBR1ksU0FBUyxDQUFDLENBQUQsQ0FBcEI7QUFDQVgsUUFBRSxHQUFHVyxTQUFTLENBQUMsQ0FBRCxDQUFkO0FBQ0gsS0FKRCxNQUtLLElBQUlBLFNBQVMsQ0FBQ0MsTUFBVixJQUFvQixDQUF4QixFQUEyQjtBQUM1QmQsZ0JBQVUsR0FBRyxLQUFLQSxVQUFsQjtBQUNBQyxjQUFRLEdBQUcsS0FBS0EsUUFBaEI7QUFDQUMsUUFBRSxHQUFHVyxTQUFTLENBQUMsQ0FBRCxDQUFkO0FBQ0g7O0FBQ0QsV0FBT0UsZ0VBQVEsQ0FBQ0UsR0FBVCxDQUFhakIsVUFBYixFQUF5QkMsUUFBekIsRUFBbUNDLEVBQW5DLENBQVA7QUFDSDs7QUFFRCxRQUFNRyxNQUFOLEdBQWU7QUFDWCxTQUFLYSxHQUFMLENBQVMsU0FBVDtBQUNBLFVBQU0sS0FBS1YsT0FBTCxFQUFOO0FBQ0g7O0FBRUQsUUFBTUMsT0FBTixHQUFnQjtBQUNaLFNBQUtTLEdBQUwsQ0FBUyxVQUFUO0FBQ0EsVUFBTSxLQUFLQyxRQUFMLEVBQU47QUFDSDs7QUFFRCxRQUFNWCxPQUFOLEdBQWdCLENBQUU7O0FBQ2xCLFFBQU1XLFFBQU4sR0FBaUIsQ0FBRTs7QUFFbkJELEtBQUcsQ0FBQyxHQUFHRSxPQUFKLEVBQWE7QUFDWkMsOERBQVMsQ0FBQ0gsR0FBVixDQUFjLEtBQUtuQixJQUFuQixFQUF5QixHQUFHcUIsT0FBNUI7QUFDSDs7QUFFREUsTUFBSSxDQUFDLEdBQUdGLE9BQUosRUFBYTtBQUNiQyw4REFBUyxDQUFDQyxJQUFWLENBQWUsS0FBS3ZCLElBQXBCLEVBQTBCLEdBQUdxQixPQUE3QjtBQUNIOztBQUVERyxPQUFLLENBQUMsR0FBR0gsT0FBSixFQUFhO0FBQ2RDLDhEQUFTLENBQUNHLEdBQVYsQ0FBYyxLQUFLekIsSUFBbkIsRUFBeUIsR0FBR3FCLE9BQTVCO0FBQ0g7O0FBMUU4QiIsImZpbGUiOiIuL3NyYy9zdHJ1Y3RzL2J1aWx0aW4uanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NldHRpbmdzU3RhdGV9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4uL21vZHVsZXMvdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4uL21vZHVsZXMvZW1pdHRlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4uL21vZHVsZXMvc2V0dGluZ3NtYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdWlsdGluTW9kdWxlIHtcclxuXHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJVbm5hbWVkIEJ1aWx0aW5cIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJzZXR0aW5nc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcIk5vbmVcIjt9XHJcblxyXG4gICAgYXN5bmMgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBpZiAoU2V0dGluZ3NTdGF0ZVt0aGlzLmNvbGxlY3Rpb25dW3RoaXMuY2F0ZWdvcnldW3RoaXMuaWRdKSBhd2FpdCB0aGlzLmVuYWJsZSgpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcInNldHRpbmctdXBkYXRlZFwiLCAoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCBlbmFibGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uICE9IHRoaXMuY29sbGVjdGlvbiB8fCBjYXRlZ29yeSAhPT0gdGhpcy5jYXRlZ29yeSB8fCBpZCAhPT0gdGhpcy5pZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgdGhpcy5lbmFibGUoKTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLmRpc2FibGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlclNldHRpbmcoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCBvbkVuYWJsZSwgb25EaXNhYmxlKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gNCkge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWQgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgICAgIG9uRW5hYmxlID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgICAgICBvbkRpc2FibGUgPSBhcmd1bWVudHNbM107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcnk7XHJcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBvbkVuYWJsZSA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICAgICAgb25EaXNhYmxlID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU2V0dGluZ3Mub24oY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSBvbkVuYWJsZSgpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRGlzYWJsZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgIGNhdGVnb3J5ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgIGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeTtcclxuICAgICAgICAgICAgaWQgPSBhcmd1bWVudHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTZXR0aW5ncy5nZXQoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbmFibGUoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJFbmFibGVkXCIpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZW5hYmxlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc2FibGUoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJEaXNhYmxlZFwiKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmRpc2FibGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHt9XHJcbiAgICBhc3luYyBkaXNhYmxlZCgpIHt9XHJcblxyXG4gICAgbG9nKC4uLm1lc3NhZ2UpIHtcclxuICAgICAgICBVdGlsaXRpZXMubG9nKHRoaXMubmFtZSwgLi4ubWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2FybiguLi5tZXNzYWdlKSB7XHJcbiAgICAgICAgVXRpbGl0aWVzLndhcm4odGhpcy5uYW1lLCAuLi5tZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBlcnJvciguLi5tZXNzYWdlKSB7XHJcbiAgICAgICAgVXRpbGl0aWVzLmVycih0aGlzLm5hbWUsIC4uLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/structs/builtin.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BuiltinModule; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _modules_utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../modules/utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n\n\n\n\nclass BuiltinModule {\n get name() {\n return \"Unnamed Builtin\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"None\";\n }\n\n async initialize() {\n if (_modules_settingsmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].get(this.collection, this.category, this.id)) await this.enable();\n _modules_emitter__WEBPACK_IMPORTED_MODULE_2__[\"default\"].on(\"setting-updated\", (collection, category, id, enabled) => {\n if (collection != this.collection || category !== this.category || id !== this.id) return;\n if (enabled) this.enable();else this.disable();\n });\n }\n\n registerSetting(collection, category, id, onEnable, onDisable) {\n if (arguments.length == 4) {\n collection = this.collection;\n category = arguments[0];\n id = arguments[1];\n onEnable = arguments[2];\n onDisable = arguments[3];\n } else if (arguments.length == 3) {\n collection = this.collection;\n category = this.category;\n id = arguments[0];\n onEnable = arguments[1];\n onDisable = arguments[2];\n }\n\n return _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].on(collection, category, id, value => {\n if (value) onEnable();else onDisable();\n });\n }\n\n get(collection, category, id) {\n if (arguments.length == 2) {\n collection = this.collection;\n category = arguments[0];\n id = arguments[1];\n } else if (arguments.length == 1) {\n collection = this.collection;\n category = this.category;\n id = arguments[0];\n }\n\n return _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].get(collection, category, id);\n }\n\n async enable() {\n this.log(\"Enabled\");\n await this.enabled();\n }\n\n async disable() {\n this.log(\"Disabled\");\n await this.disabled();\n }\n\n async enabled() {}\n\n async disabled() {}\n\n log(...message) {\n _modules_utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(this.name, ...message);\n }\n\n warn(...message) {\n _modules_utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].warn(this.name, ...message);\n }\n\n error(...message) {\n _modules_utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].err(this.name, ...message);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3N0cnVjdHMvYnVpbHRpbi5qcz85NTYyIl0sIm5hbWVzIjpbIkJ1aWx0aW5Nb2R1bGUiLCJuYW1lIiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJpbml0aWFsaXplIiwiU2V0dGluZ3MiLCJnZXQiLCJlbmFibGUiLCJFdmVudHMiLCJvbiIsImVuYWJsZWQiLCJkaXNhYmxlIiwicmVnaXN0ZXJTZXR0aW5nIiwib25FbmFibGUiLCJvbkRpc2FibGUiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJ2YWx1ZSIsImxvZyIsImRpc2FibGVkIiwibWVzc2FnZSIsIlV0aWxpdGllcyIsIndhcm4iLCJlcnJvciIsImVyciJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFZSxNQUFNQSxhQUFOLENBQW9CO0FBRS9CLE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8saUJBQVA7QUFBMEI7O0FBQ3RDLE1BQUlDLFVBQUosR0FBaUI7QUFBQyxXQUFPLFVBQVA7QUFBbUI7O0FBQ3JDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sU0FBUDtBQUFrQjs7QUFDbEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxNQUFQO0FBQWU7O0FBRXpCLFFBQU1DLFVBQU4sR0FBbUI7QUFDZixRQUFJQyxnRUFBUSxDQUFDQyxHQUFULENBQWEsS0FBS0wsVUFBbEIsRUFBOEIsS0FBS0MsUUFBbkMsRUFBNkMsS0FBS0MsRUFBbEQsQ0FBSixFQUEyRCxNQUFNLEtBQUtJLE1BQUwsRUFBTjtBQUMzREMsNERBQU0sQ0FBQ0MsRUFBUCxDQUFVLGlCQUFWLEVBQTZCLENBQUNSLFVBQUQsRUFBYUMsUUFBYixFQUF1QkMsRUFBdkIsRUFBMkJPLE9BQTNCLEtBQXVDO0FBQ2hFLFVBQUlULFVBQVUsSUFBSSxLQUFLQSxVQUFuQixJQUFpQ0MsUUFBUSxLQUFLLEtBQUtBLFFBQW5ELElBQStEQyxF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IHtTZXR0aW5nc1N0YXRlfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuLi9tb2R1bGVzL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuLi9tb2R1bGVzL2VtaXR0ZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuLi9tb2R1bGVzL3NldHRpbmdzbWFuYWdlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbHRpbk1vZHVsZSB7XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiVW5uYW1lZCBCdWlsdGluXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJOb25lXCI7fVxyXG5cclxuICAgIGFzeW5jIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgaWYgKFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQpKSBhd2FpdCB0aGlzLmVuYWJsZSgpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcInNldHRpbmctdXBkYXRlZFwiLCAoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCBlbmFibGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2xsZWN0aW9uICE9IHRoaXMuY29sbGVjdGlvbiB8fCBjYXRlZ29yeSAhPT0gdGhpcy5jYXRlZ29yeSB8fCBpZCAhPT0gdGhpcy5pZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgdGhpcy5lbmFibGUoKTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLmRpc2FibGUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlclNldHRpbmcoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCBvbkVuYWJsZSwgb25EaXNhYmxlKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gNCkge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IGFyZ3VtZW50c1swXTtcclxuICAgICAgICAgICAgaWQgPSBhcmd1bWVudHNbMV07XHJcbiAgICAgICAgICAgIG9uRW5hYmxlID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgICAgICBvbkRpc2FibGUgPSBhcmd1bWVudHNbM107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMykge1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjYXRlZ29yeSA9IHRoaXMuY2F0ZWdvcnk7XHJcbiAgICAgICAgICAgIGlkID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBvbkVuYWJsZSA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICAgICAgb25EaXNhYmxlID0gYXJndW1lbnRzWzJdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gU2V0dGluZ3Mub24oY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCAodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSBvbkVuYWJsZSgpO1xyXG4gICAgICAgICAgICBlbHNlIG9uRGlzYWJsZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldChjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQpIHtcclxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgIGNhdGVnb3J5ID0gYXJndW1lbnRzWzBdO1xyXG4gICAgICAgICAgICBpZCA9IGFyZ3VtZW50c1sxXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgIGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb247XHJcbiAgICAgICAgICAgIGNhdGVnb3J5ID0gdGhpcy5jYXRlZ29yeTtcclxuICAgICAgICAgICAgaWQgPSBhcmd1bWVudHNbMF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBTZXR0aW5ncy5nZXQoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbmFibGUoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJFbmFibGVkXCIpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZW5hYmxlZCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRpc2FibGUoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJEaXNhYmxlZFwiKTtcclxuICAgICAgICBhd2FpdCB0aGlzLmRpc2FibGVkKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHt9XHJcbiAgICBhc3luYyBkaXNhYmxlZCgpIHt9XHJcblxyXG4gICAgbG9nKC4uLm1lc3NhZ2UpIHtcclxuICAgICAgICBVdGlsaXRpZXMubG9nKHRoaXMubmFtZSwgLi4ubWVzc2FnZSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2FybiguLi5tZXNzYWdlKSB7XHJcbiAgICAgICAgVXRpbGl0aWVzLndhcm4odGhpcy5uYW1lLCAuLi5tZXNzYWdlKTtcclxuICAgIH1cclxuXHJcbiAgICBlcnJvciguLi5tZXNzYWdlKSB7XHJcbiAgICAgICAgVXRpbGl0aWVzLmVycih0aGlzLm5hbWUsIC4uLm1lc3NhZ2UpO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/structs/builtin.js\n"); /***/ }), @@ -615,18 +579,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), -/***/ "./src/ui/icons/reload.js": -/*!********************************!*\ - !*** ./src/ui/icons/reload.js ***! - \********************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2C_ReloadIcon; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\nclass V2C_ReloadIcon extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"#dcddde\",\n className: \"bd-reload \" + this.props.className,\n onClick: this.props.onClick,\n style: {\n width: this.props.size || \"24px\",\n height: this.props.size || \"24px\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n d: \"M17.65 6.35C16.2 4.9 14.21 4 12 4c-4.42 0-7.99 3.58-7.99 8s3.57 8 7.99 8c3.73 0 6.84-2.55 7.73-6h-2.08c-.82 2.33-3.04 4-5.65 4-3.31 0-6-2.69-6-6s2.69-6 6-6c1.66 0 3.14.69 4.22 1.78L13 11h7V4l-2.35 2.35z\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"path\", {\n fill: \"none\",\n d: \"M0 0h24v24H0z\"\n }));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2ljb25zL3JlbG9hZC5qcz8yM2U3Il0sIm5hbWVzIjpbIlYyQ19SZWxvYWRJY29uIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsInhtbG5zIiwidmlld0JveCIsImZpbGwiLCJjbGFzc05hbWUiLCJvbkNsaWNrIiwic3R5bGUiLCJ3aWR0aCIsInNpemUiLCJoZWlnaHQiLCJkIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUVlLE1BQU1BLGNBQU4sU0FBNkJDLDZDQUFLLENBQUNDLFNBQW5DLENBQTZDO0FBQ3hEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDSDs7QUFFREMsUUFBTSxHQUFHO0FBQ0wsV0FBT0osNkNBQUssQ0FBQ0ssYUFBTixDQUFvQixLQUFwQixFQUEyQjtBQUMxQkMsV0FBSyxFQUFFLDRCQURtQjtBQUUxQkMsYUFBTyxFQUFFLFdBRmlCO0FBRzFCQyxVQUFJLEVBQUUsU0FIb0I7QUFJMUJDLGVBQVMsRUFBRSxlQUFlLEtBQUtOLEtBQUwsQ0FBV00sU0FKWDtBQUsxQkMsYUFBTyxFQUFFLEtBQUtQLEtBQUwsQ0FBV08sT0FMTTtBQU0xQkMsV0FBSyxFQUFFO0FBQUNDLGFBQUssRUFBRSxLQUFLVCxLQUFMLENBQVdVLElBQVgsSUFBbUIsTUFBM0I7QUFBbUNDLGNBQU0sRUFBRSxLQUFLWCxLQUFMLENBQVdVLElBQVgsSUFBbUI7QUFBOUQ7QUFObUIsS0FBM0IsRUFRSGIsNkNBQUssQ0FBQ0ssYUFBTixDQUFvQixNQUFwQixFQUE0QjtBQUFDVSxPQUFDLEVBQUU7QUFBSixLQUE1QixDQVJHLEVBU0hmLDZDQUFLLENBQUNLLGFBQU4sQ0FBb0IsTUFBcEIsRUFBNEI7QUFBQ0csVUFBSSxFQUFFLE1BQVA7QUFBZU8sT0FBQyxFQUFFO0FBQWxCLEtBQTVCLENBVEcsQ0FBUDtBQVdIOztBQWpCdUQiLCJmaWxlIjoiLi9zcmMvdWkvaWNvbnMvcmVsb2FkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdH0gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFYyQ19SZWxvYWRJY29uIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcInN2Z1wiLCB7XHJcbiAgICAgICAgICAgICAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxyXG4gICAgICAgICAgICAgICAgdmlld0JveDogXCIwIDAgMjQgMjRcIixcclxuICAgICAgICAgICAgICAgIGZpbGw6IFwiI2RjZGRkZVwiLFxyXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImJkLXJlbG9hZCBcIiArIHRoaXMucHJvcHMuY2xhc3NOYW1lLFxyXG4gICAgICAgICAgICAgICAgb25DbGljazogdGhpcy5wcm9wcy5vbkNsaWNrLFxyXG4gICAgICAgICAgICAgICAgc3R5bGU6IHt3aWR0aDogdGhpcy5wcm9wcy5zaXplIHx8IFwiMjRweFwiLCBoZWlnaHQ6IHRoaXMucHJvcHMuc2l6ZSB8fCBcIjI0cHhcIn1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge2Q6IFwiTTE3LjY1IDYuMzVDMTYuMiA0LjkgMTQuMjEgNCAxMiA0Yy00LjQyIDAtNy45OSAzLjU4LTcuOTkgOHMzLjU3IDggNy45OSA4YzMuNzMgMCA2Ljg0LTIuNTUgNy43My02aC0yLjA4Yy0uODIgMi4zMy0zLjA0IDQtNS42NSA0LTMuMzEgMC02LTIuNjktNi02czIuNjktNiA2LTZjMS42NiAwIDMuMTQuNjkgNC4yMiAxLjc4TDEzIDExaDdWNGwtMi4zNSAyLjM1elwifSksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtmaWxsOiBcIm5vbmVcIiwgZDogXCJNMCAwaDI0djI0SDB6XCJ9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/icons/reload.js\n"); - -/***/ }), - /***/ "./src/ui/modals.js": /*!**************************!*\ !*** ./src/ui/modals.js ***! @@ -767,7 +719,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2C_PluginCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.js\");\n// import {SettingsCookie, PluginCookie, Plugins} from \"data\";\n\n // import ReloadIcon from \"../icons/reload\";\n\nclass V2C_PluginCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.state = {\n checked: modules__WEBPACK_IMPORTED_MODULE_0__[\"PluginManager\"].isEnabled(this.props.content.id),\n settings: false\n };\n this.hasSettings = typeof this.props.content.plugin.getSettingsPanel === \"function\";\n this.settingsPanel = \"\"; // this.reload = this.reload.bind(this);\n // this.onReload = this.onReload.bind(this);\n }\n\n componentDidUpdate() {\n if (this.state.settings) {\n if (typeof this.settingsPanel === \"object\") {\n this.refs.settingspanel.appendChild(this.settingsPanel);\n } // if (!SettingsCookie[\"fork-ps-3\"]) return;\n\n\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const self = $(modules__WEBPACK_IMPORTED_MODULE_0__[\"ReactDOM\"].findDOMNode(this));\n const container = self.parents(\".scroller-2FKFPG\");\n if (!isHidden(container[0], self[0])) return;\n container.animate({\n scrollTop: self.offset().top - container.offset().top + container.scrollTop() - 30\n }, 300);\n }\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n render() {\n const self = this;\n const {\n content\n } = this.props;\n const name = this.getString(content.name);\n const author = this.getString(content.author);\n const description = this.getString(content.description);\n const version = this.getString(content.version);\n const website = content.website;\n const source = content.source;\n\n if (this.state.settings) {\n try {\n self.settingsPanel = content.plugin.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].err(\"Plugins\", \"Unable to get settings panel for \" + content.name + \".\", err);\n }\n\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n className: \"settings-open ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n style: {\n \"float\": \"right\",\n \"cursor\": \"pointer\"\n },\n onClick: () => {\n this.refs.settingspanel.innerHTML = \"\";\n self.setState({\n settings: false\n });\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), typeof self.settingsPanel === \"object\" && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `plugin-settings-${name}`,\n className: \"plugin-settings\",\n ref: \"settingspanel\"\n }), typeof self.settingsPanel !== \"object\" && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `plugin-settings-${name}`,\n className: \"plugin-settings\",\n ref: \"settingspanel\",\n dangerouslySetInnerHTML: {\n __html: self.settingsPanel\n }\n }));\n }\n\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n \"data-name\": name,\n \"data-version\": version,\n \"className\": \"settings-closed ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-header-title\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-name\"\n }, name), \" v\", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-version\"\n }, version), \" by \", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-author\"\n }, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-controls\"\n }, //!SettingsCookie[\"fork-ps-5\"] && React.createElement(ReloadIcon, {className: \"bd-reload-card\", onClick: this.reload}),\n modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"ui-switch-wrapper ui-flex-child\",\n style: {\n flex: \"0 0 auto\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n checked: this.state.checked,\n onChange: this.onChange,\n className: \"ui-switch-checkbox\",\n type: \"checkbox\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: this.state.checked ? \"ui-switch checked\" : \"ui-switch\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description scroller\"\n }, description)), (website || source || this.hasSettings) && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-links\"\n }, website && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link bda-link-website\",\n href: website,\n target: \"_blank\"\n }, \"Website\"), website && source && \" | \", source && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link bda-link-source\",\n href: source,\n target: \"_blank\"\n }, \"Source\")), this.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bda-settings-button\",\n disabled: !this.state.checked\n }, \"Settings\")));\n }\n\n onChange() {\n this.setState({\n checked: !this.state.checked\n });\n modules__WEBPACK_IMPORTED_MODULE_0__[\"PluginManager\"].togglePlugin(this.props.content.id);\n }\n\n showSettings() {\n if (!this.hasSettings) return;\n this.setState({\n settings: true\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3BsdWdpbmNhcmQuanM/NzczZCJdLCJuYW1lcyI6WyJWMkNfUGx1Z2luQ2FyZCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIm9uQ2hhbmdlIiwiYmluZCIsInNob3dTZXR0aW5ncyIsInN0YXRlIiwiY2hlY2tlZCIsIlBsdWdpbk1hbmFnZXIiLCJpc0VuYWJsZWQiLCJjb250ZW50IiwiaWQiLCJzZXR0aW5ncyIsImhhc1NldHRpbmdzIiwicGx1Z2luIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInNldHRpbmdzUGFuZWwiLCJjb21wb25lbnREaWRVcGRhdGUiLCJyZWZzIiwic2V0dGluZ3NwYW5lbCIsImFwcGVuZENoaWxkIiwiaXNIaWRkZW4iLCJjb250YWluZXIiLCJlbGVtZW50IiwiY1RvcCIsInNjcm9sbFRvcCIsImNCb3R0b20iLCJjbGllbnRIZWlnaHQiLCJlVG9wIiwib2Zmc2V0VG9wIiwiZUJvdHRvbSIsInNlbGYiLCIkIiwiUmVhY3RET00iLCJmaW5kRE9NTm9kZSIsInBhcmVudHMiLCJhbmltYXRlIiwib2Zmc2V0IiwidG9wIiwiZ2V0U3RyaW5nIiwidmFsdWUiLCJ0b1N0cmluZyIsInJlbmRlciIsIm5hbWUiLCJhdXRob3IiLCJkZXNjcmlwdGlvbiIsInZlcnNpb24iLCJ3ZWJzaXRlIiwic291cmNlIiwiZXJyIiwiVXRpbGl0aWVzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInN0eWxlIiwib25DbGljayIsImlubmVySFRNTCIsInNldFN0YXRlIiwiQ2xvc2VCdXR0b24iLCJyZWYiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImZsZXgiLCJ0eXBlIiwiaHJlZiIsInRhcmdldCIsImRpc2FibGVkIiwidG9nZ2xlUGx1Z2luIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7Q0FFQTs7QUFFZSxNQUFN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QUFJakQsNkNBQUssQ0FBQ29ELGFBQU4sQ0FBb0IsR0FBcEIsRUFBeUI7QUFBQ0MsZUFBUyxFQUFFLDBCQUFaO0FBQXdDVyxVQUFJLEVBQUVmLE1BQTlDO0FBQXNEZ0IsWUFBTSxFQUFFO0FBQTlELEtBQXpCLEVBQWtHLFFBQWxHLENBSGQsQ0FEdUMsRUFNdkMsS0FBS25ELFdBQUwsSUFBb0JkLDZDQUFLLENBQUNvRCxhQUFOLENBQW9CLFFBQXBCLEVBQThCO0FBQUNHLGFBQU8sRUFBRSxLQUFLakQsWUFBZjtBQUE2QitDLGVBQVMsRUFBRSxxQkFBeEM7QUFBK0RhLGNBQVEsRUFBRSxDQUFDLEtBQUszRCxLQUFMLENBQVdDO0FBQXJGLEtBQTlCLEVBQTZILFVBQTdILENBTm1CLENBcEJ4QyxDQUFQO0FBNkJIOztBQUVESixVQUFRLEdBQUc7QUFDUCxTQUFLcUQsUUFBTCxDQUFjO0FBQUNqRCxhQUFPLEVBQUUsQ0FBQyxLQUFLRCxLQUFMLENBQVdDO0FBQXRCLEtBQWQ7QUFDQUMseURBQWEsQ0FBQzBELFlBQWQsQ0FBMkIsS0FBS2hFLEtBQUwsQ0FBV1EsT0FBWCxDQUFtQkMsRUFBOUM7QUFDSDs7QUFFRE4sY0FBWSxHQUFHO0FBQ1gsUUFBSSxDQUFDLEtBQUtRLFdBQVYsRUFBdUI7QUFDdkIsU0FBSzJDLFFBQUwsQ0FBYztBQUFDNUMsY0FBUSxFQUFFO0FBQVgsS0FBZDtBQUNIOztBQWpIdUQiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvcGx1Z2luY2FyZC5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGltcG9ydCB7U2V0dGluZ3NDb29raWUsIFBsdWdpbkNvb2tpZSwgUGx1Z2luc30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IHtSZWFjdCwgUmVhY3RET00sIFV0aWxpdGllcywgUGx1Z2luTWFuYWdlcn0gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IENsb3NlQnV0dG9uIGZyb20gXCIuLi9pY29ucy9jbG9zZVwiO1xyXG4vLyBpbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUGx1Z2luQ2FyZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogUGx1Z2luTWFuYWdlci5pc0VuYWJsZWQodGhpcy5wcm9wcy5jb250ZW50LmlkKSxcclxuICAgICAgICAgICAgc2V0dGluZ3M6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdHlwZW9mIHRoaXMucHJvcHMuY29udGVudC5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NQYW5lbCA9IFwiXCI7XHJcblxyXG4gICAgICAgIC8vIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgICAgICAvLyB0aGlzLm9uUmVsb2FkID0gdGhpcy5vblJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykge1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHRoaXMuc2V0dGluZ3NQYW5lbCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuYXBwZW5kQ2hpbGQodGhpcy5zZXR0aW5nc1BhbmVsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaWYgKCFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtM1wiXSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBpc0hpZGRlbiA9IChjb250YWluZXIsIGVsZW1lbnQpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBjVG9wID0gY29udGFpbmVyLnNjcm9sbFRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNCb3R0b20gPSBjVG9wICsgY29udGFpbmVyLmNsaWVudEhlaWdodDtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlVG9wID0gZWxlbWVudC5vZmZzZXRUb3A7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlQm90dG9tID0gZVRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gIChlVG9wIDwgY1RvcCB8fCBlQm90dG9tID4gY0JvdHRvbSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWxmID0gJChSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHNlbGYucGFyZW50cyhcIi5zY3JvbGxlci0yRktGUEdcIik7XHJcbiAgICAgICAgICAgIGlmICghaXNIaWRkZW4oY29udGFpbmVyWzBdLCBzZWxmWzBdKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb250YWluZXIuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IHNlbGYub2Zmc2V0KCkudG9wIC0gY29udGFpbmVyLm9mZnNldCgpLnRvcCArIGNvbnRhaW5lci5zY3JvbGxUb3AoKSAtIDMwXHJcbiAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qge2NvbnRlbnR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldFN0cmluZyhjb250ZW50LmF1dGhvcik7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldFN0cmluZyhjb250ZW50LmRlc2NyaXB0aW9uKTtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC52ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCB3ZWJzaXRlID0gY29udGVudC53ZWJzaXRlO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnRlbnQuc291cmNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0cnkgeyBzZWxmLnNldHRpbmdzUGFuZWwgPSBjb250ZW50LnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlsaXRpZXMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgY29udGVudC5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwge2NsYXNzTmFtZTogXCJzZXR0aW5ncy1vcGVuIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XCJmbG9hdFwiOiBcInJpZ2h0XCIsIFwiY3Vyc29yXCI6IFwicG9pbnRlclwifSwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWZzLnNldHRpbmdzcGFuZWwuaW5uZXJIVE1MID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2V0U3RhdGUoe3NldHRpbmdzOiBmYWxzZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KENsb3NlQnV0dG9uLCBudWxsKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHR5cGVvZiBzZWxmLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7aWQ6IGBwbHVnaW4tc2V0dGluZ3MtJHtuYW1lfWAsIGNsYXNzTmFtZTogXCJwbHVnaW4tc2V0dGluZ3NcIiwgcmVmOiBcInNldHRpbmdzcGFuZWxcIn0pLFxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNlbGYuc2V0dGluZ3NQYW5lbCAhPT0gXCJvYmplY3RcIiAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke25hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IFwic2V0dGluZ3NwYW5lbFwiLCBkYW5nZXJvdXNseVNldElubmVySFRNTDoge19faHRtbDogc2VsZi5zZXR0aW5nc1BhbmVsfX0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHtcImRhdGEtbmFtZVwiOiBuYW1lLCBcImRhdGEtdmVyc2lvblwiOiB2ZXJzaW9uLCBcImNsYXNzTmFtZVwiOiBcInNldHRpbmdzLWNsb3NlZCB1aS1zd2l0Y2gtaXRlbVwifSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtaGVhZGVyLXRpdGxlXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1uYW1lXCJ9LCBuYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS12ZXJzaW9uXCJ9LCB2ZXJzaW9uKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYnkgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLWF1dGhvclwifSwgYXV0aG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8hU2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgUmVhY3QuY3JlYXRlRWxlbWVudChSZWxvYWRJY29uLCB7Y2xhc3NOYW1lOiBcImJkLXJlbG9hZC1jYXJkXCIsIG9uQ2xpY2s6IHRoaXMucmVsb2FkfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7Y2xhc3NOYW1lOiBcInVpLXN3aXRjaC13cmFwcGVyIHVpLWZsZXgtY2hpbGRcIiwgc3R5bGU6IHtmbGV4OiBcIjAgMCBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7Y2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2xhc3NOYW1lOiBcInVpLXN3aXRjaC1jaGVja2JveFwiLCB0eXBlOiBcImNoZWNrYm94XCJ9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogdGhpcy5zdGF0ZS5jaGVja2VkID8gXCJ1aS1zd2l0Y2ggY2hlY2tlZFwiIDogXCJ1aS1zd2l0Y2hcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIn0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCBkZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKHdlYnNpdGUgfHwgc291cmNlIHx8IHRoaXMuaGFzU2V0dGluZ3MpICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgd2Vic2l0ZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7Y2xhc3NOYW1lOiBcImJkYS1saW5rIGJkYS1saW5rLXdlYnNpdGVcIiwgaHJlZjogd2Vic2l0ZSwgdGFyZ2V0OiBcIl9ibGFua1wifSwgXCJXZWJzaXRlXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIHdlYnNpdGUgJiYgc291cmNlICYmIFwiIHwgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtjbGFzc05hbWU6IFwiYmRhLWxpbmsgYmRhLWxpbmstc291cmNlXCIsIGhyZWY6IHNvdXJjZSwgdGFyZ2V0OiBcIl9ibGFua1wifSwgXCJTb3VyY2VcIilcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhc1NldHRpbmdzICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge29uQ2xpY2s6IHRoaXMuc2hvd1NldHRpbmdzLCBjbGFzc05hbWU6IFwiYmRhLXNldHRpbmdzLWJ1dHRvblwiLCBkaXNhYmxlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0sIFwiU2V0dGluZ3NcIilcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgICAgIFBsdWdpbk1hbmFnZXIudG9nZ2xlUGx1Z2luKHRoaXMucHJvcHMuY29udGVudC5pZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5oYXNTZXR0aW5ncykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe3NldHRpbmdzOiB0cnVlfSk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/plugincard.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2C_PluginCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_close__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/close */ \"./src/ui/icons/close.js\");\n// import {SettingsCookie, PluginCookie, Plugins} from \"data\";\n\n // import ReloadIcon from \"../icons/reload\";\n\nclass V2C_PluginCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.onChange = this.onChange.bind(this);\n this.showSettings = this.showSettings.bind(this);\n this.state = {\n checked: modules__WEBPACK_IMPORTED_MODULE_0__[\"PluginManager\"].isEnabled(this.props.content.id),\n settings: false\n };\n this.hasSettings = typeof this.props.content.plugin.getSettingsPanel === \"function\";\n this.settingsPanel = \"\";\n this.panelRef = modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createRef(); // this.reload = this.reload.bind(this);\n // this.onReload = this.onReload.bind(this);\n }\n\n componentDidUpdate() {\n if (this.state.settings) {\n if (typeof this.settingsPanel === \"object\") {\n this.panelRef.current.appendChild(this.settingsPanel);\n } // if (!SettingsCookie[\"fork-ps-3\"]) return;\n\n\n const isHidden = (container, element) => {\n const cTop = container.scrollTop;\n const cBottom = cTop + container.clientHeight;\n const eTop = element.offsetTop;\n const eBottom = eTop + element.clientHeight;\n return eTop < cTop || eBottom > cBottom;\n };\n\n const self = $(this.panelRef.current);\n const container = self.parents(\".scroller-2FKFPG\");\n if (!isHidden(container[0], self[0])) return;\n container.animate({\n scrollTop: self.offset().top - container.offset().top + container.scrollTop() - 30\n }, 300);\n }\n }\n\n getString(value) {\n return typeof value == \"string\" ? value : value.toString();\n }\n\n render() {\n const self = this;\n const {\n content\n } = this.props;\n const name = this.getString(content.name);\n const author = this.getString(content.author);\n const description = this.getString(content.description);\n const version = this.getString(content.version);\n const website = content.website;\n const source = content.source;\n\n if (this.state.settings) {\n try {\n self.settingsPanel = content.plugin.getSettingsPanel();\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_0__[\"Utilities\"].err(\"Plugins\", \"Unable to get settings panel for \" + content.name + \".\", err);\n }\n\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n className: \"settings-open ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n style: {\n \"float\": \"right\",\n \"cursor\": \"pointer\"\n },\n onClick: () => {\n this.panelRef.current.innerHTML = \"\";\n self.setState({\n settings: false\n });\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(_icons_close__WEBPACK_IMPORTED_MODULE_1__[\"default\"], null)), typeof self.settingsPanel === \"object\" && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `plugin-settings-${name}`,\n className: \"plugin-settings\",\n ref: this.panelRef\n }), typeof self.settingsPanel !== \"object\" && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n id: `plugin-settings-${name}`,\n className: \"plugin-settings\",\n ref: this.panelRef,\n dangerouslySetInnerHTML: {\n __html: self.settingsPanel\n }\n }));\n }\n\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n \"data-name\": name,\n \"data-version\": version,\n \"className\": \"settings-closed ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-header-title\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-name\"\n }, name), \" v\", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-version\"\n }, version), \" by \", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-author\"\n }, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-controls\"\n }, //!SettingsCookie[\"fork-ps-5\"] && React.createElement(ReloadIcon, {className: \"bd-reload-card\", onClick: this.reload}),\n modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"ui-switch-wrapper ui-flex-child\",\n style: {\n flex: \"0 0 auto\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n checked: this.state.checked,\n onChange: this.onChange,\n className: \"ui-switch-checkbox\",\n type: \"checkbox\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: this.state.checked ? \"ui-switch checked\" : \"ui-switch\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description scroller\"\n }, description)), (website || source || this.hasSettings) && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-links\"\n }, website && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link bda-link-website\",\n href: website,\n target: \"_blank\"\n }, \"Website\"), website && source && \" | \", source && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link bda-link-source\",\n href: source,\n target: \"_blank\"\n }, \"Source\")), this.hasSettings && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"button\", {\n onClick: this.showSettings,\n className: \"bda-settings-button\",\n disabled: !this.state.checked\n }, \"Settings\")));\n }\n\n onChange() {\n this.setState({\n checked: !this.state.checked\n });\n modules__WEBPACK_IMPORTED_MODULE_0__[\"PluginManager\"].togglePlugin(this.props.content.id);\n }\n\n showSettings() {\n if (!this.hasSettings) return;\n this.setState({\n settings: true\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3BsdWdpbmNhcmQuanM/NzczZCJdLCJuYW1lcyI6WyJWMkNfUGx1Z2luQ2FyZCIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIm9uQ2hhbmdlIiwiYmluZCIsInNob3dTZXR0aW5ncyIsInN0YXRlIiwiY2hlY2tlZCIsIlBsdWdpbk1hbmFnZXIiLCJpc0VuYWJsZWQiLCJjb250ZW50IiwiaWQiLCJzZXR0aW5ncyIsImhhc1NldHRpbmdzIiwicGx1Z2luIiwiZ2V0U2V0dGluZ3NQYW5lbCIsInNldHRpbmdzUGFuZWwiLCJwYW5lbFJlZiIsImNyZWF0ZVJlZiIsImNvbXBvbmVudERpZFVwZGF0ZSIsImN1cnJlbnQiLCJhcHBlbmRDaGlsZCIsImlzSGlkZGVuIiwiY29udGFpbmVyIiwiZWxlbWVudCIsImNUb3AiLCJzY3JvbGxUb3AiLCJjQm90dG9tIiwiY2xpZW50SGVpZ2h0IiwiZVRvcCIsIm9mZnNldFRvcCIsImVCb3R0b20iLCJzZWxmIiwiJCIsInBhcmVudHMiLCJhbmltYXRlIiwib2Zmc2V0IiwidG9wIiwiZ2V0U3RyaW5nIiwidmFsdWUiLCJ0b1N0cmluZyIsInJlbmRlciIsIm5hbWUiLCJhdXRob3IiLCJkZXNjcmlwdGlvbiIsInZlcnNpb24iLCJ3ZWJzaXRlIiwic291cmNlIiwiZXJyIiwiVXRpbGl0aWVzIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsInN0eWxlIiwib25DbGljayIsImlubmVySFRNTCIsInNldFN0YXRlIiwiQ2xvc2VCdXR0b24iLCJyZWYiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImZsZXgiLCJ0eXBlIiwiaHJlZiIsInRhcmdldCIsImRpc2FibGVkIiwidG9nZ2xlUGx1Z2luIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7Q0FFQTs7QUFFZSxNQUFNQSxjQUFOLFNBQTZCQyw2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TyxJQUFJQyxNQUFYLElBQXFCLEtBRnpCLEVBR0lBLE1BQU0sSUFBSWhELDZDQUFLLENBQUNtRCxhQUFOLENBQW9CLEdBQXBCLEVBQXlCO0FBQUNDLGVBQVMsRUFBRSwwQkFBWjtBQUF3Q1csVUFBSSxFQUFFZixNQUE5QztBQUFzRGdCLFlBQU0sRUFBRTtBQUE5RCxLQUF6QixFQUFrRyxRQUFsRyxDQUhkLENBRHVDLEVBTXZDLEtBQUtsRCxXQUFMLElBQW9CZCw2Q0FBSyxDQUFDbUQsYUFBTixDQUFvQixRQUFwQixFQUE4QjtBQUFDRyxhQUFPLEVBQUUsS0FBS2hELFlBQWY7QUFBNkI4QyxlQUFTLEVBQUUscUJBQXhDO0FBQStEYSxjQUFRLEVBQUUsQ0FBQyxLQUFLMUQsS0FBTCxDQUFXQztBQUFyRixLQUE5QixFQUE2SCxVQUE3SCxDQU5tQixDQXBCeEMsQ0FBUDtBQTZCSDs7QUFFREosVUFBUSxHQUFHO0FBQ1AsU0FBS29ELFFBQUwsQ0FBYztBQUFDaEQsYUFBTyxFQUFFLENBQUMsS0FBS0QsS0FBTCxDQUFXQztBQUF0QixLQUFkO0FBQ0FDLHlEQUFhLENBQUN5RCxZQUFkLENBQTJCLEtBQUsvRCxLQUFMLENBQVdRLE9BQVgsQ0FBbUJDLEVBQTlDO0FBQ0g7O0FBRUROLGNBQVksR0FBRztBQUNYLFFBQUksQ0FBQyxLQUFLUSxXQUFWLEVBQXVCO0FBQ3ZCLFNBQUswQyxRQUFMLENBQWM7QUFBQzNDLGNBQVEsRUFBRTtBQUFYLEtBQWQ7QUFDSDs7QUFsSHVEIiwiZmlsZSI6Ii4vc3JjL3VpL3NldHRpbmdzL3BsdWdpbmNhcmQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBpbXBvcnQge1NldHRpbmdzQ29va2llLCBQbHVnaW5Db29raWUsIFBsdWdpbnN9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7UmVhY3QsIFV0aWxpdGllcywgUGx1Z2luTWFuYWdlcn0gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IENsb3NlQnV0dG9uIGZyb20gXCIuLi9pY29ucy9jbG9zZVwiO1xyXG4vLyBpbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfUGx1Z2luQ2FyZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZSA9IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnNob3dTZXR0aW5ncyA9IHRoaXMuc2hvd1NldHRpbmdzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogUGx1Z2luTWFuYWdlci5pc0VuYWJsZWQodGhpcy5wcm9wcy5jb250ZW50LmlkKSxcclxuICAgICAgICAgICAgc2V0dGluZ3M6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmhhc1NldHRpbmdzID0gdHlwZW9mIHRoaXMucHJvcHMuY29udGVudC5wbHVnaW4uZ2V0U2V0dGluZ3NQYW5lbCA9PT0gXCJmdW5jdGlvblwiO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3NQYW5lbCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5wYW5lbFJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG5cclxuICAgICAgICAvLyB0aGlzLnJlbG9hZCA9IHRoaXMucmVsb2FkLmJpbmQodGhpcyk7XHJcbiAgICAgICAgLy8gdGhpcy5vblJlbG9hZCA9IHRoaXMub25SZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnREaWRVcGRhdGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2V0dGluZ3MpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnNldHRpbmdzUGFuZWwgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFuZWxSZWYuY3VycmVudC5hcHBlbmRDaGlsZCh0aGlzLnNldHRpbmdzUGFuZWwpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBpZiAoIVNldHRpbmdzQ29va2llW1wiZm9yay1wcy0zXCJdKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IGlzSGlkZGVuID0gKGNvbnRhaW5lciwgZWxlbWVudCkgPT4ge1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNUb3AgPSBjb250YWluZXIuc2Nyb2xsVG9wO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY0JvdHRvbSA9IGNUb3AgKyBjb250YWluZXIuY2xpZW50SGVpZ2h0O1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGVUb3AgPSBlbGVtZW50Lm9mZnNldFRvcDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVCb3R0b20gPSBlVG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiAgKGVUb3AgPCBjVG9wIHx8IGVCb3R0b20gPiBjQm90dG9tKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGYgPSAkKHRoaXMucGFuZWxSZWYuY3VycmVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHNlbGYucGFyZW50cyhcIi5zY3JvbGxlci0yRktGUEdcIik7XHJcbiAgICAgICAgICAgIGlmICghaXNIaWRkZW4oY29udGFpbmVyWzBdLCBzZWxmWzBdKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb250YWluZXIuYW5pbWF0ZSh7XHJcbiAgICAgICAgICAgICAgICBzY3JvbGxUb3A6IHNlbGYub2Zmc2V0KCkudG9wIC0gY29udGFpbmVyLm9mZnNldCgpLnRvcCArIGNvbnRhaW5lci5zY3JvbGxUb3AoKSAtIDMwXHJcbiAgICAgICAgICAgIH0sIDMwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFN0cmluZyh2YWx1ZSkge1xyXG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlIDogdmFsdWUudG9TdHJpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qge2NvbnRlbnR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC5uYW1lKTtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSB0aGlzLmdldFN0cmluZyhjb250ZW50LmF1dGhvcik7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSB0aGlzLmdldFN0cmluZyhjb250ZW50LmRlc2NyaXB0aW9uKTtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gdGhpcy5nZXRTdHJpbmcoY29udGVudC52ZXJzaW9uKTtcclxuICAgICAgICBjb25zdCB3ZWJzaXRlID0gY29udGVudC53ZWJzaXRlO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnRlbnQuc291cmNlO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zZXR0aW5ncykge1xyXG4gICAgICAgICAgICB0cnkgeyBzZWxmLnNldHRpbmdzUGFuZWwgPSBjb250ZW50LnBsdWdpbi5nZXRTZXR0aW5nc1BhbmVsKCk7IH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBVdGlsaXRpZXMuZXJyKFwiUGx1Z2luc1wiLCBcIlVuYWJsZSB0byBnZXQgc2V0dGluZ3MgcGFuZWwgZm9yIFwiICsgY29udGVudC5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwge2NsYXNzTmFtZTogXCJzZXR0aW5ncy1vcGVuIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge3N0eWxlOiB7XCJmbG9hdFwiOiBcInJpZ2h0XCIsIFwiY3Vyc29yXCI6IFwicG9pbnRlclwifSwgb25DbGljazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYW5lbFJlZi5jdXJyZW50LmlubmVySFRNTCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNldFN0YXRlKHtzZXR0aW5nczogZmFsc2V9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX0sXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChDbG9zZUJ1dHRvbiwgbnVsbClcclxuICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICB0eXBlb2Ygc2VsZi5zZXR0aW5nc1BhbmVsID09PSBcIm9iamVjdFwiICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2lkOiBgcGx1Z2luLXNldHRpbmdzLSR7bmFtZX1gLCBjbGFzc05hbWU6IFwicGx1Z2luLXNldHRpbmdzXCIsIHJlZjogdGhpcy5wYW5lbFJlZn0pLFxyXG4gICAgICAgICAgICAgICAgdHlwZW9mIHNlbGYuc2V0dGluZ3NQYW5lbCAhPT0gXCJvYmplY3RcIiAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtpZDogYHBsdWdpbi1zZXR0aW5ncy0ke25hbWV9YCwgY2xhc3NOYW1lOiBcInBsdWdpbi1zZXR0aW5nc1wiLCByZWY6IHRoaXMucGFuZWxSZWYsIGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MOiB7X19odG1sOiBzZWxmLnNldHRpbmdzUGFuZWx9fSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwge1wiZGF0YS1uYW1lXCI6IG5hbWUsIFwiZGF0YS12ZXJzaW9uXCI6IHZlcnNpb24sIFwiY2xhc3NOYW1lXCI6IFwic2V0dGluZ3MtY2xvc2VkIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1oZWFkZXItdGl0bGVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLW5hbWVcIn0sIG5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiB2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBieSBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtYXV0aG9yXCJ9LCBhdXRob3IpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlbG9hZEljb24sIHtjbGFzc05hbWU6IFwiYmQtcmVsb2FkLWNhcmRcIiwgb25DbGljazogdGhpcy5yZWxvYWR9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtjbGFzc05hbWU6IFwidWktc3dpdGNoLXdyYXBwZXIgdWktZmxleC1jaGlsZFwiLCBzdHlsZToge2ZsZXg6IFwiMCAwIGF1dG9cIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjbGFzc05hbWU6IFwidWktc3dpdGNoLWNoZWNrYm94XCIsIHR5cGU6IFwiY2hlY2tib3hcIn0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiB0aGlzLnN0YXRlLmNoZWNrZWQgPyBcInVpLXN3aXRjaCBjaGVja2VkXCIgOiBcInVpLXN3aXRjaFwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1kZXNjcmlwdGlvbi13cmFwIHNjcm9sbGVyLXdyYXAgZmFkZVwifSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIn0sIGRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAod2Vic2l0ZSB8fCBzb3VyY2UgfHwgdGhpcy5oYXNTZXR0aW5ncykgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1mb290ZXJcIn0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1saW5rc1wifSxcclxuICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtjbGFzc05hbWU6IFwiYmRhLWxpbmsgYmRhLWxpbmstd2Vic2l0ZVwiLCBocmVmOiB3ZWJzaXRlLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBcIldlYnNpdGVcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgd2Vic2l0ZSAmJiBzb3VyY2UgJiYgXCIgfCBcIixcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogXCJiZGEtbGluayBiZGEtbGluay1zb3VyY2VcIiwgaHJlZjogc291cmNlLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBcIlNvdXJjZVwiKVxyXG4gICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFzU2V0dGluZ3MgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7b25DbGljazogdGhpcy5zaG93U2V0dGluZ3MsIGNsYXNzTmFtZTogXCJiZGEtc2V0dGluZ3MtYnV0dG9uXCIsIGRpc2FibGVkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSwgXCJTZXR0aW5nc1wiKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSgpIHtcclxuICAgICAgICB0aGlzLnNldFN0YXRlKHtjaGVja2VkOiAhdGhpcy5zdGF0ZS5jaGVja2VkfSk7XHJcbiAgICAgICAgUGx1Z2luTWFuYWdlci50b2dnbGVQbHVnaW4odGhpcy5wcm9wcy5jb250ZW50LmlkKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2V0dGluZ3MoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmhhc1NldHRpbmdzKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7c2V0dGluZ3M6IHRydWV9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/plugincard.js\n"); /***/ }), @@ -779,7 +731,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2_SettingsPanel; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _plugincard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./plugincard */ \"./src/ui/settings/plugincard.js\");\n/* harmony import */ var _themecard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./themecard */ \"./src/ui/settings/themecard.js\");\n/* harmony import */ var _settings_group__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../settings/group */ \"./src/ui/settings/group.jsx\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n\n // import Sidebar from \"./sidebar\";\n// import Scroller from \"../scroller\";\n// import List from \"../list\";\n// import ContentColumn from \"./contentcolumn\";\n// import SectionedSettingsPanel from \"./sectionedsettings\";\n// import Tools from \"./exitbutton\";\n// import SettingsPanel from \"./panel\";\n\n\n // import ReloadIcon from \"../icons/reload\";\n// import CssEditor from \"../customcss/editor\";\n// import SettingsGroup from \"../settings/settingsgroup\";\n\n\n\nclass V2_SettingsPanel {\n static buildSettingsPanel(title, config, state, onChange) {\n config.forEach(section => {\n section.settings.forEach(item => item.value = state[section.id][item.id]);\n });\n return this.getSettingsPanel(title, config, onChange);\n }\n\n static getSettingsPanel(title, groups, onChange) {\n return [modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n text: title\n }), groups.map(section => {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_settings_group__WEBPACK_IMPORTED_MODULE_4__[\"default\"], Object.assign({}, section, {\n onChange\n }));\n })];\n }\n\n static getPluginsPanel(plugins) {\n const titleComponent = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n text: \"Plugins\",\n button: {\n title: \"Open Plugin Folder\",\n onClick: () => {\n __webpack_require__(/*! electron */ \"electron\").shell.openItem(\"\");\n }\n }\n });\n const cards = plugins.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(plugin => modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_plugincard__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: plugin.id,\n content: plugin\n }));\n console.log(cards);\n return [titleComponent, modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"ul\", {\n className: \"bda-slist\"\n }, ...cards)]; // const plugins = Object.keys(Plugins).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).reduce((arr, key) => {\n // arr.push(React.createElement(PluginCard, {key: key, plugin: Plugins[key].plugin}));return arr;\n // }, []);\n // const list = React.createElement(List, {key: \"plugin-list\", className: \"bda-slist\", children: plugins});\n // const refreshIcon = !SettingsCookie[\"fork-ps-5\"] && React.createElement(ReloadIcon, {className: \"bd-reload-header\", size: \"18px\", onClick: async () => {\n // PluginManager.updatePluginList();\n // this.sideBarOnClick(\"plugins\");\n // }});\n // const pfBtn = React.createElement(\"button\", {key: \"folder-button\", className: \"bd-pfbtn\", onClick: () => { require(\"electron\").shell.openItem(ContentManager.pluginsFolder); }}, \"Open Plugin Folder\");\n // const contentColumn = React.createElement(ContentColumn, {key: \"pcolumn\", title: \"Plugins\", children: [refreshIcon, pfBtn, list]});\n // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, React.createElement(Tools, {key: \"tools\"})]});\n }\n\n static getThemesPanel(themes) {\n const titleComponent = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n text: \"Themes\",\n button: {\n title: \"Open Theme Folder\",\n onClick: () => {\n __webpack_require__(/*! electron */ \"electron\").shell.openItem(\"\");\n }\n }\n });\n const cards = themes.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(theme => modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_themecard__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n key: theme.id,\n content: theme\n }));\n console.log(cards);\n return [titleComponent, modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"ul\", {\n className: \"bda-slist\"\n }, ...cards)]; // const plugins = Object.keys(Plugins).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).reduce((arr, key) => {\n // arr.push(React.createElement(PluginCard, {key: key, plugin: Plugins[key].plugin}));return arr;\n // }, []);\n // const list = React.createElement(List, {key: \"plugin-list\", className: \"bda-slist\", children: plugins});\n // const refreshIcon = !SettingsCookie[\"fork-ps-5\"] && React.createElement(ReloadIcon, {className: \"bd-reload-header\", size: \"18px\", onClick: async () => {\n // PluginManager.updatePluginList();\n // this.sideBarOnClick(\"plugins\");\n // }});\n // const pfBtn = React.createElement(\"button\", {key: \"folder-button\", className: \"bd-pfbtn\", onClick: () => { require(\"electron\").shell.openItem(ContentManager.pluginsFolder); }}, \"Open Plugin Folder\");\n // const contentColumn = React.createElement(ContentColumn, {key: \"pcolumn\", title: \"Plugins\", children: [refreshIcon, pfBtn, list]});\n // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, React.createElement(Tools, {key: \"tools\"})]});\n }\n\n static get attribution() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n fontWeight: \"600\",\n color: \"#72767d\",\n padding: \"2px 10px\"\n }\n }, `BBD v${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].bbdVersion} by `, modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"a\", {\n href: \"https://github.com/rauenzi/\",\n target: \"_blank\"\n }, \"Zerebos\"));\n } // get coreComponent() {\n // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [\n // React.createElement(SectionedSettingsPanel, {key: \"cspanel\", onChange: this.onChange, sections: this.coreSettings}),\n // React.createElement(Tools, {key: \"tools\"})\n // ]});\n // }\n // get emoteComponent() {\n // return React.createElement(Scroller, {\n // contentColumn: true, fade: true, dark: true, children: [\n // React.createElement(SettingsPanel, {key: \"espanel\", title: \"Emote Settings\", onChange: this.onChange, settings: this.emoteSettings, button: {\n // title: \"Clear Emote Cache\",\n // onClick: () => { Events.dispatch(\"emotes-clear\"); /*EmoteModule.clearEmoteData(); EmoteModule.init();*/ }\n // }}),\n // React.createElement(Tools, {key: \"tools\"})\n // ]});\n // }\n // get customCssComponent() {\n // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [React.createElement(CssEditor, {key: \"csseditor\"}), React.createElement(Tools, {key: \"tools\"})]});\n // }\n // contentComponent(type) {\n // const componentElement = type == \"plugins\" ? this.pluginsComponent : this.themesComponent;\n // const prefix = type.replace(\"s\", \"\");\n // const settingsList = this;\n // class ContentList extends React.Component {\n // constructor(props) {\n // super(props);\n // this.onChange = this.onChange.bind(this);\n // }\n // componentDidMount() {\n // Events.on(`${prefix}-reloaded`, this.onChange);\n // Events.on(`${prefix}-loaded`, this.onChange);\n // Events.on(`${prefix}-unloaded`, this.onChange);\n // }\n // componentWillUnmount() {\n // Events.off(`${prefix}-reloaded`, this.onChange);\n // Events.off(`${prefix}-loaded`, this.onChange);\n // Events.off(`${prefix}-unloaded`, this.onChange);\n // }\n // onChange() {\n // settingsList.sideBarOnClick(type);\n // }\n // render() {return componentElement;}\n // }\n // return React.createElement(ContentList);\n // }\n // get pluginsComponent() {\n // const plugins = Object.keys(Plugins).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).reduce((arr, key) => {\n // arr.push(React.createElement(PluginCard, {key: key, plugin: Plugins[key].plugin}));return arr;\n // }, []);\n // const list = React.createElement(List, {key: \"plugin-list\", className: \"bda-slist\", children: plugins});\n // const refreshIcon = !SettingsCookie[\"fork-ps-5\"] && React.createElement(ReloadIcon, {className: \"bd-reload-header\", size: \"18px\", onClick: async () => {\n // PluginManager.updatePluginList();\n // this.sideBarOnClick(\"plugins\");\n // }});\n // const pfBtn = React.createElement(\"button\", {key: \"folder-button\", className: \"bd-pfbtn\", onClick: () => { require(\"electron\").shell.openItem(ContentManager.pluginsFolder); }}, \"Open Plugin Folder\");\n // const contentColumn = React.createElement(ContentColumn, {key: \"pcolumn\", title: \"Plugins\", children: [refreshIcon, pfBtn, list]});\n // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, React.createElement(Tools, {key: \"tools\"})]});\n // }\n // get themesComponent() {\n // const themes = Object.keys(Themes).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).reduce((arr, key) => {\n // arr.push(React.createElement(ThemeCard, {key: key, theme: Themes[key]}));return arr;\n // }, []);\n // const list = React.createElement(List, {key: \"theme-list\", className: \"bda-slist\", children: themes});\n // const refreshIcon = !SettingsCookie[\"fork-ps-5\"] && React.createElement(ReloadIcon, {className: \"bd-reload-header\", size: \"18px\", onClick: async () => {\n // ThemeManager.updateThemeList();\n // this.sideBarOnClick(\"themes\");\n // }});\n // const tfBtn = React.createElement(\"button\", {key: \"folder-button\", className: \"bd-pfbtn\", onClick: () => { require(\"electron\").shell.openItem(ContentManager.themesFolder); }}, \"Open Theme Folder\");\n // const contentColumn = React.createElement(ContentColumn, {key: \"tcolumn\", title: \"Themes\", children: [refreshIcon, tfBtn, list]});\n // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, React.createElement(Tools, {key: \"tools\"})]});\n // }\n\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3NldHRpbmdzLmpzPzgwYWIiXSwibmFtZXMiOlsiVjJfU2V0dGluZ3NQYW5lbCIsImJ1aWxkU2V0dGluZ3NQYW5lbCIsInRpdGxlIiwiY29uZmlnIiwic3RhdGUiLCJvbkNoYW5nZSIsImZvckVhY2giLCJzZWN0aW9uIiwic2V0dGluZ3MiLCJpdGVtIiwidmFsdWUiLCJpZCIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRQbHVnaW5zUGFuZWwiLCJwbHVnaW5zIiwidGl0bGVDb21wb25lbnQiLCJidXR0b24iLCJvbkNsaWNrIiwicmVxdWlyZSIsInNoZWxsIiwib3Blbkl0ZW0iLCJjYXJkcyIsInNvcnQiLCJhIiwiYiIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImxvY2FsZUNvbXBhcmUiLCJwbHVnaW4iLCJQbHVnaW5DYXJkIiwia2V5IiwiY29udGVudCIsImNvbnNvbGUiLCJsb2ciLCJjbGFzc05hbWUiLCJnZXRUaGVtZXNQYW5lbCIsInRoZW1lcyIsInRoZW1lIiwiVGhlbWVDYXJkIiwiYXR0cmlidXRpb24iLCJzdHlsZSIsImZvbnRTaXplIiwiZm9udFdlaWdodCIsImNvbG9yIiwicGFkZGluZyIsIkNvbmZpZyIsImJiZFZlcnNpb24iLCJocmVmIiwidGFyZ2V0Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Q0FFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQTtDQUVBO0FBRUE7QUFDQTs7QUFDQTtBQUNBO0FBRWUsTUFBTUEsZ0JBQU4sQ0FBdUI7QUFFbEMsU0FBT0Msa0JBQVAsQ0FBMEJDLEtBQTFCLEVBQWlDQyxNQUFqQyxFQUF5Q0MsS0FBekMs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O0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBbkprQyIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9zZXR0aW5ncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1JlYWN0LyosIFJlYWN0RE9NLCBVdGlsaXRpZXMsIENvbnRlbnRNYW5hZ2VyLCBFdmVudHMsIFBsdWdpbk1hbmFnZXIsIFRoZW1lTWFuYWdlciovfSBmcm9tIFwibW9kdWxlc1wiO1xyXG4vLyBpbXBvcnQgU2lkZWJhciBmcm9tIFwiLi9zaWRlYmFyXCI7XHJcbi8vIGltcG9ydCBTY3JvbGxlciBmcm9tIFwiLi4vc2Nyb2xsZXJcIjtcclxuLy8gaW1wb3J0IExpc3QgZnJvbSBcIi4uL2xpc3RcIjtcclxuLy8gaW1wb3J0IENvbnRlbnRDb2x1bW4gZnJvbSBcIi4vY29udGVudGNvbHVtblwiO1xyXG4vLyBpbXBvcnQgU2VjdGlvbmVkU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9zZWN0aW9uZWRzZXR0aW5nc1wiO1xyXG4vLyBpbXBvcnQgVG9vbHMgZnJvbSBcIi4vZXhpdGJ1dHRvblwiO1xyXG4vLyBpbXBvcnQgU2V0dGluZ3NQYW5lbCBmcm9tIFwiLi9wYW5lbFwiO1xyXG5pbXBvcnQgUGx1Z2luQ2FyZCBmcm9tIFwiLi9wbHVnaW5jYXJkXCI7XHJcbmltcG9ydCBUaGVtZUNhcmQgZnJvbSBcIi4vdGhlbWVjYXJkXCI7XHJcbi8vIGltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuLi9pY29ucy9yZWxvYWRcIjtcclxuXHJcbi8vIGltcG9ydCBDc3NFZGl0b3IgZnJvbSBcIi4uL2N1c3RvbWNzcy9lZGl0b3JcIjtcclxuLy8gaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4uL3NldHRpbmdzL3NldHRpbmdzZ3JvdXBcIjtcclxuaW1wb3J0IFNldHRpbmdzR3JvdXAgZnJvbSBcIi4uL3NldHRpbmdzL2dyb3VwXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3RpdGxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMl9TZXR0aW5nc1BhbmVsIHtcclxuXHJcbiAgICBzdGF0aWMgYnVpbGRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIHN0YXRlLCBvbkNoYW5nZSkge1xyXG4gICAgICAgIGNvbmZpZy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLmZvckVhY2goaXRlbSA9PiBpdGVtLnZhbHVlID0gc3RhdGVbc2VjdGlvbi5pZF1baXRlbS5pZF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzUGFuZWwodGl0bGUsIGNvbmZpZywgb25DaGFuZ2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRTZXR0aW5nc1BhbmVsKHRpdGxlLCBncm91cHMsIG9uQ2hhbmdlKSB7XHJcbiAgICAgICAgcmV0dXJuIFtSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZX0pLCBncm91cHMubWFwKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc0dyb3VwLCBPYmplY3QuYXNzaWduKHt9LCBzZWN0aW9uLCB7b25DaGFuZ2V9KSk7XHJcbiAgICAgICAgfSldO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRQbHVnaW5zUGFuZWwocGx1Z2lucykge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlQ29tcG9uZW50ID0gUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJQbHVnaW5zXCIsIGJ1dHRvbjoge3RpdGxlOiBcIk9wZW4gUGx1Z2luIEZvbGRlclwiLCBvbkNsaWNrOiAoKSA9PiB7IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShcIlwiKTsgfX19KTtcclxuICAgICAgICBjb25zdCBjYXJkcyA9IHBsdWdpbnMuc29ydCgoYSwgYikgPT4gYS5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm5hbWUudG9Mb3dlckNhc2UoKSkpLm1hcChwbHVnaW4gPT4gXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luQ2FyZCwge2tleTogcGx1Z2luLmlkLCBjb250ZW50OiBwbHVnaW59KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc29sZS5sb2coY2FyZHMpO1xyXG4gICAgICAgIHJldHVybiBbdGl0bGVDb21wb25lbnQsIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJ1bFwiLCB7Y2xhc3NOYW1lOiBcImJkYS1zbGlzdFwifSwgLi4uY2FyZHMpXTtcclxuICAgICAgICAvLyBjb25zdCBwbHVnaW5zID0gT2JqZWN0LmtleXMoUGx1Z2lucykuc29ydCgoYSwgYikgPT4gYS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi50b0xvd2VyQ2FzZSgpKSkucmVkdWNlKChhcnIsIGtleSkgPT4ge1xyXG4gICAgICAgIC8vICAgICBhcnIucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KFBsdWdpbkNhcmQsIHtrZXk6IGtleSwgcGx1Z2luOiBQbHVnaW5zW2tleV0ucGx1Z2lufSkpO3JldHVybiBhcnI7XHJcbiAgICAgICAgLy8gfSwgW10pO1xyXG4gICAgICAgIC8vIGNvbnN0IGxpc3QgPSBSZWFjdC5jcmVhdGVFbGVtZW50KExpc3QsIHtrZXk6IFwicGx1Z2luLWxpc3RcIiwgY2xhc3NOYW1lOiBcImJkYS1zbGlzdFwiLCBjaGlsZHJlbjogcGx1Z2luc30pO1xyXG4gICAgICAgIC8vIGNvbnN0IHJlZnJlc2hJY29uID0gIVNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVsb2FkSWNvbiwge2NsYXNzTmFtZTogXCJiZC1yZWxvYWQtaGVhZGVyXCIsIHNpemU6IFwiMThweFwiLCBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgLy8gICAgIFBsdWdpbk1hbmFnZXIudXBkYXRlUGx1Z2luTGlzdCgpO1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNpZGVCYXJPbkNsaWNrKFwicGx1Z2luc1wiKTtcclxuICAgICAgICAvLyB9fSk7XHJcbiAgICAgICAgLy8gY29uc3QgcGZCdG4gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwiZm9sZGVyLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogKCkgPT4geyByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oQ29udGVudE1hbmFnZXIucGx1Z2luc0ZvbGRlcik7IH19LCBcIk9wZW4gUGx1Z2luIEZvbGRlclwiKTtcclxuICAgICAgICAvLyBjb25zdCBjb250ZW50Q29sdW1uID0gUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50Q29sdW1uLCB7a2V5OiBcInBjb2x1bW5cIiwgdGl0bGU6IFwiUGx1Z2luc1wiLCBjaGlsZHJlbjogW3JlZnJlc2hJY29uLCBwZkJ0biwgbGlzdF19KTtcclxuICAgICAgICAvLyByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2NvbnRlbnRDb2x1bW46IHRydWUsIGZhZGU6IHRydWUsIGRhcms6IHRydWUsIGNoaWxkcmVuOiBbY29udGVudENvbHVtbiwgUmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJ0b29sc1wifSldfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldFRoZW1lc1BhbmVsKHRoZW1lcykge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlQ29tcG9uZW50ID0gUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJUaGVtZXNcIiwgYnV0dG9uOiB7dGl0bGU6IFwiT3BlbiBUaGVtZSBGb2xkZXJcIiwgb25DbGljazogKCkgPT4geyByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oXCJcIik7IH19fSk7XHJcbiAgICAgICAgY29uc3QgY2FyZHMgPSB0aGVtZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLm5hbWUudG9Mb3dlckNhc2UoKSkpLm1hcCh0aGVtZSA9PiBcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUaGVtZUNhcmQsIHtrZXk6IHRoZW1lLmlkLCBjb250ZW50OiB0aGVtZX0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhjYXJkcyk7XHJcbiAgICAgICAgcmV0dXJuIFt0aXRsZUNvbXBvbmVudCwgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHtjbGFzc05hbWU6IFwiYmRhLXNsaXN0XCJ9LCAuLi5jYXJkcyldO1xyXG4gICAgICAgIC8vIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhQbHVnaW5zKS5zb3J0KChhLCBiKSA9PiBhLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLnRvTG93ZXJDYXNlKCkpKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAgICAgLy8gICAgIGFyci5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luQ2FyZCwge2tleToga2V5LCBwbHVnaW46IFBsdWdpbnNba2V5XS5wbHVnaW59KSk7cmV0dXJuIGFycjtcclxuICAgICAgICAvLyB9LCBbXSk7XHJcbiAgICAgICAgLy8gY29uc3QgbGlzdCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwge2tleTogXCJwbHVnaW4tbGlzdFwiLCBjbGFzc05hbWU6IFwiYmRhLXNsaXN0XCIsIGNoaWxkcmVuOiBwbHVnaW5zfSk7XHJcbiAgICAgICAgLy8gY29uc3QgcmVmcmVzaEljb24gPSAhU2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgUmVhY3QuY3JlYXRlRWxlbWVudChSZWxvYWRJY29uLCB7Y2xhc3NOYW1lOiBcImJkLXJlbG9hZC1oZWFkZXJcIiwgc2l6ZTogXCIxOHB4XCIsIG9uQ2xpY2s6IGFzeW5jICgpID0+IHtcclxuICAgICAgICAvLyAgICAgUGx1Z2luTWFuYWdlci51cGRhdGVQbHVnaW5MaXN0KCk7XHJcbiAgICAgICAgLy8gICAgIHRoaXMuc2lkZUJhck9uQ2xpY2soXCJwbHVnaW5zXCIpO1xyXG4gICAgICAgIC8vIH19KTtcclxuICAgICAgICAvLyBjb25zdCBwZkJ0biA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge2tleTogXCJmb2xkZXItYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiAoKSA9PiB7IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyKTsgfX0sIFwiT3BlbiBQbHVnaW4gRm9sZGVyXCIpO1xyXG4gICAgICAgIC8vIGNvbnN0IGNvbnRlbnRDb2x1bW4gPSBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRlbnRDb2x1bW4sIHtrZXk6IFwicGNvbHVtblwiLCB0aXRsZTogXCJQbHVnaW5zXCIsIGNoaWxkcmVuOiBbcmVmcmVzaEljb24sIHBmQnRuLCBsaXN0XX0pO1xyXG4gICAgICAgIC8vIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7Y29udGVudENvbHVtbjogdHJ1ZSwgZmFkZTogdHJ1ZSwgZGFyazogdHJ1ZSwgY2hpbGRyZW46IFtjb250ZW50Q29sdW1uLCBSZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7a2V5OiBcInRvb2xzXCJ9KV19KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0IGF0dHJpYnV0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFxyXG4gICAgICAgICAgICBcImRpdlwiLFxyXG4gICAgICAgICAgICB7c3R5bGU6IHtmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRXZWlnaHQ6IFwiNjAwXCIsIGNvbG9yOiBcIiM3Mjc2N2RcIiwgcGFkZGluZzogXCIycHggMTBweFwifX0sXHJcbiAgICAgICAgICAgIGBCQkQgdiR7Q29uZmlnLmJiZFZlcnNpb259IGJ5IGAsXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgICAgICBcImFcIixcclxuICAgICAgICAgICAgICAgIHtocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL1wiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LFxyXG4gICAgICAgICAgICAgICAgXCJaZXJlYm9zXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0IGNvcmVDb21wb25lbnQoKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtjb250ZW50Q29sdW1uOiB0cnVlLCBmYWRlOiB0cnVlLCBkYXJrOiB0cnVlLCBjaGlsZHJlbjogW1xyXG4gICAgLy8gICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFNlY3Rpb25lZFNldHRpbmdzUGFuZWwsIHtrZXk6IFwiY3NwYW5lbFwiLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgc2VjdGlvbnM6IHRoaXMuY29yZVNldHRpbmdzfSksXHJcbiAgICAvLyAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwidG9vbHNcIn0pXHJcbiAgICAvLyAgICAgXX0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGdldCBlbW90ZUNvbXBvbmVudCgpIHtcclxuICAgIC8vICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge1xyXG4gICAgLy8gICAgICAgICBjb250ZW50Q29sdW1uOiB0cnVlLCBmYWRlOiB0cnVlLCBkYXJrOiB0cnVlLCBjaGlsZHJlbjogW1xyXG4gICAgLy8gICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1BhbmVsLCB7a2V5OiBcImVzcGFuZWxcIiwgdGl0bGU6IFwiRW1vdGUgU2V0dGluZ3NcIiwgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UsIHNldHRpbmdzOiB0aGlzLmVtb3RlU2V0dGluZ3MsIGJ1dHRvbjoge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIHRpdGxlOiBcIkNsZWFyIEVtb3RlIENhY2hlXCIsXHJcbiAgICAvLyAgICAgICAgICAgICAgICAgb25DbGljazogKCkgPT4geyBFdmVudHMuZGlzcGF0Y2goXCJlbW90ZXMtY2xlYXJcIik7IC8qRW1vdGVNb2R1bGUuY2xlYXJFbW90ZURhdGEoKTsgRW1vdGVNb2R1bGUuaW5pdCgpOyovIH1cclxuICAgIC8vICAgICAgICAgICAgIH19KSxcclxuICAgIC8vICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwidG9vbHNcIn0pXHJcbiAgICAvLyAgICAgXX0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGdldCBjdXN0b21Dc3NDb21wb25lbnQoKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2Nyb2xsZXIsIHtjb250ZW50Q29sdW1uOiB0cnVlLCBmYWRlOiB0cnVlLCBkYXJrOiB0cnVlLCBjaGlsZHJlbjogW1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ3NzRWRpdG9yLCB7a2V5OiBcImNzc2VkaXRvclwifSksIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHMsIHtrZXk6IFwidG9vbHNcIn0pXX0pO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGNvbnRlbnRDb21wb25lbnQodHlwZSkge1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbXBvbmVudEVsZW1lbnQgPSB0eXBlID09IFwicGx1Z2luc1wiID8gdGhpcy5wbHVnaW5zQ29tcG9uZW50IDogdGhpcy50aGVtZXNDb21wb25lbnQ7XHJcbiAgICAvLyAgICAgY29uc3QgcHJlZml4ID0gdHlwZS5yZXBsYWNlKFwic1wiLCBcIlwiKTtcclxuICAgIC8vICAgICBjb25zdCBzZXR0aW5nc0xpc3QgPSB0aGlzO1xyXG4gICAgLy8gICAgIGNsYXNzIENvbnRlbnRMaXN0IGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIC8vICAgICAgICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgIC8vICAgICAgICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgIC8vICAgICAgICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAvLyAgICAgICAgIH1cclxuXHJcbiAgICAvLyAgICAgICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgLy8gICAgICAgICAgICAgRXZlbnRzLm9uKGAke3ByZWZpeH0tcmVsb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcclxuICAgIC8vICAgICAgICAgICAgIEV2ZW50cy5vbihgJHtwcmVmaXh9LWxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xyXG4gICAgLy8gICAgICAgICAgICAgRXZlbnRzLm9uKGAke3ByZWZpeH0tdW5sb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBFdmVudHMub2ZmKGAke3ByZWZpeH0tcmVsb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcclxuICAgIC8vICAgICAgICAgICAgIEV2ZW50cy5vZmYoYCR7cHJlZml4fS1sb2FkZWRgLCB0aGlzLm9uQ2hhbmdlKTtcclxuICAgIC8vICAgICAgICAgICAgIEV2ZW50cy5vZmYoYCR7cHJlZml4fS11bmxvYWRlZGAsIHRoaXMub25DaGFuZ2UpO1xyXG4gICAgLy8gICAgICAgICB9XHJcblxyXG4gICAgLy8gICAgICAgICBvbkNoYW5nZSgpIHtcclxuICAgIC8vICAgICAgICAgICAgIHNldHRpbmdzTGlzdC5zaWRlQmFyT25DbGljayh0eXBlKTtcclxuICAgIC8vICAgICAgICAgfVxyXG5cclxuICAgIC8vICAgICAgICAgcmVuZGVyKCkge3JldHVybiBjb21wb25lbnRFbGVtZW50O31cclxuICAgIC8vICAgICB9XHJcbiAgICAvLyAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudExpc3QpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIC8vIGdldCBwbHVnaW5zQ29tcG9uZW50KCkge1xyXG4gICAgLy8gICAgIGNvbnN0IHBsdWdpbnMgPSBPYmplY3Qua2V5cyhQbHVnaW5zKS5zb3J0KChhLCBiKSA9PiBhLnRvTG93ZXJDYXNlKCkubG9jYWxlQ29tcGFyZShiLnRvTG93ZXJDYXNlKCkpKS5yZWR1Y2UoKGFyciwga2V5KSA9PiB7XHJcbiAgICAvLyAgICAgICAgIGFyci5wdXNoKFJlYWN0LmNyZWF0ZUVsZW1lbnQoUGx1Z2luQ2FyZCwge2tleToga2V5LCBwbHVnaW46IFBsdWdpbnNba2V5XS5wbHVnaW59KSk7cmV0dXJuIGFycjtcclxuICAgIC8vICAgICB9LCBbXSk7XHJcbiAgICAvLyAgICAgY29uc3QgbGlzdCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwge2tleTogXCJwbHVnaW4tbGlzdFwiLCBjbGFzc05hbWU6IFwiYmRhLXNsaXN0XCIsIGNoaWxkcmVuOiBwbHVnaW5zfSk7XHJcbiAgICAvLyAgICAgY29uc3QgcmVmcmVzaEljb24gPSAhU2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgUmVhY3QuY3JlYXRlRWxlbWVudChSZWxvYWRJY29uLCB7Y2xhc3NOYW1lOiBcImJkLXJlbG9hZC1oZWFkZXJcIiwgc2l6ZTogXCIxOHB4XCIsIG9uQ2xpY2s6IGFzeW5jICgpID0+IHtcclxuICAgIC8vICAgICAgICAgUGx1Z2luTWFuYWdlci51cGRhdGVQbHVnaW5MaXN0KCk7XHJcbiAgICAvLyAgICAgICAgIHRoaXMuc2lkZUJhck9uQ2xpY2soXCJwbHVnaW5zXCIpO1xyXG4gICAgLy8gICAgIH19KTtcclxuICAgIC8vICAgICBjb25zdCBwZkJ0biA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge2tleTogXCJmb2xkZXItYnV0dG9uXCIsIGNsYXNzTmFtZTogXCJiZC1wZmJ0blwiLCBvbkNsaWNrOiAoKSA9PiB7IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShDb250ZW50TWFuYWdlci5wbHVnaW5zRm9sZGVyKTsgfX0sIFwiT3BlbiBQbHVnaW4gRm9sZGVyXCIpO1xyXG4gICAgLy8gICAgIGNvbnN0IGNvbnRlbnRDb2x1bW4gPSBSZWFjdC5jcmVhdGVFbGVtZW50KENvbnRlbnRDb2x1bW4sIHtrZXk6IFwicGNvbHVtblwiLCB0aXRsZTogXCJQbHVnaW5zXCIsIGNoaWxkcmVuOiBbcmVmcmVzaEljb24sIHBmQnRuLCBsaXN0XX0pO1xyXG4gICAgLy8gICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNjcm9sbGVyLCB7Y29udGVudENvbHVtbjogdHJ1ZSwgZmFkZTogdHJ1ZSwgZGFyazogdHJ1ZSwgY2hpbGRyZW46IFtjb250ZW50Q29sdW1uLCBSZWFjdC5jcmVhdGVFbGVtZW50KFRvb2xzLCB7a2V5OiBcInRvb2xzXCJ9KV19KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBnZXQgdGhlbWVzQ29tcG9uZW50KCkge1xyXG4gICAgLy8gICAgIGNvbnN0IHRoZW1lcyA9IE9iamVjdC5rZXlzKFRoZW1lcykuc29ydCgoYSwgYikgPT4gYS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi50b0xvd2VyQ2FzZSgpKSkucmVkdWNlKChhcnIsIGtleSkgPT4ge1xyXG4gICAgLy8gICAgICAgICBhcnIucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KFRoZW1lQ2FyZCwge2tleToga2V5LCB0aGVtZTogVGhlbWVzW2tleV19KSk7cmV0dXJuIGFycjtcclxuICAgIC8vICAgICB9LCBbXSk7XHJcbiAgICAvLyAgICAgY29uc3QgbGlzdCA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoTGlzdCwge2tleTogXCJ0aGVtZS1saXN0XCIsIGNsYXNzTmFtZTogXCJiZGEtc2xpc3RcIiwgY2hpbGRyZW46IHRoZW1lc30pO1xyXG4gICAgLy8gICAgIGNvbnN0IHJlZnJlc2hJY29uID0gIVNldHRpbmdzQ29va2llW1wiZm9yay1wcy01XCJdICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoUmVsb2FkSWNvbiwge2NsYXNzTmFtZTogXCJiZC1yZWxvYWQtaGVhZGVyXCIsIHNpemU6IFwiMThweFwiLCBvbkNsaWNrOiBhc3luYyAoKSA9PiB7XHJcbiAgICAvLyAgICAgICAgIFRoZW1lTWFuYWdlci51cGRhdGVUaGVtZUxpc3QoKTtcclxuICAgIC8vICAgICAgICAgdGhpcy5zaWRlQmFyT25DbGljayhcInRoZW1lc1wiKTtcclxuICAgIC8vICAgICB9fSk7XHJcbiAgICAvLyAgICAgY29uc3QgdGZCdG4gPSBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtrZXk6IFwiZm9sZGVyLWJ1dHRvblwiLCBjbGFzc05hbWU6IFwiYmQtcGZidG5cIiwgb25DbGljazogKCkgPT4geyByZXF1aXJlKFwiZWxlY3Ryb25cIikuc2hlbGwub3Blbkl0ZW0oQ29udGVudE1hbmFnZXIudGhlbWVzRm9sZGVyKTsgfX0sIFwiT3BlbiBUaGVtZSBGb2xkZXJcIik7XHJcbiAgICAvLyAgICAgY29uc3QgY29udGVudENvbHVtbiA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ29udGVudENvbHVtbiwge2tleTogXCJ0Y29sdW1uXCIsIHRpdGxlOiBcIlRoZW1lc1wiLCBjaGlsZHJlbjogW3JlZnJlc2hJY29uLCB0ZkJ0biwgbGlzdF19KTtcclxuICAgIC8vICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChTY3JvbGxlciwge2NvbnRlbnRDb2x1bW46IHRydWUsIGZhZGU6IHRydWUsIGRhcms6IHRydWUsIGNoaWxkcmVuOiBbY29udGVudENvbHVtbiwgUmVhY3QuY3JlYXRlRWxlbWVudChUb29scywge2tleTogXCJ0b29sc1wifSldfSk7XHJcbiAgICAvLyB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/settings/settings.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2_SettingsPanel; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _plugincard__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./plugincard */ \"./src/ui/settings/plugincard.js\");\n/* harmony import */ var _themecard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./themecard */ \"./src/ui/settings/themecard.js\");\n/* harmony import */ var _settings_group__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../settings/group */ \"./src/ui/settings/group.jsx\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\n\n\n\n\n\n\nclass V2_SettingsPanel {\n static buildSettingsPanel(title, config, state, onChange, button = null) {\n config.forEach(section => {\n section.settings.forEach(item => item.value = state[section.id][item.id]);\n });\n return this.getSettingsPanel(title, config, onChange, button);\n }\n\n static getSettingsPanel(title, groups, onChange, button = null) {\n return [modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n text: title,\n button: button\n }), groups.map(section => {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_settings_group__WEBPACK_IMPORTED_MODULE_4__[\"default\"], Object.assign({}, section, {\n onChange\n }));\n })];\n }\n\n static getPluginsPanel(plugins, folder) {\n const titleComponent = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n text: \"Plugins\",\n button: {\n title: \"Open Plugin Folder\",\n onClick: () => {\n __webpack_require__(/*! electron */ \"electron\").shell.openItem(folder);\n }\n }\n });\n const cards = plugins.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(plugin => modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_plugincard__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n key: plugin.id,\n content: plugin\n }));\n return [titleComponent, modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"ul\", {\n className: \"bda-slist\"\n }, ...cards)];\n }\n\n static getThemesPanel(themes, folder) {\n const titleComponent = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_title__WEBPACK_IMPORTED_MODULE_5__[\"default\"], {\n text: \"Themes\",\n button: {\n title: \"Open Theme Folder\",\n onClick: () => {\n __webpack_require__(/*! electron */ \"electron\").shell.openItem(folder);\n }\n }\n });\n const cards = themes.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(theme => modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_themecard__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n key: theme.id,\n content: theme\n }));\n return [titleComponent, modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"ul\", {\n className: \"bda-slist\"\n }, ...cards)];\n }\n\n static get attribution() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"div\", {\n style: {\n fontSize: \"12px\",\n fontWeight: \"600\",\n color: \"#72767d\",\n padding: \"2px 10px\"\n }\n }, `BBD v${data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"].bbdVersion} by `, modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"a\", {\n href: \"https://github.com/rauenzi/\",\n target: \"_blank\"\n }, \"Zerebos\"));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3NldHRpbmdzLmpzPzgwYWIiXSwibmFtZXMiOlsiVjJfU2V0dGluZ3NQYW5lbCIsImJ1aWxkU2V0dGluZ3NQYW5lbCIsInRpdGxlIiwiY29uZmlnIiwic3RhdGUiLCJvbkNoYW5nZSIsImJ1dHRvbiIsImZvckVhY2giLCJzZWN0aW9uIiwic2V0dGluZ3MiLCJpdGVtIiwidmFsdWUiLCJpZCIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRQbHVnaW5zUGFuZWwiLCJwbHVnaW5zIiwiZm9sZGVyIiwidGl0bGVDb21wb25lbnQiLCJvbkNsaWNrIiwicmVxdWlyZSIsInNoZWxsIiwib3Blbkl0ZW0iLCJjYXJkcyIsInNvcnQiLCJhIiwiYiIsIm5hbWUiLCJ0b0xvd2VyQ2FzZSIsImxvY2FsZUNvbXBhcmUiLCJwbHVnaW4iLCJQbHVnaW5DYXJkIiwia2V5IiwiY29udGVudCIsImNsYXNzTmFtZSIsImdldFRoZW1lc1BhbmVsIiwidGhlbWVzIiwidGhlbWUiLCJUaGVtZUNhcmQiLCJhdHRyaWJ1dGlvbiIsInN0eWxlIiwiZm9udFNpemUiLCJmb250V2VpZ2h0IiwiY29sb3IiLCJwYWRkaW5nIiwiQ29uZmlnIiwiYmJkVmVyc2lvbiIsImhyZWYiLCJ0YXJnZXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFFZSxNQUFNQSxnQkFBTixDQUF1QjtBQUVsQyxTQUFPQyxrQkFBUCxDQUEwQkMsS0FBMUIsRUFBaUNDLE1BQWpDLEVBQXlDQyxLQUF6QyxFQUFnREMsUUFBaEQsRUFBMERDLE1BQU0sR0FBRyxJQUFuRSxFQUF5RTtBQUNyRUgs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V0FBUCxFQUFuQyxDQUF0QixFQUFnRmpCLEdBQWhGLENBQW9GMEIsS0FBSyxJQUNuRzlCLDZDQUFLLENBQUNDLGFBQU4sQ0FBb0I4QixrREFBcEIsRUFBK0I7QUFBQ04sU0FBRyxFQUFFSyxLQUFLLENBQUNqQyxFQUFaO0FBQWdCNkIsYUFBTyxFQUFFSTtBQUF6QixLQUEvQixDQURVLENBQWQ7QUFHQSxXQUFPLENBQUNuQixjQUFELEVBQWlCWCw2Q0FBSyxDQUFDQyxhQUFOLENBQW9CLElBQXBCLEVBQTBCO0FBQUMwQixlQUFTLEVBQUU7QUFBWixLQUExQixFQUFvRCxHQUFHWCxLQUF2RCxDQUFqQixDQUFQO0FBQ0g7O0FBRUQsYUFBV2dCLFdBQVgsR0FBeUI7QUFDckIsV0FBT2hDLDZDQUFLLENBQUNDLGFBQU4sQ0FDSCxLQURHLEVBRUg7QUFBQ2dDLFdBQUssRUFBRTtBQUFDQyxnQkFBUSxFQUFFLE1BQVg7QUFBbUJDLGtCQUFVLEVBQUUsS0FBL0I7QUFBc0NDLGFBQUssRUFBRSxTQUE3QztBQUF3REMsZUFBTyxFQUFFO0FBQWpFO0FBQVIsS0FGRyxFQUdGLFFBQU9DLDJDQUFNLENBQUNDLFVBQVcsTUFIdkIsRUFJSHZDLDZDQUFLLENBQUNDLGFBQU4sQ0FDSSxHQURKLEVBRUk7QUFBQ3VDLFVBQUksRUFBRSw2QkFBUDtBQUFzQ0MsWUFBTSxFQUFFO0FBQTlDLEtBRkosRUFHSSxTQUhKLENBSkcsQ0FBUDtBQVVIOztBQTFDaUMiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3Mvc2V0dGluZ3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IHtSZWFjdH0gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBQbHVnaW5DYXJkIGZyb20gXCIuL3BsdWdpbmNhcmRcIjtcclxuaW1wb3J0IFRoZW1lQ2FyZCBmcm9tIFwiLi90aGVtZWNhcmRcIjtcclxuXHJcbmltcG9ydCBTZXR0aW5nc0dyb3VwIGZyb20gXCIuLi9zZXR0aW5ncy9ncm91cFwiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi90aXRsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XHJcblxyXG4gICAgc3RhdGljIGJ1aWxkU2V0dGluZ3NQYW5lbCh0aXRsZSwgY29uZmlnLCBzdGF0ZSwgb25DaGFuZ2UsIGJ1dHRvbiA9IG51bGwpIHtcclxuICAgICAgICBjb25maWcuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbi5zZXR0aW5ncy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS52YWx1ZSA9IHN0YXRlW3NlY3Rpb24uaWRdW2l0ZW0uaWRdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIG9uQ2hhbmdlLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRTZXR0aW5nc1BhbmVsKHRpdGxlLCBncm91cHMsIG9uQ2hhbmdlLCBidXR0b24gPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFtSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZSwgYnV0dG9uOiBidXR0b259KSwgZ3JvdXBzLm1hcChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NHcm91cCwgT2JqZWN0LmFzc2lnbih7fSwgc2VjdGlvbiwge29uQ2hhbmdlfSkpO1xyXG4gICAgICAgIH0pXTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0UGx1Z2luc1BhbmVsKHBsdWdpbnMsIGZvbGRlcikge1xyXG4gICAgICAgIGNvbnN0IHRpdGxlQ29tcG9uZW50ID0gUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogXCJQbHVnaW5zXCIsIGJ1dHRvbjoge3RpdGxlOiBcIk9wZW4gUGx1Z2luIEZvbGRlclwiLCBvbkNsaWNrOiAoKSA9PiB7IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShmb2xkZXIpOyB9fX0pO1xyXG4gICAgICAgIGNvbnN0IGNhcmRzID0gcGx1Z2lucy5zb3J0KChhLCBiKSA9PiBhLm5hbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGIubmFtZS50b0xvd2VyQ2FzZSgpKSkubWFwKHBsdWdpbiA9PiBcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChQbHVnaW5DYXJkLCB7a2V5OiBwbHVnaW4uaWQsIGNvbnRlbnQ6IHBsdWdpbn0pXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gW3RpdGxlQ29tcG9uZW50LCBSZWFjdC5jcmVhdGVFbGVtZW50KFwidWxcIiwge2NsYXNzTmFtZTogXCJiZGEtc2xpc3RcIn0sIC4uLmNhcmRzKV07XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldFRoZW1lc1BhbmVsKHRoZW1lcywgZm9sZGVyKSB7XHJcbiAgICAgICAgY29uc3QgdGl0bGVDb21wb25lbnQgPSBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiBcIlRoZW1lc1wiLCBidXR0b246IHt0aXRsZTogXCJPcGVuIFRoZW1lIEZvbGRlclwiLCBvbkNsaWNrOiAoKSA9PiB7IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5zaGVsbC5vcGVuSXRlbShmb2xkZXIpOyB9fX0pO1xyXG4gICAgICAgIGNvbnN0IGNhcmRzID0gdGhlbWVzLnNvcnQoKGEsIGIpID0+IGEubmFtZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYi5uYW1lLnRvTG93ZXJDYXNlKCkpKS5tYXAodGhlbWUgPT4gXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVGhlbWVDYXJkLCB7a2V5OiB0aGVtZS5pZCwgY29udGVudDogdGhlbWV9KVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIFt0aXRsZUNvbXBvbmVudCwgUmVhY3QuY3JlYXRlRWxlbWVudChcInVsXCIsIHtjbGFzc05hbWU6IFwiYmRhLXNsaXN0XCJ9LCAuLi5jYXJkcyldO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXQgYXR0cmlidXRpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXHJcbiAgICAgICAgICAgIFwiZGl2XCIsXHJcbiAgICAgICAgICAgIHtzdHlsZToge2ZvbnRTaXplOiBcIjEycHhcIiwgZm9udFdlaWdodDogXCI2MDBcIiwgY29sb3I6IFwiIzcyNzY3ZFwiLCBwYWRkaW5nOiBcIjJweCAxMHB4XCJ9fSxcclxuICAgICAgICAgICAgYEJCRCB2JHtDb25maWcuYmJkVmVyc2lvbn0gYnkgYCxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcclxuICAgICAgICAgICAgICAgIFwiYVwiLFxyXG4gICAgICAgICAgICAgICAge2hyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICBcIlplcmVib3NcIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/settings.js\n"); /***/ }), @@ -803,7 +755,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2C_ThemeCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _icons_reload__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../icons/reload */ \"./src/ui/icons/reload.js\");\n\n // import Toasts from \"../toasts\";\n\nclass V2C_ThemeCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n checked: modules__WEBPACK_IMPORTED_MODULE_0__[\"ThemeManager\"].isEnabled(this.props.content.id),\n reloads: 0\n };\n this.onChange = this.onChange.bind(this); // this.reload = this.reload.bind(this);\n } // onReload(themeName) {\n // if (themeName !== this.props.theme.name) return;\n // this.setState({reloads: this.state.reloads + 1});\n // }\n // reload() {\n // const theme = this.props.theme.name;\n // const error = ThemeManager.reloadTheme(theme);\n // if (error) Toasts.show(`Could not reload ${Themes[theme].name}. Check console for details.`, {type: \"error\"});\n // else Toasts.show(`${Themes[theme].name} v${Themes[theme].version} has been reloaded.`, {type: \"success\"});\n // // this.setState(this.state);\n // this.props.theme = Themes[theme];\n // this.onReload(this.props.theme.name);\n // }\n\n\n render() {\n const {\n content\n } = this.props;\n const name = content.name;\n const description = content.description;\n const version = content.version;\n const author = content.author;\n const website = content.website;\n const source = content.source;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n \"data-name\": name,\n \"data-version\": version,\n \"className\": \"settings-closed ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-header-title\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-name\"\n }, name), \" v\", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-version\"\n }, version), \" by \", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-author\"\n }, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-controls\"\n }, //!SettingsCookie[\"fork-ps-5\"] && React.createElement(ReloadIcon, {className: \"bd-reload-card\", onClick: this.reload}),\n modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"ui-switch-wrapper ui-flex-child\",\n style: {\n flex: \"0 0 auto\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n checked: this.state.checked,\n onChange: this.onChange,\n className: \"ui-switch-checkbox\",\n type: \"checkbox\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: this.state.checked ? \"ui-switch checked\" : \"ui-switch\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description scroller\"\n }, description)), (website || source) && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-links\"\n }, website && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link\",\n href: website,\n target: \"_blank\"\n }, \"Website\"), website && source && \" | \", source && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link\",\n href: source,\n target: \"_blank\"\n }, \"Source\"))));\n }\n\n onChange() {\n this.setState({\n checked: !this.state.checked\n });\n modules__WEBPACK_IMPORTED_MODULE_0__[\"ThemeManager\"].toggleTheme(this.props.content.id);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3RoZW1lY2FyZC5qcz9jMDVjIl0sIm5hbWVzIjpbIlYyQ19UaGVtZUNhcmQiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsImNoZWNrZWQiLCJUaGVtZU1hbmFnZXIiLCJpc0VuYWJsZWQiLCJjb250ZW50IiwiaWQiLCJyZWxvYWRzIiwib25DaGFuZ2UiLCJiaW5kIiwicmVuZGVyIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidmVyc2lvbiIsImF1dGhvciIsIndlYnNpdGUiLCJzb3VyY2UiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJmbGV4IiwidHlwZSIsImhyZWYiLCJ0YXJnZXQiLCJzZXRTdGF0ZSIsInRvZ2dsZVRoZW1lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0NBRUE7O0FBRWUsTUFBTUEsYUFBTixTQUE0QkMsNkNBQUssQ0FBQ0MsU0FBbEMsQ0FBNEM7QUFFdkRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxhQUFPLEVBQUVDLG9EQUFZLENBQUNDLFNBQWIsQ0FBdUIsS0FBS0osS0FBTCxDQUFXSyxPQUFYLENBQW1CQyxFQUExQyxDQURBO0FBRVRDLGFBQU8sRUFBRTtBQUZBLEtBQWI7QUFJQSxTQUFLQyxRQUFMLEdBQWdCLEtBQUtBLFFBQUwsQ0FBY0MsSUFBZCxDQUFtQixJQUFuQixDQUFoQixDQU5lLENBT2Y7QUFDSCxHQVZzRCxDQVl2RDtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7O0FBRUFDLFFBQU0sR0FBRztBQUNMLFVBQU07QUFBQ0w7QUFBRCxRQUFZLEtBQUtMLEtBQXZCO0FBQ0EsVUFBTVcsSUFBSSxHQUFHTixPQUFPLENBQUNNLElBQXJCO0FB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RUFBRSxVQUFaO0FBQXdCSSxVQUFJLEVBQUVOLE1BQTlCO0FBQXNDTyxZQUFNLEVBQUU7QUFBOUMsS0FBekIsRUFBa0YsUUFBbEYsQ0FIZCxDQURtQixDQXBCcEIsQ0FBUDtBQTRCSDs7QUFFRGYsVUFBUSxHQUFHO0FBQ1AsU0FBS2dCLFFBQUwsQ0FBYztBQUFDdEIsYUFBTyxFQUFFLENBQUMsS0FBS0QsS0FBTCxDQUFXQztBQUF0QixLQUFkO0FBQ0FDLHdEQUFZLENBQUNzQixXQUFiLENBQXlCLEtBQUt6QixLQUFMLENBQVdLLE9BQVgsQ0FBbUJDLEVBQTVDO0FBQ0g7O0FBckVzRCIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy90aGVtZWNhcmQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1JlYWN0LCBUaGVtZU1hbmFnZXJ9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBSZWxvYWRJY29uIGZyb20gXCIuLi9pY29ucy9yZWxvYWRcIjtcclxuLy8gaW1wb3J0IFRvYXN0cyBmcm9tIFwiLi4vdG9hc3RzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWMkNfVGhlbWVDYXJkIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuXHJcbiAgICBjb25zdHJ1Y3Rvcihwcm9wcykge1xyXG4gICAgICAgIHN1cGVyKHByb3BzKTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge1xyXG4gICAgICAgICAgICBjaGVja2VkOiBUaGVtZU1hbmFnZXIuaXNFbmFibGVkKHRoaXMucHJvcHMuY29udGVudC5pZCksXHJcbiAgICAgICAgICAgIHJlbG9hZHM6IDBcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgLy8gdGhpcy5yZWxvYWQgPSB0aGlzLnJlbG9hZC5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIG9uUmVsb2FkKHRoZW1lTmFtZSkge1xyXG4gICAgLy8gICAgIGlmICh0aGVtZU5hbWUgIT09IHRoaXMucHJvcHMudGhlbWUubmFtZSkgcmV0dXJuO1xyXG4gICAgLy8gICAgIHRoaXMuc2V0U3RhdGUoe3JlbG9hZHM6IHRoaXMuc3RhdGUucmVsb2FkcyArIDF9KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyByZWxvYWQoKSB7XHJcbiAgICAvLyAgICAgY29uc3QgdGhlbWUgPSB0aGlzLnByb3BzLnRoZW1lLm5hbWU7XHJcbiAgICAvLyAgICAgY29uc3QgZXJyb3IgPSBUaGVtZU1hbmFnZXIucmVsb2FkVGhlbWUodGhlbWUpO1xyXG4gICAgLy8gICAgIGlmIChlcnJvcikgVG9hc3RzLnNob3coYENvdWxkIG5vdCByZWxvYWQgJHtUaGVtZXNbdGhlbWVdLm5hbWV9LiBDaGVjayBjb25zb2xlIGZvciBkZXRhaWxzLmAsIHt0eXBlOiBcImVycm9yXCJ9KTtcclxuICAgIC8vICAgICBlbHNlIFRvYXN0cy5zaG93KGAke1RoZW1lc1t0aGVtZV0ubmFtZX0gdiR7VGhlbWVzW3RoZW1lXS52ZXJzaW9ufSBoYXMgYmVlbiByZWxvYWRlZC5gLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgIC8vICAgICAvLyB0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUpO1xyXG4gICAgLy8gICAgIHRoaXMucHJvcHMudGhlbWUgPSBUaGVtZXNbdGhlbWVdO1xyXG4gICAgLy8gICAgIHRoaXMub25SZWxvYWQodGhpcy5wcm9wcy50aGVtZS5uYW1lKTtcclxuICAgIC8vIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgY29uc3Qge2NvbnRlbnR9ID0gdGhpcy5wcm9wcztcclxuICAgICAgICBjb25zdCBuYW1lID0gY29udGVudC5uYW1lO1xyXG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gY29udGVudC5kZXNjcmlwdGlvbjtcclxuICAgICAgICBjb25zdCB2ZXJzaW9uID0gY29udGVudC52ZXJzaW9uO1xyXG4gICAgICAgIGNvbnN0IGF1dGhvciA9IGNvbnRlbnQuYXV0aG9yO1xyXG4gICAgICAgIGNvbnN0IHdlYnNpdGUgPSBjb250ZW50LndlYnNpdGU7XHJcbiAgICAgICAgY29uc3Qgc291cmNlID0gY29udGVudC5zb3VyY2U7XHJcblxyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwibGlcIiwge1wiZGF0YS1uYW1lXCI6IG5hbWUsIFwiZGF0YS12ZXJzaW9uXCI6IHZlcnNpb24sIFwiY2xhc3NOYW1lXCI6IFwic2V0dGluZ3MtY2xvc2VkIHVpLXN3aXRjaC1pdGVtXCJ9LFxyXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWhlYWRlclwifSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1oZWFkZXItdGl0bGVcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLW5hbWVcIn0sIG5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiB2XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLXZlcnNpb25cIn0sIHZlcnNpb24pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcIiBieSBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtYXV0aG9yXCJ9LCBhdXRob3IpXHJcbiAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWNvbnRyb2xzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyFTZXR0aW5nc0Nvb2tpZVtcImZvcmstcHMtNVwiXSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFJlbG9hZEljb24sIHtjbGFzc05hbWU6IFwiYmQtcmVsb2FkLWNhcmRcIiwgb25DbGljazogdGhpcy5yZWxvYWR9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImxhYmVsXCIsIHtjbGFzc05hbWU6IFwidWktc3dpdGNoLXdyYXBwZXIgdWktZmxleC1jaGlsZFwiLCBzdHlsZToge2ZsZXg6IFwiMCAwIGF1dG9cIn19LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHtjaGVja2VkOiB0aGlzLnN0YXRlLmNoZWNrZWQsIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLCBjbGFzc05hbWU6IFwidWktc3dpdGNoLWNoZWNrYm94XCIsIHR5cGU6IFwiY2hlY2tib3hcIn0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiB0aGlzLnN0YXRlLmNoZWNrZWQgPyBcInVpLXN3aXRjaCBjaGVja2VkXCIgOiBcInVpLXN3aXRjaFwifSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1kZXNjcmlwdGlvbi13cmFwIHNjcm9sbGVyLXdyYXAgZmFkZVwifSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtZGVzY3JpcHRpb24gc2Nyb2xsZXJcIn0sIGRlc2NyaXB0aW9uKVxyXG4gICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAod2Vic2l0ZSB8fCBzb3VyY2UpICYmIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtZm9vdGVyXCJ9LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtbGlua3NcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgd2Vic2l0ZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7Y2xhc3NOYW1lOiBcImJkYS1saW5rXCIsIGhyZWY6IHdlYnNpdGUsIHRhcmdldDogXCJfYmxhbmtcIn0sIFwiV2Vic2l0ZVwiKSxcclxuICAgICAgICAgICAgICAgICAgICB3ZWJzaXRlICYmIHNvdXJjZSAmJiBcIiB8IFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiYVwiLCB7Y2xhc3NOYW1lOiBcImJkYS1saW5rXCIsIGhyZWY6IHNvdXJjZSwgdGFyZ2V0OiBcIl9ibGFua1wifSwgXCJTb3VyY2VcIilcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UoKSB7XHJcbiAgICAgICAgdGhpcy5zZXRTdGF0ZSh7Y2hlY2tlZDogIXRoaXMuc3RhdGUuY2hlY2tlZH0pO1xyXG4gICAgICAgIFRoZW1lTWFuYWdlci50b2dnbGVUaGVtZSh0aGlzLnByb3BzLmNvbnRlbnQuaWQpO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings/themecard.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return V2C_ThemeCard; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n // import ReloadIcon from \"../icons/reload\";\n// import Toasts from \"../toasts\";\n\nclass V2C_ThemeCard extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n this.state = {\n checked: modules__WEBPACK_IMPORTED_MODULE_0__[\"ThemeManager\"].isEnabled(this.props.content.id),\n reloads: 0\n };\n this.onChange = this.onChange.bind(this); // this.reload = this.reload.bind(this);\n } // onReload(themeName) {\n // if (themeName !== this.props.theme.name) return;\n // this.setState({reloads: this.state.reloads + 1});\n // }\n // reload() {\n // const theme = this.props.theme.name;\n // const error = ThemeManager.reloadTheme(theme);\n // if (error) Toasts.show(`Could not reload ${Themes[theme].name}. Check console for details.`, {type: \"error\"});\n // else Toasts.show(`${Themes[theme].name} v${Themes[theme].version} has been reloaded.`, {type: \"success\"});\n // // this.setState(this.state);\n // this.props.theme = Themes[theme];\n // this.onReload(this.props.theme.name);\n // }\n\n\n render() {\n const {\n content\n } = this.props;\n const name = content.name;\n const description = content.description;\n const version = content.version;\n const author = content.author;\n const website = content.website;\n const source = content.source;\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"li\", {\n \"data-name\": name,\n \"data-version\": version,\n \"className\": \"settings-closed ui-switch-item\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-header\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-header-title\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-name\"\n }, name), \" v\", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-version\"\n }, version), \" by \", modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-author\"\n }, author)), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-controls\"\n }, //!SettingsCookie[\"fork-ps-5\"] && React.createElement(ReloadIcon, {className: \"bd-reload-card\", onClick: this.reload}),\n modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"label\", {\n className: \"ui-switch-wrapper ui-flex-child\",\n style: {\n flex: \"0 0 auto\"\n }\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n checked: this.state.checked,\n onChange: this.onChange,\n className: \"ui-switch-checkbox\",\n type: \"checkbox\"\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: this.state.checked ? \"ui-switch checked\" : \"ui-switch\"\n })))), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description-wrap scroller-wrap fade\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-description scroller\"\n }, description)), (website || source) && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"bda-footer\"\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"span\", {\n className: \"bda-links\"\n }, website && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link\",\n href: website,\n target: \"_blank\"\n }, \"Website\"), website && source && \" | \", source && modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"a\", {\n className: \"bda-link\",\n href: source,\n target: \"_blank\"\n }, \"Source\"))));\n }\n\n onChange() {\n this.setState({\n checked: !this.state.checked\n });\n modules__WEBPACK_IMPORTED_MODULE_0__[\"ThemeManager\"].toggleTheme(this.props.content.id);\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3RoZW1lY2FyZC5qcz9jMDVjIl0sIm5hbWVzIjpbIlYyQ19UaGVtZUNhcmQiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNvbnN0cnVjdG9yIiwicHJvcHMiLCJzdGF0ZSIsImNoZWNrZWQiLCJUaGVtZU1hbmFnZXIiLCJpc0VuYWJsZWQiLCJjb250ZW50IiwiaWQiLCJyZWxvYWRzIiwib25DaGFuZ2UiLCJiaW5kIiwicmVuZGVyIiwibmFtZSIsImRlc2NyaXB0aW9uIiwidmVyc2lvbiIsImF1dGhvciIsIndlYnNpdGUiLCJzb3VyY2UiLCJjcmVhdGVFbGVtZW50IiwiY2xhc3NOYW1lIiwic3R5bGUiLCJmbGV4IiwidHlwZSIsImhyZWYiLCJ0YXJnZXQiLCJzZXRTdGF0ZSIsInRvZ2dsZVRoZW1lIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7Q0FDQTtBQUNBOztBQUVlLE1BQU1BLGFBQU4sU0FBNEJDLDZDQUFLLENBQUNDLFNBQWxDLENBQTRDO0FBRXZEQyxhQUFXLENBQUNDLEtBQUQsRUFBUTtBQUNmLFVBQU1BLEtBQU47QUFDQSxTQUFLQyxLQUFMLEdBQWE7QUFDVEMsYUFBTyxFQUFFQyxvREFBWSxDQUFDQyxTQUFiLENBQXVCLEtBQUtKLEtBQUwsQ0FBV0ssT0FBWCxDQUFtQkMsRUFBMUMsQ0FEQTtBQUVUQyxhQUFPLEVBQUU7QUFGQSxLQUFiO0FBSUEsU0FBS0MsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNDLElBQWQsQ0FBbUIsSUFBbkIsQ0FBaEIsQ0FOZSxDQU9mO0FBQ0gsR0FWc0QsQ0FZdkQ7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUVBQyxRQUFNLEdBQUc7QUFDTCxVQUFNO0FBQUNMO0FBQUQsUUFBWSxLQUFLTCxLQUF2QjtBQUNBLFVBQU1XLElBQUksR0FBR04sT0FBTyxDQUFDTSxJQUFyQjtBQUNBLFVB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VUFBWjtBQUF3QkksVUFBSSxFQUFFTixNQUE5QjtBQUFzQ08sWUFBTSxFQUFFO0FBQTlDLEtBQXpCLEVBQWtGLFFBQWxGLENBSGQsQ0FEbUIsQ0FwQnBCLENBQVA7QUE0Qkg7O0FBRURmLFVBQVEsR0FBRztBQUNQLFNBQUtnQixRQUFMLENBQWM7QUFBQ3RCLGFBQU8sRUFBRSxDQUFDLEtBQUtELEtBQUwsQ0FBV0M7QUFBdEIsS0FBZDtBQUNBQyx3REFBWSxDQUFDc0IsV0FBYixDQUF5QixLQUFLekIsS0FBTCxDQUFXSyxPQUFYLENBQW1CQyxFQUE1QztBQUNIOztBQXJFc0QiLCJmaWxlIjoiLi9zcmMvdWkvc2V0dGluZ3MvdGhlbWVjYXJkLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtSZWFjdCwgVGhlbWVNYW5hZ2VyfSBmcm9tIFwibW9kdWxlc1wiO1xyXG4vLyBpbXBvcnQgUmVsb2FkSWNvbiBmcm9tIFwiLi4vaWNvbnMvcmVsb2FkXCI7XHJcbi8vIGltcG9ydCBUb2FzdHMgZnJvbSBcIi4uL3RvYXN0c1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJDX1RoZW1lQ2FyZCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgY2hlY2tlZDogVGhlbWVNYW5hZ2VyLmlzRW5hYmxlZCh0aGlzLnByb3BzLmNvbnRlbnQuaWQpLFxyXG4gICAgICAgICAgICByZWxvYWRzOiAwXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpO1xyXG4gICAgICAgIC8vIHRoaXMucmVsb2FkID0gdGhpcy5yZWxvYWQuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBvblJlbG9hZCh0aGVtZU5hbWUpIHtcclxuICAgIC8vICAgICBpZiAodGhlbWVOYW1lICE9PSB0aGlzLnByb3BzLnRoZW1lLm5hbWUpIHJldHVybjtcclxuICAgIC8vICAgICB0aGlzLnNldFN0YXRlKHtyZWxvYWRzOiB0aGlzLnN0YXRlLnJlbG9hZHMgKyAxfSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgLy8gcmVsb2FkKCkge1xyXG4gICAgLy8gICAgIGNvbnN0IHRoZW1lID0gdGhpcy5wcm9wcy50aGVtZS5uYW1lO1xyXG4gICAgLy8gICAgIGNvbnN0IGVycm9yID0gVGhlbWVNYW5hZ2VyLnJlbG9hZFRoZW1lKHRoZW1lKTtcclxuICAgIC8vICAgICBpZiAoZXJyb3IpIFRvYXN0cy5zaG93KGBDb3VsZCBub3QgcmVsb2FkICR7VGhlbWVzW3RoZW1lXS5uYW1lfS4gQ2hlY2sgY29uc29sZSBmb3IgZGV0YWlscy5gLCB7dHlwZTogXCJlcnJvclwifSk7XHJcbiAgICAvLyAgICAgZWxzZSBUb2FzdHMuc2hvdyhgJHtUaGVtZXNbdGhlbWVdLm5hbWV9IHYke1RoZW1lc1t0aGVtZV0udmVyc2lvbn0gaGFzIGJlZW4gcmVsb2FkZWQuYCwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICAvLyAgICAgLy8gdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlKTtcclxuICAgIC8vICAgICB0aGlzLnByb3BzLnRoZW1lID0gVGhlbWVzW3RoZW1lXTtcclxuICAgIC8vICAgICB0aGlzLm9uUmVsb2FkKHRoaXMucHJvcHMudGhlbWUubmFtZSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgcmVuZGVyKCkge1xyXG4gICAgICAgIGNvbnN0IHtjb250ZW50fSA9IHRoaXMucHJvcHM7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IGNvbnRlbnQubmFtZTtcclxuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRlbnQuZGVzY3JpcHRpb247XHJcbiAgICAgICAgY29uc3QgdmVyc2lvbiA9IGNvbnRlbnQudmVyc2lvbjtcclxuICAgICAgICBjb25zdCBhdXRob3IgPSBjb250ZW50LmF1dGhvcjtcclxuICAgICAgICBjb25zdCB3ZWJzaXRlID0gY29udGVudC53ZWJzaXRlO1xyXG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbnRlbnQuc291cmNlO1xyXG5cclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImxpXCIsIHtcImRhdGEtbmFtZVwiOiBuYW1lLCBcImRhdGEtdmVyc2lvblwiOiB2ZXJzaW9uLCBcImNsYXNzTmFtZVwiOiBcInNldHRpbmdzLWNsb3NlZCB1aS1zd2l0Y2gtaXRlbVwifSxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1oZWFkZXJcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge2NsYXNzTmFtZTogXCJiZGEtaGVhZGVyLXRpdGxlXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS1uYW1lXCJ9LCBuYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgdlwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7Y2xhc3NOYW1lOiBcImJkYS12ZXJzaW9uXCJ9LCB2ZXJzaW9uKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCIgYnkgXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLWF1dGhvclwifSwgYXV0aG9yKVxyXG4gICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkYS1jb250cm9sc1wifSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8hU2V0dGluZ3NDb29raWVbXCJmb3JrLXBzLTVcIl0gJiYgUmVhY3QuY3JlYXRlRWxlbWVudChSZWxvYWRJY29uLCB7Y2xhc3NOYW1lOiBcImJkLXJlbG9hZC1jYXJkXCIsIG9uQ2xpY2s6IHRoaXMucmVsb2FkfSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJsYWJlbFwiLCB7Y2xhc3NOYW1lOiBcInVpLXN3aXRjaC13cmFwcGVyIHVpLWZsZXgtY2hpbGRcIiwgc3R5bGU6IHtmbGV4OiBcIjAgMCBhdXRvXCJ9fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7Y2hlY2tlZDogdGhpcy5zdGF0ZS5jaGVja2VkLCBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZSwgY2xhc3NOYW1lOiBcInVpLXN3aXRjaC1jaGVja2JveFwiLCB0eXBlOiBcImNoZWNrYm94XCJ9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogdGhpcy5zdGF0ZS5jaGVja2VkID8gXCJ1aS1zd2l0Y2ggY2hlY2tlZFwiIDogXCJ1aS1zd2l0Y2hcIn0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwge2NsYXNzTmFtZTogXCJiZGEtZGVzY3JpcHRpb24td3JhcCBzY3JvbGxlci13cmFwIGZhZGVcIn0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWRlc2NyaXB0aW9uIHNjcm9sbGVyXCJ9LCBkZXNjcmlwdGlvbilcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgKHdlYnNpdGUgfHwgc291cmNlKSAmJiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmRhLWZvb3RlclwifSxcclxuICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtjbGFzc05hbWU6IFwiYmRhLWxpbmtzXCJ9LFxyXG4gICAgICAgICAgICAgICAgICAgIHdlYnNpdGUgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogXCJiZGEtbGlua1wiLCBocmVmOiB3ZWJzaXRlLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBcIldlYnNpdGVcIiksXHJcbiAgICAgICAgICAgICAgICAgICAgd2Vic2l0ZSAmJiBzb3VyY2UgJiYgXCIgfCBcIixcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2UgJiYgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2NsYXNzTmFtZTogXCJiZGEtbGlua1wiLCBocmVmOiBzb3VyY2UsIHRhcmdldDogXCJfYmxhbmtcIn0sIFwiU291cmNlXCIpXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKCkge1xyXG4gICAgICAgIHRoaXMuc2V0U3RhdGUoe2NoZWNrZWQ6ICF0aGlzLnN0YXRlLmNoZWNrZWR9KTtcclxuICAgICAgICBUaGVtZU1hbmFnZXIudG9nZ2xlVGhlbWUodGhpcy5wcm9wcy5jb250ZW50LmlkKTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/settings/themecard.js\n"); /***/ }), diff --git a/src/builtins/classnormalizer.js b/src/builtins/classnormalizer.js index a1240358..1c4f5f37 100644 --- a/src/builtins/classnormalizer.js +++ b/src/builtins/classnormalizer.js @@ -14,6 +14,7 @@ export default new class ClassNormalizer extends Builtin { this.patchClassModules(WebpackModules.getModules(this.moduleFilter.bind(this))); this.normalizeElement(document.querySelector("#app-mount")); this.hasPatched = true; + this.patchDOMMethods(); } disabled() { @@ -110,5 +111,13 @@ export default new class ClassNormalizer extends Builtin { } element.classList.remove(...toRemove); } + + patchDOMMethods() { + const contains = DOMTokenList.prototype.contains; + DOMTokenList.prototype.contains = function(token) { + const tokens = token.split(" "); + return tokens.every(t => contains.call(this, t)); + }; + } }; \ No newline at end of file diff --git a/src/builtins/emoteautocaps.js b/src/builtins/emoteautocaps.js index ad3963d0..8683c509 100644 --- a/src/builtins/emoteautocaps.js +++ b/src/builtins/emoteautocaps.js @@ -1,8 +1,9 @@ import Builtin from "../structs/builtin"; -import {Emotes} from "data"; import {Utilities} from "modules"; +import EmoteModule from "./emotes"; + export default new class EmoteAutocaps extends Builtin { get name() {return "EmoteAutocapitalize";} get collection() {return "emotes";} @@ -31,7 +32,7 @@ export default new class EmoteAutocaps extends Builtin { } capitalize(value) { - const res = Emotes.TwitchGlobal; + const res = EmoteModule.getCategory("TwitchGlobal"); for (const p in res) { if (res.hasOwnProperty(p) && value == (p + "").toLowerCase()) { return p; diff --git a/src/builtins/emotemenu.js b/src/builtins/emotemenu.js index 9a21905b..4dae2e2d 100644 --- a/src/builtins/emotemenu.js +++ b/src/builtins/emotemenu.js @@ -1,7 +1,9 @@ import Builtin from "../structs/builtin"; -import {Emotes, State} from "data"; +import {State} from "data"; import {DataStore, Utilities, Events} from "modules"; +import EmoteModule from "./emotes"; + const headerHTML = `
@@ -193,9 +195,9 @@ export default new class EmoteMenu extends Builtin { updateTwitchEmotes() { while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove(); - for (const emote in Emotes.TwitchGlobal) { - if (!Emotes.TwitchGlobal.hasOwnProperty(emote)) continue; - const url = Emotes.TwitchGlobal[emote]; + for (const emote in EmoteModule.getCategory("TwitchGlobal")) { + if (!EmoteModule.getCategory("TwitchGlobal").hasOwnProperty(emote)) continue; + const url = EmoteModule.getCategory("TwitchGlobal")[emote]; const emoteElement = makeEmote(emote, url, {onClick: this.insertEmote.bind(this, emote)}); this.teContainerInner.append(emoteElement); } diff --git a/src/builtins/emotes.js b/src/builtins/emotes.js index e909701d..4511dae5 100644 --- a/src/builtins/emotes.js +++ b/src/builtins/emotes.js @@ -1,10 +1,18 @@ import Builtin from "../structs/builtin"; -import {Config, Emotes, EmoteBlacklist, EmoteInfo, EmoteModifiers, EmoteOverrides, State} from "data"; +import {Config, EmoteInfo, State, EmoteConfig} from "data"; import {Utilities, WebpackModules, DataStore, DiscordModules, Events, Settings} from "modules"; import BDEmote from "../ui/emote"; import {Toasts} from "ui"; +const Emotes = { + TwitchGlobal: {}, + TwitchSubscriber: {}, + BTTV: {}, + FrankerFaceZ: {}, + BTTV2: {} +}; + const bdEmoteSettingIDs = { TwitchGlobal: "twitch", TwitchSubscriber: "twitch", @@ -13,6 +21,10 @@ const bdEmoteSettingIDs = { BTTV2: "bttv" }; +const blacklist = []; +const overrides = ["twitch", "bttv", "ffz"]; +const modifiers = ["flip", "spin", "pulse", "spin2", "spin3", "1spin", "2spin", "3spin", "tr", "bl", "br", "shake", "shake2", "shake3", "flap"]; + export default new class EmoteModule extends Builtin { get name() {return "Emotes";} get collection() {return "settings";} @@ -20,8 +32,6 @@ export default new class EmoteModule extends Builtin { get id() {return "emotes";} get categories() { return Object.keys(bdEmoteSettingIDs).filter(k => this.isCategoryEnabled(bdEmoteSettingIDs[k])); } - get MessageContentComponent() {return WebpackModules.getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty("disableButtons"));} - isCategoryEnabled(id) { return super.get("emotes", "categories", id); } @@ -30,7 +40,28 @@ export default new class EmoteModule extends Builtin { return super.get("emotes", "general", id); } + get MessageContentComponent() {return WebpackModules.getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty("disableButtons"));} + + get Emotes() {return Emotes;} + get TwitchGlobal() {return Emotes.TwitchGlobal;} + get TwitchSubscriber() {return Emotes.TwitchSubscriber;} + get BTTV() {return Emotes.BTTV;} + get FrankerFaceZ() {return Emotes.FrankerFaceZ;} + get BTTV2() {return Emotes.BTTV2;} + get blacklist() {return blacklist;} + + getCategory(category) { + return Emotes[category]; + } + + initialize() { + super.initialize(); + // EmoteConfig; + // emoteCollection.button = {title: "Clear Emote Cache", onClick: () => { this.clearEmoteData(); this.loadEmoteData(EmoteInfo); }}; + } + async enabled() { + Settings.registerCollection("emotes", "Emotes", EmoteConfig, {title: "Clear Emote Cache", onClick: () => { this.clearEmoteData(); this.loadEmoteData(EmoteInfo); }}); // Disable emote module for now because it's annoying and slow // await this.getBlacklist(); // await this.loadEmoteData(EmoteInfo); @@ -40,8 +71,9 @@ export default new class EmoteModule extends Builtin { } disabled() { + Settings.removeCollection("emotes"); this.emptyEmotes(); - if (this.cancelEmoteRender) return; + if (!this.cancelEmoteRender) return; this.cancelEmoteRender(); delete this.cancelEmoteRender; } @@ -71,9 +103,9 @@ export default new class EmoteModule extends Builtin { let emoteModifier = emoteSplit[1] ? emoteSplit[1] : ""; let emoteOverride = emoteModifier.slice(0); - if (emoteName.length < 4 || EmoteBlacklist.includes(emoteName)) continue; - if (!EmoteModifiers.includes(emoteModifier) || !Settings.get(this.category, "general", "modifiers")) emoteModifier = ""; - if (!EmoteOverrides.includes(emoteOverride)) emoteOverride = ""; + if (emoteName.length < 4 || blacklist.includes(emoteName)) continue; + if (!modifiers.includes(emoteModifier) || !Settings.get(this.category, "general", "modifiers")) emoteModifier = ""; + if (!overrides.includes(emoteOverride)) emoteOverride = ""; else emoteModifier = emoteOverride; let current = this.categories[c]; @@ -211,7 +243,7 @@ export default new class EmoteModule extends Builtin { if (typeof(emoteMeta.parser) === "function") parsedData = emoteMeta.parser(parsedData); for (const emote in parsedData) { - if (emote.length < 4 || EmoteBlacklist.includes(emote)) { + if (emote.length < 4 || blacklist.includes(emote)) { delete parsedData[emote]; continue; } @@ -226,7 +258,7 @@ export default new class EmoteModule extends Builtin { getBlacklist() { return new Promise(resolve => { $.getJSON(`https://rauenzi.github.io/BetterDiscordApp/data/emotefilter.json`, function (data) { - resolve(EmoteBlacklist.push(...data.blacklist)); + resolve(blacklist.push(...data.blacklist)); }); }); } diff --git a/src/data/cookies/plugincookie.js b/src/data/cookies/plugincookie.js deleted file mode 100644 index 7c645e42..00000000 --- a/src/data/cookies/plugincookie.js +++ /dev/null @@ -1 +0,0 @@ -export default {}; \ No newline at end of file diff --git a/src/data/cookies/settingscookie.js b/src/data/cookies/settingscookie.js deleted file mode 100644 index 51813812..00000000 --- a/src/data/cookies/settingscookie.js +++ /dev/null @@ -1,32 +0,0 @@ -export default { - "bda-gs-1": true, - "bda-gs-2": false, - "bda-gs-3": false, - "bda-gs-4": false, - "bda-gs-5": true, - "bda-gs-6": false, - "bda-gs-7": false, - "bda-gs-8": false, - "bda-es-0": true, - "bda-es-1": true, - "bda-es-2": true, - "bda-es-4": false, - "bda-es-6": true, - "bda-es-7": true, - "bda-gs-b": false, - "bda-es-8": true, - "bda-dc-0": false, - "bda-css-0": false, - "bda-css-1": false, - "bda-es-9": true, - "fork-dm-1": false, - "fork-ps-1": true, - "fork-ps-2": true, - "fork-ps-3": true, - "fork-ps-4": true, - "fork-ps-5": true, - "fork-es-2": false, - "fork-es-3": true, - "fork-wp-1": false, - "fork-wp-2": false -}; \ No newline at end of file diff --git a/src/data/cookies/themecookie.js b/src/data/cookies/themecookie.js deleted file mode 100644 index 7c645e42..00000000 --- a/src/data/cookies/themecookie.js +++ /dev/null @@ -1 +0,0 @@ -export default {}; \ No newline at end of file diff --git a/src/data/data.js b/src/data/data.js index 2f5ac71b..b7a29546 100644 --- a/src/data/data.js +++ b/src/data/data.js @@ -1,18 +1,9 @@ import State from "./state"; -// import SettingsInfo from "./settings"; -// import SettingsCookie from "./cookies/settingscookie"; import Config from "./config"; -// import PluginCookie from "./cookies/plugincookie"; -// import ThemeCookie from "./cookies/themecookie"; -// import Themes from "./themes"; -// import Plugins from "./plugins"; -import Emotes from "./emotes/emotes"; -import EmoteBlacklist from "./emotes/blacklist"; import EmoteInfo from "./emotes/info"; -import EmoteModifiers from "./emotes/modifiers"; -import EmoteOverrides from "./emotes/overrides"; +import EmoteConfig from "./emotes/config"; import SettingsConfig from "./settings/config"; import SettingsState from "./settings/state"; -export {State, Config, /*SettingsInfo, SettingsCookie, PluginCookie, ThemeCookie, Themes, Plugins,*/ Emotes, EmoteBlacklist, EmoteInfo, EmoteModifiers, EmoteOverrides, SettingsConfig, SettingsState}; \ No newline at end of file +export {State, Config, EmoteInfo, EmoteConfig, SettingsConfig, SettingsState}; \ No newline at end of file diff --git a/src/data/emotes/blacklist.js b/src/data/emotes/blacklist.js deleted file mode 100644 index 109fa8b3..00000000 --- a/src/data/emotes/blacklist.js +++ /dev/null @@ -1 +0,0 @@ -export default []; \ No newline at end of file diff --git a/src/data/emotes/config.js b/src/data/emotes/config.js new file mode 100644 index 00000000..724336d6 --- /dev/null +++ b/src/data/emotes/config.js @@ -0,0 +1,89 @@ +export default [ + { + type: "category", + id: "general", + name: "General", + collapsible: true, + settings: [ + { + type: "switch", + id: "download", + name: "Download Emotes", + note: "Download emotes once a week to stay up to date", + value: true + }, + { + type: "switch", + id: "emoteMenu", + name: "Emote Menu", + note: "Show Twitch/Favourite emotes in emote menu", + value: true + }, + { + type: "switch", + id: "hideEmojiMenu", + name: "Hide Emoji Menu", + note: "Hides Discord's emoji menu when using emote menu", + value: false, + enableWith: "emoteMenu" + }, + { + type: "switch", + id: "autoCaps", + name: "Emote Autocapitalization", + note: "Autocapitalize emote commands", + value: false + }, + { + type: "switch", + id: "showNames", + name: "Show Names", + note: "Show emote names on hover", + value: true + }, + { + type: "switch", + id: "modifiers", + name: "Show Emote Modifiers", + note: "Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)", + value: true + }, + { + type: "switch", + id: "animateOnHover", + name: "Animate On Hover", + note: "Only animate the emote modifiers on hover", + value: false + } + ] + }, + { + type: "category", + id: "categories", + name: "Categories", + collapsible: true, + settings: [ + { + type: "switch", + id: "twitch", + name: "Twitch", + note: "Show Twitch global & subscriber emotes", + value: true + }, + { + type: "switch", + id: "ffz", + name: "FrankerFaceZ", + note: "Show emotes from FFZ", + value: true + }, + { + type: "switch", + id: "bttv", + name: "BetterTTV", + note: "Show emotes from BTTV", + value: true + } + ] + } +]; \ No newline at end of file diff --git a/src/data/emotes/emotes.js b/src/data/emotes/emotes.js deleted file mode 100644 index ab69dbdc..00000000 --- a/src/data/emotes/emotes.js +++ /dev/null @@ -1,7 +0,0 @@ -export default { - TwitchGlobal: {}, - TwitchSubscriber: {}, - BTTV: {}, - FrankerFaceZ: {}, - BTTV2: {} -}; \ No newline at end of file diff --git a/src/data/emotes/modifiers.js b/src/data/emotes/modifiers.js deleted file mode 100644 index aba0cde7..00000000 --- a/src/data/emotes/modifiers.js +++ /dev/null @@ -1 +0,0 @@ -export default ["flip", "spin", "pulse", "spin2", "spin3", "1spin", "2spin", "3spin", "tr", "bl", "br", "shake", "shake2", "shake3", "flap"]; \ No newline at end of file diff --git a/src/data/emotes/overrides.js b/src/data/emotes/overrides.js deleted file mode 100644 index 4998def6..00000000 --- a/src/data/emotes/overrides.js +++ /dev/null @@ -1 +0,0 @@ -export default ["twitch", "bttv", "ffz"]; \ No newline at end of file diff --git a/src/data/plugins.js b/src/data/plugins.js deleted file mode 100644 index 7c645e42..00000000 --- a/src/data/plugins.js +++ /dev/null @@ -1 +0,0 @@ -export default {}; \ No newline at end of file diff --git a/src/data/settings.json b/src/data/settings.json deleted file mode 100644 index 66cfc6fe..00000000 --- a/src/data/settings.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "core": { - "PublicServers": true, - "MinimalMode": false, - "VoiceMode": false, - "HideChannels": false, - "DarkMode": true, - "VoiceDisconnect": false, - "Timestamps": false, - "ColoredText": false, - "BDBlue": false, - "DeveloperMode": false - }, - - "fork": { - "ContentErrors": true, - "Toasts": true, - "Scroll": true, - "AnimateOnHover": false, - "CopySelector": false, - "DownloadEmotes": true, - "NormalizeClasses": true, - "AutomaticLoading": true, - "Transparency": false - }, - - "emote": { - "Twitch": true, - "FFZ": true, - "BTTV": true, - "EmoteMenu": true, - "EmojiMenu": true, - "AutoCaps": false, - "ShowNames": true, - "Modifiers": true - } -} \ No newline at end of file diff --git a/src/data/settings/config.js b/src/data/settings/config.js index e261009e..e1798e1f 100644 --- a/src/data/settings/config.js +++ b/src/data/settings/config.js @@ -1,274 +1,172 @@ export default [ { - type: "collection", - id: "settings", - name: "Settings", + type: "category", + id: "general", + name: "General", + collapsible: true, settings: [ { - type: "category", - id: "general", - name: "General", - collapsible: true, - settings: [ - { - type: "switch", - id: "emotes", - name: "Emote System", - note: "Enables BD's emote system", - value: true - }, - { - type: "switch", - id: "publicServers", - name: "Public Servers", - note: "Display public servers button", - value: true - }, - { - type: "switch", - id: "voiceDisconnect", - name: "Voice Disconnect", - note: "Disconnect from voice server when closing Discord", - value: false - }, - { - type: "switch", - id: "twentyFourHour", - name: "24 Hour Timestamps", - note: "Hides channels when in minimal mode", - value: false, - }, - { - type: "switch", - id: "classNormalizer", - name: "Normalize Classes", - note: "Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)", - value: true - }, - { - type: "switch", - id: "showToasts", - name: "Show Toasts", - note: "Shows a small notification for important information", - value: true - } - ] + type: "switch", + id: "emotes", + name: "Emote System", + note: "Enables BD's emote system", + value: true }, { - type: "category", - id: "appearance", - name: "Appearance", - collapsible: true, - settings: [ - { - type: "switch", - id: "voiceMode", - name: "Voice Mode", - note: "Hides everything that isn't voice chat", - value: false - }, - { - type: "switch", - id: "minimalMode", - name: "Minimal Mode", - note: "Hide elements and reduce the size of elements", - value: false - }, - { - type: "switch", - id: "hideChannels", - name: "Hide Channels", - note: "Hides channels when in minimal mode", - value: false, - enableWith: "minimalMode" - }, - { - type: "switch", - id: "darkMode", - name: "Dark Mode", - note: "Make certain elements dark by default", - value: true - }, - { - type: "switch", - id: "coloredText", - name: "Colored Text", - note: "Make text colour the same as role color", - value: false - } - ] + type: "switch", + id: "publicServers", + name: "Public Servers", + note: "Display public servers button", + value: true }, { - type: "category", - id: "content", - name: "Content Manager", - collapsible: true, - settings: [ - { - type: "switch", - id: "contentErrors", - name: "Show Content Errors", - note: "Shows a modal with plugin/theme errors", - value: true - }, - { - type: "switch", - id: "autoScroll", - name: "Scroll To Settings", - note: "Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)", - value: true - }, - { - type: "switch", - id: "autoReload", - name: "Automatic Loading", - note: "Automatically loads, reloads, and unloads plugins and themes", - value: true - } - ] + type: "switch", + id: "voiceDisconnect", + name: "Voice Disconnect", + note: "Disconnect from voice server when closing Discord", + value: false }, { - type: "category", - id: "developer", - name: "Developer Settings", - collapsible: true, - shown: false, - settings: [ - { - type: "switch", - id: "developerMode", - name: "Developer Mode", - note: "Allows activating debugger when pressing F8", - value: false - }, - { - type: "switch", - id: "copySelector", - name: "Copy Selector", - note: "Adds a \"Copy Selector\" option to context menus when developer mode is active", - value: false, - enableWith: "developerMode" - } - ] + type: "switch", + id: "twentyFourHour", + name: "24 Hour Timestamps", + note: "Hides channels when in minimal mode", + value: false, }, { - type: "category", - id: "window", - name: "Window Preferences", - collapsible: true, - shown: false, - settings: [ - { - type: "switch", - id: "transparency", - name: "Enable Transparency", - note: "Enables the main window to be see-through (requires restart)", - value: false - }, - { - type: "switch", - id: "frame", - name: "Window Frame", - note: "Adds the native os window frame to the main window", - value: false, - hidden: true - } - ] + type: "switch", + id: "classNormalizer", + name: "Normalize Classes", + note: "Adds stable classes to elements to help themes. (e.g. adds .da-channels to .channels-Ie2l6A)", + value: true + }, + { + type: "switch", + id: "showToasts", + name: "Show Toasts", + note: "Shows a small notification for important information", + value: true } ] }, { - type: "collection", - id: "emotes", - name: "Emotes", - enableWith: "settings.general.emotes", + type: "category", + id: "appearance", + name: "Appearance", + collapsible: true, settings: [ { - type: "category", - id: "general", - name: "General", - collapsible: true, - settings: [ - { - type: "switch", - id: "download", - name: "Download Emotes", - note: "Download emotes once a week to stay up to date", - value: true - }, - { - type: "switch", - id: "emoteMenu", - name: "Emote Menu", - note: "Show Twitch/Favourite emotes in emote menu", - value: true - }, - { - type: "switch", - id: "hideEmojiMenu", - name: "Hide Emoji Menu", - note: "Hides Discord's emoji menu when using emote menu", - value: false, - enableWith: "emoteMenu" - }, - { - type: "switch", - id: "autoCaps", - name: "Emote Autocapitalization", - note: "Autocapitalize emote commands", - value: false - }, - { - type: "switch", - id: "showNames", - name: "Show Names", - note: "Show emote names on hover", - value: true - }, - { - type: "switch", - id: "modifiers", - name: "Show Emote Modifiers", - note: "Enable emote mods (flip, spin, pulse, spin2, spin3, 1spin, 2spin, 3spin, tr, bl, br, shake, shake2, shake3, flap)", - value: true - }, - { - type: "switch", - id: "animateOnHover", - name: "Animate On Hover", - note: "Only animate the emote modifiers on hover", - value: false - } - ] + type: "switch", + id: "voiceMode", + name: "Voice Mode", + note: "Hides everything that isn't voice chat", + value: false }, { - type: "category", - id: "categories", - name: "Categories", - collapsible: true, - settings: [ - { - type: "switch", - id: "twitch", - name: "Twitch", - note: "Show Twitch global & subscriber emotes", - value: true - }, - { - type: "switch", - id: "ffz", - name: "FrankerFaceZ", - note: "Show emotes from FFZ", - value: true - }, - { - type: "switch", - id: "bttv", - name: "BetterTTV", - note: "Show emotes from BTTV", - value: true - } - ] + type: "switch", + id: "minimalMode", + name: "Minimal Mode", + note: "Hide elements and reduce the size of elements", + value: false + }, + { + type: "switch", + id: "hideChannels", + name: "Hide Channels", + note: "Hides channels when in minimal mode", + value: false, + enableWith: "minimalMode" + }, + { + type: "switch", + id: "darkMode", + name: "Dark Mode", + note: "Make certain elements dark by default", + value: true + }, + { + type: "switch", + id: "coloredText", + name: "Colored Text", + note: "Make text colour the same as role color", + value: false + } + ] + }, + { + type: "category", + id: "content", + name: "Content Manager", + collapsible: true, + settings: [ + { + type: "switch", + id: "contentErrors", + name: "Show Content Errors", + note: "Shows a modal with plugin/theme errors", + value: true + }, + { + type: "switch", + id: "autoScroll", + name: "Scroll To Settings", + note: "Auto-scrolls to a plugin's settings when the button is clicked (only if out of view)", + value: true + }, + { + type: "switch", + id: "autoReload", + name: "Automatic Loading", + note: "Automatically loads, reloads, and unloads plugins and themes", + value: true + } + ] + }, + { + type: "category", + id: "developer", + name: "Developer Settings", + collapsible: true, + shown: false, + settings: [ + { + type: "switch", + id: "developerMode", + name: "Developer Mode", + note: "Allows activating debugger when pressing F8", + value: false + }, + { + type: "switch", + id: "copySelector", + name: "Copy Selector", + note: "Adds a \"Copy Selector\" option to context menus when developer mode is active", + value: false, + enableWith: "developerMode" + } + ] + }, + { + type: "category", + id: "window", + name: "Window Preferences", + collapsible: true, + shown: false, + settings: [ + { + type: "switch", + id: "transparency", + name: "Enable Transparency", + note: "Enables the main window to be see-through (requires restart)", + value: false + }, + { + type: "switch", + id: "frame", + name: "Window Frame", + note: "Adds the native os window frame to the main window", + value: false, + hidden: true } ] } diff --git a/src/data/settings.js b/src/data/settings/old.js similarity index 100% rename from src/data/settings.js rename to src/data/settings/old.js diff --git a/src/data/themes.js b/src/data/themes.js deleted file mode 100644 index 7c645e42..00000000 --- a/src/data/themes.js +++ /dev/null @@ -1 +0,0 @@ -export default {}; \ No newline at end of file diff --git a/src/index.js b/src/index.js index a2c1e303..008cbd34 100644 --- a/src/index.js +++ b/src/index.js @@ -1,4 +1,4 @@ -import {Config, /*SettingsCookie, SettingsInfo, PluginCookie, ThemeCookie, Plugins, Themes,*/ Emotes, EmoteBlacklist} from "data"; +import {Config} from "data"; import proxyLocalStorage from "./localstorage"; import Core from "./modules/core"; import BdApi from "./modules/pluginapi"; @@ -6,6 +6,8 @@ import PluginManager from "./modules/pluginmanager"; import ThemeManager from "./modules/thememanager"; import {bdPluginStorage} from "./modules/oldstorage"; import Events from "./modules/emitter"; +import Settings from "./modules/settingsmanager"; +import EmoteModule from "./builtins/emotes"; // Perform some setup proxyLocalStorage(); @@ -24,9 +26,10 @@ window.pluginModule = PluginManager; window.themeModule = ThemeManager; // window.bdthemes = Themes; // window.bdplugins = Plugins; -window.bdEmotes = Emotes; -window.bemotes = EmoteBlacklist; +window.bdEmotes = EmoteModule.Emotes; +window.bemotes = EmoteModule.blacklist; window.bdPluginStorage = bdPluginStorage; +window.settingsModule = Settings; window.BDEvents = Events; diff --git a/src/modules/contentmanager.js b/src/modules/contentmanager.js index 345d31c3..3fb823ce 100644 --- a/src/modules/contentmanager.js +++ b/src/modules/contentmanager.js @@ -49,7 +49,6 @@ export default class ContentManager { loadState() { const saved = DataStore.getData(`${this.prefix}s`); - console.log(saved); if (!saved) return; Object.assign(this.state, saved); } @@ -152,7 +151,6 @@ export default class ContentManager { try {__non_webpack_require__(path.resolve(this.contentFolder, filename));} catch (error) {return new ContentError(filename, filename, "Could not be compiled.", {message: error.message, stack: error.stack});} const content = __non_webpack_require__(path.resolve(this.contentFolder, filename)); - console.log(content); if (this.contentList.find(c => c.id == content.id)) return new ContentError(content.name, filename, `There is already a plugin with name ${content.name}`); const error = this.initializeContent(content); if (error) return error; diff --git a/src/modules/pluginmanager.js b/src/modules/pluginmanager.js index afd8a79a..a8e7bfba 100644 --- a/src/modules/pluginmanager.js +++ b/src/modules/pluginmanager.js @@ -48,7 +48,7 @@ export default new class PluginManager extends ContentManager { loadAllPlugins() { const errors = this.loadAllContent(); this.setupFunctions(); - Settings.registerPanel("Plugins", {element: () => SettingsRenderer.getPluginsPanel(this.contentList)}); + Settings.registerPanel("Plugins", {element: () => SettingsRenderer.getPluginsPanel(this.contentList, this.contentFolder)}); return errors; } @@ -58,7 +58,7 @@ export default new class PluginManager extends ContentManager { try { const thePlugin = new content.type(); content.plugin = thePlugin; - content.name = content.name || thePlugin.getName(); + content.name = thePlugin.getName() || content.name; content.author = content.author || thePlugin.getAuthor() || "No author"; content.description = content.description || thePlugin.getDescription() || "No description"; content.version = content.version || thePlugin.getVersion() || "No version"; diff --git a/src/modules/settingsmanager.js b/src/modules/settingsmanager.js index 5e638e9e..d5b160fa 100644 --- a/src/modules/settingsmanager.js +++ b/src/modules/settingsmanager.js @@ -1,6 +1,5 @@ import {SettingsConfig, SettingsState} from "data"; import DataStore from "./datastore"; -// import PluginManager from "./pluginmanager"; import BdApi from "./pluginapi"; import Events from "./emitter"; import WebpackModules, {DiscordModules} from "./webpackmodules"; @@ -14,15 +13,33 @@ export default new class SettingsManager { constructor() { this.config = SettingsConfig; this.state = SettingsState; + this.collections = []; this.panels = []; - this.setup(SettingsConfig, SettingsState); + this.registerCollection("settings", "Settings", SettingsConfig); } initialize() { DataStore.initialize(); this.loadSettings(); this.patchSections(); - // this.registerPanel("Plugins", {element: () => SettingsRenderer.getPluginsPanel(PluginManager.contentList)}); + } + + registerCollection(id, name, settings, button = null) { + if (this.collections.find(c => c.id == id)) Utilities.err("Settings", "Already have a collection with id " + id); + this.collections.push({ + type: "collection", + id: id, + name: name, + settings: settings, + button: button + }); + this.setup(); + } + + removeCollection(id) { + const location = this.collections.findIndex(c => c.id == id); + if (!location < 0) Utilities.err("Settings", "No collection with id " + id); + this.collections.splice(location, 1); } registerPanel(name, options) { @@ -40,25 +57,27 @@ export default new class SettingsManager { return {collection, category, setting}; } - setup(collections, state) { - const config = {}; - for (let c = 0; c < collections.length; c++) { - const collection = collections[c]; - const categories = collections[c].settings; - config[collection.id] = {}; + setup() { + console.log("before state"); + console.log(this.state); + for (let c = 0; c < this.collections.length; c++) { + const collection = this.collections[c]; + const categories = this.collections[c].settings; + if (!this.state[collection.id]) this.state[collection.id] = {}; for (let s = 0; s < categories.length; s++) { const category = categories[s]; - if (category.type != "category") {config[collection.id][category.id] = category.value;} + if (category.type != "category") {if (!this.state[collection.id].hasOwnProperty(category.id)) this.state[collection.id][category.id] = category.value;} else { - config[collection.id][category.id] = {}; + if (!this.state[collection.id].hasOwnProperty(category.id)) this.state[collection.id][category.id] = {}; for (let s = 0; s < category.settings.length; s++) { const setting = category.settings[s]; - config[collection.id][category.id][setting.id] = setting.value; + if (!this.state[collection.id][category.id].hasOwnProperty(setting.id)) this.state[collection.id][category.id][setting.id] = setting.value; if (setting.enableWith) { const path = this.getPath(setting.enableWith.split("."), collection.id, category.id); + if (setting.hasOwnProperty("disabled")) continue; Object.defineProperty(setting, "disabled", { get: () => { - return !state[path.collection][path.category][path.setting]; + return !this.state[path.collection][path.category][path.setting]; } }); } @@ -69,14 +88,13 @@ export default new class SettingsManager { const path = this.getPath(collection.enableWith.split(".")); Object.defineProperty(collection, "disabled", { get: () => { - return !state[path.collection][path.category][path.setting]; + return !this.state[path.collection][path.category][path.setting]; } }); } } - - this.defaultState = config; - Object.assign(this.state, this.defaultState); + console.log("after state"); + console.log(this.state); } async patchSections() { @@ -90,12 +108,12 @@ export default new class SettingsManager { console.log(data); /* eslint-disable-line no-console */ insert({section: "DIVIDER"}); insert({section: "HEADER", label: "BandagedBD"}); - for (const collection of this.config) { + for (const collection of this.collections) { if (collection.disabled) continue; insert({ section: collection.name, label: collection.name, - element: () => SettingsRenderer.buildSettingsPanel(collection.name, collection.settings, SettingsState[collection.id], this.onSettingChange.bind(this, collection.id)) + element: () => SettingsRenderer.buildSettingsPanel(collection.name, collection.settings, SettingsState[collection.id], this.onSettingChange.bind(this, collection.id), collection.button ? collection.button : null) }); } for (const panel of this.panels) insert(panel); @@ -143,21 +161,26 @@ export default new class SettingsManager { } onSettingChange(collection, category, id, value) { - const before = this.config.filter(c => c.disabled).length; + const before = this.collections.length; this.state[collection][category][id] = value; Events.dispatch("setting-updated", collection, category, id, value); - const after = this.config.filter(c => c.disabled).length; + const after = this.collections.length; this.saveSettings(); if (before != after) this.forceUpdate(); } getSetting(collection, category, id) { - if (arguments.length == 2) return this.config[0].find(c => c.id == arguments[0]).settings.find(s => s.id == arguments[1]); - return this.config.find(c => c.id == collection).find(c => c.id == category).settings.find(s => s.id == id); + if (arguments.length == 2) return this.collections[0].find(c => c.id == arguments[0]).settings.find(s => s.id == arguments[1]); + return this.collections.find(c => c.id == collection).find(c => c.id == category).settings.find(s => s.id == id); } get(collection, category, id) { - if (arguments.length == 2) return this.state[this.config[0].id][arguments[0]][arguments[1]]; + if (arguments.length == 2) { + id = category; + category = collection; + collection = "settings"; + } + if (!this.state[collection] || !this.state[collection][category]) return false; return this.state[collection][category][id]; } diff --git a/src/modules/thememanager.js b/src/modules/thememanager.js index dd481a9e..b6385dba 100644 --- a/src/modules/thememanager.js +++ b/src/modules/thememanager.js @@ -17,7 +17,7 @@ export default new class ThemeManager extends ContentManager { /* Aliases */ updateThemeList() {return this.updateList();} loadAllThemes() { - Settings.registerPanel("Themes", {element: () => SettingsRenderer.getThemesPanel(this.contentList)}); + Settings.registerPanel("Themes", {element: () => SettingsRenderer.getThemesPanel(this.contentList, this.contentFolder)}); return this.loadAllContent(); } diff --git a/src/structs/builtin.js b/src/structs/builtin.js index 3f7a1974..da5dc1aa 100644 --- a/src/structs/builtin.js +++ b/src/structs/builtin.js @@ -11,7 +11,7 @@ export default class BuiltinModule { get id() {return "None";} async initialize() { - if (SettingsState[this.collection][this.category][this.id]) await this.enable(); + if (Settings.get(this.collection, this.category, this.id)) await this.enable(); Events.on("setting-updated", (collection, category, id, enabled) => { if (collection != this.collection || category !== this.category || id !== this.id) return; if (enabled) this.enable(); diff --git a/src/ui/settings/plugincard.js b/src/ui/settings/plugincard.js index 461a834b..15c6f077 100644 --- a/src/ui/settings/plugincard.js +++ b/src/ui/settings/plugincard.js @@ -1,5 +1,5 @@ // import {SettingsCookie, PluginCookie, Plugins} from "data"; -import {React, ReactDOM, Utilities, PluginManager} from "modules"; +import {React, Utilities, PluginManager} from "modules"; import CloseButton from "../icons/close"; // import ReloadIcon from "../icons/reload"; @@ -15,6 +15,7 @@ export default class V2C_PluginCard extends React.Component { }; this.hasSettings = typeof this.props.content.plugin.getSettingsPanel === "function"; this.settingsPanel = ""; + this.panelRef = React.createRef(); // this.reload = this.reload.bind(this); // this.onReload = this.onReload.bind(this); @@ -23,7 +24,7 @@ export default class V2C_PluginCard extends React.Component { componentDidUpdate() { if (this.state.settings) { if (typeof this.settingsPanel === "object") { - this.refs.settingspanel.appendChild(this.settingsPanel); + this.panelRef.current.appendChild(this.settingsPanel); } // if (!SettingsCookie["fork-ps-3"]) return; @@ -38,7 +39,7 @@ export default class V2C_PluginCard extends React.Component { return (eTop < cTop || eBottom > cBottom); }; - const self = $(ReactDOM.findDOMNode(this)); + const self = $(this.panelRef.current); const container = self.parents(".scroller-2FKFPG"); if (!isHidden(container[0], self[0])) return; container.animate({ @@ -67,13 +68,13 @@ export default class V2C_PluginCard extends React.Component { return React.createElement("li", {className: "settings-open ui-switch-item"}, React.createElement("div", {style: {"float": "right", "cursor": "pointer"}, onClick: () => { - this.refs.settingspanel.innerHTML = ""; + this.panelRef.current.innerHTML = ""; self.setState({settings: false}); }}, React.createElement(CloseButton, null) ), - typeof self.settingsPanel === "object" && React.createElement("div", {id: `plugin-settings-${name}`, className: "plugin-settings", ref: "settingspanel"}), - typeof self.settingsPanel !== "object" && React.createElement("div", {id: `plugin-settings-${name}`, className: "plugin-settings", ref: "settingspanel", dangerouslySetInnerHTML: {__html: self.settingsPanel}}) + typeof self.settingsPanel === "object" && React.createElement("div", {id: `plugin-settings-${name}`, className: "plugin-settings", ref: this.panelRef}), + typeof self.settingsPanel !== "object" && React.createElement("div", {id: `plugin-settings-${name}`, className: "plugin-settings", ref: this.panelRef, dangerouslySetInnerHTML: {__html: self.settingsPanel}}) ); } diff --git a/src/ui/settings/settings.js b/src/ui/settings/settings.js index 41879cad..19e0731b 100644 --- a/src/ui/settings/settings.js +++ b/src/ui/settings/settings.js @@ -1,74 +1,41 @@ import {Config} from "data"; -import {React/*, ReactDOM, Utilities, ContentManager, Events, PluginManager, ThemeManager*/} from "modules"; -// import Sidebar from "./sidebar"; -// import Scroller from "../scroller"; -// import List from "../list"; -// import ContentColumn from "./contentcolumn"; -// import SectionedSettingsPanel from "./sectionedsettings"; -// import Tools from "./exitbutton"; -// import SettingsPanel from "./panel"; +import {React} from "modules"; + import PluginCard from "./plugincard"; import ThemeCard from "./themecard"; -// import ReloadIcon from "../icons/reload"; -// import CssEditor from "../customcss/editor"; -// import SettingsGroup from "../settings/settingsgroup"; import SettingsGroup from "../settings/group"; import SettingsTitle from "./title"; export default class V2_SettingsPanel { - static buildSettingsPanel(title, config, state, onChange) { + static buildSettingsPanel(title, config, state, onChange, button = null) { config.forEach(section => { section.settings.forEach(item => item.value = state[section.id][item.id]); }); - return this.getSettingsPanel(title, config, onChange); + return this.getSettingsPanel(title, config, onChange, button); } - static getSettingsPanel(title, groups, onChange) { - return [React.createElement(SettingsTitle, {text: title}), groups.map(section => { + static getSettingsPanel(title, groups, onChange, button = null) { + return [React.createElement(SettingsTitle, {text: title, button: button}), groups.map(section => { return React.createElement(SettingsGroup, Object.assign({}, section, {onChange})); })]; } - static getPluginsPanel(plugins) { - const titleComponent = React.createElement(SettingsTitle, {text: "Plugins", button: {title: "Open Plugin Folder", onClick: () => { require("electron").shell.openItem(""); }}}); + static getPluginsPanel(plugins, folder) { + const titleComponent = React.createElement(SettingsTitle, {text: "Plugins", button: {title: "Open Plugin Folder", onClick: () => { require("electron").shell.openItem(folder); }}}); const cards = plugins.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(plugin => React.createElement(PluginCard, {key: plugin.id, content: plugin}) ); - console.log(cards); return [titleComponent, React.createElement("ul", {className: "bda-slist"}, ...cards)]; - // const plugins = Object.keys(Plugins).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).reduce((arr, key) => { - // arr.push(React.createElement(PluginCard, {key: key, plugin: Plugins[key].plugin}));return arr; - // }, []); - // const list = React.createElement(List, {key: "plugin-list", className: "bda-slist", children: plugins}); - // const refreshIcon = !SettingsCookie["fork-ps-5"] && React.createElement(ReloadIcon, {className: "bd-reload-header", size: "18px", onClick: async () => { - // PluginManager.updatePluginList(); - // this.sideBarOnClick("plugins"); - // }}); - // const pfBtn = React.createElement("button", {key: "folder-button", className: "bd-pfbtn", onClick: () => { require("electron").shell.openItem(ContentManager.pluginsFolder); }}, "Open Plugin Folder"); - // const contentColumn = React.createElement(ContentColumn, {key: "pcolumn", title: "Plugins", children: [refreshIcon, pfBtn, list]}); - // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, React.createElement(Tools, {key: "tools"})]}); } - static getThemesPanel(themes) { - const titleComponent = React.createElement(SettingsTitle, {text: "Themes", button: {title: "Open Theme Folder", onClick: () => { require("electron").shell.openItem(""); }}}); + static getThemesPanel(themes, folder) { + const titleComponent = React.createElement(SettingsTitle, {text: "Themes", button: {title: "Open Theme Folder", onClick: () => { require("electron").shell.openItem(folder); }}}); const cards = themes.sort((a, b) => a.name.toLowerCase().localeCompare(b.name.toLowerCase())).map(theme => React.createElement(ThemeCard, {key: theme.id, content: theme}) ); - console.log(cards); return [titleComponent, React.createElement("ul", {className: "bda-slist"}, ...cards)]; - // const plugins = Object.keys(Plugins).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).reduce((arr, key) => { - // arr.push(React.createElement(PluginCard, {key: key, plugin: Plugins[key].plugin}));return arr; - // }, []); - // const list = React.createElement(List, {key: "plugin-list", className: "bda-slist", children: plugins}); - // const refreshIcon = !SettingsCookie["fork-ps-5"] && React.createElement(ReloadIcon, {className: "bd-reload-header", size: "18px", onClick: async () => { - // PluginManager.updatePluginList(); - // this.sideBarOnClick("plugins"); - // }}); - // const pfBtn = React.createElement("button", {key: "folder-button", className: "bd-pfbtn", onClick: () => { require("electron").shell.openItem(ContentManager.pluginsFolder); }}, "Open Plugin Folder"); - // const contentColumn = React.createElement(ContentColumn, {key: "pcolumn", title: "Plugins", children: [refreshIcon, pfBtn, list]}); - // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, React.createElement(Tools, {key: "tools"})]}); } static get attribution() { @@ -83,85 +50,4 @@ export default class V2_SettingsPanel { ) ); } - - // get coreComponent() { - // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [ - // React.createElement(SectionedSettingsPanel, {key: "cspanel", onChange: this.onChange, sections: this.coreSettings}), - // React.createElement(Tools, {key: "tools"}) - // ]}); - // } - - // get emoteComponent() { - // return React.createElement(Scroller, { - // contentColumn: true, fade: true, dark: true, children: [ - // React.createElement(SettingsPanel, {key: "espanel", title: "Emote Settings", onChange: this.onChange, settings: this.emoteSettings, button: { - // title: "Clear Emote Cache", - // onClick: () => { Events.dispatch("emotes-clear"); /*EmoteModule.clearEmoteData(); EmoteModule.init();*/ } - // }}), - // React.createElement(Tools, {key: "tools"}) - // ]}); - // } - - // get customCssComponent() { - // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [React.createElement(CssEditor, {key: "csseditor"}), React.createElement(Tools, {key: "tools"})]}); - // } - - // contentComponent(type) { - // const componentElement = type == "plugins" ? this.pluginsComponent : this.themesComponent; - // const prefix = type.replace("s", ""); - // const settingsList = this; - // class ContentList extends React.Component { - // constructor(props) { - // super(props); - // this.onChange = this.onChange.bind(this); - // } - - // componentDidMount() { - // Events.on(`${prefix}-reloaded`, this.onChange); - // Events.on(`${prefix}-loaded`, this.onChange); - // Events.on(`${prefix}-unloaded`, this.onChange); - // } - - // componentWillUnmount() { - // Events.off(`${prefix}-reloaded`, this.onChange); - // Events.off(`${prefix}-loaded`, this.onChange); - // Events.off(`${prefix}-unloaded`, this.onChange); - // } - - // onChange() { - // settingsList.sideBarOnClick(type); - // } - - // render() {return componentElement;} - // } - // return React.createElement(ContentList); - // } - - // get pluginsComponent() { - // const plugins = Object.keys(Plugins).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).reduce((arr, key) => { - // arr.push(React.createElement(PluginCard, {key: key, plugin: Plugins[key].plugin}));return arr; - // }, []); - // const list = React.createElement(List, {key: "plugin-list", className: "bda-slist", children: plugins}); - // const refreshIcon = !SettingsCookie["fork-ps-5"] && React.createElement(ReloadIcon, {className: "bd-reload-header", size: "18px", onClick: async () => { - // PluginManager.updatePluginList(); - // this.sideBarOnClick("plugins"); - // }}); - // const pfBtn = React.createElement("button", {key: "folder-button", className: "bd-pfbtn", onClick: () => { require("electron").shell.openItem(ContentManager.pluginsFolder); }}, "Open Plugin Folder"); - // const contentColumn = React.createElement(ContentColumn, {key: "pcolumn", title: "Plugins", children: [refreshIcon, pfBtn, list]}); - // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, React.createElement(Tools, {key: "tools"})]}); - // } - - // get themesComponent() { - // const themes = Object.keys(Themes).sort((a, b) => a.toLowerCase().localeCompare(b.toLowerCase())).reduce((arr, key) => { - // arr.push(React.createElement(ThemeCard, {key: key, theme: Themes[key]}));return arr; - // }, []); - // const list = React.createElement(List, {key: "theme-list", className: "bda-slist", children: themes}); - // const refreshIcon = !SettingsCookie["fork-ps-5"] && React.createElement(ReloadIcon, {className: "bd-reload-header", size: "18px", onClick: async () => { - // ThemeManager.updateThemeList(); - // this.sideBarOnClick("themes"); - // }}); - // const tfBtn = React.createElement("button", {key: "folder-button", className: "bd-pfbtn", onClick: () => { require("electron").shell.openItem(ContentManager.themesFolder); }}, "Open Theme Folder"); - // const contentColumn = React.createElement(ContentColumn, {key: "tcolumn", title: "Themes", children: [refreshIcon, tfBtn, list]}); - // return React.createElement(Scroller, {contentColumn: true, fade: true, dark: true, children: [contentColumn, React.createElement(Tools, {key: "tools"})]}); - // } } \ No newline at end of file diff --git a/src/ui/settings/themecard.js b/src/ui/settings/themecard.js index 593e0766..e3758c52 100644 --- a/src/ui/settings/themecard.js +++ b/src/ui/settings/themecard.js @@ -1,5 +1,5 @@ import {React, ThemeManager} from "modules"; -import ReloadIcon from "../icons/reload"; +// import ReloadIcon from "../icons/reload"; // import Toasts from "../toasts"; export default class V2C_ThemeCard extends React.Component {