diff --git a/js/main.js b/js/main.js index 159b9f35..a6316683 100644 --- a/js/main.js +++ b/js/main.js @@ -203,7 +203,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 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 = this.after(this.MessageContentComponent.prototype, \"render\", (thisObj, args, retVal) => {\n this.after(retVal.props, \"children\", (t, a, returnValue) => {\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 async loadEmoteData(emoteInfo) {\n this.emotesLoaded = false;\n\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 this.log(\"Loading emotes from local cache.\");\n const data = await new Promise(resolve => {\n _fs.readFile(file, \"utf8\", (err, content) => {\n this.log(\"Emotes loaded from cache.\");\n if (err) content = {};\n resolve(content);\n });\n });\n const parsed = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].testJSON(data);\n let isValid = !!parsed;\n if (isValid) Object.assign(Emotes, parsed);\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 this.emotesLoaded = true;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].dispatch(\"emotes-loaded\");\n return;\n }\n\n this.log(\"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 this.stacktrace(\"Could not save emote data.\", err);\n }\n\n this.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 json: true\n };\n this.log(`Downloading: ${emoteMeta.variable} (${emoteMeta.url})`);\n return new Promise((resolve, reject) => {\n request(options, (error, response, parsedData) => {\n if (error) {\n this.stacktrace(\"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 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 this.log(\"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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbIkVtb3RlcyIsIlR3aXRjaEdsb2JhbCIsIlR3aXRjaFN1YnNjcmliZXIiLCJCVFRWIiwiRnJhbmtlckZhY2VaIiwiQlRUVjIiLCJiZEVtb3RlU2V0dGluZ0lEcyIsImJsYWNrbGlzdCIsIm92ZXJyaWRlcyIsIm1vZGlmaWVycyIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwiZ2V0IiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENhdGVnb3J5IiwiaW5pdGlhbGl6ZSIsImVuYWJsZWQiLCJTZXR0aW5ncyIsInJlZ2lzdGVyQ29sbGVjdGlvbiIsIkVtb3RlQ29uZmlnIiwidGl0bGUiLCJvbkNsaWNrIiwiY2xlYXJFbW90ZURhdGEiLCJsb2FkRW1vdGVEYXRhIiwiRW1vdGVJbmZvIiwiZGlzYWJsZWQiLCJyZW1vdmVDb2xsZWN0aW9uIiwiZW1wdHlFbW90ZXMiLCJjYW5jZWxFbW90ZVJlbmRlciIsImNhdCIsImFzc2lnbiIsInBhdGNoTWVzc2FnZUNvbnRlbnQiLCJhZnRlciIsInByb3RvdHlwZSIsInRoaXNPYmoiLCJhcmdzIiwicmV0VmFsIiwicHJvcHMiLCJ0IiwiYSIsInJldHVyblZhbHVlIiwibGVuZ3RoIiwibWFya3VwIiwiY2hpbGRyZW4iLCJub2RlcyIsIm4iLCJub2RlIiwid29yZHMiLCJzcGxpdCIsImMiLCJjbGVuIiwidyIsIndsZW4iLCJlbW90ZSIsImVtb3RlU3BsaXQiLCJlbW90ZU5hbWUiLCJlbW90ZU1vZGlmaWVyIiwiZW1vdGVPdmVycmlkZSIsInNsaWNlIiwiaW5jbHVkZXMiLCJjdXJyZW50IiwicmVzdWx0cyIsIm1hdGNoIiwiUmVnRXhwIiwiVXRpbGl0aWVzIiwiZXNjYXBlIiwicHJlIiwic3Vic3RyaW5nIiwiaW5kZXgiLCJwb3N0IiwiZW1vdGVDb21wb25lbnQiLCJEaXNjb3JkTW9kdWxlcyIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIkJERW1vdGUiLCJ1cmwiLCJtb2RpZmllciIsInNwbGljZSIsIm9ubHlFbW90ZXMiLCJldmVyeSIsInIiLCJyZXBsYWNlIiwidHlwZSIsImVtb2ppTmFtZSIsImp1bWJvYWJsZSIsImVtb3RlSW5mbyIsImVtb3Rlc0xvYWRlZCIsIl9mcyIsInJlcXVpcmUiLCJlbW90ZUZpbGUiLCJmaWxlIiwiQ29uZmlnIiwiZGF0YVBhdGgiLCJleGlzdHMiLCJleGlzdHNTeW5jIiwiaXNDYWNoZVZhbGlkIiwiVG9hc3RzIiwic2hvdyIsImxvZyIsImRhdGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlYWRGaWxlIiwiZXJyIiwiY29udGVudCIsInBhcnNlZCIsInRlc3RKU09OIiwiaXNWYWxpZCIsImUiLCJ2YXJpYWJsZSIsIkV2ZW50cyIsImRpc3BhdGNoIiwidW5saW5rU3luYyIsInNldFRpbWVvdXQiLCJkb3dubG9hZEVtb3RlcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhY2t0cmFjZSIsImVtb3RlTWV0YSIsInJlcXVlc3QiLCJvcHRpb25zIiwidGltZW91dCIsImpzb24iLCJyZWplY3QiLCJlcnJvciIsInJlc3BvbnNlIiwicGFyc2VkRGF0YSIsImJhY2t1cCIsImJhY2t1cFBhcnNlciIsInBhcnNlciIsImdldEVtb3RlVVJMIiwiZ2V0QmxhY2tsaXN0IiwiJCIsImdldEpTT04iLCJwdXNoIiwiY2FjaGVMZW5ndGgiLCJEYXRhU3RvcmUiLCJnZXRCRERhdGEiLCJzZXRCRERhdGEiLCJjYWNoZURhdGUiLCJEYXRlIiwiY3VycmVudERhdGUiLCJkYXlzQmV0d2VlbiIsIk1hdGgi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VUFBTUMsU0FBUyxHQUFHLGlCQUFsQjtBQUNBLFVBQU1DLElBQUksR0FBR0MsMkNBQU0sQ0FBQ0MsUUFBUCxHQUFrQkgsU0FBL0I7O0FBQ0EsVUFBTUksTUFBTSxHQUFHTixHQUFHLENBQUNPLFVBQUosQ0FBZUosSUFBZixDQUFmOztBQUNBLFFBQUlHLE1BQUosRUFBWU4sR0FBRyxDQUFDeUIsVUFBSixDQUFldEIsSUFBZjtBQUNaK0MscURBQVMsQ0FBQ0UsU0FBVixDQUFvQixnQkFBcEIsRUFBdUMsSUFBSUUsSUFBSixFQUFELENBQWFPLE1BQWIsRUFBdEM7O0FBQ0EsU0FBSyxNQUFNckosUUFBWCxJQUF1QmQsTUFBdkIsRUFBK0JpQixNQUFNLENBQUM0QixNQUFQLENBQWM3QyxNQUFkLEVBQXNCO0FBQUMsT0FBQ2MsUUFBRCxHQUFZO0FBQWIsS0FBdEI7QUFDbEM7O0FBdlBnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmltcG9ydCB7Q29uZmlnLCBFbW90ZUluZm8sIEVtb3RlQ29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1V0aWxpdGllcywgV2VicGFja01vZHVsZXMsIERhdGFTdG9yZSwgRGlzY29yZE1vZHVsZXMsIEV2ZW50cywgU2V0dGluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBCREVtb3RlIGZyb20gXCIuLi91aS9lbW90ZVwiO1xyXG5pbXBvcnQge1RvYXN0c30gZnJvbSBcInVpXCI7XHJcblxyXG5jb25zdCBFbW90ZXMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IHt9LFxyXG4gICAgVHdpdGNoU3Vic2NyaWJlcjoge30sXHJcbiAgICBCVFRWOiB7fSxcclxuICAgIEZyYW5rZXJGYWNlWjoge30sXHJcbiAgICBCVFRWMjoge31cclxufTtcclxuXHJcbmNvbnN0IGJkRW1vdGVTZXR0aW5nSURzID0ge1xyXG4gICAgVHdpdGNoR2xvYmFsOiBcInR3aXRjaFwiLFxyXG4gICAgVHdpdGNoU3Vic2NyaWJlcjogXCJ0d2l0Y2hcIixcclxuICAgIEJUVFY6IFwiYnR0dlwiLFxyXG4gICAgRnJhbmtlckZhY2VaOiBcImZmelwiLFxyXG4gICAgQlRUVjI6IFwiYnR0dlwiXHJcbn07XHJcblxyXG5jb25zdCBibGFja2xpc3QgPSBbXTtcclxuY29uc3Qgb3ZlcnJpZGVzID0gW1widHdpdGNoXCIsIFwiYnR0dlwiLCBcImZmelwiXTtcclxuY29uc3QgbW9kaWZpZXJzID0gW1wiZmxpcFwiLCBcInNwaW5cIiwgXCJwdWxzZVwiLCBcInNwaW4yXCIsIFwic3BpbjNcIiwgXCIxc3BpblwiLCBcIjJzcGluXCIsIFwiM3NwaW5cIiwgXCJ0clwiLCBcImJsXCIsIFwiYnJcIiwgXCJzaGFrZVwiLCBcInNoYWtlMlwiLCBcInNoYWtlM1wiLCBcImZsYXBcIl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vdGVNb2R1bGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkVtb3Rlc1wiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcInNldHRpbmdzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3JpZXMoKSB7IHJldHVybiBPYmplY3Qua2V5cyhiZEVtb3RlU2V0dGluZ0lEcykuZmlsdGVyKGsgPT4gdGhpcy5pc0NhdGVnb3J5RW5hYmxlZChiZEVtb3RlU2V0dGluZ0lEc1trXSkpOyB9XHJcblxyXG4gICAgaXNDYXRlZ29yeUVuYWJsZWQoaWQpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KFwiZW1vdGVzXCIsIFwiY2F0ZWdvcmllc1wiLCBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldChcImVtb3Rlc1wiLCBcImdlbmVyYWxcIiwgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBNZXNzYWdlQ29udGVudENvbXBvbmVudCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlQnV0dG9uc1wiKSk7fVxyXG5cclxuICAgIGdldCBFbW90ZXMoKSB7cmV0dXJuIEVtb3Rlczt9XHJcbiAgICBnZXQgVHdpdGNoR2xvYmFsKCkge3JldHVybiBFbW90ZXMuVHdpdGNoR2xvYmFsO31cclxuICAgIGdldCBUd2l0Y2hTdWJzY3JpYmVyKCkge3JldHVybiBFbW90ZXMuVHdpdGNoU3Vic2NyaWJlcjt9XHJcbiAgICBnZXQgQlRUVigpIHtyZXR1cm4gRW1vdGVzLkJUVFY7fVxyXG4gICAgZ2V0IEZyYW5rZXJGYWNlWigpIHtyZXR1cm4gRW1vdGVzLkZyYW5rZXJGYWNlWjt9XHJcbiAgICBnZXQgQlRUVjIoKSB7cmV0dXJuIEVtb3Rlcy5CVFRWMjt9XHJcbiAgICBnZXQgYmxhY2tsaXN0KCkge3JldHVybiBibGFja2xpc3Q7fVxyXG5cclxuICAgIGdldENhdGVnb3J5KGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIEVtb3Rlc1tjYXRlZ29yeV07XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgLy8gRW1vdGVDb25maWc7XHJcbiAgICAgICAgLy8gZW1vdGVDb2xsZWN0aW9uLmJ1dHRvbiA9IHt0aXRsZTogXCJDbGVhciBFbW90ZSBDYWNoZVwiLCBvbkNsaWNrOiAoKSA9PiB7IHRoaXMuY2xlYXJFbW90ZURhdGEoKTsgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7IH19O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgU2V0dGluZ3MucmVnaXN0ZXJDb2xsZWN0aW9uKFwiZW1vdGVzXCIsIFwiRW1vdGVzXCIsIEVtb3RlQ29uZmlnLCB7dGl0bGU6IFwiQ2xlYXIgRW1vdGUgQ2FjaGVcIiwgb25DbGljazogKCkgPT4geyB0aGlzLmNsZWFyRW1vdGVEYXRhKCk7IHRoaXMubG9hZEVtb3RlRGF0YShFbW90ZUluZm8pOyB9fSk7XHJcbiAgICAgICAgLy8gRGlzYWJsZSBlbW90ZSBtb2R1bGUgZm9yIG5vdyBiZWNhdXNlIGl0J3MgYW5ub3lpbmcgYW5kIHNsb3dcclxuICAgICAgICAvLyBhd2FpdCB0aGlzLmdldEJsYWNrbGlzdCgpO1xyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMubG9hZEVtb3RlRGF0YShFbW90ZUluZm8pO1xyXG5cclxuICAgICAgICAvLyB3aGlsZSAoIXRoaXMuTWVzc2FnZUNvbnRlbnRDb21wb25lbnQpIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcclxuICAgICAgICAvLyB0aGlzLnBhdGNoTWVzc2FnZUNvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZW1vdmVDb2xsZWN0aW9uKFwiZW1vdGVzXCIpO1xyXG4gICAgICAgIHRoaXMuZW1wdHlFbW90ZXMoKTtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHlFbW90ZXMoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjYXQgaW4gRW1vdGVzKSBPYmplY3QuYXNzaWduKEVtb3Rlcywge1tjYXRdOiB7fX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoTWVzc2FnZUNvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gdGhpcy5hZnRlcih0aGlzLk1lc3NhZ2VDb250ZW50Q29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmosIGFyZ3MsIHJldFZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFmdGVyKHJldFZhbC5wcm9wcywgXCJjaGlsZHJlblwiLCAodCwgYSwgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXJrdXAucHJvcHMuY2hpbGRyZW4pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gbWFya3VwLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlcyB8fCAhbm9kZXMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdCgvKFteXFxzXSspKFtcXHNdfCQpL2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gdGhpcy5jYXRlZ29yaWVzLmxlbmd0aDsgYyA8IGNsZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB3ID0gMCwgd2xlbiA9IHdvcmRzLmxlbmd0aDsgdyA8IHdsZW47IHcrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGUgPSB3b3Jkc1t3XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlU3BsaXQgPSBlbW90ZS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZU5hbWUgPSBlbW90ZVNwbGl0WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVtb3RlTW9kaWZpZXIgPSBlbW90ZVNwbGl0WzFdID8gZW1vdGVTcGxpdFsxXSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW1vdGVPdmVycmlkZSA9IGVtb3RlTW9kaWZpZXIuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTmFtZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZU5hbWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZXJzLmluY2x1ZGVzKGVtb3RlTW9kaWZpZXIpIHx8ICFTZXR0aW5ncy5nZXQodGhpcy5jYXRlZ29yeSwgXCJnZW5lcmFsXCIsIFwibW9kaWZpZXJzXCIpKSBlbW90ZU1vZGlmaWVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcnJpZGVzLmluY2x1ZGVzKGVtb3RlT3ZlcnJpZGUpKSBlbW90ZU92ZXJyaWRlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZW1vdGVNb2RpZmllciA9IGVtb3RlT3ZlcnJpZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzLmNhdGVnb3JpZXNbY107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJ0d2l0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuVHdpdGNoR2xvYmFsW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaEdsb2JhbFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaFN1YnNjcmliZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwiYnR0dlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5CVFRWW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkJUVFZcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChFbW90ZXMuQlRUVjJbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiQlRUVjJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwiZmZ6XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLkZyYW5rZXJGYWNlWltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJGcmFua2VyRmFjZVpcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUVtb3Rlc1tjdXJyZW50XVtlbW90ZU5hbWVdIHx8ICFTZXR0aW5ncy5nZXQodGhpcy5jYXRlZ29yeSwgXCJjYXRlZ29yaWVzXCIsIGJkRW1vdGVTZXR0aW5nSURzW2N1cnJlbnRdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gbm9kZXNbbl0ubWF0Y2gobmV3IFJlZ0V4cChgKFtcXFxcc118Xikke1V0aWxpdGllcy5lc2NhcGUoZW1vdGVNb2RpZmllciA/IGVtb3RlTmFtZSArIFwiOlwiICsgZW1vdGVNb2RpZmllciA6IGVtb3RlTmFtZSl9KFtcXFxcc118JClgKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlID0gbm9kZXNbbl0uc3Vic3RyaW5nKDAsIHJlc3VsdHMuaW5kZXggKyByZXN1bHRzWzFdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3N0ID0gbm9kZXNbbl0uc3Vic3RyaW5nKHJlc3VsdHMuaW5kZXggKyByZXN1bHRzWzBdLmxlbmd0aCAtIHJlc3VsdHNbMl0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzW25dID0gcHJlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGVDb21wb25lbnQgPSBEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KEJERW1vdGUsIHtuYW1lOiBlbW90ZU5hbWUsIHVybDogRW1vdGVzW2N1cnJlbnRdW2Vtb3RlTmFtZV0sIG1vZGlmaWVyOiBlbW90ZU1vZGlmaWVyfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UobiArIDEsIDAsIHBvc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKG4gKyAxLCAwLCBlbW90ZUNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5RW1vdGVzID0gbm9kZXMuZXZlcnkociA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihyKSA9PSBcInN0cmluZ1wiICYmIHIucmVwbGFjZSgvXFxzKi8sIFwiXCIpID09IFwiXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIudHlwZSAmJiByLnR5cGUubmFtZSA9PSBcIkJERW1vdGVcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoci5wcm9wcyAmJiByLnByb3BzLmNoaWxkcmVuICYmIHIucHJvcHMuY2hpbGRyZW4ucHJvcHMgJiYgci5wcm9wcy5jaGlsZHJlbi5wcm9wcy5lbW9qaU5hbWUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvbmx5RW1vdGVzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPSBcIm9iamVjdFwiKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlLm5hbWUgPT0gXCJCREVtb3RlXCIpIG5vZGUucHJvcHMuanVtYm9hYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLnByb3BzICYmIG5vZGUucHJvcHMuY2hpbGRyZW4gJiYgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcyAmJiBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzLmVtb2ppTmFtZSkgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcy5qdW1ib2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkRW1vdGVEYXRhKGVtb3RlSW5mbykge1xyXG4gICAgICAgIHRoaXMuZW1vdGVzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgX2ZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgICAgIGNvbnN0IGVtb3RlRmlsZSA9IFwiZW1vdGVfZGF0YS5qc29uXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IENvbmZpZy5kYXRhUGF0aCArIGVtb3RlRmlsZTtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSBfZnMuZXhpc3RzU3luYyhmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGV4aXN0cyAmJiB0aGlzLmlzQ2FjaGVWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgIFRvYXN0cy5zaG93KFwiTG9hZGluZyBlbW90ZXMgZnJvbSBjYWNoZS5cIiwge3R5cGU6IFwiaW5mb1wifSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9nKFwiTG9hZGluZyBlbW90ZXMgZnJvbSBsb2NhbCBjYWNoZS5cIik7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfZnMucmVhZEZpbGUoZmlsZSwgXCJ1dGY4XCIsIChlcnIsIGNvbnRlbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmxvZyhcIkVtb3RlcyBsb2FkZWQgZnJvbSBjYWNoZS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgY29udGVudCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY29udGVudCk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYXJzZWQgPSBVdGlsaXRpZXMudGVzdEpTT04oZGF0YSk7XHJcbiAgICAgICAgICAgIGxldCBpc1ZhbGlkID0gISFwYXJzZWQ7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSBPYmplY3QuYXNzaWduKEVtb3RlcywgcGFyc2VkKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBpbiBlbW90ZUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBPYmplY3Qua2V5cyhFbW90ZXNbZW1vdGVJbmZvW2VdLnZhcmlhYmxlXSkubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIFRvYXN0cy5zaG93KFwiRW1vdGVzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgRXZlbnRzLmRpc3BhdGNoKFwiZW1vdGVzLWxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5sb2coXCJDYWNoZSB3YXMgY29ycnVwdCwgZG93bmxvYWRpbmcuLi5cIik7XHJcbiAgICAgICAgICAgIF9mcy51bmxpbmtTeW5jKGZpbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFTZXR0aW5ncy5nZXQodGhpcy5jYXRlZ29yeSwgXCJnZW5lcmFsXCIsIFwiZG93bmxvYWRcIikpIHJldHVybjtcclxuICAgICAgICBUb2FzdHMuc2hvdyhcIkRvd25sb2FkaW5nIGVtb3RlcyBpbiB0aGUgYmFja2dyb3VuZCBkbyBub3QgcmVsb2FkLlwiLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBlIGluIGVtb3RlSW5mbykge1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kb3dubG9hZEVtb3RlcyhlbW90ZUluZm9bZV0pO1xyXG4gICAgICAgICAgICBFbW90ZXNbZW1vdGVJbmZvW2VdLnZhcmlhYmxlXSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBUb2FzdHMuc2hvdyhcIkFsbCBlbW90ZXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG5cclxuICAgICAgICB0cnkgeyBfZnMud3JpdGVGaWxlU3luYyhmaWxlLCBKU09OLnN0cmluZ2lmeShFbW90ZXMpLCBcInV0ZjhcIik7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IHRoaXMuc3RhY2t0cmFjZShcIkNvdWxkIG5vdCBzYXZlIGVtb3RlIGRhdGEuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRFbW90ZXMoZW1vdGVNZXRhKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHVybDogZW1vdGVNZXRhLnVybCxcclxuICAgICAgICAgICAgdGltZW91dDogZW1vdGVNZXRhLnRpbWVvdXQgPyBlbW90ZU1ldGEudGltZW91dCA6IDUwMDAsXHJcbiAgICAgICAgICAgIGpzb246IHRydWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICB0aGlzLmxvZyhgRG93bmxvYWRpbmc6ICR7ZW1vdGVNZXRhLnZhcmlhYmxlfSAoJHtlbW90ZU1ldGEudXJsfSlgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyb3IsIHJlc3BvbnNlLCBwYXJzZWREYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YWNrdHJhY2UoXCJDb3VsZCBub3QgZG93bmxvYWQgXCIgKyBlbW90ZU1ldGEudmFyaWFibGUsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVNZXRhLmJhY2t1cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW90ZU1ldGEudXJsID0gZW1vdGVNZXRhLmJhY2t1cDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vdGVNZXRhLmJhY2t1cCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU1ldGEuYmFja3VwUGFyc2VyKSBlbW90ZU1ldGEucGFyc2VyID0gZW1vdGVNZXRhLmJhY2t1cFBhcnNlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5kb3dubG9hZEVtb3RlcyhlbW90ZU1ldGEpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlbW90ZU1ldGEucGFyc2VyKSA9PT0gXCJmdW5jdGlvblwiKSBwYXJzZWREYXRhID0gZW1vdGVNZXRhLnBhcnNlcihwYXJzZWREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIHBhcnNlZERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGUubGVuZ3RoIDwgNCB8fCBibGFja2xpc3QuaW5jbHVkZXMoZW1vdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWREYXRhW2Vtb3RlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGFbZW1vdGVdID0gZW1vdGVNZXRhLmdldEVtb3RlVVJMKHBhcnNlZERhdGFbZW1vdGVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUocGFyc2VkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvZyhcIkRvd25sb2FkZWQ6IFwiICsgZW1vdGVNZXRhLnZhcmlhYmxlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QmxhY2tsaXN0KCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgJC5nZXRKU09OKGBodHRwczovL3JhdWVuemkuZ2l0aHViLmlvL0JldHRlckRpc2NvcmRBcHAvZGF0YS9lbW90ZWZpbHRlci5qc29uYCwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoYmxhY2tsaXN0LnB1c2goLi4uZGF0YS5ibGFja2xpc3QpKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNDYWNoZVZhbGlkKCkge1xyXG4gICAgICAgIGNvbnN0IGNhY2hlTGVuZ3RoID0gRGF0YVN0b3JlLmdldEJERGF0YShcImVtb3RlQ2FjaGVEYXlzXCIpIHx8IERhdGFTdG9yZS5zZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF5c1wiLCA3KSB8fCA3O1xyXG4gICAgICAgIGNvbnN0IGNhY2hlRGF0ZSA9IG5ldyBEYXRlKERhdGFTdG9yZS5nZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF0ZVwiKSB8fCBudWxsKTtcclxuICAgICAgICBjb25zdCBjdXJyZW50RGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgY29uc3QgZGF5c0JldHdlZW4gPSBNYXRoLnJvdW5kKE1hdGguYWJzKChjdXJyZW50RGF0ZS5nZXRUaW1lKCkgLSBjYWNoZURhdGUuZ2V0VGltZSgpKSAvICgyNCAqIDYwICogNjAgKiAxMDAwKSkpO1xyXG4gICAgICAgIGlmIChkYXlzQmV0d2VlbiA+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_toasts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.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 = this.after(this.MessageContentComponent.prototype, \"render\", (thisObj, args, retVal) => {\n this.after(retVal.props, \"children\", (t, a, returnValue) => {\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 async loadEmoteData(emoteInfo) {\n this.emotesLoaded = false;\n\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_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(\"Loading emotes from cache.\", {\n type: \"info\"\n });\n this.log(\"Loading emotes from local cache.\");\n const data = await new Promise(resolve => {\n _fs.readFile(file, \"utf8\", (err, content) => {\n this.log(\"Emotes loaded from cache.\");\n if (err) content = {};\n resolve(content);\n });\n });\n const parsed = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].testJSON(data);\n let isValid = !!parsed;\n if (isValid) Object.assign(Emotes, parsed);\n\n for (const e in emoteInfo) {\n isValid = Object.keys(Emotes[emoteInfo[e].variable]).length > 0;\n }\n\n if (isValid) {\n _ui_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(\"Emotes successfully loaded.\", {\n type: \"success\"\n });\n this.emotesLoaded = true;\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Events\"].dispatch(\"emotes-loaded\");\n return;\n }\n\n this.log(\"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_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].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_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(\"All emotes successfully downloaded.\", {\n type: \"success\"\n });\n\n try {\n _fs.writeFileSync(file, JSON.stringify(Emotes), \"utf8\");\n } catch (err) {\n this.stacktrace(\"Could not save emote data.\", err);\n }\n\n this.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 json: true\n };\n this.log(`Downloading: ${emoteMeta.variable} (${emoteMeta.url})`);\n return new Promise((resolve, reject) => {\n request(options, (error, response, parsedData) => {\n if (error) {\n this.stacktrace(\"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 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 this.log(\"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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbIkVtb3RlcyIsIlR3aXRjaEdsb2JhbCIsIlR3aXRjaFN1YnNjcmliZXIiLCJCVFRWIiwiRnJhbmtlckZhY2VaIiwiQlRUVjIiLCJiZEVtb3RlU2V0dGluZ0lEcyIsImJsYWNrbGlzdCIsIm92ZXJyaWRlcyIsIm1vZGlmaWVycyIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwiZ2V0IiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENhdGVnb3J5IiwiaW5pdGlhbGl6ZSIsImVuYWJsZWQiLCJTZXR0aW5ncyIsInJlZ2lzdGVyQ29sbGVjdGlvbiIsIkVtb3RlQ29uZmlnIiwidGl0bGUiLCJvbkNsaWNrIiwiY2xlYXJFbW90ZURhdGEiLCJsb2FkRW1vdGVEYXRhIiwiRW1vdGVJbmZvIiwiZGlzYWJsZWQiLCJyZW1vdmVDb2xsZWN0aW9uIiwiZW1wdHlFbW90ZXMiLCJjYW5jZWxFbW90ZVJlbmRlciIsImNhdCIsImFzc2lnbiIsInBhdGNoTWVzc2FnZUNvbnRlbnQiLCJhZnRlciIsInByb3RvdHlwZSIsInRoaXNPYmoiLCJhcmdzIiwicmV0VmFsIiwicHJvcHMiLCJ0IiwiYSIsInJldHVyblZhbHVlIiwibGVuZ3RoIiwibWFya3VwIiwiY2hpbGRyZW4iLCJub2RlcyIsIm4iLCJub2RlIiwid29yZHMiLCJzcGxpdCIsImMiLCJjbGVuIiwidyIsIndsZW4iLCJlbW90ZSIsImVtb3RlU3BsaXQiLCJlbW90ZU5hbWUiLCJlbW90ZU1vZGlmaWVyIiwiZW1vdGVPdmVycmlkZSIsInNsaWNlIiwiaW5jbHVkZXMiLCJjdXJyZW50IiwicmVzdWx0cyIsIm1hdGNoIiwiUmVnRXhwIiwiVXRpbGl0aWVzIiwiZXNjYXBlIiwicHJlIiwic3Vic3RyaW5nIiwiaW5kZXgiLCJwb3N0IiwiZW1vdGVDb21wb25lbnQiLCJEaXNjb3JkTW9kdWxlcyIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIkJERW1vdGUiLCJ1cmwiLCJtb2RpZmllciIsInNwbGljZSIsIm9ubHlFbW90ZXMiLCJldmVyeSIsInIiLCJyZXBsYWNlIiwidHlwZSIsImVtb2ppTmFtZSIsImp1bWJvYWJsZSIsImVtb3RlSW5mbyIsImVtb3Rlc0xvYWRlZCIsIl9mcyIsInJlcXVpcmUiLCJlbW90ZUZpbGUiLCJmaWxlIiwiQ29uZmlnIiwiZGF0YVBhdGgiLCJleGlzdHMiLCJleGlzdHNTeW5jIiwiaXNDYWNoZVZhbGlkIiwiVG9hc3RzIiwic2hvdyIsImxvZyIsImRhdGEiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlYWRGaWxlIiwiZXJyIiwiY29udGVudCIsInBhcnNlZCIsInRlc3RKU09OIiwiaXNWYWxpZCIsImUiLCJ2YXJpYWJsZSIsIkV2ZW50cyIsImRpc3BhdGNoIiwidW5saW5rU3luYyIsInNldFRpbWVvdXQiLCJkb3dubG9hZEVtb3RlcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5Iiwic3RhY2t0cmFjZSIsImVtb3RlTWV0YSIsInJlcXVlc3QiLCJvcHRpb25zIiwidGltZW91dCIsImpzb24iLCJyZWplY3QiLCJlcnJvciIsInJlc3BvbnNlIiwicGFyc2VkRGF0YSIsImJhY2t1cCIsImJhY2t1cFBhcnNlciIsInBhcnNlciIsImdldEVtb3RlVVJMIiwiZ2V0QmxhY2tsaXN0IiwiJCIsImdldEpTT04iLCJwdXNoIiwiY2FjaGVMZW5ndGgiLCJEYXRhU3RvcmUiLCJnZXRCRERhdGEiLCJzZXRCRERhdGEiLCJjYWNoZURhdGUiLCJEYXRlIiwiY3VycmVudERhdGUiLCJkYXlzQmV0d2VlbiIsIk1hdGgi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VUFBTUMsU0FBUyxHQUFHLGlCQUFsQjtBQUNBLFVBQU1DLElBQUksR0FBR0MsMkNBQU0sQ0FBQ0MsUUFBUCxHQUFrQkgsU0FBL0I7O0FBQ0EsVUFBTUksTUFBTSxHQUFHTixHQUFHLENBQUNPLFVBQUosQ0FBZUosSUFBZixDQUFmOztBQUNBLFFBQUlHLE1BQUosRUFBWU4sR0FBRyxDQUFDeUIsVUFBSixDQUFldEIsSUFBZjtBQUNaK0MscURBQVMsQ0FBQ0UsU0FBVixDQUFvQixnQkFBcEIsRUFBdUMsSUFBSUUsSUFBSixFQUFELENBQWFPLE1BQWIsRUFBdEM7O0FBQ0EsU0FBSyxNQUFNckosUUFBWCxJQUF1QmQsTUFBdkIsRUFBK0JpQixNQUFNLENBQUM0QixNQUFQLENBQWM3QyxNQUFkLEVBQXNCO0FBQUMsT0FBQ2MsUUFBRCxHQUFZO0FBQWIsS0FBdEI7QUFDbEM7O0FBdlBnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmltcG9ydCB7Q29uZmlnLCBFbW90ZUluZm8sIEVtb3RlQ29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1V0aWxpdGllcywgV2VicGFja01vZHVsZXMsIERhdGFTdG9yZSwgRGlzY29yZE1vZHVsZXMsIEV2ZW50cywgU2V0dGluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBCREVtb3RlIGZyb20gXCIuLi91aS9lbW90ZVwiO1xyXG5pbXBvcnQgVG9hc3RzIGZyb20gXCIuLi91aS90b2FzdHNcIjtcclxuXHJcbmNvbnN0IEVtb3RlcyA9IHtcclxuICAgIFR3aXRjaEdsb2JhbDoge30sXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiB7fSxcclxuICAgIEJUVFY6IHt9LFxyXG4gICAgRnJhbmtlckZhY2VaOiB7fSxcclxuICAgIEJUVFYyOiB7fVxyXG59O1xyXG5cclxuY29uc3QgYmRFbW90ZVNldHRpbmdJRHMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IFwidHdpdGNoXCIsXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiBcInR3aXRjaFwiLFxyXG4gICAgQlRUVjogXCJidHR2XCIsXHJcbiAgICBGcmFua2VyRmFjZVo6IFwiZmZ6XCIsXHJcbiAgICBCVFRWMjogXCJidHR2XCJcclxufTtcclxuXHJcbmNvbnN0IGJsYWNrbGlzdCA9IFtdO1xyXG5jb25zdCBvdmVycmlkZXMgPSBbXCJ0d2l0Y2hcIiwgXCJidHR2XCIsIFwiZmZ6XCJdO1xyXG5jb25zdCBtb2RpZmllcnMgPSBbXCJmbGlwXCIsIFwic3BpblwiLCBcInB1bHNlXCIsIFwic3BpbjJcIiwgXCJzcGluM1wiLCBcIjFzcGluXCIsIFwiMnNwaW5cIiwgXCIzc3BpblwiLCBcInRyXCIsIFwiYmxcIiwgXCJiclwiLCBcInNoYWtlXCIsIFwic2hha2UyXCIsIFwic2hha2UzXCIsIFwiZmxhcFwiXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW90ZU1vZHVsZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcmllcygpIHsgcmV0dXJuIE9iamVjdC5rZXlzKGJkRW1vdGVTZXR0aW5nSURzKS5maWx0ZXIoayA9PiB0aGlzLmlzQ2F0ZWdvcnlFbmFibGVkKGJkRW1vdGVTZXR0aW5nSURzW2tdKSk7IH1cclxuXHJcbiAgICBpc0NhdGVnb3J5RW5hYmxlZChpZCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXQoXCJlbW90ZXNcIiwgXCJjYXRlZ29yaWVzXCIsIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoaWQpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KFwiZW1vdGVzXCIsIFwiZ2VuZXJhbFwiLCBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcblxyXG4gICAgZ2V0IEVtb3RlcygpIHtyZXR1cm4gRW1vdGVzO31cclxuICAgIGdldCBUd2l0Y2hHbG9iYWwoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hHbG9iYWw7fVxyXG4gICAgZ2V0IFR3aXRjaFN1YnNjcmliZXIoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyO31cclxuICAgIGdldCBCVFRWKCkge3JldHVybiBFbW90ZXMuQlRUVjt9XHJcbiAgICBnZXQgRnJhbmtlckZhY2VaKCkge3JldHVybiBFbW90ZXMuRnJhbmtlckZhY2VaO31cclxuICAgIGdldCBCVFRWMigpIHtyZXR1cm4gRW1vdGVzLkJUVFYyO31cclxuICAgIGdldCBibGFja2xpc3QoKSB7cmV0dXJuIGJsYWNrbGlzdDt9XHJcblxyXG4gICAgZ2V0Q2F0ZWdvcnkoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gRW1vdGVzW2NhdGVnb3J5XTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICAvLyBFbW90ZUNvbmZpZztcclxuICAgICAgICAvLyBlbW90ZUNvbGxlY3Rpb24uYnV0dG9uID0ge3RpdGxlOiBcIkNsZWFyIEVtb3RlIENhY2hlXCIsIG9uQ2xpY2s6ICgpID0+IHsgdGhpcy5jbGVhckVtb3RlRGF0YSgpOyB0aGlzLmxvYWRFbW90ZURhdGEoRW1vdGVJbmZvKTsgfX07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlckNvbGxlY3Rpb24oXCJlbW90ZXNcIiwgXCJFbW90ZXNcIiwgRW1vdGVDb25maWcsIHt0aXRsZTogXCJDbGVhciBFbW90ZSBDYWNoZVwiLCBvbkNsaWNrOiAoKSA9PiB7IHRoaXMuY2xlYXJFbW90ZURhdGEoKTsgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7IH19KTtcclxuICAgICAgICAvLyBEaXNhYmxlIGVtb3RlIG1vZHVsZSBmb3Igbm93IGJlY2F1c2UgaXQncyBhbm5veWluZyBhbmQgc2xvd1xyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QmxhY2tsaXN0KCk7XHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7XHJcblxyXG4gICAgICAgIC8vIHdoaWxlICghdGhpcy5NZXNzYWdlQ29udGVudENvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG4gICAgICAgIC8vIHRoaXMucGF0Y2hNZXNzYWdlQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZUNvbGxlY3Rpb24oXCJlbW90ZXNcIik7XHJcbiAgICAgICAgdGhpcy5lbXB0eUVtb3RlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBlbXB0eUVtb3RlcygpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdCBpbiBFbW90ZXMpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCB7W2NhdF06IHt9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hNZXNzYWdlQ29udGVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSB0aGlzLmFmdGVyKHRoaXMuTWVzc2FnZUNvbnRlbnRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iaiwgYXJncywgcmV0VmFsKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYWZ0ZXIocmV0VmFsLnByb3BzLCBcImNoaWxkcmVuXCIsICh0LCBhLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2F0ZWdvcmllcy5sZW5ndGggPT0gMCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFya3VwID0gcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW1hcmt1cC5wcm9wcy5jaGlsZHJlbikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9kZXMgPSBtYXJrdXAucHJvcHMuY2hpbGRyZW5bMV07XHJcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGVzIHx8ICFub2Rlcy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgbm9kZXMubGVuZ3RoOyBuKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXNbbl07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPT0gXCJzdHJpbmdcIikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd29yZHMgPSBub2RlLnNwbGl0KC8oW15cXHNdKykoW1xcc118JCkvZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgYyA9IDAsIGNsZW4gPSB0aGlzLmNhdGVnb3JpZXMubGVuZ3RoOyBjIDwgY2xlbjsgYysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IHcgPSAwLCB3bGVuID0gd29yZHMubGVuZ3RoOyB3IDwgd2xlbjsgdysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZSA9IHdvcmRzW3ddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGVTcGxpdCA9IGVtb3RlLnNwbGl0KFwiOlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlTmFtZSA9IGVtb3RlU3BsaXRbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW1vdGVNb2RpZmllciA9IGVtb3RlU3BsaXRbMV0gPyBlbW90ZVNwbGl0WzFdIDogXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbW90ZU92ZXJyaWRlID0gZW1vdGVNb2RpZmllci5zbGljZSgwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVOYW1lLmxlbmd0aCA8IDQgfHwgYmxhY2tsaXN0LmluY2x1ZGVzKGVtb3RlTmFtZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllcnMuaW5jbHVkZXMoZW1vdGVNb2RpZmllcikgfHwgIVNldHRpbmdzLmdldCh0aGlzLmNhdGVnb3J5LCBcImdlbmVyYWxcIiwgXCJtb2RpZmllcnNcIikpIGVtb3RlTW9kaWZpZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdmVycmlkZXMuaW5jbHVkZXMoZW1vdGVPdmVycmlkZSkpIGVtb3RlT3ZlcnJpZGUgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBlbW90ZU1vZGlmaWVyID0gZW1vdGVPdmVycmlkZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3VycmVudCA9IHRoaXMuY2F0ZWdvcmllc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU92ZXJyaWRlID09PSBcInR3aXRjaFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5Ud2l0Y2hHbG9iYWxbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiVHdpdGNoR2xvYmFsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRW1vdGVzLlR3aXRjaFN1YnNjcmliZXJbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiVHdpdGNoU3Vic2NyaWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJidHR2XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLkJUVFZbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiQlRUVlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEVtb3Rlcy5CVFRWMltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJCVFRWMlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJmZnpcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuRnJhbmtlckZhY2VaW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkZyYW5rZXJGYWNlWlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghRW1vdGVzW2N1cnJlbnRdW2Vtb3RlTmFtZV0gfHwgIVNldHRpbmdzLmdldCh0aGlzLmNhdGVnb3J5LCBcImNhdGVnb3JpZXNcIiwgYmRFbW90ZVNldHRpbmdJRHNbY3VycmVudF0pKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdHMgPSBub2Rlc1tuXS5tYXRjaChuZXcgUmVnRXhwKGAoW1xcXFxzXXxeKSR7VXRpbGl0aWVzLmVzY2FwZShlbW90ZU1vZGlmaWVyID8gZW1vdGVOYW1lICsgXCI6XCIgKyBlbW90ZU1vZGlmaWVyIDogZW1vdGVOYW1lKX0oW1xcXFxzXXwkKWApKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghcmVzdWx0cykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwcmUgPSBub2Rlc1tuXS5zdWJzdHJpbmcoMCwgcmVzdWx0cy5pbmRleCArIHJlc3VsdHNbMV0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc3QgPSBub2Rlc1tuXS5zdWJzdHJpbmcocmVzdWx0cy5pbmRleCArIHJlc3VsdHNbMF0ubGVuZ3RoIC0gcmVzdWx0c1syXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXNbbl0gPSBwcmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZUNvbXBvbmVudCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQkRFbW90ZSwge25hbWU6IGVtb3RlTmFtZSwgdXJsOiBFbW90ZXNbY3VycmVudF1bZW1vdGVOYW1lXSwgbW9kaWZpZXI6IGVtb3RlTW9kaWZpZXJ9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShuICsgMSwgMCwgcG9zdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UobiArIDEsIDAsIGVtb3RlQ29tcG9uZW50KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IG9ubHlFbW90ZXMgPSBub2Rlcy5ldmVyeShyID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKHIpID09IFwic3RyaW5nXCIgJiYgci5yZXBsYWNlKC9cXHMqLywgXCJcIikgPT0gXCJcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoci50eXBlICYmIHIudHlwZS5uYW1lID09IFwiQkRFbW90ZVwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyLnByb3BzICYmIHIucHJvcHMuY2hpbGRyZW4gJiYgci5wcm9wcy5jaGlsZHJlbi5wcm9wcyAmJiByLnByb3BzLmNoaWxkcmVuLnByb3BzLmVtb2ppTmFtZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIW9ubHlFbW90ZXMpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2Ygbm9kZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9IFwib2JqZWN0XCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChub2RlLnR5cGUubmFtZSA9PSBcIkJERW1vdGVcIikgbm9kZS5wcm9wcy5qdW1ib2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5vZGUucHJvcHMgJiYgbm9kZS5wcm9wcy5jaGlsZHJlbiAmJiBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzICYmIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMuZW1vamlOYW1lKSBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzLmp1bWJvYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRFbW90ZURhdGEoZW1vdGVJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBfZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICAgICAgY29uc3QgZW1vdGVGaWxlID0gXCJlbW90ZV9kYXRhLmpzb25cIjtcclxuICAgICAgICBjb25zdCBmaWxlID0gQ29uZmlnLmRhdGFQYXRoICsgZW1vdGVGaWxlO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IF9mcy5leGlzdHNTeW5jKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoZXhpc3RzICYmIHRoaXMuaXNDYWNoZVZhbGlkKCkpIHtcclxuICAgICAgICAgICAgVG9hc3RzLnNob3coXCJMb2FkaW5nIGVtb3RlcyBmcm9tIGNhY2hlLlwiLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuICAgICAgICAgICAgdGhpcy5sb2coXCJMb2FkaW5nIGVtb3RlcyBmcm9tIGxvY2FsIGNhY2hlLlwiKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgICAgIF9mcy5yZWFkRmlsZShmaWxlLCBcInV0ZjhcIiwgKGVyciwgY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nKFwiRW1vdGVzIGxvYWRlZCBmcm9tIGNhY2hlLlwiKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyKSBjb250ZW50ID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb250ZW50KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IFV0aWxpdGllcy50ZXN0SlNPTihkYXRhKTtcclxuICAgICAgICAgICAgbGV0IGlzVmFsaWQgPSAhIXBhcnNlZDtcclxuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCBwYXJzZWQpO1xyXG5cclxuICAgICAgICAgICAgZm9yIChjb25zdCBlIGluIGVtb3RlSW5mbykge1xyXG4gICAgICAgICAgICAgICAgaXNWYWxpZCA9IE9iamVjdC5rZXlzKEVtb3Rlc1tlbW90ZUluZm9bZV0udmFyaWFibGVdKS5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICAgICAgICAgICAgVG9hc3RzLnNob3coXCJFbW90ZXMgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVtb3Rlc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBFdmVudHMuZGlzcGF0Y2goXCJlbW90ZXMtbG9hZGVkXCIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvZyhcIkNhY2hlIHdhcyBjb3JydXB0LCBkb3dubG9hZGluZy4uLlwiKTtcclxuICAgICAgICAgICAgX2ZzLnVubGlua1N5bmMoZmlsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIVNldHRpbmdzLmdldCh0aGlzLmNhdGVnb3J5LCBcImdlbmVyYWxcIiwgXCJkb3dubG9hZFwiKSkgcmV0dXJuO1xyXG4gICAgICAgIFRvYXN0cy5zaG93KFwiRG93bmxvYWRpbmcgZW1vdGVzIGluIHRoZSBiYWNrZ3JvdW5kIGRvIG5vdCByZWxvYWQuXCIsIHt0eXBlOiBcImluZm9cIn0pO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGUgaW4gZW1vdGVJbmZvKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMDAwKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRvd25sb2FkRW1vdGVzKGVtb3RlSW5mb1tlXSk7XHJcbiAgICAgICAgICAgIEVtb3Rlc1tlbW90ZUluZm9bZV0udmFyaWFibGVdID0gZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFRvYXN0cy5zaG93KFwiQWxsIGVtb3RlcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZC5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcblxyXG4gICAgICAgIHRyeSB7IF9mcy53cml0ZUZpbGVTeW5jKGZpbGUsIEpTT04uc3RyaW5naWZ5KEVtb3RlcyksIFwidXRmOFwiKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgdGhpcy5zdGFja3RyYWNlKFwiQ291bGQgbm90IHNhdmUgZW1vdGUgZGF0YS5cIiwgZXJyKTsgfVxyXG5cclxuICAgICAgICB0aGlzLmVtb3Rlc0xvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgRXZlbnRzLmRpc3BhdGNoKFwiZW1vdGVzLWxvYWRlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkb3dubG9hZEVtb3RlcyhlbW90ZU1ldGEpIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7XHJcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcclxuICAgICAgICAgICAgdXJsOiBlbW90ZU1ldGEudXJsLFxyXG4gICAgICAgICAgICB0aW1lb3V0OiBlbW90ZU1ldGEudGltZW91dCA/IGVtb3RlTWV0YS50aW1lb3V0IDogNTAwMCxcclxuICAgICAgICAgICAganNvbjogdHJ1ZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMubG9nKGBEb3dubG9hZGluZzogJHtlbW90ZU1ldGEudmFyaWFibGV9ICgke2Vtb3RlTWV0YS51cmx9KWApO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnJvciwgcmVzcG9uc2UsIHBhcnNlZERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2t0cmFjZShcIkNvdWxkIG5vdCBkb3dubG9hZCBcIiArIGVtb3RlTWV0YS52YXJpYWJsZSwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU1ldGEuYmFja3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb3RlTWV0YS51cmwgPSBlbW90ZU1ldGEuYmFja3VwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW90ZU1ldGEuYmFja3VwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTWV0YS5iYWNrdXBQYXJzZXIpIGVtb3RlTWV0YS5wYXJzZXIgPSBlbW90ZU1ldGEuYmFja3VwUGFyc2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmRvd25sb2FkRW1vdGVzKGVtb3RlTWV0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGVtb3RlTWV0YS5wYXJzZXIpID09PSBcImZ1bmN0aW9uXCIpIHBhcnNlZERhdGEgPSBlbW90ZU1ldGEucGFyc2VyKHBhcnNlZERhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFbZW1vdGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YVtlbW90ZV0gPSBlbW90ZU1ldGEuZ2V0RW1vdGVVUkwocGFyc2VkRGF0YVtlbW90ZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwYXJzZWREYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubG9nKFwiRG93bmxvYWRlZDogXCIgKyBlbW90ZU1ldGEudmFyaWFibGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCbGFja2xpc3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAkLmdldEpTT04oYGh0dHBzOi8vcmF1ZW56aS5naXRodWIuaW8vQmV0dGVyRGlzY29yZEFwcC9kYXRhL2Vtb3RlZmlsdGVyLmpzb25gLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShibGFja2xpc3QucHVzaCguLi5kYXRhLmJsYWNrbGlzdCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0NhY2hlVmFsaWQoKSB7XHJcbiAgICAgICAgY29uc3QgY2FjaGVMZW5ndGggPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiZW1vdGVDYWNoZURheXNcIikgfHwgRGF0YVN0b3JlLnNldEJERGF0YShcImVtb3RlQ2FjaGVEYXlzXCIsIDcpIHx8IDc7XHJcbiAgICAgICAgY29uc3QgY2FjaGVEYXRlID0gbmV3IERhdGUoRGF0YVN0b3JlLmdldEJERGF0YShcImVtb3RlQ2FjaGVEYXRlXCIpIHx8IG51bGwpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBkYXlzQmV0d2VlbiA9IE1hdGgucm91bmQoTWF0aC5hYnMoKGN1cnJlbnREYXRlLmdldFRpbWUoKSAtIGNhY2hlRGF0ZS5nZXRUaW1lKCkpIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKSk7XHJcbiAgICAgICAgaWYgKGRheXNCZXR3ZWVuID4gY2FjaGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImVtb3RlQ2FjaGVEYXRlXCIsIGN1cnJlbnREYXRlLnRvSlNPTigpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckVtb3RlRGF0YSgpIHtcclxuICAgICAgICBjb25zdCBfZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICAgICAgY29uc3QgZW1vdGVGaWxlID0gXCJlbW90ZV9kYXRhLmpzb25cIjtcclxuICAgICAgICBjb25zdCBmaWxlID0gQ29uZmlnLmRhdGFQYXRoICsgZW1vdGVGaWxlO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IF9mcy5leGlzdHNTeW5jKGZpbGUpO1xyXG4gICAgICAgIGlmIChleGlzdHMpIF9mcy51bmxpbmtTeW5jKGZpbGUpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF0ZVwiLCAobmV3IERhdGUoKSkudG9KU09OKCkpO1xyXG4gICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgaW4gRW1vdGVzKSBPYmplY3QuYXNzaWduKEVtb3Rlcywge1tjYXRlZ29yeV06IHt9fSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes.js\n"); /***/ }), @@ -227,7 +227,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 modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\nconst LayerStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"pushLayer\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PublicServers extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"PublicServers\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"publicServers\";\n }\n\n enabled() {\n const wrapper = modules__WEBPACK_IMPORTED_MODULE_1__[\"BDV2\"].guildClasses.wrapper.split(\" \")[0];\n const guilds = $(`.${wrapper} .scroller-2FKFPG >:first-child`);\n guilds.after(this.button);\n }\n\n disabled() {\n $(\"#bd-pub-li\").remove();\n }\n\n openPublicServers() {\n LayerStack.pushLayer(() => modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React.createElement(ui__WEBPACK_IMPORTED_MODULE_2__[\"PublicServersMenu\"], {\n close: LayerStack.popLayer\n }));\n }\n\n get button() {\n const btn = $(\"
\", {\n \"class\": modules__WEBPACK_IMPORTED_MODULE_1__[\"BDV2\"].guildClasses.listItem,\n \"id\": \"bd-pub-li\"\n }).append($(\"
\", {\n \"class\": \"wrapper-25eVIn \" + modules__WEBPACK_IMPORTED_MODULE_1__[\"BDV2\"].guildClasses.circleButtonMask,\n \"text\": \"public\",\n \"id\": \"bd-pub-button\",\n \"click\": () => {\n this.openPublicServers();\n }\n }));\n return btn;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3B1YmxpY3NlcnZlcnMuanM/MWY2NSJdLCJuYW1lcyI6WyJMYXllclN0YWNrIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiUHVibGljU2VydmVycyIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCJ3cmFwcGVyIiwiQkRWMiIsImd1aWxkQ2xhc3NlcyIsInNwbGl0IiwiZ3VpbGRzIiwiJCIsImFmdGVyIiwiYnV0dG9uIiwiZGlzYWJsZWQiLCJyZW1vdmUiLCJvcGVuUHVibGljU2VydmVycyIsInB1c2hMYXllciIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiUHVibGljU2VydmVyc01lbnUiLCJjbG9zZSIsInBvcExheWVyIiwiYnRuIiwibGlzdEl0ZW0iLCJhcHBlbmQiLCJjaXJjbGVCdXR0b25NYXNrIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFVBQVUsR0FBR0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixXQUExQixDQUFuQjtBQUVlLG1FQUFJLE1BQU1DLGFBQU4sU0FBNEJDLHdEQUE1QixDQUFvQztBQUNuRCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBQ3BDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sU0FBUDtBQUFrQjs7QUFDbEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxlQUFQO0FBQXdCOztBQUVsQ0MsU0FBTyxHQUFHO0FBQ04sVUFBTUMsT0FBTyxHQUFHQyw0Q0FBSSxDQUFDQyxZQUFMLENBQWtCRixPQUFsQixDQUEwQkcsS0FBMUIsQ0FBZ0MsR0FBaEMsRUFBcUMsQ0FBckMsQ0FBaEI7QUFDQSxVQUFNQyxNQUFNLEdBQUdDLENBQUMsQ0FBRSxJQUFHTCxPQUFRLGlDQUFiLENBQWhCO0FBQ0FJLFVBQU0sQ0FBQ0UsS0FBUCxDQUFhLEtBQUtDLE1BQWxCO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQSCxLQUFDLENBQUMsWUFBRCxDQUFELENBQWdCSSxNQUFoQjtBQUNIOztBQUVEQyxtQkFBaUIsR0FBRztBQUNoQm5CLGNBQVUsQ0FBQ29CLFNBQVgsQ0FBcUIsTUFBTUMsc0RBQWMsQ0FBQ0MsS0FBZixDQUFxQkMsYUFBckIsQ0FBbUNDLG9EQUFuQyxFQUFzRDtBQUFDQyxXQUFLLEVBQUV6QixVQUFVLENBQUMwQjtBQUFuQixLQUF0RCxDQUEzQjtBQUNIOztBQUVELE1BQUlWLE1BQUosR0FBYTtBQUNULFVBQU1XLEdBQUcsR0FBR2IsQ0FBQyxDQUFDLFFBQUQsRUFBVztBQUNwQixlQUFTSiw0Q0FBSSxDQUFDQyxZQUFMLENBQWtCaUIsUUFEUDtBQUVwQixZQUFNO0FBRmMsS0FBWCxDQUFELENBR1RDLE1BSFMsQ0FHRmYsQ0FBQyxDQUFDLFFBQUQsRUFBVztBQUNsQixlQUFTLG9CQUFvQkosNENBQUksQ0FBQ0MsWUFBTCxDQUFrQm1CLGdCQUQ3QjtBQUVsQixjQUFRLFFBRlU7QUFHbEIsWUFBTSxlQUhZO0FBSWxCLGVBQVMsTUFBTTtBQUFFLGFBQUtYLGlCQUFMO0FBQTJCO0FBSjFCLEtBQVgsQ0FIQyxDQUFaO0FBVUEsV0FBT1EsR0FBUDtBQUNIOztBQS9Ca0QsQ0FBeEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9wdWJsaWNzZXJ2ZXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge0JEVjIsIERpc2NvcmRNb2R1bGVzLCBXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IHtQdWJsaWNTZXJ2ZXJzTWVudX0gZnJvbSBcInVpXCI7XHJcblxyXG5jb25zdCBMYXllclN0YWNrID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInB1c2hMYXllclwiKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBQdWJsaWNTZXJ2ZXJzIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJQdWJsaWNTZXJ2ZXJzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwicHVibGljU2VydmVyc1wiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSBCRFYyLmd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSAkKGAuJHt3cmFwcGVyfSAuc2Nyb2xsZXItMkZLRlBHID46Zmlyc3QtY2hpbGRgKTtcclxuICAgICAgICBndWlsZHMuYWZ0ZXIodGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgICQoXCIjYmQtcHViLWxpXCIpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5QdWJsaWNTZXJ2ZXJzKCkge1xyXG4gICAgICAgIExheWVyU3RhY2sucHVzaExheWVyKCgpID0+IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoUHVibGljU2VydmVyc01lbnUsIHtjbG9zZTogTGF5ZXJTdGFjay5wb3BMYXllcn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ0biA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICBcImNsYXNzXCI6IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLFxyXG4gICAgICAgICAgICBcImlkXCI6IFwiYmQtcHViLWxpXCJcclxuICAgICAgICB9KS5hcHBlbmQoJChcIjxkaXYvPlwiLCB7XHJcbiAgICAgICAgICAgIFwiY2xhc3NcIjogXCJ3cmFwcGVyLTI1ZVZJbiBcIiArIEJEVjIuZ3VpbGRDbGFzc2VzLmNpcmNsZUJ1dHRvbk1hc2ssXHJcbiAgICAgICAgICAgIFwidGV4dFwiOiBcInB1YmxpY1wiLFxyXG4gICAgICAgICAgICBcImlkXCI6IFwiYmQtcHViLWJ1dHRvblwiLFxyXG4gICAgICAgICAgICBcImNsaWNrXCI6ICgpID0+IHsgdGhpcy5vcGVuUHVibGljU2VydmVycygpOyB9XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgICByZXR1cm4gYnRuO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/publicservers.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 _ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/publicservers/menu */ \"./src/ui/publicservers/menu.js\");\n\n\n\nconst LayerStack = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"pushLayer\");\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class PublicServers extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"PublicServers\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"publicServers\";\n }\n\n enabled() {\n const wrapper = modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.wrapper.split(\" \")[0];\n const guilds = $(`.${wrapper} .scroller-2FKFPG >:first-child`);\n guilds.after(this.button);\n }\n\n disabled() {\n $(\"#bd-pub-li\").remove();\n }\n\n openPublicServers() {\n LayerStack.pushLayer(() => modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React.createElement(_ui_publicservers_menu__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n close: LayerStack.popLayer\n }));\n }\n\n get button() {\n const btn = $(\"
\", {\n \"class\": modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.listItem,\n \"id\": \"bd-pub-li\"\n }).append($(\"
\", {\n \"class\": \"wrapper-25eVIn \" + modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].GuildClasses.circleButtonMask,\n \"text\": \"public\",\n \"id\": \"bd-pub-button\",\n \"click\": () => {\n this.openPublicServers();\n }\n }));\n return btn;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3B1YmxpY3NlcnZlcnMuanM/MWY2NSJdLCJuYW1lcyI6WyJMYXllclN0YWNrIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiUHVibGljU2VydmVycyIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCJ3cmFwcGVyIiwiRGlzY29yZE1vZHVsZXMiLCJHdWlsZENsYXNzZXMiLCJzcGxpdCIsImd1aWxkcyIsIiQiLCJhZnRlciIsImJ1dHRvbiIsImRpc2FibGVkIiwicmVtb3ZlIiwib3BlblB1YmxpY1NlcnZlcnMiLCJwdXNoTGF5ZXIiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJQdWJsaWNTZXJ2ZXJzTWVudSIsImNsb3NlIiwicG9wTGF5ZXIiLCJidG4iLCJsaXN0SXRlbSIsImFwcGVuZCIsImNpcmNsZUJ1dHRvbk1hc2siXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUEsTUFBTUEsVUFBVSxHQUFHQyxzREFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLENBQW5CO0FBRWUsbUVBQUksTUFBTUMsYUFBTixTQUE0QkMsd0RBQTVCLENBQW9DO0FBQ25ELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sZUFBUDtBQUF3Qjs7QUFDcEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBRWxDQyxTQUFPLEdBQUc7QUFDTixVQUFNQyxPQUFPLEdBQUdDLHNEQUFjLENBQUNDLFlBQWYsQ0FBNEJGLE9BQTVCLENBQW9DRyxLQUFwQyxDQUEwQyxHQUExQyxFQUErQyxDQUEvQyxDQUFoQjtBQUNBLFVBQU1DLE1BQU0sR0FBR0MsQ0FBQyxDQUFFLElBQUdMLE9BQVEsaUNBQWIsQ0FBaEI7QUFDQUksVUFBTSxDQUFDRSxLQUFQLENBQWEsS0FBS0MsTUFBbEI7QUFDSDs7QUFFREMsVUFBUSxHQUFHO0FBQ1BILEtBQUMsQ0FBQyxZQUFELENBQUQsQ0FBZ0JJLE1BQWhCO0FBQ0g7O0FBRURDLG1CQUFpQixHQUFHO0FBQ2hCbkIsY0FBVSxDQUFDb0IsU0FBWCxDQUFxQixNQUFNVixzREFBYyxDQUFDVyxLQUFmLENBQXFCQyxhQUFyQixDQUFtQ0MsOERBQW5DLEVBQXNEO0FBQUNDLFdBQUssRUFBRXhCLFVBQVUsQ0FBQ3lCO0FBQW5CLEtBQXRELENBQTNCO0FBQ0g7O0FBRUQsTUFBSVQsTUFBSixHQUFhO0FBQ1QsVUFBTVUsR0FBRyxHQUFHWixDQUFDLENBQUMsUUFBRCxFQUFXO0FBQ3BCLGVBQVNKLHNEQUFjLENBQUNDLFlBQWYsQ0FBNEJnQixRQURqQjtBQUVwQixZQUFNO0FBRmMsS0FBWCxDQUFELENBR1RDLE1BSFMsQ0FHRmQsQ0FBQyxDQUFDLFFBQUQsRUFBVztBQUNsQixlQUFTLG9CQUFvQkosc0RBQWMsQ0FBQ0MsWUFBZixDQUE0QmtCLGdCQUR2QztBQUVsQixjQUFRLFFBRlU7QUFHbEIsWUFBTSxlQUhZO0FBSWxCLGVBQVMsTUFBTTtBQUFFLGFBQUtWLGlCQUFMO0FBQTJCO0FBSjFCLEtBQVgsQ0FIQyxDQUFaO0FBVUEsV0FBT08sR0FBUDtBQUNIOztBQS9Ca0QsQ0FBeEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9wdWJsaWNzZXJ2ZXJzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge0Rpc2NvcmRNb2R1bGVzLCBXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IFB1YmxpY1NlcnZlcnNNZW51IGZyb20gXCIuLi91aS9wdWJsaWNzZXJ2ZXJzL21lbnVcIjtcclxuXHJcbmNvbnN0IExheWVyU3RhY2sgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicHVzaExheWVyXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFB1YmxpY1NlcnZlcnMgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlB1YmxpY1NlcnZlcnNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJwdWJsaWNTZXJ2ZXJzXCI7fVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgY29uc3Qgd3JhcHBlciA9IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy53cmFwcGVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCBndWlsZHMgPSAkKGAuJHt3cmFwcGVyfSAuc2Nyb2xsZXItMkZLRlBHID46Zmlyc3QtY2hpbGRgKTtcclxuICAgICAgICBndWlsZHMuYWZ0ZXIodGhpcy5idXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgICQoXCIjYmQtcHViLWxpXCIpLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5QdWJsaWNTZXJ2ZXJzKCkge1xyXG4gICAgICAgIExheWVyU3RhY2sucHVzaExheWVyKCgpID0+IERpc2NvcmRNb2R1bGVzLlJlYWN0LmNyZWF0ZUVsZW1lbnQoUHVibGljU2VydmVyc01lbnUsIHtjbG9zZTogTGF5ZXJTdGFjay5wb3BMYXllcn0pKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYnV0dG9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ0biA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICBcImNsYXNzXCI6IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5saXN0SXRlbSxcclxuICAgICAgICAgICAgXCJpZFwiOiBcImJkLXB1Yi1saVwiXHJcbiAgICAgICAgfSkuYXBwZW5kKCQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICBcImNsYXNzXCI6IFwid3JhcHBlci0yNWVWSW4gXCIgKyBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMuY2lyY2xlQnV0dG9uTWFzayxcclxuICAgICAgICAgICAgXCJ0ZXh0XCI6IFwicHVibGljXCIsXHJcbiAgICAgICAgICAgIFwiaWRcIjogXCJiZC1wdWItYnV0dG9uXCIsXHJcbiAgICAgICAgICAgIFwiY2xpY2tcIjogKCkgPT4geyB0aGlzLm9wZW5QdWJsaWNTZXJ2ZXJzKCk7IH1cclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICAgIHJldHVybiBidG47XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/publicservers.js\n"); /***/ }), @@ -347,7 +347,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 import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _pluginapi__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/icons/bdlogo */ \"./src/ui/icons/bdlogo.jsx\");\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class V2 {\n constructor() {\n this.editorDetached = false;\n }\n\n initialize() {\n _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchSocial.bind(this), \"BD Social Patch\")();\n _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildPills.bind(this), \"BD Guild Pills Patch\")();\n _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildListItems.bind(this), \"BD Guild List Items Patch\")();\n _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].suppressErrors(this.patchGuildSeparator.bind(this), \"BD Guild Separator Patch\")();\n }\n\n get messageClasses() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"message\", \"containerCozy\");\n }\n\n get guildClasses() {\n const guildsWrapper = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"wrapper\", \"unreadMentionsBar\");\n const guilds = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"guildsError\", \"selected\");\n const pill = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"blobContainer\");\n return Object.assign({}, guildsWrapper, guilds, pill);\n }\n\n get MessageContentComponent() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n }\n\n get TimeFormatter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"dateFormat\");\n }\n\n get TooltipWrapper() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"TooltipDeprecated\");\n }\n\n get NativeModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"setBadge\");\n }\n\n get Tooltips() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getModule(m => m.hide && m.show && !m.search && !m.submit && !m.search && !m.activateRagingDemon && !m.dismiss);\n }\n\n get KeyGenerator() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getModule(m => m.toString && /\"binary\"/.test(m.toString()));\n }\n\n patchSocial() {\n if (this.socialPatch) return;\n const TabBar = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findModule(m => m.displayName == \"TabBar\");\n const Anchor = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findModule(m => m.displayName == \"Anchor\");\n if (!TabBar || !Anchor) return;\n this.socialPatch = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(TabBar.prototype, \"render\", {\n after: data => {\n const children = data.returnValue.props.children;\n if (!children || !children.length) return;\n if (children[children.length - 2].type.displayName !== \"Separator\") return;\n if (!children[children.length - 1].type.toString().includes(\"socialLinks\")) return;\n const original = children[children.length - 1].type;\n\n const newOne = function () {\n const returnVal = original(...arguments);\n returnVal.props.children.push(_pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n rel: \"author\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React.createElement(_ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n })));\n return returnVal;\n };\n\n children[children.length - 1].type = newOne;\n }\n });\n }\n\n patchGuildListItems() {\n if (this.guildListItemsPatch) return;\n const listItemClass = this.guildClasses.listItem.split(\" \")[0];\n const blobClass = this.guildClasses.blobContainer.split(\" \")[0];\n const reactInstance = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getInternalInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement);\n const GuildComponent = reactInstance.return.type;\n if (!GuildComponent) return;\n this.guildListItemsPatch = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(GuildComponent.prototype, \"render\", {\n after: data => {\n const returnValue = data.returnValue;\n const guildData = data.thisObject.props;\n returnValue.props.className += \" bd-guild\";\n if (guildData.unread) returnValue.props.className += \" bd-unread\";\n if (guildData.selected) returnValue.props.className += \" bd-selected\";\n if (guildData.audio) returnValue.props.className += \" bd-audio\";\n if (guildData.video) returnValue.props.className += \" bd-video\";\n if (guildData.badge) returnValue.props.className += \" bd-badge\";\n if (guildData.animatable) returnValue.props.className += \" bd-animatable\";\n return returnValue;\n }\n });\n }\n\n patchGuildPills() {\n if (this.guildPillPatch) return;\n const guildPill = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findModule(m => m.default && m.default.toString && m.default.toString().includes(\"translate3d\"));\n if (!guildPill) return;\n this.guildPillPatch = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(guildPill, \"default\", {\n after: data => {\n const props = data.methodArguments[0];\n if (props.unread) data.returnValue.props.className += \" bd-unread\";\n if (props.selected) data.returnValue.props.className += \" bd-selected\";\n if (props.hovered) data.returnValue.props.className += \" bd-hovered\";\n return data.returnValue;\n }\n });\n }\n\n patchGuildSeparator() {\n if (this.guildSeparatorPatch) return;\n const Guilds = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findModuleByDisplayName(\"Guilds\");\n const guildComponents = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].findModuleByProps(\"renderListItem\");\n if (!guildComponents || !Guilds) return;\n\n const GuildSeparator = function () {\n const returnValue = guildComponents.Separator(...arguments);\n returnValue.props.className += \" bd-guild-separator\";\n return returnValue;\n };\n\n this.guildSeparatorPatch = _pluginapi__WEBPACK_IMPORTED_MODULE_1__[\"default\"].monkeyPatch(Guilds.prototype, \"render\", {\n after: data => {\n data.returnValue.props.children[1].props.children[3].type = GuildSeparator;\n }\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvYmR2Mi5qcz9mZmJlIl0sIm5hbWVzIjpbIlYyIiwiY29uc3RydWN0b3IiLCJlZGl0b3JEZXRhY2hlZCIsImluaXRpYWxpemUiLCJCZEFwaSIsInN1cHByZXNzRXJyb3JzIiwicGF0Y2hTb2NpYWwiLCJiaW5kIiwicGF0Y2hHdWlsZFBpbGxzIiwicGF0Y2hHdWlsZExpc3RJdGVtcyIsInBhdGNoR3VpbGRTZXBhcmF0b3IiLCJtZXNzYWdlQ2xhc3NlcyIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlQcm9wcyIsImd1aWxkQ2xhc3NlcyIsImd1aWxkc1dyYXBwZXIiLCJndWlsZHMiLCJwaWxsIiwiT2JqZWN0IiwiYXNzaWduIiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJnZXRNb2R1bGUiLCJtIiwiZGVmYXVsdFByb3BzIiwiaGFzT3duUHJvcGVydHkiLCJUaW1lRm9ybWF0dGVyIiwiVG9vbHRpcFdyYXBwZXIiLCJnZXRCeURpc3BsYXlOYW1lIiwiTmF0aXZlTW9kdWxlIiwiVG9vbHRpcHMiLCJoaWRlIiwic2hvdyIsInNlYXJjaCIsInN1Ym1pdCIsImFjdGl2YXRlUmFnaW5nRGVtb24iLCJkaXNtaXNzIiwiS2V5R2VuZXJhdG9yIiwidG9TdHJpbmciLCJ0ZXN0Iiwic29jaWFsUGF0Y2giLCJUYWJCYXIiLCJmaW5kTW9kdWxlIiwiZGlzcGxheU5hbWUiLCJBbmNob3IiLCJtb25rZXlQYXRjaCIsInByb3RvdHlwZSIsImFmdGVyIiwiZGF0YSIsImNoaWxkcmVuIiwicmV0dXJuVmFsdWUiLCJwcm9wcyIsImxlbmd0aCIsInR5cGUiLCJpbmNsdWRlcyIsIm9yaWdpbmFsIiwibmV3T25lIiwicmV0dXJuVmFsIiwiYXJndW1lbnRzIiwicHVzaCIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImhyZWYiLCJyZWwiLCJ0aXRsZSIsInRhcmdldCIsIkJETG9nbyIsInNpemUiLCJndWlsZExpc3RJdGVtc1BhdGNoIiwibGlzdEl0ZW1DbGFzcyIsImxpc3RJdGVtIiwic3BsaXQiLCJibG9iQ2xhc3MiLCJibG9iQ29udGFpbmVyIiwicmVhY3RJbnN0YW5jZSIsImdldEludGVybmFsSW5zdGFuY2UiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJwYXJlbnRFbGVtZW50IiwiR3VpbGRDb21wb25lbnQiLCJyZXR1cm4iLCJndWlsZERhdGEiLCJ0aGlzT2JqZWN0IiwidW5yZWFkIiwic2VsZWN0ZWQiLCJhdWRpbyIsInZpZGVvIiwiYmFkZ2UiLCJhbmltYXRhYmxlIiwiZ3VpbGRQaWxsUGF0Y2giLCJndWlsZFBpbGwiLCJkZWZhdWx0IiwibWV0aG9kQXJndW1lbnRzIiwiaG92ZXJlZCIsImd1aWxkU2VwYXJhdG9yUGF0Y2giLCJHdWlsZHMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsImd1aWxkQ29tcG9uZW50cyIsImZpbmRNb2R1bGVCeVByb3BzIiwiR3VpbGRTZXBhcmF0b3IiLCJTZXBhcmF0b3IiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsRUFBTixDQUFTO0FBRXhCQyxhQUFXLEdBQUc7QUFDVixTQUFLQyxjQUFMLEdBQXNCLEtBQXRCO0FBQ0g7O0FBRURDLFlBQVUsR0FBRztBQUNUQyxzREFBSyxDQUFDQyxjQUFOLENBQXFCLEtBQUtDLFdBQUwsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLENBQXJCLEVBQWtELGlCQUFsRDtBQUNBSCxzREFBSyxDQUFDQyxjQUFOLENBQXFCLEtBQUtHLGVBQUwsQ0FBcUJELElBQXJCLENBQTBCLElBQTFCLENBQXJCLEVBQXNELHNCQUF0RDtBQUNBSCxzREFBSyxDQUFDQyxjQUFOLENBQXFCLEtBQUtJLG1CQUFMLENBQXlCRixJQUF6QixDQUE4QixJQUE5QixDQUFyQixFQUEwRCwyQkFBMUQ7QUFDQUgsc0RBQUssQ0FBQ0MsY0FBTixDQUFxQixLQUFLSyxtQkFBTCxDQUF5QkgsSUFB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QUFDbkIsZUFBT2QsSUFBSSxDQUFDRSxXQUFaO0FBQ0g7QUFONkQsS0FBeEMsQ0FBdEI7QUFPSDs7QUFFRHZDLHFCQUFtQixHQUFHO0FBQ2xCLFFBQUksS0FBS29GLG1CQUFULEVBQThCO0FBQzlCLFVBQU1DLE1BQU0sR0FBRzNGLGtEQUFLLENBQUM0Rix1QkFBTixDQUE4QixRQUE5QixDQUFmO0FBQ0EsVUFBTUMsZUFBZSxHQUFHN0Ysa0RBQUssQ0FBQzhGLGlCQUFOLENBQXdCLGdCQUF4QixDQUF4QjtBQUNBLFFBQUksQ0FBQ0QsZUFBRCxJQUFvQixDQUFDRixNQUF6QixFQUFpQzs7QUFDakMsVUFBTUksY0FBYyxHQUFHLFlBQVc7QUFDOUIsWUFBTWxELFdBQVcsR0FBR2dELGVBQWUsQ0FBQ0csU0FBaEIsQ0FBMEIsR0FBRzNDLFNBQTdCLENBQXBCO0FBQ0FSLGlCQUFXLENBQUNDLEtBQVosQ0FBa0JXLFNBQWxCLElBQStCLHFCQUEvQjtBQUNBLGFBQU9aLFdBQVA7QUFDSCxLQUpEOztBQUtBLFNBQUs2QyxtQkFBTCxHQUEyQjFGLGtEQUFLLENBQUN3QyxXQUFOLENBQWtCbUQsTUFBTSxDQUFDbEQsU0FBekIsRUFBb0MsUUFBcEMsRUFBOEM7QUFBQ0MsV0FBSyxFQUFHQyxJQUFELElBQVU7QUFDdkZBLFlBQUksQ0FBQ0UsV0FBTCxDQUFpQkMsS0FBakIsQ0FBdUJGLFFBQXZCLENBQWdDLENBQWhDLEVBQW1DRSxLQUFuQyxDQUF5Q0YsUUFBekMsQ0FBa0QsQ0FBbEQsRUFBcURJLElBQXJELEdBQTREK0MsY0FBNUQ7QUFDSDtBQUZ3RSxLQUE5QyxDQUEzQjtBQUdIOztBQWpHdUIsQ0FBYixFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvYmR2Mi5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vcGx1Z2luYXBpXCI7XHJcbmltcG9ydCBCRExvZ28gZnJvbSBcIi4uL3VpL2ljb25zL2JkbG9nb1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFYyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmVkaXRvckRldGFjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBCZEFwaS5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoU29jaWFsLmJpbmQodGhpcyksIFwiQkQgU29jaWFsIFBhdGNoXCIpKCk7XHJcbiAgICAgICAgQmRBcGkuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xyXG4gICAgICAgIEJkQXBpLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZExpc3RJdGVtcy5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIExpc3QgSXRlbXMgUGF0Y2hcIikoKTtcclxuICAgICAgICBCZEFwaS5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRTZXBhcmF0b3IuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBTZXBhcmF0b3IgUGF0Y2hcIikoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbWVzc2FnZUNsYXNzZXMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJtZXNzYWdlXCIsIFwiY29udGFpbmVyQ296eVwiKTt9XHJcbiAgICBnZXQgZ3VpbGRDbGFzc2VzKCkge1xyXG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgY29uc3QgcGlsbCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG5cdH1cclxuXHJcbiAgICBnZXQgTWVzc2FnZUNvbnRlbnRDb21wb25lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShtID0+IG0uZGVmYXVsdFByb3BzICYmIG0uZGVmYXVsdFByb3BzLmhhc093blByb3BlcnR5KFwiZGlzYWJsZUJ1dHRvbnNcIikpO31cclxuICAgIGdldCBUaW1lRm9ybWF0dGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZGF0ZUZvcm1hdFwiKTt9XHJcbiAgICBnZXQgVG9vbHRpcFdyYXBwZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJUb29sdGlwRGVwcmVjYXRlZFwiKTt9XHJcbiAgICBnZXQgTmF0aXZlTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic2V0QmFkZ2VcIik7fVxyXG4gICAgZ2V0IFRvb2x0aXBzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmhpZGUgJiYgbS5zaG93ICYmICFtLnNlYXJjaCAmJiAhbS5zdWJtaXQgJiYgIW0uc2VhcmNoICYmICFtLmFjdGl2YXRlUmFnaW5nRGVtb24gJiYgIW0uZGlzbWlzcyk7fVxyXG4gICAgZ2V0IEtleUdlbmVyYXRvcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS50b1N0cmluZyAmJiAvXCJiaW5hcnlcIi8udGVzdChtLnRvU3RyaW5nKCkpKTt9XHJcblxyXG4gICAgcGF0Y2hTb2NpYWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc29jaWFsUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBUYWJCYXIgPSBCZEFwaS5maW5kTW9kdWxlKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIlRhYkJhclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3IgPSBCZEFwaS5maW5kTW9kdWxlKG0gPT4gbS5kaXNwbGF5TmFtZSA9PSBcIkFuY2hvclwiKTtcclxuICAgICAgICBpZiAoIVRhYkJhciB8fCAhQW5jaG9yKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zb2NpYWxQYXRjaCA9IEJkQXBpLm1vbmtleVBhdGNoKFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuO1xyXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuIHx8ICFjaGlsZHJlbi5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDJdLnR5cGUuZGlzcGxheU5hbWUgIT09IFwiU2VwYXJhdG9yXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlLnRvU3RyaW5nKCkuaW5jbHVkZXMoXCJzb2NpYWxMaW5rc1wiKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBvcmlnaW5hbCA9IGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGU7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld09uZSA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmV0dXJuVmFsID0gb3JpZ2luYWwoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgICAgIHJldHVyblZhbC5wcm9wcy5jaGlsZHJlbi5wdXNoKEJkQXBpLlJlYWN0LmNyZWF0ZUVsZW1lbnQoQW5jaG9yLCB7Y2xhc3NOYW1lOiBcImJkLXNvY2lhbC1saW5rXCIsIGhyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcFwiLCByZWw6IFwiYXV0aG9yXCIsIHRpdGxlOiBcIkJhbmRhZ2VkQkRcIiwgdGFyZ2V0OiBcIl9ibGFua1wifSxcclxuICAgICAgICAgICAgICAgICAgICBCZEFwaS5SZWFjdC5jcmVhdGVFbGVtZW50KEJETG9nbywge3NpemU6IFwiMTZweFwiLCBjbGFzc05hbWU6IFwiYmQtc29jaWFsLWxvZ29cIn0pXHJcbiAgICAgICAgICAgICAgICApKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWw7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNoaWxkcmVuW2NoaWxkcmVuLmxlbmd0aCAtIDFdLnR5cGUgPSBuZXdPbmU7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3VpbGRMaXN0SXRlbXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSB0aGlzLmd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgY29uc3QgYmxvYkNsYXNzID0gdGhpcy5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgY29uc3QgcmVhY3RJbnN0YW5jZSA9IEJkQXBpLmdldEludGVybmFsSW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGlzdEl0ZW1DbGFzc30gLiR7YmxvYkNsYXNzfWApLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkQ29tcG9uZW50ID0gcmVhY3RJbnN0YW5jZS5yZXR1cm4udHlwZTtcclxuICAgICAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoID0gQmRBcGkubW9ua2V5UGF0Y2goR3VpbGRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZGF0YS5yZXR1cm5WYWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgZ3VpbGREYXRhID0gZGF0YS50aGlzT2JqZWN0LnByb3BzO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS51bnJlYWQpIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC11bnJlYWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5zZWxlY3RlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYXVkaW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1hdWRpb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnZpZGVvKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdmlkZW9cIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5iYWRnZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWJhZGdlXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEuYW5pbWF0YWJsZSkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWFuaW1hdGFibGVcIjtcclxuICAgICAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEd1aWxkUGlsbHMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3VpbGRQaWxsUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBndWlsZFBpbGwgPSBCZEFwaS5maW5kTW9kdWxlKG0gPT4gbS5kZWZhdWx0ICYmIG0uZGVmYXVsdC50b1N0cmluZyAmJiBtLmRlZmF1bHQudG9TdHJpbmcoKS5pbmNsdWRlcyhcInRyYW5zbGF0ZTNkXCIpKTtcclxuICAgICAgICBpZiAoIWd1aWxkUGlsbCkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuZ3VpbGRQaWxsUGF0Y2ggPSBCZEFwaS5tb25rZXlQYXRjaChndWlsZFBpbGwsIFwiZGVmYXVsdFwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gZGF0YS5tZXRob2RBcmd1bWVudHNbMF07XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy51bnJlYWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAocHJvcHMuc2VsZWN0ZWQpIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSBkYXRhLnJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ob3ZlcmVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhLnJldHVyblZhbHVlO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICBwYXRjaEd1aWxkU2VwYXJhdG9yKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2gpIHJldHVybjtcclxuICAgICAgICBjb25zdCBHdWlsZHMgPSBCZEFwaS5maW5kTW9kdWxlQnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBCZEFwaS5maW5kTW9kdWxlQnlQcm9wcyhcInJlbmRlckxpc3RJdGVtXCIpO1xyXG4gICAgICAgIGlmICghZ3VpbGRDb21wb25lbnRzIHx8ICFHdWlsZHMpIHJldHVybjtcclxuICAgICAgICBjb25zdCBHdWlsZFNlcGFyYXRvciA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCByZXR1cm5WYWx1ZSA9IGd1aWxkQ29tcG9uZW50cy5TZXBhcmF0b3IoLi4uYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWd1aWxkLXNlcGFyYXRvclwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLmd1aWxkU2VwYXJhdG9yUGF0Y2ggPSBCZEFwaS5tb25rZXlQYXRjaChHdWlsZHMucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGRhdGEucmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV0ucHJvcHMuY2hpbGRyZW5bM10udHlwZSA9IEd1aWxkU2VwYXJhdG9yO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/bdv2.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony import */ var _ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/icons/bdlogo */ \"./src/ui/icons/bdlogo.jsx\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class V2 {\n initialize() {\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchSocial.bind(this), \"BD Social Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildPills.bind(this), \"BD Guild Pills Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildListItems.bind(this), \"BD Guild List Items Patch\")();\n _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].suppressErrors(this.patchGuildSeparator.bind(this), \"BD Guild Separator Patch\")();\n }\n\n patchSocial() {\n if (this.socialPatch) return;\n const TabBar = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"TabBar\");\n const Anchor = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"Anchor\");\n if (!TabBar || !Anchor) return;\n this.socialPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", TabBar.prototype, \"render\", (_, __, returnValue) => {\n const children = returnValue.props.children;\n if (!children || !children.length) return;\n if (children[children.length - 2].type.displayName !== \"Separator\") return;\n if (!children[children.length - 1].type.toString().includes(\"socialLinks\")) return;\n const original = children[children.length - 1].type;\n\n const newOne = function () {\n const returnVal = original(...arguments);\n returnVal.props.children.push(_discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React.createElement(Anchor, {\n className: \"bd-social-link\",\n href: \"https://github.com/rauenzi/BetterDiscordApp\",\n rel: \"author\",\n title: \"BandagedBD\",\n target: \"_blank\"\n }, _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React.createElement(_ui_icons_bdlogo__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n size: \"16px\",\n className: \"bd-social-logo\"\n })));\n return returnVal;\n };\n\n children[children.length - 1].type = newOne;\n });\n }\n\n patchGuildListItems() {\n if (this.guildListItemsPatch) return;\n const listItemClass = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].GuildClasses.listItem.split(\" \")[0];\n const blobClass = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].GuildClasses.blobContainer.split(\" \")[0];\n const reactInstance = _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getReactInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement);\n const GuildComponent = reactInstance.return.type;\n if (!GuildComponent) return;\n this.guildListItemsPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", GuildComponent.prototype, \"render\", (thisObject, _, returnValue) => {\n const guildData = thisObject.props;\n returnValue.props.className += \" bd-guild\";\n if (guildData.unread) returnValue.props.className += \" bd-unread\";\n if (guildData.selected) returnValue.props.className += \" bd-selected\";\n if (guildData.audio) returnValue.props.className += \" bd-audio\";\n if (guildData.video) returnValue.props.className += \" bd-video\";\n if (guildData.badge) returnValue.props.className += \" bd-badge\";\n if (guildData.animatable) returnValue.props.className += \" bd-animatable\";\n return returnValue;\n });\n }\n\n patchGuildPills() {\n if (this.guildPillPatch) return;\n const guildPill = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getModule(m => m.default && !m.default.displayName && m.default.toString && m.default.toString().includes(\"translate3d\"));\n if (!guildPill) return;\n this.guildPillPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", guildPill, \"default\", (_, args, returnValue) => {\n const props = args[0];\n if (props.unread) returnValue.props.className += \" bd-unread\";\n if (props.selected) returnValue.props.className += \" bd-selected\";\n if (props.hovered) returnValue.props.className += \" bd-hovered\";\n return returnValue;\n });\n }\n\n patchGuildSeparator() {\n if (this.guildSeparatorPatch) return;\n const Guilds = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByDisplayName(\"Guilds\");\n const guildComponents = _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getByProps(\"renderListItem\");\n if (!guildComponents || !Guilds) return;\n\n const GuildSeparator = function () {\n const returnValue = guildComponents.Separator(...arguments);\n returnValue.props.className += \" bd-guild-separator\";\n return returnValue;\n };\n\n this.guildSeparatorPatch = _patcher__WEBPACK_IMPORTED_MODULE_3__[\"default\"].after(\"ThemeHelper\", Guilds.prototype, \"render\", (_, __, returnValue) => {\n const Separator = _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].findInReactTree(returnValue, m => m.type && !m.type.displayName && typeof m.type == \"function\" && _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"].isEmpty(m.props));\n if (!Separator) return;\n Separator.type = GuildSeparator;\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvYmR2Mi5qcz9mZmJlIl0sIm5hbWVzIjpbIlYyIiwiaW5pdGlhbGl6ZSIsIlV0aWxpdGllcyIsInN1cHByZXNzRXJyb3JzIiwicGF0Y2hTb2NpYWwiLCJiaW5kIiwicGF0Y2hHdWlsZFBpbGxzIiwicGF0Y2hHdWlsZExpc3RJdGVtcyIsInBhdGNoR3VpbGRTZXBhcmF0b3IiLCJzb2NpYWxQYXRjaCIsIlRhYkJhciIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlEaXNwbGF5TmFtZSIsIkFuY2hvciIsIlBhdGNoZXIiLCJhZnRlciIsInByb3RvdHlwZSIsIl8iLCJfXyIsInJldHVyblZhbHVlIiwiY2hpbGRyZW4iLCJwcm9wcyIsImxlbmd0aCIsInR5cGUiLCJkaXNwbGF5TmFtZSIsInRvU3RyaW5nIiwiaW5jbHVkZXMiLCJvcmlnaW5hbCIsIm5ld09uZSIsInJldHVyblZhbCIsImFyZ3VtZW50cyIsInB1c2giLCJEaXNjb3JkTW9kdWxlcyIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZSIsImhyZWYiLCJyZWwiLCJ0aXRsZSIsInRhcmdldCIsIkJETG9nbyIsInNpemUiLCJndWlsZExpc3RJdGVtc1BhdGNoIiwibGlzdEl0ZW1DbGFzcyIsIkd1aWxkQ2xhc3NlcyIsImxpc3RJdGVtIiwic3BsaXQiLCJibG9iQ2xhc3MiLCJibG9iQ29udGFpbmVyIiwicmVhY3RJbnN0YW5jZSIsImdldFJlYWN0SW5zdGFuY2UiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJwYXJlbnRFbGVtZW50IiwiR3VpbGRDb21wb25lbnQiLCJyZXR1cm4iLCJ0aGlzT2JqZWN0IiwiZ3VpbGREYXRhIiwidW5yZWFkIiwic2VsZWN0ZWQiLCJhdWRpbyIsInZpZGVvIiwiYmFkZ2UiLCJhbmltYXRhYmxlIiwiZ3VpbGRQaWxsUGF0Y2giLCJndWlsZFBpbGwiLCJnZXRNb2R1bGUiLCJtIiwiZGVmYXVsdCIsImFyZ3MiLCJob3ZlcmVkIiwiZ3VpbGRTZXBhcmF0b3JQYXRjaCIsIkd1aWxkcyIsImd1aWxkQ29tcG9uZW50cyIsImdldEJ5UHJvcHMiLCJHdWlsZFNlcGFyYXRvciIsIlNlcGFyYXRvciIsImZpbmRJblJlYWN0VHJlZSIsImlzRW1wdHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNQSxFQUFOLENBQVM7QUFFeEJDLFlBQVUsR0FBRztBQUNUQyxzREFBUyxDQUFDQyxjQUFWLENBQXlCLEtBQUtDLFdBQUwsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLENBQXpCLEVBQXNELGlCQUF0RDtBQUNBSCxzREFBUyxDQUFDQyxjQUFWLENBQXlCLEtBQUtHLGVBQUwsQ0FBcUJELElBQXJCLENBQTBCLElBQTFCLENBQXpCLEVBQTBELHNCQUExRDtBQUNBSCxzREFBUyxDQUFDQyxjQUFWLENBQXlCLEtBQUtJLG1CQUFMLENBQXlCRixJQUF6QixDQUE4QixJQUE5QixDQUF6QixFQUE4RCwyQkFBOUQ7QUFDQUgsc0RBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLSyxtQkFBTCxDQUF5QkgsSUFBekIsQ0FBOEIsSUFBOUIsQ0FBekIsRUFBOEQsMEJBQTlEO0FBQ0g7O0FBRURELGFBQVcsR0FBRztBQUNWLFFBQUksS0FBS0ssV0FBVCxFQUFzQjtBQUN0QixVQUFNQyxNQUFNLEdBQUdDLHVEQUFjLENBQUNDLGdCQUFmLENBQWdDLFFBQWhDLENBQWY7QUFDQSxVQUFNQyxNQUFNLEdBQUdGLHVEQUFjLENBQUNDLGdCQUFmLENBQWdDLFFBQWhDLENBQWY7QUFDQSxRQUFJLENBQUNGLE1BQUQsSUFBVyxDQUFDRyxNQUFoQixFQUF3QjtBQUN4QixTQUFLSixXQUFMLEdBQW1CSyxnREFBTyxDQUFDQyxLQUFSLENBQWMsYUFBZCxFQUE2QkwsTUFBTSxDQUFDTSxTQUFwQyxFQUErQyxRQUEvQyxFQUF5RCxDQUFDQyxDQUFELEVBQUlDLEVBQUos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QWlFckIsa0RBQVMsQ0FBQzRFLE9BQVYsQ0FBa0JYLENBQUMsQ0FBQzlDLEtBQXBCLENBQTdHLENBQWxCO0FBQ0EsVUFBSSxDQUFDdUQsU0FBTCxFQUFnQjtBQUNoQkEsZUFBUyxDQUFDckQsSUFBVixHQUFpQm9ELGNBQWpCO0FBQ0gsS0FKMEIsQ0FBM0I7QUFLSDs7QUEvRXVCLENBQWIsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2JkdjIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgV2VicGFja01vZHVsZXMgZnJvbSBcIi4vd2VicGFja21vZHVsZXNcIjtcclxuaW1wb3J0IERpc2NvcmRNb2R1bGVzIGZyb20gXCIuL2Rpc2NvcmRtb2R1bGVzXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBQYXRjaGVyIGZyb20gXCIuL3BhdGNoZXJcIjtcclxuaW1wb3J0IEJETG9nbyBmcm9tIFwiLi4vdWkvaWNvbnMvYmRsb2dvXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgVjIge1xyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hTb2NpYWwuYmluZCh0aGlzKSwgXCJCRCBTb2NpYWwgUGF0Y2hcIikoKTtcclxuICAgICAgICBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnModGhpcy5wYXRjaEd1aWxkUGlsbHMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBQaWxscyBQYXRjaFwiKSgpO1xyXG4gICAgICAgIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyh0aGlzLnBhdGNoR3VpbGRMaXN0SXRlbXMuYmluZCh0aGlzKSwgXCJCRCBHdWlsZCBMaXN0IEl0ZW1zIFBhdGNoXCIpKCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLnN1cHByZXNzRXJyb3JzKHRoaXMucGF0Y2hHdWlsZFNlcGFyYXRvci5iaW5kKHRoaXMpLCBcIkJEIEd1aWxkIFNlcGFyYXRvciBQYXRjaFwiKSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoU29jaWFsKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNvY2lhbFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgVGFiQmFyID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIlRhYkJhclwiKTtcclxuICAgICAgICBjb25zdCBBbmNob3IgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeURpc3BsYXlOYW1lKFwiQW5jaG9yXCIpO1xyXG4gICAgICAgIGlmICghVGFiQmFyIHx8ICFBbmNob3IpIHJldHVybjtcclxuICAgICAgICB0aGlzLnNvY2lhbFBhdGNoID0gUGF0Y2hlci5hZnRlcihcIlRoZW1lSGVscGVyXCIsIFRhYkJhci5wcm90b3R5cGUsIFwicmVuZGVyXCIsIChfLCBfXywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2hpbGRyZW4gPSByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlbjtcclxuICAgICAgICAgICAgaWYgKCFjaGlsZHJlbiB8fCAhY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAyXS50eXBlLmRpc3BsYXlOYW1lICE9PSBcIlNlcGFyYXRvclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICghY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV0udHlwZS50b1N0cmluZygpLmluY2x1ZGVzKFwic29jaWFsTGlua3NcIikpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWwgPSBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBuZXdPbmUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbCA9IG9yaWdpbmFsKC4uLmFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWwucHJvcHMuY2hpbGRyZW4ucHVzaChEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KEFuY2hvciwge2NsYXNzTmFtZTogXCJiZC1zb2NpYWwtbGlua1wiLCBocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHBcIiwgcmVsOiBcImF1dGhvclwiLCB0aXRsZTogXCJCYW5kYWdlZEJEXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sXHJcbiAgICAgICAgICAgICAgICAgICAgRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChCRExvZ28sIHtzaXplOiBcIjE2cHhcIiwgY2xhc3NOYW1lOiBcImJkLXNvY2lhbC1sb2dvXCJ9KVxyXG4gICAgICAgICAgICAgICAgKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjaGlsZHJlbltjaGlsZHJlbi5sZW5ndGggLSAxXS50eXBlID0gbmV3T25lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoR3VpbGRMaXN0SXRlbXMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZ3VpbGRMaXN0SXRlbXNQYXRjaCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IGxpc3RJdGVtQ2xhc3MgPSBEaXNjb3JkTW9kdWxlcy5HdWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGJsb2JDbGFzcyA9IERpc2NvcmRNb2R1bGVzLkd1aWxkQ2xhc3Nlcy5ibG9iQ29udGFpbmVyLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICBjb25zdCByZWFjdEluc3RhbmNlID0gVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2UoZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgLiR7bGlzdEl0ZW1DbGFzc30gLiR7YmxvYkNsYXNzfWApLnBhcmVudEVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkQ29tcG9uZW50ID0gcmVhY3RJbnN0YW5jZS5yZXR1cm4udHlwZTtcclxuICAgICAgICBpZiAoIUd1aWxkQ29tcG9uZW50KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5ndWlsZExpc3RJdGVtc1BhdGNoID0gUGF0Y2hlci5hZnRlcihcIlRoZW1lSGVscGVyXCIsIEd1aWxkQ29tcG9uZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QsIF8sIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkRGF0YSA9IHRoaXNPYmplY3QucHJvcHM7XHJcbiAgICAgICAgICAgIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC1ndWlsZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnVucmVhZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXVucmVhZFwiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLnNlbGVjdGVkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtc2VsZWN0ZWRcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hdWRpbykgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLWF1ZGlvXCI7XHJcbiAgICAgICAgICAgIGlmIChndWlsZERhdGEudmlkZW8pIHJldHVyblZhbHVlLnByb3BzLmNsYXNzTmFtZSArPSBcIiBiZC12aWRlb1wiO1xyXG4gICAgICAgICAgICBpZiAoZ3VpbGREYXRhLmJhZGdlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYmFkZ2VcIjtcclxuICAgICAgICAgICAgaWYgKGd1aWxkRGF0YS5hbmltYXRhYmxlKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtYW5pbWF0YWJsZVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hHdWlsZFBpbGxzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmd1aWxkUGlsbFBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgZ3VpbGRQaWxsID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0ICYmICFtLmRlZmF1bHQuZGlzcGxheU5hbWUgJiYgbS5kZWZhdWx0LnRvU3RyaW5nICYmIG0uZGVmYXVsdC50b1N0cmluZygpLmluY2x1ZGVzKFwidHJhbnNsYXRlM2RcIikpO1xyXG4gICAgICAgIGlmICghZ3VpbGRQaWxsKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5ndWlsZFBpbGxQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJUaGVtZUhlbHBlclwiLCBndWlsZFBpbGwsIFwiZGVmYXVsdFwiLCAoXywgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSBhcmdzWzBdO1xyXG4gICAgICAgICAgICBpZiAocHJvcHMudW5yZWFkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtdW5yZWFkXCI7XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy5zZWxlY3RlZCkgcmV0dXJuVmFsdWUucHJvcHMuY2xhc3NOYW1lICs9IFwiIGJkLXNlbGVjdGVkXCI7XHJcbiAgICAgICAgICAgIGlmIChwcm9wcy5ob3ZlcmVkKSByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtaG92ZXJlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hHdWlsZFNlcGFyYXRvcigpIHtcclxuICAgICAgICBpZiAodGhpcy5ndWlsZFNlcGFyYXRvclBhdGNoKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgR3VpbGRzID0gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShcIkd1aWxkc1wiKTtcclxuICAgICAgICBjb25zdCBndWlsZENvbXBvbmVudHMgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicmVuZGVyTGlzdEl0ZW1cIik7XHJcbiAgICAgICAgaWYgKCFndWlsZENvbXBvbmVudHMgfHwgIUd1aWxkcykgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IEd1aWxkU2VwYXJhdG9yID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gZ3VpbGRDb21wb25lbnRzLlNlcGFyYXRvciguLi5hcmd1bWVudHMpO1xyXG4gICAgICAgICAgICByZXR1cm5WYWx1ZS5wcm9wcy5jbGFzc05hbWUgKz0gXCIgYmQtZ3VpbGQtc2VwYXJhdG9yXCI7XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRoaXMuZ3VpbGRTZXBhcmF0b3JQYXRjaCA9IFBhdGNoZXIuYWZ0ZXIoXCJUaGVtZUhlbHBlclwiLCBHdWlsZHMucHJvdG90eXBlLCBcInJlbmRlclwiLCAoXywgX18sIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IFNlcGFyYXRvciA9IFV0aWxpdGllcy5maW5kSW5SZWFjdFRyZWUocmV0dXJuVmFsdWUsIG0gPT4gbS50eXBlICYmICFtLnR5cGUuZGlzcGxheU5hbWUgJiYgdHlwZW9mKG0udHlwZSkgPT0gXCJmdW5jdGlvblwiICYmIFV0aWxpdGllcy5pc0VtcHR5KG0ucHJvcHMpKTtcclxuICAgICAgICAgICAgaWYgKCFTZXBhcmF0b3IpIHJldHVybjtcclxuICAgICAgICAgICAgU2VwYXJhdG9yLnR5cGUgPSBHdWlsZFNlcGFyYXRvcjtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/bdv2.js\n"); /***/ }), @@ -359,7 +359,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 _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _structs_contenterror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/contenterror */ \"./src/structs/contenterror.js\");\n/* harmony import */ var _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../structs/metaerror */ \"./src/structs/metaerror.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\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 = /^\\\\@/;\n\nconst stripBOM = function (content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n\n return content;\n};\n\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_3__[\"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_2__[\"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_4__[\"default\"].getData(`${this.prefix}s`);\n if (!saved) return;\n Object.assign(this.state, saved);\n }\n\n saveState() {\n _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setData(`${this.prefix}s`, this.state);\n }\n\n watchContent() {\n if (this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, \"Already watching content.\");\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"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 _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, \"Was not watching content.\");\n this.watcher.close();\n delete this.watcher;\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"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_6__[\"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 const parsed = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(metaData);\n if (!parsed) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META could not be parsed.\");\n if (!parsed.name) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"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 = 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 = false) {\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_5__[\"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_5__[\"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_7__[\"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, isReload = false) {\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]) isReload ? this.stopContent(content) : 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_7__[\"Toasts\"].success(`${content.name} was unloaded.`);\n return true;\n }\n\n reloadContent(idOrFileOrContent, shouldToast = true) {\n const content = typeof idOrFileOrContent == \"string\" ? this.contentList.find(c => c.id == idOrFileOrContent || c.filename == idOrFileOrContent) : idOrFileOrContent;\n const didUnload = this.unloadContent(content, shouldToast, true);\n if (!didUnload) return didUnload;\n return this.loadContent(content.filename, shouldToast);\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_5__[\"default\"]) errors.push(content);\n }\n\n this.saveState();\n if (_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"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/OTA0MyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwiTW9kdWxlIiwiZ2xvYmFsUGF0aHMiLCJwdXNoIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJzcGxpdFJlZ2V4IiwiZXNjYXBlZEF0UmVnZXgiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicHJlZml4IiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJlbWl0IiwiZXZlbnQiLCJhcmdzIiwiRXZlbnRzIiwiY29uc3RydWN0b3IiLCJ0aW1lQ2FjaGUiLCJjb250ZW50TGlzdCIsInN0YXRlIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRDb250ZW50UmVxdWlyZSIsIlNldHRpbmdzIiwib24iLCJlbmFibGVkIiwid2F0Y2hDb250ZW50IiwidW53YXRjaENvbnRlbnQiLCJpbml0aWFsaXplQ29udGVudCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJzdGFydENvbnRlbnQiLCJzdG9wQ29udGVudCIsImxvYWRTdGF0ZSIsInNhdmVkIiwiRGF0YVN0b3JlIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInNhdmVTdGF0ZSIsInNldERhdGEiLCJ3YXRjaGVyIiwiTG9nZ2VyIiwiZXJyb3IiLCJsb2ciLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsImVuZHNXaXRoIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkQ29udGVudCIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZENvbnRlbnQiLCJyZWxvYWRDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsInNwbGl0IiwiaGFzT2xkTWV0YSIsImluY2x1ZGVzIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIk1ldGFFcnJvciIsIm1ldGEiLCJtZXRhRGF0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicGFyc2VkIiwiVXRpbGl0aWVzIiwidGVzdEpTT04iLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwibGVuZ3RoIiwiY2hhckF0IiwibCIsImluZGV4T2YiLCJzdWJzdHIiLCJyZXBsYWNlIiwidHJpbSIsInNlbGYiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFscGF0aFN5bmMiLCJSZWZsZWN0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZWFkRmlsZVN5bmMiLCJfY29tcGlsZSIsInNob3VsZFRvYXN0IiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJDb250ZW50RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJmaW5kIiwiYyIsIlRvYXN0cyIsInN1Y2Nlc3MiLCJ2ZXJzaW9uIiwiaWRPckZpbGVPckNvbnRlbnQiLCJpc1JlbG9hZCIsImRpc2FibGVDb250ZW50IiwiY2FjaGUiLCJzcGxpY2UiLCJkaWRVbmxvYWQiLCJpc0xvYWRlZCIsImlkT3JGaWxlIiwiaXNFbmFibGVkIiwiZW5hYmxlQ29udGVudCIsImlkT3JDb250ZW50IiwicCIsInRvZ2dsZUNvbnRlbnQiLCJsb2FkTmV3Q29udGVudCIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJyZW1vdmVkIiwiZmlsdGVyIiwidCIsIm1hcCIsImFkZGVkIiwiZiIsInVwZGF0ZUxpc3QiLCJyZXN1bHRzIiwibG9hZEFsbENvbnRlbnQiLCJlcnJvcnMiLCJnZXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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LEdBQUcsRUFBZjtBQUNBLFVBQU1YLEtBQUssR0FBR3pJLEVBQUUsQ0FBQzBJLFdBQUgsQ0FBZSxLQUFLeEgsYUFBcEIsQ0FBZDs7QUFFQSxTQUFLLE1BQU15QyxRQUFYLElBQXVCOEUsS0FBdkIsRUFBOEI7QUFDMUIsVUFBSSxDQUFDekksRUFBRSxDQUFDZ0UsUUFBSCxDQUFZbEUsSUFBSSxDQUFDTSxPQUFMLENBQWEsS0FBS2MsYUFBbEIsRUFBaUN5QyxRQUFqQyxDQUFaLEVBQXdEUyxNQUF4RCxFQUFELElBQXFFLENBQUNULFFBQVEsQ0FBQ0MsUUFBVCxDQUFrQixLQUFLM0MsU0FBdkIsQ0FBMUUsRUFBNkc7QUFDN0csWUFBTU4sT0FBTyxHQUFHLEtBQUs2RCxXQUFMLENBQWlCYixRQUFqQixFQUEyQixLQUEzQixDQUFoQjtBQUNBLFVBQUloRCxPQUFPLFlBQVl3Ryw2REFBdkIsRUFBcUNpQyxNQUFNLENBQUNqSixJQUFQLENBQVlRLE9BQVo7QUFDeEM7O0FBRUQsU0FBS3VDLFNBQUw7QUFDQSxRQUFJaEIsd0RBQVEsQ0FBQ21ILEdBQVQsQ0FBYSxLQUFLakksVUFBbEIsRUFBOEIsS0FBS0MsUUFBbkMsRUFBNkMsS0FBS0MsRUFBbEQsQ0FBSixFQUEyRCxLQUFLZSxZQUFMO0FBQzNELFdBQU8rRyxNQUFQO0FBQ0g7O0FBbk8rQiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2NvbnRlbnRtYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL2VtaXR0ZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhc3RvcmVcIjtcclxuaW1wb3J0IENvbnRlbnRFcnJvciBmcm9tIFwiLi4vc3RydWN0cy9jb250ZW50ZXJyb3JcIjtcclxuaW1wb3J0IE1ldGFFcnJvciBmcm9tIFwiLi4vc3RydWN0cy9tZXRhZXJyb3JcIjtcclxuaW1wb3J0IHtUb2FzdHN9IGZyb20gXCJ1aVwiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgTW9kdWxlID0gcmVxdWlyZShcIm1vZHVsZVwiKS5Nb2R1bGU7XHJcbk1vZHVsZS5nbG9iYWxQYXRocy5wdXNoKHBhdGgucmVzb2x2ZShyZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcC5nZXRBcHBQYXRoKCksIFwibm9kZV9tb2R1bGVzXCIpKTtcclxuXHJcbmNvbnN0IHNwbGl0UmVnZXggPSAvW15cXFNcXHJcXG5dKj9cXG5bXlxcU1xcclxcbl0qP1xcKlteXFxTXFxyXFxuXT8vO1xyXG5jb25zdCBlc2NhcGVkQXRSZWdleCA9IC9eXFxcXEAvO1xyXG5cclxuY29uc3Qgc3RyaXBCT00gPSBmdW5jdGlvbihjb250ZW50KSB7XHJcbiAgICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcclxuICAgICAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjb250ZW50O1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29udGVudE1hbmFnZXIge1xyXG5cclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBtb2R1bGVFeHRlbnNpb24oKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IGV4dGVuc2lvbigpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgY29udGVudEZvbGRlcigpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcImNvbnRlbnRcIjt9XHJcbiAgICBnZXQgY29sbGVjdGlvbigpIHtyZXR1cm4gXCJzZXR0aW5nc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJjb250ZW50XCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImF1dG9SZWxvYWRcIjt9XHJcbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7cmV0dXJuIEV2ZW50cy5lbWl0KGAke3RoaXMucHJlZml4fS0ke2V2ZW50fWAsIC4uLmFyZ3MpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMuY29udGVudExpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge307XHJcbiAgICAgICAgdGhpcy5vcmlnaW5hbFJlcXVpcmUgPSBNb2R1bGUuX2V4dGVuc2lvbnNbdGhpcy5tb2R1bGVFeHRlbnNpb25dO1xyXG4gICAgICAgIE1vZHVsZS5fZXh0ZW5zaW9uc1t0aGlzLm1vZHVsZUV4dGVuc2lvbl0gPSB0aGlzLmdldENvbnRlbnRSZXF1aXJlKCk7XHJcbiAgICAgICAgU2V0dGluZ3Mub24odGhpcy5jb2xsZWN0aW9uLCB0aGlzLmNhdGVnb3J5LCB0aGlzLmlkLCAoZW5hYmxlZCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZW5hYmxlZCkgdGhpcy53YXRjaENvbnRlbnQoKTtcclxuICAgICAgICAgICAgZWxzZSB0aGlzLnVud2F0Y2hDb250ZW50KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcmxvYWQgdGhpcyBhbmQgbW9kaWZ5IHRoZSBjb250ZW50IG9iamVjdCBhcyBuZWVkZWQgdG8gZnVsbHkgbG9hZCBpdFxyXG4gICAgaW5pdGlhbGl6ZUNvbnRlbnQoKSB7cmV0dXJuO31cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCBvdmVybG9hZCB0aGlzIGFuZCBtb2RpZnkgdGhlIGNvbnRlbnQgYXMgbmVlZGVkIHRvIHJlcXVpcmUoKSB0aGUgZmlsZVxyXG4gICAgZ2V0Q29udGVudE1vZGlmaWNhdGlvbihtb2R1bGUsIGNvbnRlbnQpIHtyZXR1cm4gY29udGVudDt9XHJcblxyXG4gICAgc3RhcnRDb250ZW50KCkge3JldHVybjt9XHJcbiAgICBzdG9wQ29udGVudCgpIHtyZXR1cm47fVxyXG5cclxuICAgIGxvYWRTdGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBzYXZlZCA9IERhdGFTdG9yZS5nZXREYXRhKGAke3RoaXMucHJlZml4fXNgKTtcclxuICAgICAgICBpZiAoIXNhdmVkKSByZXR1cm47XHJcbiAgICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLnN0YXRlLCBzYXZlZCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZVN0YXRlKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXREYXRhKGAke3RoaXMucHJlZml4fXNgLCB0aGlzLnN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICB3YXRjaENvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcikgcmV0dXJuIExvZ2dlci5lcnJvcih0aGlzLm5hbWUsIFwiQWxyZWFkeSB3YXRjaGluZyBjb250ZW50LlwiKTtcclxuICAgICAgICBMb2dnZXIubG9nKHRoaXMubmFtZSwgXCJTdGFydGluZyB0byB3YXRjaCBjb250ZW50LlwiKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIgPSBmcy53YXRjaCh0aGlzLmNvbnRlbnRGb2xkZXIsIHtwZXJzaXN0ZW50OiBmYWxzZX0sIGFzeW5jIChldmVudFR5cGUsIGZpbGVuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnRUeXBlIHx8ICFmaWxlbmFtZSB8fCAhZmlsZW5hbWUuZW5kc1dpdGgodGhpcy5leHRlbnNpb24pKSByZXR1cm47XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xyXG4gICAgICAgICAgICB0cnkge2ZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGZpbGVuYW1lKSk7fVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVubG9hZENvbnRlbnQoZmlsZW5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKS5pc0ZpbGUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcInJlbmFtZVwiKSB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB0aGlzLnJlbG9hZENvbnRlbnQoZmlsZW5hbWUsIHRydWUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVud2F0Y2hDb250ZW50KCkge1xyXG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyKSByZXR1cm4gTG9nZ2VyLmVycm9yKHRoaXMubmFtZSwgXCJXYXMgbm90IHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlci5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXI7XHJcbiAgICAgICAgTG9nZ2VyLmxvZyh0aGlzLm5hbWUsIFwiTm8gbG9uZ2VyIHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGV4dHJhY3RNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBmaXJzdExpbmUgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IGhhc09sZE1ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvL01FVEFcIik7XHJcbiAgICAgICAgaWYgKGhhc09sZE1ldGEpIHJldHVybiB0aGlzLnBhcnNlT2xkTWV0YShjb250ZW50KTtcclxuICAgICAgICBjb25zdCBoYXNOZXdNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLyoqXCIpO1xyXG4gICAgICAgIGlmIChoYXNOZXdNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU5ld01ldGEoY29udGVudCk7XHJcbiAgICAgICAgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgd2FzIG5vdCBmb3VuZC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VPbGRNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBtZXRhID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBtZXRhRGF0YSA9IG1ldGEuc3Vic3RyaW5nKG1ldGEubGFzdEluZGV4T2YoXCIvL01FVEFcIikgKyA2LCBtZXRhLmxhc3RJbmRleE9mKFwiKi8vXCIpKTtcclxuICAgICAgICBjb25zdCBwYXJzZWQgPSBVdGlsaXRpZXMudGVzdEpTT04obWV0YURhdGEpO1xyXG4gICAgICAgIGlmICghcGFyc2VkKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBjb3VsZCBub3QgYmUgcGFyc2VkLlwiKTtcclxuICAgICAgICBpZiAoIXBhcnNlZC5uYW1lKSB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSBtaXNzaW5nIG5hbWUgZGF0YS5cIik7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU5ld01ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGJsb2NrID0gY29udGVudC5zcGxpdChcIi8qKlwiLCAyKVsxXS5zcGxpdChcIiovXCIsIDEpWzBdO1xyXG4gICAgICAgIGNvbnN0IG91dCA9IHt9O1xyXG4gICAgICAgIGxldCBmaWVsZCA9IFwiXCI7XHJcbiAgICAgICAgbGV0IGFjY3VtID0gXCJcIjtcclxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgYmxvY2suc3BsaXQoc3BsaXRSZWdleCkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmUubGVuZ3RoID09PSAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGxpbmUuY2hhckF0KDApID09PSBcIkBcIiAmJiBsaW5lLmNoYXJBdCgxKSAhPT0gXCIgXCIpIHtcclxuICAgICAgICAgICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGwgPSBsaW5lLmluZGV4T2YoXCIgXCIpO1xyXG4gICAgICAgICAgICAgICAgZmllbGQgPSBsaW5lLnN1YnN0cigxLCBsIC0gMSk7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSA9IGxpbmUuc3Vic3RyKGwgKyAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGFjY3VtICs9IFwiIFwiICsgbGluZS5yZXBsYWNlKFwiXFxcXG5cIiwgXCJcXG5cIikucmVwbGFjZShlc2NhcGVkQXRSZWdleCwgXCJAXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG91dFtmaWVsZF0gPSBhY2N1bS50cmltKCk7XHJcbiAgICAgICAgZGVsZXRlIG91dFtcIlwiXTtcclxuICAgICAgICByZXR1cm4gb3V0O1xyXG4gICAgfVxyXG5cclxuICAgIGdldENvbnRlbnRSZXF1aXJlKCkge1xyXG4gICAgICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIGNvbnN0IGJhc2VGb2xkZXIgPSB0aGlzLmNvbnRlbnRGb2xkZXI7XHJcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxSZXF1aXJlID0gdGhpcy5vcmlnaW5hbFJlcXVpcmU7XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKG1vZHVsZSwgZmlsZW5hbWUpIHtcclxuICAgICAgICAgICAgY29uc3QgcG9zc2libGVQYXRoID0gcGF0aC5yZXNvbHZlKHNlbGYuY29udGVudEZvbGRlciwgcGF0aC5iYXNlbmFtZShmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIWZzLmV4aXN0c1N5bmMocG9zc2libGVQYXRoKSB8fCBmaWxlbmFtZSAhPT0gZnMucmVhbHBhdGhTeW5jKHBvc3NpYmxlUGF0aCkpIHJldHVybiBSZWZsZWN0LmFwcGx5KG9yaWdpbmFsUmVxdWlyZSwgdGhpcywgYXJndW1lbnRzKTtcclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoZmlsZW5hbWUsIFwidXRmOFwiKTtcclxuICAgICAgICAgICAgY29udGVudCA9IHN0cmlwQk9NKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBtZXRhID0gc2VsZi5leHRyYWN0TWV0YShjb250ZW50KTtcclxuICAgICAgICAgICAgbWV0YS5pZCA9IG1ldGEubmFtZTtcclxuICAgICAgICAgICAgbWV0YS5maWxlbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gc2VsZi5nZXRDb250ZW50TW9kaWZpY2F0aW9uKG1vZHVsZSwgY29udGVudCwgbWV0YSk7XHJcbiAgICAgICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBmaWxlbmFtZSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCB1c2UgdGhlIHJldHVybiAoaWYgbm90IENvbnRlbnRFcnJvcikgYW5kIHB1c2ggdG8gdGhpcy5jb250ZW50TGlzdFxyXG4gICAgbG9hZENvbnRlbnQoZmlsZW5hbWUsIHNob3VsZFRvYXN0ID0gZmFsc2UpIHtcclxuICAgICAgICBpZiAodHlwZW9mKGZpbGVuYW1lKSA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuO1xyXG4gICAgICAgIHRyeSB7X19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIG5ldyBDb250ZW50RXJyb3IoZmlsZW5hbWUsIGZpbGVuYW1lLCBcIkNvdWxkIG5vdCBiZSBjb21waWxlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO31cclxuICAgICAgICBjb25zdCBjb250ZW50ID0gX19ub25fd2VicGFja19yZXF1aXJlX18ocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICBpZiAodGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBjb250ZW50LmlkKSkgcmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBmaWxlbmFtZSwgYFRoZXJlIGlzIGFscmVhZHkgYSBwbHVnaW4gd2l0aCBuYW1lICR7Y29udGVudC5uYW1lfWApO1xyXG4gICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5pbml0aWFsaXplQ29udGVudChjb250ZW50KTtcclxuICAgICAgICBpZiAoZXJyb3IpIHJldHVybiBlcnJvcjtcclxuICAgICAgICB0aGlzLmNvbnRlbnRMaXN0LnB1c2goY29udGVudCk7XHJcbiAgICAgICAgaWYgKHNob3VsZFRvYXN0KSBUb2FzdHMuc3VjY2VzcyhgJHtjb250ZW50Lm5hbWV9IHYke2NvbnRlbnQudmVyc2lvbn0gd2FzIGxvYWRlZC5gKTtcclxuICAgICAgICB0aGlzLmVtaXQoXCJsb2FkZWRcIiwgY29udGVudC5pZCk7XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZVtjb250ZW50LmlkXSkgcmV0dXJuIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGFydENvbnRlbnQoY29udGVudCk7XHJcbiAgICB9XHJcblxyXG4gICAgdW5sb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCwgc2hvdWxkVG9hc3QgPSB0cnVlLCBpc1JlbG9hZCA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yRmlsZU9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGVPckNvbnRlbnQgfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZU9yQ29udGVudCkgOiBpZE9yRmlsZU9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZVtjb250ZW50LmlkXSkgaXNSZWxvYWQgPyB0aGlzLnN0b3BDb250ZW50KGNvbnRlbnQpIDogdGhpcy5kaXNhYmxlQ29udGVudChjb250ZW50KTtcclxuICAgICAgICBkZWxldGUgX19ub25fd2VicGFja19yZXF1aXJlX18uY2FjaGVbX19ub25fd2VicGFja19yZXF1aXJlX18ucmVzb2x2ZShwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBjb250ZW50LmZpbGVuYW1lKSldO1xyXG4gICAgICAgIHRoaXMuY29udGVudExpc3Quc3BsaWNlKHRoaXMuY29udGVudExpc3QuaW5kZXhPZihjb250ZW50KSwgMSk7XHJcbiAgICAgICAgdGhpcy5lbWl0KFwidW5sb2FkZWRcIiwgY29udGVudC5pZCk7XHJcbiAgICAgICAgaWYgKHNob3VsZFRvYXN0KSBUb2FzdHMuc3VjY2VzcyhgJHtjb250ZW50Lm5hbWV9IHdhcyB1bmxvYWRlZC5gKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRDb250ZW50KGlkT3JGaWxlT3JDb250ZW50LCBzaG91bGRUb2FzdCA9IHRydWUpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JGaWxlT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQ29udGVudCB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JDb250ZW50KSA6IGlkT3JGaWxlT3JDb250ZW50O1xyXG4gICAgICAgIGNvbnN0IGRpZFVubG9hZCA9IHRoaXMudW5sb2FkQ29udGVudChjb250ZW50LCBzaG91bGRUb2FzdCwgdHJ1ZSk7XHJcbiAgICAgICAgaWYgKCFkaWRVbmxvYWQpIHJldHVybiBkaWRVbmxvYWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubG9hZENvbnRlbnQoY29udGVudC5maWxlbmFtZSwgc2hvdWxkVG9hc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTG9hZGVkKGlkT3JGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudExpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGUgfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZSk7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaXNFbmFibGVkKGlkT3JGaWxlKSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMuY29udGVudExpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGUgfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZSk7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVbY29udGVudC5pZF07XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlQ29udGVudChpZE9yQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JDb250ZW50KSA6IGlkT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdGFydENvbnRlbnQoY29udGVudCk7XHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlQ29udGVudChpZE9yQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JDb250ZW50KSA6IGlkT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZVtjb250ZW50LmlkXSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0b3BDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlQ29udGVudChpZCkge1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2lkXSkgdGhpcy5kaXNhYmxlQ29udGVudChpZCk7XHJcbiAgICAgICAgZWxzZSB0aGlzLmVuYWJsZUNvbnRlbnQoaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWROZXdDb250ZW50KCkge1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5jb250ZW50Rm9sZGVyKTtcclxuICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5jb250ZW50TGlzdC5maWx0ZXIodCA9PiAhZmlsZXMuaW5jbHVkZXModC5maWxlbmFtZSkpLm1hcChjID0+IGMuaWQpO1xyXG4gICAgICAgIGNvbnN0IGFkZGVkID0gZmlsZXMuZmlsdGVyKGYgPT4gIXRoaXMuY29udGVudExpc3QuZmluZCh0ID0+IHQuZmlsZW5hbWUgPT0gZikgJiYgZi5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikgJiYgZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZikpLmlzRmlsZSgpKTtcclxuICAgICAgICByZXR1cm4ge2FkZGVkLCByZW1vdmVkfTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVMaXN0KCkge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdHMgPSB0aGlzLmxvYWROZXdDb250ZW50KCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiByZXN1bHRzLmFkZGVkKSB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lKTtcclxuICAgICAgICBmb3IgKGNvbnN0IG5hbWUgb2YgcmVzdWx0cy5yZW1vdmVkKSB0aGlzLnVubG9hZENvbnRlbnQobmFtZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZEFsbENvbnRlbnQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2FkU3RhdGUoKTtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSBbXTtcclxuICAgICAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRoaXMuY29udGVudEZvbGRlcik7XHJcblxyXG4gICAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZmlsZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgZmFsc2UpO1xyXG4gICAgICAgICAgICBpZiAoY29udGVudCBpbnN0YW5jZW9mIENvbnRlbnRFcnJvcikgZXJyb3JzLnB1c2goY29udGVudCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gICAgICAgIGlmIChTZXR0aW5ncy5nZXQodGhpcy5jb2xsZWN0aW9uLCB0aGlzLmNhdGVnb3J5LCB0aGlzLmlkKSkgdGhpcy53YXRjaENvbnRlbnQoKTtcclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\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 _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _structs_contenterror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/contenterror */ \"./src/structs/contenterror.js\");\n/* harmony import */ var _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../structs/metaerror */ \"./src/structs/metaerror.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n\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 = /^\\\\@/;\n\nconst stripBOM = function (content) {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n\n return content;\n};\n\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_3__[\"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_2__[\"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_4__[\"default\"].getData(`${this.prefix}s`);\n if (!saved) return;\n Object.assign(this.state, saved);\n }\n\n saveState() {\n _datastore__WEBPACK_IMPORTED_MODULE_4__[\"default\"].setData(`${this.prefix}s`, this.state);\n }\n\n watchContent() {\n if (this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, \"Already watching content.\");\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"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 _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, \"Was not watching content.\");\n this.watcher.close();\n delete this.watcher;\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"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_6__[\"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 const parsed = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(metaData);\n if (!parsed) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"default\"](\"META could not be parsed.\");\n if (!parsed.name) throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_6__[\"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 = 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 = false) {\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_5__[\"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_5__[\"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_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].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, isReload = false) {\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]) isReload ? this.stopContent(content) : 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_toasts__WEBPACK_IMPORTED_MODULE_7__[\"default\"].success(`${content.name} was unloaded.`);\n return true;\n }\n\n reloadContent(idOrFileOrContent, shouldToast = true) {\n const content = typeof idOrFileOrContent == \"string\" ? this.contentList.find(c => c.id == idOrFileOrContent || c.filename == idOrFileOrContent) : idOrFileOrContent;\n const didUnload = this.unloadContent(content, shouldToast, true);\n if (!didUnload) return didUnload;\n return this.loadContent(content.filename, shouldToast);\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_5__[\"default\"]) errors.push(content);\n }\n\n this.saveState();\n if (_settingsmanager__WEBPACK_IMPORTED_MODULE_2__[\"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/OTA0MyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwiTW9kdWxlIiwiZ2xvYmFsUGF0aHMiLCJwdXNoIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJzcGxpdFJlZ2V4IiwiZXNjYXBlZEF0UmVnZXgiLCJzdHJpcEJPTSIsImNvbnRlbnQiLCJjaGFyQ29kZUF0Iiwic2xpY2UiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicHJlZml4IiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJlbWl0IiwiZXZlbnQiLCJhcmdzIiwiRXZlbnRzIiwiY29uc3RydWN0b3IiLCJ0aW1lQ2FjaGUiLCJjb250ZW50TGlzdCIsInN0YXRlIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRDb250ZW50UmVxdWlyZSIsIlNldHRpbmdzIiwib24iLCJlbmFibGVkIiwid2F0Y2hDb250ZW50IiwidW53YXRjaENvbnRlbnQiLCJpbml0aWFsaXplQ29udGVudCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJzdGFydENvbnRlbnQiLCJzdG9wQ29udGVudCIsImxvYWRTdGF0ZSIsInNhdmVkIiwiRGF0YVN0b3JlIiwiZ2V0RGF0YSIsIk9iamVjdCIsImFzc2lnbiIsInNhdmVTdGF0ZSIsInNldERhdGEiLCJ3YXRjaGVyIiwiTG9nZ2VyIiwiZXJyb3IiLCJsb2ciLCJ3YXRjaCIsInBlcnNpc3RlbnQiLCJldmVudFR5cGUiLCJmaWxlbmFtZSIsImVuZHNXaXRoIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwidW5sb2FkQ29udGVudCIsImlzRmlsZSIsInN0YXRzIiwibXRpbWUiLCJnZXRUaW1lIiwibG9hZENvbnRlbnQiLCJyZWxvYWRDb250ZW50IiwiY2xvc2UiLCJleHRyYWN0TWV0YSIsImZpcnN0TGluZSIsInNwbGl0IiwiaGFzT2xkTWV0YSIsImluY2x1ZGVzIiwicGFyc2VPbGRNZXRhIiwiaGFzTmV3TWV0YSIsInBhcnNlTmV3TWV0YSIsIk1ldGFFcnJvciIsIm1ldGEiLCJtZXRhRGF0YSIsInN1YnN0cmluZyIsImxhc3RJbmRleE9mIiwicGFyc2VkIiwiVXRpbGl0aWVzIiwidGVzdEpTT04iLCJibG9jayIsIm91dCIsImZpZWxkIiwiYWNjdW0iLCJsaW5lIiwibGVuZ3RoIiwiY2hhckF0IiwibCIsImluZGV4T2YiLCJzdWJzdHIiLCJyZXBsYWNlIiwidHJpbSIsInNlbGYiLCJwb3NzaWJsZVBhdGgiLCJiYXNlbmFtZSIsImV4aXN0c1N5bmMiLCJyZWFscGF0aFN5bmMiLCJSZWZsZWN0IiwiYXBwbHkiLCJhcmd1bWVudHMiLCJyZWFkRmlsZVN5bmMiLCJfY29tcGlsZSIsInNob3VsZFRvYXN0IiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJDb250ZW50RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJmaW5kIiwiYyIsIlRvYXN0cyIsInN1Y2Nlc3MiLCJ2ZXJzaW9uIiwiaWRPckZpbGVPckNvbnRlbnQiLCJpc1JlbG9hZCIsImRpc2FibGVDb250ZW50IiwiY2FjaGUiLCJzcGxpY2UiLCJkaWRVbmxvYWQiLCJpc0xvYWRlZCIsImlkT3JGaWxlIiwiaXNFbmFibGVkIiwiZW5hYmxlQ29udGVudCIsImlkT3JDb250ZW50IiwicCIsInRvZ2dsZUNvbnRlbnQiLCJsb2FkTmV3Q29udGVudCIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJyZW1vdmVkIiwiZmlsdGVyIiwidCIsIm1hcCIsImFkZGVkIiwiZiIsInVwZGF0ZUxpc3QiLCJyZXN1bHRzIiwibG9hZEFsbENvbnRlbnQiLCJlcnJvcnMiLCJnZXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FB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LEdBQUcsRUFBZjtBQUNBLFVBQU1YLEtBQUssR0FBR3pJLEVBQUUsQ0FBQzBJLFdBQUgsQ0FBZSxLQUFLeEgsYUFBcEIsQ0FBZDs7QUFFQSxTQUFLLE1BQU15QyxRQUFYLElBQXVCOEUsS0FBdkIsRUFBOEI7QUFDMUIsVUFBSSxDQUFDekksRUFBRSxDQUFDZ0UsUUFBSCxDQUFZbEUsSUFBSSxDQUFDTSxPQUFMLENBQWEsS0FBS2MsYUFBbEIsRUFBaUN5QyxRQUFqQyxDQUFaLEVBQXdEUyxNQUF4RCxFQUFELElBQXFFLENBQUNULFFBQVEsQ0FBQ0MsUUFBVCxDQUFrQixLQUFLM0MsU0FBdkIsQ0FBMUUsRUFBNkc7QUFDN0csWUFBTU4sT0FBTyxHQUFHLEtBQUs2RCxXQUFMLENBQWlCYixRQUFqQixFQUEyQixLQUEzQixDQUFoQjtBQUNBLFVBQUloRCxPQUFPLFlBQVl3Ryw2REFBdkIsRUFBcUNpQyxNQUFNLENBQUNqSixJQUFQLENBQVlRLE9BQVo7QUFDeEM7O0FBRUQsU0FBS3VDLFNBQUw7QUFDQSxRQUFJaEIsd0RBQVEsQ0FBQ21ILEdBQVQsQ0FBYSxLQUFLakksVUFBbEIsRUFBOEIsS0FBS0MsUUFBbkMsRUFBNkMsS0FBS0MsRUFBbEQsQ0FBSixFQUEyRCxLQUFLZSxZQUFMO0FBQzNELFdBQU8rRyxNQUFQO0FBQ0g7O0FBbk8rQiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2NvbnRlbnRtYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL2VtaXR0ZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhc3RvcmVcIjtcclxuaW1wb3J0IENvbnRlbnRFcnJvciBmcm9tIFwiLi4vc3RydWN0cy9jb250ZW50ZXJyb3JcIjtcclxuaW1wb3J0IE1ldGFFcnJvciBmcm9tIFwiLi4vc3RydWN0cy9tZXRhZXJyb3JcIjtcclxuaW1wb3J0IFRvYXN0cyBmcm9tIFwiLi4vdWkvdG9hc3RzXCI7XHJcblxyXG5jb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpLk1vZHVsZTtcclxuTW9kdWxlLmdsb2JhbFBhdGhzLnB1c2gocGF0aC5yZXNvbHZlKHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGUuYXBwLmdldEFwcFBhdGgoKSwgXCJub2RlX21vZHVsZXNcIikpO1xyXG5cclxuY29uc3Qgc3BsaXRSZWdleCA9IC9bXlxcU1xcclxcbl0qP1xcblteXFxTXFxyXFxuXSo/XFwqW15cXFNcXHJcXG5dPy87XHJcbmNvbnN0IGVzY2FwZWRBdFJlZ2V4ID0gL15cXFxcQC87XHJcblxyXG5jb25zdCBzdHJpcEJPTSA9IGZ1bmN0aW9uKGNvbnRlbnQpIHtcclxuICAgIGlmIChjb250ZW50LmNoYXJDb2RlQXQoMCkgPT09IDB4RkVGRikge1xyXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNvbnRlbnQ7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb250ZW50TWFuYWdlciB7XHJcblxyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IG1vZHVsZUV4dGVuc2lvbigpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgZXh0ZW5zaW9uKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBwcmVmaXgoKSB7cmV0dXJuIFwiY29udGVudFwiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcInNldHRpbmdzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImNvbnRlbnRcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiYXV0b1JlbG9hZFwiO31cclxuICAgIGVtaXQoZXZlbnQsIC4uLmFyZ3MpIHtyZXR1cm4gRXZlbnRzLmVtaXQoYCR7dGhpcy5wcmVmaXh9LSR7ZXZlbnR9YCwgLi4uYXJncyk7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudGltZUNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5jb250ZW50TGlzdCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7fTtcclxuICAgICAgICB0aGlzLm9yaWdpbmFsUmVxdWlyZSA9IE1vZHVsZS5fZXh0ZW5zaW9uc1t0aGlzLm1vZHVsZUV4dGVuc2lvbl07XHJcbiAgICAgICAgTW9kdWxlLl9leHRlbnNpb25zW3RoaXMubW9kdWxlRXh0ZW5zaW9uXSA9IHRoaXMuZ2V0Q29udGVudFJlcXVpcmUoKTtcclxuICAgICAgICBTZXR0aW5ncy5vbih0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQsIChlbmFibGVkKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlbmFibGVkKSB0aGlzLndhdGNoQ29udGVudCgpO1xyXG4gICAgICAgICAgICBlbHNlIHRoaXMudW53YXRjaENvbnRlbnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdWJjbGFzc2VzIHNob3VsZCBvdmVybG9hZCB0aGlzIGFuZCBtb2RpZnkgdGhlIGNvbnRlbnQgb2JqZWN0IGFzIG5lZWRlZCB0byBmdWxseSBsb2FkIGl0XHJcbiAgICBpbml0aWFsaXplQ29udGVudCgpIHtyZXR1cm47fVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJsb2FkIHRoaXMgYW5kIG1vZGlmeSB0aGUgY29udGVudCBhcyBuZWVkZWQgdG8gcmVxdWlyZSgpIHRoZSBmaWxlXHJcbiAgICBnZXRDb250ZW50TW9kaWZpY2F0aW9uKG1vZHVsZSwgY29udGVudCkge3JldHVybiBjb250ZW50O31cclxuXHJcbiAgICBzdGFydENvbnRlbnQoKSB7cmV0dXJuO31cclxuICAgIHN0b3BDb250ZW50KCkge3JldHVybjt9XHJcblxyXG4gICAgbG9hZFN0YXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHNhdmVkID0gRGF0YVN0b3JlLmdldERhdGEoYCR7dGhpcy5wcmVmaXh9c2ApO1xyXG4gICAgICAgIGlmICghc2F2ZWQpIHJldHVybjtcclxuICAgICAgICBPYmplY3QuYXNzaWduKHRoaXMuc3RhdGUsIHNhdmVkKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU3RhdGUoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldERhdGEoYCR7dGhpcy5wcmVmaXh9c2AsIHRoaXMuc3RhdGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHdhdGNoQ29udGVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy53YXRjaGVyKSByZXR1cm4gTG9nZ2VyLmVycm9yKHRoaXMubmFtZSwgXCJBbHJlYWR5IHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIExvZ2dlci5sb2codGhpcy5uYW1lLCBcIlN0YXJ0aW5nIHRvIHdhdGNoIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlciA9IGZzLndhdGNoKHRoaXMuY29udGVudEZvbGRlciwge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lIHx8ICFmaWxlbmFtZS5lbmRzV2l0aCh0aGlzLmV4dGVuc2lvbikpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMudW5sb2FkQ29udGVudChmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpLmlzRmlsZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMocGF0aC5yZXNvbHZlKHRoaXMuY29udGVudEZvbGRlciwgZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwicmVuYW1lXCIpIHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUsIHRydWUpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHRoaXMucmVsb2FkQ29udGVudChmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaENvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXIpIHJldHVybiBMb2dnZXIuZXJyb3IodGhpcy5uYW1lLCBcIldhcyBub3Qgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyLmNsb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcjtcclxuICAgICAgICBMb2dnZXIubG9nKHRoaXMubmFtZSwgXCJObyBsb25nZXIgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZXh0cmFjdE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0TGluZSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgaGFzT2xkTWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8vTUVUQVwiKTtcclxuICAgICAgICBpZiAoaGFzT2xkTWV0YSkgcmV0dXJuIHRoaXMucGFyc2VPbGRNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIGNvbnN0IGhhc05ld01ldGEgPSBmaXJzdExpbmUuaW5jbHVkZXMoXCIvKipcIik7XHJcbiAgICAgICAgaWYgKGhhc05ld01ldGEpIHJldHVybiB0aGlzLnBhcnNlTmV3TWV0YShjb250ZW50KTtcclxuICAgICAgICB0aHJvdyBuZXcgTWV0YUVycm9yKFwiTUVUQSB3YXMgbm90IGZvdW5kLlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBwYXJzZU9sZE1ldGEoY29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IG1ldGEgPSBjb250ZW50LnNwbGl0KFwiXFxuXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IG1ldGFEYXRhID0gbWV0YS5zdWJzdHJpbmcobWV0YS5sYXN0SW5kZXhPZihcIi8vTUVUQVwiKSArIDYsIG1ldGEubGFzdEluZGV4T2YoXCIqLy9cIikpO1xyXG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IFV0aWxpdGllcy50ZXN0SlNPTihtZXRhRGF0YSk7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIGNvdWxkIG5vdCBiZSBwYXJzZWQuXCIpO1xyXG4gICAgICAgIGlmICghcGFyc2VkLm5hbWUpIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIG1pc3NpbmcgbmFtZSBkYXRhLlwiKTtcclxuICAgICAgICByZXR1cm4gcGFyc2VkO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlTmV3TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgYmxvY2sgPSBjb250ZW50LnNwbGl0KFwiLyoqXCIsIDIpWzFdLnNwbGl0KFwiKi9cIiwgMSlbMF07XHJcbiAgICAgICAgY29uc3Qgb3V0ID0ge307XHJcbiAgICAgICAgbGV0IGZpZWxkID0gXCJcIjtcclxuICAgICAgICBsZXQgYWNjdW0gPSBcIlwiO1xyXG4gICAgICAgIGZvciAoY29uc3QgbGluZSBvZiBibG9jay5zcGxpdChzcGxpdFJlZ2V4KSkge1xyXG4gICAgICAgICAgICBpZiAobGluZS5sZW5ndGggPT09IDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAobGluZS5jaGFyQXQoMCkgPT09IFwiQFwiICYmIGxpbmUuY2hhckF0KDEpICE9PSBcIiBcIikge1xyXG4gICAgICAgICAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbCA9IGxpbmUuaW5kZXhPZihcIiBcIik7XHJcbiAgICAgICAgICAgICAgICBmaWVsZCA9IGxpbmUuc3Vic3RyKDEsIGwgLSAxKTtcclxuICAgICAgICAgICAgICAgIGFjY3VtID0gbGluZS5zdWJzdHIobCArIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gKz0gXCIgXCIgKyBsaW5lLnJlcGxhY2UoXCJcXFxcblwiLCBcIlxcblwiKS5yZXBsYWNlKGVzY2FwZWRBdFJlZ2V4LCBcIkBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgb3V0W2ZpZWxkXSA9IGFjY3VtLnRyaW0oKTtcclxuICAgICAgICBkZWxldGUgb3V0W1wiXCJdO1xyXG4gICAgICAgIHJldHVybiBvdXQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudFJlcXVpcmUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gY29uc3QgYmFzZUZvbGRlciA9IHRoaXMuY29udGVudEZvbGRlcjtcclxuICAgICAgICBjb25zdCBvcmlnaW5hbFJlcXVpcmUgPSB0aGlzLm9yaWdpbmFsUmVxdWlyZTtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24obW9kdWxlLCBmaWxlbmFtZSkge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NzaWJsZVBhdGggPSBwYXRoLnJlc29sdmUoc2VsZi5jb250ZW50Rm9sZGVyLCBwYXRoLmJhc2VuYW1lKGZpbGVuYW1lKSk7XHJcbiAgICAgICAgICAgIGlmICghZnMuZXhpc3RzU3luYyhwb3NzaWJsZVBhdGgpIHx8IGZpbGVuYW1lICE9PSBmcy5yZWFscGF0aFN5bmMocG9zc2libGVQYXRoKSkgcmV0dXJuIFJlZmxlY3QuYXBwbHkob3JpZ2luYWxSZXF1aXJlLCB0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBsZXQgY29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlbmFtZSwgXCJ1dGY4XCIpO1xyXG4gICAgICAgICAgICBjb250ZW50ID0gc3RyaXBCT00oY29udGVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmlkID0gbWV0YS5uYW1lO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxmLmdldENvbnRlbnRNb2RpZmljYXRpb24obW9kdWxlLCBjb250ZW50LCBtZXRhKTtcclxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIGZpbGVuYW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSB0aGUgcmV0dXJuIChpZiBub3QgQ29udGVudEVycm9yKSBhbmQgcHVzaCB0byB0aGlzLmNvbnRlbnRMaXN0XHJcbiAgICBsb2FkQ29udGVudChmaWxlbmFtZSwgc2hvdWxkVG9hc3QgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgdHJ5IHtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4gbmV3IENvbnRlbnRFcnJvcihmaWxlbmFtZSwgZmlsZW5hbWUsIFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfSk7fVxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRMaXN0LmZpbmQoYyA9PiBjLmlkID09IGNvbnRlbnQuaWQpKSByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGZpbGVuYW1lLCBgVGhlcmUgaXMgYWxyZWFkeSBhIHBsdWdpbiB3aXRoIG5hbWUgJHtjb250ZW50Lm5hbWV9YCk7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmluaXRpYWxpemVDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgICAgIGlmIChlcnJvcikgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIHRoaXMuY29udGVudExpc3QucHVzaChjb250ZW50KTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdChcImxvYWRlZFwiLCBjb250ZW50LmlkKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSByZXR1cm4gdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWRDb250ZW50KGlkT3JGaWxlT3JDb250ZW50LCBzaG91bGRUb2FzdCA9IHRydWUsIGlzUmVsb2FkID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JGaWxlT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQ29udGVudCB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JDb250ZW50KSA6IGlkT3JGaWxlT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSBpc1JlbG9hZCA/IHRoaXMuc3RvcENvbnRlbnQoY29udGVudCkgOiB0aGlzLmRpc2FibGVDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgICAgIGRlbGV0ZSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5jYWNoZVtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5yZXNvbHZlKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGNvbnRlbnQuZmlsZW5hbWUpKV07XHJcbiAgICAgICAgdGhpcy5jb250ZW50TGlzdC5zcGxpY2UodGhpcy5jb250ZW50TGlzdC5pbmRleE9mKGNvbnRlbnQpLCAxKTtcclxuICAgICAgICB0aGlzLmVtaXQoXCJ1bmxvYWRlZFwiLCBjb250ZW50LmlkKTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2NvbnRlbnQubmFtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZENvbnRlbnQoaWRPckZpbGVPckNvbnRlbnQsIHNob3VsZFRvYXN0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckZpbGVPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JDb250ZW50IHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGVPckNvbnRlbnQpIDogaWRPckZpbGVPckNvbnRlbnQ7XHJcbiAgICAgICAgY29uc3QgZGlkVW5sb2FkID0gdGhpcy51bmxvYWRDb250ZW50KGNvbnRlbnQsIHNob3VsZFRvYXN0LCB0cnVlKTtcclxuICAgICAgICBpZiAoIWRpZFVubG9hZCkgcmV0dXJuIGRpZFVubG9hZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQ29udGVudChjb250ZW50LmZpbGVuYW1lLCBzaG91bGRUb2FzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2FkZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VuYWJsZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVtjb250ZW50LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVDb250ZW50KGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29udGVudC5pZF0pIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXJ0Q29udGVudChjb250ZW50KTtcclxuICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVDb250ZW50KGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcENvbnRlbnQoY29udGVudCk7XHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVDb250ZW50KGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbaWRdKSB0aGlzLmRpc2FibGVDb250ZW50KGlkKTtcclxuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlQ29udGVudChpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE5ld0NvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmNvbnRlbnRGb2xkZXIpO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gYy5pZCk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhdGhpcy5jb250ZW50TGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmKSkuaXNGaWxlKCkpO1xyXG4gICAgICAgIHJldHVybiB7YWRkZWQsIHJlbW92ZWR9O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpc3QoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMubG9hZE5ld0NvbnRlbnQoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkQ29udGVudChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQWxsQ29udGVudCgpIHtcclxuICAgICAgICB0aGlzLmxvYWRTdGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5jb250ZW50Rm9sZGVyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgQ29udGVudEVycm9yKSBlcnJvcnMucHVzaChjb250ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICAgICAgaWYgKFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQpKSB0aGlzLndhdGNoQ29udGVudCgpO1xyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/contentmanager.js\n"); /***/ }), @@ -371,7 +371,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 import */ var _bdv2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bdv2 */ \"./src/modules/bdv2.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! builtins */ \"./src/builtins/builtins.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n\n\n // import EmoteModule from \"./emotes\";\n// import QuickEmoteMenu from \"../builtins/emotemenu\";\n\n\n\n\n\n\n\n\n\nfunction Core() {}\n\nCore.prototype.setConfig = function (config) {\n Object.assign(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"], config);\n};\n\nCore.prototype.init = async function () {\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version < data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].minSupportedVersion) {\n ui__WEBPACK_IMPORTED_MODULE_8__[\"Modals\"].alert(\"Not Supported\", \"BetterDiscord v\" + data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version + \" (your version)\" + \" is not supported by the latest js (\" + data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion + \").

Please download the latest version from GitHub\");\n return;\n }\n\n _reactcomponents__WEBPACK_IMPORTED_MODULE_9__[\"default\"].initialize();\n const latestLocalVersion = data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].updater ? data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].updater.LatestVersion : data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].latestVersion;\n\n if (latestLocalVersion > data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version) {\n ui__WEBPACK_IMPORTED_MODULE_8__[\"Modals\"].alert(\"Update Available\", `\n An update for BandagedBD is available (${latestLocalVersion})! Please Reinstall!

\n Download Installer\n `);\n }\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n _settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing EmoteModule\"); // window.emotePromise = EmoteModule.init().then(() => {\n // EmoteModule.initialized = true;\n // Logger.log(\"Startup\", \"Initializing QuickEmoteMenu\");\n // Events.dispatch(\"emotes-loaded\");\n // // QuickEmoteMenu.init();\n // });\n // this.injectExternals();\n\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initialize();\n await this.checkForGuilds();\n _bdv2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Updating Settings\");\n\n for (const module in builtins__WEBPACK_IMPORTED_MODULE_7__) builtins__WEBPACK_IMPORTED_MODULE_7__[module].initialize();\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].loadAllPlugins();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].loadAllThemes(); // PublicServers.initialize();\n // EmoteModule.autoCapitalize();\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n document.getElementsByClassName(\"bd-loaderv2\")[0].remove();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Main Observer\");\n this.initObserver(); // Show loading errors\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Collecting Startup Errors\");\n ui__WEBPACK_IMPORTED_MODULE_8__[\"Modals\"].showContentErrors({\n plugins: pluginErrors,\n themes: themeErrors\n });\n};\n\nCore.prototype.checkForGuilds = function () {\n return new Promise(resolve => {\n const checkForGuilds = function () {\n if (document.readyState != \"complete\") setTimeout(checkForGuilds, 100);\n const wrapper = _bdv2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].guildClasses.wrapper.split(\" \")[0];\n const guild = _bdv2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].guildClasses.listItem.split(\" \")[0];\n const blob = _bdv2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].guildClasses.blobContainer.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);\n setTimeout(checkForGuilds, 100);\n };\n\n checkForGuilds();\n });\n};\n\nCore.prototype.initObserver = function () {\n const mainObserver = new MutationObserver(mutations => {\n for (let i = 0, mlen = mutations.length; i < mlen; i++) {\n const mutation = mutations[i]; // if there was nothing added, skip\n\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) continue;\n const node = mutation.addedNodes[0];\n\n if (node.classList.contains(\"layer-3QrUeG\")) {\n if (node.getElementsByClassName(\"guild-settings-base-section\").length) node.setAttribute(\"layer-id\", \"server-settings\"); // if (node.getElementsByClassName(\"socialLinks-3jqNFy\").length) {\n // node.setAttribute(\"layer-id\", \"user-settings\");\n // node.setAttribute(\"id\", \"user-settings\");\n // if (!document.getElementById(\"bd-settings-sidebar\")) Settings.renderSidebar();\n // }\n }\n }\n });\n mainObserver.observe(document, {\n childList: true,\n subtree: true\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new Core());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkNvcmUiLCJwcm90b3R5cGUiLCJzZXRDb25maWciLCJjb25maWciLCJPYmplY3QiLCJhc3NpZ24iLCJDb25maWciLCJpbml0IiwidmVyc2lvbiIsIm1pblN1cHBvcnRlZFZlcnNpb24iLCJNb2RhbHMiLCJhbGVydCIsImJiZFZlcnNpb24iLCJSZWFjdENvbXBvbmVudHMiLCJpbml0aWFsaXplIiwibGF0ZXN0TG9jYWxWZXJzaW9uIiwidXBkYXRlciIsIkxhdGVzdFZlcnNpb24iLCJsYXRlc3RWZXJzaW9uIiwiTG9nZ2VyIiwibG9nIiwiU2V0dGluZ3MiLCJET01NYW5hZ2VyIiwiY2hlY2tGb3JHdWlsZHMiLCJCRFYyIiwibW9kdWxlIiwiQnVpbHRpbnMiLCJwbHVnaW5FcnJvcnMiLCJQbHVnaW5NYW5hZ2VyIiwibG9hZEFsbFBsdWdpbnMiLCJ0aGVtZUVycm9ycyIsIlRoZW1lTWFuYWdlciIsImxvYWRBbGxUaGVtZXMiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJyZW1vdmUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlYWR5U3RhdGUiLCJzZXRUaW1lb3V0Iiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsInNwbGl0IiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsImRlZmVyTG9hZGVkIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsImkiLCJtbGVuIiwibXV0YXRpb24iLCJhZGRlZE5vZGVzIiwiRWxlbWVudCIsIm5vZGUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInNldEF0dHJpYnV0ZSIsIm9ic2VydmUiLCJjaGlsZExp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QW9CUixNQUFyQixJQUErQixFQUFFTyxRQUFRLENBQUNDLFVBQVQsQ0FBb0IsQ0FBcEIsYUFBa0NDLE9BQXBDLENBQW5DLEVBQWlGO0FBRWpGLFlBQU1DLElBQUksR0FBR0gsUUFBUSxDQUFDQyxVQUFULENBQW9CLENBQXBCLENBQWI7O0FBRUEsVUFBSUUsSUFBSSxDQUFDQyxTQUFMLENBQWVDLFFBQWYsQ0FBd0IsY0FBeEIsQ0FBSixFQUE2QztBQUN6QyxZQUFJRixJQUFJLENBQUM1QixzQkFBTCxDQUE0Qiw2QkFBNUIsRUFBMkRrQixNQUEvRCxFQUF1RVUsSUFBSSxDQUFDRyxZQUFMLENBQWtCLFVBQWxCLEVBQThCLGlCQUE5QixFQUQ5QixDQUd6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0g7QUFDSjtBQUNKLEdBcEJvQixDQUFyQjtBQXNCQVgsY0FBWSxDQUFDWSxPQUFiLENBQXFCakMsUUFBckIsRUFBK0I7QUFDM0JrQyxhQUFTLEVBQUUsSUFEZ0I7QUFFM0JDLFdBQU8sRUFBRTtBQUZrQixHQUEvQjtBQUlILENBM0JEOztBQThCZSxtRUFBSXBFLElBQUosRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2NvcmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQkRWMiBmcm9tIFwiLi9iZHYyXCI7XHJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2VyXCI7XHJcbmltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG4vLyBpbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vZW1vdGVzXCI7XHJcbi8vIGltcG9ydCBRdWlja0Vtb3RlTWVudSBmcm9tIFwiLi4vYnVpbHRpbnMvZW1vdGVtZW51XCI7XHJcbmltcG9ydCBET01NYW5hZ2VyIGZyb20gXCIuL2RvbW1hbmFnZXJcIjtcclxuaW1wb3J0IFBsdWdpbk1hbmFnZXIgZnJvbSBcIi4vcGx1Z2lubWFuYWdlclwiO1xyXG5pbXBvcnQgVGhlbWVNYW5hZ2VyIGZyb20gXCIuL3RoZW1lbWFuYWdlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCAqIGFzIEJ1aWx0aW5zIGZyb20gXCJidWlsdGluc1wiO1xyXG5pbXBvcnQge01vZGFsc30gZnJvbSBcInVpXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcblxyXG5mdW5jdGlvbiBDb3JlKCkge1xyXG59XHJcblxyXG5Db3JlLnByb3RvdHlwZS5zZXRDb25maWcgPSBmdW5jdGlvbihjb25maWcpIHtcclxuICAgIE9iamVjdC5hc3NpZ24oQ29uZmlnLCBjb25maWcpO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdCA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgaWYgKENvbmZpZy52ZXJzaW9uIDwgQ29uZmlnLm1pblN1cHBvcnRlZFZlcnNpb24pIHtcclxuICAgICAgICBNb2RhbHMuYWxlcnQoXCJOb3QgU3VwcG9ydGVkXCIsIFwiQmV0dGVyRGlzY29yZCB2XCIgKyBDb25maWcudmVyc2lvbiArIFwiICh5b3VyIHZlcnNpb24pXCIgKyBcIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBsYXRlc3QganMgKFwiICsgQ29uZmlnLmJiZFZlcnNpb24gKyBcIikuPGJyPjxicj4gUGxlYXNlIGRvd25sb2FkIHRoZSBsYXRlc3QgdmVyc2lvbiBmcm9tIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+R2l0SHViPC9hPlwiKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBSZWFjdENvbXBvbmVudHMuaW5pdGlhbGl6ZSgpO1xyXG4gICAgY29uc3QgbGF0ZXN0TG9jYWxWZXJzaW9uID0gQ29uZmlnLnVwZGF0ZXIgPyBDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogQ29uZmlnLmxhdGVzdFZlcnNpb247XHJcbiAgICBpZiAobGF0ZXN0TG9jYWxWZXJzaW9uID4gQ29uZmlnLnZlcnNpb24pIHtcclxuICAgICAgICBNb2RhbHMuYWxlcnQoXCJVcGRhdGUgQXZhaWxhYmxlXCIsIGBcclxuICAgICAgICAgICAgQW4gdXBkYXRlIGZvciBCYW5kYWdlZEJEIGlzIGF2YWlsYWJsZSAoJHtsYXRlc3RMb2NhbFZlcnNpb259KSEgUGxlYXNlIFJlaW5zdGFsbCE8YnIgLz48YnIgLz5cclxuICAgICAgICAgICAgPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5Eb3dubG9hZCBJbnN0YWxsZXI8L2E+XHJcbiAgICAgICAgYCk7XHJcbiAgICB9XHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XHJcbiAgICBTZXR0aW5ncy5pbml0aWFsaXplKCk7XHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBFbW90ZU1vZHVsZVwiKTtcclxuICAgIC8vIHdpbmRvdy5lbW90ZVByb21pc2UgPSBFbW90ZU1vZHVsZS5pbml0KCkudGhlbigoKSA9PiB7XHJcbiAgICAvLyAgICAgRW1vdGVNb2R1bGUuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgLy8gICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFF1aWNrRW1vdGVNZW51XCIpO1xyXG4gICAgLy8gICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICAvLyAgICAgLy8gUXVpY2tFbW90ZU1lbnUuaW5pdCgpO1xyXG4gICAgLy8gfSk7XHJcblxyXG4gICAgLy8gdGhpcy5pbmplY3RFeHRlcm5hbHMoKTtcclxuXHJcbiAgICBET01NYW5hZ2VyLmluaXRpYWxpemUoKTtcclxuICAgIGF3YWl0IHRoaXMuY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIEJEVjIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJVcGRhdGluZyBTZXR0aW5nc1wiKTtcclxuICAgIGZvciAoY29uc3QgbW9kdWxlIGluIEJ1aWx0aW5zKSBCdWlsdGluc1ttb2R1bGVdLmluaXRpYWxpemUoKTtcclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgUGx1Z2luc1wiKTtcclxuICAgIGNvbnN0IHBsdWdpbkVycm9ycyA9IFBsdWdpbk1hbmFnZXIubG9hZEFsbFBsdWdpbnMoKTtcclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkxvYWRpbmcgVGhlbWVzXCIpO1xyXG4gICAgY29uc3QgdGhlbWVFcnJvcnMgPSBUaGVtZU1hbmFnZXIubG9hZEFsbFRoZW1lcygpO1xyXG5cclxuICAgIC8vIFB1YmxpY1NlcnZlcnMuaW5pdGlhbGl6ZSgpO1xyXG4gICAgLy8gRW1vdGVNb2R1bGUuYXV0b0NhcGl0YWxpemUoKTtcclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIlJlbW92aW5nIExvYWRpbmcgSWNvblwiKTtcclxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJiZC1sb2FkZXJ2MlwiKVswXS5yZW1vdmUoKTtcclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIE1haW4gT2JzZXJ2ZXJcIik7XHJcbiAgICB0aGlzLmluaXRPYnNlcnZlcigpO1xyXG5cclxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcclxuICAgIE1vZGFscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzLCB0aGVtZXM6IHRoZW1lRXJyb3JzfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5jaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgIGNvbnN0IGNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlICE9IFwiY29tcGxldGVcIikgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IEJEVjIuZ3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY2hlY2tGb3JHdWlsZHMoKTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdE9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgbWFpbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm90aGluZyBhZGRlZCwgc2tpcFxyXG4gICAgICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwibGF5ZXItM1FyVWVHXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZ3VpbGQtc2V0dGluZ3MtYmFzZS1zZWN0aW9uXCIpLmxlbmd0aCkgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwic29jaWFsTGlua3MtM2pxTkZ5XCIpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZC1zZXR0aW5ncy1zaWRlYmFyXCIpKSBTZXR0aW5ncy5yZW5kZXJTaWRlYmFyKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBtYWluT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _bdv2__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./bdv2 */ \"./src/modules/bdv2.js\");\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! builtins */ \"./src/builtins/builtins.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n\n\n // import EmoteModule from \"./emotes\";\n// import QuickEmoteMenu from \"../builtins/emotemenu\";\n\n\n\n\n\n\n\n\n\n\nconst GuildClasses = _discordmodules__WEBPACK_IMPORTED_MODULE_11__[\"default\"].GuildClasses;\n\nfunction Core() {}\n\nCore.prototype.setConfig = function (config) {\n Object.assign(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"], config);\n};\n\nCore.prototype.init = async function () {\n if (data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version < data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].minSupportedVersion) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].alert(\"Not Supported\", \"BetterDiscord v\" + data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].version + \" (your version)\" + \" is not supported by the latest js (\" + data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].bbdVersion + \").

Please download the latest version from GitHub\");\n return;\n } // const latestLocalVersion = Config.updater ? Config.updater.LatestVersion : Config.latestVersion;\n // if (latestLocalVersion > Config.version) {\n // Modals.alert(\"Update Available\", `\n // An update for BandagedBD is available (${latestLocalVersion})! Please Reinstall!

\n // Download Installer\n // `);\n // }\n\n\n _datastore__WEBPACK_IMPORTED_MODULE_10__[\"default\"].initialize();\n _reactcomponents__WEBPACK_IMPORTED_MODULE_9__[\"default\"].initialize();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n _settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].initialize();\n await this.waitForGuilds();\n _bdv2__WEBPACK_IMPORTED_MODULE_0__[\"default\"].initialize();\n\n for (const module in builtins__WEBPACK_IMPORTED_MODULE_7__) builtins__WEBPACK_IMPORTED_MODULE_7__[module].initialize();\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].loadAllPlugins();\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].loadAllThemes(); // PublicServers.initialize();\n // EmoteModule.autoCapitalize();\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n document.getElementsByClassName(\"bd-loaderv2\")[0].remove(); // Show loading errors\n\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Collecting Startup Errors\");\n _ui_modals__WEBPACK_IMPORTED_MODULE_8__[\"default\"].showContentErrors({\n plugins: pluginErrors,\n themes: themeErrors\n });\n};\n\nCore.prototype.waitForGuilds = function () {\n return new Promise(resolve => {\n const checkForGuilds = function () {\n if (document.readyState != \"complete\") setTimeout(checkForGuilds, 100);\n const wrapper = GuildClasses.wrapper.split(\" \")[0];\n const guild = GuildClasses.listItem.split(\" \")[0];\n const blob = GuildClasses.blobContainer.split(\" \")[0];\n if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(data__WEBPACK_IMPORTED_MODULE_2__[\"Config\"].deferLoaded = true);\n setTimeout(checkForGuilds, 100);\n };\n\n checkForGuilds();\n });\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new Core());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkd1aWxkQ2xhc3NlcyIsIkRpc2NvcmRNb2R1bGVzIiwiQ29yZSIsInByb3RvdHlwZSIsInNldENvbmZpZyIsImNvbmZpZyIsIk9iamVjdCIsImFzc2lnbiIsIkNvbmZpZyIsImluaXQiLCJ2ZXJzaW9uIiwibWluU3VwcG9ydGVkVmVyc2lvbiIsIk1vZGFscyIsImFsZXJ0IiwiYmJkVmVyc2lvbiIsIkRhdGFTdG9yZSIsImluaXRpYWxpemUiLCJSZWFjdENvbXBvbmVudHMiLCJMb2dnZXIiLCJsb2ciLCJTZXR0aW5ncyIsIkRPTU1hbmFnZXIiLCJ3YWl0Rm9yR3VpbGRzIiwiQkRWMiIsIm1vZHVsZSIsIkJ1aWx0aW5zIiwicGx1Z2luRXJyb3JzIiwiUGx1Z2luTWFuYWdlciIsImxvYWRBbGxQbHVnaW5zIiwidGhlbWVFcnJvcnMiLCJUaGVtZU1hbmFnZXIiLCJsb2FkQWxsVGhlbWVzIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwicmVtb3ZlIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJwbHVnaW5zIiwidGhlbWVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGVja0Zvckd1aWxkcyIsInJlYWR5U3RhdGUiLCJzZXRUaW1lb3V0Iiwid3JhcHBlciIsInNwbGl0IiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsImRlZmVyTG9hZGVkIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7Q0FFQTtBQUNBOztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLFlBQVksR0FBR0Msd0RBQWMsQ0FBQ0QsWUFBcEM7O0FBRUEsU0FBU0UsSUFBVCxHQUFnQixDQUNmOztBQUVEQSxJQUFJLENBQUNDLFNBQUwsQ0FBZUMsU0FBZixHQUEyQixVQUFTQyxNQUFULEVBQWlCO0FBQ3hDQyxRQUFNLENBQUNDLE1BQVAsQ0FBY0MsMkNBQWQsRUFBc0JILE1BQXRCO0FBQ0gsQ0FGRDs7QUFJQUgsSUFBSSxDQUFDQyxTQUFMLENBQWVNLElBQWYsR0FBc0Isa0JBQWlCO0FBQ25DLE1BQUlELDJDQUFNLENBQUNFLE9BQVAsR0FBaUJGLDJDQUFNLENBQUNHLG1CQUE1QixFQUFpRDtBQUM3Q0Msc0RBQU0sQ0FBQ0MsS0FBUCxDQUFhLGVBQWIsRUFBOEIsb0JBQW9CTCwyQ0FBTSxDQUFDRSxPQUEzQixHQUFxQyxpQkFBckMsR0FBeUQsc0NBQXpELEdBQWtHRiwyQ0FBTSxDQUFDTSxVQUF6RyxHQUFzSCxxSkFBcEo7QUFDQTtBQUNILEdBSmtDLENBS25DO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFFQUMscURBQVMsQ0FBQ0MsVUFBVjtBQUNBQywwREFBZSxDQUFDRCxVQUFoQjtBQUVBRSxpREFBTSxDQUFDQyxHQUFQLENBQVcsU0FBWCxFQUFzQix1QkFBdEI7QUFDQUMsMERBQVEsQ0FBQ0osVUFBVDtBQUVBSyxxREFBVSxDQUFDTCxVQUFYO0FBQ0EsUUFBTSxLQUFLTSxhQUFMLEVBQU47QUFDQUMsK0NBQUksQ0FBQ1AsVUFBTDs7QUFDQSxPQUFLLE1BQU1RLE1BQVgsSUFBcUJDLHFDQUFyQixFQUErQkEscUNBQVEsQ0FBQ0QsTUFBRCxDQUFSLENBQWlCUixVQUFqQjs7QUFFL0JFLGlEQUFNLENBQUNDLEdBQVAsQ0FBVyxTQUFYLEVBQXNCLGlCQUF0QjtBQUNBLFFBQU1PLFlBQVksR0FBR0Msc0RBQWEsQ0FBQ0MsY0FBZCxFQUFyQjtBQUVBVixpREFBTSxDQUFDQyxHQUFQLENBQVcsU0FBWCxFQUFzQixnQkFBdEI7QUFDQSxRQUFNVSxXQUFXLEdBQUdDLHFEQUFZLENBQUNDLGFBQWIsRUFBcEIsQ0E1Qm1DLENBOEJuQztBQUNBOztBQUVBYixpREFBTSxDQUFDQyxHQUFQLENBQVcsU0FBWCxFQUFzQix1QkFBdEI7QUFDQWEsVUFBUSxDQUFDQyxzQkFBVCxDQUFnQyxhQUFoQyxFQUErQyxDQUEvQyxFQUFrREMsTUFBbEQsR0FsQ21DLENBb0NuQzs7QUFDQWhCLGlEQUFNLENBQUNDLEdBQVAsQ0FBVyxTQUFYLEVBQXNCLDJCQUF0QjtBQUNBUCxvREFBTSxDQUFDdUIsaUJBQVAsQ0FBeUI7QUFBQ0MsV0FBTyxFQUFFVixZQUFWO0FBQXdCVyxVQUFNLEVBQUVSO0FBQWhDLEdBQXpCO0FBQ0gsQ0F2Q0Q7O0FBeUNBM0IsSUFBSSxDQUFDQyxTQUFMLENBQWVtQixhQUFmLEdBQStCLFlBQVc7QUFDdEMsU0FBTyxJQUFJZ0IsT0FBSixDQUFZQyxPQUFPLElBQUk7QUFDMUIsVUFBTUMsY0FBYyxHQUFHLFlBQVc7QUFDOUIsVUFBSVIsUUFBUSxDQUFDUyxVQUFULElBQXVCLFVBQTNCLEVBQXVDQyxVQUFVLENBQUNGLGNBQUQsRUFBaUIsR0FBakIsQ0FBVjtBQUN2QyxZQUFNRyxPQUFPLEdBQUczQyxZQUFZLENBQUMyQyxPQUFiLENBQXFCQyxLQUFyQixDQUEyQixHQUEzQixFQUFnQyxDQUFoQyxDQUFoQjtBQUNBLFlBQU1DLEtBQUssR0FBRzdDLFlBQVksQ0FBQzhDLFFBQWIsQ0FBc0JGLEtBQXRCLENBQTRCLEdBQTVCLEVBQWlDLENBQWpDLENBQWQ7QUFDQSxZQUFNRyxJQUFJLEdBQUcvQyxZQUFZLENBQUNnRCxhQUFiLENBQTJCSixLQUEzQixDQUFpQyxHQUFqQyxFQUFzQyxDQUF0QyxDQUFiO0FBQ0EsVUFBSVosUUFBUSxDQUFDaUIsZ0JBQVQsQ0FBMkIsSUFBR04sT0FBUSxLQUFJRSxLQUFNLEtBQUlFLElBQUssRUFBekQsRUFBNERHLE1BQTVELEdBQXFFLENBQXpFLEVBQTRFLE9BQU9YLE9BQU8sQ0FBQy9CLDJDQUFNLENBQUMyQyxXQUFQLEdBQXFCLElBQXRCLENBQWQ7QUFDNUVULGdCQUFVLENBQUNGLGNBQUQsRUFBaUIsR0FBakIsQ0FBVjtBQUNILEtBUEQ7O0FBU0FBLGtCQUFjO0FBQ2pCLEdBWE0sQ0FBUDtBQVlILENBYkQ7O0FBZWUsbUVBQUl0QyxJQUFKLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb3JlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJEVjIgZnJvbSBcIi4vYmR2MlwiO1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuLy8gaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG4vLyBpbXBvcnQgUXVpY2tFbW90ZU1lbnUgZnJvbSBcIi4uL2J1aWx0aW5zL2Vtb3RlbWVudVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgKiBhcyBCdWlsdGlucyBmcm9tIFwiYnVpbHRpbnNcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vdWkvbW9kYWxzXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5cclxuY29uc3QgR3VpbGRDbGFzc2VzID0gRGlzY29yZE1vZHVsZXMuR3VpbGRDbGFzc2VzO1xyXG5cclxuZnVuY3Rpb24gQ29yZSgpIHtcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmIChDb25maWcudmVyc2lvbiA8IENvbmZpZy5taW5TdXBwb3J0ZWRWZXJzaW9uKSB7XHJcbiAgICAgICAgTW9kYWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIENvbmZpZy5iYmRWZXJzaW9uICsgXCIpLjxicj48YnI+IFBsZWFzZSBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkdpdEh1YjwvYT5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc3QgbGF0ZXN0TG9jYWxWZXJzaW9uID0gQ29uZmlnLnVwZGF0ZXIgPyBDb25maWcudXBkYXRlci5MYXRlc3RWZXJzaW9uIDogQ29uZmlnLmxhdGVzdFZlcnNpb247XHJcbiAgICAvLyBpZiAobGF0ZXN0TG9jYWxWZXJzaW9uID4gQ29uZmlnLnZlcnNpb24pIHtcclxuICAgIC8vICAgICBNb2RhbHMuYWxlcnQoXCJVcGRhdGUgQXZhaWxhYmxlXCIsIGBcclxuICAgIC8vICAgICAgICAgQW4gdXBkYXRlIGZvciBCYW5kYWdlZEJEIGlzIGF2YWlsYWJsZSAoJHtsYXRlc3RMb2NhbFZlcnNpb259KSEgUGxlYXNlIFJlaW5zdGFsbCE8YnIgLz48YnIgLz5cclxuICAgIC8vICAgICAgICAgPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5Eb3dubG9hZCBJbnN0YWxsZXI8L2E+XHJcbiAgICAvLyAgICAgYCk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgRGF0YVN0b3JlLmluaXRpYWxpemUoKTtcclxuICAgIFJlYWN0Q29tcG9uZW50cy5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgU2V0dGluZ3NcIik7XHJcbiAgICBTZXR0aW5ncy5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgRE9NTWFuYWdlci5pbml0aWFsaXplKCk7XHJcbiAgICBhd2FpdCB0aGlzLndhaXRGb3JHdWlsZHMoKTtcclxuICAgIEJEVjIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgaW4gQnVpbHRpbnMpIEJ1aWx0aW5zW21vZHVsZV0uaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgY29uc3QgcGx1Z2luRXJyb3JzID0gUGx1Z2luTWFuYWdlci5sb2FkQWxsUGx1Z2lucygpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBjb25zdCB0aGVtZUVycm9ycyA9IFRoZW1lTWFuYWdlci5sb2FkQWxsVGhlbWVzKCk7XHJcblxyXG4gICAgLy8gUHVibGljU2VydmVycy5pbml0aWFsaXplKCk7XHJcbiAgICAvLyBFbW90ZU1vZHVsZS5hdXRvQ2FwaXRhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xyXG5cclxuICAgIC8vIFNob3cgbG9hZGluZyBlcnJvcnNcclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiQ29sbGVjdGluZyBTdGFydHVwIEVycm9yc1wiKTtcclxuICAgIE1vZGFscy5zaG93Q29udGVudEVycm9ycyh7cGx1Z2luczogcGx1Z2luRXJyb3JzLCB0aGVtZXM6IHRoZW1lRXJyb3JzfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS53YWl0Rm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJjb21wbGV0ZVwiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gR3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEd1aWxkQ2xhc3Nlcy5saXN0SXRlbS5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGJsb2IgPSBHdWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjaGVja0Zvckd1aWxkcygpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); /***/ }), @@ -395,7 +395,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 _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/**\r\n * A large list of known and useful webpack modules internal to Discord.\r\n *\r\n * @module DiscordModules\r\n * @version 0.0.3\r\n */\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].memoizeObject({\n get React() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createElement\", \"cloneElement\");\n },\n\n get ReactDOM() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"render\", \"findDOMNode\");\n },\n\n get Flux() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"connectStores\");\n },\n\n get Events() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(\"setMaxListeners\", \"emit\");\n },\n\n /* Guild Info, Stores, and Utilities */\n get GuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuild\");\n },\n\n get SortedGuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSortedGuilds\");\n },\n\n get SelectedGuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getLastSelectedGuildId\");\n },\n\n get GuildSync() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSyncedGuilds\");\n },\n\n get GuildInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getAcronym\");\n },\n\n get GuildChannelsStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getChannels\", \"getDefaultChannel\");\n },\n\n get GuildMemberStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMember\");\n },\n\n get MemberCountStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMemberCounts\");\n },\n\n get GuildEmojiStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getEmojis\");\n },\n\n get GuildActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"markGuildAsRead\");\n },\n\n get GuildPermissions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuildPermissions\");\n },\n\n /* Channel Store & Actions */\n get ChannelStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getChannels\", \"getDMFromUserId\");\n },\n\n get SelectedChannelStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getLastSelectedChannelId\");\n },\n\n get ChannelActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"selectChannel\");\n },\n\n get PrivateChannelActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"openPrivateChannel\");\n },\n\n get ChannelSelector() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"selectGuild\", \"selectChannel\");\n },\n\n /* Current User Info, State and Settings */\n get UserInfoStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getToken\");\n },\n\n get UserSettingsStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"guildPositions\");\n },\n\n get AccountManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"register\", \"login\");\n },\n\n get UserSettingsUpdater() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"updateRemoteSettings\");\n },\n\n get OnlineWatcher() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isOnline\");\n },\n\n get CurrentUserIdle() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getIdleTime\");\n },\n\n get RelationshipStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isBlocked\", \"getFriendIDs\");\n },\n\n get RelationshipManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"addRelationship\");\n },\n\n get MentionStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMentions\");\n },\n\n /* User Stores and Utils */\n get UserStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getCurrentUser\");\n },\n\n get UserStatusStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getStatus\", \"getState\");\n },\n\n get UserTypingStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isTyping\");\n },\n\n get UserActivityStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getActivity\");\n },\n\n get UserNameResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getName\");\n },\n\n get UserNoteStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getNote\");\n },\n\n get UserNoteActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"updateNote\");\n },\n\n /* Emoji Store and Utils */\n get EmojiInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isEmojiDisabled\");\n },\n\n get EmojiUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuildEmoji\");\n },\n\n get EmojiStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getByCategory\", \"EMOJI_NAME_RE\");\n },\n\n /* Invite Store and Utils */\n get InviteStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getInvites\");\n },\n\n get InviteResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"findInvite\");\n },\n\n get InviteActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"acceptInvite\");\n },\n\n /* Discord Objects & Utils */\n get DiscordConstants() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\");\n },\n\n get DiscordPermissions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\").Permissions;\n },\n\n get PermissionUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getHighestRole\");\n },\n\n get ColorConverter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"hex2int\");\n },\n\n get ColorShader() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"darken\");\n },\n\n get TinyColor() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(\"toRgb\");\n },\n\n get ClassResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getClass\");\n },\n\n get ButtonData() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"ButtonSizes\");\n },\n\n get IconNames() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"IconNames\");\n },\n\n get NavigationUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"transitionTo\", \"replaceWith\", \"getHistory\");\n },\n\n /* Discord Messages */\n get MessageStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMessages\");\n },\n\n get MessageActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"jumpToMessage\", \"_sendMessage\");\n },\n\n get MessageQueue() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"enqueue\");\n },\n\n get MessageParser() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createMessage\", \"parse\", \"unparse\");\n },\n\n /* Text Processing */\n get hljs() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"highlight\", \"highlightBlock\");\n },\n\n get SimpleMarkdown() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"parseBlock\", \"parseInline\", \"defaultOutput\");\n },\n\n /* Experiments */\n get ExperimentStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getExperimentOverrides\");\n },\n\n get ExperimentsManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isDeveloper\");\n },\n\n get CurrentExperiment() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getExperimentId\");\n },\n\n /* Images, Avatars and Utils */\n get ImageResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getUserAvatarURL\", \"getGuildIconURL\");\n },\n\n get ImageUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSizedImageSrc\");\n },\n\n get AvatarDefaults() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");\n },\n\n /* Window, DOM, HTML */\n get WindowInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isFocused\", \"windowSize\");\n },\n\n get TagInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"VALID_TAG_NAMES\");\n },\n\n get DOMInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"canUseDOM\");\n },\n\n /* Locale/Location and Time */\n get LocaleManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setLocale\");\n },\n\n get Moment() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"parseZone\");\n },\n\n get LocationManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createLocation\");\n },\n\n get Timestamps() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"fromTimestamp\");\n },\n\n get TimeFormatter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"dateFormat\");\n },\n\n /* Strings and Utils */\n get Strings() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Messages\").Messages;\n },\n\n get StringFormats() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"a\", \"z\");\n },\n\n get StringUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"toASCII\");\n },\n\n /* URLs and Utils */\n get URLParser() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Url\", \"parse\");\n },\n\n get ExtraURLs() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getArticleURL\");\n },\n\n /* Drag & Drop */\n get DNDActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"beginDrag\");\n },\n\n get DNDSources() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"addTarget\");\n },\n\n get DNDObjects() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"DragSource\");\n },\n\n /* Media Stuff (Audio/Video) */\n get MediaDeviceInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Codecs\", \"SUPPORTED_BROWSERS\");\n },\n\n get MediaInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getOutputVolume\");\n },\n\n get MediaEngineInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"MediaEngineFeatures\");\n },\n\n get VoiceInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"EchoCancellation\");\n },\n\n get VideoStream() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getVideoStream\");\n },\n\n get SoundModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"playSound\");\n },\n\n /* Electron & Other Internals with Utils*/\n get ElectronModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setBadge\");\n },\n\n get Dispatcher() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"dirtyDispatch\");\n },\n\n get PathUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"hasBasename\");\n },\n\n get NotificationModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"showNotification\");\n },\n\n get RouterModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Router\");\n },\n\n get APIModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getAPIBaseURL\");\n },\n\n get AnalyticEvents() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"AnalyticEventConfigs\");\n },\n\n get KeyGenerator() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByRegex(/\"binary\"/);\n },\n\n get Buffers() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Buffer\", \"kMaxLength\");\n },\n\n get DeviceStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getDevices\");\n },\n\n get SoftwareInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"os\");\n },\n\n get CurrentContext() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setTagsContext\");\n }\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZGlzY29yZG1vZHVsZXMuanM/YTU0ZCJdLCJuYW1lcyI6WyJVdGlsaXRpZXMiLCJtZW1vaXplT2JqZWN0IiwiUmVhY3QiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJSZWFjdERPTSIsIkZsdXgiLCJFdmVudHMiLCJnZXRCeVByb3RvdHlwZXMiLCJHdWlsZFN0b3JlIiwiU29ydGVkR3VpbGRTdG9yZSIsIlNlbGVjdGVkR3VpbGRTdG9yZSIsIkd1aWxkU3luYyIsIkd1aWxkSW5mbyIsIkd1aWxkQ2hhbm5lbHNTdG9yZSIsIkd1aWxkTWVtYmVyU3RvcmUiLCJNZW1iZXJDb3VudFN0b3JlIiwiR3VpbGRFbW9qaVN0b3JlIiwiR3VpbGRBY3Rpb25zIiwiR3VpbGRQZXJtaXNzaW9ucyIsIkNoYW5uZWxTdG9yZSIsIlNlbGVjdGVkQ2hhbm5lbFN0b3JlIiwiQ2hhbm5lbEFjdGlvbnMiLCJQcml2YXRlQ2hhbm5lbEFjdGlvbnMiLCJDaGFubmVsU2VsZWN0b3IiLCJVc2VySW5mb1N0b3JlIiwiVXNlclNldHRpbmdzU3RvcmUiLCJBY2NvdW50TWFuYWdlciIsIlVzZXJTZXR0aW5nc1VwZGF0ZXIiLCJPbmxpbmVXYXRjaGVyIiwiQ3VycmVudFVzZXJJZGxlIiwiUmVsYXRpb25zaGlwU3RvcmUiLCJSZWxhdGlvbnNoaXBNYW5hZ2VyIiwiTWVudGlvblN0b3JlIiwiVXNlclN0b3JlIiwiVXNlclN0YXR1c1N0b3JlIiwiVXNlclR5cGluZ1N0b3JlIiwiVXNlckFjdGl2aXR5U3RvcmUiLCJVc2VyTmFtZVJlc29sdmVyIiwiVXNlck5vdGVTdG9yZSIsIlVzZXJOb3RlQWN0aW9ucyIsIkVtb2ppSW5mbyIsIkVtb2ppVXRpbHMiLCJFbW9qaVN0b3JlIiwiSW52aXRlU3RvcmUiLCJJbnZpdGVSZXNvbHZlciIsIkludml0ZUFjdGlvbnMiLCJEaXNjb3JkQ29uc3RhbnRzIiwiRGlzY29yZFBlcm1pc3Npb25zIiwiUGVybWlzc2lvbnMiLCJQZXJtaXNzaW9uVXRpbHMiLCJDb2xvckNvbnZlcnRlciIsIkNvbG9yU2hhZGVyIiwiVGlueUNvbG9yIiwiQ2xhc3NSZXNvbHZlciIsIkJ1dHRvbkRhdGEiLCJJY29uTmFtZXMiLCJOYXZpZ2F0aW9uVXRpbHMiLCJNZXNzYWdlU3RvcmUiLCJNZXNzYWdlQWN0aW9ucyIsIk1lc3NhZ2VRdWV1ZSIsIk1lc3NhZ2VQYXJzZXIiLCJobGpzIiwiU2ltcGxlTWFya2Rvd24iLCJFeHBlcmltZW50U3RvcmUiLCJFeHBlcmltZW50c01hbmFnZXIiLCJDdXJyZW50RXhwZXJpbWVudCIsIkltYWdlUmVzb2x2ZXIiLCJJbWFnZVV0aWxzIiwiQXZhdGFyRGVmYXVsdHMiLCJXaW5kb3dJbmZvIiwiVGFnSW5mbyIsIkRPTUluZm8iLCJMb2NhbGVNYW5hZ2VyIiwiTW9tZW50IiwiTG9jYXRpb25NYW5hZ2VyIiwiVGltZXN0YW1wcyIsIlRpbWVGb3JtYXR0ZXIiLCJTdHJpbmdzIiwiTWVzc2FnZXMiLCJTdHJpbmdGb3JtYXRzIiwiU3RyaW5nVXRpbHMiLCJVUkxQYXJzZXIiLCJFeHRyYVVSTHMiLCJETkRBY3Rpb25zIiwiRE5EU291cmNlcyIsIkRORE9iamVjdHMiLCJNZWRpYURldmljZUluZm8iLCJNZWRpYUluZm8iLCJNZWRpYUVuZ2luZUluZm8iLCJWb2ljZUluZm8iLCJWaWRlb1N0cmVhbSIsIlNvdW5kTW9kdWxlIiwiRWxlY3Ryb25Nb2R1bGUiLCJEaXNwYXRjaGVyIiwiUGF0aFV0aWxzIiwiTm90aWZpY2F0aW9uTW9kdWxlIiwiUm91dGVyTW9kdWxlIiwiQVBJTW9kdWxlIiwiQW5hbHl0aWNFdmVudHMiLCJLZXlHZW5lcmF0b3IiLCJnZXRCeVJlZ2V4IiwiQnVmZmVycyIsIkRldmljZVN0b3JlIiwiU29mdHdhcmVJbmZvIiwiQ3VycmVudENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBOzs7Ozs7QUFPQTtBQUNBO0FBRWVBLGlIQUFTLENBQUNDLGFBQVYsQ0FBd0I7QUFDbkMsTUFBSUMsS0FBSixHQUFZO0FBQUMsV0FBT0MsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixFQUEyQyxjQUEzQyxDQUFQO0FBQW1FLEdBRDdDOztBQUVuQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPRix1REFBYyxDQUFDQyxVQUFmLENBQTBCLFFBQTFCLEVBQW9DLGFBQXBDLENBQVA7QUFBMkQsR0FGeEM7O0FBR25DLE1BQUlFLElBQUosR0FBVztBQUFDLFdBQU9ILHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsQ0FBUDtBQUFtRCxHQUg1Qjs7QUFJbkMsTUFBSUcsTUFBSixHQUFhO0FBQUMsV0FBT0osdURBQWMsQ0FBQ0ssZUFBZixDQUErQixpQkFBL0IsRUFBa0QsTUFBbEQsQ0FBUDtBQUFrRSxHQUo3Qzs7QUFNbkM7QUFDQSxNQUFJQyxVQUFKLEdBQWlCO0FBQUMsV0FBT04sdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixVQUExQixDQUFQO0FBQThDLEdBUDdCOztBQVFuQyxNQUFJTSxnQkFBSixHQUF1QjtBQUFDLFdBQU9QLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsaUJBQTFCLENBQVA7QUFBcUQsR0FSMUM7O0FBU25DLE1BQUlPLGtCQUFKLEdBQXlCO0FBQUMsV0FBT1IsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQix3QkFBMUIsQ0FBUDtBQUE0RCxHQVRuRDs7QUFVbkMsTUFBSVEsU0FBSixHQUFnQjtBQUFDLFdBQU9ULHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsaUJBQTFCLENBQVA7QUFBcUQsR0FWbkM7O0FBV25DLE1BQUlTLFNBQUosR0FBZ0I7QUFBQyxXQUFPVix1REFBYyxDQUFDQyxVQUFmLENBQTBCLFlBQTFCLENBQVA7QUFBZ0QsR0FYOUI7O0FBWW5DLE1BQUlVLGtCQUFKLEdBQXlCO0FBQUMsV0FBT1gsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixhQUExQixFQUF5QyxtQkFBekMsQ0FBUDtBQUFzRSxHQVo3RDs7QUFhbkMsTUFBSVcsZ0JBQUosR0FBdUI7QUFBQyxXQUFPWix1REFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLENBQVA7QUFBK0MsR0FicEM7O0FBY25DLE1BQUlZLGdCQUFKLEdBQXVCO0FBQUMsV0FBT2IsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixpQkFBMUIsQ0FBUDtBQUFxRCxHQWQxQzs7QUFlbkMsTUFBSWEsZUFBSixHQUFzQjtBQUFDLFdBQU9kLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsV0FBMUIsQ0FBUDtBQUErQyxHQWZuQzs7QUFnQm5DLE1BQUljLFlBQUosR0FBbUI7QUFBQyxXQUFPZix1REFBYyxDQUFDQyxVQUFmLENBQTBCLGlCQUExQixDQUFQO0FBQXFELEdBaEJ0Qzs7QUFpQm5DLE1BQUllLGdCQUFKLEdBQXVCO0FBQUMsV0FBT2hCLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIscUJBQTFCLENBQVA7QUFBeUQsR0FqQjlDOztBQW1CbkM7QUFDQSxNQUFJZ0IsWUFBSixHQUFtQjtBQUFDLFdBQU9qQix1REFBYyxDQUFDQyxVQUFmLENBQTBCLGFBQTFCLEVBQXlDLGlCQUF6QyxDQUFQO0FBQW9FLEdBcEJyRDs7QUFxQm5DLE1BQUlpQixvQkFBSixHQUEyQjtBQUFDLFdBQU9sQix1REFBYyxDQUFDQyxVQUFmLENBQTBCLDBCQUExQixDQUFQO0FBQThELEdBckJ2RDs7QUFzQm5DLE1BQUlrQixjQUFKLEdBQXFCO0FBQUMsV0FBT25CLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsQ0FBUDtBQUFtRCxHQXRCdEM7O0FBdUJuQyxNQUFJbUIscUJBQUosR0FBNEI7QUFBQyxXQUFPcEIsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixvQkFBMUIsQ0FBUDtBQUF3RCxHQXZCbEQ7O0FBd0JuQyxNQUFJb0IsZUFBSixHQUFzQjtBQUFDLFdBQU9yQix1REFBYyxDQUFDQyxVQUFmLENBQTBCLGFBQTFCLEVBQXlDLGVBQXpDLENBQVA7QUFBa0UsR0F4QnREOztBQTBCbkM7QUFDQSxNQUFJcUIsYUFBSixHQUFvQjtBQUFDLFdBQU90Qix1REFBYyxDQUFDQyxVQUFmLENBQTBCLFVBQTFCLENBQVA7QUFBOEMsR0EzQmhDOztBQTRCbkMsTUFBSXNCLGlCQUFKLEdBQXdCO0FBQUMsV0FBT3ZCLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZ0JBQTFCLENBQVA7QUFBb0QsR0E1QjFDOztBQTZCbkMsTUFBSXVCLGNBQUosR0FBcUI7QUFBQyxXQUFPeEIsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixVQUExQixFQUFzQyxPQUF0QyxDQUFQO0FBQXVELEdBN0IxQzs7QUE4Qm5DLE1BQUl3QixtQkFBSixHQUEwQjtBQUFDLFdBQU96Qix1REFBYyxDQUFDQyxVQUFmLENBQTBCLHNCQUExQixDQUFQO0FBQTBELEdBOUJsRDs7QUErQm5DLE1BQUl5QixhQUFKLEdBQW9CO0FBQUMsV0FBTzFCLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsVUFBMUIsQ0FBUDtBQUE4QyxHQS9CaEM7O0FBZ0NuQyxNQUFJMEIsZUFBSixHQUFzQjtBQUFDLFdBQU8zQix1REFBYyxDQUFDQyxVQUFmLENBQTBCLGFBQTFCLENBQVA7QUFBaUQsR0FoQ3JDOztBQWlDbkMsTUFBSTJCLGlCQUFKLEdBQXdCO0FBQUMsV0FBTzVCLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsV0FBMUIsRUFBdUMsY0FBdkMsQ0FBUDtBQUErRCxHQWpDckQ7O0FBa0NuQyxNQUFJNEIsbUJBQUosR0FBMEI7QUFBQyxXQUFPN0IsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixpQkFBMUIsQ0FBUDtBQUFxRCxHQWxDN0M7O0FBbUNuQyxNQUFJNkIsWUFBSixHQUFtQjtBQUFDLFdBQU85Qix1REFBYyxDQUFDQyxVQUFmLENBQTBCLGFBQTFCLENBQVA7QUFBaUQsR0FuQ2xDOztBQXFDbkM7QUFDQSxNQUFJOEIsU0FBSixHQUFnQjtBQUFDLFdBQU8vQix1REFBYyxDQUFDQyxVQUFmLENBQTBCLGdCQUExQixDQUFQO0FBQW9ELEdBdENsQzs7QUF1Q25DLE1BQUkrQixlQUFKLEdBQXNCO0FBQUMsV0FBT2hDLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsV0FBMUIsRUFBdUMsVUFBdkMsQ0FBUDtBQUEyRCxHQXZDL0M7O0FBd0NuQyxNQUFJZ0MsZUFBSixHQUFzQjtBQUFDLFdBQU9qQyx1REFBYyxDQUFDQyxVQUFmLENBQTBCLFVBQTFCLENBQVA7QUFBOEMsR0F4Q2xDOztBQXlDbkMsTUFBSWlDLGlCQUFKLEdBQXdCO0FBQUMsV0FBT2xDLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsYUFBMUIsQ0FBUDtBQUFpRCxHQXpDdkM7O0FBMENuQyxNQUFJa0MsZ0JBQUosR0FBdUI7QUFBQyxXQUFPbkMsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixTQUExQixDQUFQO0FBQTZDLEdBMUNsQzs7QUEyQ25DLE1BQUltQyxhQUFKLEdBQW9CO0FBQUMsV0FBT3BDLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsU0FBMUIsQ0FBUDtBQUE2QyxHQTNDL0I7O0FBNENuQyxNQUFJb0MsZUFBSixHQUFzQjtBQUFDLFdBQU9yQyx1REFBYyxDQUFDQyxVQUFmLENBQTBCLFlBQTFCLENBQVA7QUFBZ0QsR0E1Q3BDOztBQThDbkM7QUFDQSxNQUFJcUMsU0FBSixHQUFnQjtBQUFDLFdBQU90Qyx1REFBYyxDQUFDQyxVQUFmLENBQTBCLGlCQUExQixDQUFQO0FBQXFELEdBL0NuQzs7QUFnRG5DLE1BQUlzQyxVQUFKLEdBQWlCO0FBQUMsV0FBT3ZDLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsQ0FBUDtBQUFtRCxHQWhEbEM7O0FBaURuQyxNQUFJdUMsVUFBSixHQUFpQjtBQUFDLFdBQU94Qyx1REFBYyxDQUFDQyxVQUFmLENBQTBCLGVBQTFCLEVBQTJDLGVBQTNDLENBQVA7QUFBb0UsR0FqRG5EOztBQW1EbkM7QUFDQSxNQUFJd0MsV0FBSixHQUFrQjtBQUFDLFdBQU96Qyx1REFBYyxDQUFDQyxVQUFmLENBQTBCLFlBQTFCLENBQVA7QUFBZ0QsR0FwRGhDOztBQXFEbkMsTUFBSXlDLGNBQUosR0FBcUI7QUFBQyxXQUFPMUMsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixZQUExQixDQUFQO0FBQWdELEdBckRuQzs7QUFzRG5DLE1BQUkwQyxhQUFKLEdBQW9CO0FBQUMsV0FBTzNDLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsY0FBMUIsQ0FBUDtBQUFrRCxHQXREcEM7O0FBd0RuQztBQUNBLE1BQUkyQyxnQkFBSixHQUF1QjtBQUFDLFdBQU81Qyx1REFBYyxDQUFDQyxVQUFmLENBQTBCLGFBQTFCLEVBQXlDLGVBQXpDLEVBQTBELGFBQTFELENBQVA7QUFBaUYsR0F6RHRFOztBQTBEbkMsTUFBSTRDLGtCQUFKLEdBQXlCO0FBQUMsV0FBTzdDLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsYUFBMUIsRUFBeUMsZUFBekMsRUFBMEQsYUFBMUQsRUFBeUU2QyxXQUFoRjtBQUE2RixHQTFEcEY7O0FBMkRuQyxNQUFJQyxlQUFKLEdBQXNCO0FBQUMsV0FBTy9DLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZ0JBQTFCLENBQVA7QUFBb0QsR0EzRHhDOztBQTREbkMsTUFBSStDLGNBQUosR0FBcUI7QUFBQyxXQUFPaEQsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixTQUExQixDQUFQO0FBQTZDLEdBNURoQzs7QUE2RG5DLE1BQUlnRCxXQUFKLEdBQWtCO0FBQUMsV0FBT2pELHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsUUFBMUIsQ0FBUDtBQUE0QyxHQTdENUI7O0FBOERuQyxNQUFJaUQsU0FBSixHQUFnQjtBQUFDLFdBQU9sRCx1REFBYyxDQUFDSyxlQUFmLENBQStCLE9BQS9CLENBQVA7QUFBZ0QsR0E5RDlCOztBQStEbkMsTUFBSThDLGFBQUosR0FBb0I7QUFBQyxXQUFPbkQsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixVQUExQixDQUFQO0FBQThDLEdBL0RoQzs7QUFnRW5DLE1BQUltRCxVQUFKLEdBQWlCO0FBQUMsV0FBT3BELHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsYUFBMUIsQ0FBUDtBQUFpRCxHQWhFaEM7O0FBaUVuQyxNQUFJb0QsU0FBSixHQUFnQjtBQUFDLFdBQU9yRCx1REFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLENBQVA7QUFBK0MsR0FqRTdCOztBQWtFbkMsTUFBSXFELGVBQUosR0FBc0I7QUFBQyxXQUFPdEQsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixjQUExQixFQUEwQyxhQUExQyxFQUF5RCxZQUF6RCxDQUFQO0FBQStFLEdBbEVuRTs7QUFvRW5DO0FBQ0EsTUFBSXNELFlBQUosR0FBbUI7QUFBQyxXQUFPdkQsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixhQUExQixDQUFQO0FBQWlELEdBckVsQzs7QUFzRW5DLE1BQUl1RCxjQUFKLEdBQXFCO0FBQUMsV0FBT3hELHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsRUFBMkMsY0FBM0MsQ0FBUDtBQUFtRSxHQXRFdEQ7O0FBdUVuQyxNQUFJd0QsWUFBSixHQUFtQjtBQUFDLFdBQU96RCx1REFBYyxDQUFDQyxVQUFmLENBQTBCLFNBQTFCLENBQVA7QUFBNkMsR0F2RTlCOztBQXdFbkMsTUFBSXlELGFBQUosR0FBb0I7QUFBQyxXQUFPMUQsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixFQUEyQyxPQUEzQyxFQUFvRCxTQUFwRCxDQUFQO0FBQXVFLEdBeEV6RDs7QUEwRW5DO0FBQ0EsTUFBSTBELElBQUosR0FBVztBQUFDLFdBQU8zRCx1REFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLEVBQXVDLGdCQUF2QyxDQUFQO0FBQWlFLEdBM0UxQzs7QUE0RW5DLE1BQUkyRCxjQUFKLEdBQXFCO0FBQUMsV0FBTzVELHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsWUFBMUIsRUFBd0MsYUFBeEMsRUFBdUQsZUFBdkQsQ0FBUDtBQUFnRixHQTVFbkU7O0FBOEVuQztBQUNBLE1BQUk0RCxlQUFKLEdBQXNCO0FBQUMsV0FBTzdELHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsd0JBQTFCLENBQVA7QUFBNEQsR0EvRWhEOztBQWdGbkMsTUFBSTZELGtCQUFKLEdBQXlCO0FBQUMsV0FBTzlELHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsYUFBMUIsQ0FBUDtBQUFpRCxHQWhGeEM7O0FBaUZuQyxNQUFJOEQsaUJBQUosR0FBd0I7QUFBQyxXQUFPL0QsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixpQkFBMUIsQ0FBUDtBQUFxRCxHQWpGM0M7O0FBbUZuQztBQUNBLE1BQUkrRCxhQUFKLEdBQW9CO0FBQUMsV0FBT2hFLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsa0JBQTFCLEVBQThDLGlCQUE5QyxDQUFQO0FBQXlFLEdBcEYzRDs7QUFxRm5DLE1BQUlnRSxVQUFKLEdBQWlCO0FBQUMsV0FBT2pFLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsa0JBQTFCLENBQVA7QUFBc0QsR0FyRnJDOztBQXNGbkMsTUFBSWlFLGNBQUosR0FBcUI7QUFBQyxXQUFPbEUsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixrQkFBMUIsRUFBOEMsaUJBQTlDLENBQVA7QUFBeUUsR0F0RjVEOztBQXdGbkM7QUFDQSxNQUFJa0UsVUFBSixHQUFpQjtBQUFDLFdBQU9uRSx1REFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLEVBQXVDLFlBQXZDLENBQVA7QUFBNkQsR0F6RjVDOztBQTBGbkMsTUFBSW1FLE9BQUosR0FBYztBQUFDLFdBQU9wRSx1REFBYyxDQUFDQyxVQUFmLENBQTBCLGlCQUExQixDQUFQO0FBQXFELEdBMUZqQzs7QUEyRm5DLE1BQUlvRSxPQUFKLEdBQWM7QUFBQyxXQUFPckUsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixXQUExQixDQUFQO0FBQStDLEdBM0YzQjs7QUE2Rm5DO0FBQ0EsTUFBSXFFLGFBQUosR0FBb0I7QUFBQyxXQUFPdEUsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixXQUExQixDQUFQO0FBQStDLEdBOUZqQzs7QUErRm5DLE1BQUlzRSxNQUFKLEdBQWE7QUFBQyxXQUFPdkUsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixXQUExQixDQUFQO0FBQStDLEdBL0YxQjs7QUFnR25DLE1BQUl1RSxlQUFKLEdBQXNCO0FBQUMsV0FBT3hFLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZ0JBQTFCLENBQVA7QUFBb0QsR0FoR3hDOztBQWlHbkMsTUFBSXdFLFVBQUosR0FBaUI7QUFBQyxXQUFPekUsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixDQUFQO0FBQW1ELEdBakdsQzs7QUFrR25DLE1BQUl5RSxhQUFKLEdBQW9CO0FBQUMsV0FBTzFFLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsWUFBMUIsQ0FBUDtBQUFnRCxHQWxHbEM7O0FBb0duQztBQUNBLE1BQUkwRSxPQUFKLEdBQWM7QUFBQyxXQUFPM0UsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixVQUExQixFQUFzQzJFLFFBQTdDO0FBQXVELEdBckduQzs7QUFzR25DLE1BQUlDLGFBQUosR0FBb0I7QUFBQyxXQUFPN0UsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixHQUExQixFQUErQixHQUEvQixDQUFQO0FBQTRDLEdBdEc5Qjs7QUF1R25DLE1BQUk2RSxXQUFKLEdBQWtCO0FBQUMsV0FBTzlFLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsU0FBMUIsQ0FBUDtBQUE2QyxHQXZHN0I7O0FBeUduQztBQUNBLE1BQUk4RSxTQUFKLEdBQWdCO0FBQUMsV0FBTy9FLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsS0FBMUIsRUFBaUMsT0FBakMsQ0FBUDtBQUFrRCxHQTFHaEM7O0FBMkduQyxNQUFJK0UsU0FBSixHQUFnQjtBQUFDLFdBQU9oRix1REFBYyxDQUFDQyxVQUFmLENBQTBCLGVBQTFCLENBQVA7QUFBbUQsR0EzR2pDOztBQTZHbkM7QUFDQSxNQUFJZ0YsVUFBSixHQUFpQjtBQUFDLFdBQU9qRix1REFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLENBQVA7QUFBK0MsR0E5RzlCOztBQStHbkMsTUFBSWlGLFVBQUosR0FBaUI7QUFBQyxXQUFPbEYsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixXQUExQixDQUFQO0FBQStDLEdBL0c5Qjs7QUFnSG5DLE1BQUlrRixVQUFKLEdBQWlCO0FBQUMsV0FBT25GLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsWUFBMUIsQ0FBUDtBQUFnRCxHQWhIL0I7O0FBa0huQztBQUNBLE1BQUltRixlQUFKLEdBQXNCO0FBQUMsV0FBT3BGLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsUUFBMUIsRUFBb0Msb0JBQXBDLENBQVA7QUFBa0UsR0FuSHREOztBQW9IbkMsTUFBSW9GLFNBQUosR0FBZ0I7QUFBQyxXQUFPckYsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixpQkFBMUIsQ0FBUDtBQUFxRCxHQXBIbkM7O0FBcUhuQyxNQUFJcUYsZUFBSixHQUFzQjtBQUFDLFdBQU90Rix1REFBYyxDQUFDQyxVQUFmLENBQTBCLHFCQUExQixDQUFQO0FBQXlELEdBckg3Qzs7QUFzSG5DLE1BQUlzRixTQUFKLEdBQWdCO0FBQUMsV0FBT3ZGLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsa0JBQTFCLENBQVA7QUFBc0QsR0F0SHBDOztBQXVIbkMsTUFBSXVGLFdBQUosR0FBa0I7QUFBQyxXQUFPeEYsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixnQkFBMUIsQ0FBUDtBQUFvRCxHQXZIcEM7O0FBd0huQyxNQUFJd0YsV0FBSixHQUFrQjtBQUFDLFdBQU96Rix1REFBYyxDQUFDQyxVQUFmLENBQTBCLFdBQTFCLENBQVA7QUFBK0MsR0F4SC9COztBQTBIbkM7QUFDQSxNQUFJeUYsY0FBSixHQUFxQjtBQUFDLFdBQU8xRix1REFBYyxDQUFDQyxVQUFmLENBQTBCLFVBQTFCLENBQVA7QUFBOEMsR0EzSGpDOztBQTRIbkMsTUFBSTBGLFVBQUosR0FBaUI7QUFBQyxXQUFPM0YsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixDQUFQO0FBQW1ELEdBNUhsQzs7QUE2SG5DLE1BQUkyRixTQUFKLEdBQWdCO0FBQUMsV0FBTzVGLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsYUFBMUIsQ0FBUDtBQUFpRCxHQTdIL0I7O0FBOEhuQyxNQUFJNEYsa0JBQUosR0FBeUI7QUFBQyxXQUFPN0YsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixrQkFBMUIsQ0FBUDtBQUFzRCxHQTlIN0M7O0FBK0huQyxNQUFJNkYsWUFBSixHQUFtQjtBQUFDLFdBQU85Rix1REFBYyxDQUFDQyxVQUFmLENBQTBCLFFBQTFCLENBQVA7QUFBNEMsR0EvSDdCOztBQWdJbkMsTUFBSThGLFNBQUosR0FBZ0I7QUFBQyxXQUFPL0YsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixDQUFQO0FBQW1ELEdBaElqQzs7QUFpSW5DLE1BQUkrRixjQUFKLEdBQXFCO0FBQUMsV0FBT2hHLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsc0JBQTFCLENBQVA7QUFBMEQsR0FqSTdDOztBQWtJbkMsTUFBSWdHLFlBQUosR0FBbUI7QUFBQyxXQUFPakcsdURBQWMsQ0FBQ2tHLFVBQWYsQ0FBMEIsVUFBMUIsQ0FBUDtBQUE4QyxHQWxJL0I7O0FBbUluQyxNQUFJQyxPQUFKLEdBQWM7QUFBQyxXQUFPbkcsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixRQUExQixFQUFvQyxZQUFwQyxDQUFQO0FBQTBELEdBbkl0Qzs7QUFvSW5DLE1BQUltRyxXQUFKLEdBQWtCO0FBQUMsV0FBT3BHLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsWUFBMUIsQ0FBUDtBQUFnRCxHQXBJaEM7O0FBcUluQyxNQUFJb0csWUFBSixHQUFtQjtBQUFDLFdBQU9yRyx1REFBYyxDQUFDQyxVQUFmLENBQTBCLElBQTFCLENBQVA7QUFBd0MsR0FySXpCOztBQXNJbkMsTUFBSXFHLGNBQUosR0FBcUI7QUFBQyxXQUFPdEcsdURBQWMsQ0FBQ0MsVUFBZixDQUEwQixnQkFBMUIsQ0FBUDtBQUFvRDs7QUF0SXZDLENBQXhCLENBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9kaXNjb3JkbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIGxhcmdlIGxpc3Qgb2Yga25vd24gYW5kIHVzZWZ1bCB3ZWJwYWNrIG1vZHVsZXMgaW50ZXJuYWwgdG8gRGlzY29yZC5cclxuICpcclxuICogQG1vZHVsZSBEaXNjb3JkTW9kdWxlc1xyXG4gKiBAdmVyc2lvbiAwLjAuM1xyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVXRpbGl0aWVzLm1lbW9pemVPYmplY3Qoe1xyXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiKTt9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicmVuZGVyXCIsIFwiZmluZERPTU5vZGVcIik7fSxcclxuICAgIGdldCBGbHV4KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY29ubmVjdFN0b3Jlc1wiKTt9LFxyXG4gICAgZ2V0IEV2ZW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm90b3R5cGVzKFwic2V0TWF4TGlzdGVuZXJzXCIsIFwiZW1pdFwiKTt9LFxyXG5cclxuICAgIC8qIEd1aWxkIEluZm8sIFN0b3JlcywgYW5kIFV0aWxpdGllcyAqL1xyXG4gICAgZ2V0IEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFwiKTt9LFxyXG4gICAgZ2V0IFNvcnRlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTb3J0ZWRHdWlsZHNcIik7fSxcclxuICAgIGdldCBTZWxlY3RlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRMYXN0U2VsZWN0ZWRHdWlsZElkXCIpO30sXHJcbiAgICBnZXQgR3VpbGRTeW5jKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U3luY2VkR3VpbGRzXCIpO30sXHJcbiAgICBnZXQgR3VpbGRJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QWNyb255bVwiKTt9LFxyXG4gICAgZ2V0IEd1aWxkQ2hhbm5lbHNTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldENoYW5uZWxzXCIsIFwiZ2V0RGVmYXVsdENoYW5uZWxcIik7fSxcclxuICAgIGdldCBHdWlsZE1lbWJlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TWVtYmVyXCIpO30sXHJcbiAgICBnZXQgTWVtYmVyQ291bnRTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbWJlckNvdW50c1wiKTt9LFxyXG4gICAgZ2V0IEd1aWxkRW1vamlTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEVtb2ppc1wiKTt9LFxyXG4gICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIm1hcmtHdWlsZEFzUmVhZFwiKTt9LFxyXG4gICAgZ2V0IEd1aWxkUGVybWlzc2lvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFBlcm1pc3Npb25zXCIpO30sXHJcblxyXG4gICAgLyogQ2hhbm5lbCBTdG9yZSAmIEFjdGlvbnMgKi9cclxuICAgIGdldCBDaGFubmVsU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDaGFubmVsc1wiLCBcImdldERNRnJvbVVzZXJJZFwiKTt9LFxyXG4gICAgZ2V0IFNlbGVjdGVkQ2hhbm5lbFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TGFzdFNlbGVjdGVkQ2hhbm5lbElkXCIpO30sXHJcbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3BlblByaXZhdGVDaGFubmVsXCIpO30sXHJcbiAgICBnZXQgQ2hhbm5lbFNlbGVjdG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic2VsZWN0R3VpbGRcIiwgXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcblxyXG4gICAgLyogQ3VycmVudCBVc2VyIEluZm8sIFN0YXRlIGFuZCBTZXR0aW5ncyAqL1xyXG4gICAgZ2V0IFVzZXJJbmZvU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRUb2tlblwiKTt9LFxyXG4gICAgZ2V0IFVzZXJTZXR0aW5nc1N0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ3VpbGRQb3NpdGlvbnNcIik7fSxcclxuICAgIGdldCBBY2NvdW50TWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInJlZ2lzdGVyXCIsIFwibG9naW5cIik7fSxcclxuICAgIGdldCBVc2VyU2V0dGluZ3NVcGRhdGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidXBkYXRlUmVtb3RlU2V0dGluZ3NcIik7fSxcclxuICAgIGdldCBPbmxpbmVXYXRjaGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNPbmxpbmVcIik7fSxcclxuICAgIGdldCBDdXJyZW50VXNlcklkbGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJZGxlVGltZVwiKTt9LFxyXG4gICAgZ2V0IFJlbGF0aW9uc2hpcFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNCbG9ja2VkXCIsIFwiZ2V0RnJpZW5kSURzXCIpO30sXHJcbiAgICBnZXQgUmVsYXRpb25zaGlwTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFJlbGF0aW9uc2hpcFwiKTt9LFxyXG4gICAgZ2V0IE1lbnRpb25TdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbnRpb25zXCIpO30sXHJcblxyXG4gICAgLyogVXNlciBTdG9yZXMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0Q3VycmVudFVzZXJcIik7fSxcclxuICAgIGdldCBVc2VyU3RhdHVzU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTdGF0dXNcIiwgXCJnZXRTdGF0ZVwiKTt9LFxyXG4gICAgZ2V0IFVzZXJUeXBpbmdTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzVHlwaW5nXCIpO30sXHJcbiAgICBnZXQgVXNlckFjdGl2aXR5U3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBY3Rpdml0eVwiKTt9LFxyXG4gICAgZ2V0IFVzZXJOYW1lUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXROYW1lXCIpO30sXHJcbiAgICBnZXQgVXNlck5vdGVTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE5vdGVcIik7fSxcclxuICAgIGdldCBVc2VyTm90ZUFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ1cGRhdGVOb3RlXCIpO30sXHJcblxyXG4gICAgLyogRW1vamkgU3RvcmUgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgRW1vamlJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNFbW9qaURpc2FibGVkXCIpO30sXHJcbiAgICBnZXQgRW1vamlVdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEd1aWxkRW1vamlcIik7fSxcclxuICAgIGdldCBFbW9qaVN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QnlDYXRlZ29yeVwiLCBcIkVNT0pJX05BTUVfUkVcIik7fSxcclxuXHJcbiAgICAvKiBJbnZpdGUgU3RvcmUgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgSW52aXRlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJbnZpdGVzXCIpO30sXHJcbiAgICBnZXQgSW52aXRlUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmaW5kSW52aXRlXCIpO30sXHJcbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFjY2VwdEludml0ZVwiKTt9LFxyXG5cclxuICAgIC8qIERpc2NvcmQgT2JqZWN0cyAmIFV0aWxzICovXHJcbiAgICBnZXQgRGlzY29yZENvbnN0YW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlBlcm1pc3Npb25zXCIsIFwiQWN0aXZpdHlUeXBlc1wiLCBcIlN0YXR1c1R5cGVzXCIpO30sXHJcbiAgICBnZXQgRGlzY29yZFBlcm1pc3Npb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUGVybWlzc2lvbnNcIiwgXCJBY3Rpdml0eVR5cGVzXCIsIFwiU3RhdHVzVHlwZXNcIikuUGVybWlzc2lvbnM7fSxcclxuICAgIGdldCBQZXJtaXNzaW9uVXRpbHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRIaWdoZXN0Um9sZVwiKTt9LFxyXG4gICAgZ2V0IENvbG9yQ29udmVydGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGV4MmludFwiKTt9LFxyXG4gICAgZ2V0IENvbG9yU2hhZGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZGFya2VuXCIpO30sXHJcbiAgICBnZXQgVGlueUNvbG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3RvdHlwZXMoXCJ0b1JnYlwiKTt9LFxyXG4gICAgZ2V0IENsYXNzUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDbGFzc1wiKTt9LFxyXG4gICAgZ2V0IEJ1dHRvbkRhdGEoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdXR0b25TaXplc1wiKTt9LFxyXG4gICAgZ2V0IEljb25OYW1lcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkljb25OYW1lc1wiKTt9LFxyXG4gICAgZ2V0IE5hdmlnYXRpb25VdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInRyYW5zaXRpb25Ub1wiLCBcInJlcGxhY2VXaXRoXCIsIFwiZ2V0SGlzdG9yeVwiKTt9LFxyXG5cclxuICAgIC8qIERpc2NvcmQgTWVzc2FnZXMgKi9cclxuICAgIGdldCBNZXNzYWdlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRNZXNzYWdlc1wiKTt9LFxyXG4gICAgZ2V0IE1lc3NhZ2VBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwianVtcFRvTWVzc2FnZVwiLCBcIl9zZW5kTWVzc2FnZVwiKTt9LFxyXG4gICAgZ2V0IE1lc3NhZ2VRdWV1ZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImVucXVldWVcIik7fSxcclxuICAgIGdldCBNZXNzYWdlUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlTWVzc2FnZVwiLCBcInBhcnNlXCIsIFwidW5wYXJzZVwiKTt9LFxyXG5cclxuICAgIC8qIFRleHQgUHJvY2Vzc2luZyAqL1xyXG4gICAgZ2V0IGhsanMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJoaWdobGlnaHRcIiwgXCJoaWdobGlnaHRCbG9ja1wiKTt9LFxyXG4gICAgZ2V0IFNpbXBsZU1hcmtkb3duKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGFyc2VCbG9ja1wiLCBcInBhcnNlSW5saW5lXCIsIFwiZGVmYXVsdE91dHB1dFwiKTt9LFxyXG5cclxuICAgIC8qIEV4cGVyaW1lbnRzICovXHJcbiAgICBnZXQgRXhwZXJpbWVudFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0RXhwZXJpbWVudE92ZXJyaWRlc1wiKTt9LFxyXG4gICAgZ2V0IEV4cGVyaW1lbnRzTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRGV2ZWxvcGVyXCIpO30sXHJcbiAgICBnZXQgQ3VycmVudEV4cGVyaW1lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRFeHBlcmltZW50SWRcIik7fSxcclxuXHJcbiAgICAvKiBJbWFnZXMsIEF2YXRhcnMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgSW1hZ2VSZXNvbHZlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJnZXRHdWlsZEljb25VUkxcIik7fSxcclxuICAgIGdldCBJbWFnZVV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U2l6ZWRJbWFnZVNyY1wiKTt9LFxyXG4gICAgZ2V0IEF2YXRhckRlZmF1bHRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiKTt9LFxyXG5cclxuICAgIC8qIFdpbmRvdywgRE9NLCBIVE1MICovXHJcbiAgICBnZXQgV2luZG93SW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRm9jdXNlZFwiLCBcIndpbmRvd1NpemVcIik7fSxcclxuICAgIGdldCBUYWdJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVkFMSURfVEFHX05BTUVTXCIpO30sXHJcbiAgICBnZXQgRE9NSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImNhblVzZURPTVwiKTt9LFxyXG5cclxuICAgIC8qIExvY2FsZS9Mb2NhdGlvbiBhbmQgVGltZSAqL1xyXG4gICAgZ2V0IExvY2FsZU1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRMb2NhbGVcIik7fSxcclxuICAgIGdldCBNb21lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwYXJzZVpvbmVcIik7fSxcclxuICAgIGdldCBMb2NhdGlvbk1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJjcmVhdGVMb2NhdGlvblwiKTt9LFxyXG4gICAgZ2V0IFRpbWVzdGFtcHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmcm9tVGltZXN0YW1wXCIpO30sXHJcbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRhdGVGb3JtYXRcIik7fSxcclxuXHJcbiAgICAvKiBTdHJpbmdzIGFuZCBVdGlscyAqL1xyXG4gICAgZ2V0IFN0cmluZ3MoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJNZXNzYWdlc1wiKS5NZXNzYWdlczt9LFxyXG4gICAgZ2V0IFN0cmluZ0Zvcm1hdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhXCIsIFwielwiKTt9LFxyXG4gICAgZ2V0IFN0cmluZ1V0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidG9BU0NJSVwiKTt9LFxyXG5cclxuICAgIC8qIFVSTHMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgVVJMUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVXJsXCIsIFwicGFyc2VcIik7fSxcclxuICAgIGdldCBFeHRyYVVSTHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBcnRpY2xlVVJMXCIpO30sXHJcblxyXG4gICAgLyogRHJhZyAmIERyb3AgKi9cclxuICAgIGdldCBETkRBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiYmVnaW5EcmFnXCIpO30sXHJcbiAgICBnZXQgRE5EU291cmNlcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFRhcmdldFwiKTt9LFxyXG4gICAgZ2V0IERORE9iamVjdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJEcmFnU291cmNlXCIpO30sXHJcblxyXG4gICAgLyogTWVkaWEgU3R1ZmYgKEF1ZGlvL1ZpZGVvKSAqL1xyXG4gICAgZ2V0IE1lZGlhRGV2aWNlSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkNvZGVjc1wiLCBcIlNVUFBPUlRFRF9CUk9XU0VSU1wiKTt9LFxyXG4gICAgZ2V0IE1lZGlhSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE91dHB1dFZvbHVtZVwiKTt9LFxyXG4gICAgZ2V0IE1lZGlhRW5naW5lSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIk1lZGlhRW5naW5lRmVhdHVyZXNcIik7fSxcclxuICAgIGdldCBWb2ljZUluZm8oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJFY2hvQ2FuY2VsbGF0aW9uXCIpO30sXHJcbiAgICBnZXQgVmlkZW9TdHJlYW0oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRWaWRlb1N0cmVhbVwiKTt9LFxyXG4gICAgZ2V0IFNvdW5kTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGxheVNvdW5kXCIpO30sXHJcblxyXG4gICAgLyogRWxlY3Ryb24gJiBPdGhlciBJbnRlcm5hbHMgd2l0aCBVdGlscyovXHJcbiAgICBnZXQgRWxlY3Ryb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRCYWRnZVwiKTt9LFxyXG4gICAgZ2V0IERpc3BhdGNoZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJkaXJ0eURpc3BhdGNoXCIpO30sXHJcbiAgICBnZXQgUGF0aFV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGFzQmFzZW5hbWVcIik7fSxcclxuICAgIGdldCBOb3RpZmljYXRpb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzaG93Tm90aWZpY2F0aW9uXCIpO30sXHJcbiAgICBnZXQgUm91dGVyTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUm91dGVyXCIpO30sXHJcbiAgICBnZXQgQVBJTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QVBJQmFzZVVSTFwiKTt9LFxyXG4gICAgZ2V0IEFuYWx5dGljRXZlbnRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQW5hbHl0aWNFdmVudENvbmZpZ3NcIik7fSxcclxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UmVnZXgoL1wiYmluYXJ5XCIvKTt9LFxyXG4gICAgZ2V0IEJ1ZmZlcnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdWZmZXJcIiwgXCJrTWF4TGVuZ3RoXCIpO30sXHJcbiAgICBnZXQgRGV2aWNlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXREZXZpY2VzXCIpO30sXHJcbiAgICBnZXQgU29mdHdhcmVJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3NcIik7fSxcclxuICAgIGdldCBDdXJyZW50Q29udGV4dCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInNldFRhZ3NDb250ZXh0XCIpO31cclxufSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/discordmodules.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/**\r\n * A large list of known and useful webpack modules internal to Discord.\r\n *\r\n * @module DiscordModules\r\n * @version 0.0.3\r\n */\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (_utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].memoizeObject({\n get React() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createElement\", \"cloneElement\");\n },\n\n get ReactDOM() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"render\", \"findDOMNode\");\n },\n\n get Flux() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"connectStores\");\n },\n\n get Events() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(\"setMaxListeners\", \"emit\");\n },\n\n /* Guild Info, Stores, and Utilities */\n get GuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuild\");\n },\n\n get SortedGuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSortedGuilds\");\n },\n\n get SelectedGuildStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getLastSelectedGuildId\");\n },\n\n get GuildSync() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSyncedGuilds\");\n },\n\n get GuildInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getAcronym\");\n },\n\n get GuildChannelsStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getChannels\", \"getDefaultChannel\");\n },\n\n get GuildMemberStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMember\");\n },\n\n get MemberCountStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMemberCounts\");\n },\n\n get GuildEmojiStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getEmojis\");\n },\n\n get GuildActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"markGuildAsRead\");\n },\n\n get GuildPermissions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuildPermissions\");\n },\n\n /* Channel Store & Actions */\n get ChannelStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getChannels\", \"getDMFromUserId\");\n },\n\n get SelectedChannelStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getLastSelectedChannelId\");\n },\n\n get ChannelActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"selectChannel\");\n },\n\n get PrivateChannelActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"openPrivateChannel\");\n },\n\n get ChannelSelector() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"selectGuild\", \"selectChannel\");\n },\n\n /* Current User Info, State and Settings */\n get UserInfoStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getToken\");\n },\n\n get UserSettingsStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"guildPositions\");\n },\n\n get AccountManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"register\", \"login\");\n },\n\n get UserSettingsUpdater() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"updateRemoteSettings\");\n },\n\n get OnlineWatcher() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isOnline\");\n },\n\n get CurrentUserIdle() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getIdleTime\");\n },\n\n get RelationshipStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isBlocked\", \"getFriendIDs\");\n },\n\n get RelationshipManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"addRelationship\");\n },\n\n get MentionStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMentions\");\n },\n\n /* User Stores and Utils */\n get UserStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getCurrentUser\");\n },\n\n get UserStatusStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getStatus\", \"getState\");\n },\n\n get UserTypingStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isTyping\");\n },\n\n get UserActivityStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getActivity\");\n },\n\n get UserNameResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getName\");\n },\n\n get UserNoteStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getNote\");\n },\n\n get UserNoteActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"updateNote\");\n },\n\n /* Emoji Store and Utils */\n get EmojiInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isEmojiDisabled\");\n },\n\n get EmojiUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getGuildEmoji\");\n },\n\n get EmojiStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getByCategory\", \"EMOJI_NAME_RE\");\n },\n\n /* Invite Store and Utils */\n get InviteStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getInvites\");\n },\n\n get InviteResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"findInvite\");\n },\n\n get InviteActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"acceptInvite\");\n },\n\n /* Discord Objects & Utils */\n get DiscordConstants() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\");\n },\n\n get DiscordPermissions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\").Permissions;\n },\n\n get PermissionUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getHighestRole\");\n },\n\n get ColorConverter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"hex2int\");\n },\n\n get ColorShader() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"darken\");\n },\n\n get TinyColor() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(\"toRgb\");\n },\n\n get ClassResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getClass\");\n },\n\n get ButtonData() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"ButtonSizes\");\n },\n\n get IconNames() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"IconNames\");\n },\n\n get NavigationUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"transitionTo\", \"replaceWith\", \"getHistory\");\n },\n\n /* Discord Messages */\n get MessageStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getMessages\");\n },\n\n get MessageActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"jumpToMessage\", \"_sendMessage\");\n },\n\n get MessageQueue() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"enqueue\");\n },\n\n get MessageParser() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createMessage\", \"parse\", \"unparse\");\n },\n\n /* Text Processing */\n get hljs() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"highlight\", \"highlightBlock\");\n },\n\n get SimpleMarkdown() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"parseBlock\", \"parseInline\", \"defaultOutput\");\n },\n\n /* Experiments */\n get ExperimentStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getExperimentOverrides\");\n },\n\n get ExperimentsManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isDeveloper\");\n },\n\n get CurrentExperiment() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getExperimentId\");\n },\n\n /* Images, Avatars and Utils */\n get ImageResolver() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getUserAvatarURL\", \"getGuildIconURL\");\n },\n\n get ImageUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getSizedImageSrc\");\n },\n\n get AvatarDefaults() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");\n },\n\n /* Window, DOM, HTML */\n get WindowInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"isFocused\", \"windowSize\");\n },\n\n get TagInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"VALID_TAG_NAMES\");\n },\n\n get DOMInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"canUseDOM\");\n },\n\n /* Locale/Location and Time */\n get LocaleManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setLocale\");\n },\n\n get Moment() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"parseZone\");\n },\n\n get LocationManager() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"createLocation\");\n },\n\n get Timestamps() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"fromTimestamp\");\n },\n\n get TimeFormatter() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"dateFormat\");\n },\n\n /* Strings and Utils */\n get Strings() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Messages\").Messages;\n },\n\n get StringFormats() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"a\", \"z\");\n },\n\n get StringUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"toASCII\");\n },\n\n /* URLs and Utils */\n get URLParser() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Url\", \"parse\");\n },\n\n get ExtraURLs() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getArticleURL\");\n },\n\n /* Drag & Drop */\n get DNDActions() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"beginDrag\");\n },\n\n get DNDSources() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"addTarget\");\n },\n\n get DNDObjects() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"DragSource\");\n },\n\n /* Media Stuff (Audio/Video) */\n get MediaDeviceInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Codecs\", \"SUPPORTED_BROWSERS\");\n },\n\n get MediaInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getOutputVolume\");\n },\n\n get MediaEngineInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"MediaEngineFeatures\");\n },\n\n get VoiceInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"EchoCancellation\");\n },\n\n get VideoStream() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getVideoStream\");\n },\n\n get SoundModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"playSound\");\n },\n\n /* Electron & Other Internals with Utils*/\n get ElectronModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setBadge\");\n },\n\n get Dispatcher() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"dirtyDispatch\");\n },\n\n get PathUtils() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"hasBasename\");\n },\n\n get NotificationModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"showNotification\");\n },\n\n get RouterModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Router\");\n },\n\n get APIModule() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getAPIBaseURL\");\n },\n\n get AnalyticEvents() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"AnalyticEventConfigs\");\n },\n\n get KeyGenerator() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByRegex(/\"binary\"/);\n },\n\n get Buffers() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"Buffer\", \"kMaxLength\");\n },\n\n get DeviceStore() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"getDevices\");\n },\n\n get SoftwareInfo() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"os\");\n },\n\n get CurrentContext() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"setTagsContext\");\n },\n\n /* Commonly Used Classes */\n get GuildClasses() {\n const guildsWrapper = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"wrapper\", \"unreadMentionsBar\");\n const guilds = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"guildsError\", \"selected\");\n const pill = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(\"blobContainer\");\n return Object.assign({}, guildsWrapper, guilds, pill);\n }\n\n}));//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZGlzY29yZG1vZHVsZXMuanM/YTU0ZCJdLCJuYW1lcyI6WyJVdGlsaXRpZXMiLCJtZW1vaXplT2JqZWN0IiwiUmVhY3QiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5UHJvcHMiLCJSZWFjdERPTSIsIkZsdXgiLCJFdmVudHMiLCJnZXRCeVByb3RvdHlwZXMiLCJHdWlsZFN0b3JlIiwiU29ydGVkR3VpbGRTdG9yZSIsIlNlbGVjdGVkR3VpbGRTdG9yZSIsIkd1aWxkU3luYyIsIkd1aWxkSW5mbyIsIkd1aWxkQ2hhbm5lbHNTdG9yZSIsIkd1aWxkTWVtYmVyU3RvcmUiLCJNZW1iZXJDb3VudFN0b3JlIiwiR3VpbGRFbW9qaVN0b3JlIiwiR3VpbGRBY3Rpb25zIiwiR3VpbGRQZXJtaXNzaW9ucyIsIkNoYW5uZWxTdG9yZSIsIlNlbGVjdGVkQ2hhbm5lbFN0b3JlIiwiQ2hhbm5lbEFjdGlvbnMiLCJQcml2YXRlQ2hhbm5lbEFjdGlvbnMiLCJDaGFubmVsU2VsZWN0b3IiLCJVc2VySW5mb1N0b3JlIiwiVXNlclNldHRpbmdzU3RvcmUiLCJBY2NvdW50TWFuYWdlciIsIlVzZXJTZXR0aW5nc1VwZGF0ZXIiLCJPbmxpbmVXYXRjaGVyIiwiQ3VycmVudFVzZXJJZGxlIiwiUmVsYXRpb25zaGlwU3RvcmUiLCJSZWxhdGlvbnNoaXBNYW5hZ2VyIiwiTWVudGlvblN0b3JlIiwiVXNlclN0b3JlIiwiVXNlclN0YXR1c1N0b3JlIiwiVXNlclR5cGluZ1N0b3JlIiwiVXNlckFjdGl2aXR5U3RvcmUiLCJVc2VyTmFtZVJlc29sdmVyIiwiVXNlck5vdGVTdG9yZSIsIlVzZXJOb3RlQWN0aW9ucyIsIkVtb2ppSW5mbyIsIkVtb2ppVXRpbHMiLCJFbW9qaVN0b3JlIiwiSW52aXRlU3RvcmUiLCJJbnZpdGVSZXNvbHZlciIsIkludml0ZUFjdGlvbnMiLCJEaXNjb3JkQ29uc3RhbnRzIiwiRGlzY29yZFBlcm1pc3Npb25zIiwiUGVybWlzc2lvbnMiLCJQZXJtaXNzaW9uVXRpbHMiLCJDb2xvckNvbnZlcnRlciIsIkNvbG9yU2hhZGVyIiwiVGlueUNvbG9yIiwiQ2xhc3NSZXNvbHZlciIsIkJ1dHRvbkRhdGEiLCJJY29uTmFtZXMiLCJOYXZpZ2F0aW9uVXRpbHMiLCJNZXNzYWdlU3RvcmUiLCJNZXNzYWdlQWN0aW9ucyIsIk1lc3NhZ2VRdWV1ZSIsIk1lc3NhZ2VQYXJzZXIiLCJobGpzIiwiU2ltcGxlTWFya2Rvd24iLCJFeHBlcmltZW50U3RvcmUiLCJFeHBlcmltZW50c01hbmFnZXIiLCJDdXJyZW50RXhwZXJpbWVudCIsIkltYWdlUmVzb2x2ZXIiLCJJbWFnZVV0aWxzIiwiQXZhdGFyRGVmYXVsdHMiLCJXaW5kb3dJbmZvIiwiVGFnSW5mbyIsIkRPTUluZm8iLCJMb2NhbGVNYW5hZ2VyIiwiTW9tZW50IiwiTG9jYXRpb25NYW5hZ2VyIiwiVGltZXN0YW1wcyIsIlRpbWVGb3JtYXR0ZXIiLCJTdHJpbmdzIiwiTWVzc2FnZXMiLCJTdHJpbmdGb3JtYXRzIiwiU3RyaW5nVXRpbHMiLCJVUkxQYXJzZXIiLCJFeHRyYVVSTHMiLCJETkRBY3Rpb25zIiwiRE5EU291cmNlcyIsIkRORE9iamVjdHMiLCJNZWRpYURldmljZUluZm8iLCJNZWRpYUluZm8iLCJNZWRpYUVuZ2luZUluZm8iLCJWb2ljZUluZm8iLCJWaWRlb1N0cmVhbSIsIlNvdW5kTW9kdWxlIiwiRWxlY3Ryb25Nb2R1bGUiLCJEaXNwYXRjaGVyIiwiUGF0aFV0aWxzIiwiTm90aWZpY2F0aW9uTW9kdWxlIiwiUm91dGVyTW9kdWxlIiwiQVBJTW9kdWxlIiwiQW5hbHl0aWNFdmVudHMiLCJLZXlHZW5lcmF0b3IiLCJnZXRCeVJlZ2V4IiwiQnVmZmVycyIsIkRldmljZVN0b3JlIiwiU29mdHdhcmVJbmZvIiwiQ3VycmVudENvbnRleHQiLCJHdWlsZENsYXNzZXMiLCJndWlsZHNXcmFwcGVyIiwiZ3VpbGRzIiwicGlsbCIsIk9iamVjdCIsImFzc2lnbiJdLCJtYXBwaW5ncyI6IkFB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QyxDQUFmO0FBQ0EsVUFBTXlHLElBQUksR0FBRzFHLHVEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsQ0FBYjtBQUNBLFdBQU8wRyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCSixhQUFsQixFQUFpQ0MsTUFBakMsRUFBeUNDLElBQXpDLENBQVA7QUFDTjs7QUE5SXFDLENBQXhCLENBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9kaXNjb3JkbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBIGxhcmdlIGxpc3Qgb2Yga25vd24gYW5kIHVzZWZ1bCB3ZWJwYWNrIG1vZHVsZXMgaW50ZXJuYWwgdG8gRGlzY29yZC5cclxuICpcclxuICogQG1vZHVsZSBEaXNjb3JkTW9kdWxlc1xyXG4gKiBAdmVyc2lvbiAwLjAuM1xyXG4gKi9cclxuXHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVXRpbGl0aWVzLm1lbW9pemVPYmplY3Qoe1xyXG4gICAgZ2V0IFJlYWN0KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiKTt9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicmVuZGVyXCIsIFwiZmluZERPTU5vZGVcIik7fSxcclxuICAgIGdldCBGbHV4KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY29ubmVjdFN0b3Jlc1wiKTt9LFxyXG4gICAgZ2V0IEV2ZW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm90b3R5cGVzKFwic2V0TWF4TGlzdGVuZXJzXCIsIFwiZW1pdFwiKTt9LFxyXG5cclxuICAgIC8qIEd1aWxkIEluZm8sIFN0b3JlcywgYW5kIFV0aWxpdGllcyAqL1xyXG4gICAgZ2V0IEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFwiKTt9LFxyXG4gICAgZ2V0IFNvcnRlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTb3J0ZWRHdWlsZHNcIik7fSxcclxuICAgIGdldCBTZWxlY3RlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRMYXN0U2VsZWN0ZWRHdWlsZElkXCIpO30sXHJcbiAgICBnZXQgR3VpbGRTeW5jKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U3luY2VkR3VpbGRzXCIpO30sXHJcbiAgICBnZXQgR3VpbGRJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QWNyb255bVwiKTt9LFxyXG4gICAgZ2V0IEd1aWxkQ2hhbm5lbHNTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldENoYW5uZWxzXCIsIFwiZ2V0RGVmYXVsdENoYW5uZWxcIik7fSxcclxuICAgIGdldCBHdWlsZE1lbWJlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TWVtYmVyXCIpO30sXHJcbiAgICBnZXQgTWVtYmVyQ291bnRTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbWJlckNvdW50c1wiKTt9LFxyXG4gICAgZ2V0IEd1aWxkRW1vamlTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEVtb2ppc1wiKTt9LFxyXG4gICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIm1hcmtHdWlsZEFzUmVhZFwiKTt9LFxyXG4gICAgZ2V0IEd1aWxkUGVybWlzc2lvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFBlcm1pc3Npb25zXCIpO30sXHJcblxyXG4gICAgLyogQ2hhbm5lbCBTdG9yZSAmIEFjdGlvbnMgKi9cclxuICAgIGdldCBDaGFubmVsU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDaGFubmVsc1wiLCBcImdldERNRnJvbVVzZXJJZFwiKTt9LFxyXG4gICAgZ2V0IFNlbGVjdGVkQ2hhbm5lbFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TGFzdFNlbGVjdGVkQ2hhbm5lbElkXCIpO30sXHJcbiAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcbiAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3BlblByaXZhdGVDaGFubmVsXCIpO30sXHJcbiAgICBnZXQgQ2hhbm5lbFNlbGVjdG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic2VsZWN0R3VpbGRcIiwgXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcblxyXG4gICAgLyogQ3VycmVudCBVc2VyIEluZm8sIFN0YXRlIGFuZCBTZXR0aW5ncyAqL1xyXG4gICAgZ2V0IFVzZXJJbmZvU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRUb2tlblwiKTt9LFxyXG4gICAgZ2V0IFVzZXJTZXR0aW5nc1N0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ3VpbGRQb3NpdGlvbnNcIik7fSxcclxuICAgIGdldCBBY2NvdW50TWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInJlZ2lzdGVyXCIsIFwibG9naW5cIik7fSxcclxuICAgIGdldCBVc2VyU2V0dGluZ3NVcGRhdGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidXBkYXRlUmVtb3RlU2V0dGluZ3NcIik7fSxcclxuICAgIGdldCBPbmxpbmVXYXRjaGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNPbmxpbmVcIik7fSxcclxuICAgIGdldCBDdXJyZW50VXNlcklkbGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJZGxlVGltZVwiKTt9LFxyXG4gICAgZ2V0IFJlbGF0aW9uc2hpcFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNCbG9ja2VkXCIsIFwiZ2V0RnJpZW5kSURzXCIpO30sXHJcbiAgICBnZXQgUmVsYXRpb25zaGlwTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFJlbGF0aW9uc2hpcFwiKTt9LFxyXG4gICAgZ2V0IE1lbnRpb25TdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbnRpb25zXCIpO30sXHJcblxyXG4gICAgLyogVXNlciBTdG9yZXMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0Q3VycmVudFVzZXJcIik7fSxcclxuICAgIGdldCBVc2VyU3RhdHVzU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTdGF0dXNcIiwgXCJnZXRTdGF0ZVwiKTt9LFxyXG4gICAgZ2V0IFVzZXJUeXBpbmdTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzVHlwaW5nXCIpO30sXHJcbiAgICBnZXQgVXNlckFjdGl2aXR5U3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBY3Rpdml0eVwiKTt9LFxyXG4gICAgZ2V0IFVzZXJOYW1lUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXROYW1lXCIpO30sXHJcbiAgICBnZXQgVXNlck5vdGVTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE5vdGVcIik7fSxcclxuICAgIGdldCBVc2VyTm90ZUFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ1cGRhdGVOb3RlXCIpO30sXHJcblxyXG4gICAgLyogRW1vamkgU3RvcmUgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgRW1vamlJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNFbW9qaURpc2FibGVkXCIpO30sXHJcbiAgICBnZXQgRW1vamlVdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEd1aWxkRW1vamlcIik7fSxcclxuICAgIGdldCBFbW9qaVN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QnlDYXRlZ29yeVwiLCBcIkVNT0pJX05BTUVfUkVcIik7fSxcclxuXHJcbiAgICAvKiBJbnZpdGUgU3RvcmUgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgSW52aXRlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJbnZpdGVzXCIpO30sXHJcbiAgICBnZXQgSW52aXRlUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmaW5kSW52aXRlXCIpO30sXHJcbiAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFjY2VwdEludml0ZVwiKTt9LFxyXG5cclxuICAgIC8qIERpc2NvcmQgT2JqZWN0cyAmIFV0aWxzICovXHJcbiAgICBnZXQgRGlzY29yZENvbnN0YW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlBlcm1pc3Npb25zXCIsIFwiQWN0aXZpdHlUeXBlc1wiLCBcIlN0YXR1c1R5cGVzXCIpO30sXHJcbiAgICBnZXQgRGlzY29yZFBlcm1pc3Npb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUGVybWlzc2lvbnNcIiwgXCJBY3Rpdml0eVR5cGVzXCIsIFwiU3RhdHVzVHlwZXNcIikuUGVybWlzc2lvbnM7fSxcclxuICAgIGdldCBQZXJtaXNzaW9uVXRpbHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRIaWdoZXN0Um9sZVwiKTt9LFxyXG4gICAgZ2V0IENvbG9yQ29udmVydGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGV4MmludFwiKTt9LFxyXG4gICAgZ2V0IENvbG9yU2hhZGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZGFya2VuXCIpO30sXHJcbiAgICBnZXQgVGlueUNvbG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3RvdHlwZXMoXCJ0b1JnYlwiKTt9LFxyXG4gICAgZ2V0IENsYXNzUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDbGFzc1wiKTt9LFxyXG4gICAgZ2V0IEJ1dHRvbkRhdGEoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdXR0b25TaXplc1wiKTt9LFxyXG4gICAgZ2V0IEljb25OYW1lcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkljb25OYW1lc1wiKTt9LFxyXG4gICAgZ2V0IE5hdmlnYXRpb25VdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInRyYW5zaXRpb25Ub1wiLCBcInJlcGxhY2VXaXRoXCIsIFwiZ2V0SGlzdG9yeVwiKTt9LFxyXG5cclxuICAgIC8qIERpc2NvcmQgTWVzc2FnZXMgKi9cclxuICAgIGdldCBNZXNzYWdlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRNZXNzYWdlc1wiKTt9LFxyXG4gICAgZ2V0IE1lc3NhZ2VBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwianVtcFRvTWVzc2FnZVwiLCBcIl9zZW5kTWVzc2FnZVwiKTt9LFxyXG4gICAgZ2V0IE1lc3NhZ2VRdWV1ZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImVucXVldWVcIik7fSxcclxuICAgIGdldCBNZXNzYWdlUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlTWVzc2FnZVwiLCBcInBhcnNlXCIsIFwidW5wYXJzZVwiKTt9LFxyXG5cclxuICAgIC8qIFRleHQgUHJvY2Vzc2luZyAqL1xyXG4gICAgZ2V0IGhsanMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJoaWdobGlnaHRcIiwgXCJoaWdobGlnaHRCbG9ja1wiKTt9LFxyXG4gICAgZ2V0IFNpbXBsZU1hcmtkb3duKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGFyc2VCbG9ja1wiLCBcInBhcnNlSW5saW5lXCIsIFwiZGVmYXVsdE91dHB1dFwiKTt9LFxyXG5cclxuICAgIC8qIEV4cGVyaW1lbnRzICovXHJcbiAgICBnZXQgRXhwZXJpbWVudFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0RXhwZXJpbWVudE92ZXJyaWRlc1wiKTt9LFxyXG4gICAgZ2V0IEV4cGVyaW1lbnRzTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRGV2ZWxvcGVyXCIpO30sXHJcbiAgICBnZXQgQ3VycmVudEV4cGVyaW1lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRFeHBlcmltZW50SWRcIik7fSxcclxuXHJcbiAgICAvKiBJbWFnZXMsIEF2YXRhcnMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgSW1hZ2VSZXNvbHZlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJnZXRHdWlsZEljb25VUkxcIik7fSxcclxuICAgIGdldCBJbWFnZVV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U2l6ZWRJbWFnZVNyY1wiKTt9LFxyXG4gICAgZ2V0IEF2YXRhckRlZmF1bHRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiKTt9LFxyXG5cclxuICAgIC8qIFdpbmRvdywgRE9NLCBIVE1MICovXHJcbiAgICBnZXQgV2luZG93SW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRm9jdXNlZFwiLCBcIndpbmRvd1NpemVcIik7fSxcclxuICAgIGdldCBUYWdJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVkFMSURfVEFHX05BTUVTXCIpO30sXHJcbiAgICBnZXQgRE9NSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImNhblVzZURPTVwiKTt9LFxyXG5cclxuICAgIC8qIExvY2FsZS9Mb2NhdGlvbiBhbmQgVGltZSAqL1xyXG4gICAgZ2V0IExvY2FsZU1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRMb2NhbGVcIik7fSxcclxuICAgIGdldCBNb21lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwYXJzZVpvbmVcIik7fSxcclxuICAgIGdldCBMb2NhdGlvbk1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJjcmVhdGVMb2NhdGlvblwiKTt9LFxyXG4gICAgZ2V0IFRpbWVzdGFtcHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmcm9tVGltZXN0YW1wXCIpO30sXHJcbiAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRhdGVGb3JtYXRcIik7fSxcclxuXHJcbiAgICAvKiBTdHJpbmdzIGFuZCBVdGlscyAqL1xyXG4gICAgZ2V0IFN0cmluZ3MoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJNZXNzYWdlc1wiKS5NZXNzYWdlczt9LFxyXG4gICAgZ2V0IFN0cmluZ0Zvcm1hdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhXCIsIFwielwiKTt9LFxyXG4gICAgZ2V0IFN0cmluZ1V0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidG9BU0NJSVwiKTt9LFxyXG5cclxuICAgIC8qIFVSTHMgYW5kIFV0aWxzICovXHJcbiAgICBnZXQgVVJMUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVXJsXCIsIFwicGFyc2VcIik7fSxcclxuICAgIGdldCBFeHRyYVVSTHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBcnRpY2xlVVJMXCIpO30sXHJcblxyXG4gICAgLyogRHJhZyAmIERyb3AgKi9cclxuICAgIGdldCBETkRBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiYmVnaW5EcmFnXCIpO30sXHJcbiAgICBnZXQgRE5EU291cmNlcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFRhcmdldFwiKTt9LFxyXG4gICAgZ2V0IERORE9iamVjdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJEcmFnU291cmNlXCIpO30sXHJcblxyXG4gICAgLyogTWVkaWEgU3R1ZmYgKEF1ZGlvL1ZpZGVvKSAqL1xyXG4gICAgZ2V0IE1lZGlhRGV2aWNlSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkNvZGVjc1wiLCBcIlNVUFBPUlRFRF9CUk9XU0VSU1wiKTt9LFxyXG4gICAgZ2V0IE1lZGlhSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE91dHB1dFZvbHVtZVwiKTt9LFxyXG4gICAgZ2V0IE1lZGlhRW5naW5lSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIk1lZGlhRW5naW5lRmVhdHVyZXNcIik7fSxcclxuICAgIGdldCBWb2ljZUluZm8oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJFY2hvQ2FuY2VsbGF0aW9uXCIpO30sXHJcbiAgICBnZXQgVmlkZW9TdHJlYW0oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRWaWRlb1N0cmVhbVwiKTt9LFxyXG4gICAgZ2V0IFNvdW5kTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGxheVNvdW5kXCIpO30sXHJcblxyXG4gICAgLyogRWxlY3Ryb24gJiBPdGhlciBJbnRlcm5hbHMgd2l0aCBVdGlscyovXHJcbiAgICBnZXQgRWxlY3Ryb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRCYWRnZVwiKTt9LFxyXG4gICAgZ2V0IERpc3BhdGNoZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJkaXJ0eURpc3BhdGNoXCIpO30sXHJcbiAgICBnZXQgUGF0aFV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGFzQmFzZW5hbWVcIik7fSxcclxuICAgIGdldCBOb3RpZmljYXRpb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzaG93Tm90aWZpY2F0aW9uXCIpO30sXHJcbiAgICBnZXQgUm91dGVyTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUm91dGVyXCIpO30sXHJcbiAgICBnZXQgQVBJTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QVBJQmFzZVVSTFwiKTt9LFxyXG4gICAgZ2V0IEFuYWx5dGljRXZlbnRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQW5hbHl0aWNFdmVudENvbmZpZ3NcIik7fSxcclxuICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UmVnZXgoL1wiYmluYXJ5XCIvKTt9LFxyXG4gICAgZ2V0IEJ1ZmZlcnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdWZmZXJcIiwgXCJrTWF4TGVuZ3RoXCIpO30sXHJcbiAgICBnZXQgRGV2aWNlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXREZXZpY2VzXCIpO30sXHJcbiAgICBnZXQgU29mdHdhcmVJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3NcIik7fSxcclxuICAgIGdldCBDdXJyZW50Q29udGV4dCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInNldFRhZ3NDb250ZXh0XCIpO30sXHJcblxyXG4gICAgLyogQ29tbW9ubHkgVXNlZCBDbGFzc2VzICovXHJcbiAgICBnZXQgR3VpbGRDbGFzc2VzKCkge1xyXG5cdFx0Y29uc3QgZ3VpbGRzV3JhcHBlciA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ3cmFwcGVyXCIsIFwidW5yZWFkTWVudGlvbnNCYXJcIik7XHJcbiAgICAgICAgY29uc3QgZ3VpbGRzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImd1aWxkc0Vycm9yXCIsIFwic2VsZWN0ZWRcIik7XHJcbiAgICAgICAgY29uc3QgcGlsbCA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJibG9iQ29udGFpbmVyXCIpO1xyXG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBndWlsZHNXcmFwcGVyLCBndWlsZHMsIHBpbGwpO1xyXG5cdH1cclxufSk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/discordmodules.js\n"); /***/ }), @@ -439,11 +439,11 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /*!********************************!*\ !*** ./src/modules/modules.js ***! \********************************/ -/*! exports provided: React, ReactDOM, BDV2, BdApi, Core, ContentManager, DataStore, Logger, Events, PluginManager, DOMManager, ThemeManager, Patcher, Utilities, WebpackModules, DiscordModules, Settings */ +/*! exports provided: WebpackModules, React, ReactDOM, DiscordModules, Utilities, DataStore, Events, Settings, DOMManager, Logger, Patcher, ReactComponents */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"React\", function() { return React; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ReactDOM\", function() { return ReactDOM; });\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Utilities\", function() { return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WebpackModules\", function() { return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DiscordModules\", function() { return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _bdv2__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./bdv2 */ \"./src/modules/bdv2.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BDV2\", function() { return _bdv2__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _pluginapi__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BdApi\", function() { return _pluginapi__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./core */ \"./src/modules/core.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Core\", function() { return _core__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ContentManager\", function() { return _contentmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DataStore\", function() { return _datastore__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Events\", function() { return _emitter__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PluginManager\", function() { return _pluginmanager__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ThemeManager\", function() { return _thememanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Settings\", function() { return _settingsmanager__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\n\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DOMManager\", function() { return _dommanager__WEBPACK_IMPORTED_MODULE_12__[\"default\"]; });\n\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Logger\", function() { return _logger__WEBPACK_IMPORTED_MODULE_13__[\"default\"]; });\n\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Patcher\", function() { return _patcher__WEBPACK_IMPORTED_MODULE_14__[\"default\"]; });\n\n\n\n\n\n\n\n\n // import DevMode from \"./devmode\";\n\n // import EmoteModule from \"./emotes\";\n\n // import PublicServers from \"./publicservers\";\n\n\n\n\n\n\nconst React = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React;\nconst ReactDOM = _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ReactDOM;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcz8xNGRiIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdERPTSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7Q0FFQTs7Q0FFQTs7Q0FFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRU8sTUFBTUEsS0FBSyxHQUFHQyx1REFBYyxDQUFDRCxLQUE3QjtBQUNBLE1BQU1FLFFBQVEsR0FBR0QsdURBQWMsQ0FBQ0MsUUFBaEMiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9tb2R1bGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vYmR2MlwiO1xyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vcGx1Z2luYXBpXCI7XHJcbmltcG9ydCBDb3JlIGZyb20gXCIuL2NvcmVcIjtcclxuXHJcblxyXG5cclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRtYW5hZ2VyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbi8vIGltcG9ydCBEZXZNb2RlIGZyb20gXCIuL2Rldm1vZGVcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi9lbWl0dGVyXCI7XHJcbi8vIGltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuaW1wb3J0IFBsdWdpbk1hbmFnZXIgZnJvbSBcIi4vcGx1Z2lubWFuYWdlclwiO1xyXG4vLyBpbXBvcnQgUHVibGljU2VydmVycyBmcm9tIFwiLi9wdWJsaWNzZXJ2ZXJzXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vdGhlbWVtYW5hZ2VyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IERPTU1hbmFnZXIgZnJvbSBcIi4vZG9tbWFuYWdlclwiO1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQgUGF0Y2hlciBmcm9tIFwiLi9wYXRjaGVyXCI7XHJcblxyXG5leHBvcnQgY29uc3QgUmVhY3QgPSBEaXNjb3JkTW9kdWxlcy5SZWFjdDtcclxuZXhwb3J0IGNvbnN0IFJlYWN0RE9NID0gRGlzY29yZE1vZHVsZXMuUmVhY3RET007XHJcblxyXG5leHBvcnQge0JEVjIsIEJkQXBpLCBDb3JlLCBDb250ZW50TWFuYWdlciwgRGF0YVN0b3JlLCBMb2dnZXIsXHJcbiAgICAgICAgRXZlbnRzLCBQbHVnaW5NYW5hZ2VyLCBET01NYW5hZ2VyLCBUaGVtZU1hbmFnZXIsIFBhdGNoZXIsXHJcbiAgICAgICAgVXRpbGl0aWVzLCBXZWJwYWNrTW9kdWxlcywgRGlzY29yZE1vZHVsZXMsIFNldHRpbmdzfTtcclxuIl0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/modules.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"React\", function() { return React; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"ReactDOM\", function() { return ReactDOM; });\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"WebpackModules\", function() { return _webpackmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DiscordModules\", function() { return _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Utilities\", function() { return _utilities__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DataStore\", function() { return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Events\", function() { return _emitter__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Settings\", function() { return _settingsmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DOMManager\", function() { return _dommanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Logger\", function() { return _logger__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Patcher\", function() { return _patcher__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ReactComponents\", function() { return _reactcomponents__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n\n\nconst React = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].React;\nconst ReactDOM = _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].ReactDOM;\n\n\n\n\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcz8xNGRiIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdERPTSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFFQTtBQUNPLE1BQU1BLEtBQUssR0FBR0MsdURBQWMsQ0FBQ0QsS0FBN0I7QUFDQSxNQUFNRSxRQUFRLEdBQUdELHVEQUFjLENBQUNDLFFBQWhDO0FBQ1A7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL21vZHVsZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgV2VicGFja01vZHVsZXN9IGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuZXhwb3J0IGNvbnN0IFJlYWN0ID0gRGlzY29yZE1vZHVsZXMuUmVhY3Q7XHJcbmV4cG9ydCBjb25zdCBSZWFjdERPTSA9IERpc2NvcmRNb2R1bGVzLlJlYWN0RE9NO1xyXG5leHBvcnQge0Rpc2NvcmRNb2R1bGVzfTtcclxuXHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBVdGlsaXRpZXN9IGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRGF0YVN0b3JlfSBmcm9tIFwiLi9kYXRhc3RvcmVcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIEV2ZW50c30gZnJvbSBcIi4vZW1pdHRlclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgU2V0dGluZ3N9IGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgRE9NTWFuYWdlcn0gZnJvbSBcIi4vZG9tbWFuYWdlclwiO1xyXG5leHBvcnQge2RlZmF1bHQgYXMgTG9nZ2VyfSBmcm9tIFwiLi9sb2dnZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFBhdGNoZXJ9IGZyb20gXCIuL3BhdGNoZXJcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFJlYWN0Q29tcG9uZW50c30gZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcbiJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/modules.js\n"); /***/ }), @@ -467,7 +467,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 import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\n\n\n\nconst BdApi = {\n get React() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React;\n },\n\n get ReactDOM() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ReactDOM;\n },\n\n get WindowConfigFile() {\n if (this._windowConfigFile) return this._windowConfigFile;\n\n const electron = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n const path = __webpack_require__(/*! path */ \"path\");\n\n const base = electron.getAppPath();\n const roamingBase = electron.getPath(\"userData\");\n const roamingLocation = path.resolve(roamingBase, electron.getVersion(), \"modules\", \"discord_desktop_core\", \"injector\", \"config.json\");\n const location = path.resolve(base, \"..\", \"app\", \"config.json\");\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null;\n if (!realLocation) return this._windowConfigFile = null;\n return this._windowConfigFile = realLocation;\n }\n\n};\n\nBdApi.getAllWindowPreferences = function () {\n if (!this.WindowConfigFile) return {};\n return require(this.WindowConfigFile);\n};\n\nBdApi.getWindowPreference = function (key) {\n if (!this.WindowConfigFile) return undefined;\n return this.getAllWindowPreferences()[key];\n};\n\nBdApi.setWindowPreference = function (key, value) {\n if (!this.WindowConfigFile) return;\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const prefs = this.getAllWindowPreferences();\n prefs[key] = value;\n delete __webpack_require__.c[this.WindowConfigFile];\n fs.writeFileSync(this.WindowConfigFile, JSON.stringify(prefs, null, 4));\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.injectCSS = function (id, css) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectStyle(id, css);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.clearCSS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeStyle(id);\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.linkJS = function (id, url) {\n return _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectScript(id, url);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.unlinkJS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeScript(id);\n};\n/**\r\n * Shows a generic but very customizable modal.\r\n * @param {string} title - title of the modal\r\n * @param {string} content - a string of text to display in the modal\r\n */\n\n\nBdApi.alert = function (title, content) {\n ui__WEBPACK_IMPORTED_MODULE_5__[\"Modals\"].alert(title, content);\n};\n/**\r\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\r\n * @param {string} title - title of the modal\r\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Everything is wrapped in Discord's `TextElement` component so strings will show and render properly.\r\n * @param {object} [options] - options to modify the modal\r\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\r\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\r\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\r\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\r\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\r\n */\n\n\nBdApi.showConfirmationModal = function (title, content, options = {}) {\n return ui__WEBPACK_IMPORTED_MODULE_5__[\"Modals\"].showConfirmationModal(title, content, options);\n};\n/**\r\n * This shows a toast similar to android towards the bottom of the screen.\r\n *\r\n * @param {string} content The string to show in the toast.\r\n * @param {object} options Options object. Optional parameter.\r\n * @param {string} [options.type=\"\"] Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\r\n * @param {boolean} [options.icon=true] Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\r\n * @param {number} [options.timeout=3000] Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\r\n * @param {boolean} [options.forceShow=false] Whether to force showing the toast and ignore the bd setting\r\n */\n\n\nBdApi.showToast = function (content, options = {}) {\n ui__WEBPACK_IMPORTED_MODULE_5__[\"Toasts\"].show(content, options);\n}; // Finds module\n\n\nBdApi.findModule = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter);\n}; // Finds module\n\n\nBdApi.findAllModules = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter, false);\n}; // Finds module\n\n\nBdApi.findModuleByProps = function (...props) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(...props);\n};\n\nBdApi.findModuleByPrototypes = function (...protos) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(...protos);\n};\n\nBdApi.findModuleByDisplayName = function (name) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(name);\n}; // Gets react instance\n\n\nBdApi.getInternalInstance = function (node) {\n if (!(node instanceof window.jQuery) && !(node instanceof Element)) return undefined;\n if (node instanceof jQuery) node = node[0];\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getReactInstance(node);\n}; // Gets data\n\n\nBdApi.loadData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getPluginData(pluginName, key);\n};\n\nBdApi.getData = BdApi.loadData; // Sets data\n\nBdApi.saveData = function (pluginName, key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setPluginData(pluginName, key, data);\n};\n\nBdApi.setData = BdApi.saveData; // Deletes data\n\nBdApi.deleteData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].deletePluginData(pluginName, key);\n}; // Patches other functions\n\n\nBdApi.monkeyPatch = function (what, methodName, options) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].monkeyPatch(what, methodName, options);\n}; // Event when element is removed\n\n\nBdApi.onRemoved = function (node, callback) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].onRemoved(node, callback);\n}; // Wraps function in try..catch\n\n\nBdApi.suppressErrors = function (method, message) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(method, message);\n}; // Tests for valid JSON\n\n\nBdApi.testJSON = function (data) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(data);\n}; //Get another plugin\n//name = name of plugin\n// BdApi.getPlugin = function (name) {\n// if (Plugins.hasOwnProperty(name)) {\n// return Plugins[name].plugin;\n// }\n// return null;\n// };\n// BdApi.isPluginEnabled = function(name) {\n// return !!PluginCookie[name];\n// };\n// BdApi.isThemeEnabled = function(name) {\n// return !!ThemeCookie[name];\n// };\n// BdApi.isSettingEnabled = function(id) {\n// return !!SettingsCookie[id];\n// };\n// Gets data\n\n\nBdApi.getBDData = function (key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getBDData(key);\n}; // Sets data\n\n\nBdApi.setBDData = function (key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setBDData(key, data);\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BdApi);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2luYXBpLmpzPzZhOTMiXSwibmFtZXMiOlsiQmRBcGkiLCJSZWFjdCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3RET00iLCJXaW5kb3dDb25maWdGaWxlIiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJlbGVjdHJvbiIsInJlcXVpcmUiLCJyZW1vdGUiLCJhcHAiLCJwYXRoIiwiYmFzZSIsImdldEFwcFBhdGgiLCJyb2FtaW5nQmFzZSIsImdldFBhdGgiLCJyb2FtaW5nTG9jYXRpb24iLCJyZXNvbHZlIiwiZ2V0VmVyc2lvbiIsImxvY2F0aW9uIiwiZnMiLCJyZWFsTG9jYXRpb24iLCJleGlzdHNTeW5jIiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJrZXkiLCJ1bmRlZmluZWQiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwidmFsdWUiLCJwcmVmcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwiaW5qZWN0Q1NTIiwiaWQiLCJjc3MiLCJET01NYW5hZ2VyIiwiaW5qZWN0U3R5bGUiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwidXJsIiwiaW5qZWN0U2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJhbGVydCIsInRpdGxlIiwiY29udGVudCIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsIm9wdGlvbnMiLCJzaG93VG9hc3QiLCJUb2FzdHMiLCJzaG93IiwiZmluZE1vZHVsZSIsImZpbHRlciIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0TW9kdWxlIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kTW9kdWxlQnlQcm9wcyIsInByb3BzIiwiZ2V0QnlQcm9wcyIsImZpbmRNb2R1bGVCeVByb3RvdHlwZXMiLCJwcm90b3MiLCJnZXRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsIm5hbWUiLCJnZXRCeURpc3BsYXlOYW1lIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZSIsIm5vZGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJFbGVtZW50IiwiVXRpbGl0aWVzIiwiZ2V0UmVhY3RJbnN0YW5jZSIsImxvYWREYXRhIiwicGx1Z2luTmFtZSIsIkRhdGFTdG9yZSIsImdldFBsdWdpbkRhdGEiLCJnZXREYXRhIiwic2F2ZURhdGEiLCJkYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIm1vbmtleVBhdGNoIiwid2hhdCIsIm1ldGhvZE5hbWUiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsInN1cHByZXNzRXJyb3JzIiwibWV0aG9kIiwibWVzc2FnZSIsInRlc3RKU09OIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBLE1BQU1BLEtBQUssR0FBRztBQUNWLE1BQUlDLEtBQUosR0FBWTtBQUFFLFdBQU9DLHVEQUFjLENBQUNELEtBQXRCO0FBQThCLEdBRGxDOztBQUVWLE1BQUlFLFFBQUosR0FBZTtBQUFFLFdBQU9ELHVEQUFjLENBQUNDLFFBQXRCO0FBQWlDLEdBRnhDOztBQUdWLE1BQUlDLGdCQUFKLEdBQXVCO0FBQ25CLFFBQUksS0FBS0MsaUJBQVQsRUFBNEIsT0FBTyxLQUFLQSxpQkFBWjs7QUFDNUIsVUFBTUMsUUFBUSxHQUFHQyxtQkFBTyxDQUFDLDBCQUFELENBQVAsQ0FBb0JDLE1BQXBCLENBQTJCQyxHQUE1Qzs7QUFDQSxVQUFNQyxJQUFJLEdBQUdILG1CQUFPLENBQUMsa0JBQUQsQ0FBcEI7O0FBQ0EsVUFBTUksSUFBSSxHQUFHTCxRQUFRLENBQUNNLFVBQVQsRUFBYjtBQUNBLFVBQU1DLFdBQVcsR0FBR1AsUUFBUSxDQUFDUSxPQUFULENBQWlCLFVB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c291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCB7VG9hc3RzLCBNb2RhbHN9IGZyb20gXCJ1aVwiO1xyXG5cclxuY29uc3QgQmRBcGkgPSB7XHJcbiAgICBnZXQgUmVhY3QoKSB7IHJldHVybiBEaXNjb3JkTW9kdWxlcy5SZWFjdDsgfSxcclxuICAgIGdldCBSZWFjdERPTSgpIHsgcmV0dXJuIERpc2NvcmRNb2R1bGVzLlJlYWN0RE9NOyB9LFxyXG4gICAgZ2V0IFdpbmRvd0NvbmZpZ0ZpbGUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUpIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlO1xyXG4gICAgICAgIGNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHA7XHJcbiAgICAgICAgY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG4gICAgICAgIGNvbnN0IGJhc2UgPSBlbGVjdHJvbi5nZXRBcHBQYXRoKCk7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0Jhc2UgPSBlbGVjdHJvbi5nZXRQYXRoKFwidXNlckRhdGFcIik7XHJcbiAgICAgICAgY29uc3Qgcm9hbWluZ0xvY2F0aW9uID0gcGF0aC5yZXNvbHZlKHJvYW1pbmdCYXNlLCBlbGVjdHJvbi5nZXRWZXJzaW9uKCksIFwibW9kdWxlc1wiLCBcImRpc2NvcmRfZGVza3RvcF9jb3JlXCIsIFwiaW5qZWN0b3JcIiwgXCJjb25maWcuanNvblwiKTtcclxuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IHBhdGgucmVzb2x2ZShiYXNlLCBcIi4uXCIsIFwiYXBwXCIsIFwiY29uZmlnLmpzb25cIik7XHJcbiAgICAgICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICAgICAgY29uc3QgcmVhbExvY2F0aW9uID0gZnMuZXhpc3RzU3luYyhsb2NhdGlvbikgPyBsb2NhdGlvbiA6IGZzLmV4aXN0c1N5bmMocm9hbWluZ0xvY2F0aW9uKSA/IHJvYW1pbmdMb2NhdGlvbiA6IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZWFsTG9jYXRpb24pIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93Q29uZmlnRmlsZSA9IHJlYWxMb2NhdGlvbjtcclxuICAgIH1cclxufTtcclxuXHJcbkJkQXBpLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzID0gZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHt9O1xyXG4gICAgcmV0dXJuIF9fbm9uX3dlYnBhY2tfcmVxdWlyZV9fKHRoaXMuV2luZG93Q29uZmlnRmlsZSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXRXaW5kb3dQcmVmZXJlbmNlID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIHJldHVybiB0aGlzLmdldEFsbFdpbmRvd1ByZWZlcmVuY2VzKClba2V5XTtcclxufTtcclxuXHJcbkJkQXBpLnNldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXksIHZhbHVlKSB7XHJcbiAgICBpZiAoIXRoaXMuV2luZG93Q29uZmlnRmlsZSkgcmV0dXJuO1xyXG4gICAgY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICBjb25zdCBwcmVmcyA9IHRoaXMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKTtcclxuICAgIHByZWZzW2tleV0gPSB2YWx1ZTtcclxuICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW3RoaXMuV2luZG93Q29uZmlnRmlsZV07XHJcbiAgICBmcy53cml0ZUZpbGVTeW5jKHRoaXMuV2luZG93Q29uZmlnRmlsZSwgSlNPTi5zdHJpbmdpZnkocHJlZnMsIG51bGwsIDQpKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5pbmplY3RDU1MgPSBmdW5jdGlvbiAoaWQsIGNzcykge1xyXG4gICAgRE9NTWFuYWdlci5pbmplY3RTdHlsZShpZCwgY3NzKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS5jbGVhckNTUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NTWFuYWdlci5yZW1vdmVTdHlsZShpZCk7XHJcbn07XHJcblxyXG4vL0luamVjdCBDU1MgdG8gZG9jdW1lbnQgaGVhZFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG4vL2NzcyA9IGN1c3RvbSBjc3NcclxuQmRBcGkubGlua0pTID0gZnVuY3Rpb24gKGlkLCB1cmwpIHtcclxuICAgIHJldHVybiBET01NYW5hZ2VyLmluamVjdFNjcmlwdChpZCwgdXJsKTtcclxufTtcclxuXHJcbi8vQ2xlYXIgY3NzL3JlbW92ZSBhbnkgZWxlbWVudFxyXG4vL2lkID0gaWQgb2YgZWxlbWVudFxyXG5CZEFwaS51bmxpbmtKUyA9IGZ1bmN0aW9uIChpZCkge1xyXG4gICAgRE9NTWFuYWdlci5yZW1vdmVTY3JpcHQoaWQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgbW9kYWwuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRpdGxlIG9mIHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCAtIGEgc3RyaW5nIG9mIHRleHQgdG8gZGlzcGxheSBpbiB0aGUgbW9kYWxcclxuICovXHJcbkJkQXBpLmFsZXJ0ID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50KSB7XHJcbiAgICBNb2RhbHMuYWxlcnQodGl0bGUsIGNvbnRlbnQpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFNob3dzIGEgZ2VuZXJpYyBidXQgdmVyeSBjdXN0b21pemFibGUgY29uZmlybWF0aW9uIG1vZGFsIHdpdGggb3B0aW9uYWwgY29uZmlybSBhbmQgY2FuY2VsIGNhbGxiYWNrcy5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWFjdEVsZW1lbnR8QXJyYXk8c3RyaW5nfFJlYWN0RWxlbWVudD4pfSBjaGlsZHJlbiAtIGEgc2luZ2xlIG9yIG1peGVkIGFycmF5IG9mIHJlYWN0IGVsZW1lbnRzIGFuZCBzdHJpbmdzLiBFdmVyeXRoaW5nIGlzIHdyYXBwZWQgaW4gRGlzY29yZCdzIGBUZXh0RWxlbWVudGAgY29tcG9uZW50IHNvIHN0cmluZ3Mgd2lsbCBzaG93IGFuZCByZW5kZXIgcHJvcGVybHkuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc10gLSBvcHRpb25zIHRvIG1vZGlmeSB0aGUgbW9kYWxcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5kYW5nZXI9ZmFsc2VdIC0gd2hldGhlciB0aGUgbWFpbiBidXR0b24gc2hvdWxkIGJlIHJlZCBvciBub3RcclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNvbmZpcm1UZXh0PU9rYXldIC0gdGV4dCBmb3IgdGhlIGNvbmZpcm1hdGlvbi9zdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5jYW5jZWxUZXh0PUNhbmNlbF0gLSB0ZXh0IGZvciB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKiBAcGFyYW0ge2NhbGxhYmxlfSBbb3B0aW9ucy5vbkNvbmZpcm09Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBzdWJtaXQgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ2FuY2VsPU5PT1BdIC0gY2FsbGJhY2sgdG8gb2NjdXIgd2hlbiBjbGlja2luZyB0aGUgY2FuY2VsIGJ1dHRvblxyXG4gKi9cclxuQmRBcGkuc2hvd0NvbmZpcm1hdGlvbk1vZGFsID0gZnVuY3Rpb24gKHRpdGxlLCBjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIHJldHVybiBNb2RhbHMuc2hvd0NvbmZpcm1hdGlvbk1vZGFsKHRpdGxlLCBjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8qKlxyXG4gKiBUaGlzIHNob3dzIGEgdG9hc3Qgc2ltaWxhciB0byBhbmRyb2lkIHRvd2FyZHMgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuLlxyXG4gKlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCBUaGUgc3RyaW5nIHRvIHNob3cgaW4gdGhlIHRvYXN0LlxyXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyBPcHRpb25zIG9iamVjdC4gT3B0aW9uYWwgcGFyYW1ldGVyLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudHlwZT1cIlwiXSBDaGFuZ2VzIHRoZSB0eXBlIG9mIHRoZSB0b2FzdCBzdHlsaXN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHkuIENob2ljZXM6IFwiXCIsIFwiaW5mb1wiLCBcInN1Y2Nlc3NcIiwgXCJkYW5nZXJcIi9cImVycm9yXCIsIFwid2FybmluZ1wiL1wid2FyblwiLiBEZWZhdWx0OiBcIlwiXHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuaWNvbj10cnVlXSBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIGljb24gc2hvdWxkIHNob3cgY29ycmVzcG9uZGluZyB0byB0aGUgdHlwZS4gQSB0b2FzdCB3aXRob3V0IHR5cGUgd2lsbCBhbHdheXMgaGF2ZSBubyBpY29uLiBEZWZhdWx0OiB0cnVlXHJcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0aW9ucy50aW1lb3V0PTMwMDBdIEFkanVzdHMgdGhlIHRpbWUgKGluIG1zKSB0aGUgdG9hc3Qgc2hvdWxkIGJlIHNob3duIGZvciBiZWZvcmUgZGlzYXBwZWFyaW5nIGF1dG9tYXRpY2FsbHkuIERlZmF1bHQ6IDMwMDBcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZVNob3c9ZmFsc2VdIFdoZXRoZXIgdG8gZm9yY2Ugc2hvd2luZyB0aGUgdG9hc3QgYW5kIGlnbm9yZSB0aGUgYmQgc2V0dGluZ1xyXG4gKi9cclxuQmRBcGkuc2hvd1RvYXN0ID0gZnVuY3Rpb24oY29udGVudCwgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICBUb2FzdHMuc2hvdyhjb250ZW50LCBvcHRpb25zKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlID0gZnVuY3Rpb24oZmlsdGVyKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKGZpbHRlcik7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZEFsbE1vZHVsZXMgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUoZmlsdGVyLCBmYWxzZSk7XHJcbn07XHJcblxyXG4vLyBGaW5kcyBtb2R1bGVcclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvcHMgPSBmdW5jdGlvbiguLi5wcm9wcykge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoLi4ucHJvcHMpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5UHJvdG90eXBlcyA9IGZ1bmN0aW9uKC4uLnByb3Rvcykge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvdG90eXBlcyguLi5wcm90b3MpO1xyXG59O1xyXG5cclxuQmRBcGkuZmluZE1vZHVsZUJ5RGlzcGxheU5hbWUgPSBmdW5jdGlvbihuYW1lKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlEaXNwbGF5TmFtZShuYW1lKTtcclxufTtcclxuXHJcbi8vIEdldHMgcmVhY3QgaW5zdGFuY2VcclxuQmRBcGkuZ2V0SW50ZXJuYWxJbnN0YW5jZSA9IGZ1bmN0aW9uKG5vZGUpIHtcclxuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiB3aW5kb3cualF1ZXJ5KSAmJiAhKG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIGlmIChub2RlIGluc3RhbmNlb2YgalF1ZXJ5KSBub2RlID0gbm9kZVswXTtcclxuICAgIHJldHVybiBVdGlsaXRpZXMuZ2V0UmVhY3RJbnN0YW5jZShub2RlKTtcclxufTtcclxuXHJcbi8vIEdldHMgZGF0YVxyXG5CZEFwaS5sb2FkRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG5CZEFwaS5nZXREYXRhID0gQmRBcGkubG9hZERhdGE7XHJcblxyXG4vLyBTZXRzIGRhdGFcclxuQmRBcGkuc2F2ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0UGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXksIGRhdGEpO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0RGF0YSA9IEJkQXBpLnNhdmVEYXRhO1xyXG5cclxuLy8gRGVsZXRlcyBkYXRhXHJcbkJkQXBpLmRlbGV0ZURhdGEgPSBmdW5jdGlvbihwbHVnaW5OYW1lLCBrZXkpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuZGVsZXRlUGx1Z2luRGF0YShwbHVnaW5OYW1lLCBrZXkpO1xyXG59O1xyXG5cclxuLy8gUGF0Y2hlcyBvdGhlciBmdW5jdGlvbnNcclxuQmRBcGkubW9ua2V5UGF0Y2ggPSBmdW5jdGlvbih3aGF0LCBtZXRob2ROYW1lLCBvcHRpb25zKSB7XHJcbiAgICByZXR1cm4gVXRpbGl0aWVzLm1vbmtleVBhdGNoKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRXZlbnQgd2hlbiBlbGVtZW50IGlzIHJlbW92ZWRcclxuQmRBcGkub25SZW1vdmVkID0gZnVuY3Rpb24obm9kZSwgY2FsbGJhY2spIHtcclxuICAgIHJldHVybiBVdGlsaXRpZXMub25SZW1vdmVkKG5vZGUsIGNhbGxiYWNrKTtcclxufTtcclxuXHJcbi8vIFdyYXBzIGZ1bmN0aW9uIGluIHRyeS4uY2F0Y2hcclxuQmRBcGkuc3VwcHJlc3NFcnJvcnMgPSBmdW5jdGlvbihtZXRob2QsIG1lc3NhZ2UpIHtcclxuICAgIHJldHVybiBVdGlsaXRpZXMuc3VwcHJlc3NFcnJvcnMobWV0aG9kLCBtZXNzYWdlKTtcclxufTtcclxuXHJcbi8vIFRlc3RzIGZvciB2YWxpZCBKU09OXHJcbkJkQXBpLnRlc3RKU09OID0gZnVuY3Rpb24oZGF0YSkge1xyXG4gICAgcmV0dXJuIFV0aWxpdGllcy50ZXN0SlNPTihkYXRhKTtcclxufTtcclxuXHJcbi8vR2V0IGFub3RoZXIgcGx1Z2luXHJcbi8vbmFtZSA9IG5hbWUgb2YgcGx1Z2luXHJcbi8vIEJkQXBpLmdldFBsdWdpbiA9IGZ1bmN0aW9uIChuYW1lKSB7XHJcbi8vICAgICBpZiAoUGx1Z2lucy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xyXG4vLyAgICAgICAgIHJldHVybiBQbHVnaW5zW25hbWVdLnBsdWdpbjtcclxuLy8gICAgIH1cclxuLy8gICAgIHJldHVybiBudWxsO1xyXG4vLyB9O1xyXG5cclxuLy8gQmRBcGkuaXNQbHVnaW5FbmFibGVkID0gZnVuY3Rpb24obmFtZSkge1xyXG4vLyAgICAgcmV0dXJuICEhUGx1Z2luQ29va2llW25hbWVdO1xyXG4vLyB9O1xyXG5cclxuLy8gQmRBcGkuaXNUaGVtZUVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbi8vICAgICByZXR1cm4gISFUaGVtZUNvb2tpZVtuYW1lXTtcclxuLy8gfTtcclxuXHJcbi8vIEJkQXBpLmlzU2V0dGluZ0VuYWJsZWQgPSBmdW5jdGlvbihpZCkge1xyXG4vLyAgICAgcmV0dXJuICEhU2V0dGluZ3NDb29raWVbaWRdO1xyXG4vLyB9O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmdldEJERGF0YSA9IGZ1bmN0aW9uKGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5nZXRCRERhdGEoa2V5KTtcclxufTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zZXRCRERhdGEgPSBmdW5jdGlvbihrZXksIGRhdGEpIHtcclxuICAgIHJldHVybiBEYXRhU3RvcmUuc2V0QkREYXRhKGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCZEFwaTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/pluginapi.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n\n\n\n\n\n\n\nconst BdApi = {\n get React() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].React;\n },\n\n get ReactDOM() {\n return _discordmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].ReactDOM;\n },\n\n get WindowConfigFile() {\n if (this._windowConfigFile) return this._windowConfigFile;\n\n const electron = __webpack_require__(/*! electron */ \"electron\").remote.app;\n\n const path = __webpack_require__(/*! path */ \"path\");\n\n const base = electron.getAppPath();\n const roamingBase = electron.getPath(\"userData\");\n const roamingLocation = path.resolve(roamingBase, electron.getVersion(), \"modules\", \"discord_desktop_core\", \"injector\", \"config.json\");\n const location = path.resolve(base, \"..\", \"app\", \"config.json\");\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const realLocation = fs.existsSync(location) ? location : fs.existsSync(roamingLocation) ? roamingLocation : null;\n if (!realLocation) return this._windowConfigFile = null;\n return this._windowConfigFile = realLocation;\n }\n\n};\n\nBdApi.getAllWindowPreferences = function () {\n if (!this.WindowConfigFile) return {};\n return require(this.WindowConfigFile);\n};\n\nBdApi.getWindowPreference = function (key) {\n if (!this.WindowConfigFile) return undefined;\n return this.getAllWindowPreferences()[key];\n};\n\nBdApi.setWindowPreference = function (key, value) {\n if (!this.WindowConfigFile) return;\n\n const fs = __webpack_require__(/*! fs */ \"fs\");\n\n const prefs = this.getAllWindowPreferences();\n prefs[key] = value;\n delete __webpack_require__.c[this.WindowConfigFile];\n fs.writeFileSync(this.WindowConfigFile, JSON.stringify(prefs, null, 4));\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.injectCSS = function (id, css) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectStyle(id, css);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.clearCSS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeStyle(id);\n}; //Inject CSS to document head\n//id = id of element\n//css = custom css\n\n\nBdApi.linkJS = function (id, url) {\n return _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectScript(id, url);\n}; //Clear css/remove any element\n//id = id of element\n\n\nBdApi.unlinkJS = function (id) {\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeScript(id);\n};\n/**\r\n * Shows a generic but very customizable modal.\r\n * @param {string} title - title of the modal\r\n * @param {string} content - a string of text to display in the modal\r\n */\n\n\nBdApi.alert = function (title, content) {\n _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].alert(title, content);\n};\n/**\r\n * Shows a generic but very customizable confirmation modal with optional confirm and cancel callbacks.\r\n * @param {string} title - title of the modal\r\n * @param {(string|ReactElement|Array)} children - a single or mixed array of react elements and strings. Everything is wrapped in Discord's `TextElement` component so strings will show and render properly.\r\n * @param {object} [options] - options to modify the modal\r\n * @param {boolean} [options.danger=false] - whether the main button should be red or not\r\n * @param {string} [options.confirmText=Okay] - text for the confirmation/submit button\r\n * @param {string} [options.cancelText=Cancel] - text for the cancel button\r\n * @param {callable} [options.onConfirm=NOOP] - callback to occur when clicking the submit button\r\n * @param {callable} [options.onCancel=NOOP] - callback to occur when clicking the cancel button\r\n */\n\n\nBdApi.showConfirmationModal = function (title, content, options = {}) {\n return _ui_modals__WEBPACK_IMPORTED_MODULE_6__[\"default\"].showConfirmationModal(title, content, options);\n};\n/**\r\n * This shows a toast similar to android towards the bottom of the screen.\r\n *\r\n * @param {string} content The string to show in the toast.\r\n * @param {object} options Options object. Optional parameter.\r\n * @param {string} [options.type=\"\"] Changes the type of the toast stylistically and semantically. Choices: \"\", \"info\", \"success\", \"danger\"/\"error\", \"warning\"/\"warn\". Default: \"\"\r\n * @param {boolean} [options.icon=true] Determines whether the icon should show corresponding to the type. A toast without type will always have no icon. Default: true\r\n * @param {number} [options.timeout=3000] Adjusts the time (in ms) the toast should be shown for before disappearing automatically. Default: 3000\r\n * @param {boolean} [options.forceShow=false] Whether to force showing the toast and ignore the bd setting\r\n */\n\n\nBdApi.showToast = function (content, options = {}) {\n _ui_toasts__WEBPACK_IMPORTED_MODULE_5__[\"default\"].show(content, options);\n}; // Finds module\n\n\nBdApi.findModule = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter);\n}; // Finds module\n\n\nBdApi.findAllModules = function (filter) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getModule(filter, false);\n}; // Finds module\n\n\nBdApi.findModuleByProps = function (...props) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByProps(...props);\n};\n\nBdApi.findModuleByPrototypes = function (...protos) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByPrototypes(...protos);\n};\n\nBdApi.findModuleByDisplayName = function (name) {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"].getByDisplayName(name);\n}; // Gets react instance\n\n\nBdApi.getInternalInstance = function (node) {\n if (!(node instanceof window.jQuery) && !(node instanceof Element)) return undefined;\n if (node instanceof jQuery) node = node[0];\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].getReactInstance(node);\n}; // Gets data\n\n\nBdApi.loadData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getPluginData(pluginName, key);\n};\n\nBdApi.getData = BdApi.loadData; // Sets data\n\nBdApi.saveData = function (pluginName, key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setPluginData(pluginName, key, data);\n};\n\nBdApi.setData = BdApi.saveData; // Deletes data\n\nBdApi.deleteData = function (pluginName, key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].deletePluginData(pluginName, key);\n}; // Patches other functions\n\n\nBdApi.monkeyPatch = function (what, methodName, options) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].monkeyPatch(what, methodName, options);\n}; // Event when element is removed\n\n\nBdApi.onRemoved = function (node, callback) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].onRemoved(node, callback);\n}; // Wraps function in try..catch\n\n\nBdApi.suppressErrors = function (method, message) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].suppressErrors(method, message);\n}; // Tests for valid JSON\n\n\nBdApi.testJSON = function (data) {\n return _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].testJSON(data);\n}; //Get another plugin\n//name = name of plugin\n// BdApi.getPlugin = function (name) {\n// if (Plugins.hasOwnProperty(name)) {\n// return Plugins[name].plugin;\n// }\n// return null;\n// };\n// BdApi.isPluginEnabled = function(name) {\n// return !!PluginCookie[name];\n// };\n// BdApi.isThemeEnabled = function(name) {\n// return !!ThemeCookie[name];\n// };\n// BdApi.isSettingEnabled = function(id) {\n// return !!SettingsCookie[id];\n// };\n// Gets data\n\n\nBdApi.getBDData = function (key) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].getBDData(key);\n}; // Sets data\n\n\nBdApi.setBDData = function (key, data) {\n return _datastore__WEBPACK_IMPORTED_MODULE_3__[\"default\"].setBDData(key, data);\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (BdApi);//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2luYXBpLmpzPzZhOTMiXSwibmFtZXMiOlsiQmRBcGkiLCJSZWFjdCIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3RET00iLCJXaW5kb3dDb25maWdGaWxlIiwiX3dpbmRvd0NvbmZpZ0ZpbGUiLCJlbGVjdHJvbiIsInJlcXVpcmUiLCJyZW1vdGUiLCJhcHAiLCJwYXRoIiwiYmFzZSIsImdldEFwcFBhdGgiLCJyb2FtaW5nQmFzZSIsImdldFBhdGgiLCJyb2FtaW5nTG9jYXRpb24iLCJyZXNvbHZlIiwiZ2V0VmVyc2lvbiIsImxvY2F0aW9uIiwiZnMiLCJyZWFsTG9jYXRpb24iLCJleGlzdHNTeW5jIiwiZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMiLCJfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyIsImdldFdpbmRvd1ByZWZlcmVuY2UiLCJrZXkiLCJ1bmRlZmluZWQiLCJzZXRXaW5kb3dQcmVmZXJlbmNlIiwidmFsdWUiLCJwcmVmcyIsIndyaXRlRmlsZVN5bmMiLCJKU09OIiwic3RyaW5naWZ5IiwiaW5qZWN0Q1NTIiwiaWQiLCJjc3MiLCJET01NYW5hZ2VyIiwiaW5qZWN0U3R5bGUiLCJjbGVhckNTUyIsInJlbW92ZVN0eWxlIiwibGlua0pTIiwidXJsIiwiaW5qZWN0U2NyaXB0IiwidW5saW5rSlMiLCJyZW1vdmVTY3JpcHQiLCJhbGVydCIsInRpdGxlIiwiY29udGVudCIsIk1vZGFscyIsInNob3dDb25maXJtYXRpb25Nb2RhbCIsIm9wdGlvbnMiLCJzaG93VG9hc3QiLCJUb2FzdHMiLCJzaG93IiwiZmluZE1vZHVsZSIsImZpbHRlciIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0TW9kdWxlIiwiZmluZEFsbE1vZHVsZXMiLCJmaW5kTW9kdWxlQnlQcm9wcyIsInByb3BzIiwiZ2V0QnlQcm9wcyIsImZpbmRNb2R1bGVCeVByb3RvdHlwZXMiLCJwcm90b3MiLCJnZXRCeVByb3RvdHlwZXMiLCJmaW5kTW9kdWxlQnlEaXNwbGF5TmFtZSIsIm5hbWUiLCJnZXRCeURpc3BsYXlOYW1lIiwiZ2V0SW50ZXJuYWxJbnN0YW5jZSIsIm5vZGUiLCJ3aW5kb3ciLCJqUXVlcnkiLCJFbGVtZW50IiwiVXRpbGl0aWVzIiwiZ2V0UmVhY3RJbnN0YW5jZSIsImxvYWREYXRhIiwicGx1Z2luTmFtZSIsIkRhdGFTdG9yZSIsImdldFBsdWdpbkRhdGEiLCJnZXREYXRhIiwic2F2ZURhdGEiLCJkYXRhIiwic2V0UGx1Z2luRGF0YSIsInNldERhdGEiLCJkZWxldGVEYXRhIiwiZGVsZXRlUGx1Z2luRGF0YSIsIm1vbmtleVBhdGNoIiwid2hhdCIsIm1ldGhvZE5hbWUiLCJvblJlbW92ZWQiLCJjYWxsYmFjayIsInN1cHByZXNzRXJyb3JzIiwibWV0aG9kIiwibWVzc2FnZSIsInRlc3RKU09OIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQSxNQUFNQSxLQUFLLEdBQUc7QUFDVixNQUFJQyxLQUFKLEdBQVk7QUFBRSxXQUFPQyx1REFBYyxDQUFDRCxLQUF0QjtBQUE4QixHQURsQzs7QUFFVixNQUFJRSxRQUFKLEdBQWU7QUFBRSxXQUFPRCx1REFBYyxDQUFDQyxRQUF0QjtBQUFpQyxHQUZ4Qzs7QUFHVixNQUFJQyxnQkFBSixHQUF1QjtBQUNuQixRQUFJLEtBQUtDLGlCQUFULEVBQTRCLE9BQU8sS0FBS0EsaUJBQVo7O0FBQzVCLFVBQU1DLFFBQVEsR0FBR0MsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CQyxNQUFwQixDQUEyQkMsR0FBNUM7O0FBQ0EsVUFBTUMsSUFBSSxHQUFHSCxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLFVBQU1JLElBQUksR0FBR0wsUUFBUSxDQUFDTSxVQUFULEVBQWI7QUFDQSxVQUFNQyxXQUFXLEdBQUdQLFFBQVEsQ0FBQ1EsT0FB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aS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhc3RvcmVcIjtcclxuaW1wb3J0IERPTU1hbmFnZXIgZnJvbSBcIi4vZG9tbWFuYWdlclwiO1xyXG5pbXBvcnQgVG9hc3RzIGZyb20gXCIuLi91aS90b2FzdHNcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vdWkvbW9kYWxzXCI7XHJcblxyXG5jb25zdCBCZEFwaSA9IHtcclxuICAgIGdldCBSZWFjdCgpIHsgcmV0dXJuIERpc2NvcmRNb2R1bGVzLlJlYWN0OyB9LFxyXG4gICAgZ2V0IFJlYWN0RE9NKCkgeyByZXR1cm4gRGlzY29yZE1vZHVsZXMuUmVhY3RET007IH0sXHJcbiAgICBnZXQgV2luZG93Q29uZmlnRmlsZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fd2luZG93Q29uZmlnRmlsZSkgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGU7XHJcbiAgICAgICAgY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlLmFwcDtcclxuICAgICAgICBjb25zdCBwYXRoID0gcmVxdWlyZShcInBhdGhcIik7XHJcbiAgICAgICAgY29uc3QgYmFzZSA9IGVsZWN0cm9uLmdldEFwcFBhdGgoKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nQmFzZSA9IGVsZWN0cm9uLmdldFBhdGgoXCJ1c2VyRGF0YVwiKTtcclxuICAgICAgICBjb25zdCByb2FtaW5nTG9jYXRpb24gPSBwYXRoLnJlc29sdmUocm9hbWluZ0Jhc2UsIGVsZWN0cm9uLmdldFZlcnNpb24oKSwgXCJtb2R1bGVzXCIsIFwiZGlzY29yZF9kZXNrdG9wX2NvcmVcIiwgXCJpbmplY3RvclwiLCBcImNvbmZpZy5qc29uXCIpO1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gcGF0aC5yZXNvbHZlKGJhc2UsIFwiLi5cIiwgXCJhcHBcIiwgXCJjb25maWcuanNvblwiKTtcclxuICAgICAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgICAgICBjb25zdCByZWFsTG9jYXRpb24gPSBmcy5leGlzdHNTeW5jKGxvY2F0aW9uKSA/IGxvY2F0aW9uIDogZnMuZXhpc3RzU3luYyhyb2FtaW5nTG9jYXRpb24pID8gcm9hbWluZ0xvY2F0aW9uIDogbnVsbDtcclxuICAgICAgICBpZiAoIXJlYWxMb2NhdGlvbikgcmV0dXJuIHRoaXMuX3dpbmRvd0NvbmZpZ0ZpbGUgPSBudWxsO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl93aW5kb3dDb25maWdGaWxlID0gcmVhbExvY2F0aW9uO1xyXG4gICAgfVxyXG59O1xyXG5cclxuQmRBcGkuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMgPSBmdW5jdGlvbigpIHtcclxuICAgIGlmICghdGhpcy5XaW5kb3dDb25maWdGaWxlKSByZXR1cm4ge307XHJcbiAgICByZXR1cm4gX19ub25fd2VicGFja19yZXF1aXJlX18odGhpcy5XaW5kb3dDb25maWdGaWxlKTtcclxufTtcclxuXHJcbkJkQXBpLmdldFdpbmRvd1ByZWZlcmVuY2UgPSBmdW5jdGlvbihrZXkpIHtcclxuICAgIGlmICghdGhpcy5XaW5kb3dDb25maWdGaWxlKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0QWxsV2luZG93UHJlZmVyZW5jZXMoKVtrZXldO1xyXG59O1xyXG5cclxuQmRBcGkuc2V0V2luZG93UHJlZmVyZW5jZSA9IGZ1bmN0aW9uKGtleSwgdmFsdWUpIHtcclxuICAgIGlmICghdGhpcy5XaW5kb3dDb25maWdGaWxlKSByZXR1cm47XHJcbiAgICBjb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgIGNvbnN0IHByZWZzID0gdGhpcy5nZXRBbGxXaW5kb3dQcmVmZXJlbmNlcygpO1xyXG4gICAgcHJlZnNba2V5XSA9IHZhbHVlO1xyXG4gICAgZGVsZXRlIHJlcXVpcmUuY2FjaGVbdGhpcy5XaW5kb3dDb25maWdGaWxlXTtcclxuICAgIGZzLndyaXRlRmlsZVN5bmModGhpcy5XaW5kb3dDb25maWdGaWxlLCBKU09OLnN0cmluZ2lmeShwcmVmcywgbnVsbCwgNCkpO1xyXG59O1xyXG5cclxuLy9JbmplY3QgQ1NTIHRvIGRvY3VtZW50IGhlYWRcclxuLy9pZCA9IGlkIG9mIGVsZW1lbnRcclxuLy9jc3MgPSBjdXN0b20gY3NzXHJcbkJkQXBpLmluamVjdENTUyA9IGZ1bmN0aW9uIChpZCwgY3NzKSB7XHJcbiAgICBET01NYW5hZ2VyLmluamVjdFN0eWxlKGlkLCBjc3MpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLmNsZWFyQ1NTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET01NYW5hZ2VyLnJlbW92ZVN0eWxlKGlkKTtcclxufTtcclxuXHJcbi8vSW5qZWN0IENTUyB0byBkb2N1bWVudCBoZWFkXHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbi8vY3NzID0gY3VzdG9tIGNzc1xyXG5CZEFwaS5saW5rSlMgPSBmdW5jdGlvbiAoaWQsIHVybCkge1xyXG4gICAgcmV0dXJuIERPTU1hbmFnZXIuaW5qZWN0U2NyaXB0KGlkLCB1cmwpO1xyXG59O1xyXG5cclxuLy9DbGVhciBjc3MvcmVtb3ZlIGFueSBlbGVtZW50XHJcbi8vaWQgPSBpZCBvZiBlbGVtZW50XHJcbkJkQXBpLnVubGlua0pTID0gZnVuY3Rpb24gKGlkKSB7XHJcbiAgICBET01NYW5hZ2VyLnJlbW92ZVNjcmlwdChpZCk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBtb2RhbC5cclxuICogQHBhcmFtIHtzdHJpbmd9IHRpdGxlIC0gdGl0bGUgb2YgdGhlIG1vZGFsXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IC0gYSBzdHJpbmcgb2YgdGV4dCB0byBkaXNwbGF5IGluIHRoZSBtb2RhbFxyXG4gKi9cclxuQmRBcGkuYWxlcnQgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQpIHtcclxuICAgIE1vZGFscy5hbGVydCh0aXRsZSwgY29udGVudCk7XHJcbn07XHJcblxyXG4vKipcclxuICogU2hvd3MgYSBnZW5lcmljIGJ1dCB2ZXJ5IGN1c3RvbWl6YWJsZSBjb25maXJtYXRpb24gbW9kYWwgd2l0aCBvcHRpb25hbCBjb25maXJtIGFuZCBjYW5jZWwgY2FsbGJhY2tzLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gdGl0bGUgLSB0aXRsZSBvZiB0aGUgbW9kYWxcclxuICogQHBhcmFtIHsoc3RyaW5nfFJlYWN0RWxlbWVudHxBcnJheTxzdHJpbmd8UmVhY3RFbGVtZW50Pil9IGNoaWxkcmVuIC0gYSBzaW5nbGUgb3IgbWl4ZWQgYXJyYXkgb2YgcmVhY3QgZWxlbWVudHMgYW5kIHN0cmluZ3MuIEV2ZXJ5dGhpbmcgaXMgd3JhcHBlZCBpbiBEaXNjb3JkJ3MgYFRleHRFbGVtZW50YCBjb21wb25lbnQgc28gc3RyaW5ncyB3aWxsIHNob3cgYW5kIHJlbmRlciBwcm9wZXJseS5cclxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zXSAtIG9wdGlvbnMgdG8gbW9kaWZ5IHRoZSBtb2RhbFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmRhbmdlcj1mYWxzZV0gLSB3aGV0aGVyIHRoZSBtYWluIGJ1dHRvbiBzaG91bGQgYmUgcmVkIG9yIG5vdFxyXG4gKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuY29uZmlybVRleHQ9T2theV0gLSB0ZXh0IGZvciB0aGUgY29uZmlybWF0aW9uL3N1Ym1pdCBidXR0b25cclxuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmNhbmNlbFRleHQ9Q2FuY2VsXSAtIHRleHQgZm9yIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAqIEBwYXJhbSB7Y2FsbGFibGV9IFtvcHRpb25zLm9uQ29uZmlybT1OT09QXSAtIGNhbGxiYWNrIHRvIG9jY3VyIHdoZW4gY2xpY2tpbmcgdGhlIHN1Ym1pdCBidXR0b25cclxuICogQHBhcmFtIHtjYWxsYWJsZX0gW29wdGlvbnMub25DYW5jZWw9Tk9PUF0gLSBjYWxsYmFjayB0byBvY2N1ciB3aGVuIGNsaWNraW5nIHRoZSBjYW5jZWwgYnV0dG9uXHJcbiAqL1xyXG5CZEFwaS5zaG93Q29uZmlybWF0aW9uTW9kYWwgPSBmdW5jdGlvbiAodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgcmV0dXJuIE1vZGFscy5zaG93Q29uZmlybWF0aW9uTW9kYWwodGl0bGUsIGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIFRoaXMgc2hvd3MgYSB0b2FzdCBzaW1pbGFyIHRvIGFuZHJvaWQgdG93YXJkcyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4uXHJcbiAqXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IFRoZSBzdHJpbmcgdG8gc2hvdyBpbiB0aGUgdG9hc3QuXHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIE9wdGlvbnMgb2JqZWN0LiBPcHRpb25hbCBwYXJhbWV0ZXIuXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy50eXBlPVwiXCJdIENoYW5nZXMgdGhlIHR5cGUgb2YgdGhlIHRvYXN0IHN0eWxpc3RpY2FsbHkgYW5kIHNlbWFudGljYWxseS4gQ2hvaWNlczogXCJcIiwgXCJpbmZvXCIsIFwic3VjY2Vzc1wiLCBcImRhbmdlclwiL1wiZXJyb3JcIiwgXCJ3YXJuaW5nXCIvXCJ3YXJuXCIuIERlZmF1bHQ6IFwiXCJcclxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5pY29uPXRydWVdIERldGVybWluZXMgd2hldGhlciB0aGUgaWNvbiBzaG91bGQgc2hvdyBjb3JyZXNwb25kaW5nIHRvIHRoZSB0eXBlLiBBIHRvYXN0IHdpdGhvdXQgdHlwZSB3aWxsIGFsd2F5cyBoYXZlIG5vIGljb24uIERlZmF1bHQ6IHRydWVcclxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRpb25zLnRpbWVvdXQ9MzAwMF0gQWRqdXN0cyB0aGUgdGltZSAoaW4gbXMpIHRoZSB0b2FzdCBzaG91bGQgYmUgc2hvd24gZm9yIGJlZm9yZSBkaXNhcHBlYXJpbmcgYXV0b21hdGljYWxseS4gRGVmYXVsdDogMzAwMFxyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZvcmNlU2hvdz1mYWxzZV0gV2hldGhlciB0byBmb3JjZSBzaG93aW5nIHRoZSB0b2FzdCBhbmQgaWdub3JlIHRoZSBiZCBzZXR0aW5nXHJcbiAqL1xyXG5CZEFwaS5zaG93VG9hc3QgPSBmdW5jdGlvbihjb250ZW50LCBvcHRpb25zID0ge30pIHtcclxuICAgIFRvYXN0cy5zaG93KGNvbnRlbnQsIG9wdGlvbnMpO1xyXG59O1xyXG5cclxuLy8gRmluZHMgbW9kdWxlXHJcbkJkQXBpLmZpbmRNb2R1bGUgPSBmdW5jdGlvbihmaWx0ZXIpIHtcclxuICAgIHJldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUoZmlsdGVyKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kQWxsTW9kdWxlcyA9IGZ1bmN0aW9uKGZpbHRlcikge1xyXG4gICAgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldE1vZHVsZShmaWx0ZXIsIGZhbHNlKTtcclxufTtcclxuXHJcbi8vIEZpbmRzIG1vZHVsZVxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm9wcyA9IGZ1bmN0aW9uKC4uLnByb3BzKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyguLi5wcm9wcyk7XHJcbn07XHJcblxyXG5CZEFwaS5maW5kTW9kdWxlQnlQcm90b3R5cGVzID0gZnVuY3Rpb24oLi4ucHJvdG9zKSB7XHJcbiAgICByZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm90b3R5cGVzKC4uLnByb3Rvcyk7XHJcbn07XHJcblxyXG5CZEFwaS5maW5kTW9kdWxlQnlEaXNwbGF5TmFtZSA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuICAgIHJldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeURpc3BsYXlOYW1lKG5hbWUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyByZWFjdCBpbnN0YW5jZVxyXG5CZEFwaS5nZXRJbnRlcm5hbEluc3RhbmNlID0gZnVuY3Rpb24obm9kZSkge1xyXG4gICAgaWYgKCEobm9kZSBpbnN0YW5jZW9mIHdpbmRvdy5qUXVlcnkpICYmICEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm4gdW5kZWZpbmVkO1xyXG4gICAgaWYgKG5vZGUgaW5zdGFuY2VvZiBqUXVlcnkpIG5vZGUgPSBub2RlWzBdO1xyXG4gICAgcmV0dXJuIFV0aWxpdGllcy5nZXRSZWFjdEluc3RhbmNlKG5vZGUpO1xyXG59O1xyXG5cclxuLy8gR2V0cyBkYXRhXHJcbkJkQXBpLmxvYWREYXRhID0gZnVuY3Rpb24ocGx1Z2luTmFtZSwga2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldFBsdWdpbkRhdGEocGx1Z2luTmFtZSwga2V5KTtcclxufTtcclxuXHJcbkJkQXBpLmdldERhdGEgPSBCZEFwaS5sb2FkRGF0YTtcclxuXHJcbi8vIFNldHMgZGF0YVxyXG5CZEFwaS5zYXZlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSwgZGF0YSk7XHJcbn07XHJcblxyXG5CZEFwaS5zZXREYXRhID0gQmRBcGkuc2F2ZURhdGE7XHJcblxyXG4vLyBEZWxldGVzIGRhdGFcclxuQmRBcGkuZGVsZXRlRGF0YSA9IGZ1bmN0aW9uKHBsdWdpbk5hbWUsIGtleSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5kZWxldGVQbHVnaW5EYXRhKHBsdWdpbk5hbWUsIGtleSk7XHJcbn07XHJcblxyXG4vLyBQYXRjaGVzIG90aGVyIGZ1bmN0aW9uc1xyXG5CZEFwaS5tb25rZXlQYXRjaCA9IGZ1bmN0aW9uKHdoYXQsIG1ldGhvZE5hbWUsIG9wdGlvbnMpIHtcclxuICAgIHJldHVybiBVdGlsaXRpZXMubW9ua2V5UGF0Y2god2hhdCwgbWV0aG9kTmFtZSwgb3B0aW9ucyk7XHJcbn07XHJcblxyXG4vLyBFdmVudCB3aGVuIGVsZW1lbnQgaXMgcmVtb3ZlZFxyXG5CZEFwaS5vblJlbW92ZWQgPSBmdW5jdGlvbihub2RlLCBjYWxsYmFjaykge1xyXG4gICAgcmV0dXJuIFV0aWxpdGllcy5vblJlbW92ZWQobm9kZSwgY2FsbGJhY2spO1xyXG59O1xyXG5cclxuLy8gV3JhcHMgZnVuY3Rpb24gaW4gdHJ5Li5jYXRjaFxyXG5CZEFwaS5zdXBwcmVzc0Vycm9ycyA9IGZ1bmN0aW9uKG1ldGhvZCwgbWVzc2FnZSkge1xyXG4gICAgcmV0dXJuIFV0aWxpdGllcy5zdXBwcmVzc0Vycm9ycyhtZXRob2QsIG1lc3NhZ2UpO1xyXG59O1xyXG5cclxuLy8gVGVzdHMgZm9yIHZhbGlkIEpTT05cclxuQmRBcGkudGVzdEpTT04gPSBmdW5jdGlvbihkYXRhKSB7XHJcbiAgICByZXR1cm4gVXRpbGl0aWVzLnRlc3RKU09OKGRhdGEpO1xyXG59O1xyXG5cclxuLy9HZXQgYW5vdGhlciBwbHVnaW5cclxuLy9uYW1lID0gbmFtZSBvZiBwbHVnaW5cclxuLy8gQmRBcGkuZ2V0UGx1Z2luID0gZnVuY3Rpb24gKG5hbWUpIHtcclxuLy8gICAgIGlmIChQbHVnaW5zLmhhc093blByb3BlcnR5KG5hbWUpKSB7XHJcbi8vICAgICAgICAgcmV0dXJuIFBsdWdpbnNbbmFtZV0ucGx1Z2luO1xyXG4vLyAgICAgfVxyXG4vLyAgICAgcmV0dXJuIG51bGw7XHJcbi8vIH07XHJcblxyXG4vLyBCZEFwaS5pc1BsdWdpbkVuYWJsZWQgPSBmdW5jdGlvbihuYW1lKSB7XHJcbi8vICAgICByZXR1cm4gISFQbHVnaW5Db29raWVbbmFtZV07XHJcbi8vIH07XHJcblxyXG4vLyBCZEFwaS5pc1RoZW1lRW5hYmxlZCA9IGZ1bmN0aW9uKG5hbWUpIHtcclxuLy8gICAgIHJldHVybiAhIVRoZW1lQ29va2llW25hbWVdO1xyXG4vLyB9O1xyXG5cclxuLy8gQmRBcGkuaXNTZXR0aW5nRW5hYmxlZCA9IGZ1bmN0aW9uKGlkKSB7XHJcbi8vICAgICByZXR1cm4gISFTZXR0aW5nc0Nvb2tpZVtpZF07XHJcbi8vIH07XHJcblxyXG4vLyBHZXRzIGRhdGFcclxuQmRBcGkuZ2V0QkREYXRhID0gZnVuY3Rpb24oa2V5KSB7XHJcbiAgICByZXR1cm4gRGF0YVN0b3JlLmdldEJERGF0YShrZXkpO1xyXG59O1xyXG5cclxuLy8gU2V0cyBkYXRhXHJcbkJkQXBpLnNldEJERGF0YSA9IGZ1bmN0aW9uKGtleSwgZGF0YSkge1xyXG4gICAgcmV0dXJuIERhdGFTdG9yZS5zZXRCRERhdGEoa2V5LCBkYXRhKTtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJkQXBpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/pluginapi.js\n"); /***/ }), @@ -479,7 +479,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 _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _structs_contenterror__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../structs/contenterror */ \"./src/structs/contenterror.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n\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_2__[\"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_4__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n\n reloadPlugin(idOrFileOrContent) {\n const error = this.reloadContent(idOrFileOrContent);\n if (error) ui__WEBPACK_IMPORTED_MODULE_4__[\"Modals\"].showContentErrors({\n plugins: [error]\n });\n return typeof idOrFileOrContent == \"string\" ? this.contentList.find(c => c.id == idOrFileOrContent || c.filename == idOrFileOrContent) : idOrFileOrContent;\n }\n\n loadAllPlugins() {\n const errors = this.loadAllContent();\n this.setupFunctions();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"].registerPanel(\"plugins\", \"Plugins\", {\n element: () => ui__WEBPACK_IMPORTED_MODULE_4__[\"SettingsPanel\"].getContentPanel(\"Plugins\", this.contentList, this.state, {\n folder: this.contentFolder,\n onChange: this.togglePlugin.bind(this),\n reload: this.reloadPlugin.bind(this),\n refreshList: this.updatePluginList.bind(this)\n })\n });\n return errors;\n }\n /* Overrides */\n\n\n initializeContent(content) {\n if (!content.type) return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_5__[\"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 = thePlugin.getAuthor() || content.author || \"No author\";\n content.description = thePlugin.getDescription() || content.description || \"No description\";\n content.version = thePlugin.getVersion() || content.version || \"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_5__[\"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_5__[\"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_3__[\"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_4__[\"Toasts\"].show(`${content.name} v${content.version} has started.`);\n } catch (err) {\n this.state[content.id] = false;\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].error(`${content.name} v${content.version} could not be started.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, content.name + \" could not be started.\", err);\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_5__[\"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_4__[\"Toasts\"].show(`${content.name} v${content.version} has stopped.`);\n } catch (err) {\n this.state[content.id] = false;\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].error(`${content.name} v${content.version} could not be stopped.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, content.name + \" could not be stopped.\", err);\n return new _structs_contenterror__WEBPACK_IMPORTED_MODULE_5__[\"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 _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, \"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 _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, \"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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcz9kMTczIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwiZWxlY3Ryb25SZW1vdGUiLCJyZW1vdGUiLCJQbHVnaW5NYW5hZ2VyIiwiQ29udGVudE1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiY29udGVudEZvbGRlciIsInJlc29sdmUiLCJDb25maWciLCJkYXRhUGF0aCIsInByZWZpeCIsImNvbnN0cnVjdG9yIiwib25Td2l0Y2giLCJiaW5kIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiaSIsIm1sZW4iLCJsZW5ndGgiLCJvbk11dGF0aW9uIiwidXBkYXRlUGx1Z2luTGlzdCIsInVwZGF0ZUxpc3QiLCJlbmFibGVQbHVnaW4iLCJpZE9yQ29udGVudCIsImVuYWJsZUNvbnRlbnQiLCJkaXNhYmxlUGx1Z2luIiwiZGlzYWJsZUNvbnRlbnQiLCJ0b2dnbGVQbHVnaW4iLCJpZCIsInRvZ2dsZUNvbnRlbnQiLCJ1bmxvYWRQbHVnaW4iLCJpZE9yRmlsZU9yQ29udGVudCIsInVubG9hZENvbnRlbnQiLCJsb2FkUGx1Z2luIiwiZmlsZW5hbWUiLCJlcnJvciIsImxvYWRDb250ZW50IiwiTW9kYWxzIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJ0aGVtZXMiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRDb250ZW50IiwicGx1Z2lucyIsImNvbnRlbnRMaXN0IiwiZmluZCIsImMiLCJsb2FkQWxsUGx1Z2lucyIsImVycm9ycyIsImxvYWRBbGxDb250ZW50Iiwic2V0dXBGdW5jdGlvbnMiLCJTZXR0aW5ncyIsInJlZ2lzdGVyUGFuZWwiLCJlbGVtZW50IiwiU2V0dGluZ3NSZW5kZXJlciIsImdldENvbnRlbnRQYW5lbCIsInN0YXRlIiwiZm9sZGVyIiwib25DaGFuZ2UiLCJyZWxvYWQiLCJyZWZyZXNoTGlzdCIsImluaXRpYWxpemVDb250ZW50IiwiY29udGVudCIsInR5cGUiLCJDb250ZW50RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJ0aGVQbHVnaW4iLCJwbHVnaW4iLCJnZXROYW1lIiwiYXV0aG9yIiwiZ2V0QXV0aG9yIiwiZGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwibG9hZCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJtZXRhIiwiX2NvbXBpbGUiLCJkaWRFeHBvcnQiLCJVdGlsaXRpZXMiLCJpc0VtcHR5IiwiZXhwb3J0cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydENvbnRlbnQiLCJzdGFydFBsdWdpbiIsInN0b3BDb250ZW50Iiwic3RvcFBsdWdpbiIsInAiLCJzdGFydCIsImVtaXQiLCJUb2FzdHMiLCJzaG93IiwiZXJyIiwiTG9nZ2VyIiwic3RhY2t0cmFjZSIsInN0b3AiLCJnZXRDdXJyZW50V2ViQ29udGVudHMiLCJvbiIsIm9ic2VydmUiLCJkb2N1bWVudCIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJtdXRhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUEsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLE1BQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CRSxNQUEzQzs7QUFFZSxtRUFBSSxNQUFNQyxhQUFOLFNBQTRCQyx1REFBNUIsQ0FBMkM7QUFDMUQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxlQUFQO0FBQXdCOztBQUNwQyxNQUFJQyxlQUFKLEdBQXNCO0FBQUMsV0FBTyxLQUFQO0FBQWM7O0FBQ3JDLE1BQUlDLFNBQUosR0FBZ0I7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3RDLE1BQUlDLGFBQUosR0FBb0I7QUFB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Q0EsVUFBSSxDQUFDLEtBQUtaLEtBQUwsQ0FBVyxLQUFLWixXQUFMLENBQWlCM0IsQ0FBakIsRUFBb0JZLEVBQS9CLENBQUwsRUFBeUM7O0FBQ3pDLFVBQUksT0FBT3VDLE1BQU0sQ0FBQ3RELFFBQWQsS0FBMkIsVUFBL0IsRUFBMkM7QUFDdkMsWUFBSTtBQUFFc0QsZ0JBQU0sQ0FBQ3RELFFBQVAsQ0FBZ0I0RixRQUFoQjtBQUE0QixTQUFsQyxDQUNBLE9BQU9WLEdBQVAsRUFBWTtBQUFFQyx5REFBTSxDQUFDQyxVQUFQLENBQWtCLEtBQUsvRixJQUF2QixFQUE2QixpQ0FBaUMsS0FBS3lDLFdBQUwsQ0FBaUIzQixDQUFqQixFQUFvQmQsSUFBckQsR0FBNEQsR0FBekYsRUFBOEY2RixHQUE5RjtBQUFxRztBQUN0SDtBQUNKO0FBQ0o7O0FBcEp5RCxDQUEvQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudG1hbmFnZXJcIjtcclxuaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IHtUb2FzdHMsIE1vZGFsc30gZnJvbSBcInVpXCI7XHJcbmltcG9ydCBDb250ZW50RXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvY29udGVudGVycm9yXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1BhbmVsIGFzIFNldHRpbmdzUmVuZGVyZXJ9IGZyb20gXCJ1aVwiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5jb25zdCBlbGVjdHJvblJlbW90ZSA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKS5yZW1vdGU7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgUGx1Z2luTWFuYWdlciBleHRlbmRzIENvbnRlbnRNYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlBsdWdpbk1hbmFnZXJcIjt9XHJcbiAgICBnZXQgbW9kdWxlRXh0ZW5zaW9uKCkge3JldHVybiBcIi5qc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnBsdWdpbi5qc1wiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcInBsdWdpbnNcIik7fVxyXG4gICAgZ2V0IHByZWZpeCgpIHtyZXR1cm4gXCJwbHVnaW5cIjt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLm9uU3dpdGNoID0gdGhpcy5vblN3aXRjaC5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbk11dGF0aW9uKG11dGF0aW9uc1tpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKiBBbGlhc2VzICovXHJcbiAgICB1cGRhdGVQbHVnaW5MaXN0KCkge3JldHVybiB0aGlzLnVwZGF0ZUxpc3QoKTt9XHJcblxyXG4gICAgZW5hYmxlUGx1Z2luKGlkT3JDb250ZW50KSB7cmV0dXJuIHRoaXMuZW5hYmxlQ29udGVudChpZE9yQ29udGVudCk7fVxyXG4gICAgZGlzYWJsZVBsdWdpbihpZE9yQ29udGVudCkge3JldHVybiB0aGlzLmRpc2FibGVDb250ZW50KGlkT3JDb250ZW50KTt9XHJcbiAgICB0b2dnbGVQbHVnaW4oaWQpIHtyZXR1cm4gdGhpcy50b2dnbGVDb250ZW50KGlkKTt9XHJcblxyXG4gICAgdW5sb2FkUGx1Z2luKGlkT3JGaWxlT3JDb250ZW50KSB7cmV0dXJuIHRoaXMudW5sb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCk7fVxyXG5cclxuICAgIGxvYWRQbHVnaW4oZmlsZW5hbWUpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGlmIChlcnJvcikgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHt0aGVtZXM6IFtlcnJvcl19KTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWRQbHVnaW4oaWRPckZpbGVPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucmVsb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCk7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IFtlcnJvcl19KTtcclxuICAgICAgICByZXR1cm4gdHlwZW9mKGlkT3JGaWxlT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQ29udGVudCB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JDb250ZW50KSA6IGlkT3JGaWxlT3JDb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRBbGxQbHVnaW5zKCkge1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IHRoaXMubG9hZEFsbENvbnRlbnQoKTtcclxuICAgICAgICB0aGlzLnNldHVwRnVuY3Rpb25zKCk7XHJcbiAgICAgICAgU2V0dGluZ3MucmVnaXN0ZXJQYW5lbChcInBsdWdpbnNcIiwgXCJQbHVnaW5zXCIsIHtlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmdldENvbnRlbnRQYW5lbChcIlBsdWdpbnNcIiwgdGhpcy5jb250ZW50TGlzdCwgdGhpcy5zdGF0ZSwge1xyXG4gICAgICAgICAgICBmb2xkZXI6IHRoaXMuY29udGVudEZvbGRlcixcclxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMudG9nZ2xlUGx1Z2luLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHJlbG9hZDogdGhpcy5yZWxvYWRQbHVnaW4uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVmcmVzaExpc3Q6IHRoaXMudXBkYXRlUGx1Z2luTGlzdC5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSl9KTtcclxuICAgICAgICByZXR1cm4gZXJyb3JzO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIE92ZXJyaWRlcyAqL1xyXG4gICAgaW5pdGlhbGl6ZUNvbnRlbnQoY29udGVudCkge1xyXG4gICAgICAgIGlmICghY29udGVudC50eXBlKSByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGNvbnRlbnQuZmlsZW5hbWUsIFwiUGx1Z2luIGhhZCBubyBleHBvcnRzXCIsIHttZXNzYWdlOiBcIlBsdWdpbiBoYWQgbm8gZXhwb3J0cyBvciBubyBuYW1lIHByb3BlcnR5LlwiLCBzdGFjazogXCJcIn0pO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHRoZVBsdWdpbiA9IG5ldyBjb250ZW50LnR5cGUoKTtcclxuICAgICAgICAgICAgY29udGVudC5wbHVnaW4gPSB0aGVQbHVnaW47XHJcbiAgICAgICAgICAgIGNvbnRlbnQubmFtZSA9IHRoZVBsdWdpbi5nZXROYW1lKCkgfHwgY29udGVudC5uYW1lO1xyXG4gICAgICAgICAgICBjb250ZW50LmF1dGhvciA9IHRoZVBsdWdpbi5nZXRBdXRob3IoKSB8fCBjb250ZW50LmF1dGhvciB8fCBcIk5vIGF1dGhvclwiO1xyXG4gICAgICAgICAgICBjb250ZW50LmRlc2NyaXB0aW9uID0gdGhlUGx1Z2luLmdldERlc2NyaXB0aW9uKCkgfHwgY29udGVudC5kZXNjcmlwdGlvbiB8fCBcIk5vIGRlc2NyaXB0aW9uXCI7XHJcbiAgICAgICAgICAgIGNvbnRlbnQudmVyc2lvbiA9IHRoZVBsdWdpbi5nZXRWZXJzaW9uKCkgfHwgY29udGVudC52ZXJzaW9uIHx8IFwiTm8gdmVyc2lvblwiO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihjb250ZW50LnBsdWdpbi5sb2FkKSA9PSBcImZ1bmN0aW9uXCIpIGNvbnRlbnQucGx1Z2luLmxvYWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29udGVudEVycm9yKGNvbnRlbnQubmFtZSwgY29udGVudC5maWxlbmFtZSwgXCJsb2FkKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7cmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBjb250ZW50LmZpbGVuYW1lLCBcIkNvdWxkIG5vdCBiZSBjb25zdHJ1Y3RlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO31cclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250ZW50TW9kaWZpY2F0aW9uKG1vZHVsZSwgY29udGVudCwgbWV0YSkge1xyXG4gICAgICAgIG1vZHVsZS5fY29tcGlsZShjb250ZW50LCBtb2R1bGUuZmlsZW5hbWUpO1xyXG4gICAgICAgIGNvbnN0IGRpZEV4cG9ydCA9ICFVdGlsaXRpZXMuaXNFbXB0eShtb2R1bGUuZXhwb3J0cyk7XHJcbiAgICAgICAgaWYgKGRpZEV4cG9ydCkge1xyXG4gICAgICAgICAgICBtZXRhLnR5cGUgPSBtb2R1bGUuZXhwb3J0cztcclxuICAgICAgICAgICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRhO1xyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29udGVudCArPSBgXFxubW9kdWxlLmV4cG9ydHMgPSAke0pTT04uc3RyaW5naWZ5KG1ldGEpfTtcXG5tb2R1bGUuZXhwb3J0cy50eXBlID0gJHttZXRhLmV4cG9ydHMgfHwgbWV0YS5uYW1lfTtgO1xyXG4gICAgICAgIHJldHVybiBjb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXJ0Q29udGVudChpZCkge3JldHVybiB0aGlzLnN0YXJ0UGx1Z2luKGlkKTt9XHJcbiAgICBzdG9wQ29udGVudChpZCkge3JldHVybiB0aGlzLnN0b3BQbHVnaW4oaWQpO31cclxuXHJcbiAgICBzdGFydFBsdWdpbihpZE9yQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JDb250ZW50KSA6IGlkT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGNvbnRlbnQucGx1Z2luO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHBsdWdpbi5zdGFydCgpO1xyXG4gICAgICAgICAgICB0aGlzLmVtaXQoXCJzdGFydGVkXCIsIGNvbnRlbnQuaWQpO1xyXG4gICAgICAgICAgICBUb2FzdHMuc2hvdyhgJHtjb250ZW50Lm5hbWV9IHYke2NvbnRlbnQudmVyc2lvbn0gaGFzIHN0YXJ0ZWQuYCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBUb2FzdHMuZXJyb3IoYCR7Y29udGVudC5uYW1lfSB2JHtjb250ZW50LnZlcnNpb259IGNvdWxkIG5vdCBiZSBzdGFydGVkLmApO1xyXG4gICAgICAgICAgICBMb2dnZXIuc3RhY2t0cmFjZSh0aGlzLm5hbWUsIGNvbnRlbnQubmFtZSArIFwiIGNvdWxkIG5vdCBiZSBzdGFydGVkLlwiLCBlcnIpO1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGNvbnRlbnQuZmlsZW5hbWUsIFwic3RhcnQoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdG9wUGx1Z2luKGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgcGx1Z2luID0gY29udGVudC5wbHVnaW47XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgcGx1Z2luLnN0b3AoKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwic3RvcHBlZFwiLCBjb250ZW50LmlkKTtcclxuICAgICAgICAgICAgVG9hc3RzLnNob3coYCR7Y29udGVudC5uYW1lfSB2JHtjb250ZW50LnZlcnNpb259IGhhcyBzdG9wcGVkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgVG9hc3RzLmVycm9yKGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSBjb3VsZCBub3QgYmUgc3RvcHBlZC5gKTtcclxuICAgICAgICAgICAgTG9nZ2VyLnN0YWNrdHJhY2UodGhpcy5uYW1lLCBjb250ZW50Lm5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RvcHBlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBjb250ZW50LmZpbGVuYW1lLCBcInN0b3AoKSBjb3VsZCBub3QgYmUgZmlyZWQuXCIsIHttZXNzYWdlOiBlcnIubWVzc2FnZSwgc3RhY2s6IGVyci5zdGFja30pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzZXR1cEZ1bmN0aW9ucygpIHtcclxuICAgICAgICBlbGVjdHJvblJlbW90ZS5nZXRDdXJyZW50V2ViQ29udGVudHMoKS5vbihcImRpZC1uYXZpZ2F0ZS1pbi1wYWdlXCIsIHRoaXMub25Td2l0Y2guYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5vYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uU3dpdGNoKCkge1xyXG4gICAgICAgIHRoaXMuZW1pdChcInBhZ2Utc3dpdGNoXCIpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5jb250ZW50TGlzdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBwbHVnaW4gPSB0aGlzLmNvbnRlbnRMaXN0W2ldLnBsdWdpbjtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW3RoaXMuY29udGVudExpc3RbaV0uaWRdKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihwbHVnaW4ub25Td2l0Y2gpID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vblN3aXRjaCgpOyB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKHRoaXMubmFtZSwgXCJVbmFibGUgdG8gZmlyZSBvblN3aXRjaCBmb3IgXCIgKyB0aGlzLmNvbnRlbnRMaXN0W2ldLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uTXV0YXRpb24obXV0YXRpb24pIHtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udGVudExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcy5jb250ZW50TGlzdFtpXS5wbHVnaW47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZVt0aGlzLmNvbnRlbnRMaXN0W2ldLmlkXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGx1Z2luLm9ic2VydmVyID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRyeSB7IHBsdWdpbi5vYnNlcnZlcihtdXRhdGlvbik7IH1cclxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHsgTG9nZ2VyLnN0YWNrdHJhY2UodGhpcy5uYW1lLCBcIlVuYWJsZSB0byBmaXJlIG9ic2VydmVyIGZvciBcIiArIHRoaXMuY29udGVudExpc3RbaV0ubmFtZSArIFwiLlwiLCBlcnIpOyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\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 _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.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/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../ui/settings */ \"./src/ui/settings.js\");\n\n\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_2__[\"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_modals__WEBPACK_IMPORTED_MODULE_7__[\"default\"].showContentErrors({\n themes: [error]\n });\n }\n\n reloadPlugin(idOrFileOrContent) {\n const error = this.reloadContent(idOrFileOrContent);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_7__[\"default\"].showContentErrors({\n plugins: [error]\n });\n return typeof idOrFileOrContent == \"string\" ? this.contentList.find(c => c.id == idOrFileOrContent || c.filename == idOrFileOrContent) : idOrFileOrContent;\n }\n\n loadAllPlugins() {\n const errors = this.loadAllContent();\n this.setupFunctions();\n _settingsmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"].registerPanel(\"plugins\", \"Plugins\", {\n element: () => _ui_settings__WEBPACK_IMPORTED_MODULE_8__[\"default\"].getContentPanel(\"Plugins\", this.contentList, this.state, {\n folder: this.contentFolder,\n onChange: this.togglePlugin.bind(this),\n reload: this.reloadPlugin.bind(this),\n refreshList: this.updatePluginList.bind(this)\n })\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 = thePlugin.getAuthor() || content.author || \"No author\";\n content.description = thePlugin.getDescription() || content.description || \"No description\";\n content.version = thePlugin.getVersion() || content.version || \"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_3__[\"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_toasts__WEBPACK_IMPORTED_MODULE_6__[\"default\"].show(`${content.name} v${content.version} has started.`);\n } catch (err) {\n this.state[content.id] = false;\n _ui_toasts__WEBPACK_IMPORTED_MODULE_6__[\"default\"].error(`${content.name} v${content.version} could not be started.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, 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_toasts__WEBPACK_IMPORTED_MODULE_6__[\"default\"].show(`${content.name} v${content.version} has stopped.`);\n } catch (err) {\n this.state[content.id] = false;\n _ui_toasts__WEBPACK_IMPORTED_MODULE_6__[\"default\"].error(`${content.name} v${content.version} could not be stopped.`);\n _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, 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 _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, \"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 _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].stacktrace(this.name, \"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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcz9kMTczIl0sIm5hbWVzIjpbInBhdGgiLCJyZXF1aXJlIiwiZWxlY3Ryb25SZW1vdGUiLCJyZW1vdGUiLCJQbHVnaW5NYW5hZ2VyIiwiQ29udGVudE1hbmFnZXIiLCJuYW1lIiwibW9kdWxlRXh0ZW5zaW9uIiwiZXh0ZW5zaW9uIiwiY29udGVudEZvbGRlciIsInJlc29sdmUiLCJDb25maWciLCJkYXRhUGF0aCIsInByZWZpeCIsImNvbnN0cnVjdG9yIiwib25Td2l0Y2giLCJiaW5kIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiaSIsIm1sZW4iLCJsZW5ndGgiLCJvbk11dGF0aW9uIiwidXBkYXRlUGx1Z2luTGlzdCIsInVwZGF0ZUxpc3QiLCJlbmFibGVQbHVnaW4iLCJpZE9yQ29udGVudCIsImVuYWJsZUNvbnRlbnQiLCJkaXNhYmxlUGx1Z2luIiwiZGlzYWJsZUNvbnRlbnQiLCJ0b2dnbGVQbHVnaW4iLCJpZCIsInRvZ2dsZUNvbnRlbnQiLCJ1bmxvYWRQbHVnaW4iLCJpZE9yRmlsZU9yQ29udGVudCIsInVubG9hZENvbnRlbnQiLCJsb2FkUGx1Z2luIiwiZmlsZW5hbWUiLCJlcnJvciIsImxvYWRDb250ZW50IiwiTW9kYWxzIiwic2hvd0NvbnRlbnRFcnJvcnMiLCJ0aGVtZXMiLCJyZWxvYWRQbHVnaW4iLCJyZWxvYWRDb250ZW50IiwicGx1Z2lucyIsImNvbnRlbnRMaXN0IiwiZmluZCIsImMiLCJsb2FkQWxsUGx1Z2lucyIsImVycm9ycyIsImxvYWRBbGxDb250ZW50Iiwic2V0dXBGdW5jdGlvbnMiLCJTZXR0aW5ncyIsInJlZ2lzdGVyUGFuZWwiLCJlbGVtZW50IiwiU2V0dGluZ3NSZW5kZXJlciIsImdldENvbnRlbnRQYW5lbCIsInN0YXRlIiwiZm9sZGVyIiwib25DaGFuZ2UiLCJyZWxvYWQiLCJyZWZyZXNoTGlzdCIsImluaXRpYWxpemVDb250ZW50IiwiY29udGVudCIsInR5cGUiLCJDb250ZW50RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJ0aGVQbHVnaW4iLCJwbHVnaW4iLCJnZXROYW1lIiwiYXV0aG9yIiwiZ2V0QXV0aG9yIiwiZGVzY3JpcHRpb24iLCJnZXREZXNjcmlwdGlvbiIsInZlcnNpb24iLCJnZXRWZXJzaW9uIiwibG9hZCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJtZXRhIiwiX2NvbXBpbGUiLCJkaWRFeHBvcnQiLCJVdGlsaXRpZXMiLCJpc0VtcHR5IiwiZXhwb3J0cyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydENvbnRlbnQiLCJzdGFydFBsdWdpbiIsInN0b3BDb250ZW50Iiwic3RvcFBsdWdpbiIsInAiLCJzdGFydCIsImVtaXQiLCJUb2FzdHMiLCJzaG93IiwiZXJyIiwiTG9nZ2VyIiwic3RhY2t0cmFjZSIsInN0b3AiLCJnZXRDdXJyZW50V2ViQ29udGVudHMiLCJvbiIsIm9ic2VydmUiLCJkb2N1bWVudCIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJtdXRhdGlvbiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUEsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUNBLE1BQU1DLGNBQWMsR0FBR0QsbUJBQU8sQ0FBQywwQkFBRCxDQUFQLENBQW9CRSxNQUEzQzs7QUFFZSxtRUFBSSxNQUFNQyxhQUFOLFNBQTRCQyx1REFBNUIsQ0FBMkM7QUFDMUQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxlQUFQO0FBQXdCOztBQUNwQyxNQUFJQyxlQUFKLEdBQXNCO0FBQUMsV0FBTyxLQUFQO0FBQWM7O0FBQ3JDLE1BQUlDLFNBQUosR0FBZ0I7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3RDLE1BQUlD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QUFvQm1ELE1BQW5DO0FBQ0EsVUFBSSxDQUFDLEtBQUtaLEtBQUwsQ0FBVyxLQUFLWixXQUFMLENBQWlCM0IsQ0FBakIsRUFBb0JZLEVBQS9CLENBQUwsRUFBeUM7O0FBQ3pDLFVBQUksT0FBT3VDLE1BQU0sQ0FBQ3RELFFBQWQsS0FBMkIsVUFBL0IsRUFBMkM7QUFDdkMsWUFBSTtBQUFFc0QsZ0JBQU0sQ0FBQ3RELFFBQVAsQ0FBZ0I0RixRQUFoQjtBQUE0QixTQUFsQyxDQUNBLE9BQU9WLEdBQVAsRUFBWTtBQUFFQyx5REFBTSxDQUFDQyxVQUFQLENBQWtCLEtBQUsvRixJQUF2QixFQUE2QixpQ0FBaUMsS0FBS3lDLFdBQUwsQ0FBaUIzQixDQUFqQixFQUFvQmQsSUFBckQsR0FBNEQsR0FBekYsRUFBOEY2RixHQUE5RjtBQUFxRztBQUN0SDtBQUNKO0FBQ0o7O0FBcEp5RCxDQUEvQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvcGx1Z2lubWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudG1hbmFnZXJcIjtcclxuaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IENvbnRlbnRFcnJvciBmcm9tIFwiLi4vc3RydWN0cy9jb250ZW50ZXJyb3JcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5cclxuaW1wb3J0IFRvYXN0cyBmcm9tIFwiLi4vdWkvdG9hc3RzXCI7XHJcbmltcG9ydCBNb2RhbHMgZnJvbSBcIi4uL3VpL21vZGFsc1wiO1xyXG5pbXBvcnQgU2V0dGluZ3NSZW5kZXJlciBmcm9tIFwiLi4vdWkvc2V0dGluZ3NcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZWxlY3Ryb25SZW1vdGUgPSByZXF1aXJlKFwiZWxlY3Ryb25cIikucmVtb3RlO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFBsdWdpbk1hbmFnZXIgZXh0ZW5kcyBDb250ZW50TWFuYWdlciB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJQbHVnaW5NYW5hZ2VyXCI7fVxyXG4gICAgZ2V0IG1vZHVsZUV4dGVuc2lvbigpIHtyZXR1cm4gXCIuanNcIjt9XHJcbiAgICBnZXQgZXh0ZW5zaW9uKCkge3JldHVybiBcIi5wbHVnaW4uanNcIjt9XHJcbiAgICBnZXQgY29udGVudEZvbGRlcigpIHtyZXR1cm4gcGF0aC5yZXNvbHZlKENvbmZpZy5kYXRhUGF0aCwgXCJwbHVnaW5zXCIpO31cclxuICAgIGdldCBwcmVmaXgoKSB7cmV0dXJuIFwicGx1Z2luXCI7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5vblN3aXRjaCA9IHRoaXMub25Td2l0Y2guYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25NdXRhdGlvbihtdXRhdGlvbnNbaV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyogQWxpYXNlcyAqL1xyXG4gICAgdXBkYXRlUGx1Z2luTGlzdCgpIHtyZXR1cm4gdGhpcy51cGRhdGVMaXN0KCk7fVxyXG5cclxuICAgIGVuYWJsZVBsdWdpbihpZE9yQ29udGVudCkge3JldHVybiB0aGlzLmVuYWJsZUNvbnRlbnQoaWRPckNvbnRlbnQpO31cclxuICAgIGRpc2FibGVQbHVnaW4oaWRPckNvbnRlbnQpIHtyZXR1cm4gdGhpcy5kaXNhYmxlQ29udGVudChpZE9yQ29udGVudCk7fVxyXG4gICAgdG9nZ2xlUGx1Z2luKGlkKSB7cmV0dXJuIHRoaXMudG9nZ2xlQ29udGVudChpZCk7fVxyXG5cclxuICAgIHVubG9hZFBsdWdpbihpZE9yRmlsZU9yQ29udGVudCkge3JldHVybiB0aGlzLnVubG9hZENvbnRlbnQoaWRPckZpbGVPckNvbnRlbnQpO31cclxuXHJcbiAgICBsb2FkUGx1Z2luKGZpbGVuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lKTtcclxuICAgICAgICBpZiAoZXJyb3IpIE1vZGFscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkUGx1Z2luKGlkT3JGaWxlT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLnJlbG9hZENvbnRlbnQoaWRPckZpbGVPckNvbnRlbnQpO1xyXG4gICAgICAgIGlmIChlcnJvcikgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBbZXJyb3JdfSk7XHJcbiAgICAgICAgcmV0dXJuIHR5cGVvZihpZE9yRmlsZU9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChjID0+IGMuaWQgPT0gaWRPckZpbGVPckNvbnRlbnQgfHwgYy5maWxlbmFtZSA9PSBpZE9yRmlsZU9yQ29udGVudCkgOiBpZE9yRmlsZU9yQ29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQWxsUGx1Z2lucygpIHtcclxuICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmxvYWRBbGxDb250ZW50KCk7XHJcbiAgICAgICAgdGhpcy5zZXR1cEZ1bmN0aW9ucygpO1xyXG4gICAgICAgIFNldHRpbmdzLnJlZ2lzdGVyUGFuZWwoXCJwbHVnaW5zXCIsIFwiUGx1Z2luc1wiLCB7ZWxlbWVudDogKCkgPT4gU2V0dGluZ3NSZW5kZXJlci5nZXRDb250ZW50UGFuZWwoXCJQbHVnaW5zXCIsIHRoaXMuY29udGVudExpc3QsIHRoaXMuc3RhdGUsIHtcclxuICAgICAgICAgICAgZm9sZGVyOiB0aGlzLmNvbnRlbnRGb2xkZXIsXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLnRvZ2dsZVBsdWdpbi5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICByZWxvYWQ6IHRoaXMucmVsb2FkUGx1Z2luLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHJlZnJlc2hMaXN0OiB0aGlzLnVwZGF0ZVBsdWdpbkxpc3QuYmluZCh0aGlzKVxyXG4gICAgICAgIH0pfSk7XHJcbiAgICAgICAgcmV0dXJuIGVycm9ycztcclxuICAgIH1cclxuXHJcbiAgICAvKiBPdmVycmlkZXMgKi9cclxuICAgIGluaXRpYWxpemVDb250ZW50KGNvbnRlbnQpIHtcclxuICAgICAgICBpZiAoIWNvbnRlbnQudHlwZSkgcmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBjb250ZW50LmZpbGVuYW1lLCBcIlBsdWdpbiBoYWQgbm8gZXhwb3J0c1wiLCB7bWVzc2FnZTogXCJQbHVnaW4gaGFkIG5vIGV4cG9ydHMgb3Igbm8gbmFtZSBwcm9wZXJ0eS5cIiwgc3RhY2s6IFwiXCJ9KTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB0aGVQbHVnaW4gPSBuZXcgY29udGVudC50eXBlKCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQucGx1Z2luID0gdGhlUGx1Z2luO1xyXG4gICAgICAgICAgICBjb250ZW50Lm5hbWUgPSB0aGVQbHVnaW4uZ2V0TmFtZSgpIHx8IGNvbnRlbnQubmFtZTtcclxuICAgICAgICAgICAgY29udGVudC5hdXRob3IgPSB0aGVQbHVnaW4uZ2V0QXV0aG9yKCkgfHwgY29udGVudC5hdXRob3IgfHwgXCJObyBhdXRob3JcIjtcclxuICAgICAgICAgICAgY29udGVudC5kZXNjcmlwdGlvbiA9IHRoZVBsdWdpbi5nZXREZXNjcmlwdGlvbigpIHx8IGNvbnRlbnQuZGVzY3JpcHRpb24gfHwgXCJObyBkZXNjcmlwdGlvblwiO1xyXG4gICAgICAgICAgICBjb250ZW50LnZlcnNpb24gPSB0aGVQbHVnaW4uZ2V0VmVyc2lvbigpIHx8IGNvbnRlbnQudmVyc2lvbiB8fCBcIk5vIHZlcnNpb25cIjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YoY29udGVudC5wbHVnaW4ubG9hZCkgPT0gXCJmdW5jdGlvblwiKSBjb250ZW50LnBsdWdpbi5sb2FkKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGNvbnRlbnQuZmlsZW5hbWUsIFwibG9hZCgpIGNvdWxkIG5vdCBiZSBmaXJlZC5cIiwge21lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIHN0YWNrOiBlcnJvci5zdGFja30pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNhdGNoIChlcnJvcikge3JldHVybiBuZXcgQ29udGVudEVycm9yKGNvbnRlbnQubmFtZSwgY29udGVudC5maWxlbmFtZSwgXCJDb3VsZCBub3QgYmUgY29uc3RydWN0ZWQuXCIsIHttZXNzYWdlOiBlcnJvci5tZXNzYWdlLCBzdGFjazogZXJyb3Iuc3RhY2t9KTt9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudE1vZGlmaWNhdGlvbihtb2R1bGUsIGNvbnRlbnQsIG1ldGEpIHtcclxuICAgICAgICBtb2R1bGUuX2NvbXBpbGUoY29udGVudCwgbW9kdWxlLmZpbGVuYW1lKTtcclxuICAgICAgICBjb25zdCBkaWRFeHBvcnQgPSAhVXRpbGl0aWVzLmlzRW1wdHkobW9kdWxlLmV4cG9ydHMpO1xyXG4gICAgICAgIGlmIChkaWRFeHBvcnQpIHtcclxuICAgICAgICAgICAgbWV0YS50eXBlID0gbW9kdWxlLmV4cG9ydHM7XHJcbiAgICAgICAgICAgIG1vZHVsZS5leHBvcnRzID0gbWV0YTtcclxuICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnRlbnQgKz0gYFxcbm1vZHVsZS5leHBvcnRzID0gJHtKU09OLnN0cmluZ2lmeShtZXRhKX07XFxubW9kdWxlLmV4cG9ydHMudHlwZSA9ICR7bWV0YS5leHBvcnRzIHx8IG1ldGEubmFtZX07YDtcclxuICAgICAgICByZXR1cm4gY29udGVudDtcclxuICAgIH1cclxuXHJcbiAgICBzdGFydENvbnRlbnQoaWQpIHtyZXR1cm4gdGhpcy5zdGFydFBsdWdpbihpZCk7fVxyXG4gICAgc3RvcENvbnRlbnQoaWQpIHtyZXR1cm4gdGhpcy5zdG9wUGx1Z2luKGlkKTt9XHJcblxyXG4gICAgc3RhcnRQbHVnaW4oaWRPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKHAgPT4gcC5pZCA9PSBpZE9yQ29udGVudCkgOiBpZE9yQ29udGVudDtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybjtcclxuICAgICAgICBjb25zdCBwbHVnaW4gPSBjb250ZW50LnBsdWdpbjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBwbHVnaW4uc3RhcnQoKTtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwic3RhcnRlZFwiLCBjb250ZW50LmlkKTtcclxuICAgICAgICAgICAgVG9hc3RzLnNob3coYCR7Y29udGVudC5uYW1lfSB2JHtjb250ZW50LnZlcnNpb259IGhhcyBzdGFydGVkLmApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhdGVbY29udGVudC5pZF0gPSBmYWxzZTtcclxuICAgICAgICAgICAgVG9hc3RzLmVycm9yKGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSBjb3VsZCBub3QgYmUgc3RhcnRlZC5gKTtcclxuICAgICAgICAgICAgTG9nZ2VyLnN0YWNrdHJhY2UodGhpcy5uYW1lLCBjb250ZW50Lm5hbWUgKyBcIiBjb3VsZCBub3QgYmUgc3RhcnRlZC5cIiwgZXJyKTtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250ZW50RXJyb3IoY29udGVudC5uYW1lLCBjb250ZW50LmZpbGVuYW1lLCBcInN0YXJ0KCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc3RvcFBsdWdpbihpZE9yQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JDb250ZW50KSA6IGlkT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHBsdWdpbiA9IGNvbnRlbnQucGx1Z2luO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHBsdWdpbi5zdG9wKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChcInN0b3BwZWRcIiwgY29udGVudC5pZCk7XHJcbiAgICAgICAgICAgIFRvYXN0cy5zaG93KGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSBoYXMgc3RvcHBlZC5gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdID0gZmFsc2U7XHJcbiAgICAgICAgICAgIFRvYXN0cy5lcnJvcihgJHtjb250ZW50Lm5hbWV9IHYke2NvbnRlbnQudmVyc2lvbn0gY291bGQgbm90IGJlIHN0b3BwZWQuYCk7XHJcbiAgICAgICAgICAgIExvZ2dlci5zdGFja3RyYWNlKHRoaXMubmFtZSwgY29udGVudC5uYW1lICsgXCIgY291bGQgbm90IGJlIHN0b3BwZWQuXCIsIGVycik7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29udGVudEVycm9yKGNvbnRlbnQubmFtZSwgY29udGVudC5maWxlbmFtZSwgXCJzdG9wKCkgY291bGQgbm90IGJlIGZpcmVkLlwiLCB7bWVzc2FnZTogZXJyLm1lc3NhZ2UsIHN0YWNrOiBlcnIuc3RhY2t9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBGdW5jdGlvbnMoKSB7XHJcbiAgICAgICAgZWxlY3Ryb25SZW1vdGUuZ2V0Q3VycmVudFdlYkNvbnRlbnRzKCkub24oXCJkaWQtbmF2aWdhdGUtaW4tcGFnZVwiLCB0aGlzLm9uU3dpdGNoLmJpbmQodGhpcykpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBvblN3aXRjaCgpIHtcclxuICAgICAgICB0aGlzLmVtaXQoXCJwYWdlLXN3aXRjaFwiKTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuY29udGVudExpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgcGx1Z2luID0gdGhpcy5jb250ZW50TGlzdFtpXS5wbHVnaW47XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZVt0aGlzLmNvbnRlbnRMaXN0W2ldLmlkXSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YocGx1Z2luLm9uU3dpdGNoKSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkgeyBwbHVnaW4ub25Td2l0Y2goKTsgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikgeyBMb2dnZXIuc3RhY2t0cmFjZSh0aGlzLm5hbWUsIFwiVW5hYmxlIHRvIGZpcmUgb25Td2l0Y2ggZm9yIFwiICsgdGhpcy5jb250ZW50TGlzdFtpXS5uYW1lICsgXCIuXCIsIGVycik7IH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvbk11dGF0aW9uKG11dGF0aW9uKSB7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmNvbnRlbnRMaXN0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbiA9IHRoaXMuY29udGVudExpc3RbaV0ucGx1Z2luO1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc3RhdGVbdGhpcy5jb250ZW50TGlzdFtpXS5pZF0pIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHBsdWdpbi5vYnNlcnZlciA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkgeyBwbHVnaW4ub2JzZXJ2ZXIobXV0YXRpb24pOyB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7IExvZ2dlci5zdGFja3RyYWNlKHRoaXMubmFtZSwgXCJVbmFibGUgdG8gZmlyZSBvYnNlcnZlciBmb3IgXCIgKyB0aGlzLmNvbnRlbnRMaXN0W2ldLm5hbWUgKyBcIi5cIiwgZXJyKTsgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/pluginmanager.js\n"); /***/ }), @@ -503,7 +503,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _dis /***/ (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 _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.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 _discordmodules__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _patcher__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./patcher */ \"./src/modules/patcher.js\");\n/* harmony import */ var _reactcomponents__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./reactcomponents */ \"./src/modules/reactcomponents.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _utilities__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.js\");\n\n\n\n\n\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsManager {\n constructor() {\n this.state = {};\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_2__[\"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)) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"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) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"Settings\", \"No collection with id \" + id);\n this.collections.splice(location, 1);\n }\n\n registerPanel(id, name, options) {\n if (this.panels.find(p => p.id == id)) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"Settings\", \"Already have a panel with id \" + id);\n const {\n element,\n onClick,\n order = 1\n } = options;\n const section = {\n id,\n order,\n label: name,\n section: name\n };\n if (onClick) section.clickListener = onClick;\n if (element) section.element = element instanceof _discordmodules__WEBPACK_IMPORTED_MODULE_5__[\"default\"].React.Component ? () => _discordmodules__WEBPACK_IMPORTED_MODULE_5__[\"default\"].React.createElement(element, {}) : typeof element == \"function\" ? element : () => element;\n this.panels.push(section);\n }\n\n removePanel(id) {\n const location = this.panels.findIndex(c => c.id == id);\n if (!location < 0) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"Settings\", \"No collection with id \" + id);\n this.panels.splice(location, 1);\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 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 cc = 0; cc < categories.length; cc++) {\n const category = categories[cc];\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 if (setting.disableWith) {\n const path = this.getPath(setting.disableWith.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 }\n\n async patchSections() {\n _patcher__WEBPACK_IMPORTED_MODULE_6__[\"default\"].after(\"SettingsManager\", _webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getByDisplayName(\"FluxContainer(GuildSettings)\").prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = \"guild-settings\";\n });\n const UserSettings = await _reactcomponents__WEBPACK_IMPORTED_MODULE_7__[\"default\"].get(\"UserSettings\", m => m.prototype && m.prototype.generateSections);\n console.log(UserSettings);\n _patcher__WEBPACK_IMPORTED_MODULE_6__[\"default\"].after(\"SettingsManager\", UserSettings.prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = \"user-settings\";\n });\n _patcher__WEBPACK_IMPORTED_MODULE_6__[\"default\"].after(\"SettingsManager\", UserSettings.prototype, \"generateSections\", (thisObject, args, returnValue) => {\n let location = returnValue.findIndex(s => s.section.toLowerCase() == \"linux\") + 1;\n\n const insert = section => {\n returnValue.splice(location, 0, section);\n location++;\n };\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_8__[\"SettingsPanel\"].buildSettingsPanel(collection.name, collection.settings, this.state[collection.id], this.onSettingChange.bind(this, collection.id), collection.button ? collection.button : null)\n });\n }\n\n for (const panel of this.panels.sort((a, b) => a.order > b.order)) {\n if (panel.clickListener) panel.onClick = event => panel.clickListener(thisObject, event, returnValue);\n insert(panel);\n }\n\n insert({\n section: \"CUSTOM\",\n element: () => ui__WEBPACK_IMPORTED_MODULE_8__[\"SettingsPanel\"].attribution\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_9__[\"default\"].getReactInstance(node).return.return.return.return.return.return.stateNode.forceUpdate();\n }\n\n getUserSettings() {\n return new Promise(resolve => {\n const cancel = _patcher__WEBPACK_IMPORTED_MODULE_6__[\"default\"].after(\"SettingsManager\", _webpackmodules__WEBPACK_IMPORTED_MODULE_4__[\"default\"].getByProps(\"getUserSettingsSections\").default.prototype, \"render\", (thisObject, args, returnValue) => {\n resolve(returnValue.type);\n thisObject.forceUpdate();\n cancel();\n });\n });\n }\n\n saveSettings() {\n _datastore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setData(\"settings\", this.state);\n }\n\n loadSettings() {\n const previousState = _datastore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getData(\"settings\");\n if (!previousState) return this.saveSettings();\n\n for (const collection in this.state) {\n if (!previousState[collection]) Object.assign(previousState, {\n [collection]: this.state[collection]\n });\n\n for (const category in this.state[collection]) {\n if (!previousState[collection][category]) Object.assign(previousState[collection], {\n [category]: this.state[collection][category]\n });\n\n for (const setting in this.state[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 + this.panels.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 + this.panels.length;\n this.saveSettings();\n if (before != after) setTimeout(this.forceUpdate.bind(this), 50);\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 set(collection, category, id, value) {\n if (arguments.length == 3) {\n value = id;\n id = category;\n category = collection;\n collection = \"settings\";\n }\n\n return this.onSettingChange(collection, category, id, value);\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}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvc2V0dGluZ3NtYW5hZ2VyLmpzP2IyZjkiXSwibmFtZXMiOlsiU2V0dGluZ3NNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJzdGF0ZSIsImNvbGxlY3Rpb25zIiwicGFuZWxzIiwicmVnaXN0ZXJDb2xsZWN0aW9uIiwiU2V0dGluZ3NDb25maWciLCJpbml0aWFsaXplIiwiRGF0YVN0b3JlIiwibG9hZFNldHRpbmdzIiwicGF0Y2hTZWN0aW9ucyIsImlkIiwibmFtZSIsInNldHRpbmdzIiwiYnV0dG9uIiwiZmluZCIsImMiLCJMb2dnZXIiLCJlcnJvciIsInB1c2giLCJ0eXBlIiwic2V0dXAiLCJyZW1vdmVDb2xsZWN0aW9uIiwibG9jYXRpb24iLCJmaW5kSW5kZXgiLCJzcGxpY2UiLCJyZWdpc3RlclBhbmVsIiwib3B0aW9ucyIsInAiLCJlbGVtZW50Iiwib25DbGljayIsIm9yZGVyIiwic2VjdGlvbiIsImxhYmVsIiwiY2xpY2tMaXN0ZW5lciIsIkRpc2NvcmRNb2R1bGVzIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjcmVhdGVFbGVtZW50IiwicmVtb3ZlUGFuZWwiLCJnZXRQYXRoIiwicGF0aCIsImNvbGxlY3Rpb25JZCIsImNhdGVnb3J5SWQiLCJjb2xsZWN0aW9uIiwibGVuZ3RoIiwiY2F0ZWdvcnkiLCJzZXR0aW5nIiwiY2F0ZWdvcmllcyIsImNjIiwiaGFzT3duUHJvcGVydHkiLCJ2YWx1ZSIsInMiLCJlbmFibGVXaXRoIiwic3BsaXQiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsImRpc2FibGVXaXRoIiwiUGF0Y2hlciIsImFmdGVyIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeURpc3BsYXlOYW1lIiwicHJvdG90eXBlIiwidGhpc09iamVjdCIsIl9yZWFjdEludGVybmFsRmliZXIiLCJyZXR1cm4iLCJtZW1vaXplZFByb3BzIiwiVXNlclNldHRpbmdzIiwiUmVhY3RDb21wb25lbnRzIiwibSIsImdlbmVyYXRlU2VjdGlvbnMiLCJjb25zb2xlIiwibG9nIiwiYXJncyIsInJldHVyblZhbHVlIiwidG9Mb3dlckNhc2UiLCJpbnNlcnQiLCJkaXNhYmxlZCIsIlNldHRpbmdzUmVuZGVyZXIiLCJidWlsZFNldHRpbmdzUGFuZWwiLCJvblNldHRpbmdDaGFuZ2UiLCJiaW5kIiwicGFuZWwiLCJzb3J0IiwiYSIsImIiLCJldmVudCIsImF0dHJpYnV0aW9uIiwiZm9yY2VVcGRhdGUiLCJ2aWV3Q2xhc3MiLCJnZXRCeVByb3BzIiwic3RhbmRhcmRTaWRlYmFyVmlldyIsIm5vZGUiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJVdGlsaXRpZXMiLCJnZXRSZWFjdEluc3RhbmNlIiwic3RhdGVOb2RlIiwiZ2V0VXNlclNldHRpbmdzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjYW5jZWwiLCJkZWZhdWx0Iiwic2F2ZVNldHRpbmdzIiwic2V0RGF0YSIsInByZXZpb3VzU3RhdGUiLCJnZXREYXRhIiwiYXNzaWduIiwidW5kZWZpbmVkIiwiYmVmb3JlIiwiRXZlbnRzIiwiZGlzcGF0Y2giLCJzZXRUaW1lb3V0IiwiZ2V0U2V0dGluZyIsImFyZ3VtZW50cyIsInNldCIsIm9uIiwiaWRlbnRpZmllciIsImNhbGxiYWNrIiwiaGFuZGxlciIsImNvbCIsImNhdCIsIm9mZiJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsZUFBTixDQUFzQjtBQUVyQ0MsYUFBVyxHQUFHO0FBQ1YsU0FBS0MsS0FBTCxHQUFhLEVBQWI7QUFDQSxTQUFLQyxXQUFMLEdBQW1CLEVBQW5CO0FBQ0EsU0FBS0MsTUFBTCxHQUFjLEVBQWQ7QUFDQSxTQUFLQyxrQkFBTCxDQUF3QixVQUF4QixFQUFvQyxVQUFwQyxFQUFnREMsbURBQWhEO0FB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RSxVQUF2QixFQUFtQ0MsUUFBbkMsRUFBNkM7QUFDM0MsVUFBTUMsT0FBTyxHQUFHLENBQUNDLEdBQUQsRUFBTUMsR0FBTixFQUFXL0csRUFBWCxFQUFld0MsS0FBZixLQUF5QjtBQUNyQyxVQUFJc0UsR0FBRyxLQUFLN0UsVUFBUixJQUFzQjhFLEdBQUcsS0FBSzVFLFFBQTlCLElBQTBDbkMsRUFBRSxLQUFLMkcsVUFBckQsRUFBaUU7QUFDakVDLGNBQVEsQ0FBQ3BFLEtBQUQsQ0FBUjtBQUNILEtBSEQ7O0FBSUE0RCxvREFBTSxDQUFDTSxFQUFQLENBQVUsaUJBQVYsRUFBNkJHLE9BQTdCO0FBQ0EsV0FBTyxNQUFNO0FBQUNULHNEQUFNLENBQUNZLEdBQVAsQ0FBVyxpQkFBWCxFQUE4QkgsT0FBOUI7QUFBd0MsS0FBdEQ7QUFDSDs7QUE3TW9DLENBQTFCLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9zZXR0aW5nc21hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NldHRpbmdzQ29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL2VtaXR0ZXJcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcbmltcG9ydCBEaXNjb3JkTW9kdWxlcyBmcm9tIFwiLi9kaXNjb3JkbW9kdWxlc1wiO1xyXG5pbXBvcnQgUGF0Y2hlciBmcm9tIFwiLi9wYXRjaGVyXCI7XHJcbmltcG9ydCBSZWFjdENvbXBvbmVudHMgZnJvbSBcIi4vcmVhY3Rjb21wb25lbnRzXCI7XHJcblxyXG5pbXBvcnQge1NldHRpbmdzUGFuZWwgYXMgU2V0dGluZ3NSZW5kZXJlcn0gZnJvbSBcInVpXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgU2V0dGluZ3NNYW5hZ2VyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge307XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGFuZWxzID0gW107XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckNvbGxlY3Rpb24oXCJzZXR0aW5nc1wiLCBcIlNldHRpbmdzXCIsIFNldHRpbmdzQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIERhdGFTdG9yZS5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuICAgICAgICB0aGlzLnBhdGNoU2VjdGlvbnMoKTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlckNvbGxlY3Rpb24oaWQsIG5hbWUsIHNldHRpbmdzLCBidXR0b24gPSBudWxsKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29sbGVjdGlvbnMuZmluZChjID0+IGMuaWQgPT0gaWQpKSByZXR1cm4gTG9nZ2VyLmVycm9yKFwiU2V0dGluZ3NcIiwgXCJBbHJlYWR5IGhhdmUgYSBjb2xsZWN0aW9uIHdpdGggaWQgXCIgKyBpZCk7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucy5wdXNoKHtcclxuICAgICAgICAgICAgdHlwZTogXCJjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgIGlkOiBpZCxcclxuICAgICAgICAgICAgbmFtZTogbmFtZSxcclxuICAgICAgICAgICAgc2V0dGluZ3M6IHNldHRpbmdzLFxyXG4gICAgICAgICAgICBidXR0b246IGJ1dHRvblxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuc2V0dXAoKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDb2xsZWN0aW9uKGlkKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLmNvbGxlY3Rpb25zLmZpbmRJbmRleChjID0+IGMuaWQgPT0gaWQpO1xyXG4gICAgICAgIGlmICghbG9jYXRpb24gPCAwKSByZXR1cm4gTG9nZ2VyLmVycm9yKFwiU2V0dGluZ3NcIiwgXCJObyBjb2xsZWN0aW9uIHdpdGggaWQgXCIgKyBpZCk7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucy5zcGxpY2UobG9jYXRpb24sIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyUGFuZWwoaWQsIG5hbWUsIG9wdGlvbnMpIHtcclxuICAgICAgICBpZiAodGhpcy5wYW5lbHMuZmluZChwID0+IHAuaWQgPT0gaWQpKSByZXR1cm4gTG9nZ2VyLmVycm9yKFwiU2V0dGluZ3NcIiwgXCJBbHJlYWR5IGhhdmUgYSBwYW5lbCB3aXRoIGlkIFwiICsgaWQpO1xyXG4gICAgICAgIGNvbnN0IHtlbGVtZW50LCBvbkNsaWNrLCBvcmRlciA9IDF9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBzZWN0aW9uID0ge2lkLCBvcmRlciwgbGFiZWw6IG5hbWUsIHNlY3Rpb246IG5hbWV9O1xyXG4gICAgICAgIGlmIChvbkNsaWNrKSBzZWN0aW9uLmNsaWNrTGlzdGVuZXIgPSBvbkNsaWNrO1xyXG4gICAgICAgIGlmIChlbGVtZW50KSBzZWN0aW9uLmVsZW1lbnQgPSBlbGVtZW50IGluc3RhbmNlb2YgRGlzY29yZE1vZHVsZXMuUmVhY3QuQ29tcG9uZW50ID8gKCkgPT4gRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChlbGVtZW50LCB7fSkgOiB0eXBlb2YoZWxlbWVudCkgPT0gXCJmdW5jdGlvblwiID8gZWxlbWVudCA6ICgpID0+IGVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5wYW5lbHMucHVzaChzZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVQYW5lbChpZCkge1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5wYW5lbHMuZmluZEluZGV4KGMgPT4gYy5pZCA9PSBpZCk7XHJcbiAgICAgICAgaWYgKCFsb2NhdGlvbiA8IDApIHJldHVybiBMb2dnZXIuZXJyb3IoXCJTZXR0aW5nc1wiLCBcIk5vIGNvbGxlY3Rpb24gd2l0aCBpZCBcIiArIGlkKTtcclxuICAgICAgICB0aGlzLnBhbmVscy5zcGxpY2UobG9jYXRpb24sIDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBhdGgocGF0aCwgY29sbGVjdGlvbklkID0gXCJcIiwgY2F0ZWdvcnlJZCA9IFwiXCIpIHtcclxuICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gcGF0aC5sZW5ndGggPT0gMyA/IHBhdGhbMF0gOiBjb2xsZWN0aW9uSWQ7XHJcbiAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBwYXRoLmxlbmd0aCA9PSAzID8gcGF0aFsxXSA6IHBhdGgubGVuZ3RoID09IDIgPyBwYXRoWzBdIDogY2F0ZWdvcnlJZDtcclxuICAgICAgICBjb25zdCBzZXR0aW5nID0gcGF0aFtwYXRoLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIHJldHVybiB7Y29sbGVjdGlvbiwgY2F0ZWdvcnksIHNldHRpbmd9O1xyXG4gICAgfVxyXG5cclxuICAgIHNldHVwKCkge1xyXG4gICAgICAgIGZvciAobGV0IGMgPSAwOyBjIDwgdGhpcy5jb2xsZWN0aW9ucy5sZW5ndGg7IGMrKykge1xyXG4gICAgICAgICAgICBjb25zdCBjb2xsZWN0aW9uID0gdGhpcy5jb2xsZWN0aW9uc1tjXTtcclxuICAgICAgICAgICAgY29uc3QgY2F0ZWdvcmllcyA9IHRoaXMuY29sbGVjdGlvbnNbY10uc2V0dGluZ3M7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZVtjb2xsZWN0aW9uLmlkXSkgdGhpcy5zdGF0ZVtjb2xsZWN0aW9uLmlkXSA9IHt9O1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjYyA9IDA7IGNjIDwgY2F0ZWdvcmllcy5sZW5ndGg7IGNjKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNhdGVnb3J5ID0gY2F0ZWdvcmllc1tjY107XHJcbiAgICAgICAgICAgICAgICBpZiAoY2F0ZWdvcnkudHlwZSAhPSBcImNhdGVnb3J5XCIpIHtpZiAoIXRoaXMuc3RhdGVbY29sbGVjdGlvbi5pZF0uaGFzT3duUHJvcGVydHkoY2F0ZWdvcnkuaWQpKSB0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdW2NhdGVnb3J5LmlkXSA9IGNhdGVnb3J5LnZhbHVlO31cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZVtjb2xsZWN0aW9uLmlkXS5oYXNPd25Qcm9wZXJ0eShjYXRlZ29yeS5pZCkpIHRoaXMuc3RhdGVbY29sbGVjdGlvbi5pZF1bY2F0ZWdvcnkuaWRdID0ge307XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgcyA9IDA7IHMgPCBjYXRlZ29yeS5zZXR0aW5ncy5sZW5ndGg7IHMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXR0aW5nID0gY2F0ZWdvcnkuc2V0dGluZ3Nbc107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zdGF0ZVtjb2xsZWN0aW9uLmlkXVtjYXRlZ29yeS5pZF0uaGFzT3duUHJvcGVydHkoc2V0dGluZy5pZCkpIHRoaXMuc3RhdGVbY29sbGVjdGlvbi5pZF1bY2F0ZWdvcnkuaWRdW3NldHRpbmcuaWRdID0gc2V0dGluZy52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuZW5hYmxlV2l0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aChzZXR0aW5nLmVuYWJsZVdpdGguc3BsaXQoXCIuXCIpLCBjb2xsZWN0aW9uLmlkLCBjYXRlZ29yeS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVkXCIpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZXR0aW5nLCBcImRpc2FibGVkXCIsIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXQ6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF0aGlzLnN0YXRlW3BhdGguY29sbGVjdGlvbl1bcGF0aC5jYXRlZ29yeV1bcGF0aC5zZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuZGlzYWJsZVdpdGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldFBhdGgoc2V0dGluZy5kaXNhYmxlV2l0aC5zcGxpdChcIi5cIiksIGNvbGxlY3Rpb24uaWQsIGNhdGVnb3J5LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmhhc093blByb3BlcnR5KFwiZGlzYWJsZWRcIikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNldHRpbmcsIFwiZGlzYWJsZWRcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVtwYXRoLmNvbGxlY3Rpb25dW3BhdGguY2F0ZWdvcnldW3BhdGguc2V0dGluZ107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcGF0Y2hTZWN0aW9ucygpIHtcclxuICAgICAgICBQYXRjaGVyLmFmdGVyKFwiU2V0dGluZ3NNYW5hZ2VyXCIsIFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIpLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLm1lbW9pemVkUHJvcHMuaWQgPSBcImd1aWxkLXNldHRpbmdzXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgVXNlclNldHRpbmdzID0gYXdhaXQgUmVhY3RDb21wb25lbnRzLmdldChcIlVzZXJTZXR0aW5nc1wiLCBtID0+IG0ucHJvdG90eXBlICYmIG0ucHJvdG90eXBlLmdlbmVyYXRlU2VjdGlvbnMpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFVzZXJTZXR0aW5ncyk7XHJcbiAgICAgICAgUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBVc2VyU2V0dGluZ3MucHJvdG90eXBlLCBcInJlbmRlclwiLCAodGhpc09iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzT2JqZWN0Ll9yZWFjdEludGVybmFsRmliZXIucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLm1lbW9pemVkUHJvcHMuaWQgPSBcInVzZXItc2V0dGluZ3NcIjtcclxuICAgICAgICB9KTtcclxuICAgICAgICBQYXRjaGVyLmFmdGVyKFwiU2V0dGluZ3NNYW5hZ2VyXCIsIFVzZXJTZXR0aW5ncy5wcm90b3R5cGUsIFwiZ2VuZXJhdGVTZWN0aW9uc1wiLCAodGhpc09iamVjdCwgYXJncywgcmV0dXJuVmFsdWUpID0+IHtcclxuICAgICAgICAgICAgbGV0IGxvY2F0aW9uID0gcmV0dXJuVmFsdWUuZmluZEluZGV4KHMgPT4gcy5zZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT0gXCJsaW51eFwiKSArIDE7XHJcbiAgICAgICAgICAgIGNvbnN0IGluc2VydCA9IChzZWN0aW9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZS5zcGxpY2UobG9jYXRpb24sIDAsIHNlY3Rpb24pO1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24rKztcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkRJVklERVJcIn0pO1xyXG4gICAgICAgICAgICBpbnNlcnQoe3NlY3Rpb246IFwiSEVBREVSXCIsIGxhYmVsOiBcIkJhbmRhZ2VkQkRcIn0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gb2YgdGhpcy5jb2xsZWN0aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbGxlY3Rpb24uZGlzYWJsZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaW5zZXJ0KHtcclxuICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBjb2xsZWN0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbGxlY3Rpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmJ1aWxkU2V0dGluZ3NQYW5lbChjb2xsZWN0aW9uLm5hbWUsIGNvbGxlY3Rpb24uc2V0dGluZ3MsIHRoaXMuc3RhdGVbY29sbGVjdGlvbi5pZF0sIHRoaXMub25TZXR0aW5nQ2hhbmdlLmJpbmQodGhpcywgY29sbGVjdGlvbi5pZCksIGNvbGxlY3Rpb24uYnV0dG9uID8gY29sbGVjdGlvbi5idXR0b24gOiBudWxsKVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChjb25zdCBwYW5lbCBvZiB0aGlzLnBhbmVscy5zb3J0KChhLGIpID0+IGEub3JkZXIgPiBiLm9yZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhbmVsLmNsaWNrTGlzdGVuZXIpIHBhbmVsLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHBhbmVsLmNsaWNrTGlzdGVuZXIodGhpc09iamVjdCwgZXZlbnQsIHJldHVyblZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGluc2VydChwYW5lbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmF0dHJpYnV0aW9ufSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlVXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdDbGFzcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzdGFuZGFyZFNpZGViYXJWaWV3XCIpLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt2aWV3Q2xhc3N9YCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2Uobm9kZSkucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4uc3RhdGVOb2RlLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VXNlclNldHRpbmdzKCkge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FuY2VsID0gUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0VXNlclNldHRpbmdzU2VjdGlvbnNcIikuZGVmYXVsdC5wcm90b3R5cGUsIFwicmVuZGVyXCIsICh0aGlzT2JqZWN0LCBhcmdzLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXR1cm5WYWx1ZS50eXBlKTtcclxuICAgICAgICAgICAgICAgIHRoaXNPYmplY3QuZm9yY2VVcGRhdGUoKTtcclxuICAgICAgICAgICAgICAgIGNhbmNlbCgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldERhdGEoXCJzZXR0aW5nc1wiLCB0aGlzLnN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IERhdGFTdG9yZS5nZXREYXRhKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c1N0YXRlKSByZXR1cm4gdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gaW4gdGhpcy5zdGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzU3RhdGVbY29sbGVjdGlvbl0pIE9iamVjdC5hc3NpZ24ocHJldmlvdXNTdGF0ZSwge1tjb2xsZWN0aW9uXTogdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXX0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IGluIHRoaXMuc3RhdGVbY29sbGVjdGlvbl0pIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV0pIE9iamVjdC5hc3NpZ24ocHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXSwge1tjYXRlZ29yeV06IHRoaXMuc3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldfSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV1bc2V0dGluZ10gPT0gdW5kZWZpbmVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlW2NvbGxlY3Rpb25dW2NhdGVnb3J5XVtzZXR0aW5nXSA9IHByZXZpb3VzU3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldW3NldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpOyAvLyBpbiBjYXNlIG5ldyB0aGluZ3Mgd2VyZSBhZGRlZFxyXG4gICAgfVxyXG5cclxuICAgIG9uU2V0dGluZ0NoYW5nZShjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQsIHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlID0gdGhpcy5jb2xsZWN0aW9ucy5sZW5ndGggKyB0aGlzLnBhbmVscy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV1baWRdID0gdmFsdWU7XHJcbiAgICAgICAgRXZlbnRzLmRpc3BhdGNoKFwic2V0dGluZy11cGRhdGVkXCIsIGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCwgdmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGFmdGVyID0gdGhpcy5jb2xsZWN0aW9ucy5sZW5ndGggKyB0aGlzLnBhbmVscy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICBpZiAoYmVmb3JlICE9IGFmdGVyKSBzZXRUaW1lb3V0KHRoaXMuZm9yY2VVcGRhdGUuYmluZCh0aGlzKSwgNTApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmcoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgcmV0dXJuIHRoaXMuY29sbGVjdGlvbnNbMF0uZmluZChjID0+IGMuaWQgPT0gYXJndW1lbnRzWzBdKS5zZXR0aW5ncy5maW5kKHMgPT4gcy5pZCA9PSBhcmd1bWVudHNbMV0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25zLmZpbmQoYyA9PiBjLmlkID09IGNvbGxlY3Rpb24pLmZpbmQoYyA9PiBjLmlkID09IGNhdGVnb3J5KS5zZXR0aW5ncy5maW5kKHMgPT4gcy5pZCA9PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCkge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgaWQgPSBjYXRlZ29yeTtcclxuICAgICAgICAgICAgY2F0ZWdvcnkgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gXCJzZXR0aW5nc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVbY29sbGVjdGlvbl0gfHwgIXRoaXMuc3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldW2lkXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBpZDtcclxuICAgICAgICAgICAgaWQgPSBjYXRlZ29yeTtcclxuICAgICAgICAgICAgY2F0ZWdvcnkgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gXCJzZXR0aW5nc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5vblNldHRpbmdDaGFuZ2UoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb24oY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkZW50aWZpZXIsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IChjb2wsIGNhdCwgaWQsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wgIT09IGNvbGxlY3Rpb24gfHwgY2F0ICE9PSBjYXRlZ29yeSB8fCBpZCAhPT0gaWRlbnRpZmllcikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBFdmVudHMub24oXCJzZXR0aW5nLXVwZGF0ZWRcIiwgaGFuZGxlcik7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtFdmVudHMub2ZmKFwic2V0dGluZy11cGRhdGVkXCIsIGhhbmRsZXIpO307XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\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 _logger__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n\n\n\n // import WebpackModules from \"./webpackmodules\";\n\n // import Patcher from \"./patcher\";\n// import ReactComponents from \"./reactcomponents\";\n// import SettingsRenderer from \"../ui/settings/settings\";\n// import Utilities from \"./utilities\";\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsManager {\n constructor() {\n this.state = {};\n this.collections = [];\n this.panels = [];\n this.registerCollection(\"settings\", \"Settings\", data__WEBPACK_IMPORTED_MODULE_0__[\"SettingsConfig\"]);\n }\n\n initialize() {\n this.loadSettings(); // this.patchSections();\n }\n\n registerCollection(id, name, settings, button = null) {\n if (this.collections.find(c => c.id == id)) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"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) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"Settings\", \"No collection with id \" + id);\n this.collections.splice(location, 1);\n } // TODO: Move this to SettingsRenderer and also add a registerContentPanel\n\n\n registerPanel(id, name, options) {\n if (this.panels.find(p => p.id == id)) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"Settings\", \"Already have a panel with id \" + id);\n const {\n element,\n onClick,\n order = 1\n } = options;\n const section = {\n id,\n order,\n label: name,\n section: name\n };\n if (onClick) section.clickListener = onClick;\n if (element) section.element = element instanceof _discordmodules__WEBPACK_IMPORTED_MODULE_4__[\"default\"].React.Component ? () => _discordmodules__WEBPACK_IMPORTED_MODULE_4__[\"default\"].React.createElement(element, {}) : typeof element == \"function\" ? element : () => element;\n this.panels.push(section);\n }\n\n removePanel(id) {\n const location = this.panels.findIndex(c => c.id == id);\n if (!location < 0) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(\"Settings\", \"No collection with id \" + id);\n this.panels.splice(location, 1);\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 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 cc = 0; cc < categories.length; cc++) {\n const category = categories[cc];\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 if (setting.disableWith) {\n const path = this.getPath(setting.disableWith.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 }\n\n saveSettings() {\n _datastore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].setData(\"settings\", this.state);\n }\n\n loadSettings() {\n const previousState = _datastore__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getData(\"settings\");\n if (!previousState) return this.saveSettings();\n\n for (const collection in this.state) {\n if (!previousState[collection]) Object.assign(previousState, {\n [collection]: this.state[collection]\n });\n\n for (const category in this.state[collection]) {\n if (!previousState[collection][category]) Object.assign(previousState[collection], {\n [category]: this.state[collection][category]\n });\n\n for (const setting in this.state[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 + this.panels.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 + this.panels.length;\n this.saveSettings();\n if (before != after) setTimeout(this.forceUpdate.bind(this), 50);\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 set(collection, category, id, value) {\n if (arguments.length == 3) {\n value = id;\n id = category;\n category = collection;\n collection = \"settings\";\n }\n\n return this.onSettingChange(collection, category, id, value);\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}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvc2V0dGluZ3NtYW5hZ2VyLmpzP2IyZjkiXSwibmFtZXMiOlsiU2V0dGluZ3NNYW5hZ2VyIiwiY29uc3RydWN0b3IiLCJzdGF0ZSIsImNvbGxlY3Rpb25zIiwicGFuZWxzIiwicmVnaXN0ZXJDb2xsZWN0aW9uIiwiU2V0dGluZ3NDb25maWciLCJpbml0aWFsaXplIiwibG9hZFNldHRpbmdzIiwiaWQiLCJuYW1lIiwic2V0dGluZ3MiLCJidXR0b24iLCJmaW5kIiwiYyIsIkxvZ2dlciIsImVycm9yIiwicHVzaCIsInR5cGUiLCJzZXR1cCIsInJlbW92ZUNvbGxlY3Rpb24iLCJsb2NhdGlvbiIsImZpbmRJbmRleCIsInNwbGljZSIsInJlZ2lzdGVyUGFuZWwiLCJvcHRpb25zIiwicCIsImVsZW1lbnQiLCJvbkNsaWNrIiwib3JkZXIiLCJzZWN0aW9uIiwibGFiZWwiLCJjbGlja0xpc3RlbmVyIiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdCIsIkNvbXBvbmVudCIsImNyZWF0ZUVsZW1lbnQiLCJyZW1vdmVQYW5lbCIsImdldFBhdGgiLCJwYXRoIiwiY29sbGVjdGlvbklkIiwiY2F0ZWdvcnlJZCIsImNvbGxlY3Rpb24iLCJsZW5ndGgiLCJjYXRlZ29yeSIsInNldHRpbmciLCJjYXRlZ29yaWVzIiwiY2MiLCJoYXNPd25Qcm9wZXJ0eSIsInZhbHVlIiwicyIsImVuYWJsZVdpdGgiLCJzcGxpdCIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZ2V0IiwiZGlzYWJsZVdpdGgiLCJzYXZlU2V0dGluZ3MiLCJEYXRhU3RvcmUiLCJzZXREYXRhIiwicHJldmlvdXNTdGF0ZSIsImdldERhdGEiLCJhc3NpZ24iLCJ1bmRlZmluZWQiLCJvblNldHRpbmdDaGFuZ2UiLCJiZWZvcmUiLCJFdmVudHMiLCJkaXNwYXRjaCIsImFmdGVyIiwic2V0VGltZW91dCIsImZvcmNlVXBkYXRlIiwiYmluZCIsImdldFNldHRpbmciLCJhcmd1bWVudHMiLCJzZXQiLCJvbiIsImlkZW50aWZpZXIiLCJjYWxsYmFjayIsImhhbmRsZXIiLCJjb2wiLCJjYXQiLCJvZmYiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtDQUVBOztDQUVBO0FBQ0E7QUFFQTtBQUNBOztBQUVlLG1FQUFJLE1BQU1BLGVBQU4sQ0FBc0I7QUFFckNDLGFBQVcsR0FBRztBQUNWLFNBQUtDLEtBQUwsR0FBYSxFQUFiO0FBQ0EsU0FBS0MsV0FBTCxHQUFtQixFQUFuQjtBQUNBLFNBQUtDLE1BQUwsR0FBYyxFQUFkO0FBQ0EsU0FBS0Msa0JBQUwsQ0FBd0IsVUFBeEIsRUFBb0MsVUFBcEMsRUFBZ0RDLG1EQUFoRDtBQUNIOztBQUVEQyxZQUFVLEdBQUc7QUFDVCxTQUFLQyxZQUFMLEdBRFMsQ0FFVDtBQUNIOztBQUVESCxvQkFBa0IsQ0FBQ0ksRUFBRCxFQUFLQyxJQUFMLEVBQVdDLFFBQVgsRUFBcUJDLE1BQU0sR0FBRyxJQUE5QixFQUFvQztBQUNsRCxRQUFJLEtBQUtULFdBQUwsQ0FBaUJVLElBQWpCLENBQXNCQyxDQUFDLElBQUlBLENBQUMsQ0FBQ0wsRUFBRixJQUFRQSxFQUFuQyxDQUFKLEVBQTRDLE9BQU9NLCtDQUFNLENBQUNDLEtBQVAsQ0FBYSxVQUFiLEVBQXlCLHVDQUF1Q1AsRUFBaEUsQ0FBUDtBQUM1QyxTQUFLTixXQUFMLENBQWlCYyxJQUFqQixDQUFzQjtBQUNsQkMsVUFBSSxFQUFFLFlBRFk7QUFFbEJULFFBQUUsRUFBRUEsRUFGYztBQUdsQkMsVUFBSSxFQUFFQSxJQUhZO0FBSWxCQyxjQUFRLEVBQUVBLFFBSlE7QUFLbEJDLFlBQU0sRUFBRUE7QUFMVSxLQUF0QjtBQU9BLFNBQUtPLEtBQUw7QUFDSDs7QUFFREMsa0JBQWdCLENBQUNYLEVBQUQsRUFBSztBQUNqQixVQUFNWSxRQUFRLEdBQUcsS0FBS2xCLFdBQUwsQ0FBaUJtQixTQUFqQixDQUEyQlIsQ0FBQyxJQUFJQSxDQUFDLENBQUNM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dkJNLFdBQUssR0FBR3hDLEVBQVI7QUFDQUEsUUFBRSxHQUFHbUMsUUFBTDtBQUNBQSxjQUFRLEdBQUdGLFVBQVg7QUFDQUEsZ0JBQVUsR0FBRyxVQUFiO0FBQ0g7O0FBQ0QsV0FBTyxLQUFLc0IsZUFBTCxDQUFxQnRCLFVBQXJCLEVBQWlDRSxRQUFqQyxFQUEyQ25DLEVBQTNDLEVBQStDd0MsS0FBL0MsQ0FBUDtBQUNIOztBQUVEMEIsSUFBRSxDQUFDakMsVUFBRCxFQUFhRSxRQUFiLEVBQXVCZ0MsVUFBdkIsRUFBbUNDLFFBQW5DLEVBQTZDO0FBQzNDLFVBQU1DLE9BQU8sR0FBRyxDQUFDQyxHQUFELEVBQU1DLEdBQU4sRUFBV3ZFLEVBQVgsRUFBZXdDLEtBQWYsS0FBeUI7QUFDckMsVUFBSThCLEdBQUcsS0FBS3JDLFVBQVIsSUFBc0JzQyxHQUFHLEtBQUtwQyxRQUE5QixJQUEwQ25DLEVBQUUsS0FBS21FLFVBQXJELEVBQWlFO0FBQ2pFQyxjQUFRLENBQUM1QixLQUFELENBQVI7QUFDSCxLQUhEOztBQUlBaUIsb0RBQU0sQ0FBQ1MsRUFBUCxDQUFVLGlCQUFWLEVBQTZCRyxPQUE3QjtBQUNBLFdBQU8sTUFBTTtBQUFDWixzREFBTSxDQUFDZSxHQUFQLENBQVcsaUJBQVgsRUFBOEJILE9BQTlCO0FBQXdDLEtBQXREO0FBQ0g7O0FBM0pvQyxDQUExQixFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvc2V0dGluZ3NtYW5hZ2VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtTZXR0aW5nc0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9kYXRhc3RvcmVcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi9lbWl0dGVyXCI7XHJcbi8vIGltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuLy8gaW1wb3J0IFBhdGNoZXIgZnJvbSBcIi4vcGF0Y2hlclwiO1xyXG4vLyBpbXBvcnQgUmVhY3RDb21wb25lbnRzIGZyb20gXCIuL3JlYWN0Y29tcG9uZW50c1wiO1xyXG5cclxuLy8gaW1wb3J0IFNldHRpbmdzUmVuZGVyZXIgZnJvbSBcIi4uL3VpL3NldHRpbmdzL3NldHRpbmdzXCI7XHJcbi8vIGltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgU2V0dGluZ3NNYW5hZ2VyIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnN0YXRlID0ge307XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9ucyA9IFtdO1xyXG4gICAgICAgIHRoaXMucGFuZWxzID0gW107XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlckNvbGxlY3Rpb24oXCJzZXR0aW5nc1wiLCBcIlNldHRpbmdzXCIsIFNldHRpbmdzQ29uZmlnKTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHRoaXMubG9hZFNldHRpbmdzKCk7XHJcbiAgICAgICAgLy8gdGhpcy5wYXRjaFNlY3Rpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXJDb2xsZWN0aW9uKGlkLCBuYW1lLCBzZXR0aW5ncywgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNvbGxlY3Rpb25zLmZpbmQoYyA9PiBjLmlkID09IGlkKSkgcmV0dXJuIExvZ2dlci5lcnJvcihcIlNldHRpbmdzXCIsIFwiQWxyZWFkeSBoYXZlIGEgY29sbGVjdGlvbiB3aXRoIGlkIFwiICsgaWQpO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbnMucHVzaCh7XHJcbiAgICAgICAgICAgIHR5cGU6IFwiY29sbGVjdGlvblwiLFxyXG4gICAgICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXHJcbiAgICAgICAgICAgIHNldHRpbmdzOiBzZXR0aW5ncyxcclxuICAgICAgICAgICAgYnV0dG9uOiBidXR0b25cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnNldHVwKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29sbGVjdGlvbihpZCkge1xyXG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5jb2xsZWN0aW9ucy5maW5kSW5kZXgoYyA9PiBjLmlkID09IGlkKTtcclxuICAgICAgICBpZiAoIWxvY2F0aW9uIDwgMCkgcmV0dXJuIExvZ2dlci5lcnJvcihcIlNldHRpbmdzXCIsIFwiTm8gY29sbGVjdGlvbiB3aXRoIGlkIFwiICsgaWQpO1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbnMuc3BsaWNlKGxvY2F0aW9uLCAxKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBUT0RPOiBNb3ZlIHRoaXMgdG8gU2V0dGluZ3NSZW5kZXJlciBhbmQgYWxzbyBhZGQgYSByZWdpc3RlckNvbnRlbnRQYW5lbFxyXG4gICAgcmVnaXN0ZXJQYW5lbChpZCwgbmFtZSwgb3B0aW9ucykge1xyXG4gICAgICAgIGlmICh0aGlzLnBhbmVscy5maW5kKHAgPT4gcC5pZCA9PSBpZCkpIHJldHVybiBMb2dnZXIuZXJyb3IoXCJTZXR0aW5nc1wiLCBcIkFscmVhZHkgaGF2ZSBhIHBhbmVsIHdpdGggaWQgXCIgKyBpZCk7XHJcbiAgICAgICAgY29uc3Qge2VsZW1lbnQsIG9uQ2xpY2ssIG9yZGVyID0gMX0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSB7aWQsIG9yZGVyLCBsYWJlbDogbmFtZSwgc2VjdGlvbjogbmFtZX07XHJcbiAgICAgICAgaWYgKG9uQ2xpY2spIHNlY3Rpb24uY2xpY2tMaXN0ZW5lciA9IG9uQ2xpY2s7XHJcbiAgICAgICAgaWYgKGVsZW1lbnQpIHNlY3Rpb24uZWxlbWVudCA9IGVsZW1lbnQgaW5zdGFuY2VvZiBEaXNjb3JkTW9kdWxlcy5SZWFjdC5Db21wb25lbnQgPyAoKSA9PiBEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KGVsZW1lbnQsIHt9KSA6IHR5cGVvZihlbGVtZW50KSA9PSBcImZ1bmN0aW9uXCIgPyBlbGVtZW50IDogKCkgPT4gZWxlbWVudDtcclxuICAgICAgICB0aGlzLnBhbmVscy5wdXNoKHNlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVBhbmVsKGlkKSB7XHJcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLnBhbmVscy5maW5kSW5kZXgoYyA9PiBjLmlkID09IGlkKTtcclxuICAgICAgICBpZiAoIWxvY2F0aW9uIDwgMCkgcmV0dXJuIExvZ2dlci5lcnJvcihcIlNldHRpbmdzXCIsIFwiTm8gY29sbGVjdGlvbiB3aXRoIGlkIFwiICsgaWQpO1xyXG4gICAgICAgIHRoaXMucGFuZWxzLnNwbGljZShsb2NhdGlvbiwgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UGF0aChwYXRoLCBjb2xsZWN0aW9uSWQgPSBcIlwiLCBjYXRlZ29yeUlkID0gXCJcIikge1xyXG4gICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSBwYXRoLmxlbmd0aCA9PSAzID8gcGF0aFswXSA6IGNvbGxlY3Rpb25JZDtcclxuICAgICAgICBjb25zdCBjYXRlZ29yeSA9IHBhdGgubGVuZ3RoID09IDMgPyBwYXRoWzFdIDogcGF0aC5sZW5ndGggPT0gMiA/IHBhdGhbMF0gOiBjYXRlZ29yeUlkO1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSBwYXRoW3BhdGgubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgcmV0dXJuIHtjb2xsZWN0aW9uLCBjYXRlZ29yeSwgc2V0dGluZ307XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXAoKSB7XHJcbiAgICAgICAgZm9yIChsZXQgYyA9IDA7IGMgPCB0aGlzLmNvbGxlY3Rpb25zLmxlbmd0aDsgYysrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmNvbGxlY3Rpb25zW2NdO1xyXG4gICAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzID0gdGhpcy5jb2xsZWN0aW9uc1tjXS5zZXR0aW5ncztcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdKSB0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdID0ge307XHJcbiAgICAgICAgICAgIGZvciAobGV0IGNjID0gMDsgY2MgPCBjYXRlZ29yaWVzLmxlbmd0aDsgY2MrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY2F0ZWdvcnkgPSBjYXRlZ29yaWVzW2NjXTtcclxuICAgICAgICAgICAgICAgIGlmIChjYXRlZ29yeS50eXBlICE9IFwiY2F0ZWdvcnlcIikge2lmICghdGhpcy5zdGF0ZVtjb2xsZWN0aW9uLmlkXS5oYXNPd25Qcm9wZXJ0eShjYXRlZ29yeS5pZCkpIHRoaXMuc3RhdGVbY29sbGVjdGlvbi5pZF1bY2F0ZWdvcnkuaWRdID0gY2F0ZWdvcnkudmFsdWU7fVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdLmhhc093blByb3BlcnR5KGNhdGVnb3J5LmlkKSkgdGhpcy5zdGF0ZVtjb2xsZWN0aW9uLmlkXVtjYXRlZ29yeS5pZF0gPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzID0gMDsgcyA8IGNhdGVnb3J5LnNldHRpbmdzLmxlbmd0aDsgcysrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBjYXRlZ29yeS5zZXR0aW5nc1tzXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbGxlY3Rpb24uaWRdW2NhdGVnb3J5LmlkXS5oYXNPd25Qcm9wZXJ0eShzZXR0aW5nLmlkKSkgdGhpcy5zdGF0ZVtjb2xsZWN0aW9uLmlkXVtjYXRlZ29yeS5pZF1bc2V0dGluZy5pZF0gPSBzZXR0aW5nLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5lbmFibGVXaXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRQYXRoKHNldHRpbmcuZW5hYmxlV2l0aC5zcGxpdChcIi5cIiksIGNvbGxlY3Rpb24uaWQsIGNhdGVnb3J5LmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZXR0aW5nLmhhc093blByb3BlcnR5KFwiZGlzYWJsZWRcIikpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNldHRpbmcsIFwiZGlzYWJsZWRcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldDogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuc3RhdGVbcGF0aC5jb2xsZWN0aW9uXVtwYXRoLmNhdGVnb3J5XVtwYXRoLnNldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5kaXNhYmxlV2l0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMuZ2V0UGF0aChzZXR0aW5nLmRpc2FibGVXaXRoLnNwbGl0KFwiLlwiKSwgY29sbGVjdGlvbi5pZCwgY2F0ZWdvcnkuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlZFwiKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2V0dGluZywgXCJkaXNhYmxlZFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN0YXRlW3BhdGguY29sbGVjdGlvbl1bcGF0aC5jYXRlZ29yeV1bcGF0aC5zZXR0aW5nXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzYXZlU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldERhdGEoXCJzZXR0aW5nc1wiLCB0aGlzLnN0YXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkU2V0dGluZ3MoKSB7XHJcbiAgICAgICAgY29uc3QgcHJldmlvdXNTdGF0ZSA9IERhdGFTdG9yZS5nZXREYXRhKFwic2V0dGluZ3NcIik7XHJcbiAgICAgICAgaWYgKCFwcmV2aW91c1N0YXRlKSByZXR1cm4gdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbGxlY3Rpb24gaW4gdGhpcy5zdGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAoIXByZXZpb3VzU3RhdGVbY29sbGVjdGlvbl0pIE9iamVjdC5hc3NpZ24ocHJldmlvdXNTdGF0ZSwge1tjb2xsZWN0aW9uXTogdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXX0pO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IGluIHRoaXMuc3RhdGVbY29sbGVjdGlvbl0pIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV0pIE9iamVjdC5hc3NpZ24ocHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXSwge1tjYXRlZ29yeV06IHRoaXMuc3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldfSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHNldHRpbmcgaW4gdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV0pIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNTdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV1bc2V0dGluZ10gPT0gdW5kZWZpbmVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlW2NvbGxlY3Rpb25dW2NhdGVnb3J5XVtzZXR0aW5nXSA9IHByZXZpb3VzU3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldW3NldHRpbmddO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNhdmVTZXR0aW5ncygpOyAvLyBpbiBjYXNlIG5ldyB0aGluZ3Mgd2VyZSBhZGRlZFxyXG4gICAgfVxyXG5cclxuICAgIG9uU2V0dGluZ0NoYW5nZShjb2xsZWN0aW9uLCBjYXRlZ29yeSwgaWQsIHZhbHVlKSB7XHJcbiAgICAgICAgY29uc3QgYmVmb3JlID0gdGhpcy5jb2xsZWN0aW9ucy5sZW5ndGggKyB0aGlzLnBhbmVscy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5zdGF0ZVtjb2xsZWN0aW9uXVtjYXRlZ29yeV1baWRdID0gdmFsdWU7XHJcbiAgICAgICAgRXZlbnRzLmRpc3BhdGNoKFwic2V0dGluZy11cGRhdGVkXCIsIGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCwgdmFsdWUpO1xyXG4gICAgICAgIGNvbnN0IGFmdGVyID0gdGhpcy5jb2xsZWN0aW9ucy5sZW5ndGggKyB0aGlzLnBhbmVscy5sZW5ndGg7XHJcbiAgICAgICAgdGhpcy5zYXZlU2V0dGluZ3MoKTtcclxuICAgICAgICBpZiAoYmVmb3JlICE9IGFmdGVyKSBzZXRUaW1lb3V0KHRoaXMuZm9yY2VVcGRhdGUuYmluZCh0aGlzKSwgNTApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNldHRpbmcoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkKSB7XHJcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT0gMikgcmV0dXJuIHRoaXMuY29sbGVjdGlvbnNbMF0uZmluZChjID0+IGMuaWQgPT0gYXJndW1lbnRzWzBdKS5zZXR0aW5ncy5maW5kKHMgPT4gcy5pZCA9PSBhcmd1bWVudHNbMV0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbGxlY3Rpb25zLmZpbmQoYyA9PiBjLmlkID09IGNvbGxlY3Rpb24pLmZpbmQoYyA9PiBjLmlkID09IGNhdGVnb3J5KS5zZXR0aW5ncy5maW5kKHMgPT4gcy5pZCA9PSBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGNvbGxlY3Rpb24sIGNhdGVnb3J5LCBpZCkge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgaWQgPSBjYXRlZ29yeTtcclxuICAgICAgICAgICAgY2F0ZWdvcnkgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gXCJzZXR0aW5nc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGVbY29sbGVjdGlvbl0gfHwgIXRoaXMuc3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVbY29sbGVjdGlvbl1bY2F0ZWdvcnldW2lkXTtcclxuICAgIH1cclxuXHJcbiAgICBzZXQoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09IDMpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBpZDtcclxuICAgICAgICAgICAgaWQgPSBjYXRlZ29yeTtcclxuICAgICAgICAgICAgY2F0ZWdvcnkgPSBjb2xsZWN0aW9uO1xyXG4gICAgICAgICAgICBjb2xsZWN0aW9uID0gXCJzZXR0aW5nc1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5vblNldHRpbmdDaGFuZ2UoY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkLCB2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgb24oY29sbGVjdGlvbiwgY2F0ZWdvcnksIGlkZW50aWZpZXIsIGNhbGxiYWNrKSB7XHJcbiAgICAgICAgY29uc3QgaGFuZGxlciA9IChjb2wsIGNhdCwgaWQsIHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wgIT09IGNvbGxlY3Rpb24gfHwgY2F0ICE9PSBjYXRlZ29yeSB8fCBpZCAhPT0gaWRlbnRpZmllcikgcmV0dXJuO1xyXG4gICAgICAgICAgICBjYWxsYmFjayh2YWx1ZSk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBFdmVudHMub24oXCJzZXR0aW5nLXVwZGF0ZWRcIiwgaGFuZGxlcik7XHJcbiAgICAgICAgcmV0dXJuICgpID0+IHtFdmVudHMub2ZmKFwic2V0dGluZy11cGRhdGVkXCIsIGhhbmRsZXIpO307XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/settingsmanager.js\n"); /***/ }), @@ -515,7 +515,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 ui__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.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_3__[\"default\"].registerPanel(\"themes\", \"Themes\", {\n element: () => ui__WEBPACK_IMPORTED_MODULE_2__[\"SettingsPanel\"].getContentPanel(\"Themes\", this.contentList, this.state, {\n folder: this.contentFolder,\n onChange: this.toggleTheme.bind(this),\n reload: this.reloadTheme.bind(this),\n refreshList: this.updateThemeList.bind(this)\n })\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_2__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n\n reloadTheme(idOrFileOrContent) {\n const error = this.reloadContent(idOrFileOrContent);\n if (error) ui__WEBPACK_IMPORTED_MODULE_2__[\"Modals\"].showContentErrors({\n themes: [error]\n });\n }\n /* Overrides */\n\n\n getContentModification(module, content, meta) {\n meta.css = content;\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 _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].injectTheme(content.id, content.css);\n }\n\n removeTheme(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n _dommanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].removeTheme(content.id);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdGhlbWVtYW5hZ2VyLmpzPzQwNzgiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJUaGVtZU1hbmFnZXIiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicmVzb2x2ZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwicHJlZml4IiwidXBkYXRlVGhlbWVMaXN0IiwidXBkYXRlTGlzdCIsImxvYWRBbGxUaGVtZXMiLCJTZXR0aW5ncyIsInJlZ2lzdGVyUGFuZWwiLCJlbGVtZW50IiwiU2V0dGluZ3NSZW5kZXJlciIsImdldENvbnRlbnRQYW5lbCIsImNvbnRlbnRMaXN0Iiwic3RhdGUiLCJmb2xkZXIiLCJvbkNoYW5nZSIsInRvZ2dsZVRoZW1lIiwiYmluZCIsInJlbG9hZCIsInJlbG9hZFRoZW1lIiwicmVmcmVzaExpc3QiLCJsb2FkQWxsQ29udGVudCIsImVuYWJsZVRoZW1lIiwiaWRPckNvbnRlbnQiLCJlbmFibGVDb250ZW50IiwiZGlzYWJsZVRoZW1lIiwiZGlzYWJsZUNvbnRlbnQiLCJpZCIsInRvZ2dsZUNvbnRlbnQiLCJ1bmxvYWRUaGVtZSIsImlkT3JGaWxlT3JDb250ZW50IiwidW5sb2FkQ29udGVudCIsImxvYWRUaGVtZSIsImZpbGVuYW1lIiwiZXJyb3IiLCJsb2FkQ29udGVudCIsIk1vZGFscyIsInNob3dDb250ZW50RXJyb3JzIiwidGhlbWVzIiwicmVsb2FkQ29udGVudCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJjb250ZW50IiwibWV0YSIsImNzcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydENvbnRlbnQiLCJhZGRUaGVtZSIsInN0b3BDb250ZW50IiwicmVtb3ZlVGhlbWUiLCJmaW5kIiwicCIsIkRPTU1hbmFnZXIiLCJpbmplY3RUaGVtZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFB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QyxXQUFPLEtBQUt1QixXQUFMLENBQWlCdkIsRUFBakIsQ0FBUDtBQUE2Qjs7QUFFOUNxQixVQUFRLENBQUN6QixXQUFELEVBQWM7QUFDbEIsVUFBTW1CLE9BQU8sR0FBRyxPQUFPbkIsV0FBUCxJQUF1QixRQUF2QixHQUFrQyxLQUFLWCxXQUFMLENBQWlCdUMsSUFBakIsQ0FBc0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDekIsRUFBRixJQUFRSixXQUFuQyxDQUFsQyxHQUFvRkEsV0FBcEc7QUFDQSxRQUFJLENBQUNtQixPQUFMLEVBQWM7QUFDZFcsdURBQVUsQ0FBQ0MsV0FBWCxDQUF1QlosT0FBTyxDQUFDZixFQUEvQixFQUFtQ2UsT0FBTyxDQUFDRSxHQUEzQztBQUNIOztBQUVETSxhQUFXLENBQUMzQixXQUFELEVBQWM7QUFDckIsVUFBTW1CLE9BQU8sR0FBRyxPQUFPbkIsV0FBUCxJQUF1QixRQUF2QixHQUFrQyxLQUFLWCxXQUFMLENBQWlCdUMsSUFBakIsQ0FBc0JDLENBQUMsSUFBSUEsQ0FBQyxDQUFDekIsRUFBRixJQUFRSixXQUFuQyxDQUFsQyxHQUFvRkEsV0FBcEc7QUFDQSxRQUFJLENBQUNtQixPQUFMLEVBQWM7QUFDZFcsdURBQVUsQ0FBQ0gsV0FBWCxDQUF1QlIsT0FBTyxDQUFDZixFQUEvQjtBQUNIOztBQXREd0QsQ0FBOUMsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL3RoZW1lbWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudG1hbmFnZXJcIjtcclxuaW1wb3J0IHtNb2RhbHN9IGZyb20gXCJ1aVwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBET01NYW5hZ2VyIGZyb20gXCIuL2RvbW1hbmFnZXJcIjtcclxuaW1wb3J0IHtTZXR0aW5nc1BhbmVsIGFzIFNldHRpbmdzUmVuZGVyZXJ9IGZyb20gXCJ1aVwiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRoZW1lTWFuYWdlciBleHRlbmRzIENvbnRlbnRNYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlRoZW1lTWFuYWdlclwiO31cclxuICAgIGdldCBtb2R1bGVFeHRlbnNpb24oKSB7cmV0dXJuIFwiLmNzc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnRoZW1lLmNzc1wiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcInRoZW1lc1wiKTt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcInRoZW1lXCI7fVxyXG5cclxuICAgIC8qIEFsaWFzZXMgKi9cclxuICAgIHVwZGF0ZVRoZW1lTGlzdCgpIHtyZXR1cm4gdGhpcy51cGRhdGVMaXN0KCk7fVxyXG4gICAgbG9hZEFsbFRoZW1lcygpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKFwidGhlbWVzXCIsIFwiVGhlbWVzXCIsIHtlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmdldENvbnRlbnRQYW5lbChcIlRoZW1lc1wiLCB0aGlzLmNvbnRlbnRMaXN0LCB0aGlzLnN0YXRlLCB7XHJcbiAgICAgICAgICAgIGZvbGRlcjogdGhpcy5jb250ZW50Rm9sZGVyLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy50b2dnbGVUaGVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICByZWxvYWQ6IHRoaXMucmVsb2FkVGhlbWUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVmcmVzaExpc3Q6IHRoaXMudXBkYXRlVGhlbWVMaXN0LmJpbmQodGhpcylcclxuICAgICAgICB9KX0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlVGhlbWUoaWRPckNvbnRlbnQpIHtyZXR1cm4gdGhpcy5lbmFibGVDb250ZW50KGlkT3JDb250ZW50KTt9XHJcbiAgICBkaXNhYmxlVGhlbWUoaWRPckNvbnRlbnQpIHtyZXR1cm4gdGhpcy5kaXNhYmxlQ29udGVudChpZE9yQ29udGVudCk7fVxyXG4gICAgdG9nZ2xlVGhlbWUoaWQpIHtyZXR1cm4gdGhpcy50b2dnbGVDb250ZW50KGlkKTt9XHJcblxyXG4gICAgdW5sb2FkVGhlbWUoaWRPckZpbGVPckNvbnRlbnQpIHtyZXR1cm4gdGhpcy51bmxvYWRDb250ZW50KGlkT3JGaWxlT3JDb250ZW50KTt9XHJcblxyXG4gICAgbG9hZFRoZW1lKGZpbGVuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lKTtcclxuICAgICAgICBpZiAoZXJyb3IpIE1vZGFscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkVGhlbWUoaWRPckZpbGVPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucmVsb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCk7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIE92ZXJyaWRlcyAqL1xyXG4gICAgZ2V0Q29udGVudE1vZGlmaWNhdGlvbihtb2R1bGUsIGNvbnRlbnQsIG1ldGEpIHtcclxuICAgICAgICBtZXRhLmNzcyA9IGNvbnRlbnQ7XHJcbiAgICAgICAgcmV0dXJuIGBtb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O2A7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRDb250ZW50KGlkKSB7cmV0dXJuIHRoaXMuYWRkVGhlbWUoaWQpO31cclxuICAgIHN0b3BDb250ZW50KGlkKSB7cmV0dXJuIHRoaXMucmVtb3ZlVGhlbWUoaWQpO31cclxuXHJcbiAgICBhZGRUaGVtZShpZE9yQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JDb250ZW50KSA6IGlkT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgIERPTU1hbmFnZXIuaW5qZWN0VGhlbWUoY29udGVudC5pZCwgY29udGVudC5jc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVRoZW1lKGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgRE9NTWFuYWdlci5yZW1vdmVUaGVtZShjb250ZW50LmlkKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\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 _settingsmanager__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _ui_toasts__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/toasts */ \"./src/ui/toasts.js\");\n/* harmony import */ var _ui_modals__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../ui/modals */ \"./src/ui/modals.js\");\n/* harmony import */ var _ui_settings__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../ui/settings */ \"./src/ui/settings.js\");\n\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_2__[\"default\"].registerPanel(\"themes\", \"Themes\", {\n element: () => _ui_settings__WEBPACK_IMPORTED_MODULE_6__[\"default\"].getContentPanel(\"Themes\", this.contentList, this.state, {\n folder: this.contentFolder,\n onChange: this.toggleTheme.bind(this),\n reload: this.reloadTheme.bind(this),\n refreshList: this.updateThemeList.bind(this)\n })\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_modals__WEBPACK_IMPORTED_MODULE_5__[\"default\"].showContentErrors({\n themes: [error]\n });\n }\n\n reloadTheme(idOrFileOrContent) {\n const error = this.reloadContent(idOrFileOrContent);\n if (error) _ui_modals__WEBPACK_IMPORTED_MODULE_5__[\"default\"].showContentErrors({\n themes: [error]\n });\n }\n /* Overrides */\n\n\n getContentModification(module, content, meta) {\n meta.css = content;\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 _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].injectTheme(content.id, content.css);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(`${content.name} v${content.version} has been applied.`);\n }\n\n removeTheme(idOrContent) {\n const content = typeof idOrContent == \"string\" ? this.contentList.find(p => p.id == idOrContent) : idOrContent;\n if (!content) return;\n _dommanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].removeTheme(content.id);\n _ui_toasts__WEBPACK_IMPORTED_MODULE_4__[\"default\"].show(`${content.name} v${content.version} has been removed.`);\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvdGhlbWVtYW5hZ2VyLmpzPzQwNzgiXSwibmFtZXMiOlsicGF0aCIsInJlcXVpcmUiLCJUaGVtZU1hbmFnZXIiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicmVzb2x2ZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwicHJlZml4IiwidXBkYXRlVGhlbWVMaXN0IiwidXBkYXRlTGlzdCIsImxvYWRBbGxUaGVtZXMiLCJTZXR0aW5ncyIsInJlZ2lzdGVyUGFuZWwiLCJlbGVtZW50IiwiU2V0dGluZ3NSZW5kZXJlciIsImdldENvbnRlbnRQYW5lbCIsImNvbnRlbnRMaXN0Iiwic3RhdGUiLCJmb2xkZXIiLCJvbkNoYW5nZSIsInRvZ2dsZVRoZW1lIiwiYmluZCIsInJlbG9hZCIsInJlbG9hZFRoZW1lIiwicmVmcmVzaExpc3QiLCJsb2FkQWxsQ29udGVudCIsImVuYWJsZVRoZW1lIiwiaWRPckNvbnRlbnQiLCJlbmFibGVDb250ZW50IiwiZGlzYWJsZVRoZW1lIiwiZGlzYWJsZUNvbnRlbnQiLCJpZCIsInRvZ2dsZUNvbnRlbnQiLCJ1bmxvYWRUaGVtZSIsImlkT3JGaWxlT3JDb250ZW50IiwidW5sb2FkQ29udGVudCIsImxvYWRUaGVtZSIsImZpbGVuYW1lIiwiZXJyb3IiLCJsb2FkQ29udGVudCIsIk1vZGFscyIsInNob3dDb250ZW50RXJyb3JzIiwidGhlbWVzIiwicmVsb2FkQ29udGVudCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJjb250ZW50IiwibWV0YSIsImNzcyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzdGFydENvbnRlbnQiLCJhZGRUaGVtZSIsInN0b3BDb250ZW50IiwicmVtb3ZlVGhlbWUiLCJmaW5kIiwicCIsIkRPTU1hbmFnZXIiLCJpbmplY3RUaGVtZSIsIlRvYXN0cyIsInNob3ciLCJ2ZXJzaW9uIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUEsSUFBSSxHQUFHQyxtQkFBTyxDQUFDLGtCQUFELENBQXBCOztBQUVlLG1FQUFJLE1BQU1DLFlBQU4sU0FBMkJDLHVEQUEzQixDQUEwQztBQUN6RCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLGNBQVA7QUFBdUI7O0FBQ25DLE1BQUlDLGVBQUosR0FBc0I7QUFBQyxXQUFPLE1BQVA7QUFBZTs7QUFDdEMsTUFBSUMsU0FBSixHQUFnQjtBQUFDLFdBQU8sWUFBUDtBQUFxQjs7QUFDdEMsTUFBSUMsYUFBSixHQUFvQjtBQUFDLFdBQU9QLElBQUksQ0FBQ1EsT0FBTCxDQUFhQywyQ0FBTSxDQUFDQyxRQUFwQixFQUE4QixRQUE5QixDQUFQO0FBQWdEOztBQUNyRSxNQUFJQyxNQUFKLEdBQWE7QUFBQyxXQUFPLE9BQVA7QUFBZ0I7QUFFOUI7OztBQUNBQyxpQkFBZSxHQUFHO0FBQUMsV0FBTyxLQUFLQyxVQUFMLEVBQVA7QUFBMEI7O0FBQzdDQyxlQUFhLEdBQUc7QUFDWkMsNERBQVEsQ0FBQ0MsYUFBVCxDQUF1QixRQUF2QixFQUFpQyxRQUFqQyxFQUEyQztBQUFDQyxhQUFPLEVBQUUsTUFBTUMsb0RBQWdCLENBQUNDLGVBQWpCLENBQWlDLFFBQWpDLEVBQTJDLEtBQUtDLFdBQWhELEVBQTZELEtBQUtDLEtBQWxFLEVBQXlFO0FBQ2hJQyxjQUFNLEVBQUUsS0FBS2YsYUFEbUg7QUFFaElnQixnQkFBUSxFQUFFLEtBQUtDLFdBQUwsQ0FBaUJDLElBQWpCLENBQXNCLElBQXRCLENBRnNIO0FBR2hJQyxjQUFNLEVBQUUsS0FBS0MsV0FBTCxDQUFpQkYsSUFBakIsQ0FBc0IsSUFBdEIsQ0FId0g7QUFJaElHLG1CQUFXLEVBQUUsS0FBS2hCLGVBQUwsQ0FBcUJhLElBQXJCLENBQTBCLElBQTFCO0FBSm1ILE9BQXpFO0FBQWhCLEtBQTNDO0FBTUEsV0FBTyxLQUFLSSxjQUFMLEVBQVA7QUFDSDs7QUFFREMsYUFBVyxDQUFDQyxXQUFELEVBQWM7QUFBQyxXQUFPLEtBQUtDLGFBQUwsQ0FBbUJELFdBQW5CLENBQVA7QUFBd0M7O0FBQ2xFRSxjQUFZLENBQUNGLFdBQUQsRUFBYztBQUFDLFdBQU8sS0FBS0csY0FBTCxDQUFvQkgsV0FBcEIsQ0FBUDtBQUF5Qzs7QUFDcEVQLGFBQVcsQ0FBQ1csRUFBRCxFQUFLO0FBQUMsV0FBTyxLQUFLQyxhQUFMLENBQW1CRCxFQUFuQixDQUFQO0FBQStCOztBQUVoREUsYUFBVyxDQUFDQyxpQkFBRCxFQUFvQjtBQUFDLFdBQU8sS0FBS0MsYUFBTCxDQUFtQkQsaUJBQW5CLENBQVA7QUFBOEM7O0FBRTlFRSxXQUFTLENBQUNDLFFBQUQsRUFBVztBQUNoQixVQUFNQyxLQUFLLEdBQUcsS0FBS0MsV0FBTCxDQUFpQkYsUUFBakIsQ0FBZDtBQUNBLFFBQUlDLEtBQUosRUFBV0Usa0RBQU0sQ0FBQ0MsaUJBQVAsQ0FBeUI7QUFBQ0MsWUFBTSxFQUFFLENBQUNKLEtBQUQ7QUFBVCxLQUF6QjtBQUNkOztBQUVEZixhQUFXLENBQUNXLGlCQUFELEVBQW9CO0FBQzNCLFVBQU1JLEtBQUssR0FBRyxLQUFLSyxhQUFMLENBQW1CVCxpQkFBbkIsQ0FBZDtBQUNBLFFBQUlJLEtBQUosRUFBV0Usa0RBQU0sQ0FBQ0MsaUJBQVAsQ0FBeUI7QUFBQ0MsWUFBTSxFQUFFLENBQUNKLEtBQUQ7QUFBVCxLQUF6QjtBQUNkO0FBRUQ7OztBQUNBTSx3QkFBc0IsQ0FBQ0MsTUFBRCxFQUFTQyxPQUFULEVBQWtCQyxJQUFsQixFQUF3QjtBQUMxQ0EsUUFBSSxDQUFDQyxHQUFMLEdBQVdGLE9BQVg7QUFDQSxXQUFRLG9CQUFtQkcsSUFBSSxDQUFDQyxTQUFMLENBQWVILElBQWYsQ0FBcUIsR0FBaEQ7QUFDSDs7QUFFREksY0FBWSxDQUFDcEIsRUFBRCxFQUFLO0FBQUMsV0FBTyxLQUFLcUIsUUFBTCxDQUFjckIsRUFBZCxDQUFQO0FBQTBCOztBQUM1Q3NCLGFBQVcsQ0FBQ3RCLEVBQUQsRUFBSztBQUFDLFdBQU8sS0FBS3VCLFdBQUwsQ0FBaUJ2QixFQUFqQixDQUFQO0FBQTZCOztBQUU5Q3FCLFVBQVEsQ0FBQ3pCLFdBQUQsRUFBYztBQUNsQixVQUFNbUIsT0FBTyxHQUFHLE9BQU9uQixXQUFQLElBQXVCLFFBQXZCLEdBQWtDLEtBQUtYLFdBQUwsQ0FBaUJ1QyxJQUFqQixDQUFzQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUN6QixFQUFGLElBQVFKLFdBQW5DLENBQWxDLEdBQW9GQSxXQUFwRztBQUNBLFFBQUksQ0FBQ21CLE9BQUwsRUFBYztBQUNkVyx1REFBVSxDQUFDQyxXQUFYLENBQXVCWixPQUFPLENBQUNmLEVBQS9CLEVBQW1DZSxPQUFPLENBQUNFLEdBQTNDO0FBQ0FXLHNEQUFNLENBQUNDLElBQVAsQ0FBYSxHQUFFZCxPQUFPLENBQUM5QyxJQUFLLEtBQUk4QyxPQUFPLENBQUNlLE9BQVEsb0JBQWhEO0FBQ0g7O0FBRURQLGFBQVcsQ0FBQzNCLFdBQUQsRUFBYztBQUNyQixVQUFNbUIsT0FBTyxHQUFHLE9BQU9uQixXQUFQLElBQXVCLFFBQXZCLEdBQWtDLEtBQUtYLFdBQUwsQ0FBaUJ1QyxJQUFqQixDQUFzQkMsQ0FBQyxJQUFJQSxDQUFDLENBQUN6QixFQUFGLElBQVFKLFdBQW5DLENBQWxDLEdBQW9GQSxXQUFwRztBQUNBLFFBQUksQ0FBQ21CLE9BQUwsRUFBYztBQUNkVyx1REFBVSxDQUFDSCxXQUFYLENBQXVCUixPQUFPLENBQUNmLEVBQS9CO0FBQ0E0QixzREFBTSxDQUFDQyxJQUFQLENBQWEsR0FBRWQsT0FBTyxDQUFDOUMsSUFBSyxLQUFJOEMsT0FBTyxDQUFDZSxPQUFRLG9CQUFoRDtBQUNIOztBQXhEd0QsQ0FBOUMsRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL3RoZW1lbWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQgQ29udGVudE1hbmFnZXIgZnJvbSBcIi4vY29udGVudG1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcblxyXG5pbXBvcnQgVG9hc3RzIGZyb20gXCIuLi91aS90b2FzdHNcIjtcclxuaW1wb3J0IE1vZGFscyBmcm9tIFwiLi4vdWkvbW9kYWxzXCI7XHJcbmltcG9ydCBTZXR0aW5nc1JlbmRlcmVyIGZyb20gXCIuLi91aS9zZXR0aW5nc1wiO1xyXG5cclxuY29uc3QgcGF0aCA9IHJlcXVpcmUoXCJwYXRoXCIpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFRoZW1lTWFuYWdlciBleHRlbmRzIENvbnRlbnRNYW5hZ2VyIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlRoZW1lTWFuYWdlclwiO31cclxuICAgIGdldCBtb2R1bGVFeHRlbnNpb24oKSB7cmV0dXJuIFwiLmNzc1wiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiLnRoZW1lLmNzc1wiO31cclxuICAgIGdldCBjb250ZW50Rm9sZGVyKCkge3JldHVybiBwYXRoLnJlc29sdmUoQ29uZmlnLmRhdGFQYXRoLCBcInRoZW1lc1wiKTt9XHJcbiAgICBnZXQgcHJlZml4KCkge3JldHVybiBcInRoZW1lXCI7fVxyXG5cclxuICAgIC8qIEFsaWFzZXMgKi9cclxuICAgIHVwZGF0ZVRoZW1lTGlzdCgpIHtyZXR1cm4gdGhpcy51cGRhdGVMaXN0KCk7fVxyXG4gICAgbG9hZEFsbFRoZW1lcygpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKFwidGhlbWVzXCIsIFwiVGhlbWVzXCIsIHtlbGVtZW50OiAoKSA9PiBTZXR0aW5nc1JlbmRlcmVyLmdldENvbnRlbnRQYW5lbChcIlRoZW1lc1wiLCB0aGlzLmNvbnRlbnRMaXN0LCB0aGlzLnN0YXRlLCB7XHJcbiAgICAgICAgICAgIGZvbGRlcjogdGhpcy5jb250ZW50Rm9sZGVyLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy50b2dnbGVUaGVtZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICByZWxvYWQ6IHRoaXMucmVsb2FkVGhlbWUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgcmVmcmVzaExpc3Q6IHRoaXMudXBkYXRlVGhlbWVMaXN0LmJpbmQodGhpcylcclxuICAgICAgICB9KX0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmxvYWRBbGxDb250ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlVGhlbWUoaWRPckNvbnRlbnQpIHtyZXR1cm4gdGhpcy5lbmFibGVDb250ZW50KGlkT3JDb250ZW50KTt9XHJcbiAgICBkaXNhYmxlVGhlbWUoaWRPckNvbnRlbnQpIHtyZXR1cm4gdGhpcy5kaXNhYmxlQ29udGVudChpZE9yQ29udGVudCk7fVxyXG4gICAgdG9nZ2xlVGhlbWUoaWQpIHtyZXR1cm4gdGhpcy50b2dnbGVDb250ZW50KGlkKTt9XHJcblxyXG4gICAgdW5sb2FkVGhlbWUoaWRPckZpbGVPckNvbnRlbnQpIHtyZXR1cm4gdGhpcy51bmxvYWRDb250ZW50KGlkT3JGaWxlT3JDb250ZW50KTt9XHJcblxyXG4gICAgbG9hZFRoZW1lKGZpbGVuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lKTtcclxuICAgICAgICBpZiAoZXJyb3IpIE1vZGFscy5zaG93Q29udGVudEVycm9ycyh7dGhlbWVzOiBbZXJyb3JdfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVsb2FkVGhlbWUoaWRPckZpbGVPckNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBlcnJvciA9IHRoaXMucmVsb2FkQ29udGVudChpZE9yRmlsZU9yQ29udGVudCk7XHJcbiAgICAgICAgaWYgKGVycm9yKSBNb2RhbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3RoZW1lczogW2Vycm9yXX0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qIE92ZXJyaWRlcyAqL1xyXG4gICAgZ2V0Q29udGVudE1vZGlmaWNhdGlvbihtb2R1bGUsIGNvbnRlbnQsIG1ldGEpIHtcclxuICAgICAgICBtZXRhLmNzcyA9IGNvbnRlbnQ7XHJcbiAgICAgICAgcmV0dXJuIGBtb2R1bGUuZXhwb3J0cyA9ICR7SlNPTi5zdHJpbmdpZnkobWV0YSl9O2A7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRDb250ZW50KGlkKSB7cmV0dXJuIHRoaXMuYWRkVGhlbWUoaWQpO31cclxuICAgIHN0b3BDb250ZW50KGlkKSB7cmV0dXJuIHRoaXMucmVtb3ZlVGhlbWUoaWQpO31cclxuXHJcbiAgICBhZGRUaGVtZShpZE9yQ29udGVudCkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQocCA9PiBwLmlkID09IGlkT3JDb250ZW50KSA6IGlkT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuO1xyXG4gICAgICAgIERPTU1hbmFnZXIuaW5qZWN0VGhlbWUoY29udGVudC5pZCwgY29udGVudC5jc3MpO1xyXG4gICAgICAgIFRvYXN0cy5zaG93KGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSBoYXMgYmVlbiBhcHBsaWVkLmApO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVRoZW1lKGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgRE9NTWFuYWdlci5yZW1vdmVUaGVtZShjb250ZW50LmlkKTtcclxuICAgICAgICBUb2FzdHMuc2hvdyhgJHtjb250ZW50Lm5hbWV9IHYke2NvbnRlbnQudmVyc2lvbn0gaGFzIGJlZW4gcmVtb3ZlZC5gKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/thememanager.js\n"); /***/ }), @@ -539,7 +539,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__, \"Filters\", function() { return Filters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return WebpackModules; });\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/**\r\n * Allows for grabbing and searching through Discord's webpacked modules.\r\n * @module WebpackModules\r\n * @version 0.0.2\r\n */\n // const DiscordModules = Utilities.memoizeObject({\n// get React() {return WebpackModules.getByProps(\"createElement\", \"cloneElement\");},\n// get ReactDOM() {return WebpackModules.getByProps(\"render\", \"findDOMNode\");},\n// get Flux() {return WebpackModules.getByProps(\"connectStores\");},\n// get Events() {return WebpackModules.getByPrototypes(\"setMaxListeners\", \"emit\");},\n// /* Guild Info, Stores, and Utilities */\n// get GuildStore() {return WebpackModules.getByProps(\"getGuild\");},\n// get SortedGuildStore() {return WebpackModules.getByProps(\"getSortedGuilds\");},\n// get SelectedGuildStore() {return WebpackModules.getByProps(\"getLastSelectedGuildId\");},\n// get GuildSync() {return WebpackModules.getByProps(\"getSyncedGuilds\");},\n// get GuildInfo() {return WebpackModules.getByProps(\"getAcronym\");},\n// get GuildChannelsStore() {return WebpackModules.getByProps(\"getChannels\", \"getDefaultChannel\");},\n// get GuildMemberStore() {return WebpackModules.getByProps(\"getMember\");},\n// get MemberCountStore() {return WebpackModules.getByProps(\"getMemberCounts\");},\n// get GuildEmojiStore() {return WebpackModules.getByProps(\"getEmojis\");},\n// get GuildActions() {return WebpackModules.getByProps(\"markGuildAsRead\");},\n// get GuildPermissions() {return WebpackModules.getByProps(\"getGuildPermissions\");},\n// /* Channel Store & Actions */\n// get ChannelStore() {return WebpackModules.getByProps(\"getChannels\", \"getDMFromUserId\");},\n// get SelectedChannelStore() {return WebpackModules.getByProps(\"getLastSelectedChannelId\");},\n// get ChannelActions() {return WebpackModules.getByProps(\"selectChannel\");},\n// get PrivateChannelActions() {return WebpackModules.getByProps(\"openPrivateChannel\");},\n// get ChannelSelector() {return WebpackModules.getByProps(\"selectGuild\", \"selectChannel\");},\n// /* Current User Info, State and Settings */\n// get UserInfoStore() {return WebpackModules.getByProps(\"getToken\");},\n// get UserSettingsStore() {return WebpackModules.getByProps(\"guildPositions\");},\n// get AccountManager() {return WebpackModules.getByProps(\"register\", \"login\");},\n// get UserSettingsUpdater() {return WebpackModules.getByProps(\"updateRemoteSettings\");},\n// get OnlineWatcher() {return WebpackModules.getByProps(\"isOnline\");},\n// get CurrentUserIdle() {return WebpackModules.getByProps(\"getIdleTime\");},\n// get RelationshipStore() {return WebpackModules.getByProps(\"isBlocked\", \"getFriendIDs\");},\n// get RelationshipManager() {return WebpackModules.getByProps(\"addRelationship\");},\n// get MentionStore() {return WebpackModules.getByProps(\"getMentions\");},\n// /* User Stores and Utils */\n// get UserStore() {return WebpackModules.getByProps(\"getCurrentUser\");},\n// get UserStatusStore() {return WebpackModules.getByProps(\"getStatus\", \"getState\");},\n// get UserTypingStore() {return WebpackModules.getByProps(\"isTyping\");},\n// get UserActivityStore() {return WebpackModules.getByProps(\"getActivity\");},\n// get UserNameResolver() {return WebpackModules.getByProps(\"getName\");},\n// get UserNoteStore() {return WebpackModules.getByProps(\"getNote\");},\n// get UserNoteActions() {return WebpackModules.getByProps(\"updateNote\");},\n// /* Emoji Store and Utils */\n// get EmojiInfo() {return WebpackModules.getByProps(\"isEmojiDisabled\");},\n// get EmojiUtils() {return WebpackModules.getByProps(\"getGuildEmoji\");},\n// get EmojiStore() {return WebpackModules.getByProps(\"getByCategory\", \"EMOJI_NAME_RE\");},\n// /* Invite Store and Utils */\n// get InviteStore() {return WebpackModules.getByProps(\"getInvites\");},\n// get InviteResolver() {return WebpackModules.getByProps(\"findInvite\");},\n// get InviteActions() {return WebpackModules.getByProps(\"acceptInvite\");},\n// /* Discord Objects & Utils */\n// get DiscordConstants() {return WebpackModules.getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\");},\n// get DiscordPermissions() {return WebpackModules.getByProps(\"Permissions\", \"ActivityTypes\", \"StatusTypes\").Permissions;},\n// get PermissionUtils() {return WebpackModules.getByProps(\"getHighestRole\");},\n// get ColorConverter() {return WebpackModules.getByProps(\"hex2int\");},\n// get ColorShader() {return WebpackModules.getByProps(\"darken\");},\n// get TinyColor() {return WebpackModules.getByPrototypes(\"toRgb\");},\n// get ClassResolver() {return WebpackModules.getByProps(\"getClass\");},\n// get ButtonData() {return WebpackModules.getByProps(\"ButtonSizes\");},\n// get IconNames() {return WebpackModules.getByProps(\"IconNames\");},\n// get NavigationUtils() {return WebpackModules.getByProps(\"transitionTo\", \"replaceWith\", \"getHistory\");},\n// /* Discord Messages */\n// get MessageStore() {return WebpackModules.getByProps(\"getMessages\");},\n// get MessageActions() {return WebpackModules.getByProps(\"jumpToMessage\", \"_sendMessage\");},\n// get MessageQueue() {return WebpackModules.getByProps(\"enqueue\");},\n// get MessageParser() {return WebpackModules.getByProps(\"createMessage\", \"parse\", \"unparse\");},\n// /* Text Processing */\n// get hljs() {return WebpackModules.getByProps(\"highlight\", \"highlightBlock\");},\n// get SimpleMarkdown() {return WebpackModules.getByProps(\"parseBlock\", \"parseInline\", \"defaultOutput\");},\n// /* Experiments */\n// get ExperimentStore() {return WebpackModules.getByProps(\"getExperimentOverrides\");},\n// get ExperimentsManager() {return WebpackModules.getByProps(\"isDeveloper\");},\n// get CurrentExperiment() {return WebpackModules.getByProps(\"getExperimentId\");},\n// /* Images, Avatars and Utils */\n// get ImageResolver() {return WebpackModules.getByProps(\"getUserAvatarURL\", \"getGuildIconURL\");},\n// get ImageUtils() {return WebpackModules.getByProps(\"getSizedImageSrc\");},\n// get AvatarDefaults() {return WebpackModules.getByProps(\"getUserAvatarURL\", \"DEFAULT_AVATARS\");},\n// /* Window, DOM, HTML */\n// get WindowInfo() {return WebpackModules.getByProps(\"isFocused\", \"windowSize\");},\n// get TagInfo() {return WebpackModules.getByProps(\"VALID_TAG_NAMES\");},\n// get DOMInfo() {return WebpackModules.getByProps(\"canUseDOM\");},\n// /* Locale/Location and Time */\n// get LocaleManager() {return WebpackModules.getByProps(\"setLocale\");},\n// get Moment() {return WebpackModules.getByProps(\"parseZone\");},\n// get LocationManager() {return WebpackModules.getByProps(\"createLocation\");},\n// get Timestamps() {return WebpackModules.getByProps(\"fromTimestamp\");},\n// get TimeFormatter() {return WebpackModules.getByProps(\"dateFormat\");},\n// /* Strings and Utils */\n// get Strings() {return WebpackModules.getByProps(\"Messages\").Messages;},\n// get StringFormats() {return WebpackModules.getByProps(\"a\", \"z\");},\n// get StringUtils() {return WebpackModules.getByProps(\"toASCII\");},\n// /* URLs and Utils */\n// get URLParser() {return WebpackModules.getByProps(\"Url\", \"parse\");},\n// get ExtraURLs() {return WebpackModules.getByProps(\"getArticleURL\");},\n// /* Drag & Drop */\n// get DNDActions() {return WebpackModules.getByProps(\"beginDrag\");},\n// get DNDSources() {return WebpackModules.getByProps(\"addTarget\");},\n// get DNDObjects() {return WebpackModules.getByProps(\"DragSource\");},\n// /* Media Stuff (Audio/Video) */\n// get MediaDeviceInfo() {return WebpackModules.getByProps(\"Codecs\", \"SUPPORTED_BROWSERS\");},\n// get MediaInfo() {return WebpackModules.getByProps(\"getOutputVolume\");},\n// get MediaEngineInfo() {return WebpackModules.getByProps(\"MediaEngineFeatures\");},\n// get VoiceInfo() {return WebpackModules.getByProps(\"EchoCancellation\");},\n// get VideoStream() {return WebpackModules.getByProps(\"getVideoStream\");},\n// get SoundModule() {return WebpackModules.getByProps(\"playSound\");},\n// /* Electron & Other Internals with Utils*/\n// get ElectronModule() {return WebpackModules.getByProps(\"setBadge\");},\n// get Dispatcher() {return WebpackModules.getByProps(\"dirtyDispatch\");},\n// get PathUtils() {return WebpackModules.getByProps(\"hasBasename\");},\n// get NotificationModule() {return WebpackModules.getByProps(\"showNotification\");},\n// get RouterModule() {return WebpackModules.getByProps(\"Router\");},\n// get APIModule() {return WebpackModules.getByProps(\"getAPIBaseURL\");},\n// get AnalyticEvents() {return WebpackModules.getByProps(\"AnalyticEventConfigs\");},\n// get KeyGenerator() {return WebpackModules.getByRegex(/\"binary\"/);},\n// get Buffers() {return WebpackModules.getByProps(\"Buffer\", \"kMaxLength\");},\n// get DeviceStore() {return WebpackModules.getByProps(\"getDevices\");},\n// get SoftwareInfo() {return WebpackModules.getByProps(\"os\");},\n// get CurrentContext() {return WebpackModules.getByProps(\"setTagsContext\");}\n// });\n// export {DiscordModules};\n\n/**\r\n * Checks if a given module matches a set of parameters.\r\n * @callback module:WebpackModules.Filters~filter\r\n * @param {*} module - module to check\r\n * @returns {boolean} - True if the module matches the filter, false otherwise\r\n */\n\n/**\r\n * Filters for use with {@link module:WebpackModules} but may prove useful elsewhere.\r\n */\n\nclass Filters {\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.\r\n * @param {Array} props - Array of property names\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n static byProperties(props, filter = m => m) {\n return module => {\n const component = filter(module);\n if (!component) return false;\n return props.every(property => component[property] !== undefined);\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties on the object's prototype.\r\n * @param {Array} fields - Array of property names\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties on the object's prototype\r\n */\n\n\n static byPrototypeFields(fields, filter = m => m) {\n return module => {\n const component = filter(module);\n if (!component) return false;\n if (!component.prototype) return false;\n return fields.every(field => component.prototype[field] !== undefined);\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a regex.\r\n * @param {RegExp} search - A RegExp to check on the module\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n\n\n static byCode(search, filter = m => m) {\n return module => {\n const method = filter(module);\n if (!method) return false;\n return method.toString([]).search(search) !== -1;\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by strings.\r\n * @param {...String} search - A RegExp to check on the module\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of strings\r\n */\n\n\n static byString(...strings) {\n return module => {\n const moduleString = module.toString([]);\n\n for (const s of strings) {\n if (!moduleString.includes(s)) return false;\n }\n\n return true;\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.\r\n * @param {string} name - Name the module should have\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n\n\n static byDisplayName(name) {\n return module => {\n return module && module.displayName === name;\n };\n }\n /**\r\n * Generates a combined {@link module:WebpackModules.Filters~filter} from a list of filters.\r\n * @param {...module:WebpackModules.Filters~filter} filters - A list of filters\r\n * @returns {module:WebpackModules.Filters~filter} - Combinatory filter of all arguments\r\n */\n\n\n static combine(...filters) {\n return module => {\n return filters.every(filter => filter(module));\n };\n }\n\n}\nclass WebpackModules {\n static find(filter, first = true) {\n return this.getModule(filter, first);\n }\n\n static findAll(filter) {\n return this.getModule(filter, false);\n }\n\n static findByUniqueProperties(props, first = true) {\n return first ? this.getByProps(...props) : this.getAllByProps(...props);\n }\n\n static findByDisplayName(name) {\n return this.getByDisplayName(name);\n }\n /**\r\n * Finds a module using a filter function.\r\n * @param {Function} filter A function to use to filter modules\r\n * @param {Boolean} first Whether to return only the first matching module\r\n * @return {Any}\r\n */\n\n\n static getModule(filter, first = true) {\n const modules = this.getAllModules();\n const rm = [];\n\n for (const index in modules) {\n if (!modules.hasOwnProperty(index)) continue;\n const module = modules[index];\n const {\n exports\n } = module;\n let foundModule = null;\n if (!exports) continue;\n if (exports.__esModule && exports.default && filter(exports.default)) foundModule = exports.default;\n if (filter(exports)) foundModule = exports;\n if (!foundModule) continue;\n if (first) return foundModule;\n rm.push(foundModule);\n }\n\n return first || rm.length == 0 ? undefined : rm;\n }\n /**\r\n * Finds all modules matching a filter function.\r\n * @param {Function} filter A function to use to filter modules\r\n */\n\n\n static getModules(filter) {\n return this.getModule(filter, false);\n }\n /**\r\n * Finds a module by its name.\r\n * @param {String} name The name of the module\r\n * @param {Function} fallback A function to use to filter modules if not finding a known module\r\n * @return {Any}\r\n */\n\n\n static getModuleByName(name, fallback) {\n if (_discordmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"].hasOwnProperty(name)) return _discordmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"][name];\n if (!fallback) return undefined;\n const module = this.getModule(fallback, true);\n return module ? _discordmodules__WEBPACK_IMPORTED_MODULE_0__[\"default\"][name] = module : undefined;\n }\n /**\r\n * Finds a module by its display name.\r\n * @param {String} name The display name of the module\r\n * @return {Any}\r\n */\n\n\n static getByDisplayName(name) {\n return this.getModule(Filters.byDisplayName(name), true);\n }\n /**\r\n * Finds a module using its code.\r\n * @param {RegEx} regex A regular expression to use to filter modules\r\n * @param {Boolean} first Whether to return the only the first matching module\r\n * @return {Any}\r\n */\n\n\n static getByRegex(regex, first = true) {\n return this.getModule(Filters.byCode(regex), first);\n }\n /**\r\n * Finds a single module using properties on its prototype.\r\n * @param {...string} prototypes Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByPrototypes(...prototypes) {\n return this.getModule(Filters.byPrototypeFields(prototypes), true);\n }\n /**\r\n * Finds all modules with a set of properties of its prototype.\r\n * @param {...string} prototypes Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByPrototypes(...prototypes) {\n return this.getModule(Filters.byPrototypeFields(prototypes), false);\n }\n /**\r\n * Finds a single module using its own properties.\r\n * @param {...string} props Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByProps(...props) {\n return this.getModule(Filters.byProperties(props), true);\n }\n /**\r\n * Finds all modules with a set of properties.\r\n * @param {...string} props Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByProps(...props) {\n return this.getModule(Filters.byProperties(props), false);\n }\n /**\r\n * Finds a single module using a set of strings.\r\n * @param {...String} props Strings to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByString(...strings) {\n return this.getModule(Filters.byString(...strings), true);\n }\n /**\r\n * Finds all modules with a set of strings.\r\n * @param {...String} strings Strings to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByString(...strings) {\n return this.getModule(Filters.byString(...strings), false);\n }\n /**\r\n * Discord's __webpack_require__ function.\r\n */\n\n\n static get require() {\n if (this._require) return this._require;\n const id = \"bbd-webpackmodules\";\n\n const __webpack_require__ = typeof window.webpackJsonp == \"function\" ? window.webpackJsonp([], {\n [id]: (module, exports, __internal_require__) => exports.default = __internal_require__\n }, [id]).default : window.webpackJsonp.push([[], {\n [id]: (module, exports, __internal_require__) => module.exports = __internal_require__\n }, [[id]]]);\n\n delete __webpack_require__.m[id];\n delete __webpack_require__.c[id];\n return this._require = __webpack_require__;\n }\n /**\r\n * Returns all loaded modules.\r\n * @return {Array}\r\n */\n\n\n static getAllModules() {\n return this.require.c;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvd2VicGFja21vZHVsZXMuanM/OWIyNyJdLCJuYW1lcyI6WyJGaWx0ZXJzIiwiYnlQcm9wZXJ0aWVzIiwicHJvcHMiLCJmaWx0ZXIiLCJtIiwibW9kdWxlIiwiY29tcG9uZW50IiwiZXZlcnkiLCJwcm9wZXJ0eSIsInVuZGVmaW5lZCIsImJ5UHJvdG90eXBlRmllbGRzIiwiZmllbGRzIiwicHJvdG90eXBlIiwiZmllbGQiLCJieUNvZGUiLCJzZWFyY2giLCJtZXRob2QiLCJ0b1N0cmluZyIsImJ5U3RyaW5nIiwic3RyaW5ncyIsIm1vZHVsZVN0cmluZyIsInMiLCJpbmNsdWRlcyIsImJ5RGlzcGxheU5hbWUiLCJuYW1lIiwiZGlzcGxheU5hbWUiLCJjb21iaW5lIiwiZmlsdGVycyIsIldlYnBhY2tNb2R1bGVzIiwiZmluZCIsImZpcnN0IiwiZ2V0TW9kdWxlIiwiZmluZEFsbCIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJnZXRCeVByb3BzIiwiZ2V0QWxsQnlQcm9wcyIsImZpbmRCeURpc3BsYXlOYW1lIiwiZ2V0QnlEaXNwbGF5TmFtZSIsIm1vZHVsZXMiLCJnZXRBbGxNb2R1bGVzIiwicm0iLCJpbmRleCIsImhhc093blByb3BlcnR5IiwiZXhwb3J0cyIsImZvdW5kTW9kdWxlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJwdXNoIiwibGVuZ3RoIiwiZ2V0TW9kdWxlcyIsImdldE1vZHVsZUJ5TmFtZSIsImZhbGxiYWNrIiwiRGlzY29yZE1vZHVsZXMiLCJnZXRCeVJlZ2V4IiwicmVnZXgiLCJnZXRCeVByb3RvdHlwZXMiLCJwcm90b3R5cGVzIiwiZ2V0QWxsQnlQcm90b3R5cGVzIiwiZ2V0QnlTdHJpbmciLCJnZXRBbGxCeVN0cmluZyIsInJlcXVpcmUiLCJfcmVxdWlyZSIsImlkIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIndpbmRvdyIsIndlYnBhY2tKc29ucCIsIl9faW50ZXJuYWxfcmVxdWly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LE1BQUQsRUFBU3NDLE9BQVQsRUFBa0J1QixvQkFBbEIsS0FBMkM3RCxNQUFNLENBQUNzQyxPQUFQLEdBQWlCdUI7QUFEckIsS0FBTCxFQUV6QyxDQUFDLENBQUNKLEVBQUQsQ0FBRCxDQUZ5QyxDQUF6QixDQUZuQjs7QUFLQSxXQUFPQyxtQkFBbUIsQ0FBQzNELENBQXBCLENBQXNCMEQsRUFBdEIsQ0FBUDtBQUNBLFdBQU9DLG1CQUFtQixDQUFDSSxDQUFwQixDQUFzQkwsRUFBdEIsQ0FBUDtBQUNBLFdBQU8sS0FBS0QsUUFBTCxHQUFnQkUsbUJBQXZCO0FBQ0g7QUFFRDs7Ozs7O0FBSUEsU0FBT3hCLGFBQVAsR0FBdUI7QUFDbkIsV0FBTyxLQUFLcUIsT0FBTCxDQUFhTyxDQUFwQjtBQUNIOztBQWxKK0IiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy93ZWJwYWNrbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBbGxvd3MgZm9yIGdyYWJiaW5nIGFuZCBzZWFyY2hpbmcgdGhyb3VnaCBEaXNjb3JkJ3Mgd2VicGFja2VkIG1vZHVsZXMuXHJcbiAqIEBtb2R1bGUgV2VicGFja01vZHVsZXNcclxuICogQHZlcnNpb24gMC4wLjJcclxuICovXHJcblxyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuXHJcbi8vIGNvbnN0IERpc2NvcmRNb2R1bGVzID0gVXRpbGl0aWVzLm1lbW9pemVPYmplY3Qoe1xyXG4vLyAgICAgZ2V0IFJlYWN0KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlRWxlbWVudFwiLCBcImNsb25lRWxlbWVudFwiKTt9LFxyXG4vLyAgICAgZ2V0IFJlYWN0RE9NKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicmVuZGVyXCIsIFwiZmluZERPTU5vZGVcIik7fSxcclxuLy8gICAgIGdldCBGbHV4KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY29ubmVjdFN0b3Jlc1wiKTt9LFxyXG4vLyAgICAgZ2V0IEV2ZW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm90b3R5cGVzKFwic2V0TWF4TGlzdGVuZXJzXCIsIFwiZW1pdFwiKTt9LFxyXG5cclxuLy8gICAgIC8qIEd1aWxkIEluZm8sIFN0b3JlcywgYW5kIFV0aWxpdGllcyAqL1xyXG4vLyAgICAgZ2V0IEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFwiKTt9LFxyXG4vLyAgICAgZ2V0IFNvcnRlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTb3J0ZWRHdWlsZHNcIik7fSxcclxuLy8gICAgIGdldCBTZWxlY3RlZEd1aWxkU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRMYXN0U2VsZWN0ZWRHdWlsZElkXCIpO30sXHJcbi8vICAgICBnZXQgR3VpbGRTeW5jKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U3luY2VkR3VpbGRzXCIpO30sXHJcbi8vICAgICBnZXQgR3VpbGRJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QWNyb255bVwiKTt9LFxyXG4vLyAgICAgZ2V0IEd1aWxkQ2hhbm5lbHNTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldENoYW5uZWxzXCIsIFwiZ2V0RGVmYXVsdENoYW5uZWxcIik7fSxcclxuLy8gICAgIGdldCBHdWlsZE1lbWJlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TWVtYmVyXCIpO30sXHJcbi8vICAgICBnZXQgTWVtYmVyQ291bnRTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbWJlckNvdW50c1wiKTt9LFxyXG4vLyAgICAgZ2V0IEd1aWxkRW1vamlTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEVtb2ppc1wiKTt9LFxyXG4vLyAgICAgZ2V0IEd1aWxkQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIm1hcmtHdWlsZEFzUmVhZFwiKTt9LFxyXG4vLyAgICAgZ2V0IEd1aWxkUGVybWlzc2lvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRHdWlsZFBlcm1pc3Npb25zXCIpO30sXHJcblxyXG4vLyAgICAgLyogQ2hhbm5lbCBTdG9yZSAmIEFjdGlvbnMgKi9cclxuLy8gICAgIGdldCBDaGFubmVsU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDaGFubmVsc1wiLCBcImdldERNRnJvbVVzZXJJZFwiKTt9LFxyXG4vLyAgICAgZ2V0IFNlbGVjdGVkQ2hhbm5lbFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0TGFzdFNlbGVjdGVkQ2hhbm5lbElkXCIpO30sXHJcbi8vICAgICBnZXQgQ2hhbm5lbEFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcbi8vICAgICBnZXQgUHJpdmF0ZUNoYW5uZWxBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3BlblByaXZhdGVDaGFubmVsXCIpO30sXHJcbi8vICAgICBnZXQgQ2hhbm5lbFNlbGVjdG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwic2VsZWN0R3VpbGRcIiwgXCJzZWxlY3RDaGFubmVsXCIpO30sXHJcblxyXG4vLyAgICAgLyogQ3VycmVudCBVc2VyIEluZm8sIFN0YXRlIGFuZCBTZXR0aW5ncyAqL1xyXG4vLyAgICAgZ2V0IFVzZXJJbmZvU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRUb2tlblwiKTt9LFxyXG4vLyAgICAgZ2V0IFVzZXJTZXR0aW5nc1N0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ3VpbGRQb3NpdGlvbnNcIik7fSxcclxuLy8gICAgIGdldCBBY2NvdW50TWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInJlZ2lzdGVyXCIsIFwibG9naW5cIik7fSxcclxuLy8gICAgIGdldCBVc2VyU2V0dGluZ3NVcGRhdGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidXBkYXRlUmVtb3RlU2V0dGluZ3NcIik7fSxcclxuLy8gICAgIGdldCBPbmxpbmVXYXRjaGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNPbmxpbmVcIik7fSxcclxuLy8gICAgIGdldCBDdXJyZW50VXNlcklkbGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJZGxlVGltZVwiKTt9LFxyXG4vLyAgICAgZ2V0IFJlbGF0aW9uc2hpcFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNCbG9ja2VkXCIsIFwiZ2V0RnJpZW5kSURzXCIpO30sXHJcbi8vICAgICBnZXQgUmVsYXRpb25zaGlwTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFJlbGF0aW9uc2hpcFwiKTt9LFxyXG4vLyAgICAgZ2V0IE1lbnRpb25TdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE1lbnRpb25zXCIpO30sXHJcblxyXG4vLyAgICAgLyogVXNlciBTdG9yZXMgYW5kIFV0aWxzICovXHJcbi8vICAgICBnZXQgVXNlclN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0Q3VycmVudFVzZXJcIik7fSxcclxuLy8gICAgIGdldCBVc2VyU3RhdHVzU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRTdGF0dXNcIiwgXCJnZXRTdGF0ZVwiKTt9LFxyXG4vLyAgICAgZ2V0IFVzZXJUeXBpbmdTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzVHlwaW5nXCIpO30sXHJcbi8vICAgICBnZXQgVXNlckFjdGl2aXR5U3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBY3Rpdml0eVwiKTt9LFxyXG4vLyAgICAgZ2V0IFVzZXJOYW1lUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXROYW1lXCIpO30sXHJcbi8vICAgICBnZXQgVXNlck5vdGVTdG9yZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE5vdGVcIik7fSxcclxuLy8gICAgIGdldCBVc2VyTm90ZUFjdGlvbnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ1cGRhdGVOb3RlXCIpO30sXHJcblxyXG4vLyAgICAgLyogRW1vamkgU3RvcmUgYW5kIFV0aWxzICovXHJcbi8vICAgICBnZXQgRW1vamlJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaXNFbW9qaURpc2FibGVkXCIpO30sXHJcbi8vICAgICBnZXQgRW1vamlVdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldEd1aWxkRW1vamlcIik7fSxcclxuLy8gICAgIGdldCBFbW9qaVN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QnlDYXRlZ29yeVwiLCBcIkVNT0pJX05BTUVfUkVcIik7fSxcclxuXHJcbi8vICAgICAvKiBJbnZpdGUgU3RvcmUgYW5kIFV0aWxzICovXHJcbi8vICAgICBnZXQgSW52aXRlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRJbnZpdGVzXCIpO30sXHJcbi8vICAgICBnZXQgSW52aXRlUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmaW5kSW52aXRlXCIpO30sXHJcbi8vICAgICBnZXQgSW52aXRlQWN0aW9ucygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFjY2VwdEludml0ZVwiKTt9LFxyXG5cclxuLy8gICAgIC8qIERpc2NvcmQgT2JqZWN0cyAmIFV0aWxzICovXHJcbi8vICAgICBnZXQgRGlzY29yZENvbnN0YW50cygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIlBlcm1pc3Npb25zXCIsIFwiQWN0aXZpdHlUeXBlc1wiLCBcIlN0YXR1c1R5cGVzXCIpO30sXHJcbi8vICAgICBnZXQgRGlzY29yZFBlcm1pc3Npb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUGVybWlzc2lvbnNcIiwgXCJBY3Rpdml0eVR5cGVzXCIsIFwiU3RhdHVzVHlwZXNcIikuUGVybWlzc2lvbnM7fSxcclxuLy8gICAgIGdldCBQZXJtaXNzaW9uVXRpbHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRIaWdoZXN0Um9sZVwiKTt9LFxyXG4vLyAgICAgZ2V0IENvbG9yQ29udmVydGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGV4MmludFwiKTt9LFxyXG4vLyAgICAgZ2V0IENvbG9yU2hhZGVyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZGFya2VuXCIpO30sXHJcbi8vICAgICBnZXQgVGlueUNvbG9yKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3RvdHlwZXMoXCJ0b1JnYlwiKTt9LFxyXG4vLyAgICAgZ2V0IENsYXNzUmVzb2x2ZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRDbGFzc1wiKTt9LFxyXG4vLyAgICAgZ2V0IEJ1dHRvbkRhdGEoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdXR0b25TaXplc1wiKTt9LFxyXG4vLyAgICAgZ2V0IEljb25OYW1lcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkljb25OYW1lc1wiKTt9LFxyXG4vLyAgICAgZ2V0IE5hdmlnYXRpb25VdGlscygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInRyYW5zaXRpb25Ub1wiLCBcInJlcGxhY2VXaXRoXCIsIFwiZ2V0SGlzdG9yeVwiKTt9LFxyXG5cclxuLy8gICAgIC8qIERpc2NvcmQgTWVzc2FnZXMgKi9cclxuLy8gICAgIGdldCBNZXNzYWdlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRNZXNzYWdlc1wiKTt9LFxyXG4vLyAgICAgZ2V0IE1lc3NhZ2VBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwianVtcFRvTWVzc2FnZVwiLCBcIl9zZW5kTWVzc2FnZVwiKTt9LFxyXG4vLyAgICAgZ2V0IE1lc3NhZ2VRdWV1ZSgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImVucXVldWVcIik7fSxcclxuLy8gICAgIGdldCBNZXNzYWdlUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiY3JlYXRlTWVzc2FnZVwiLCBcInBhcnNlXCIsIFwidW5wYXJzZVwiKTt9LFxyXG5cclxuLy8gICAgIC8qIFRleHQgUHJvY2Vzc2luZyAqL1xyXG4vLyAgICAgZ2V0IGhsanMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJoaWdobGlnaHRcIiwgXCJoaWdobGlnaHRCbG9ja1wiKTt9LFxyXG4vLyAgICAgZ2V0IFNpbXBsZU1hcmtkb3duKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGFyc2VCbG9ja1wiLCBcInBhcnNlSW5saW5lXCIsIFwiZGVmYXVsdE91dHB1dFwiKTt9LFxyXG5cclxuLy8gICAgIC8qIEV4cGVyaW1lbnRzICovXHJcbi8vICAgICBnZXQgRXhwZXJpbWVudFN0b3JlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0RXhwZXJpbWVudE92ZXJyaWRlc1wiKTt9LFxyXG4vLyAgICAgZ2V0IEV4cGVyaW1lbnRzTWFuYWdlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRGV2ZWxvcGVyXCIpO30sXHJcbi8vICAgICBnZXQgQ3VycmVudEV4cGVyaW1lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRFeHBlcmltZW50SWRcIik7fSxcclxuXHJcbi8vICAgICAvKiBJbWFnZXMsIEF2YXRhcnMgYW5kIFV0aWxzICovXHJcbi8vICAgICBnZXQgSW1hZ2VSZXNvbHZlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldFVzZXJBdmF0YXJVUkxcIiwgXCJnZXRHdWlsZEljb25VUkxcIik7fSxcclxuLy8gICAgIGdldCBJbWFnZVV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0U2l6ZWRJbWFnZVNyY1wiKTt9LFxyXG4vLyAgICAgZ2V0IEF2YXRhckRlZmF1bHRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0VXNlckF2YXRhclVSTFwiLCBcIkRFRkFVTFRfQVZBVEFSU1wiKTt9LFxyXG5cclxuLy8gICAgIC8qIFdpbmRvdywgRE9NLCBIVE1MICovXHJcbi8vICAgICBnZXQgV2luZG93SW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImlzRm9jdXNlZFwiLCBcIndpbmRvd1NpemVcIik7fSxcclxuLy8gICAgIGdldCBUYWdJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVkFMSURfVEFHX05BTUVTXCIpO30sXHJcbi8vICAgICBnZXQgRE9NSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImNhblVzZURPTVwiKTt9LFxyXG5cclxuLy8gICAgIC8qIExvY2FsZS9Mb2NhdGlvbiBhbmQgVGltZSAqL1xyXG4vLyAgICAgZ2V0IExvY2FsZU1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRMb2NhbGVcIik7fSxcclxuLy8gICAgIGdldCBNb21lbnQoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJwYXJzZVpvbmVcIik7fSxcclxuLy8gICAgIGdldCBMb2NhdGlvbk1hbmFnZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJjcmVhdGVMb2NhdGlvblwiKTt9LFxyXG4vLyAgICAgZ2V0IFRpbWVzdGFtcHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJmcm9tVGltZXN0YW1wXCIpO30sXHJcbi8vICAgICBnZXQgVGltZUZvcm1hdHRlcigpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRhdGVGb3JtYXRcIik7fSxcclxuXHJcbi8vICAgICAvKiBTdHJpbmdzIGFuZCBVdGlscyAqL1xyXG4vLyAgICAgZ2V0IFN0cmluZ3MoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJNZXNzYWdlc1wiKS5NZXNzYWdlczt9LFxyXG4vLyAgICAgZ2V0IFN0cmluZ0Zvcm1hdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJhXCIsIFwielwiKTt9LFxyXG4vLyAgICAgZ2V0IFN0cmluZ1V0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidG9BU0NJSVwiKTt9LFxyXG5cclxuLy8gICAgIC8qIFVSTHMgYW5kIFV0aWxzICovXHJcbi8vICAgICBnZXQgVVJMUGFyc2VyKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiVXJsXCIsIFwicGFyc2VcIik7fSxcclxuLy8gICAgIGdldCBFeHRyYVVSTHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRBcnRpY2xlVVJMXCIpO30sXHJcblxyXG4vLyAgICAgLyogRHJhZyAmIERyb3AgKi9cclxuLy8gICAgIGdldCBETkRBY3Rpb25zKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiYmVnaW5EcmFnXCIpO30sXHJcbi8vICAgICBnZXQgRE5EU291cmNlcygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImFkZFRhcmdldFwiKTt9LFxyXG4vLyAgICAgZ2V0IERORE9iamVjdHMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJEcmFnU291cmNlXCIpO30sXHJcblxyXG4vLyAgICAgLyogTWVkaWEgU3R1ZmYgKEF1ZGlvL1ZpZGVvKSAqL1xyXG4vLyAgICAgZ2V0IE1lZGlhRGV2aWNlSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkNvZGVjc1wiLCBcIlNVUFBPUlRFRF9CUk9XU0VSU1wiKTt9LFxyXG4vLyAgICAgZ2V0IE1lZGlhSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImdldE91dHB1dFZvbHVtZVwiKTt9LFxyXG4vLyAgICAgZ2V0IE1lZGlhRW5naW5lSW5mbygpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIk1lZGlhRW5naW5lRmVhdHVyZXNcIik7fSxcclxuLy8gICAgIGdldCBWb2ljZUluZm8oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJFY2hvQ2FuY2VsbGF0aW9uXCIpO30sXHJcbi8vICAgICBnZXQgVmlkZW9TdHJlYW0oKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXRWaWRlb1N0cmVhbVwiKTt9LFxyXG4vLyAgICAgZ2V0IFNvdW5kTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwicGxheVNvdW5kXCIpO30sXHJcblxyXG4vLyAgICAgLyogRWxlY3Ryb24gJiBPdGhlciBJbnRlcm5hbHMgd2l0aCBVdGlscyovXHJcbi8vICAgICBnZXQgRWxlY3Ryb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzZXRCYWRnZVwiKTt9LFxyXG4vLyAgICAgZ2V0IERpc3BhdGNoZXIoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJkaXJ0eURpc3BhdGNoXCIpO30sXHJcbi8vICAgICBnZXQgUGF0aFV0aWxzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiaGFzQmFzZW5hbWVcIik7fSxcclxuLy8gICAgIGdldCBOb3RpZmljYXRpb25Nb2R1bGUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzaG93Tm90aWZpY2F0aW9uXCIpO30sXHJcbi8vICAgICBnZXQgUm91dGVyTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiUm91dGVyXCIpO30sXHJcbi8vICAgICBnZXQgQVBJTW9kdWxlKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZ2V0QVBJQmFzZVVSTFwiKTt9LFxyXG4vLyAgICAgZ2V0IEFuYWx5dGljRXZlbnRzKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQW5hbHl0aWNFdmVudENvbmZpZ3NcIik7fSxcclxuLy8gICAgIGdldCBLZXlHZW5lcmF0b3IoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UmVnZXgoL1wiYmluYXJ5XCIvKTt9LFxyXG4vLyAgICAgZ2V0IEJ1ZmZlcnMoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJCdWZmZXJcIiwgXCJrTWF4TGVuZ3RoXCIpO30sXHJcbi8vICAgICBnZXQgRGV2aWNlU3RvcmUoKSB7cmV0dXJuIFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJnZXREZXZpY2VzXCIpO30sXHJcbi8vICAgICBnZXQgU29mdHdhcmVJbmZvKCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwib3NcIik7fSxcclxuLy8gICAgIGdldCBDdXJyZW50Q29udGV4dCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInNldFRhZ3NDb250ZXh0XCIpO31cclxuLy8gfSk7XHJcblxyXG4vLyBleHBvcnQge0Rpc2NvcmRNb2R1bGVzfTtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBtb2R1bGUgbWF0Y2hlcyBhIHNldCBvZiBwYXJhbWV0ZXJzLlxyXG4gKiBAY2FsbGJhY2sgbW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyXHJcbiAqIEBwYXJhbSB7Kn0gbW9kdWxlIC0gbW9kdWxlIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgdGhlIG1vZHVsZSBtYXRjaGVzIHRoZSBmaWx0ZXIsIGZhbHNlIG90aGVyd2lzZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBGaWx0ZXJzIGZvciB1c2Ugd2l0aCB7QGxpbmsgbW9kdWxlOldlYnBhY2tNb2R1bGVzfSBidXQgbWF5IHByb3ZlIHVzZWZ1bCBlbHNld2hlcmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmlsdGVycyB7XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHNldCBvZiBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBwcm9wcyAtIEFycmF5IG9mIHByb3BlcnR5IG5hbWVzXHJcbiAgICAgKiBAcGFyYW0ge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gZmlsdGVyIC0gQWRkaXRpb25hbCBmaWx0ZXJcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IC0gQSBmaWx0ZXIgdGhhdCBjaGVja3MgZm9yIGEgc2V0IG9mIHByb3BlcnRpZXNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ5UHJvcGVydGllcyhwcm9wcywgZmlsdGVyID0gbSA9PiBtKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZpbHRlcihtb2R1bGUpO1xyXG4gICAgICAgICAgICBpZiAoIWNvbXBvbmVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMuZXZlcnkocHJvcGVydHkgPT4gY29tcG9uZW50W3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEge0BsaW5rIG1vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gdGhhdCBmaWx0ZXJzIGJ5IGEgc2V0IG9mIHByb3BlcnRpZXMgb24gdGhlIG9iamVjdCdzIHByb3RvdHlwZS5cclxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmllbGRzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXNcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllcyBvbiB0aGUgb2JqZWN0J3MgcHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBieVByb3RvdHlwZUZpZWxkcyhmaWVsZHMsIGZpbHRlciA9IG0gPT4gbSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBmaWx0ZXIobW9kdWxlKTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWVsZHMuZXZlcnkoZmllbGQgPT4gY29tcG9uZW50LnByb3RvdHlwZVtmaWVsZF0gIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHJlZ2V4LlxyXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IHNlYXJjaCAtIEEgUmVnRXhwIHRvIGNoZWNrIG9uIHRoZSBtb2R1bGVcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnlDb2RlKHNlYXJjaCwgZmlsdGVyID0gbSA9PiBtKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGZpbHRlcihtb2R1bGUpO1xyXG4gICAgICAgICAgICBpZiAoIW1ldGhvZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kLnRvU3RyaW5nKFtdKS5zZWFyY2goc2VhcmNoKSAhPT0gLTE7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHNlYXJjaCAtIEEgUmVnRXhwIHRvIGNoZWNrIG9uIHRoZSBtb2R1bGVcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IC0gQSBmaWx0ZXIgdGhhdCBjaGVja3MgZm9yIGEgc2V0IG9mIHN0cmluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ5U3RyaW5nKC4uLnN0cmluZ3MpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlU3RyaW5nID0gbW9kdWxlLnRvU3RyaW5nKFtdKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzIG9mIHN0cmluZ3MpIHtcclxuICAgICAgICAgICAgICAgIGlmICghbW9kdWxlU3RyaW5nLmluY2x1ZGVzKHMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHNldCBvZiBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIHRoZSBtb2R1bGUgc2hvdWxkIGhhdmVcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnlEaXNwbGF5TmFtZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGUgJiYgbW9kdWxlLmRpc3BsYXlOYW1lID09PSBuYW1lO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYSBjb21iaW5lZCB7QGxpbmsgbW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmcm9tIGEgbGlzdCBvZiBmaWx0ZXJzLlxyXG4gICAgICogQHBhcmFtIHsuLi5tb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IGZpbHRlcnMgLSBBIGxpc3Qgb2YgZmlsdGVyc1xyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBDb21iaW5hdG9yeSBmaWx0ZXIgb2YgYWxsIGFyZ3VtZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY29tYmluZSguLi5maWx0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzLmV2ZXJ5KGZpbHRlciA9PiBmaWx0ZXIobW9kdWxlKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2VicGFja01vZHVsZXMge1xyXG5cclxuICAgIHN0YXRpYyBmaW5kKGZpbHRlciwgZmlyc3QgPSB0cnVlKSB7cmV0dXJuIHRoaXMuZ2V0TW9kdWxlKGZpbHRlciwgZmlyc3QpO31cclxuICAgIHN0YXRpYyBmaW5kQWxsKGZpbHRlcikge3JldHVybiB0aGlzLmdldE1vZHVsZShmaWx0ZXIsIGZhbHNlKTt9XHJcbiAgICBzdGF0aWMgZmluZEJ5VW5pcXVlUHJvcGVydGllcyhwcm9wcywgZmlyc3QgPSB0cnVlKSB7cmV0dXJuIGZpcnN0ID8gdGhpcy5nZXRCeVByb3BzKC4uLnByb3BzKSA6IHRoaXMuZ2V0QWxsQnlQcm9wcyguLi5wcm9wcyk7fVxyXG4gICAgc3RhdGljIGZpbmRCeURpc3BsYXlOYW1lKG5hbWUpIHtyZXR1cm4gdGhpcy5nZXRCeURpc3BsYXlOYW1lKG5hbWUpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIHVzaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmlsdGVyIEEgZnVuY3Rpb24gdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGZpcnN0IFdoZXRoZXIgdG8gcmV0dXJuIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nIG1vZHVsZVxyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0TW9kdWxlKGZpbHRlciwgZmlyc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgICAgIGNvbnN0IHJtID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBtb2R1bGVzW2luZGV4XTtcclxuICAgICAgICAgICAgY29uc3Qge2V4cG9ydHN9ID0gbW9kdWxlO1xyXG4gICAgICAgICAgICBsZXQgZm91bmRNb2R1bGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFleHBvcnRzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGV4cG9ydHMuX19lc01vZHVsZSAmJiBleHBvcnRzLmRlZmF1bHQgJiYgZmlsdGVyKGV4cG9ydHMuZGVmYXVsdCkpIGZvdW5kTW9kdWxlID0gZXhwb3J0cy5kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyKGV4cG9ydHMpKSBmb3VuZE1vZHVsZSA9IGV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmICghZm91bmRNb2R1bGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QpIHJldHVybiBmb3VuZE1vZHVsZTtcclxuICAgICAgICAgICAgcm0ucHVzaChmb3VuZE1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaXJzdCB8fCBybS5sZW5ndGggPT0gMCA/IHVuZGVmaW5lZCA6IHJtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIG1vZHVsZXMgbWF0Y2hpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIgQSBmdW5jdGlvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldE1vZHVsZXMoZmlsdGVyKSB7cmV0dXJuIHRoaXMuZ2V0TW9kdWxlKGZpbHRlciwgZmFsc2UpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIGJ5IGl0cyBuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmFsbGJhY2sgQSBmdW5jdGlvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXMgaWYgbm90IGZpbmRpbmcgYSBrbm93biBtb2R1bGVcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldE1vZHVsZUJ5TmFtZShuYW1lLCBmYWxsYmFjaykge1xyXG4gICAgICAgIGlmIChEaXNjb3JkTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgcmV0dXJuIERpc2NvcmRNb2R1bGVzW25hbWVdO1xyXG4gICAgICAgIGlmICghZmFsbGJhY2spIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5nZXRNb2R1bGUoZmFsbGJhY2ssIHRydWUpO1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPyBEaXNjb3JkTW9kdWxlc1tuYW1lXSA9IG1vZHVsZSA6IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIGJ5IGl0cyBkaXNwbGF5IG5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBtb2R1bGVcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJ5RGlzcGxheU5hbWUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5RGlzcGxheU5hbWUobmFtZSksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBtb2R1bGUgdXNpbmcgaXRzIGNvZGUuXHJcbiAgICAgKiBAcGFyYW0ge1JlZ0V4fSByZWdleCBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZmlyc3QgV2hldGhlciB0byByZXR1cm4gdGhlIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nIG1vZHVsZVxyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QnlSZWdleChyZWdleCwgZmlyc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlDb2RlKHJlZ2V4KSwgZmlyc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBzaW5nbGUgbW9kdWxlIHVzaW5nIHByb3BlcnRpZXMgb24gaXRzIHByb3RvdHlwZS5cclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm90b3R5cGVzIFByb3BlcnRpZXMgdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRCeVByb3RvdHlwZXMoLi4ucHJvdG90eXBlcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5UHJvdG90eXBlRmllbGRzKHByb3RvdHlwZXMpLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGFsbCBtb2R1bGVzIHdpdGggYSBzZXQgb2YgcHJvcGVydGllcyBvZiBpdHMgcHJvdG90eXBlLlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IHByb3RvdHlwZXMgUHJvcGVydGllcyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEFsbEJ5UHJvdG90eXBlcyguLi5wcm90b3R5cGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlQcm90b3R5cGVGaWVsZHMocHJvdG90eXBlcyksIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgc2luZ2xlIG1vZHVsZSB1c2luZyBpdHMgb3duIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gcHJvcHMgUHJvcGVydGllcyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJ5UHJvcHMoLi4ucHJvcHMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieVByb3BlcnRpZXMocHJvcHMpLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGFsbCBtb2R1bGVzIHdpdGggYSBzZXQgb2YgcHJvcGVydGllcy5cclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm9wcyBQcm9wZXJ0aWVzIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlc1xyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QWxsQnlQcm9wcyguLi5wcm9wcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5UHJvcGVydGllcyhwcm9wcyksIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgc2luZ2xlIG1vZHVsZSB1c2luZyBhIHNldCBvZiBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHByb3BzIFN0cmluZ3MgdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRCeVN0cmluZyguLi5zdHJpbmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlTdHJpbmcoLi4uc3RyaW5ncyksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIG1vZHVsZXMgd2l0aCBhIHNldCBvZiBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHN0cmluZ3MgU3RyaW5ncyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEFsbEJ5U3RyaW5nKC4uLnN0cmluZ3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieVN0cmluZyguLi5zdHJpbmdzKSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzY29yZCdzIF9fd2VicGFja19yZXF1aXJlX18gZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXQgcmVxdWlyZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZSkgcmV0dXJuIHRoaXMuX3JlcXVpcmU7XHJcbiAgICAgICAgY29uc3QgaWQgPSBcImJiZC13ZWJwYWNrbW9kdWxlc1wiO1xyXG4gICAgICAgIGNvbnN0IF9fd2VicGFja19yZXF1aXJlX18gPSB0eXBlb2Yod2luZG93LndlYnBhY2tKc29ucCkgPT0gXCJmdW5jdGlvblwiID8gd2luZG93LndlYnBhY2tKc29ucChbXSwge1xyXG4gICAgICAgICAgICBbaWRdOiAobW9kdWxlLCBleHBvcnRzLCBfX2ludGVybmFsX3JlcXVpcmVfXykgPT4gZXhwb3J0cy5kZWZhdWx0ID0gX19pbnRlcm5hbF9yZXF1aXJlX19cclxuICAgICAgICB9LCBbaWRdKS5kZWZhdWx0IDogd2luZG93LndlYnBhY2tKc29ucC5wdXNoKFtbXSwge1xyXG4gICAgICAgICAgICBbaWRdOiAobW9kdWxlLCBleHBvcnRzLCBfX2ludGVybmFsX3JlcXVpcmVfXykgPT4gbW9kdWxlLmV4cG9ydHMgPSBfX2ludGVybmFsX3JlcXVpcmVfX1xyXG4gICAgICAgIH0sIFtbaWRdXV0pO1xyXG4gICAgICAgIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1baWRdO1xyXG4gICAgICAgIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbaWRdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWxsIGxvYWRlZCBtb2R1bGVzLlxyXG4gICAgICogQHJldHVybiB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRBbGxNb2R1bGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmUuYztcclxuICAgIH1cclxuXHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/webpackmodules.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"Filters\", function() { return Filters; });\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return WebpackModules; });\n/**\r\n * Allows for grabbing and searching through Discord's webpacked modules.\r\n * @module WebpackModules\r\n * @version 0.0.2\r\n */\n// import DiscordModules from \"./discordmodules\";\n\n/**\r\n * Checks if a given module matches a set of parameters.\r\n * @callback module:WebpackModules.Filters~filter\r\n * @param {*} module - module to check\r\n * @returns {boolean} - True if the module matches the filter, false otherwise\r\n */\n\n/**\r\n * Filters for use with {@link module:WebpackModules} but may prove useful elsewhere.\r\n */\nclass Filters {\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.\r\n * @param {Array} props - Array of property names\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n static byProperties(props, filter = m => m) {\n return module => {\n const component = filter(module);\n if (!component) return false;\n return props.every(property => component[property] !== undefined);\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties on the object's prototype.\r\n * @param {Array} fields - Array of property names\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties on the object's prototype\r\n */\n\n\n static byPrototypeFields(fields, filter = m => m) {\n return module => {\n const component = filter(module);\n if (!component) return false;\n if (!component.prototype) return false;\n return fields.every(field => component.prototype[field] !== undefined);\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a regex.\r\n * @param {RegExp} search - A RegExp to check on the module\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n\n\n static byCode(search, filter = m => m) {\n return module => {\n const method = filter(module);\n if (!method) return false;\n return method.toString([]).search(search) !== -1;\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by strings.\r\n * @param {...String} search - A RegExp to check on the module\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of strings\r\n */\n\n\n static byString(...strings) {\n return module => {\n const moduleString = module.toString([]);\n\n for (const s of strings) {\n if (!moduleString.includes(s)) return false;\n }\n\n return true;\n };\n }\n /**\r\n * Generates a {@link module:WebpackModules.Filters~filter} that filters by a set of properties.\r\n * @param {string} name - Name the module should have\r\n * @param {module:WebpackModules.Filters~filter} filter - Additional filter\r\n * @returns {module:WebpackModules.Filters~filter} - A filter that checks for a set of properties\r\n */\n\n\n static byDisplayName(name) {\n return module => {\n return module && module.displayName === name;\n };\n }\n /**\r\n * Generates a combined {@link module:WebpackModules.Filters~filter} from a list of filters.\r\n * @param {...module:WebpackModules.Filters~filter} filters - A list of filters\r\n * @returns {module:WebpackModules.Filters~filter} - Combinatory filter of all arguments\r\n */\n\n\n static combine(...filters) {\n return module => {\n return filters.every(filter => filter(module));\n };\n }\n\n}\nclass WebpackModules {\n static find(filter, first = true) {\n return this.getModule(filter, first);\n }\n\n static findAll(filter) {\n return this.getModule(filter, false);\n }\n\n static findByUniqueProperties(props, first = true) {\n return first ? this.getByProps(...props) : this.getAllByProps(...props);\n }\n\n static findByDisplayName(name) {\n return this.getByDisplayName(name);\n }\n /**\r\n * Finds a module using a filter function.\r\n * @param {Function} filter A function to use to filter modules\r\n * @param {Boolean} first Whether to return only the first matching module\r\n * @return {Any}\r\n */\n\n\n static getModule(filter, first = true) {\n const modules = this.getAllModules();\n const rm = [];\n\n for (const index in modules) {\n if (!modules.hasOwnProperty(index)) continue;\n const module = modules[index];\n const {\n exports\n } = module;\n let foundModule = null;\n if (!exports) continue;\n if (exports.__esModule && exports.default && filter(exports.default)) foundModule = exports.default;\n if (filter(exports)) foundModule = exports;\n if (!foundModule) continue;\n if (first) return foundModule;\n rm.push(foundModule);\n }\n\n return first || rm.length == 0 ? undefined : rm;\n }\n /**\r\n * Finds all modules matching a filter function.\r\n * @param {Function} filter A function to use to filter modules\r\n */\n\n\n static getModules(filter) {\n return this.getModule(filter, false);\n }\n /**\r\n * Finds a module by its name.\r\n * @param {String} name The name of the module\r\n * @param {Function} fallback A function to use to filter modules if not finding a known module\r\n * @return {Any}\r\n */\n // static getModuleByName(name, fallback) {\n // if (DiscordModules.hasOwnProperty(name)) return DiscordModules[name];\n // if (!fallback) return undefined;\n // const module = this.getModule(fallback, true);\n // return module ? DiscordModules[name] = module : undefined;\n // }\n\n /**\r\n * Finds a module by its display name.\r\n * @param {String} name The display name of the module\r\n * @return {Any}\r\n */\n\n\n static getByDisplayName(name) {\n return this.getModule(Filters.byDisplayName(name), true);\n }\n /**\r\n * Finds a module using its code.\r\n * @param {RegEx} regex A regular expression to use to filter modules\r\n * @param {Boolean} first Whether to return the only the first matching module\r\n * @return {Any}\r\n */\n\n\n static getByRegex(regex, first = true) {\n return this.getModule(Filters.byCode(regex), first);\n }\n /**\r\n * Finds a single module using properties on its prototype.\r\n * @param {...string} prototypes Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByPrototypes(...prototypes) {\n return this.getModule(Filters.byPrototypeFields(prototypes), true);\n }\n /**\r\n * Finds all modules with a set of properties of its prototype.\r\n * @param {...string} prototypes Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByPrototypes(...prototypes) {\n return this.getModule(Filters.byPrototypeFields(prototypes), false);\n }\n /**\r\n * Finds a single module using its own properties.\r\n * @param {...string} props Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByProps(...props) {\n return this.getModule(Filters.byProperties(props), true);\n }\n /**\r\n * Finds all modules with a set of properties.\r\n * @param {...string} props Properties to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByProps(...props) {\n return this.getModule(Filters.byProperties(props), false);\n }\n /**\r\n * Finds a single module using a set of strings.\r\n * @param {...String} props Strings to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getByString(...strings) {\n return this.getModule(Filters.byString(...strings), true);\n }\n /**\r\n * Finds all modules with a set of strings.\r\n * @param {...String} strings Strings to use to filter modules\r\n * @return {Any}\r\n */\n\n\n static getAllByString(...strings) {\n return this.getModule(Filters.byString(...strings), false);\n }\n /**\r\n * Discord's __webpack_require__ function.\r\n */\n\n\n static get require() {\n if (this._require) return this._require;\n const id = \"bbd-webpackmodules\";\n\n const __webpack_require__ = typeof window.webpackJsonp == \"function\" ? window.webpackJsonp([], {\n [id]: (module, exports, __internal_require__) => exports.default = __internal_require__\n }, [id]).default : window.webpackJsonp.push([[], {\n [id]: (module, exports, __internal_require__) => module.exports = __internal_require__\n }, [[id]]]);\n\n delete __webpack_require__.m[id];\n delete __webpack_require__.c[id];\n return this._require = __webpack_require__;\n }\n /**\r\n * Returns all loaded modules.\r\n * @return {Array}\r\n */\n\n\n static getAllModules() {\n return this.require.c;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvd2VicGFja21vZHVsZXMuanM/OWIyNyJdLCJuYW1lcyI6WyJGaWx0ZXJzIiwiYnlQcm9wZXJ0aWVzIiwicHJvcHMiLCJmaWx0ZXIiLCJtIiwibW9kdWxlIiwiY29tcG9uZW50IiwiZXZlcnkiLCJwcm9wZXJ0eSIsInVuZGVmaW5lZCIsImJ5UHJvdG90eXBlRmllbGRzIiwiZmllbGRzIiwicHJvdG90eXBlIiwiZmllbGQiLCJieUNvZGUiLCJzZWFyY2giLCJtZXRob2QiLCJ0b1N0cmluZyIsImJ5U3RyaW5nIiwic3RyaW5ncyIsIm1vZHVsZVN0cmluZyIsInMiLCJpbmNsdWRlcyIsImJ5RGlzcGxheU5hbWUiLCJuYW1lIiwiZGlzcGxheU5hbWUiLCJjb21iaW5lIiwiZmlsdGVycyIsIldlYnBhY2tNb2R1bGVzIiwiZmluZCIsImZpcnN0IiwiZ2V0TW9kdWxlIiwiZmluZEFsbCIsImZpbmRCeVVuaXF1ZVByb3BlcnRpZXMiLCJnZXRCeVByb3BzIiwiZ2V0QWxsQnlQcm9wcyIsImZpbmRCeURpc3BsYXlOYW1lIiwiZ2V0QnlEaXNwbGF5TmFtZSIsIm1vZHVsZXMiLCJnZXRBbGxNb2R1bGVzIiwicm0iLCJpbmRleCIsImhhc093blByb3BlcnR5IiwiZXhwb3J0cyIsImZvdW5kTW9kdWxlIiwiX19lc01vZHVsZSIsImRlZmF1bHQiLCJwdXNoIiwibGVuZ3RoIiwiZ2V0TW9kdWxlcyIsImdldEJ5UmVnZXgiLCJyZWdleCIsImdldEJ5UHJvdG90eXBlcyIsInByb3RvdHlwZXMiLCJnZXRBbGxCeVByb3RvdHlwZXMiLCJnZXRCeVN0cmluZyIsImdldEFsbEJ5U3RyaW5nIiwicmVxdWlyZSIsIl9yZXF1aXJlIiwiaWQiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwid2luZG93Iiwid2VicGFja0pzb25wIiwiX19pbnRlcm5hbF9yZXF1aXJlX18iLCJjIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTs7Ozs7QUFNQTs7QUFFQTs7Ozs7OztBQU9BOzs7QUFHTyxNQUFNQSxPQUFOLENBQWM7QUFDakI7Ozs7OztBQU1BLFNBQU9DLFlBQVAsQ0FBb0JDLEtBQXBCLEVBQTJCQyxNQUFNLEdBQUdDLENBQUMsSUFBSUEsQ0FBekMsRUFBNEM7QUFDeEMsV0FBT0MsTUFBTSxJQUFJO0FBQ2IsWUFBTUMsU0FBUyxHQUFHSCxNQUFNLENBQUNFLE1BQUQsQ0FBeEI7QUFDQSxVQUFJLENBQUNDLFNBQUwsRUFBZ0IsT0FBTyxLQUFQO0FBQ2hCLGFBQU9KLEtBQUssQ0FBQ0ssS0FBTixDQUFZQyxRQUFRLElBQUlGLFNBQVMsQ0FBQ0UsUUFBRCxDQUFULEtBQXdCQyxTQUFoRCxDQUFQO0FBQ0gsS0FKRDtBQUtIO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT0MsaUJBQVAsQ0FBeUJDLE1BQXpCLEVBQWlDUixNQUFNLEdBQUdDLENBQUMsSUFBSUEsQ0FBL0MsRUFBa0Q7QUFDOUMsV0FBT0MsTUFBTSxJQUFJO0FBQ2IsWUFBTUMsU0FBUyxHQUFHSCxNQUFNLENBQUNFLE1BQUQsQ0FBeEI7QUFDQSxVQUFJLENBQUNDLFNBQUwsRUFBZ0IsT0FBTyxLQUFQO0FBQ2hCLFVBQUksQ0FBQ0EsU0FBUyxDQUFDTSxTQUFmLEVBQTBCLE9BQU8sS0FBUDtBQUMxQixhQUFPRCxNQUFNLENBQUNKLEtBQVAsQ0FBYU0sS0FBSyxJQUFJUCxTQUFTLENBQUNNLFNBQVYsQ0FBb0JDLEtBQXBCLE1BQStCSixTQUFyRCxDQUFQO0FBQ0gsS0FMRDtBQU1IO0FBRUQ7Ozs7Ozs7O0FBTUEsU0FBT0ssTUFBUCxDQUFjQyxNQUFkLEVBQXNCWixNQUFNLEdBQUdDLENBQUMsSUFBSUEsQ0FBcEMsRUFBdUM7QUFDbkMsV0FBT0MsTUFBTSxJQUFJO0FBQ2IsWUFBTVcsTUFBTSxHQUFHYixNQUFNLENBQUNFLE1BQUQsQ0FBckI7QUFDQSxVQUFJLENBQUNXLE1BQUwsRUFBYSxPQUFPLEtBQVA7QUFDYixhQUFPQSxNQUFNLENBQUNDLFFBQVAsQ0FBZ0IsRUFBaEIsRUFBb0JGLE1BQXBCLENBQTJCQSxNQUEzQixNQUF1QyxDQUFDLENBQS9DO0FBQ0gsS0FKRDtBQUtIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPRyxRQUFQLENBQWdCLEdBQUdDLE9BQW5CLEVBQTRCO0FBQ3hCLFdBQU9kLE1BQU0sSUFBSTtBQUNiLFlBQU1lLFlBQVksR0FBR2YsTUFBTSxDQUFDWSxRQUFQLENBQWdCLEVBQWhCLENBQXJCOztBQUNBLFdBQUssTUFBTUksQ0FBWCxJQUFnQkYsT0FBaEIsRUFBeUI7QUFDckIsWUFBSSxDQUFDQyxZQUFZLENBQUNFLFFBQWIsQ0FBc0JELENBQXRCLENBQUwsRUFBK0IsT0FBTyxLQUFQO0FBQ2xDOztBQUNELGFBQU8sSUFBUDtBQUNILEtBTkQ7QUFPSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU9FLGFBQVAsQ0FBcUJDLElBQXJCLEVBQTJCO0FBQ3ZCLFdBQU9uQixNQUFNLElBQUk7QUFDYixhQUFPQSxNQUFNLElBQUlBLE1BQU0sQ0FBQ29CLFdBQVAsS0FBdUJELElBQXhDO0FBQ0gsS0FGRDtBQUdIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPRSxPQUFQLENBQWUsR0FBR0MsT0FBbEIsRUFBMkI7QUFDdkIsV0FBT3RCLE1BQU0sSUFBSTtBQUNiLGFBQU9zQixPQUFPLENBQUNwQixLQUFSLENBQWNKLE1BQU0sSUFBSUEsTUFBTSxDQUFDRSxNQUFELENBQTlCLENBQVA7QUFDSCxLQUZEO0FBR0g7O0FBaEZnQjtBQW1GTixNQUFNdUIsY0FBTixDQUFxQjtBQUVoQyxTQUFPQyxJQUFQLENBQVkxQixNQUFaLEVBQW9CMkIsS0FBSyxHQUFHLElBQTVCLEVBQWtDO0FBQUMsV0FBTyxLQUFLQyxTQUFMLENBQWU1QixNQUFmLEVBQXVCMkIsS0FBdkIsQ0FBUDtBQUFzQzs7QUFDekUsU0FBT0UsT0FBUCxDQUFlN0IsTUFBZixFQUF1QjtBQUFDLFdBQU8sS0FBSzRCLFNBQUwsQ0FBZTVCLE1BQWYsRUFBdUIsS0FBdkIsQ0FBUDtBQUFzQzs7QUFDOUQsU0FBTzhCLHNCQUFQLENBQThCL0IsS0FBOUIsRUFBcUM0QixLQUFLLEdBQUcsSUFBN0MsRUFBbUQ7QUFBQyxXQUFPQSxLQUFLLEdBQUcsS0FBS0ksVUFBTCxDQUFnQixHQUFHaEMsS0FBbkIsQ0FBSCxHQUErQixLQUFLaUMsYUFBTCxDQUFtQixHQUFHakMsS0FBdEIsQ0FBM0M7QUFBeUU7O0FBQzdILFNBQU9rQyxpQkFBUCxDQUF5QlosSUFBekIsRUFBK0I7QUFBQyxXQUFPLEtBQUthLGdCQUFMLENBQXNCYixJQUF0QixDQUFQO0FBQW9DO0FBRXBFOzs7Ozs7OztBQU1BLFNBQU9PLFNBQVAsQ0FBaUI1QixNQUFqQixFQUF5QjJCLEtBQUssR0FBRyxJQUFqQyxFQUF1QztBQUNuQyxVQUFNUSxPQUFPLEdBQUcsS0FBS0MsYUFBTCxFQUFoQjtBQUNBLFVBQU1DLEVBQUUsR0FBRyxFQUFYOztBQUNBLFNBQUssTUFBTUMsS0FBWCxJQUFvQkgsT0FBcEIsRUFBNkI7QUFDekIsVUFBSSxDQUFDQSxPQUFPLENBQUNJLGNBQVIsQ0FBdUJELEtBQXZCLENBQUwsRUFBb0M7QUFDcEMsWUFBTXBDLE1BQU0sR0FBR2lDLE9BQU8sQ0FBQ0csS0FBRCxDQUF0QjtBQUNBLFlBQU07QUFBQ0U7QUFBRCxVQUFZdEMsTUFBbEI7QUFDQSxVQUFJdUMsV0FBVyxHQUFHLElBQWxCO0FBRUEsVUFBSSxDQUFDRCxPQUFMLEVBQWM7QUFDZCxVQUFJQSxPQUFPLENBQUNFLFVBQVIsSUFBc0JGLE9BQU8sQ0FBQ0csT0FBOUIsSUFBeUMzQyxNQUFNLENBQUN3QyxPQUFPLENBQUNHLE9BQVQsQ0FBbkQsRUFBc0VGLFdBQVcsR0FBR0QsT0FBTyxDQUFDRyxPQUF0QjtBQUN0RSxVQUFJM0MsTUFBTSxDQUFDd0MsT0FBRCxDQUFWLEVBQXFCQyxXQUFXLEdBQUdELE9BQWQ7QUFDckIsVUFBSSxDQUFDQyxXQUFMLEVBQWtCO0FBQ2xCLFVBQUlkLEtBQUosRUFBVyxPQUFPYyxXQUFQO0FBQ1hKLFFBQUUsQ0FBQ08sSUFBSCxDQUFRSCxXQUFSO0FBQ0g7O0FBQ0QsV0FBT2QsS0FBSyxJQUFJVSxFQUFFLENBQUNRLE1BQUgsSUFBYSxDQUF0QixHQUEwQnZDLFNBQTFCLEdBQXNDK0IsRUFBN0M7QUFDSDtBQUVEOzs7Ozs7QUFJQSxTQUFPUyxVQUFQLENBQWtCOUMsTUFBbEIsRUFBMEI7QUFBQyxXQUFPLEtBQUs0QixTQUFMLENBQWU1QixNQUFmLEVBQXVCLEtBQXZCLENBQVA7QUFBc0M7QUFFakU7Ozs7OztBQU1BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7Ozs7OztBQUtBLFNBQU9rQyxnQkFBUCxDQUF3QmIsSUFBeEIsRUFBOEI7QUFDMUIsV0FBTyxLQUFLTyxTQUFMLENBQWUvQixPQUFPLENBQUN1QixhQUFSLENBQXNCQyxJQUF0QixDQUFmLEVBQTRDLElBQTVDLENBQVA7QUFDSDtBQUVEOzs7Ozs7OztBQU1BLFNBQU8wQixVQUFQLENBQWtCQyxLQUFsQixFQUF5QnJCLEtBQUssR0FBRyxJQUFqQyxFQUF1QztBQUNuQyxXQUFPLEtBQUtDLFNBQUwsQ0FBZS9CLE9BQU8sQ0FBQ2MsTUFBUixDQUFlcUMsS0FBZixDQUFmLEVBQXNDckIsS0FBdEMsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPc0IsZUFBUCxDQUF1QixHQUFHQyxVQUExQixFQUFzQztBQUNsQyxXQUFPLEtBQUt0QixTQUFMLENBQWUvQixPQUFPLENBQUNVLGlCQUFSLENBQTBCMkMsVUFBMUIsQ0FBZixFQUFzRCxJQUF0RCxDQUFQO0FBQ0g7QUFFRDs7Ozs7OztBQUtBLFNBQU9DLGtCQUFQLENBQTBCLEdBQUdELFVBQTdCLEVBQXlDO0FBQ3JDLFdBQU8sS0FBS3RCLFNBQUwsQ0FBZS9CLE9BQU8sQ0FBQ1UsaUJBQVIsQ0FBMEIyQyxVQUExQixDQUFmLEVBQXNELEtBQXRELENBQVA7QUFDSDtBQUVEOzs7Ozs7O0FBS0EsU0FBT25CLFVBQVAsQ0FBa0IsR0FBR2hDLEtBQXJCLEVBQTRCO0FBQ3hCLFdBQU8sS0FBSzZCLFNBQUwsQ0FBZS9CLE9BQU8sQ0FBQ0MsWUFBUixDQUFxQkMsS0FBckIsQ0FBZixFQUE0QyxJQUE1QyxDQUFQO0FBQ0g7QUFFRDs7Ozs7OztBQUtBLFNBQU9pQyxhQUFQLENBQXFCLEdBQUdqQyxLQUF4QixFQUErQjtBQUMzQixXQUFPLEtBQUs2QixTQUFMLENBQWUvQixPQUFPLENBQUNDLFlBQVIsQ0FBcUJDLEtBQXJCLENBQWYsRUFBNEMsS0FBNUMsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPcUQsV0FBUCxDQUFtQixHQUFHcEMsT0FBdEIsRUFBK0I7QUFDM0IsV0FBTyxLQUFLWSxTQUFMLENBQWUvQixPQUFPLENBQUNrQixRQUFSLENBQWlCLEdBQUdDLE9BQXBCLENBQWYsRUFBNkMsSUFBN0MsQ0FBUDtBQUNIO0FBRUQ7Ozs7Ozs7QUFLQSxTQUFPcUMsY0FBUCxDQUFzQixHQUFHckMsT0FBekIsRUFBa0M7QUFDOUIsV0FBTyxLQUFLWSxTQUFMLENBQWUvQixPQUFPLENBQUNrQixRQUFSLENBQWlCLEdBQUdDLE9BQXBCLENBQWYsRUFBNkMsS0FBN0MsQ0FBUDtBQUNIO0FBRUQ7Ozs7O0FBR0EsYUFBV3NDLE9BQVgsR0FBcUI7QUFDakIsUUFBSSxLQUFLQyxRQUFULEVBQW1CLE9BQU8sS0FBS0EsUUFBWjtBQUNuQixVQUFNQyxFQUFFLEdBQUcsb0JBQVg7O0FBQ0EsVUFBTUMsbUJBQW1CLEdBQUcsT0FBT0MsTUFBTSxDQUFDQyxZQUFkLElBQStCLFVBQS9CLEdBQTRDRCxNQUFNLENBQUNDLFlBQVAsQ0FBb0IsRUFBcEIsRUFBd0I7QUFDNUYsT0FBQ0gsRUFBRCxHQUFNLENBQUN0RCxNQUFELEVBQVNzQyxPQUFULEVBQWtCb0Isb0JBQWxCLEtBQTJDcEIsT0FBTyxDQUFDRyxPQUFSLEdBQWtCaUI7QUFEeUIsS0FBeEIsRUFFckUsQ0FBQ0osRUFBRCxDQUZxRSxFQUUvRGIsT0FGbUIsR0FFVGUsTUFBTSxDQUFDQyxZQUFQLENBQW9CZixJQUFwQixDQUF5QixDQUFDLEVBQUQsRUFBSztBQUM3QyxPQUFDWSxFQUFELEdBQU0sQ0FBQ3RELE1BQUQsRUFBU3NDLE9BQVQsRUFBa0JvQixvQkFBbEIsS0FBMkMxRCxNQUFNLENBQUNzQyxPQUFQLEdBQWlCb0I7QUFEckIsS0FBTCxFQUV6QyxDQUFDLENBQUNKLEVBQUQsQ0FBRCxDQUZ5QyxDQUF6QixDQUZuQjs7QUFLQSxXQUFPQyxtQkFBbUIsQ0FBQ3hELENBQXBCLENBQXNCdUQsRUFBdEIsQ0FBUDtBQUNBLFdBQU9DLG1CQUFtQixDQUFDSSxDQUFwQixDQUFzQkwsRUFBdEIsQ0FBUDtBQUNBLFdBQU8sS0FBS0QsUUFBTCxHQUFnQkUsbUJBQXZCO0FBQ0g7QUFFRDs7Ozs7O0FBSUEsU0FBT3JCLGFBQVAsR0FBdUI7QUFDbkIsV0FBTyxLQUFLa0IsT0FBTCxDQUFhTyxDQUFwQjtBQUNIOztBQWxKK0IiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy93ZWJwYWNrbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBBbGxvd3MgZm9yIGdyYWJiaW5nIGFuZCBzZWFyY2hpbmcgdGhyb3VnaCBEaXNjb3JkJ3Mgd2VicGFja2VkIG1vZHVsZXMuXHJcbiAqIEBtb2R1bGUgV2VicGFja01vZHVsZXNcclxuICogQHZlcnNpb24gMC4wLjJcclxuICovXHJcblxyXG4vLyBpbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuXHJcbi8qKlxyXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBtb2R1bGUgbWF0Y2hlcyBhIHNldCBvZiBwYXJhbWV0ZXJzLlxyXG4gKiBAY2FsbGJhY2sgbW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyXHJcbiAqIEBwYXJhbSB7Kn0gbW9kdWxlIC0gbW9kdWxlIHRvIGNoZWNrXHJcbiAqIEByZXR1cm5zIHtib29sZWFufSAtIFRydWUgaWYgdGhlIG1vZHVsZSBtYXRjaGVzIHRoZSBmaWx0ZXIsIGZhbHNlIG90aGVyd2lzZVxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBGaWx0ZXJzIGZvciB1c2Ugd2l0aCB7QGxpbmsgbW9kdWxlOldlYnBhY2tNb2R1bGVzfSBidXQgbWF5IHByb3ZlIHVzZWZ1bCBlbHNld2hlcmUuXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmlsdGVycyB7XHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHNldCBvZiBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBwcm9wcyAtIEFycmF5IG9mIHByb3BlcnR5IG5hbWVzXHJcbiAgICAgKiBAcGFyYW0ge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gZmlsdGVyIC0gQWRkaXRpb25hbCBmaWx0ZXJcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IC0gQSBmaWx0ZXIgdGhhdCBjaGVja3MgZm9yIGEgc2V0IG9mIHByb3BlcnRpZXNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ5UHJvcGVydGllcyhwcm9wcywgZmlsdGVyID0gbSA9PiBtKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IGZpbHRlcihtb2R1bGUpO1xyXG4gICAgICAgICAgICBpZiAoIWNvbXBvbmVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcHJvcHMuZXZlcnkocHJvcGVydHkgPT4gY29tcG9uZW50W3Byb3BlcnR5XSAhPT0gdW5kZWZpbmVkKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogR2VuZXJhdGVzIGEge0BsaW5rIG1vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gdGhhdCBmaWx0ZXJzIGJ5IGEgc2V0IG9mIHByb3BlcnRpZXMgb24gdGhlIG9iamVjdCdzIHByb3RvdHlwZS5cclxuICAgICAqIEBwYXJhbSB7QXJyYXk8c3RyaW5nPn0gZmllbGRzIC0gQXJyYXkgb2YgcHJvcGVydHkgbmFtZXNcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllcyBvbiB0aGUgb2JqZWN0J3MgcHJvdG90eXBlXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBieVByb3RvdHlwZUZpZWxkcyhmaWVsZHMsIGZpbHRlciA9IG0gPT4gbSkge1xyXG4gICAgICAgIHJldHVybiBtb2R1bGUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnQgPSBmaWx0ZXIobW9kdWxlKTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb25lbnQucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWVsZHMuZXZlcnkoZmllbGQgPT4gY29tcG9uZW50LnByb3RvdHlwZVtmaWVsZF0gIT09IHVuZGVmaW5lZCk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHJlZ2V4LlxyXG4gICAgICogQHBhcmFtIHtSZWdFeHB9IHNlYXJjaCAtIEEgUmVnRXhwIHRvIGNoZWNrIG9uIHRoZSBtb2R1bGVcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnlDb2RlKHNlYXJjaCwgZmlsdGVyID0gbSA9PiBtKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGhvZCA9IGZpbHRlcihtb2R1bGUpO1xyXG4gICAgICAgICAgICBpZiAoIW1ldGhvZCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gbWV0aG9kLnRvU3RyaW5nKFtdKS5zZWFyY2goc2VhcmNoKSAhPT0gLTE7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHNlYXJjaCAtIEEgUmVnRXhwIHRvIGNoZWNrIG9uIHRoZSBtb2R1bGVcclxuICAgICAqIEByZXR1cm5zIHttb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IC0gQSBmaWx0ZXIgdGhhdCBjaGVja3MgZm9yIGEgc2V0IG9mIHN0cmluZ3NcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJ5U3RyaW5nKC4uLnN0cmluZ3MpIHtcclxuICAgICAgICByZXR1cm4gbW9kdWxlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbW9kdWxlU3RyaW5nID0gbW9kdWxlLnRvU3RyaW5nKFtdKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBzIG9mIHN0cmluZ3MpIHtcclxuICAgICAgICAgICAgICAgIGlmICghbW9kdWxlU3RyaW5nLmluY2x1ZGVzKHMpKSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEdlbmVyYXRlcyBhIHtAbGluayBtb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IHRoYXQgZmlsdGVycyBieSBhIHNldCBvZiBwcm9wZXJ0aWVzLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgLSBOYW1lIHRoZSBtb2R1bGUgc2hvdWxkIGhhdmVcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmaWx0ZXIgLSBBZGRpdGlvbmFsIGZpbHRlclxyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBBIGZpbHRlciB0aGF0IGNoZWNrcyBmb3IgYSBzZXQgb2YgcHJvcGVydGllc1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgYnlEaXNwbGF5TmFtZShuYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBtb2R1bGUgJiYgbW9kdWxlLmRpc3BsYXlOYW1lID09PSBuYW1lO1xyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBHZW5lcmF0ZXMgYSBjb21iaW5lZCB7QGxpbmsgbW9kdWxlOldlYnBhY2tNb2R1bGVzLkZpbHRlcnN+ZmlsdGVyfSBmcm9tIGEgbGlzdCBvZiBmaWx0ZXJzLlxyXG4gICAgICogQHBhcmFtIHsuLi5tb2R1bGU6V2VicGFja01vZHVsZXMuRmlsdGVyc35maWx0ZXJ9IGZpbHRlcnMgLSBBIGxpc3Qgb2YgZmlsdGVyc1xyXG4gICAgICogQHJldHVybnMge21vZHVsZTpXZWJwYWNrTW9kdWxlcy5GaWx0ZXJzfmZpbHRlcn0gLSBDb21iaW5hdG9yeSBmaWx0ZXIgb2YgYWxsIGFyZ3VtZW50c1xyXG4gICAgICovXHJcbiAgICBzdGF0aWMgY29tYmluZSguLi5maWx0ZXJzKSB7XHJcbiAgICAgICAgcmV0dXJuIG1vZHVsZSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJzLmV2ZXJ5KGZpbHRlciA9PiBmaWx0ZXIobW9kdWxlKSk7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgV2VicGFja01vZHVsZXMge1xyXG5cclxuICAgIHN0YXRpYyBmaW5kKGZpbHRlciwgZmlyc3QgPSB0cnVlKSB7cmV0dXJuIHRoaXMuZ2V0TW9kdWxlKGZpbHRlciwgZmlyc3QpO31cclxuICAgIHN0YXRpYyBmaW5kQWxsKGZpbHRlcikge3JldHVybiB0aGlzLmdldE1vZHVsZShmaWx0ZXIsIGZhbHNlKTt9XHJcbiAgICBzdGF0aWMgZmluZEJ5VW5pcXVlUHJvcGVydGllcyhwcm9wcywgZmlyc3QgPSB0cnVlKSB7cmV0dXJuIGZpcnN0ID8gdGhpcy5nZXRCeVByb3BzKC4uLnByb3BzKSA6IHRoaXMuZ2V0QWxsQnlQcm9wcyguLi5wcm9wcyk7fVxyXG4gICAgc3RhdGljIGZpbmRCeURpc3BsYXlOYW1lKG5hbWUpIHtyZXR1cm4gdGhpcy5nZXRCeURpc3BsYXlOYW1lKG5hbWUpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIHVzaW5nIGEgZmlsdGVyIGZ1bmN0aW9uLlxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmlsdGVyIEEgZnVuY3Rpb24gdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IGZpcnN0IFdoZXRoZXIgdG8gcmV0dXJuIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nIG1vZHVsZVxyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0TW9kdWxlKGZpbHRlciwgZmlyc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgY29uc3QgbW9kdWxlcyA9IHRoaXMuZ2V0QWxsTW9kdWxlcygpO1xyXG4gICAgICAgIGNvbnN0IHJtID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBpbiBtb2R1bGVzKSB7XHJcbiAgICAgICAgICAgIGlmICghbW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCBtb2R1bGUgPSBtb2R1bGVzW2luZGV4XTtcclxuICAgICAgICAgICAgY29uc3Qge2V4cG9ydHN9ID0gbW9kdWxlO1xyXG4gICAgICAgICAgICBsZXQgZm91bmRNb2R1bGUgPSBudWxsO1xyXG5cclxuICAgICAgICAgICAgaWYgKCFleHBvcnRzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKGV4cG9ydHMuX19lc01vZHVsZSAmJiBleHBvcnRzLmRlZmF1bHQgJiYgZmlsdGVyKGV4cG9ydHMuZGVmYXVsdCkpIGZvdW5kTW9kdWxlID0gZXhwb3J0cy5kZWZhdWx0O1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyKGV4cG9ydHMpKSBmb3VuZE1vZHVsZSA9IGV4cG9ydHM7XHJcbiAgICAgICAgICAgIGlmICghZm91bmRNb2R1bGUpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAoZmlyc3QpIHJldHVybiBmb3VuZE1vZHVsZTtcclxuICAgICAgICAgICAgcm0ucHVzaChmb3VuZE1vZHVsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaXJzdCB8fCBybS5sZW5ndGggPT0gMCA/IHVuZGVmaW5lZCA6IHJtO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIG1vZHVsZXMgbWF0Y2hpbmcgYSBmaWx0ZXIgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmaWx0ZXIgQSBmdW5jdGlvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldE1vZHVsZXMoZmlsdGVyKSB7cmV0dXJuIHRoaXMuZ2V0TW9kdWxlKGZpbHRlciwgZmFsc2UpO31cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIGJ5IGl0cyBuYW1lLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1vZHVsZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gZmFsbGJhY2sgQSBmdW5jdGlvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXMgaWYgbm90IGZpbmRpbmcgYSBrbm93biBtb2R1bGVcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgLy8gc3RhdGljIGdldE1vZHVsZUJ5TmFtZShuYW1lLCBmYWxsYmFjaykge1xyXG4gICAgLy8gICAgIGlmIChEaXNjb3JkTW9kdWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgcmV0dXJuIERpc2NvcmRNb2R1bGVzW25hbWVdO1xyXG4gICAgLy8gICAgIGlmICghZmFsbGJhY2spIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAvLyAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5nZXRNb2R1bGUoZmFsbGJhY2ssIHRydWUpO1xyXG4gICAgLy8gICAgIHJldHVybiBtb2R1bGUgPyBEaXNjb3JkTW9kdWxlc1tuYW1lXSA9IG1vZHVsZSA6IHVuZGVmaW5lZDtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgbW9kdWxlIGJ5IGl0cyBkaXNwbGF5IG5hbWUuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbmFtZSBUaGUgZGlzcGxheSBuYW1lIG9mIHRoZSBtb2R1bGVcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJ5RGlzcGxheU5hbWUobmFtZSkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5RGlzcGxheU5hbWUobmFtZSksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBtb2R1bGUgdXNpbmcgaXRzIGNvZGUuXHJcbiAgICAgKiBAcGFyYW0ge1JlZ0V4fSByZWdleCBBIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gZmlyc3QgV2hldGhlciB0byByZXR1cm4gdGhlIG9ubHkgdGhlIGZpcnN0IG1hdGNoaW5nIG1vZHVsZVxyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QnlSZWdleChyZWdleCwgZmlyc3QgPSB0cnVlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlDb2RlKHJlZ2V4KSwgZmlyc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYSBzaW5nbGUgbW9kdWxlIHVzaW5nIHByb3BlcnRpZXMgb24gaXRzIHByb3RvdHlwZS5cclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm90b3R5cGVzIFByb3BlcnRpZXMgdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRCeVByb3RvdHlwZXMoLi4ucHJvdG90eXBlcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5UHJvdG90eXBlRmllbGRzKHByb3RvdHlwZXMpLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGFsbCBtb2R1bGVzIHdpdGggYSBzZXQgb2YgcHJvcGVydGllcyBvZiBpdHMgcHJvdG90eXBlLlxyXG4gICAgICogQHBhcmFtIHsuLi5zdHJpbmd9IHByb3RvdHlwZXMgUHJvcGVydGllcyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEFsbEJ5UHJvdG90eXBlcyguLi5wcm90b3R5cGVzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlQcm90b3R5cGVGaWVsZHMocHJvdG90eXBlcyksIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgc2luZ2xlIG1vZHVsZSB1c2luZyBpdHMgb3duIHByb3BlcnRpZXMuXHJcbiAgICAgKiBAcGFyYW0gey4uLnN0cmluZ30gcHJvcHMgUHJvcGVydGllcyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEJ5UHJvcHMoLi4ucHJvcHMpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieVByb3BlcnRpZXMocHJvcHMpLCB0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGFsbCBtb2R1bGVzIHdpdGggYSBzZXQgb2YgcHJvcGVydGllcy5cclxuICAgICAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcm9wcyBQcm9wZXJ0aWVzIHRvIHVzZSB0byBmaWx0ZXIgbW9kdWxlc1xyXG4gICAgICogQHJldHVybiB7QW55fVxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0QWxsQnlQcm9wcyguLi5wcm9wcykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1vZHVsZShGaWx0ZXJzLmJ5UHJvcGVydGllcyhwcm9wcyksIGZhbHNlKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZpbmRzIGEgc2luZ2xlIG1vZHVsZSB1c2luZyBhIHNldCBvZiBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHByb3BzIFN0cmluZ3MgdG8gdXNlIHRvIGZpbHRlciBtb2R1bGVzXHJcbiAgICAgKiBAcmV0dXJuIHtBbnl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRCeVN0cmluZyguLi5zdHJpbmdzKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TW9kdWxlKEZpbHRlcnMuYnlTdHJpbmcoLi4uc3RyaW5ncyksIHRydWUpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRmluZHMgYWxsIG1vZHVsZXMgd2l0aCBhIHNldCBvZiBzdHJpbmdzLlxyXG4gICAgICogQHBhcmFtIHsuLi5TdHJpbmd9IHN0cmluZ3MgU3RyaW5ncyB0byB1c2UgdG8gZmlsdGVyIG1vZHVsZXNcclxuICAgICAqIEByZXR1cm4ge0FueX1cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGdldEFsbEJ5U3RyaW5nKC4uLnN0cmluZ3MpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNb2R1bGUoRmlsdGVycy5ieVN0cmluZyguLi5zdHJpbmdzKSwgZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzY29yZCdzIF9fd2VicGFja19yZXF1aXJlX18gZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXQgcmVxdWlyZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5fcmVxdWlyZSkgcmV0dXJuIHRoaXMuX3JlcXVpcmU7XHJcbiAgICAgICAgY29uc3QgaWQgPSBcImJiZC13ZWJwYWNrbW9kdWxlc1wiO1xyXG4gICAgICAgIGNvbnN0IF9fd2VicGFja19yZXF1aXJlX18gPSB0eXBlb2Yod2luZG93LndlYnBhY2tKc29ucCkgPT0gXCJmdW5jdGlvblwiID8gd2luZG93LndlYnBhY2tKc29ucChbXSwge1xyXG4gICAgICAgICAgICBbaWRdOiAobW9kdWxlLCBleHBvcnRzLCBfX2ludGVybmFsX3JlcXVpcmVfXykgPT4gZXhwb3J0cy5kZWZhdWx0ID0gX19pbnRlcm5hbF9yZXF1aXJlX19cclxuICAgICAgICB9LCBbaWRdKS5kZWZhdWx0IDogd2luZG93LndlYnBhY2tKc29ucC5wdXNoKFtbXSwge1xyXG4gICAgICAgICAgICBbaWRdOiAobW9kdWxlLCBleHBvcnRzLCBfX2ludGVybmFsX3JlcXVpcmVfXykgPT4gbW9kdWxlLmV4cG9ydHMgPSBfX2ludGVybmFsX3JlcXVpcmVfX1xyXG4gICAgICAgIH0sIFtbaWRdXV0pO1xyXG4gICAgICAgIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLm1baWRdO1xyXG4gICAgICAgIGRlbGV0ZSBfX3dlYnBhY2tfcmVxdWlyZV9fLmNbaWRdO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9yZXF1aXJlID0gX193ZWJwYWNrX3JlcXVpcmVfXztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFJldHVybnMgYWxsIGxvYWRlZCBtb2R1bGVzLlxyXG4gICAgICogQHJldHVybiB7QXJyYXl9XHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBnZXRBbGxNb2R1bGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnJlcXVpcmUuYztcclxuICAgIH1cclxuXHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/webpackmodules.js\n"); /***/ }), @@ -647,7 +647,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 BDEmote; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../builtins/emotemenu */ \"./src/builtins/emotemenu.js\");\n\n\nclass BDEmote extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n const isFav = _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"] && _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes && _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes[this.label] ? true : false;\n this.state = {\n shouldAnimate: !this.animateOnHover,\n isFavorite: isFav\n };\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n this.onClick = this.onClick.bind(this);\n }\n\n get animateOnHover() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"emotes\", \"general\", \"animateOnHover\");\n }\n\n get label() {\n return this.props.modifier ? `${this.props.name}:${this.props.modifier}` : this.props.name;\n }\n\n get modifierClass() {\n return this.props.modifier ? ` emote${this.props.modifier}` : \"\";\n }\n\n onMouseEnter() {\n if (!this.state.shouldAnimate && this.animateOnHover) this.setState({\n shouldAnimate: true\n });\n if (!this.state.isFavorite && _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes[this.label]) this.setState({\n isFavorite: true\n });else if (this.state.isFavorite && !_builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes[this.label]) this.setState({\n isFavorite: false\n });\n }\n\n onMouseLeave() {\n if (this.state.shouldAnimate && this.animateOnHover) this.setState({\n shouldAnimate: false\n });\n }\n\n onClick(e) {\n if (this.props.onClick) this.props.onClick(e);\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(modules__WEBPACK_IMPORTED_MODULE_0__[\"BDV2\"].TooltipWrapper, {\n color: \"black\",\n position: \"top\",\n text: this.label,\n delay: 750\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"emotewrapper\" + (this.props.jumboable ? \" jumboable\" : \"\"),\n onMouseEnter: this.onMouseEnter,\n onMouseLeave: this.onMouseLeave,\n onClick: this.onClick\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"img\", {\n draggable: false,\n className: \"emote\" + this.modifierClass + (this.props.jumboable ? \" jumboable\" : \"\") + (!this.state.shouldAnimate ? \" stop-animation\" : \"\"),\n dataModifier: this.props.modifier,\n alt: this.label,\n src: this.props.url\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n className: \"fav\" + (this.state.isFavorite ? \" active\" : \"\"),\n title: \"Favorite!\",\n type: \"button\",\n onClick: e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (this.state.isFavorite) {\n delete _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes[this.label];\n _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].updateFavorites();\n } else {\n _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favorite(this.label, this.props.url);\n }\n\n this.setState({\n isFavorite: !this.state.isFavorite\n });\n }\n })));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Vtb3RlLmpzPzZjY2IiXSwibmFtZXMiOlsiQkRFbW90ZSIsIlJlYWN0IiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsImlzRmF2IiwiRW1vdGVNZW51IiwiZmF2b3JpdGVFbW90ZXMiLCJsYWJlbCIsInN0YXRlIiwic2hvdWxkQW5pbWF0ZSIsImFuaW1hdGVPbkhvdmVyIiwiaXNGYXZvcml0ZSIsIm9uTW91c2VFbnRlciIsImJpbmQiLCJvbk1vdXNlTGVhdmUiLCJvbkNsaWNrIiwiU2V0dGluZ3MiLCJnZXQiLCJtb2RpZmllciIsIm5hbWUiLCJtb2RpZmllckNsYXNzIiwic2V0U3RhdGUiLCJlIiwicmVuZGVyIiwiY3JlYXRlRWxlbWVudCIsIkJEVjIiLCJUb29sdGlwV3JhcHBlciIsImNvbG9yIiwicG9zaXRpb24iLCJ0ZXh0IiwiZGVsYXkiLCJjbGFzc05hbWUiLCJqdW1ib2FibGUiLCJkcmFnZ2FibGUiLCJkYXRhTW9kaWZpZXIiLCJhbHQiLCJzcmMiLCJ1cmwiLCJ0aXRsZSIsInR5cGUiLCJwcmV2ZW50RGVmYXVsdCIsInN0b3BQcm9wYWdhdGlvbiIsInVwZGF0ZUZhdm9yaXRlcyIsImZhdm9yaXRlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFZSxNQUFNQSxPQUFOLFNBQXNCQyw2Q0FBSyxDQUFDQyxTQUE1QixDQUFzQztBQUNqREMsYUFBVyxDQUFDQyxLQUFELEVBQVE7QUFDZixVQUFNQSxLQUFOO0FBRUEsVUFBTUMsS0FBSyxHQUFHQywyREFBUyxJQUFJQSwyREFBUyxDQUFDQyxjQUF2QixJQUF5Q0QsMkRBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLQyxLQUE5QixDQUF6QyxHQUFnRixJQUFoRixHQUF1RixLQUFyRztBQUNBLFNBQUtDLEtBQUwsR0FBYTtBQUNUQyxtQkFBYSxFQUFFLENBQUMsS0FBS0MsY0FEWjtBQUVUQyxnQkFBVSxFQUFFUDtB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QWdELEVBQTdILENBRlk7QUFHdkJ5QixrQkFBWSxFQUFFLEtBQUsvQixLQUFMLENBQVdlLFFBSEY7QUFJdkJpQixTQUFHLEVBQUUsS0FBSzVCLEtBSmE7QUFLdkI2QixTQUFHLEVBQUUsS0FBS2pDLEtBQUwsQ0FBV2tDO0FBTE8sS0FBM0IsQ0FOSixFQWFJckMsNkNBQUssQ0FBQ3dCLGFBQU4sQ0FBb0IsT0FBcEIsRUFBNkI7QUFDekJPLGVBQVMsRUFBRSxTQUFTLEtBQUt2QixLQUFMLENBQVdHLFVBQVgsR0FBd0IsU0FBeEIsR0FBb0MsRUFBN0MsQ0FEYztBQUV6QjJCLFdBQUssRUFBRSxXQUZrQjtBQUd6QkMsVUFBSSxFQUFFLFFBSG1CO0FBSXpCeEIsYUFBTyxFQUFHTyxDQUFELElBQU87QUFDWkEsU0FBQyxDQUFDa0IsY0FBRjtBQUNBbEIsU0FBQyxDQUFDbUIsZUFBRjs7QUFDQSxZQUFJLEtBQUtqQyxLQUFMLENBQVdHLFVBQWYsRUFBMkI7QUFDdkIsaUJBQU9OLDJEQUFTLENBQUNDLGNBQVYsQ0FBeUIsS0FBS0MsS0FBOUIsQ0FBUDtBQUNBRixxRUFBUyxDQUFDcUMsZUFBVjtBQUNILFNBSEQsTUFJSztBQUNEckMscUVBQVMsQ0FBQ3NDLFFBQVYsQ0FBbUIsS0FBS3BDLEtBQXhCLEVBQStCLEtBQUtKLEtBQUwsQ0FBV2tDLEdBQTFDO0FBQ0g7O0FBQ0QsYUFBS2hCLFFBQUwsQ0FBYztBQUFDVixvQkFBVSxFQUFFLENBQUMsS0FBS0gsS0FBTCxDQUFXRztBQUF6QixTQUFkO0FBQ0g7QUFmd0IsS0FBN0IsQ0FiSixDQU5ELENBQVA7QUFzQ0g7O0FBaEZnRCIsImZpbGUiOiIuL3NyYy91aS9lbW90ZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QkRWMiwgU2V0dGluZ3MsIFJlYWN0fSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgRW1vdGVNZW51IGZyb20gXCIuLi9idWlsdGlucy9lbW90ZW1lbnVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJERW1vdGUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcblxyXG4gICAgICAgIGNvbnN0IGlzRmF2ID0gRW1vdGVNZW51ICYmIEVtb3RlTWVudS5mYXZvcml0ZUVtb3RlcyAmJiBFbW90ZU1lbnUuZmF2b3JpdGVFbW90ZXNbdGhpcy5sYWJlbF0gPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgc2hvdWxkQW5pbWF0ZTogIXRoaXMuYW5pbWF0ZU9uSG92ZXIsXHJcbiAgICAgICAgICAgIGlzRmF2b3JpdGU6IGlzRmF2XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdGhpcy5vbk1vdXNlRW50ZXIgPSB0aGlzLm9uTW91c2VFbnRlci5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMub25Nb3VzZUxlYXZlID0gdGhpcy5vbk1vdXNlTGVhdmUuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uQ2xpY2sgPSB0aGlzLm9uQ2xpY2suYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgYW5pbWF0ZU9uSG92ZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFNldHRpbmdzLmdldChcImVtb3Rlc1wiLCBcImdlbmVyYWxcIiwgXCJhbmltYXRlT25Ib3ZlclwiKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGFiZWwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucHJvcHMubW9kaWZpZXIgPyBgJHt0aGlzLnByb3BzLm5hbWV9OiR7dGhpcy5wcm9wcy5tb2RpZmllcn1gIDogdGhpcy5wcm9wcy5uYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBtb2RpZmllckNsYXNzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGlmaWVyID8gYCBlbW90ZSR7dGhpcy5wcm9wcy5tb2RpZmllcn1gIDogXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlRW50ZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlLnNob3VsZEFuaW1hdGUgJiYgdGhpcy5hbmltYXRlT25Ib3ZlcikgdGhpcy5zZXRTdGF0ZSh7c2hvdWxkQW5pbWF0ZTogdHJ1ZX0pO1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5pc0Zhdm9yaXRlICYmIEVtb3RlTWVudS5mYXZvcml0ZUVtb3Rlc1t0aGlzLmxhYmVsXSkgdGhpcy5zZXRTdGF0ZSh7aXNGYXZvcml0ZTogdHJ1ZX0pO1xyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhdGUuaXNGYXZvcml0ZSAmJiAhRW1vdGVNZW51LmZhdm9yaXRlRW1vdGVzW3RoaXMubGFiZWxdKSB0aGlzLnNldFN0YXRlKHtpc0Zhdm9yaXRlOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uTW91c2VMZWF2ZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5zdGF0ZS5zaG91bGRBbmltYXRlICYmIHRoaXMuYW5pbWF0ZU9uSG92ZXIpIHRoaXMuc2V0U3RhdGUoe3Nob3VsZEFuaW1hdGU6IGZhbHNlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25DbGljayhlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvcHMub25DbGljaykgdGhpcy5wcm9wcy5vbkNsaWNrKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlcigpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChCRFYyLlRvb2x0aXBXcmFwcGVyLCB7XHJcbiAgICAgICAgICAgICAgICBjb2xvcjogXCJibGFja1wiLFxyXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IFwidG9wXCIsXHJcbiAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgZGVsYXk6IDc1MFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcImVtb3Rld3JhcHBlclwiICsgKHRoaXMucHJvcHMuanVtYm9hYmxlID8gXCIganVtYm9hYmxlXCIgOiBcIlwiKSxcclxuICAgICAgICAgICAgICAgICAgICBvbk1vdXNlRW50ZXI6IHRoaXMub25Nb3VzZUVudGVyLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VMZWF2ZTogdGhpcy5vbk1vdXNlTGVhdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgb25DbGljazogdGhpcy5vbkNsaWNrXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZW1vdGVcIiArIHRoaXMubW9kaWZpZXJDbGFzcyArICh0aGlzLnByb3BzLmp1bWJvYWJsZSA/IFwiIGp1bWJvYWJsZVwiIDogXCJcIikgKyAoIXRoaXMuc3RhdGUuc2hvdWxkQW5pbWF0ZSA/IFwiIHN0b3AtYW5pbWF0aW9uXCIgOiBcIlwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1vZGlmaWVyOiB0aGlzLnByb3BzLm1vZGlmaWVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbHQ6IHRoaXMubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNyYzogdGhpcy5wcm9wcy51cmxcclxuICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiaW5wdXRcIiwge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZmF2XCIgKyAodGhpcy5zdGF0ZS5pc0Zhdm9yaXRlID8gXCIgYWN0aXZlXCIgOiBcIlwiKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFwiRmF2b3JpdGUhXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYnV0dG9uXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s6IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc3RhdGUuaXNGYXZvcml0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBFbW90ZU1lbnUuZmF2b3JpdGVFbW90ZXNbdGhpcy5sYWJlbF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1vdGVNZW51LnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRW1vdGVNZW51LmZhdm9yaXRlKHRoaXMubGFiZWwsIHRoaXMucHJvcHMudXJsKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzRmF2b3JpdGU6ICF0aGlzLnN0YXRlLmlzRmF2b3JpdGV9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/ui/emote.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return BDEmote; });\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../builtins/emotemenu */ \"./src/builtins/emotemenu.js\");\n\n\nconst TooltipWrapper = modules__WEBPACK_IMPORTED_MODULE_0__[\"WebpackModules\"].getByDisplayName(\"TooltipDeprecated\");\nclass BDEmote extends modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].Component {\n constructor(props) {\n super(props);\n const isFav = _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"] && _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes && _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes[this.label] ? true : false;\n this.state = {\n shouldAnimate: !this.animateOnHover,\n isFavorite: isFav\n };\n this.onMouseEnter = this.onMouseEnter.bind(this);\n this.onMouseLeave = this.onMouseLeave.bind(this);\n this.onClick = this.onClick.bind(this);\n }\n\n get animateOnHover() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"Settings\"].get(\"emotes\", \"general\", \"animateOnHover\");\n }\n\n get label() {\n return this.props.modifier ? `${this.props.name}:${this.props.modifier}` : this.props.name;\n }\n\n get modifierClass() {\n return this.props.modifier ? ` emote${this.props.modifier}` : \"\";\n }\n\n onMouseEnter() {\n if (!this.state.shouldAnimate && this.animateOnHover) this.setState({\n shouldAnimate: true\n });\n if (!this.state.isFavorite && _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes[this.label]) this.setState({\n isFavorite: true\n });else if (this.state.isFavorite && !_builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes[this.label]) this.setState({\n isFavorite: false\n });\n }\n\n onMouseLeave() {\n if (this.state.shouldAnimate && this.animateOnHover) this.setState({\n shouldAnimate: false\n });\n }\n\n onClick(e) {\n if (this.props.onClick) this.props.onClick(e);\n }\n\n render() {\n return modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(TooltipWrapper, {\n color: \"black\",\n position: \"top\",\n text: this.label,\n delay: 750\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"div\", {\n className: \"emotewrapper\" + (this.props.jumboable ? \" jumboable\" : \"\"),\n onMouseEnter: this.onMouseEnter,\n onMouseLeave: this.onMouseLeave,\n onClick: this.onClick\n }, modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"img\", {\n draggable: false,\n className: \"emote\" + this.modifierClass + (this.props.jumboable ? \" jumboable\" : \"\") + (!this.state.shouldAnimate ? \" stop-animation\" : \"\"),\n dataModifier: this.props.modifier,\n alt: this.label,\n src: this.props.url\n }), modules__WEBPACK_IMPORTED_MODULE_0__[\"React\"].createElement(\"input\", {\n className: \"fav\" + (this.state.isFavorite ? \" active\" : \"\"),\n title: \"Favorite!\",\n type: \"button\",\n onClick: e => {\n e.preventDefault();\n e.stopPropagation();\n\n if (this.state.isFavorite) {\n delete _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favoriteEmotes[this.label];\n _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].updateFavorites();\n } else {\n _builtins_emotemenu__WEBPACK_IMPORTED_MODULE_1__[\"default\"].favorite(this.label, this.props.url);\n }\n\n this.setState({\n isFavorite: !this.state.isFavorite\n });\n }\n })));\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL2Vtb3RlLmpzPzZjY2IiXSwibmFtZXMiOlsiVG9vbHRpcFdyYXBwZXIiLCJXZWJwYWNrTW9kdWxlcyIsImdldEJ5RGlzcGxheU5hbWUiLCJCREVtb3RlIiwiUmVhY3QiLCJDb21wb25lbnQiLCJjb25zdHJ1Y3RvciIsInByb3BzIiwiaXNGYXYiLCJFbW90ZU1lbnUiLCJmYXZvcml0ZUVtb3RlcyIsImxhYmVsIiwic3RhdGUiLCJzaG91bGRBbmltYXRlIiwiYW5pbWF0ZU9uSG92ZXIiLCJpc0Zhdm9yaXRlIiwib25Nb3VzZUVudGVyIiwiYmluZCIsIm9uTW91c2VMZWF2ZSIsIm9uQ2xpY2siLCJTZXR0aW5ncyIsImdldCIsIm1vZGlmaWVyIiwibmFtZSIsIm1vZGlmaWVyQ2xhc3MiLCJzZXRTdGF0ZSIsImUiLCJyZW5kZXIiLCJjcmVhdGVFbGVtZW50IiwiY29sb3IiLCJwb3NpdGlvbiIsInRleHQiLCJkZWxheSIsImNsYXNzTmFtZSIsImp1bWJvYWJsZSIsImRyYWdnYWJsZSIsImRhdGFNb2RpZmllciIsImFsdCIsInNyYyIsInVybCIsInRpdGxlIiwidHlwZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwidXBkYXRlRmF2b3JpdGVzIiwiZmF2b3JpdGUiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBLE1BQU1BLGNBQWMsR0FBR0Msc0RBQWMsQ0FBQ0MsZ0JBQWYsQ0FBZ0MsbUJBQWhDLENBQXZCO0FBRWUsTUFBTUMsT0FBTixTQUFzQkMsNkNBQUssQ0FBQ0MsU0FBNUIsQ0FBc0M7QUFDakRDLGFBQVcsQ0FBQ0MsS0FBRCxFQUFRO0FBQ2YsVUFBTUEsS0FBTjtBQUVBLFVBQU1DLEtBQUssR0FBR0MsMkRBQVMsSUFBSUEsMkRBQVMsQ0FBQ0MsY0FBdkIsSUFBeUNELDJEQUFTLENBQUNDLGNBQVYsQ0FBeUIsS0FBS0MsS0FBOUIsQ0FBekMsR0FBZ0YsSUFB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U0FBWCxHQUF1QixZQUF2QixHQUFzQyxFQUF0RSxLQUE2RSxDQUFDLEtBQUt0QixLQUFMLENBQVdDLGFBQVosR0FBNEIsaUJBQTVCLEdBQWdELEVBQTdILENBRlk7QUFHdkJ1QixrQkFBWSxFQUFFLEtBQUs3QixLQUFMLENBQVdlLFFBSEY7QUFJdkJlLFNBQUcsRUFBRSxLQUFLMUIsS0FKYTtBQUt2QjJCLFNBQUcsRUFBRSxLQUFLL0IsS0FBTCxDQUFXZ0M7QUFMTyxLQUEzQixDQU5KLEVBYUluQyw2Q0FBSyxDQUFDd0IsYUFBTixDQUFvQixPQUFwQixFQUE2QjtBQUN6QkssZUFBUyxFQUFFLFNBQVMsS0FBS3JCLEtBQUwsQ0FBV0csVUFBWCxHQUF3QixTQUF4QixHQUFvQyxFQUE3QyxDQURjO0FBRXpCeUIsV0FBSyxFQUFFLFdBRmtCO0FBR3pCQyxVQUFJLEVBQUUsUUFIbUI7QUFJekJ0QixhQUFPLEVBQUdPLENBQUQsSUFBTztBQUNaQSxTQUFDLENBQUNnQixjQUFGO0FBQ0FoQixTQUFDLENBQUNpQixlQUFGOztBQUNBLFlBQUksS0FBSy9CLEtBQUwsQ0FBV0csVUFBZixFQUEyQjtBQUN2QixpQkFBT04sMkRBQVMsQ0FBQ0MsY0FBVixDQUF5QixLQUFLQyxLQUE5QixDQUFQO0FBQ0FGLHFFQUFTLENBQUNtQyxlQUFWO0FBQ0gsU0FIRCxNQUlLO0FBQ0RuQyxxRUFBUyxDQUFDb0MsUUFBVixDQUFtQixLQUFLbEMsS0FBeEIsRUFBK0IsS0FBS0osS0FBTCxDQUFXZ0MsR0FBMUM7QUFDSDs7QUFDRCxhQUFLZCxRQUFMLENBQWM7QUFBQ1Ysb0JBQVUsRUFBRSxDQUFDLEtBQUtILEtBQUwsQ0FBV0c7QUFBekIsU0FBZDtBQUNIO0FBZndCLEtBQTdCLENBYkosQ0FORCxDQUFQO0FBc0NIOztBQWhGZ0QiLCJmaWxlIjoiLi9zcmMvdWkvZW1vdGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1NldHRpbmdzLCBSZWFjdCwgV2VicGFja01vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBFbW90ZU1lbnUgZnJvbSBcIi4uL2J1aWx0aW5zL2Vtb3RlbWVudVwiO1xyXG5cclxuY29uc3QgVG9vbHRpcFdyYXBwZXIgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeURpc3BsYXlOYW1lKFwiVG9vbHRpcERlcHJlY2F0ZWRcIik7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCREVtb3RlIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XHJcbiAgICAgICAgc3VwZXIocHJvcHMpO1xyXG5cclxuICAgICAgICBjb25zdCBpc0ZhdiA9IEVtb3RlTWVudSAmJiBFbW90ZU1lbnUuZmF2b3JpdGVFbW90ZXMgJiYgRW1vdGVNZW51LmZhdm9yaXRlRW1vdGVzW3RoaXMubGFiZWxdID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RhdGUgPSB7XHJcbiAgICAgICAgICAgIHNob3VsZEFuaW1hdGU6ICF0aGlzLmFuaW1hdGVPbkhvdmVyLFxyXG4gICAgICAgICAgICBpc0Zhdm9yaXRlOiBpc0ZhdlxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMub25Nb3VzZUVudGVyID0gdGhpcy5vbk1vdXNlRW50ZXIuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLm9uTW91c2VMZWF2ZSA9IHRoaXMub25Nb3VzZUxlYXZlLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5vbkNsaWNrID0gdGhpcy5vbkNsaWNrLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGFuaW1hdGVPbkhvdmVyKCkge1xyXG4gICAgICAgIHJldHVybiBTZXR0aW5ncy5nZXQoXCJlbW90ZXNcIiwgXCJnZW5lcmFsXCIsIFwiYW5pbWF0ZU9uSG92ZXJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGxhYmVsKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnByb3BzLm1vZGlmaWVyID8gYCR7dGhpcy5wcm9wcy5uYW1lfToke3RoaXMucHJvcHMubW9kaWZpZXJ9YCA6IHRoaXMucHJvcHMubmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbW9kaWZpZXJDbGFzcygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5tb2RpZmllciA/IGAgZW1vdGUke3RoaXMucHJvcHMubW9kaWZpZXJ9YCA6IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgb25Nb3VzZUVudGVyKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdGF0ZS5zaG91bGRBbmltYXRlICYmIHRoaXMuYW5pbWF0ZU9uSG92ZXIpIHRoaXMuc2V0U3RhdGUoe3Nob3VsZEFuaW1hdGU6IHRydWV9KTtcclxuICAgICAgICBpZiAoIXRoaXMuc3RhdGUuaXNGYXZvcml0ZSAmJiBFbW90ZU1lbnUuZmF2b3JpdGVFbW90ZXNbdGhpcy5sYWJlbF0pIHRoaXMuc2V0U3RhdGUoe2lzRmF2b3JpdGU6IHRydWV9KTtcclxuICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXRlLmlzRmF2b3JpdGUgJiYgIUVtb3RlTWVudS5mYXZvcml0ZUVtb3Rlc1t0aGlzLmxhYmVsXSkgdGhpcy5zZXRTdGF0ZSh7aXNGYXZvcml0ZTogZmFsc2V9KTtcclxuICAgIH1cclxuXHJcbiAgICBvbk1vdXNlTGVhdmUoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGUuc2hvdWxkQW5pbWF0ZSAmJiB0aGlzLmFuaW1hdGVPbkhvdmVyKSB0aGlzLnNldFN0YXRlKHtzaG91bGRBbmltYXRlOiBmYWxzZX0pO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2xpY2soZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnByb3BzLm9uQ2xpY2spIHRoaXMucHJvcHMub25DbGljayhlKTtcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXIoKSB7XHJcbiAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVG9vbHRpcFdyYXBwZXIsIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yOiBcImJsYWNrXCIsXHJcbiAgICAgICAgICAgICAgICBwb3NpdGlvbjogXCJ0b3BcIixcclxuICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMubGFiZWwsXHJcbiAgICAgICAgICAgICAgICBkZWxheTogNzUwXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcclxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU6IFwiZW1vdGV3cmFwcGVyXCIgKyAodGhpcy5wcm9wcy5qdW1ib2FibGUgPyBcIiBqdW1ib2FibGVcIiA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VFbnRlcjogdGhpcy5vbk1vdXNlRW50ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgb25Nb3VzZUxlYXZlOiB0aGlzLm9uTW91c2VMZWF2ZSxcclxuICAgICAgICAgICAgICAgICAgICBvbkNsaWNrOiB0aGlzLm9uQ2xpY2tcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImltZ1wiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRyYWdnYWJsZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJlbW90ZVwiICsgdGhpcy5tb2RpZmllckNsYXNzICsgKHRoaXMucHJvcHMuanVtYm9hYmxlID8gXCIganVtYm9hYmxlXCIgOiBcIlwiKSArICghdGhpcy5zdGF0ZS5zaG91bGRBbmltYXRlID8gXCIgc3RvcC1hbmltYXRpb25cIiA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTW9kaWZpZXI6IHRoaXMucHJvcHMubW9kaWZpZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsdDogdGhpcy5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3JjOiB0aGlzLnByb3BzLnVybFxyXG4gICAgICAgICAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZTogXCJmYXZcIiArICh0aGlzLnN0YXRlLmlzRmF2b3JpdGUgPyBcIiBhY3RpdmVcIiA6IFwiXCIpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCJGYXZvcml0ZSFcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJidXR0b25cIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGljazogKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc0Zhdm9yaXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIEVtb3RlTWVudS5mYXZvcml0ZUVtb3Rlc1t0aGlzLmxhYmVsXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbW90ZU1lbnUudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbW90ZU1lbnUuZmF2b3JpdGUodGhpcy5sYWJlbCwgdGhpcy5wcm9wcy51cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNGYXZvcml0ZTogIXRoaXMuc3RhdGUuaXNGYXZvcml0ZX0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/emote.js\n"); /***/ }), @@ -795,6 +795,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/ui/settings.js": +/*!****************************!*\ + !*** ./src/ui/settings.js ***! + \****************************/ +/*! exports provided: default */ +/***/ (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 modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _settings_contentlist__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./settings/contentlist */ \"./src/ui/settings/contentlist.jsx\");\n/* harmony import */ var _settings_group__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./settings/group */ \"./src/ui/settings/group.jsx\");\n/* harmony import */ var _settings_title__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./settings/title */ \"./src/ui/settings/title.jsx\");\n\n\n\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class SettingsRenderer {\n constructor() {\n this.patchSections();\n }\n\n 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 getSettingsPanel(title, groups, onChange, button = null) {\n return [modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_settings_title__WEBPACK_IMPORTED_MODULE_4__[\"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_3__[\"default\"], Object.assign({}, section, {\n onChange\n }));\n })];\n }\n\n getContentPanel(title, contentList, contentState, options = {}) {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_settings_contentlist__WEBPACK_IMPORTED_MODULE_2__[\"default\"], Object.assign({}, {\n title: title,\n contentList: contentList,\n contentState: contentState\n }, options));\n }\n\n get attribution() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"div\", {\n className: \"bd-version\",\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 async patchSections() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Patcher\"].after(\"SettingsManager\", modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByDisplayName(\"FluxContainer(GuildSettings)\").prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = \"guild-settings\";\n });\n const UserSettings = await modules__WEBPACK_IMPORTED_MODULE_1__[\"ReactComponents\"].get(\"UserSettings\", m => m.prototype && m.prototype.generateSections);\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"render\", thisObject => {\n thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = \"user-settings\";\n });\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Patcher\"].after(\"SettingsManager\", UserSettings.prototype, \"generateSections\", (thisObject, args, returnValue) => {\n let location = returnValue.findIndex(s => s.section.toLowerCase() == \"linux\") + 1;\n\n const insert = section => {\n returnValue.splice(location, 0, section);\n location++;\n };\n\n insert({\n section: \"DIVIDER\"\n });\n insert({\n section: \"HEADER\",\n label: \"BandagedBD\"\n });\n\n for (const collection of modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].collections) {\n if (collection.disabled) continue;\n insert({\n section: collection.name,\n label: collection.name,\n element: () => this.buildSettingsPanel(collection.name, collection.settings, modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].state[collection.id], modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].onSettingChange.bind(modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"], collection.id), collection.button ? collection.button : null)\n });\n }\n\n for (const panel of modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].panels.sort((a, b) => a.order > b.order)) {\n if (panel.clickListener) panel.onClick = event => panel.clickListener(thisObject, event, returnValue);\n insert(panel);\n }\n\n insert({\n section: \"CUSTOM\",\n element: () => this.attribution\n });\n });\n this.forceUpdate();\n }\n\n forceUpdate() {\n const viewClass = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"standardSidebarView\").standardSidebarView.split(\" \")[0];\n const node = document.querySelector(`.${viewClass}`);\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getReactInstance(node).return.return.return.return.return.return.stateNode.forceUpdate();\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzLmpzPzc2YmUiXSwibmFtZXMiOlsiU2V0dGluZ3NSZW5kZXJlciIsImNvbnN0cnVjdG9yIiwicGF0Y2hTZWN0aW9ucyIsImJ1aWxkU2V0dGluZ3NQYW5lbCIsInRpdGxlIiwiY29uZmlnIiwic3RhdGUiLCJvbkNoYW5nZSIsImJ1dHRvbiIsImZvckVhY2giLCJzZWN0aW9uIiwic2V0dGluZ3MiLCJpdGVtIiwidmFsdWUiLCJpZCIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRDb250ZW50UGFuZWwiLCJjb250ZW50TGlzdCIsImNvbnRlbnRTdGF0ZSIsIm9wdGlvbnMiLCJDb250ZW50TGlzdCIsImF0dHJpYnV0aW9uIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJjb2xvciIsInBhZGRpbmciLCJDb25maWciLCJiYmRWZXJzaW9uIiwiaHJlZiIsInRhcmdldCIsIlBhdGNoZXIiLCJhZnRlciIsIldlYnBhY2tNb2R1bGVzIiwiZ2V0QnlEaXNwbGF5TmFtZSIsInByb3RvdHlwZSIsInRoaXNPYmplY3QiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwicmV0dXJuIiwibWVtb2l6ZWRQcm9wcyIsIlVzZXJTZXR0aW5ncyIsIlJlYWN0Q29tcG9uZW50cyIsImdldCIsIm0iLCJnZW5lcmF0ZVNlY3Rpb25zIiwiYXJncyIsInJldHVyblZhbHVlIiwibG9jYXRpb24iLCJmaW5kSW5kZXgiLCJzIiwidG9Mb3dlckNhc2UiLCJpbnNlcnQiLCJzcGxpY2UiLCJsYWJlbCIsImNvbGxlY3Rpb24iLCJTZXR0aW5ncyIsImNvbGxlY3Rpb25zIiwiZGlzYWJsZWQiLCJuYW1lIiwiZWxlbWVudCIsIm9uU2V0dGluZ0NoYW5nZSIsImJpbmQiLCJwYW5lbCIsInBhbmVscyIsInNvcnQiLCJhIiwiYiIsIm9yZGVyIiwiY2xpY2tMaXN0ZW5lciIsIm9uQ2xpY2siLCJldmVudCIsImZvcmNlVXBkYXRlIiwidmlld0NsYXNzIiwiZ2V0QnlQcm9wcyIsInN0YW5kYXJkU2lkZWJhclZpZXciLCJzcGxpdCIsIm5vZGUiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJVdGlsaXRpZXMiLCJnZXRSZWFjdEluc3RhbmNlIiwic3RhdGVOb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRWUsbUVBQUksTUFBTUEsZ0JBQU4sQ0FBdUI7QUFFdENDLGFBQVcsR0FBRztBQUNWLFNBQUtDLGFBQUw7QUFDSDs7QUFFREMsb0JBQWtCLENBQUNDLEtBQUQsRUFBUUMsTUFBUixFQUFnQkMsS0FBaEIsRUFBdUJDLFFBQXZCLEVBQWlDQyxNQUFNLEdBQUcsSUFBMUMsRUFBZ0Q7QUFDOURILFVBQU0sQ0FBQ0ksT0FBUCxDQUFlQyxPQUFPLElBQUk7QUFDdEJBLGFBQU8sQ0FBQ0MsUUFBUixDQUFpQkYsT0FBakIsQ0FBeUJHLElBQUksSUFBSUEsSUFBSSxDQUFDQyxLQUFMLEdBQWFQLEtBQUssQ0FBQ0ksT0FBTyxDQUFDSSxFQUFULENBQUwsQ0FBa0JGLElBQUksQ0FBQ0UsRUFBdkIsQ0FBOUM7QUFDSCxLQUZEO0FBR0EsV0FBTyxLQUFLQyxnQkFBTCxDQUFzQlgsS0FBdEIsRUFBNkJDLE1BQTdCLEVBQXFDRSxRQUFyQyxFQUErQ0MsTUFBL0MsQ0FBUDtBQUNIOztBQUVETyxrQkFBZ0IsQ0FBQ1gsS0FBRCxFQUFRWSxNQUFSLEVBQWdCVCxRQUFoQixFQUEwQkMsTUFBTSxHQUFHLElBQW5DLEVBQXlDO0FBQ3JELFdBQU8sQ0FBQ1MsNkNBQUssQ0FBQ0MsYUFBTixDQUFvQkMsdURBQXBCLEVBQW1DO0FBQUNDLFVBQUksRUFBRWhCLEtBQVA7QUFBY0ksWUFBTSxFQUFFQTtB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Q00sYUFBTixDQUFvQmhDLFVBQXBCLEVBQWdDa0MsS0FBaEMsRUFBdUN4QixXQUF2QyxDQUEzQjtBQUN6QkssY0FBTSxDQUFDVyxLQUFELENBQU47QUFDSDs7QUFDRFgsWUFBTSxDQUFDO0FBQUNuRCxlQUFPLEVBQUUsUUFBVjtBQUFvQjJELGVBQU8sRUFBRSxNQUFNLEtBQUt2QztBQUF4QyxPQUFELENBQU47QUFDSCxLQXJCRDtBQXNCQSxTQUFLbUQsV0FBTDtBQUNIOztBQUVEQSxhQUFXLEdBQUc7QUFDVixVQUFNQyxTQUFTLEdBQUd2QyxzREFBYyxDQUFDd0MsVUFBZixDQUEwQixxQkFBMUIsRUFBaURDLG1CQUFqRCxDQUFxRUMsS0FBckUsQ0FBMkUsR0FBM0UsRUFBZ0YsQ0FBaEYsQ0FBbEI7QUFDQSxVQUFNQyxJQUFJLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF3QixJQUFHTixTQUFVLEVBQXJDLENBQWI7QUFDQU8scURBQVMsQ0FBQ0MsZ0JBQVYsQ0FBMkJKLElBQTNCLEVBQWlDdEMsTUFBakMsQ0FBd0NBLE1BQXhDLENBQStDQSxNQUEvQyxDQUFzREEsTUFBdEQsQ0FBNkRBLE1BQTdELENBQW9FQSxNQUFwRSxDQUEyRTJDLFNBQTNFLENBQXFGVixXQUFyRjtBQUNIOztBQXZFcUMsQ0FBM0IsRUFBZiIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1JlYWN0LCBXZWJwYWNrTW9kdWxlcywgUGF0Y2hlciwgUmVhY3RDb21wb25lbnRzLCBVdGlsaXRpZXMsIFNldHRpbmdzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IENvbnRlbnRMaXN0IGZyb20gXCIuL3NldHRpbmdzL2NvbnRlbnRsaXN0XCI7XHJcbmltcG9ydCBTZXR0aW5nc0dyb3VwIGZyb20gXCIuL3NldHRpbmdzL2dyb3VwXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuL3NldHRpbmdzL3RpdGxlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgU2V0dGluZ3NSZW5kZXJlciB7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5wYXRjaFNlY3Rpb25zKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYnVpbGRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIHN0YXRlLCBvbkNoYW5nZSwgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIGNvbmZpZy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xyXG4gICAgICAgICAgICBzZWN0aW9uLnNldHRpbmdzLmZvckVhY2goaXRlbSA9PiBpdGVtLnZhbHVlID0gc3RhdGVbc2VjdGlvbi5pZF1baXRlbS5pZF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLmdldFNldHRpbmdzUGFuZWwodGl0bGUsIGNvbmZpZywgb25DaGFuZ2UsIGJ1dHRvbik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0U2V0dGluZ3NQYW5lbCh0aXRsZSwgZ3JvdXBzLCBvbkNoYW5nZSwgYnV0dG9uID0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBbUmVhY3QuY3JlYXRlRWxlbWVudChTZXR0aW5nc1RpdGxlLCB7dGV4dDogdGl0bGUsIGJ1dHRvbjogYnV0dG9ufSksIGdyb3Vwcy5tYXAoc2VjdGlvbiA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzR3JvdXAsIE9iamVjdC5hc3NpZ24oe30sIHNlY3Rpb24sIHtvbkNoYW5nZX0pKTtcclxuICAgICAgICB9KV07XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q29udGVudFBhbmVsKHRpdGxlLCBjb250ZW50TGlzdCwgY29udGVudFN0YXRlLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwgT2JqZWN0LmFzc2lnbih7fSwge1xyXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgIGNvbnRlbnRMaXN0OiBjb250ZW50TGlzdCxcclxuICAgICAgICAgICAgY29udGVudFN0YXRlOiBjb250ZW50U3RhdGVcclxuICAgICAgICB9LCBvcHRpb25zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IGF0dHJpYnV0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBSZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtjbGFzc05hbWU6IFwiYmQtdmVyc2lvblwiLCBzdHlsZToge2ZvbnRTaXplOiBcIjEycHhcIiwgZm9udFdlaWdodDogXCI2MDBcIiwgY29sb3I6IFwiIzcyNzY3ZFwiLCBwYWRkaW5nOiBcIjJweCAxMHB4XCJ9fSxcclxuICAgICAgICAgICAgYEJCRCB2JHtDb25maWcuYmJkVmVyc2lvbn0gYnkgYCxcclxuICAgICAgICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChcImFcIiwge2hyZWY6IFwiaHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvXCIsIHRhcmdldDogXCJfYmxhbmtcIn0sIFwiWmVyZWJvc1wiKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcGF0Y2hTZWN0aW9ucygpIHtcclxuICAgICAgICBQYXRjaGVyLmFmdGVyKFwiU2V0dGluZ3NNYW5hZ2VyXCIsIFdlYnBhY2tNb2R1bGVzLmdldEJ5RGlzcGxheU5hbWUoXCJGbHV4Q29udGFpbmVyKEd1aWxkU2V0dGluZ3MpXCIpLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLm1lbW9pemVkUHJvcHMuaWQgPSBcImd1aWxkLXNldHRpbmdzXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgVXNlclNldHRpbmdzID0gYXdhaXQgUmVhY3RDb21wb25lbnRzLmdldChcIlVzZXJTZXR0aW5nc1wiLCBtID0+IG0ucHJvdG90eXBlICYmIG0ucHJvdG90eXBlLmdlbmVyYXRlU2VjdGlvbnMpO1xyXG4gICAgICAgIFBhdGNoZXIuYWZ0ZXIoXCJTZXR0aW5nc01hbmFnZXJcIiwgVXNlclNldHRpbmdzLnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5tZW1vaXplZFByb3BzLmlkID0gXCJ1c2VyLXNldHRpbmdzXCI7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgUGF0Y2hlci5hZnRlcihcIlNldHRpbmdzTWFuYWdlclwiLCBVc2VyU2V0dGluZ3MucHJvdG90eXBlLCBcImdlbmVyYXRlU2VjdGlvbnNcIiwgKHRoaXNPYmplY3QsIGFyZ3MsIHJldHVyblZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBsb2NhdGlvbiA9IHJldHVyblZhbHVlLmZpbmRJbmRleChzID0+IHMuc2VjdGlvbi50b0xvd2VyQ2FzZSgpID09IFwibGludXhcIikgKyAxO1xyXG4gICAgICAgICAgICBjb25zdCBpbnNlcnQgPSAoc2VjdGlvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUuc3BsaWNlKGxvY2F0aW9uLCAwLCBzZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGxvY2F0aW9uKys7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGluc2VydCh7c2VjdGlvbjogXCJESVZJREVSXCJ9KTtcclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkhFQURFUlwiLCBsYWJlbDogXCJCYW5kYWdlZEJEXCJ9KTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjb2xsZWN0aW9uIG9mIFNldHRpbmdzLmNvbGxlY3Rpb25zKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sbGVjdGlvbi5kaXNhYmxlZCkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBpbnNlcnQoe1xyXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb246IGNvbGxlY3Rpb24ubmFtZSxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sbGVjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6ICgpID0+IHRoaXMuYnVpbGRTZXR0aW5nc1BhbmVsKGNvbGxlY3Rpb24ubmFtZSwgY29sbGVjdGlvbi5zZXR0aW5ncywgU2V0dGluZ3Muc3RhdGVbY29sbGVjdGlvbi5pZF0sIFNldHRpbmdzLm9uU2V0dGluZ0NoYW5nZS5iaW5kKFNldHRpbmdzLCBjb2xsZWN0aW9uLmlkKSwgY29sbGVjdGlvbi5idXR0b24gPyBjb2xsZWN0aW9uLmJ1dHRvbiA6IG51bGwpXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhbmVsIG9mIFNldHRpbmdzLnBhbmVscy5zb3J0KChhLGIpID0+IGEub3JkZXIgPiBiLm9yZGVyKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhbmVsLmNsaWNrTGlzdGVuZXIpIHBhbmVsLm9uQ2xpY2sgPSAoZXZlbnQpID0+IHBhbmVsLmNsaWNrTGlzdGVuZXIodGhpc09iamVjdCwgZXZlbnQsIHJldHVyblZhbHVlKTtcclxuICAgICAgICAgICAgICAgIGluc2VydChwYW5lbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5zZXJ0KHtzZWN0aW9uOiBcIkNVU1RPTVwiLCBlbGVtZW50OiAoKSA9PiB0aGlzLmF0dHJpYnV0aW9ufSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5mb3JjZVVwZGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGZvcmNlVXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHZpZXdDbGFzcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJzdGFuZGFyZFNpZGViYXJWaWV3XCIpLnN0YW5kYXJkU2lkZWJhclZpZXcuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgIGNvbnN0IG5vZGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAuJHt2aWV3Q2xhc3N9YCk7XHJcbiAgICAgICAgVXRpbGl0aWVzLmdldFJlYWN0SW5zdGFuY2Uobm9kZSkucmV0dXJuLnJldHVybi5yZXR1cm4ucmV0dXJuLnJldHVybi5yZXR1cm4uc3RhdGVOb2RlLmZvcmNlVXBkYXRlKCk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings.js\n"); + +/***/ }), + /***/ "./src/ui/settings/contentlist.jsx": /*!*****************************************!*\ !*** ./src/ui/settings/contentlist.jsx ***! @@ -843,18 +855,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), -/***/ "./src/ui/settings/settings.js": -/*!*************************************!*\ - !*** ./src/ui/settings/settings.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 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 _contentlist__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./contentlist */ \"./src/ui/settings/contentlist.jsx\");\n/* harmony import */ var _settings_group__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../settings/group */ \"./src/ui/settings/group.jsx\");\n/* harmony import */ var _title__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./title */ \"./src/ui/settings/title.jsx\");\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_4__[\"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_3__[\"default\"], Object.assign({}, section, {\n onChange\n }));\n })];\n }\n\n static getContentPanel(title, contentList, contentState, options = {}) {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_contentlist__WEBPACK_IMPORTED_MODULE_2__[\"default\"], Object.assign({}, {\n title: title,\n contentList: contentList,\n contentState: contentState\n }, options));\n }\n\n static get attribution() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(\"div\", {\n className: \"bd-version\",\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3NldHRpbmdzL3NldHRpbmdzLmpzPzgwYWIiXSwibmFtZXMiOlsiVjJfU2V0dGluZ3NQYW5lbCIsImJ1aWxkU2V0dGluZ3NQYW5lbCIsInRpdGxlIiwiY29uZmlnIiwic3RhdGUiLCJvbkNoYW5nZSIsImJ1dHRvbiIsImZvckVhY2giLCJzZWN0aW9uIiwic2V0dGluZ3MiLCJpdGVtIiwidmFsdWUiLCJpZCIsImdldFNldHRpbmdzUGFuZWwiLCJncm91cHMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJTZXR0aW5nc1RpdGxlIiwidGV4dCIsIm1hcCIsIlNldHRpbmdzR3JvdXAiLCJPYmplY3QiLCJhc3NpZ24iLCJnZXRDb250ZW50UGFuZWwiLCJjb250ZW50TGlzdCIsImNvbnRlbnRTdGF0ZSIsIm9wdGlvbnMiLCJDb250ZW50TGlzdCIsImF0dHJpYnV0aW9uIiwiY2xhc3NOYW1lIiwic3R5bGUiLCJmb250U2l6ZSIsImZvbnRXZWlnaHQiLCJjb2xvciIsInBhZGRpbmciLCJDb25maWciLCJiYmRWZXJzaW9uIiwiaHJlZiIsInRhcmdldCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBRWUsTUFBTUEsZ0JBQU4sQ0FBdUI7QUFFbEMsU0FBT0Msa0JBQVAsQ0FBMEJDLEtBQTFCLEVBQWlDQyxNQUFqQyxFQUF5Q0MsS0FBekMsRUFBZ0RDLFFBQWhELEVBQTBEQyxNQUFNLEdBQUcsSUFBbkUsRUFBeUU7QUFDckVILFVBQU0sQ0FBQ0ksT0FBUCxDQUFlQyxPQUFPLElBQUk7QUFDdEJBLGFBQU8sQ0FBQ0MsUUFBUixDQUFpQkYsT0FBakIsQ0FBeUJHLElBQUksSUFBSUEsSUFBSSxDQUFDQyxLQUFMLEdBQWFQLEtBQUssQ0FBQ0ksT0FBTyxDQUFDSSxFQUFULENBQUwsQ0FBa0JGLElBQUksQ0FBQ0UsRUFBdkIsQ0FBOUM7QUFDSCxLQUZEO0FBR0EsV0FBTyxLQUFLQyxnQkFBTCxDQUFzQlgsS0FBdEIsRUFBNkJDLE1BQTdCLEVBQXFDRSxRQUFyQyxFQUErQ0MsTUFBL0MsQ0FBUDtBQUNIOztBQUVELFNBQU9PLGdCQUFQLENBQXdCWCxLQUF4QixFQUErQlksTUFBL0IsRUFBdUNULFFBQXZDLEVBQWlEQyxNQUFNLEdBQUcsSUFBMUQsRUFBZ0U7QUFDNUQsV0FBTyxDQUFDUyw2Q0FBSyxDQUFDQyxhQUFOLENBQW9CQyw4Q0FBcEIsRUFBbUM7QUFBQ0MsVUFBSSxFQUFFaEIsS0FBUDtBQUFjSSxZQUFNLEVBQUVBO0FBQXRCLEtBQW5DLENBQUQsRUFBb0VRLE1BQU0sQ0FBQ0ssR0FBUCxDQUFXWCxPQUFPLElBQUk7QUFDN0YsYUFBT08sNkNBQUssQ0FBQ0MsYUFBTixDQUFvQkksdURBQXBCLEVBQW1DQyxNQUFNLENBQUNDLE1BQVAsQ0FBYyxFQUFkLEVBQWtCZCxPQUFsQixFQUEyQjtBQUFDSDtBQUFELE9BQTNCLENBQW5DLENBQVA7QUFDSCxLQUYwRSxDQUFwRSxDQUFQO0FBR0g7O0FBRUQsU0FBT2tCLGVBQVAsQ0FBdUJyQixLQUF2QixFQUE4QnNCLFdBQTlCLEVBQTJDQyxZQUEzQyxFQUF5REMsT0FBTyxHQUFHLEVBQW5FLEVBQXVFO0FBQ25FLFdBQU9YLDZDQUFLLENBQUNDLGFBQU4sQ0FBb0JXLG9EQUFwQixFQUFpQ04sTUFBTSxDQUFDQyxNQUFQLENBQWMsRUFBZCxFQUFrQjtBQUN0RHBCLFdBQUssRUFBRUEsS0FEK0M7QUFFdERzQixpQkFBVyxFQUFFQSxXQUZ5QztBQUd0REMsa0JBQVksRUFBRUE7QUFId0MsS0FBbEIsRUFJckNDLE9BSnFDLENBQWpDLENBQVA7QUFLSDs7QUFFRCxhQUFXRSxXQUFYLEdBQXlCO0FBQ3JCLFdBQU9iLDZDQUFLLENBQUNDLGFBQU4sQ0FBb0IsS0FBcEIsRUFBMkI7QUFBQ2EsZUFBUyxFQUFFLFlBQVo7QUFBMEJDLFdBQUssRUFBRTtBQUFDQyxnQkFBUSxFQUFFLE1BQVg7QUFBbUJDLGtCQUFVLEVBQUUsS0FBL0I7QUFBc0NDLGFBQUssRUFBRSxTQUE3QztBQUF3REMsZUFBTyxFQUFFO0FBQWpFO0FBQWpDLEtBQTNCLEVBQ0YsUUFBT0MsMkNBQU0sQ0FBQ0MsVUFBVyxNQUR2QixFQUVIckIsNkNBQUssQ0FBQ0MsYUFBTixDQUFvQixHQUFwQixFQUF5QjtBQUFDcUIsVUFBSSxFQUFFLDZCQUFQO0FBQXNDQyxZQUFNLEVBQUU7QUFBOUMsS0FBekIsRUFBa0YsU0FBbEYsQ0FGRyxDQUFQO0FBSUg7O0FBNUJpQyIsImZpbGUiOiIuL3NyYy91aS9zZXR0aW5ncy9zZXR0aW5ncy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1JlYWN0fSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IENvbnRlbnRMaXN0IGZyb20gXCIuL2NvbnRlbnRsaXN0XCI7XHJcbmltcG9ydCBTZXR0aW5nc0dyb3VwIGZyb20gXCIuLi9zZXR0aW5ncy9ncm91cFwiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi90aXRsZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVjJfU2V0dGluZ3NQYW5lbCB7XHJcblxyXG4gICAgc3RhdGljIGJ1aWxkU2V0dGluZ3NQYW5lbCh0aXRsZSwgY29uZmlnLCBzdGF0ZSwgb25DaGFuZ2UsIGJ1dHRvbiA9IG51bGwpIHtcclxuICAgICAgICBjb25maWcuZm9yRWFjaChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgc2VjdGlvbi5zZXR0aW5ncy5mb3JFYWNoKGl0ZW0gPT4gaXRlbS52YWx1ZSA9IHN0YXRlW3NlY3Rpb24uaWRdW2l0ZW0uaWRdKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRTZXR0aW5nc1BhbmVsKHRpdGxlLCBjb25maWcsIG9uQ2hhbmdlLCBidXR0b24pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRTZXR0aW5nc1BhbmVsKHRpdGxlLCBncm91cHMsIG9uQ2hhbmdlLCBidXR0b24gPSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFtSZWFjdC5jcmVhdGVFbGVtZW50KFNldHRpbmdzVGl0bGUsIHt0ZXh0OiB0aXRsZSwgYnV0dG9uOiBidXR0b259KSwgZ3JvdXBzLm1hcChzZWN0aW9uID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIFJlYWN0LmNyZWF0ZUVsZW1lbnQoU2V0dGluZ3NHcm91cCwgT2JqZWN0LmFzc2lnbih7fSwgc2VjdGlvbiwge29uQ2hhbmdlfSkpO1xyXG4gICAgICAgIH0pXTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0Q29udGVudFBhbmVsKHRpdGxlLCBjb250ZW50TGlzdCwgY29udGVudFN0YXRlLCBvcHRpb25zID0ge30pIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChDb250ZW50TGlzdCwgT2JqZWN0LmFzc2lnbih7fSwge1xyXG4gICAgICAgICAgICB0aXRsZTogdGl0bGUsXHJcbiAgICAgICAgICAgIGNvbnRlbnRMaXN0OiBjb250ZW50TGlzdCxcclxuICAgICAgICAgICAgY29udGVudFN0YXRlOiBjb250ZW50U3RhdGVcclxuICAgICAgICB9LCBvcHRpb25zKSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGdldCBhdHRyaWJ1dGlvbigpIHtcclxuICAgICAgICByZXR1cm4gUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7Y2xhc3NOYW1lOiBcImJkLXZlcnNpb25cIiwgc3R5bGU6IHtmb250U2l6ZTogXCIxMnB4XCIsIGZvbnRXZWlnaHQ6IFwiNjAwXCIsIGNvbG9yOiBcIiM3Mjc2N2RcIiwgcGFkZGluZzogXCIycHggMTBweFwifX0sXHJcbiAgICAgICAgICAgIGBCQkQgdiR7Q29uZmlnLmJiZFZlcnNpb259IGJ5IGAsXHJcbiAgICAgICAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhXCIsIHtocmVmOiBcImh0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL1wiLCB0YXJnZXQ6IFwiX2JsYW5rXCJ9LCBcIlplcmVib3NcIilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/ui/settings/settings.js\n"); - -/***/ }), - /***/ "./src/ui/settings/switch.jsx": /*!************************************!*\ !*** ./src/ui/settings/switch.jsx ***! @@ -903,18 +903,6 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), -/***/ "./src/ui/ui.js": -/*!**********************!*\ - !*** ./src/ui/ui.js ***! - \**********************/ -/*! exports provided: SettingsPanel, PublicServersMenu, Toasts, Modals */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _settings_settings__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./settings/settings */ \"./src/ui/settings/settings.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"SettingsPanel\", function() { return _settings_settings__WEBPACK_IMPORTED_MODULE_0__[\"default\"]; });\n\n/* harmony import */ var _publicservers_menu__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./publicservers/menu */ \"./src/ui/publicservers/menu.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PublicServersMenu\", function() { return _publicservers_menu__WEBPACK_IMPORTED_MODULE_1__[\"default\"]; });\n\n/* harmony import */ var _toasts__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./toasts */ \"./src/ui/toasts.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Toasts\", function() { return _toasts__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _modals__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modals */ \"./src/ui/modals.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Modals\", function() { return _modals__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n\n\n\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL3VpL3VpLmpzPzFkOWUiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0EiLCJmaWxlIjoiLi9zcmMvdWkvdWkuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQge2RlZmF1bHQgYXMgU2V0dGluZ3NQYW5lbH0gZnJvbSBcIi4vc2V0dGluZ3Mvc2V0dGluZ3NcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFB1YmxpY1NlcnZlcnNNZW51fSBmcm9tIFwiLi9wdWJsaWNzZXJ2ZXJzL21lbnVcIjtcclxuZXhwb3J0IHtkZWZhdWx0IGFzIFRvYXN0c30gZnJvbSBcIi4vdG9hc3RzXCI7XHJcbmV4cG9ydCB7ZGVmYXVsdCBhcyBNb2RhbHN9IGZyb20gXCIuL21vZGFsc1wiOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/ui/ui.js\n"); - -/***/ }), - /***/ "electron": /*!****************************************!*\ !*** external "require(\"electron\")" ***! diff --git a/package-lock.json b/package-lock.json index d1a441e4..8a8c8cea 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1778,6 +1778,12 @@ "safe-buffer": "^5.0.1" } }, + "circular-dependency-plugin": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/circular-dependency-plugin/-/circular-dependency-plugin-5.0.2.tgz", + "integrity": "sha512-oC7/DVAyfcY3UWKm0sN/oVoDedQDQiw/vIiAnuTWTpE5s0zWf7l3WY417Xw/Fbi/QbAjctAkxgMiS9P0s3zkmA==", + "dev": true + }, "class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -2811,8 +2817,7 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "aproba": { "version": "1.2.0", @@ -2833,14 +2838,12 @@ "balanced-match": { "version": "1.0.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "brace-expansion": { "version": "1.1.11", "bundled": true, "dev": true, - "optional": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2855,20 +2858,17 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "core-util-is": { "version": "1.0.2", @@ -2985,8 +2985,7 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "ini": { "version": "1.3.5", @@ -2998,7 +2997,6 @@ "version": "1.0.0", "bundled": true, "dev": true, - "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -3013,7 +3011,6 @@ "version": "3.0.4", "bundled": true, "dev": true, - "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3021,14 +3018,12 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "minipass": { "version": "2.3.5", "bundled": true, "dev": true, - "optional": true, "requires": { "safe-buffer": "^5.1.2", "yallist": "^3.0.0" @@ -3047,7 +3042,6 @@ "version": "0.5.1", "bundled": true, "dev": true, - "optional": true, "requires": { "minimist": "0.0.8" } @@ -3128,8 +3122,7 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3141,7 +3134,6 @@ "version": "1.4.0", "bundled": true, "dev": true, - "optional": true, "requires": { "wrappy": "1" } @@ -3227,8 +3219,7 @@ "safe-buffer": { "version": "5.1.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "safer-buffer": { "version": "2.1.2", @@ -3264,7 +3255,6 @@ "version": "1.0.2", "bundled": true, "dev": true, - "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -3284,7 +3274,6 @@ "version": "3.0.1", "bundled": true, "dev": true, - "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -3328,14 +3317,12 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true, - "optional": true + "dev": true }, "yallist": { "version": "3.0.3", "bundled": true, - "dev": true, - "optional": true + "dev": true } } }, diff --git a/package.json b/package.json index 5acb23ef..02b92b23 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@babel/preset-react": "^7.0.0", "@babel/register": "^7.0.0", "babel-loader": "^8.0.6", + "circular-dependency-plugin": "^5.0.2", "gulp": "^4.0.0", "gulp-csso": "^3.0.1", "gulp-rename": "^1.4.0", diff --git a/src/builtins/emotes.js b/src/builtins/emotes.js index c6443bc1..d9fd9f9c 100644 --- a/src/builtins/emotes.js +++ b/src/builtins/emotes.js @@ -3,7 +3,7 @@ import Builtin from "../structs/builtin"; import {Config, EmoteInfo, EmoteConfig} from "data"; import {Utilities, WebpackModules, DataStore, DiscordModules, Events, Settings} from "modules"; import BDEmote from "../ui/emote"; -import {Toasts} from "ui"; +import Toasts from "../ui/toasts"; const Emotes = { TwitchGlobal: {}, diff --git a/src/builtins/publicservers.js b/src/builtins/publicservers.js index 67784d15..23c46391 100644 --- a/src/builtins/publicservers.js +++ b/src/builtins/publicservers.js @@ -1,6 +1,6 @@ import Builtin from "../structs/builtin"; -import {BDV2, DiscordModules, WebpackModules} from "modules"; -import {PublicServersMenu} from "ui"; +import {DiscordModules, WebpackModules} from "modules"; +import PublicServersMenu from "../ui/publicservers/menu"; const LayerStack = WebpackModules.getByProps("pushLayer"); @@ -10,7 +10,7 @@ export default new class PublicServers extends Builtin { get id() {return "publicServers";} enabled() { - const wrapper = BDV2.guildClasses.wrapper.split(" ")[0]; + const wrapper = DiscordModules.GuildClasses.wrapper.split(" ")[0]; const guilds = $(`.${wrapper} .scroller-2FKFPG >:first-child`); guilds.after(this.button); } @@ -25,10 +25,10 @@ export default new class PublicServers extends Builtin { get button() { const btn = $("
", { - "class": BDV2.guildClasses.listItem, + "class": DiscordModules.GuildClasses.listItem, "id": "bd-pub-li" }).append($("
", { - "class": "wrapper-25eVIn " + BDV2.guildClasses.circleButtonMask, + "class": "wrapper-25eVIn " + DiscordModules.GuildClasses.circleButtonMask, "text": "public", "id": "bd-pub-button", "click": () => { this.openPublicServers(); } diff --git a/src/modules/bdv2.js b/src/modules/bdv2.js index 90883bd6..cf87d792 100644 --- a/src/modules/bdv2.js +++ b/src/modules/bdv2.js @@ -1,67 +1,49 @@ import WebpackModules from "./webpackmodules"; -import BdApi from "./pluginapi"; +import DiscordModules from "./discordmodules"; +import Utilities from "./utilities"; +import Patcher from "./patcher"; import BDLogo from "../ui/icons/bdlogo"; export default new class V2 { - constructor() { - this.editorDetached = false; - } - initialize() { - BdApi.suppressErrors(this.patchSocial.bind(this), "BD Social Patch")(); - BdApi.suppressErrors(this.patchGuildPills.bind(this), "BD Guild Pills Patch")(); - BdApi.suppressErrors(this.patchGuildListItems.bind(this), "BD Guild List Items Patch")(); - BdApi.suppressErrors(this.patchGuildSeparator.bind(this), "BD Guild Separator Patch")(); + Utilities.suppressErrors(this.patchSocial.bind(this), "BD Social Patch")(); + Utilities.suppressErrors(this.patchGuildPills.bind(this), "BD Guild Pills Patch")(); + Utilities.suppressErrors(this.patchGuildListItems.bind(this), "BD Guild List Items Patch")(); + Utilities.suppressErrors(this.patchGuildSeparator.bind(this), "BD Guild Separator Patch")(); } - get messageClasses() {return WebpackModules.getByProps("message", "containerCozy");} - get guildClasses() { - const guildsWrapper = WebpackModules.getByProps("wrapper", "unreadMentionsBar"); - const guilds = WebpackModules.getByProps("guildsError", "selected"); - const pill = WebpackModules.getByProps("blobContainer"); - return Object.assign({}, guildsWrapper, guilds, pill); - } - - get MessageContentComponent() {return WebpackModules.getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty("disableButtons"));} - get TimeFormatter() {return WebpackModules.getByProps("dateFormat");} - get TooltipWrapper() {return WebpackModules.getByDisplayName("TooltipDeprecated");} - get NativeModule() {return WebpackModules.getByProps("setBadge");} - get Tooltips() {return WebpackModules.getModule(m => m.hide && m.show && !m.search && !m.submit && !m.search && !m.activateRagingDemon && !m.dismiss);} - get KeyGenerator() {return WebpackModules.getModule(m => m.toString && /"binary"/.test(m.toString()));} - patchSocial() { if (this.socialPatch) return; - const TabBar = BdApi.findModule(m => m.displayName == "TabBar"); - const Anchor = BdApi.findModule(m => m.displayName == "Anchor"); + const TabBar = WebpackModules.getByDisplayName("TabBar"); + const Anchor = WebpackModules.getByDisplayName("Anchor"); if (!TabBar || !Anchor) return; - this.socialPatch = BdApi.monkeyPatch(TabBar.prototype, "render", {after: (data) => { - const children = data.returnValue.props.children; + this.socialPatch = Patcher.after("ThemeHelper", TabBar.prototype, "render", (_, __, returnValue) => { + const children = returnValue.props.children; if (!children || !children.length) return; if (children[children.length - 2].type.displayName !== "Separator") return; if (!children[children.length - 1].type.toString().includes("socialLinks")) return; const original = children[children.length - 1].type; const newOne = function() { const returnVal = original(...arguments); - returnVal.props.children.push(BdApi.React.createElement(Anchor, {className: "bd-social-link", href: "https://github.com/rauenzi/BetterDiscordApp", rel: "author", title: "BandagedBD", target: "_blank"}, - BdApi.React.createElement(BDLogo, {size: "16px", className: "bd-social-logo"}) + returnVal.props.children.push(DiscordModules.React.createElement(Anchor, {className: "bd-social-link", href: "https://github.com/rauenzi/BetterDiscordApp", rel: "author", title: "BandagedBD", target: "_blank"}, + DiscordModules.React.createElement(BDLogo, {size: "16px", className: "bd-social-logo"}) )); return returnVal; }; children[children.length - 1].type = newOne; - }}); + }); } patchGuildListItems() { if (this.guildListItemsPatch) return; - const listItemClass = this.guildClasses.listItem.split(" ")[0]; - const blobClass = this.guildClasses.blobContainer.split(" ")[0]; - const reactInstance = BdApi.getInternalInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement); + const listItemClass = DiscordModules.GuildClasses.listItem.split(" ")[0]; + const blobClass = DiscordModules.GuildClasses.blobContainer.split(" ")[0]; + const reactInstance = Utilities.getReactInstance(document.querySelector(`.${listItemClass} .${blobClass}`).parentElement); const GuildComponent = reactInstance.return.type; if (!GuildComponent) return; - this.guildListItemsPatch = BdApi.monkeyPatch(GuildComponent.prototype, "render", {after: (data) => { - const returnValue = data.returnValue; - const guildData = data.thisObject.props; + this.guildListItemsPatch = Patcher.after("ThemeHelper", GuildComponent.prototype, "render", (thisObject, _, returnValue) => { + const guildData = thisObject.props; returnValue.props.className += " bd-guild"; if (guildData.unread) returnValue.props.className += " bd-unread"; if (guildData.selected) returnValue.props.className += " bd-selected"; @@ -70,35 +52,37 @@ export default new class V2 { if (guildData.badge) returnValue.props.className += " bd-badge"; if (guildData.animatable) returnValue.props.className += " bd-animatable"; return returnValue; - }}); + }); } patchGuildPills() { if (this.guildPillPatch) return; - const guildPill = BdApi.findModule(m => m.default && m.default.toString && m.default.toString().includes("translate3d")); + const guildPill = WebpackModules.getModule(m => m.default && !m.default.displayName && m.default.toString && m.default.toString().includes("translate3d")); if (!guildPill) return; - this.guildPillPatch = BdApi.monkeyPatch(guildPill, "default", {after: (data) => { - const props = data.methodArguments[0]; - if (props.unread) data.returnValue.props.className += " bd-unread"; - if (props.selected) data.returnValue.props.className += " bd-selected"; - if (props.hovered) data.returnValue.props.className += " bd-hovered"; - return data.returnValue; - }}); + this.guildPillPatch = Patcher.after("ThemeHelper", guildPill, "default", (_, args, returnValue) => { + const props = args[0]; + if (props.unread) returnValue.props.className += " bd-unread"; + if (props.selected) returnValue.props.className += " bd-selected"; + if (props.hovered) returnValue.props.className += " bd-hovered"; + return returnValue; + }); } patchGuildSeparator() { if (this.guildSeparatorPatch) return; - const Guilds = BdApi.findModuleByDisplayName("Guilds"); - const guildComponents = BdApi.findModuleByProps("renderListItem"); + const Guilds = WebpackModules.getByDisplayName("Guilds"); + const guildComponents = WebpackModules.getByProps("renderListItem"); if (!guildComponents || !Guilds) return; const GuildSeparator = function() { const returnValue = guildComponents.Separator(...arguments); returnValue.props.className += " bd-guild-separator"; return returnValue; }; - this.guildSeparatorPatch = BdApi.monkeyPatch(Guilds.prototype, "render", {after: (data) => { - data.returnValue.props.children[1].props.children[3].type = GuildSeparator; - }}); + this.guildSeparatorPatch = Patcher.after("ThemeHelper", Guilds.prototype, "render", (_, __, returnValue) => { + const Separator = Utilities.findInReactTree(returnValue, m => m.type && !m.type.displayName && typeof(m.type) == "function" && Utilities.isEmpty(m.props)); + if (!Separator) return; + Separator.type = GuildSeparator; + }); } }; \ No newline at end of file diff --git a/src/modules/contentmanager.js b/src/modules/contentmanager.js index f1b3c791..ae65f952 100644 --- a/src/modules/contentmanager.js +++ b/src/modules/contentmanager.js @@ -5,7 +5,7 @@ import Events from "./emitter"; import DataStore from "./datastore"; import ContentError from "../structs/contenterror"; import MetaError from "../structs/metaerror"; -import {Toasts} from "ui"; +import Toasts from "../ui/toasts"; const path = require("path"); const fs = require("fs"); diff --git a/src/modules/core.js b/src/modules/core.js index 79f4de26..f259963c 100644 --- a/src/modules/core.js +++ b/src/modules/core.js @@ -8,8 +8,12 @@ import PluginManager from "./pluginmanager"; import ThemeManager from "./thememanager"; import Settings from "./settingsmanager"; import * as Builtins from "builtins"; -import {Modals} from "ui"; +import Modals from "../ui/modals"; import ReactComponents from "./reactcomponents"; +import DataStore from "./datastore"; +import DiscordModules from "./discordmodules"; + +const GuildClasses = DiscordModules.GuildClasses; function Core() { } @@ -23,31 +27,23 @@ Core.prototype.init = async function() { Modals.alert("Not Supported", "BetterDiscord v" + Config.version + " (your version)" + " is not supported by the latest js (" + Config.bbdVersion + ").

Please download the latest version from GitHub"); return; } + // const latestLocalVersion = Config.updater ? Config.updater.LatestVersion : Config.latestVersion; + // if (latestLocalVersion > Config.version) { + // Modals.alert("Update Available", ` + // An update for BandagedBD is available (${latestLocalVersion})! Please Reinstall!

+ // Download Installer + // `); + // } + + DataStore.initialize(); ReactComponents.initialize(); - const latestLocalVersion = Config.updater ? Config.updater.LatestVersion : Config.latestVersion; - if (latestLocalVersion > Config.version) { - Modals.alert("Update Available", ` - An update for BandagedBD is available (${latestLocalVersion})! Please Reinstall!

- Download Installer - `); - } Logger.log("Startup", "Initializing Settings"); Settings.initialize(); - Logger.log("Startup", "Initializing EmoteModule"); - // window.emotePromise = EmoteModule.init().then(() => { - // EmoteModule.initialized = true; - // Logger.log("Startup", "Initializing QuickEmoteMenu"); - // Events.dispatch("emotes-loaded"); - // // QuickEmoteMenu.init(); - // }); - - // this.injectExternals(); DOMManager.initialize(); - await this.checkForGuilds(); + await this.waitForGuilds(); BDV2.initialize(); - Logger.log("Startup", "Updating Settings"); for (const module in Builtins) Builtins[module].initialize(); Logger.log("Startup", "Loading Plugins"); @@ -61,21 +57,19 @@ Core.prototype.init = async function() { Logger.log("Startup", "Removing Loading Icon"); document.getElementsByClassName("bd-loaderv2")[0].remove(); - Logger.log("Startup", "Initializing Main Observer"); - this.initObserver(); // Show loading errors Logger.log("Startup", "Collecting Startup Errors"); Modals.showContentErrors({plugins: pluginErrors, themes: themeErrors}); }; -Core.prototype.checkForGuilds = function() { +Core.prototype.waitForGuilds = function() { return new Promise(resolve => { const checkForGuilds = function() { if (document.readyState != "complete") setTimeout(checkForGuilds, 100); - const wrapper = BDV2.guildClasses.wrapper.split(" ")[0]; - const guild = BDV2.guildClasses.listItem.split(" ")[0]; - const blob = BDV2.guildClasses.blobContainer.split(" ")[0]; + const wrapper = GuildClasses.wrapper.split(" ")[0]; + const guild = GuildClasses.listItem.split(" ")[0]; + const blob = GuildClasses.blobContainer.split(" ")[0]; if (document.querySelectorAll(`.${wrapper} .${guild} .${blob}`).length > 0) return resolve(Config.deferLoaded = true); setTimeout(checkForGuilds, 100); }; @@ -84,34 +78,4 @@ Core.prototype.checkForGuilds = function() { }); }; -Core.prototype.initObserver = function () { - const mainObserver = new MutationObserver((mutations) => { - - for (let i = 0, mlen = mutations.length; i < mlen; i++) { - const mutation = mutations[i]; - - // if there was nothing added, skip - if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) continue; - - const node = mutation.addedNodes[0]; - - if (node.classList.contains("layer-3QrUeG")) { - if (node.getElementsByClassName("guild-settings-base-section").length) node.setAttribute("layer-id", "server-settings"); - - // if (node.getElementsByClassName("socialLinks-3jqNFy").length) { - // node.setAttribute("layer-id", "user-settings"); - // node.setAttribute("id", "user-settings"); - // if (!document.getElementById("bd-settings-sidebar")) Settings.renderSidebar(); - // } - } - } - }); - - mainObserver.observe(document, { - childList: true, - subtree: true - }); -}; - - export default new Core(); \ No newline at end of file diff --git a/src/modules/discordmodules.js b/src/modules/discordmodules.js index 9c13a149..129f1b81 100644 --- a/src/modules/discordmodules.js +++ b/src/modules/discordmodules.js @@ -142,5 +142,13 @@ export default Utilities.memoizeObject({ get Buffers() {return WebpackModules.getByProps("Buffer", "kMaxLength");}, get DeviceStore() {return WebpackModules.getByProps("getDevices");}, get SoftwareInfo() {return WebpackModules.getByProps("os");}, - get CurrentContext() {return WebpackModules.getByProps("setTagsContext");} + get CurrentContext() {return WebpackModules.getByProps("setTagsContext");}, + + /* Commonly Used Classes */ + get GuildClasses() { + const guildsWrapper = WebpackModules.getByProps("wrapper", "unreadMentionsBar"); + const guilds = WebpackModules.getByProps("guildsError", "selected"); + const pill = WebpackModules.getByProps("blobContainer"); + return Object.assign({}, guildsWrapper, guilds, pill); + } }); \ No newline at end of file diff --git a/src/modules/modules.js b/src/modules/modules.js index 53bc3462..dd140c96 100644 --- a/src/modules/modules.js +++ b/src/modules/modules.js @@ -1,29 +1,15 @@ -import Utilities from "./utilities"; -import WebpackModules from "./webpackmodules"; +export {default as WebpackModules} from "./webpackmodules"; + import DiscordModules from "./discordmodules"; - -import BDV2 from "./bdv2"; -import BdApi from "./pluginapi"; -import Core from "./core"; - - - -import ContentManager from "./contentmanager"; -import DataStore from "./datastore"; -// import DevMode from "./devmode"; -import Events from "./emitter"; -// import EmoteModule from "./emotes"; -import PluginManager from "./pluginmanager"; -// import PublicServers from "./publicservers"; -import ThemeManager from "./thememanager"; -import Settings from "./settingsmanager"; -import DOMManager from "./dommanager"; -import Logger from "./logger"; -import Patcher from "./patcher"; - export const React = DiscordModules.React; export const ReactDOM = DiscordModules.ReactDOM; +export {DiscordModules}; -export {BDV2, BdApi, Core, ContentManager, DataStore, Logger, - Events, PluginManager, DOMManager, ThemeManager, Patcher, - Utilities, WebpackModules, DiscordModules, Settings}; +export {default as Utilities} from "./utilities"; +export {default as DataStore} from "./datastore"; +export {default as Events} from "./emitter"; +export {default as Settings} from "./settingsmanager"; +export {default as DOMManager} from "./dommanager"; +export {default as Logger} from "./logger"; +export {default as Patcher} from "./patcher"; +export {default as ReactComponents} from "./reactcomponents"; diff --git a/src/modules/pluginapi.js b/src/modules/pluginapi.js index 4d60c975..7b7491e8 100644 --- a/src/modules/pluginapi.js +++ b/src/modules/pluginapi.js @@ -3,7 +3,8 @@ import WebpackModules from "./webpackmodules"; import DiscordModules from "./discordmodules"; import DataStore from "./datastore"; import DOMManager from "./dommanager"; -import {Toasts, Modals} from "ui"; +import Toasts from "../ui/toasts"; +import Modals from "../ui/modals"; const BdApi = { get React() { return DiscordModules.React; }, diff --git a/src/modules/pluginmanager.js b/src/modules/pluginmanager.js index 39753c97..a0664a17 100644 --- a/src/modules/pluginmanager.js +++ b/src/modules/pluginmanager.js @@ -2,10 +2,12 @@ import {Config} from "data"; import Logger from "./logger"; import ContentManager from "./contentmanager"; import Utilities from "./utilities"; -import {Toasts, Modals} from "ui"; import ContentError from "../structs/contenterror"; import Settings from "./settingsmanager"; -import {SettingsPanel as SettingsRenderer} from "ui"; + +import Toasts from "../ui/toasts"; +import Modals from "../ui/modals"; +import SettingsRenderer from "../ui/settings"; const path = require("path"); const electronRemote = require("electron").remote; diff --git a/src/modules/settingsmanager.js b/src/modules/settingsmanager.js index c9c259b4..48b6bcd7 100644 --- a/src/modules/settingsmanager.js +++ b/src/modules/settingsmanager.js @@ -2,13 +2,13 @@ import {SettingsConfig} from "data"; import Logger from "./logger"; import DataStore from "./datastore"; import Events from "./emitter"; -import WebpackModules from "./webpackmodules"; +// import WebpackModules from "./webpackmodules"; import DiscordModules from "./discordmodules"; -import Patcher from "./patcher"; -import ReactComponents from "./reactcomponents"; +// import Patcher from "./patcher"; +// import ReactComponents from "./reactcomponents"; -import {SettingsPanel as SettingsRenderer} from "ui"; -import Utilities from "./utilities"; +// import SettingsRenderer from "../ui/settings/settings"; +// import Utilities from "./utilities"; export default new class SettingsManager { @@ -20,9 +20,8 @@ export default new class SettingsManager { } initialize() { - DataStore.initialize(); this.loadSettings(); - this.patchSections(); + // this.patchSections(); } registerCollection(id, name, settings, button = null) { @@ -43,6 +42,7 @@ export default new class SettingsManager { this.collections.splice(location, 1); } + // TODO: Move this to SettingsRenderer and also add a registerContentPanel registerPanel(id, name, options) { if (this.panels.find(p => p.id == id)) return Logger.error("Settings", "Already have a panel with id " + id); const {element, onClick, order = 1} = options; @@ -103,45 +103,6 @@ export default new class SettingsManager { } } - async patchSections() { - Patcher.after("SettingsManager", WebpackModules.getByDisplayName("FluxContainer(GuildSettings)").prototype, "render", (thisObject) => { - thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = "guild-settings"; - }); - const UserSettings = await ReactComponents.get("UserSettings", m => m.prototype && m.prototype.generateSections); - Patcher.after("SettingsManager", UserSettings.prototype, "render", (thisObject) => { - thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = "user-settings"; - }); - Patcher.after("SettingsManager", UserSettings.prototype, "generateSections", (thisObject, args, returnValue) => { - let location = returnValue.findIndex(s => s.section.toLowerCase() == "linux") + 1; - const insert = (section) => { - returnValue.splice(location, 0, section); - location++; - }; - insert({section: "DIVIDER"}); - insert({section: "HEADER", label: "BandagedBD"}); - for (const collection of this.collections) { - if (collection.disabled) continue; - insert({ - section: collection.name, - label: collection.name, - element: () => SettingsRenderer.buildSettingsPanel(collection.name, collection.settings, this.state[collection.id], this.onSettingChange.bind(this, collection.id), collection.button ? collection.button : null) - }); - } - for (const panel of this.panels.sort((a,b) => a.order > b.order)) { - if (panel.clickListener) panel.onClick = (event) => panel.clickListener(thisObject, event, returnValue); - insert(panel); - } - insert({section: "CUSTOM", element: () => SettingsRenderer.attribution}); - }); - this.forceUpdate(); - } - - forceUpdate() { - const viewClass = WebpackModules.getByProps("standardSidebarView").standardSidebarView.split(" ")[0]; - const node = document.querySelector(`.${viewClass}`); - Utilities.getReactInstance(node).return.return.return.return.return.return.stateNode.forceUpdate(); - } - saveSettings() { DataStore.setData("settings", this.state); } diff --git a/src/modules/thememanager.js b/src/modules/thememanager.js index 8b15918a..575ca4cc 100644 --- a/src/modules/thememanager.js +++ b/src/modules/thememanager.js @@ -1,9 +1,11 @@ import {Config} from "data"; import ContentManager from "./contentmanager"; -import {Modals} from "ui"; import Settings from "./settingsmanager"; import DOMManager from "./dommanager"; -import {SettingsPanel as SettingsRenderer} from "ui"; + +import Toasts from "../ui/toasts"; +import Modals from "../ui/modals"; +import SettingsRenderer from "../ui/settings"; const path = require("path"); @@ -55,11 +57,13 @@ export default new class ThemeManager extends ContentManager { const content = typeof(idOrContent) == "string" ? this.contentList.find(p => p.id == idOrContent) : idOrContent; if (!content) return; DOMManager.injectTheme(content.id, content.css); + Toasts.show(`${content.name} v${content.version} has been applied.`); } removeTheme(idOrContent) { const content = typeof(idOrContent) == "string" ? this.contentList.find(p => p.id == idOrContent) : idOrContent; if (!content) return; DOMManager.removeTheme(content.id); + Toasts.show(`${content.name} v${content.version} has been removed.`); } }; \ No newline at end of file diff --git a/src/modules/webpackmodules.js b/src/modules/webpackmodules.js index 0bc10401..ae2b1d10 100644 --- a/src/modules/webpackmodules.js +++ b/src/modules/webpackmodules.js @@ -4,146 +4,7 @@ * @version 0.0.2 */ -import DiscordModules from "./discordmodules"; - -// const DiscordModules = Utilities.memoizeObject({ -// get React() {return WebpackModules.getByProps("createElement", "cloneElement");}, -// get ReactDOM() {return WebpackModules.getByProps("render", "findDOMNode");}, -// get Flux() {return WebpackModules.getByProps("connectStores");}, -// get Events() {return WebpackModules.getByPrototypes("setMaxListeners", "emit");}, - -// /* Guild Info, Stores, and Utilities */ -// get GuildStore() {return WebpackModules.getByProps("getGuild");}, -// get SortedGuildStore() {return WebpackModules.getByProps("getSortedGuilds");}, -// get SelectedGuildStore() {return WebpackModules.getByProps("getLastSelectedGuildId");}, -// get GuildSync() {return WebpackModules.getByProps("getSyncedGuilds");}, -// get GuildInfo() {return WebpackModules.getByProps("getAcronym");}, -// get GuildChannelsStore() {return WebpackModules.getByProps("getChannels", "getDefaultChannel");}, -// get GuildMemberStore() {return WebpackModules.getByProps("getMember");}, -// get MemberCountStore() {return WebpackModules.getByProps("getMemberCounts");}, -// get GuildEmojiStore() {return WebpackModules.getByProps("getEmojis");}, -// get GuildActions() {return WebpackModules.getByProps("markGuildAsRead");}, -// get GuildPermissions() {return WebpackModules.getByProps("getGuildPermissions");}, - -// /* Channel Store & Actions */ -// get ChannelStore() {return WebpackModules.getByProps("getChannels", "getDMFromUserId");}, -// get SelectedChannelStore() {return WebpackModules.getByProps("getLastSelectedChannelId");}, -// get ChannelActions() {return WebpackModules.getByProps("selectChannel");}, -// get PrivateChannelActions() {return WebpackModules.getByProps("openPrivateChannel");}, -// get ChannelSelector() {return WebpackModules.getByProps("selectGuild", "selectChannel");}, - -// /* Current User Info, State and Settings */ -// get UserInfoStore() {return WebpackModules.getByProps("getToken");}, -// get UserSettingsStore() {return WebpackModules.getByProps("guildPositions");}, -// get AccountManager() {return WebpackModules.getByProps("register", "login");}, -// get UserSettingsUpdater() {return WebpackModules.getByProps("updateRemoteSettings");}, -// get OnlineWatcher() {return WebpackModules.getByProps("isOnline");}, -// get CurrentUserIdle() {return WebpackModules.getByProps("getIdleTime");}, -// get RelationshipStore() {return WebpackModules.getByProps("isBlocked", "getFriendIDs");}, -// get RelationshipManager() {return WebpackModules.getByProps("addRelationship");}, -// get MentionStore() {return WebpackModules.getByProps("getMentions");}, - -// /* User Stores and Utils */ -// get UserStore() {return WebpackModules.getByProps("getCurrentUser");}, -// get UserStatusStore() {return WebpackModules.getByProps("getStatus", "getState");}, -// get UserTypingStore() {return WebpackModules.getByProps("isTyping");}, -// get UserActivityStore() {return WebpackModules.getByProps("getActivity");}, -// get UserNameResolver() {return WebpackModules.getByProps("getName");}, -// get UserNoteStore() {return WebpackModules.getByProps("getNote");}, -// get UserNoteActions() {return WebpackModules.getByProps("updateNote");}, - -// /* Emoji Store and Utils */ -// get EmojiInfo() {return WebpackModules.getByProps("isEmojiDisabled");}, -// get EmojiUtils() {return WebpackModules.getByProps("getGuildEmoji");}, -// get EmojiStore() {return WebpackModules.getByProps("getByCategory", "EMOJI_NAME_RE");}, - -// /* Invite Store and Utils */ -// get InviteStore() {return WebpackModules.getByProps("getInvites");}, -// get InviteResolver() {return WebpackModules.getByProps("findInvite");}, -// get InviteActions() {return WebpackModules.getByProps("acceptInvite");}, - -// /* Discord Objects & Utils */ -// get DiscordConstants() {return WebpackModules.getByProps("Permissions", "ActivityTypes", "StatusTypes");}, -// get DiscordPermissions() {return WebpackModules.getByProps("Permissions", "ActivityTypes", "StatusTypes").Permissions;}, -// get PermissionUtils() {return WebpackModules.getByProps("getHighestRole");}, -// get ColorConverter() {return WebpackModules.getByProps("hex2int");}, -// get ColorShader() {return WebpackModules.getByProps("darken");}, -// get TinyColor() {return WebpackModules.getByPrototypes("toRgb");}, -// get ClassResolver() {return WebpackModules.getByProps("getClass");}, -// get ButtonData() {return WebpackModules.getByProps("ButtonSizes");}, -// get IconNames() {return WebpackModules.getByProps("IconNames");}, -// get NavigationUtils() {return WebpackModules.getByProps("transitionTo", "replaceWith", "getHistory");}, - -// /* Discord Messages */ -// get MessageStore() {return WebpackModules.getByProps("getMessages");}, -// get MessageActions() {return WebpackModules.getByProps("jumpToMessage", "_sendMessage");}, -// get MessageQueue() {return WebpackModules.getByProps("enqueue");}, -// get MessageParser() {return WebpackModules.getByProps("createMessage", "parse", "unparse");}, - -// /* Text Processing */ -// get hljs() {return WebpackModules.getByProps("highlight", "highlightBlock");}, -// get SimpleMarkdown() {return WebpackModules.getByProps("parseBlock", "parseInline", "defaultOutput");}, - -// /* Experiments */ -// get ExperimentStore() {return WebpackModules.getByProps("getExperimentOverrides");}, -// get ExperimentsManager() {return WebpackModules.getByProps("isDeveloper");}, -// get CurrentExperiment() {return WebpackModules.getByProps("getExperimentId");}, - -// /* Images, Avatars and Utils */ -// get ImageResolver() {return WebpackModules.getByProps("getUserAvatarURL", "getGuildIconURL");}, -// get ImageUtils() {return WebpackModules.getByProps("getSizedImageSrc");}, -// get AvatarDefaults() {return WebpackModules.getByProps("getUserAvatarURL", "DEFAULT_AVATARS");}, - -// /* Window, DOM, HTML */ -// get WindowInfo() {return WebpackModules.getByProps("isFocused", "windowSize");}, -// get TagInfo() {return WebpackModules.getByProps("VALID_TAG_NAMES");}, -// get DOMInfo() {return WebpackModules.getByProps("canUseDOM");}, - -// /* Locale/Location and Time */ -// get LocaleManager() {return WebpackModules.getByProps("setLocale");}, -// get Moment() {return WebpackModules.getByProps("parseZone");}, -// get LocationManager() {return WebpackModules.getByProps("createLocation");}, -// get Timestamps() {return WebpackModules.getByProps("fromTimestamp");}, -// get TimeFormatter() {return WebpackModules.getByProps("dateFormat");}, - -// /* Strings and Utils */ -// get Strings() {return WebpackModules.getByProps("Messages").Messages;}, -// get StringFormats() {return WebpackModules.getByProps("a", "z");}, -// get StringUtils() {return WebpackModules.getByProps("toASCII");}, - -// /* URLs and Utils */ -// get URLParser() {return WebpackModules.getByProps("Url", "parse");}, -// get ExtraURLs() {return WebpackModules.getByProps("getArticleURL");}, - -// /* Drag & Drop */ -// get DNDActions() {return WebpackModules.getByProps("beginDrag");}, -// get DNDSources() {return WebpackModules.getByProps("addTarget");}, -// get DNDObjects() {return WebpackModules.getByProps("DragSource");}, - -// /* Media Stuff (Audio/Video) */ -// get MediaDeviceInfo() {return WebpackModules.getByProps("Codecs", "SUPPORTED_BROWSERS");}, -// get MediaInfo() {return WebpackModules.getByProps("getOutputVolume");}, -// get MediaEngineInfo() {return WebpackModules.getByProps("MediaEngineFeatures");}, -// get VoiceInfo() {return WebpackModules.getByProps("EchoCancellation");}, -// get VideoStream() {return WebpackModules.getByProps("getVideoStream");}, -// get SoundModule() {return WebpackModules.getByProps("playSound");}, - -// /* Electron & Other Internals with Utils*/ -// get ElectronModule() {return WebpackModules.getByProps("setBadge");}, -// get Dispatcher() {return WebpackModules.getByProps("dirtyDispatch");}, -// get PathUtils() {return WebpackModules.getByProps("hasBasename");}, -// get NotificationModule() {return WebpackModules.getByProps("showNotification");}, -// get RouterModule() {return WebpackModules.getByProps("Router");}, -// get APIModule() {return WebpackModules.getByProps("getAPIBaseURL");}, -// get AnalyticEvents() {return WebpackModules.getByProps("AnalyticEventConfigs");}, -// get KeyGenerator() {return WebpackModules.getByRegex(/"binary"/);}, -// get Buffers() {return WebpackModules.getByProps("Buffer", "kMaxLength");}, -// get DeviceStore() {return WebpackModules.getByProps("getDevices");}, -// get SoftwareInfo() {return WebpackModules.getByProps("os");}, -// get CurrentContext() {return WebpackModules.getByProps("setTagsContext");} -// }); - -// export {DiscordModules}; +// import DiscordModules from "./discordmodules"; /** * Checks if a given module matches a set of parameters. @@ -282,12 +143,12 @@ export default class WebpackModules { * @param {Function} fallback A function to use to filter modules if not finding a known module * @return {Any} */ - static getModuleByName(name, fallback) { - if (DiscordModules.hasOwnProperty(name)) return DiscordModules[name]; - if (!fallback) return undefined; - const module = this.getModule(fallback, true); - return module ? DiscordModules[name] = module : undefined; - } + // static getModuleByName(name, fallback) { + // if (DiscordModules.hasOwnProperty(name)) return DiscordModules[name]; + // if (!fallback) return undefined; + // const module = this.getModule(fallback, true); + // return module ? DiscordModules[name] = module : undefined; + // } /** * Finds a module by its display name. diff --git a/src/ui/emote.js b/src/ui/emote.js index d8968fd6..b560a673 100644 --- a/src/ui/emote.js +++ b/src/ui/emote.js @@ -1,6 +1,8 @@ -import {BDV2, Settings, React} from "modules"; +import {Settings, React, WebpackModules} from "modules"; import EmoteMenu from "../builtins/emotemenu"; +const TooltipWrapper = WebpackModules.getByDisplayName("TooltipDeprecated"); + export default class BDEmote extends React.Component { constructor(props) { super(props); @@ -43,7 +45,7 @@ export default class BDEmote extends React.Component { } render() { - return React.createElement(BDV2.TooltipWrapper, { + return React.createElement(TooltipWrapper, { color: "black", position: "top", text: this.label, diff --git a/src/ui/settings.js b/src/ui/settings.js new file mode 100644 index 00000000..440e1eba --- /dev/null +++ b/src/ui/settings.js @@ -0,0 +1,80 @@ +import {Config} from "data"; +import {React, WebpackModules, Patcher, ReactComponents, Utilities, Settings} from "modules"; + +import ContentList from "./settings/contentlist"; +import SettingsGroup from "./settings/group"; +import SettingsTitle from "./settings/title"; + +export default new class SettingsRenderer { + + constructor() { + this.patchSections(); + } + + 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, button); + } + + 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})); + })]; + } + + getContentPanel(title, contentList, contentState, options = {}) { + return React.createElement(ContentList, Object.assign({}, { + title: title, + contentList: contentList, + contentState: contentState + }, options)); + } + + get attribution() { + return React.createElement("div", {className: "bd-version", style: {fontSize: "12px", fontWeight: "600", color: "#72767d", padding: "2px 10px"}}, + `BBD v${Config.bbdVersion} by `, + React.createElement("a", {href: "https://github.com/rauenzi/", target: "_blank"}, "Zerebos") + ); + } + + async patchSections() { + Patcher.after("SettingsManager", WebpackModules.getByDisplayName("FluxContainer(GuildSettings)").prototype, "render", (thisObject) => { + thisObject._reactInternalFiber.return.return.return.return.return.return.memoizedProps.id = "guild-settings"; + }); + const UserSettings = await ReactComponents.get("UserSettings", m => m.prototype && m.prototype.generateSections); + Patcher.after("SettingsManager", UserSettings.prototype, "render", (thisObject) => { + thisObject._reactInternalFiber.return.return.return.return.return.return.return.memoizedProps.id = "user-settings"; + }); + Patcher.after("SettingsManager", UserSettings.prototype, "generateSections", (thisObject, args, returnValue) => { + let location = returnValue.findIndex(s => s.section.toLowerCase() == "linux") + 1; + const insert = (section) => { + returnValue.splice(location, 0, section); + location++; + }; + insert({section: "DIVIDER"}); + insert({section: "HEADER", label: "BandagedBD"}); + for (const collection of Settings.collections) { + if (collection.disabled) continue; + insert({ + section: collection.name, + label: collection.name, + element: () => this.buildSettingsPanel(collection.name, collection.settings, Settings.state[collection.id], Settings.onSettingChange.bind(Settings, collection.id), collection.button ? collection.button : null) + }); + } + for (const panel of Settings.panels.sort((a,b) => a.order > b.order)) { + if (panel.clickListener) panel.onClick = (event) => panel.clickListener(thisObject, event, returnValue); + insert(panel); + } + insert({section: "CUSTOM", element: () => this.attribution}); + }); + this.forceUpdate(); + } + + forceUpdate() { + const viewClass = WebpackModules.getByProps("standardSidebarView").standardSidebarView.split(" ")[0]; + const node = document.querySelector(`.${viewClass}`); + Utilities.getReactInstance(node).return.return.return.return.return.return.stateNode.forceUpdate(); + } +}; \ No newline at end of file diff --git a/src/ui/settings/settings.js b/src/ui/settings/settings.js deleted file mode 100644 index 3548f06d..00000000 --- a/src/ui/settings/settings.js +++ /dev/null @@ -1,37 +0,0 @@ -import {Config} from "data"; -import {React} from "modules"; - -import ContentList from "./contentlist"; -import SettingsGroup from "../settings/group"; -import SettingsTitle from "./title"; - -export default class V2_SettingsPanel { - - 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, button); - } - - 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 getContentPanel(title, contentList, contentState, options = {}) { - return React.createElement(ContentList, Object.assign({}, { - title: title, - contentList: contentList, - contentState: contentState - }, options)); - } - - static get attribution() { - return React.createElement("div", {className: "bd-version", style: {fontSize: "12px", fontWeight: "600", color: "#72767d", padding: "2px 10px"}}, - `BBD v${Config.bbdVersion} by `, - React.createElement("a", {href: "https://github.com/rauenzi/", target: "_blank"}, "Zerebos") - ); - } -} \ No newline at end of file diff --git a/src/ui/ui.js b/src/ui/ui.js index 069a3dfe..feb4f8ab 100644 --- a/src/ui/ui.js +++ b/src/ui/ui.js @@ -1,4 +1,4 @@ -export {default as SettingsPanel} from "./settings/settings"; -export {default as PublicServersMenu} from "./publicservers/menu"; -export {default as Toasts} from "./toasts"; -export {default as Modals} from "./modals"; \ No newline at end of file +// export {default as SettingsPanel} from "./settings/settings"; +// export {default as PublicServersMenu} from "./publicservers/menu"; +// export {default as Toasts} from "./toasts"; +// export {default as Modals} from "./modals"; \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js index 321ac499..41951c88 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -1,4 +1,5 @@ const path = require("path"); +const CircularDependencyPlugin = require("circular-dependency-plugin"); module.exports = { mode: "development", @@ -24,8 +25,7 @@ module.exports = { modules: [ path.resolve("src", "builtins"), path.resolve("src", "data"), - path.resolve("src", "modules"), - path.resolve("src", "ui") + path.resolve("src", "modules") ] }, module: { @@ -44,5 +44,16 @@ module.exports = { } } ] - } + }, + plugins: [ + new CircularDependencyPlugin({ + // exclude detection of files based on a RegExp + exclude: /a\.js|node_modules/, + // add errors to webpack instead of warnings + // failOnError: true, + // set the current working directory for displaying module paths + cwd: process.cwd(), + }) + ] + }; \ No newline at end of file