From 73ee66e7d6d752e20d1a173de0624cb9a9f68bb3 Mon Sep 17 00:00:00 2001 From: Zack Rauen Date: Wed, 19 Jun 2019 22:19:34 -0400 Subject: [PATCH] do some patching --- js/main.js | 50 ++++--- src/builtins/24hour.js | 21 ++- src/builtins/coloredtext.js | 17 +-- src/builtins/customcss.js | 4 +- src/builtins/emotes.js | 8 +- src/builtins/minimalmode.js | 8 +- src/builtins/voicemode.js | 18 +-- src/index.js | 3 +- src/modules/componentpatcher.js | 2 +- src/modules/contentmanager.js | 9 +- src/modules/core.js | 1 - src/modules/dommanager.js | 42 ++++-- src/modules/modules.js | 3 +- src/modules/pluginapi.js | 12 +- src/modules/settingsmanager.js | 2 +- src/modules/thememanager.js | 12 +- src/modules/updater.js | 248 ++++++++++++++++++++++++++++++++ src/modules/utilities.js | 156 +++++++++++++++----- src/structs/builtin.js | 9 ++ src/ui/floating/container.jsx | 28 +--- src/ui/publicservers/menu.js | 5 +- 21 files changed, 506 insertions(+), 152 deletions(-) create mode 100644 src/modules/updater.js diff --git a/js/main.js b/js/main.js index 1eb2734f..d7c8c38b 100644 --- a/js/main.js +++ b/js/main.js @@ -95,7 +95,7 @@ var Core = /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class TwentyFourHour extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"24Hour\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"twentyFourHour\";\n }\n\n enabled() {\n this.inject24Hour();\n }\n\n disabled() {\n if (!this.cancel24Hour) return;\n this.cancel24Hour();\n delete this.cancel24Hour;\n }\n\n inject24Hour() {\n if (this.cancel24Hour) return;\n const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\\\s(AM|PM)`);\n\n const convert = data => {\n const matched = data.returnValue.match(twelveHour);\n if (!matched || matched.length !== 4) return;\n if (matched[3] === \"AM\") return data.returnValue = data.returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"00\" : matched[1].padStart(2, \"0\")}:${matched[2]}`);\n return data.returnValue = data.returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"12\" : parseInt(matched[1]) + 12}:${matched[2]}`);\n };\n\n const cancelCozy = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].monkeyPatch(modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].TimeFormatter, \"calendarFormat\", {\n after: convert\n }); // Called in Cozy mode\n\n const cancelCompact = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].monkeyPatch(modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].TimeFormatter, \"dateFormat\", {\n after: convert\n }); // Called in Compact mode\n\n this.cancel24Hour = () => {\n cancelCozy();\n cancelCompact();\n }; // Cancel both\n\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zLzI0aG91ci5qcz9kZTc4Il0sIm5hbWVzIjpbIlR3ZW50eUZvdXJIb3VyIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsImluamVjdDI0SG91ciIsImRpc2FibGVkIiwiY2FuY2VsMjRIb3VyIiwidHdlbHZlSG91ciIsIlJlZ0V4cCIsImNvbnZlcnQiLCJkYXRhIiwibWF0Y2hlZCIsInJldHVyblZhbHVlIiwibWF0Y2giLCJsZW5ndGgiLCJyZXBsYWNlIiwicGFkU3RhcnQiLCJwYXJzZUludCIsImNhbmNlbENvenkiLCJVdGlsaXRpZXMiLCJtb25rZXlQYXRjaCIsIkRpc2NvcmRNb2R1bGVzIiwiVGltZUZvcm1hdHRlciIsImFmdGVyIiwiY2FuY2VsQ29tcGFjdCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVlLG1FQUFJLE1BQU1BLGNBQU4sU0FBNkJDLHdEQUE3QixDQUFxQztBQUNwRCxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLFFBQVA7QUFBaUI7O0FBQzdCLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sU0FBUDtBQUFrQjs7QUFDbEMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxnQkFBUDtBQUF5Qjs7QUFFbkNDLFNBQU8sR0FBRztBQUNOLFNBQUtDLFlBQUw7QUFDSDs7QUFFREMsVUFBUSxHQUFHO0FBQ1AsUUFBSSxDQUFDLEtBQUtDLFlBQVYsRUFBd0I7QUFDeEIsU0FBS0EsWUFBTDtBQUNBLFdBQU8sS0FBS0EsWUFBWjtBQUNIOztBQUVERixjQUFZLEdBQUc7QUFDWCxRQUFJLEtBQUtFLFlBQVQsRUFBdUI7QUFFdkIsVUFBTUMsVUFBVSxHQUFHLElBQUlDLE1BQUosQ0FBWSxxQ0FBWixDQUFuQjs7QUFDQSxVQUFNQyxPQUFPLEdBQUlDLElBQUQsSUFBVTtBQUN0QixZQUFNQyxPQUFPLEdBQUdELElBQUksQ0FBQ0UsV0FBTCxDQUFpQkMsS0FBakIsQ0FBdUJOLFVBQXZCLENBQWhCO0FBQ0EsVUFBSSxDQUFDSSxPQUFELElBQVlBLE9BQU8sQ0FBQ0csTUFBUixLQUFtQixDQUFuQyxFQUFzQztBQUN0QyxVQUFJSCxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBbkIsRUFBeUIsT0FBT0QsSUFBSSxDQUFDRSxXQUFMLEdBQW1CRixJQUFJLENBQUNFLFdBQUwsQ0FBaUJHLE9BQWpCLENBQXlCSixPQUFPLENBQUMsQ0FBRCxDQUFoQyxFQUFzQyxHQUFFQSxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBZixHQUFzQixJQUF0QixHQUE2QkEsT0FBTyxDQUFDLENBQUQsQ0FBUCxDQUFXSyxRQUFYLENBQW9CLENBQXBCLEVBQXVCLEdBQXZCLENBQTRCLElBQUdMLE9BQU8sQ0FBQyxDQUFELENBQUksRUFBL0csQ0FBMUI7QUFDekIsYUFBT0QsSUFBSSxDQUFDRSxXQUFMLEdBQW1CRixJQUFJLENBQUNFLFdBQUwsQ0FBaUJHLE9BQWpCLENBQXlCSixPQUFPLENBQUMsQ0FBRCxDQUFoQyxFQUFzQyxHQUFFQSxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBZixHQUFzQixJQUF0QixHQUE2Qk0sUUFBUSxDQUFDTixPQUFPLENBQUMsQ0FBRCxDQUFSLENBQVIsR0FBdUIsRUFBRyxJQUFHQSxPQUFPLENBQUMsQ0FBRCxDQUFJLEVBQTdHLENBQTFCO0FBQ0gsS0FMRDs7QUFPQSxVQUFNTyxVQUFVLEdBQUdDLGlEQUFTLENBQUNDLFdBQVYsQ0FBc0JDLHNEQUFjLENBQUNDLGFBQXJDLEVBQW9ELGdCQUFwRCxFQUFzRTtBQUFDQyxXQUFLLEVBQUVkO0FBQVIsS0FBdEUsQ0FBbkIsQ0FYVyxDQVdpRzs7QUFDNUcsVUFBTWUsYUFBYSxHQUFHTCxpREFBUyxDQUFDQyxXQUFWLENBQXNCQyxzREFBYyxDQUFDQyxhQUFyQyxFQUFvRCxZQUFwRCxFQUFrRTtBQUFDQyxXQUFLLEVBQUVkO0FBQVIsS0FBbEUsQ0FBdEIsQ0FaVyxDQVlnRzs7QUFDM0csU0FBS0gsWUFBTCxHQUFvQixNQUFNO0FBQUNZLGdCQUFVO0FBQUlNLG1CQUFhO0FBQUksS0FBMUQsQ0FiVyxDQWFpRDs7QUFDL0Q7O0FBN0JtRCxDQUF6QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zLzI0aG91ci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtVdGlsaXRpZXMsIERpc2NvcmRNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFR3ZW50eUZvdXJIb3VyIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCIyNEhvdXJcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJ0d2VudHlGb3VySG91clwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbDI0SG91cikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsMjRIb3VyKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsMjRIb3VyO1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdDI0SG91cigpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWwyNEhvdXIpIHJldHVybjtcclxuXHJcbiAgICAgICAgY29uc3QgdHdlbHZlSG91ciA9IG5ldyBSZWdFeHAoYChbMC05XXsxLDJ9KTooWzAtOV17MSwyfSlcXFxccyhBTXxQTSlgKTtcclxuICAgICAgICBjb25zdCBjb252ZXJ0ID0gKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IGRhdGEucmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjAwXCIgOiBtYXRjaGVkWzFdLnBhZFN0YXJ0KDIsIFwiMFwiKX06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgICAgICByZXR1cm4gZGF0YS5yZXR1cm5WYWx1ZSA9IGRhdGEucmV0dXJuVmFsdWUucmVwbGFjZShtYXRjaGVkWzBdLCBgJHttYXRjaGVkWzFdID09PSBcIjEyXCIgPyBcIjEyXCIgOiBwYXJzZUludChtYXRjaGVkWzFdKSArIDEyfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ296eSA9IFV0aWxpdGllcy5tb25rZXlQYXRjaChEaXNjb3JkTW9kdWxlcy5UaW1lRm9ybWF0dGVyLCBcImNhbGVuZGFyRm9ybWF0XCIsIHthZnRlcjogY29udmVydH0pOyAvLyBDYWxsZWQgaW4gQ296eSBtb2RlXHJcbiAgICAgICAgY29uc3QgY2FuY2VsQ29tcGFjdCA9IFV0aWxpdGllcy5tb25rZXlQYXRjaChEaXNjb3JkTW9kdWxlcy5UaW1lRm9ybWF0dGVyLCBcImRhdGVGb3JtYXRcIiwge2FmdGVyOiBjb252ZXJ0fSk7IC8vIENhbGxlZCBpbiBDb21wYWN0IG1vZGVcclxuICAgICAgICB0aGlzLmNhbmNlbDI0SG91ciA9ICgpID0+IHtjYW5jZWxDb3p5KCk7IGNhbmNlbENvbXBhY3QoKTt9OyAvLyBDYW5jZWwgYm90aFxyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/24hour.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class TwentyFourHour extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"24Hour\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"twentyFourHour\";\n }\n\n enabled() {\n this.inject24Hour();\n }\n\n disabled() {\n this.unpatchAll();\n }\n\n inject24Hour() {\n const twelveHour = new RegExp(`([0-9]{1,2}):([0-9]{1,2})\\\\s(AM|PM)`);\n\n const convert = (thisObject, args, returnValue) => {\n const matched = returnValue.match(twelveHour);\n if (!matched || matched.length !== 4) return;\n if (matched[3] === \"AM\") return returnValue = returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"00\" : matched[1].padStart(2, \"0\")}:${matched[2]}`);\n return returnValue = returnValue.replace(matched[0], `${matched[1] === \"12\" ? \"12\" : parseInt(matched[1]) + 12}:${matched[2]}`);\n };\n\n this.after(modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].TimeFormatter, \"calendarFormat\", convert); // Called in Cozy mode\n\n this.after(modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].TimeFormatter, \"dateFormat\", convert); // Called in Compact mode\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zLzI0aG91ci5qcz9kZTc4Il0sIm5hbWVzIjpbIlR3ZW50eUZvdXJIb3VyIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsImluamVjdDI0SG91ciIsImRpc2FibGVkIiwidW5wYXRjaEFsbCIsInR3ZWx2ZUhvdXIiLCJSZWdFeHAiLCJjb252ZXJ0IiwidGhpc09iamVjdCIsImFyZ3MiLCJyZXR1cm5WYWx1ZSIsIm1hdGNoZWQiLCJtYXRjaCIsImxlbmd0aCIsInJlcGxhY2UiLCJwYWRTdGFydCIsInBhcnNlSW50IiwiYWZ0ZXIiLCJEaXNjb3JkTW9kdWxlcyIsIlRpbWVGb3JtYXR0ZXIiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFZSxtRUFBSSxNQUFNQSxjQUFOLFNBQTZCQyx3REFBN0IsQ0FBcUM7QUFDcEQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxRQUFQO0FBQWlCOztBQUM3QixNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFNBQVA7QUFBa0I7O0FBQ2xDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sZ0JBQVA7QUFBeUI7O0FBRW5DQyxTQUFPLEdBQUc7QUFDTixTQUFLQyxZQUFMO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQLFNBQUtDLFVBQUw7QUFDSDs7QUFFREYsY0FBWSxHQUFHO0FBQ1gsVUFBTUcsVUFBVSxHQUFHLElBQUlDLE1BQUosQ0FBWSxxQ0FBWixDQUFuQjs7QUFDQSxVQUFNQyxPQUFPLEdBQUcsQ0FBQ0MsVUFBRCxFQUFhQyxJQUFiLEVBQW1CQyxXQUFuQixLQUFtQztBQUMvQyxZQUFNQyxPQUFPLEdBQUdELFdBQVcsQ0FBQ0UsS0FBWixDQUFrQlAsVUFBbEIsQ0FBaEI7QUFDQSxVQUFJLENBQUNNLE9BQUQsSUFBWUEsT0FBTyxDQUFDRSxNQUFSLEtBQW1CLENBQW5DLEVBQXNDO0FBQ3RDLFVBQUlGLE9BQU8sQ0FBQyxDQUFELENBQVAsS0FBZSxJQUFuQixFQUF5QixPQUFPRCxXQUFXLEdBQUdBLFdBQVcsQ0FBQ0ksT0FBWixDQUFvQkgsT0FBTyxDQUFDLENBQUQsQ0FBM0IsRUFBaUMsR0FBRUEsT0FBTyxDQUFDLENBQUQsQ0FBUCxLQUFlLElBQWYsR0FBc0IsSUFBdEIsR0FBNkJBLE9BQU8sQ0FBQyxDQUFELENBQVAsQ0FBV0ksUUFBWCxDQUFvQixDQUFwQixFQUF1QixHQUF2QixDQUE0QixJQUFHSixPQUFPLENBQUMsQ0FBRCxDQUFJLEVBQTFHLENBQXJCO0FBQ3pCLGFBQU9ELFdBQVcsR0FBR0EsV0FBVyxDQUFDSSxPQUFaLENBQW9CSCxPQUFPLENBQUMsQ0FBRCxDQUEzQixFQUFpQyxHQUFFQSxPQUFPLENBQUMsQ0FBRCxDQUFQLEtBQWUsSUFBZixHQUFzQixJQUF0QixHQUE2QkssUUFBUSxDQUFDTCxPQUFPLENBQUMsQ0FBRCxDQUFSLENBQVIsR0FBdUIsRUFBRyxJQUFHQSxPQUFPLENBQUMsQ0FBRCxDQUFJLEVBQXhHLENBQXJCO0FBQ0gsS0FMRDs7QUFPQSxTQUFLTSxLQUFMLENBQVdDLHNEQUFjLENBQUNDLGFBQTFCLEVBQXlDLGdCQUF6QyxFQUEyRFosT0FBM0QsRUFUVyxDQVMwRDs7QUFDckUsU0FBS1UsS0FBTCxDQUFXQyxzREFBYyxDQUFDQyxhQUExQixFQUF5QyxZQUF6QyxFQUF1RFosT0FBdkQsRUFWVyxDQVVzRDtBQUNwRTs7QUF4Qm1ELENBQXpDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvMjRob3VyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge0Rpc2NvcmRNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFR3ZW50eUZvdXJIb3VyIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCIyNEhvdXJcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJ0d2VudHlGb3VySG91clwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMuaW5qZWN0MjRIb3VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy51bnBhdGNoQWxsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5qZWN0MjRIb3VyKCkge1xyXG4gICAgICAgIGNvbnN0IHR3ZWx2ZUhvdXIgPSBuZXcgUmVnRXhwKGAoWzAtOV17MSwyfSk6KFswLTldezEsMn0pXFxcXHMoQU18UE0pYCk7XHJcbiAgICAgICAgY29uc3QgY29udmVydCA9ICh0aGlzT2JqZWN0LCBhcmdzLCByZXR1cm5WYWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBtYXRjaGVkID0gcmV0dXJuVmFsdWUubWF0Y2godHdlbHZlSG91cik7XHJcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZCB8fCBtYXRjaGVkLmxlbmd0aCAhPT0gNCkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAobWF0Y2hlZFszXSA9PT0gXCJBTVwiKSByZXR1cm4gcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZS5yZXBsYWNlKG1hdGNoZWRbMF0sIGAke21hdGNoZWRbMV0gPT09IFwiMTJcIiA/IFwiMDBcIiA6IG1hdGNoZWRbMV0ucGFkU3RhcnQoMiwgXCIwXCIpfToke21hdGNoZWRbMl19YCk7XHJcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlLnJlcGxhY2UobWF0Y2hlZFswXSwgYCR7bWF0Y2hlZFsxXSA9PT0gXCIxMlwiID8gXCIxMlwiIDogcGFyc2VJbnQobWF0Y2hlZFsxXSkgKyAxMn06JHttYXRjaGVkWzJdfWApO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuYWZ0ZXIoRGlzY29yZE1vZHVsZXMuVGltZUZvcm1hdHRlciwgXCJjYWxlbmRhckZvcm1hdFwiLCBjb252ZXJ0KTsgLy8gQ2FsbGVkIGluIENvenkgbW9kZVxyXG4gICAgICAgIHRoaXMuYWZ0ZXIoRGlzY29yZE1vZHVsZXMuVGltZUZvcm1hdHRlciwgXCJkYXRlRm9ybWF0XCIsIGNvbnZlcnQpOyAvLyBDYWxsZWQgaW4gQ29tcGFjdCBtb2RlXHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/24hour.js\n"); /***/ }), @@ -131,7 +131,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\n\nconst MessageContent = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ColoredText extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"ColoredText\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"coloredText\";\n }\n\n enabled() {\n this.injectColoredText();\n }\n\n disabled() {\n if (!this.cancelColoredText) return;\n this.cancelColoredText();\n delete this.cancelColoredText;\n }\n\n injectColoredText() {\n if (this.cancelColoredText) return;\n this.cancelColoredText = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].monkeyPatch(MessageContent.prototype, \"render\", {\n after: data => {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].monkeyPatch(data.returnValue.props, \"children\", {\n silent: true,\n after: ({\n returnValue\n }) => {\n const markup = returnValue.props.children[1];\n const roleColor = data.thisObject.props.message.colorString;\n if (markup && roleColor) markup.props.style = {\n color: roleColor\n };\n return returnValue;\n }\n });\n }\n });\n }\n\n removeColoredText() {\n document.querySelectorAll(\".markup-2BOw-j\").forEach(elem => {\n elem.style.setProperty(\"color\", \"\");\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2NvbG9yZWR0ZXh0LmpzP2RlMDkiXSwibmFtZXMiOlsiTWVzc2FnZUNvbnRlbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsIkNvbG9yZWRUZXh0IiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsImluamVjdENvbG9yZWRUZXh0IiwiZGlzYWJsZWQiLCJjYW5jZWxDb2xvcmVkVGV4dCIsIlV0aWxpdGllcyIsIm1vbmtleVBhdGNoIiwicHJvdG90eXBlIiwiYWZ0ZXIiLCJkYXRhIiwicmV0dXJuVmFsdWUiLCJwcm9wcyIsInNpbGVudCIsIm1hcmt1cCIsImNoaWxkcmVuIiwicm9sZUNvbG9yIiwidGhpc09iamVjdCIsIm1lc3NhZ2UiLCJjb2xvclN0cmluZyIsInN0eWxlIiwiY29sb3IiLCJyZW1vdmVDb2xvcmVkVGV4dCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSxNQUFNQSxjQUFjLEdBQUdDLHNEQUFjLENBQUNDLFNBQWYsQ0FBeUJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxZQUFGLElBQWtCRCxDQUFDLENBQUNDLFlBQUYsQ0FBZUMsY0FBZixDQUE4QixnQkFBOUIsQ0FBaEQsQ0FBdkI7QUFFZSxtRUFBSSxNQUFNQyxXQUFOLFNBQTBCQyx3REFBMUIsQ0FBa0M7QUFDakQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxhQUFQO0FBQXNCOztBQUNsQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3JDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFFaENDLFNBQU8sR0FBRztBQUNOLFNBQUtDLGlCQUFMO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQLFFBQUksQ0FBQyxLQUFLQyxpQkFBVixFQUE2QjtBQUM3QixTQUFLQSxpQkFBTDtBQUNBLFdBQU8sS0FBS0EsaUJBQVo7QUFDSDs7QUFFREYsbUJBQWlCLEdBQUc7QUFDaEIsUUFBSSxLQUFLRSxpQkFBVCxFQUE0QjtBQUU1QixTQUFLQSxpQkFBTCxHQUF5QkMsaURBQVMsQ0FBQ0MsV0FBVixDQUFzQmhCLGNBQWMsQ0FBQ2lCLFNBQXJDLEVBQWdELFFBQWhELEVBQTBEO0FBQUNDLFdBQUssRUFBR0MsSUFBRCxJQUFVO0FBQ2pHSix5REFBUyxDQUFDQyxXQUFWLENBQXNCRyxJQUFJLENBQUNDLFdBQUwsQ0FBaUJDLEtBQXZDLEVBQThDLFVBQTlDLEVBQTBEO0FBQUNDLGdCQUFNLEVBQUUsSUFBVDtBQUFlSixlQUFLLEVBQUUsQ0FBQztBQUFDRTtBQUFELFdBQUQsS0FBbUI7QUFDL0Ysa0JBQU1HLE1BQU0sR0FBR0gsV0FBVyxDQUFDQyxLQUFaLENBQWtCRyxRQUFsQixDQUEyQixDQUEzQixDQUFmO0FBQ0Esa0JBQU1DLFNBQVMsR0FBR04sSUFBSSxDQUFDTyxVQUFMLENBQWdCTCxLQUFoQixDQUFzQk0sT0FBdEIsQ0FBOEJDLFdBQWhEO0FBQ0EsZ0JBQUlMLE1BQU0sSUFBSUUsU0FBZCxFQUF5QkYsTUFBTSxDQUFDRixLQUFQLENBQWFRLEtBQWIsR0FBcUI7QUFBQ0MsbUJBQUssRUFBRUw7QUFBUixhQUFyQjtBQUN6QixtQkFBT0wsV0FBUDtBQUNIO0FBTHlELFNBQTFEO0FBTUg7QUFQa0YsS0FBMUQsQ0FBekI7QUFRSDs7QUFFRFcsbUJBQWlCLEdBQUc7QUFDaEJDLFlBQVEsQ0FBQ0MsZ0JBQVQsQ0FBMEIsZ0JBQTFCLEVBQTRDQyxPQUE1QyxDQUFvREMsSUFBSSxJQUFJO0FBQ3hEQSxVQUFJLENBQUNOLEtBQUwsQ0FBV08sV0FBWCxDQUF1QixPQUF2QixFQUFnQyxFQUFoQztBQUNILEtBRkQ7QUFHSDs7QUFoQ2dELENBQXRDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvY29sb3JlZHRleHQuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7VXRpbGl0aWVzLCBXZWJwYWNrTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmNvbnN0IE1lc3NhZ2VDb250ZW50ID0gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlQnV0dG9uc1wiKSk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ29sb3JlZFRleHQgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkNvbG9yZWRUZXh0XCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImFwcGVhcmFuY2VcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiY29sb3JlZFRleHRcIjt9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICB0aGlzLmluamVjdENvbG9yZWRUZXh0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNhbmNlbENvbG9yZWRUZXh0KSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jYW5jZWxDb2xvcmVkVGV4dCgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhbmNlbENvbG9yZWRUZXh0O1xyXG4gICAgfVxyXG5cclxuICAgIGluamVjdENvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNhbmNlbENvbG9yZWRUZXh0KSByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMuY2FuY2VsQ29sb3JlZFRleHQgPSBVdGlsaXRpZXMubW9ua2V5UGF0Y2goTWVzc2FnZUNvbnRlbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6IChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5tb25rZXlQYXRjaChkYXRhLnJldHVyblZhbHVlLnByb3BzLCBcImNoaWxkcmVuXCIsIHtzaWxlbnQ6IHRydWUsIGFmdGVyOiAoe3JldHVyblZhbHVlfSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFya3VwID0gcmV0dXJuVmFsdWUucHJvcHMuY2hpbGRyZW5bMV07XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb2xlQ29sb3IgPSBkYXRhLnRoaXNPYmplY3QucHJvcHMubWVzc2FnZS5jb2xvclN0cmluZztcclxuICAgICAgICAgICAgICAgIGlmIChtYXJrdXAgJiYgcm9sZUNvbG9yKSBtYXJrdXAucHJvcHMuc3R5bGUgPSB7Y29sb3I6IHJvbGVDb2xvcn07XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgICAgIH19KTtcclxuICAgICAgICB9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ29sb3JlZFRleHQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcIi5tYXJrdXAtMkJPdy1qXCIpLmZvckVhY2goZWxlbSA9PiB7XHJcbiAgICAgICAgICAgIGVsZW0uc3R5bGUuc2V0UHJvcGVydHkoXCJjb2xvclwiLCBcIlwiKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/coloredtext.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\nconst MessageContent = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class ColoredText extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"ColoredText\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"coloredText\";\n }\n\n enabled() {\n this.injectColoredText();\n }\n\n disabled() {\n this.unpatchAll();\n }\n\n injectColoredText() {\n this.after(MessageContent.prototype, \"render\", (thisObject, args, retVal) => {\n this.after(retVal.props, \"children\", {\n silent: true,\n after: ({\n returnValue\n }) => {\n const markup = returnValue.props.children[1];\n const roleColor = thisObject.props.message.colorString;\n if (markup && roleColor) markup.props.style = {\n color: roleColor\n };\n }\n });\n });\n }\n\n removeColoredText() {\n document.querySelectorAll(\".markup-2BOw-j\").forEach(elem => {\n elem.style.setProperty(\"color\", \"\");\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2NvbG9yZWR0ZXh0LmpzP2RlMDkiXSwibmFtZXMiOlsiTWVzc2FnZUNvbnRlbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsIkNvbG9yZWRUZXh0IiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwiZW5hYmxlZCIsImluamVjdENvbG9yZWRUZXh0IiwiZGlzYWJsZWQiLCJ1bnBhdGNoQWxsIiwiYWZ0ZXIiLCJwcm90b3R5cGUiLCJ0aGlzT2JqZWN0IiwiYXJncyIsInJldFZhbCIsInByb3BzIiwic2lsZW50IiwicmV0dXJuVmFsdWUiLCJtYXJrdXAiLCJjaGlsZHJlbiIsInJvbGVDb2xvciIsIm1lc3NhZ2UiLCJjb2xvclN0cmluZyIsInN0eWxlIiwiY29sb3IiLCJyZW1vdmVDb2xvcmVkVGV4dCIsImRvY3VtZW50IiwicXVlcnlTZWxlY3RvckFsbCIsImZvckVhY2giLCJlbGVtIiwic2V0UHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQSxNQUFNQSxjQUFjLEdBQUdDLHNEQUFjLENBQUNDLFNBQWYsQ0FBeUJDLENBQUMsSUFBSUEsQ0FBQyxDQUFDQyxZQUFGLElBQWtCRCxDQUFDLENBQUNDLFlBQUYsQ0FBZUMsY0FBZixDQUE4QixnQkFBOUIsQ0FBaEQsQ0FBdkI7QUFFZSxtRUFBSSxNQUFNQyxXQUFOLFNBQTBCQyx3REFBMUIsQ0FBa0M7QUFDakQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxhQUFQO0FBQXNCOztBQUNsQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3JDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFFaENDLFNBQU8sR0FBRztBQUNOLFNBQUtDLGlCQUFMO0FBQ0g7O0FBRURDLFVBQVEsR0FBRztBQUNQLFNBQUtDLFVBQUw7QUFDSDs7QUFFREYsbUJBQWlCLEdBQUc7QUFDaEIsU0FBS0csS0FBTCxDQUFXZixjQUFjLENBQUNnQixTQUExQixFQUFxQyxRQUFyQyxFQUErQyxDQUFDQyxVQUFELEVBQWFDLElBQWIsRUFBbUJDLE1BQW5CLEtBQThCO0FBQ3pFLFdBQUtKLEtBQUwsQ0FBV0ksTUFBTSxDQUFDQyxLQUFsQixFQUF5QixVQUF6QixFQUFxQztBQUFDQyxjQUFNLEVBQUUsSUFBVDtBQUFlTixhQUFLLEVBQUUsQ0FBQztBQUFDTztBQUFELFNBQUQsS0FBbUI7QUFDMUUsZ0JBQU1DLE1BQU0sR0FBR0QsV0FBVyxDQUFDRixLQUFaLENBQWtCSSxRQUFsQixDQUEyQixDQUEzQixDQUFmO0FBQ0EsZ0JBQU1DLFNBQVMsR0FBR1IsVUFBVSxDQUFDRyxLQUFYLENBQWlCTSxPQUFqQixDQUF5QkMsV0FBM0M7QUFDQSxjQUFJSixNQUFNLElBQUlFLFNBQWQsRUFBeUJGLE1BQU0sQ0FBQ0gsS0FBUCxDQUFhUSxLQUFiLEdBQXFCO0FBQUNDLGlCQUFLLEVBQUVKO0FBQVIsV0FBckI7QUFDNUI7QUFKb0MsT0FBckM7QUFLSCxLQU5EO0FBT0g7O0FBRURLLG1CQUFpQixHQUFHO0FBQ2hCQyxZQUFRLENBQUNDLGdCQUFULENBQTBCLGdCQUExQixFQUE0Q0MsT0FBNUMsQ0FBb0RDLElBQUksSUFBSTtBQUN4REEsVUFBSSxDQUFDTixLQUFMLENBQVdPLFdBQVgsQ0FBdUIsT0FBdkIsRUFBZ0MsRUFBaEM7QUFDSCxLQUZEO0FBR0g7O0FBM0JnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2NvbG9yZWR0ZXh0LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge1dlYnBhY2tNb2R1bGVzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuY29uc3QgTWVzc2FnZUNvbnRlbnQgPSBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDb2xvcmVkVGV4dCBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiQ29sb3JlZFRleHRcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiYXBwZWFyYW5jZVwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJjb2xvcmVkVGV4dFwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMuaW5qZWN0Q29sb3JlZFRleHQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICB0aGlzLnVucGF0Y2hBbGwoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbmplY3RDb2xvcmVkVGV4dCgpIHtcclxuICAgICAgICB0aGlzLmFmdGVyKE1lc3NhZ2VDb250ZW50LnByb3RvdHlwZSwgXCJyZW5kZXJcIiwgKHRoaXNPYmplY3QsIGFyZ3MsIHJldFZhbCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmFmdGVyKHJldFZhbC5wcm9wcywgXCJjaGlsZHJlblwiLCB7c2lsZW50OiB0cnVlLCBhZnRlcjogKHtyZXR1cm5WYWx1ZX0pID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgcm9sZUNvbG9yID0gdGhpc09iamVjdC5wcm9wcy5tZXNzYWdlLmNvbG9yU3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgaWYgKG1hcmt1cCAmJiByb2xlQ29sb3IpIG1hcmt1cC5wcm9wcy5zdHlsZSA9IHtjb2xvcjogcm9sZUNvbG9yfTtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZUNvbG9yZWRUZXh0KCkge1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIubWFya3VwLTJCT3ctalwiKS5mb3JFYWNoKGVsZW0gPT4ge1xyXG4gICAgICAgICAgICBlbGVtLnN0eWxlLnNldFByb3BlcnR5KFwiY29sb3JcIiwgXCJcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/coloredtext.js\n"); /***/ }), @@ -143,7 +143,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_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/customcss/csseditor */ \"./src/ui/customcss/csseditor.jsx\");\n/* harmony import */ var _ui_floating_container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/floating/container */ \"./src/ui/floating/container.jsx\");\n/* harmony import */ var _ui_settings_title__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/settings/title */ \"./src/ui/settings/title.jsx\");\n\n\n\n\n\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst electron = __webpack_require__(/*! electron */ \"electron\");\n\nconst UserSettings = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"updateAccount\");\nconst Dispatcher = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"dirtyDispatch\");\nconst ActionTypes = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"ActionTypes\").ActionTypes;\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class CustomCSS extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Custom CSS\";\n }\n\n get category() {\n return \"customcss\";\n }\n\n get id() {\n return \"customcss\";\n }\n\n get startDetached() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(this.collection, this.category, \"startDetached\");\n }\n\n get nativeOpen() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(this.collection, this.category, \"nativeOpen\");\n }\n\n constructor() {\n super();\n this.savedCss = \"\";\n this.insertedCss = \"\";\n this.isDetached = false;\n }\n\n async enabled() {\n if (!window.ace) {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].injectJs(\"https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js\").then(() => {\n if (window.require.original) window.require = window.require.original;\n });\n }\n\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].registerPanel(this.id, this.name, {\n order: 2,\n element: () => [modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_settings_title__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: \"Custom CSS Editor\"\n }), modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n css: this.savedCss,\n save: this.saveCSS.bind(this),\n update: this.insertCSS.bind(this),\n openNative: this.openNative.bind(this),\n openDetached: this.openDetached.bind(this),\n onChange: this.onChange.bind(this)\n })],\n onClick: thisObject => {\n if (this.isDetached) return;\n if (this.nativeOpen) this.openNative();else if (this.startDetached) this.openDetached();else thisObject._reactInternalFiber.child.memoizedProps.children.props.onSetSection(this.name);\n this.setSection = thisObject._reactInternalFiber.child.memoizedProps.children.props.onSetSection;\n }\n });\n this.loadCSS();\n this.insertCSS(this.savedCss);\n this.watchContent();\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].removePanel(this.id);\n this.unwatchContent();\n }\n\n watchContent() {\n if (this.watcher) return this.error(\"Already watching content.\");\n const timeCache = {};\n this.log(\"Starting to watch content.\");\n this.watcher = fs.watch(modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS);\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete timeCache[filename];\n this.saveCSS(\"\");\n }\n\n const stats = fs.statSync(modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS);\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (timeCache[filename] == stats.mtime.getTime()) return;\n timeCache[filename] = stats.mtime.getTime();\n\n if (eventType == \"change\") {\n const newCSS = modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].loadCustomCSS();\n if (newCSS == this.savedCss) return;\n this.savedCss = newCSS;\n this.insertCSS(this.savedCss);\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].emit(\"customcss-updated\", this.savedCss);\n }\n });\n }\n\n unwatchContent() {\n if (!this.watcher) return this.error(\"Was not watching content.\");\n this.watcher.close();\n delete this.watcher;\n this.log(\"No longer watching content.\");\n }\n\n onChange(value) {\n if (!modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(\"settings\", \"customcss\", \"liveUpdate\")) return;\n this.insertCSS(value);\n this.saveCSS(value);\n }\n\n loadCSS() {\n this.savedCss = modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].loadCustomCSS();\n }\n\n insertCSS(newCss) {\n if (typeof newCss === \"undefined\") newCss = this.insertedCss;else this.insertedCss = newCss;\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOMManager\"].updateCustomCSS(newCss);\n }\n\n saveCSS(newCss) {\n if (typeof newCss !== \"undefined\") this.savedCss = newCss;\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].saveCustomCSS(this.savedCss);\n }\n\n openNative() {\n electron.shell.openExternal(`file://${modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS}`);\n }\n\n openDetached(currentCSS) {\n const editorRef = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createRef();\n const editor = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n id: \"bd-floating-editor\",\n ref: editorRef,\n css: currentCSS,\n save: this.saveCSS.bind(this),\n update: this.insertCSS.bind(this),\n openNative: this.openNative.bind(this),\n onChange: this.onChange.bind(this)\n });\n _ui_floating_container__WEBPACK_IMPORTED_MODULE_3__[\"default\"].open({\n onClose: () => {\n this.isDetached = false;\n },\n onResize: () => {\n if (!editorRef || !editorRef.current || !editorRef.current.resize) return;\n editorRef.current.resize();\n },\n title: \"Custom CSS Editor\",\n id: \"floating-editor-window\",\n height: 470,\n width: 410,\n center: true,\n resizable: true,\n children: editor,\n confirmClose: () => {\n if (!editorRef || !editorRef.current) return false;\n return editorRef.current.hasUnsavedChanges;\n },\n confirmationText: \"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes.\"\n });\n this.isDetached = true;\n UserSettings.close();\n Dispatcher.dirtyDispatch({\n type: ActionTypes.LAYER_POP\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2N1c3RvbWNzcy5qcz9jM2YyIl0sIm5hbWVzIjpbImZzIiwicmVxdWlyZSIsImVsZWN0cm9uIiwiVXNlclNldHRpbmdzIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiRGlzcGF0Y2hlciIsIkFjdGlvblR5cGVzIiwiQ3VzdG9tQ1NTIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic3RhcnREZXRhY2hlZCIsIlNldHRpbmdzIiwiZ2V0IiwiY29sbGVjdGlvbiIsIm5hdGl2ZU9wZW4iLCJjb25zdHJ1Y3RvciIsInNhdmVkQ3NzIiwiaW5zZXJ0ZWRDc3MiLCJpc0RldGFjaGVkIiwiZW5hYmxlZCIsIndpbmRvdyIsImFjZSIsIlV0aWxpdGllcyIsImluamVjdEpzIiwidGhlbiIsIm9yaWdpbmFsIiwicmVnaXN0ZXJQYW5lbCIsIm9yZGVyIiwiZWxlbWVudCIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIkNTU0VkaXRvciIsImNzcyIsInNhdmUiLCJzYXZlQ1NTIiwiYmluZCIsInVwZGF0ZSIsImluc2VydENTUyIsIm9wZW5OYXRpdmUiLCJvcGVuRGV0YWNoZWQiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJ0aGlzT2JqZWN0IiwiX3JlYWN0SW50ZXJuYWxGaWJlciIsImNoaWxkIiwibWVtb2l6ZWRQcm9wcyIsImNoaWxkcmVuIiwicHJvcHMiLCJvblNldFNlY3Rpb24iLCJzZXRTZWN0aW9uIiwibG9hZENTUyIsIndhdGNoQ29udGVudCIsImRpc2FibGVkIiwicmVtb3ZlUGFuZWwiLCJ1bndhdGNoQ29udGVudCIsIndhdGNoZXIiLCJlcnJvciIsInRpbWVDYWNoZSIsImxvZyIsIndhdGNoIiwiRGF0YVN0b3JlIiwiY3VzdG9tQ1NTIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwic3RhdHMiLCJtdGltZSIsImdldFRpbWUiLCJuZXdDU1MiLCJsb2FkQ3VzdG9tQ1NTIiwiRXZlbnRzIiwiZW1pdCIsImNsb3NlIiwidmFsdWUiLCJuZXdDc3MiLCJET01NYW5hZ2VyIiwidXBkYXRlQ3VzdG9tQ1NTIiwic2F2ZUN1c3RvbUNTUyIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwiY3VycmVudENTUyIsImVkaXRvclJlZiIsImNyZWF0ZVJlZiIsImVkaXRvciIsInJlZiIsIkZsb2F0aW5nV2luZG93Q29udGFpbmVyIiwib3BlbiIsIm9uQ2xvc2UiLCJvblJlc2l6ZSIsImN1cnJlbnQiLCJyZXNpemUiLCJ0aXRsZSIsImhlaWdodCIsIndpZHRoIiwiY2VudGVyIiwicmVzaXphYmxlIiwiY29uZmlybUNsb3NlIiwiaGFzVW5zYXZlZENoYW5nZXMiLCJjb25maXJtYXRpb25UZXh0IiwiZGlydHlEaXNwYXRjaCIsInR5cGUiLCJMQVlFUl9QT1AiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUEsRUFBRSxHQUFHQyxtQkFBTyxDQUFDLGNBQUQsQ0FBbEI7O0FBQ0EsTUFBTUMsUUFBUSxHQUFHRCxtQkFBTyxDQUFDLDBCQUFELENBQXhCOztBQUNBLE1BQU1FLFlBQVksR0FBR0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixDQUFyQjtBQUNBLE1BQU1DLFVBQVUsR0FBR0Ysc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixDQUFuQjtBQUNBLE1BQU1FLFdBQVcsR0FBR0gsc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixhQUExQixFQUF5Q0UsV0FBN0Q7QUFFZSxtRUFBSSxNQUFNQyxTQUFOLFNBQXdCQyx3REFBeEIsQ0FBZ0M7QUFDL0MsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUNqQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBQ3BDLE1B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RUFBRSx3QkFUcUI7QUFVekJ5RixZQUFNLEVBQUUsR0FWaUI7QUFXekJDLFdBQUssRUFBRSxHQVhrQjtBQVl6QkMsWUFBTSxFQUFFLElBWmlCO0FBYXpCQyxlQUFTLEVBQUUsSUFiYztBQWN6QnZELGNBQVEsRUFBRTJDLE1BZGU7QUFlekJhLGtCQUFZLEVBQUUsTUFBTTtBQUNoQixZQUFJLENBQUNmLFNBQUQsSUFBYyxDQUFDQSxTQUFTLENBQUNRLE9BQTdCLEVBQXNDLE9BQU8sS0FBUDtBQUN0QyxlQUFPUixTQUFTLENBQUNRLE9BQVYsQ0FBa0JRLGlCQUF6QjtBQUNILE9BbEJ3QjtBQW1CekJDLHNCQUFnQixFQUFFO0FBbkJPLEtBQTdCO0FBcUJBLFNBQUt0RixVQUFMLEdBQWtCLElBQWxCO0FBQ0FsQixnQkFBWSxDQUFDOEUsS0FBYjtBQUNBM0UsY0FBVSxDQUFDc0csYUFBWCxDQUF5QjtBQUFDQyxVQUFJLEVBQUV0RyxXQUFXLENBQUN1RztBQUFuQixLQUF6QjtBQUNIOztBQWhKOEMsQ0FBcEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9jdXN0b21jc3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7U2V0dGluZ3MsIERhdGFTdG9yZSwgUmVhY3QsIFV0aWxpdGllcywgV2VicGFja01vZHVsZXMsIEV2ZW50cywgRE9NTWFuYWdlcn0gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IENTU0VkaXRvciBmcm9tIFwiLi4vdWkvY3VzdG9tY3NzL2Nzc2VkaXRvclwiO1xyXG5pbXBvcnQgRmxvYXRpbmdXaW5kb3dDb250YWluZXIgZnJvbSBcIi4uL3VpL2Zsb2F0aW5nL2NvbnRhaW5lclwiO1xyXG5pbXBvcnQgU2V0dGluZ3NUaXRsZSBmcm9tIFwiLi4vdWkvc2V0dGluZ3MvdGl0bGVcIjtcclxuXHJcbmNvbnN0IGZzID0gcmVxdWlyZShcImZzXCIpO1xyXG5jb25zdCBlbGVjdHJvbiA9IHJlcXVpcmUoXCJlbGVjdHJvblwiKTtcclxuY29uc3QgVXNlclNldHRpbmdzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcInVwZGF0ZUFjY291bnRcIik7XHJcbmNvbnN0IERpc3BhdGNoZXIgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiZGlydHlEaXNwYXRjaFwiKTtcclxuY29uc3QgQWN0aW9uVHlwZXMgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwiQWN0aW9uVHlwZXNcIikuQWN0aW9uVHlwZXM7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgQ3VzdG9tQ1NTIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJDdXN0b20gQ1NTXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImN1c3RvbWNzc1wiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJjdXN0b21jc3NcIjt9XHJcbiAgICBnZXQgc3RhcnREZXRhY2hlZCgpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgXCJzdGFydERldGFjaGVkXCIpO31cclxuICAgIGdldCBuYXRpdmVPcGVuKCkge3JldHVybiBTZXR0aW5ncy5nZXQodGhpcy5jb2xsZWN0aW9uLCB0aGlzLmNhdGVnb3J5LCBcIm5hdGl2ZU9wZW5cIik7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5zYXZlZENzcyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5pbnNlcnRlZENzcyA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5pc0RldGFjaGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICBpZiAoIXdpbmRvdy5hY2UpIHtcclxuICAgICAgICAgICAgVXRpbGl0aWVzLmluamVjdEpzKFwiaHR0cHM6Ly9jZG5qcy5jbG91ZGZsYXJlLmNvbS9hamF4L2xpYnMvYWNlLzEuMi45L2FjZS5qc1wiKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh3aW5kb3cucmVxdWlyZS5vcmlnaW5hbCkgd2luZG93LnJlcXVpcmUgPSB3aW5kb3cucmVxdWlyZS5vcmlnaW5hbDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFNldHRpbmdzLnJlZ2lzdGVyUGFuZWwodGhpcy5pZCwgdGhpcy5uYW1lLCB7XHJcbiAgICAgICAgICAgIG9yZGVyOiAyLFxyXG4gICAgICAgICAgICBlbGVtZW50OiAoKSA9PiBbPFNldHRpbmdzVGl0bGUgdGV4dD1cIkN1c3RvbSBDU1MgRWRpdG9yXCIgLz4sIFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ1NTRWRpdG9yLCB7XHJcbiAgICAgICAgICAgICAgICBjc3M6IHRoaXMuc2F2ZWRDc3MsXHJcbiAgICAgICAgICAgICAgICBzYXZlOiB0aGlzLnNhdmVDU1MuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIHVwZGF0ZTogdGhpcy5pbnNlcnRDU1MuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9wZW5OYXRpdmU6IHRoaXMub3Blbk5hdGl2ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb3BlbkRldGFjaGVkOiB0aGlzLm9wZW5EZXRhY2hlZC5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKVxyXG4gICAgICAgICAgICB9KV0sXHJcbiAgICAgICAgICAgIG9uQ2xpY2s6ICh0aGlzT2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0RldGFjaGVkKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYXRpdmVPcGVuKSB0aGlzLm9wZW5OYXRpdmUoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc3RhcnREZXRhY2hlZCkgdGhpcy5vcGVuRGV0YWNoZWQoKTtcclxuICAgICAgICAgICAgICAgIGVsc2UgdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLmNoaWxkLm1lbW9pemVkUHJvcHMuY2hpbGRyZW4ucHJvcHMub25TZXRTZWN0aW9uKHRoaXMubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldFNlY3Rpb24gPSB0aGlzT2JqZWN0Ll9yZWFjdEludGVybmFsRmliZXIuY2hpbGQubWVtb2l6ZWRQcm9wcy5jaGlsZHJlbi5wcm9wcy5vblNldFNlY3Rpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmxvYWRDU1MoKTtcclxuICAgICAgICB0aGlzLmluc2VydENTUyh0aGlzLnNhdmVkQ3NzKTtcclxuICAgICAgICB0aGlzLndhdGNoQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZVBhbmVsKHRoaXMuaWQpO1xyXG4gICAgICAgIHRoaXMudW53YXRjaENvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICB3YXRjaENvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcikgcmV0dXJuIHRoaXMuZXJyb3IoXCJBbHJlYWR5IHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIGNvbnN0IHRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMubG9nKFwiU3RhcnRpbmcgdG8gd2F0Y2ggY29udGVudC5cIik7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyID0gZnMud2F0Y2goRGF0YVN0b3JlLmN1c3RvbUNTUywge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lKSByZXR1cm47XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xyXG4gICAgICAgICAgICB0cnkge2ZzLnN0YXRTeW5jKERhdGFTdG9yZS5jdXN0b21DU1MpO31cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVOT0VOVFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUNTUyhcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKERhdGFTdG9yZS5jdXN0b21DU1MpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDU1MgPSBEYXRhU3RvcmUubG9hZEN1c3RvbUNTUygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld0NTUyA9PSB0aGlzLnNhdmVkQ3NzKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVkQ3NzID0gbmV3Q1NTO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRDU1ModGhpcy5zYXZlZENzcyk7XHJcbiAgICAgICAgICAgICAgICBFdmVudHMuZW1pdChcImN1c3RvbWNzcy11cGRhdGVkXCIsIHRoaXMuc2F2ZWRDc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaENvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXIpIHJldHVybiB0aGlzLmVycm9yKFwiV2FzIG5vdCB3YXRjaGluZyBjb250ZW50LlwiKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIuY2xvc2UoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyO1xyXG4gICAgICAgIHRoaXMubG9nKFwiTm8gbG9uZ2VyIHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImN1c3RvbWNzc1wiLCBcImxpdmVVcGRhdGVcIikpIHJldHVybjtcclxuICAgICAgICB0aGlzLmluc2VydENTUyh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zYXZlQ1NTKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQ1NTKCkge1xyXG4gICAgICAgIHRoaXMuc2F2ZWRDc3MgPSBEYXRhU3RvcmUubG9hZEN1c3RvbUNTUygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluc2VydENTUyhuZXdDc3MpIHtcclxuICAgICAgICBpZiAodHlwZW9mKG5ld0NzcykgPT09IFwidW5kZWZpbmVkXCIpIG5ld0NzcyA9IHRoaXMuaW5zZXJ0ZWRDc3M7XHJcbiAgICAgICAgZWxzZSB0aGlzLmluc2VydGVkQ3NzID0gbmV3Q3NzO1xyXG4gICAgICAgIERPTU1hbmFnZXIudXBkYXRlQ3VzdG9tQ1NTKG5ld0Nzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNTUyhuZXdDc3MpIHtcclxuICAgICAgICBpZiAodHlwZW9mKG5ld0NzcykgIT09IFwidW5kZWZpbmVkXCIpIHRoaXMuc2F2ZWRDc3MgPSBuZXdDc3M7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNhdmVDdXN0b21DU1ModGhpcy5zYXZlZENzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Blbk5hdGl2ZSgpIHtcclxuICAgICAgICBlbGVjdHJvbi5zaGVsbC5vcGVuRXh0ZXJuYWwoYGZpbGU6Ly8ke0RhdGFTdG9yZS5jdXN0b21DU1N9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRldGFjaGVkKGN1cnJlbnRDU1MpIHtcclxuICAgICAgICBjb25zdCBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICBjb25zdCBlZGl0b3IgPSBSZWFjdC5jcmVhdGVFbGVtZW50KENTU0VkaXRvciwge1xyXG4gICAgICAgICAgICBpZDogXCJiZC1mbG9hdGluZy1lZGl0b3JcIixcclxuICAgICAgICAgICAgcmVmOiBlZGl0b3JSZWYsXHJcbiAgICAgICAgICAgIGNzczogY3VycmVudENTUyxcclxuICAgICAgICAgICAgc2F2ZTogdGhpcy5zYXZlQ1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHVwZGF0ZTogdGhpcy5pbnNlcnRDU1MuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgb3Blbk5hdGl2ZTogdGhpcy5vcGVuTmF0aXZlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgRmxvYXRpbmdXaW5kb3dDb250YWluZXIub3Blbih7XHJcbiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaXNEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBvblJlc2l6ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlZGl0b3JSZWYgfHwgIWVkaXRvclJlZi5jdXJyZW50IHx8ICFlZGl0b3JSZWYuY3VycmVudC5yZXNpemUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGVkaXRvclJlZi5jdXJyZW50LnJlc2l6ZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aXRsZTogXCJDdXN0b20gQ1NTIEVkaXRvclwiLFxyXG4gICAgICAgICAgICBpZDogXCJmbG9hdGluZy1lZGl0b3Itd2luZG93XCIsXHJcbiAgICAgICAgICAgIGhlaWdodDogNDcwLFxyXG4gICAgICAgICAgICB3aWR0aDogNDEwLFxyXG4gICAgICAgICAgICBjZW50ZXI6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IGVkaXRvcixcclxuICAgICAgICAgICAgY29uZmlybUNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWVkaXRvclJlZiB8fCAhZWRpdG9yUmVmLmN1cnJlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlZGl0b3JSZWYuY3VycmVudC5oYXNVbnNhdmVkQ2hhbmdlcztcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY29uZmlybWF0aW9uVGV4dDogXCJZb3UgaGF2ZSB1bnNhdmVkIGNoYW5nZXMgdG8geW91ciBDdXN0b20gQ1NTLiBDbG9zaW5nIHRoaXMgd2luZG93IHdpbGwgbG9zZSBhbGwgdGhvc2UgY2hhbmdlcy5cIlxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgVXNlclNldHRpbmdzLmNsb3NlKCk7XHJcbiAgICAgICAgRGlzcGF0Y2hlci5kaXJ0eURpc3BhdGNoKHt0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9QT1B9KTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/customcss.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_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../ui/customcss/csseditor */ \"./src/ui/customcss/csseditor.jsx\");\n/* harmony import */ var _ui_floating_container__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/floating/container */ \"./src/ui/floating/container.jsx\");\n/* harmony import */ var _ui_settings_title__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../ui/settings/title */ \"./src/ui/settings/title.jsx\");\n\n\n\n\n\n\nconst fs = __webpack_require__(/*! fs */ \"fs\");\n\nconst electron = __webpack_require__(/*! electron */ \"electron\");\n\nconst UserSettings = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"updateAccount\");\nconst Dispatcher = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"dirtyDispatch\");\nconst ActionTypes = modules__WEBPACK_IMPORTED_MODULE_1__[\"WebpackModules\"].getByProps(\"ActionTypes\").ActionTypes;\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class CustomCSS extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Custom CSS\";\n }\n\n get category() {\n return \"customcss\";\n }\n\n get id() {\n return \"customcss\";\n }\n\n get startDetached() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(this.collection, this.category, \"startDetached\");\n }\n\n get nativeOpen() {\n return modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(this.collection, this.category, \"nativeOpen\");\n }\n\n constructor() {\n super();\n this.savedCss = \"\";\n this.insertedCss = \"\";\n this.isDetached = false;\n }\n\n async enabled() {\n if (!window.ace) {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOMManager\"].injectScript(\"ace-script\", \"https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js\").then(() => {\n if (window.require.original) window.require = window.require.original;\n });\n }\n\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].registerPanel(this.id, this.name, {\n order: 2,\n element: () => [modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_settings_title__WEBPACK_IMPORTED_MODULE_4__[\"default\"], {\n text: \"Custom CSS Editor\"\n }), modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n css: this.savedCss,\n save: this.saveCSS.bind(this),\n update: this.insertCSS.bind(this),\n openNative: this.openNative.bind(this),\n openDetached: this.openDetached.bind(this),\n onChange: this.onChange.bind(this)\n })],\n onClick: thisObject => {\n if (this.isDetached) return;\n if (this.nativeOpen) this.openNative();else if (this.startDetached) this.openDetached();else thisObject._reactInternalFiber.child.memoizedProps.children.props.onSetSection(this.name);\n this.setSection = thisObject._reactInternalFiber.child.memoizedProps.children.props.onSetSection;\n }\n });\n this.loadCSS();\n this.insertCSS(this.savedCss);\n this.watchContent();\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].removePanel(this.id);\n this.unwatchContent();\n }\n\n watchContent() {\n if (this.watcher) return this.error(\"Already watching content.\");\n const timeCache = {};\n this.log(\"Starting to watch content.\");\n this.watcher = fs.watch(modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS);\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete timeCache[filename];\n this.saveCSS(\"\");\n }\n\n const stats = fs.statSync(modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS);\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (timeCache[filename] == stats.mtime.getTime()) return;\n timeCache[filename] = stats.mtime.getTime();\n\n if (eventType == \"change\") {\n const newCSS = modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].loadCustomCSS();\n if (newCSS == this.savedCss) return;\n this.savedCss = newCSS;\n this.insertCSS(this.savedCss);\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].emit(\"customcss-updated\", this.savedCss);\n }\n });\n }\n\n unwatchContent() {\n if (!this.watcher) return this.error(\"Was not watching content.\");\n this.watcher.close();\n delete this.watcher;\n this.log(\"No longer watching content.\");\n }\n\n onChange(value) {\n if (!modules__WEBPACK_IMPORTED_MODULE_1__[\"Settings\"].get(\"settings\", \"customcss\", \"liveUpdate\")) return;\n this.insertCSS(value);\n this.saveCSS(value);\n }\n\n loadCSS() {\n this.savedCss = modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].loadCustomCSS();\n }\n\n insertCSS(newCss) {\n if (typeof newCss === \"undefined\") newCss = this.insertedCss;else this.insertedCss = newCss;\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DOMManager\"].updateCustomCSS(newCss);\n }\n\n saveCSS(newCss) {\n if (typeof newCss !== \"undefined\") this.savedCss = newCss;\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].saveCustomCSS(this.savedCss);\n }\n\n openNative() {\n electron.shell.openExternal(`file://${modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].customCSS}`);\n }\n\n openDetached(currentCSS) {\n const editorRef = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createRef();\n const editor = modules__WEBPACK_IMPORTED_MODULE_1__[\"React\"].createElement(_ui_customcss_csseditor__WEBPACK_IMPORTED_MODULE_2__[\"default\"], {\n id: \"bd-floating-editor\",\n ref: editorRef,\n css: currentCSS,\n save: this.saveCSS.bind(this),\n update: this.insertCSS.bind(this),\n openNative: this.openNative.bind(this),\n onChange: this.onChange.bind(this)\n });\n _ui_floating_container__WEBPACK_IMPORTED_MODULE_3__[\"default\"].open({\n onClose: () => {\n this.isDetached = false;\n },\n onResize: () => {\n if (!editorRef || !editorRef.current || !editorRef.current.resize) return;\n editorRef.current.resize();\n },\n title: \"Custom CSS Editor\",\n id: \"floating-editor-window\",\n height: 470,\n width: 410,\n center: true,\n resizable: true,\n children: editor,\n confirmClose: () => {\n if (!editorRef || !editorRef.current) return false;\n return editorRef.current.hasUnsavedChanges;\n },\n confirmationText: \"You have unsaved changes to your Custom CSS. Closing this window will lose all those changes.\"\n });\n this.isDetached = true;\n UserSettings.close();\n Dispatcher.dirtyDispatch({\n type: ActionTypes.LAYER_POP\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2N1c3RvbWNzcy5qcz9jM2YyIl0sIm5hbWVzIjpbImZzIiwicmVxdWlyZSIsImVsZWN0cm9uIiwiVXNlclNldHRpbmdzIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiRGlzcGF0Y2hlciIsIkFjdGlvblR5cGVzIiwiQ3VzdG9tQ1NTIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic3RhcnREZXRhY2hlZCIsIlNldHRpbmdzIiwiZ2V0IiwiY29sbGVjdGlvbiIsIm5hdGl2ZU9wZW4iLCJjb25zdHJ1Y3RvciIsInNhdmVkQ3NzIiwiaW5zZXJ0ZWRDc3MiLCJpc0RldGFjaGVkIiwiZW5hYmxlZCIsIndpbmRvdyIsImFjZSIsIkRPTU1hbmFnZXIiLCJpbmplY3RTY3JpcHQiLCJ0aGVuIiwib3JpZ2luYWwiLCJyZWdpc3RlclBhbmVsIiwib3JkZXIiLCJlbGVtZW50IiwiUmVhY3QiLCJjcmVhdGVFbGVtZW50IiwiQ1NTRWRpdG9yIiwiY3NzIiwic2F2ZSIsInNhdmVDU1MiLCJiaW5kIiwidXBkYXRlIiwiaW5zZXJ0Q1NTIiwib3Blbk5hdGl2ZSIsIm9wZW5EZXRhY2hlZCIsIm9uQ2hhbmdlIiwib25DbGljayIsInRoaXNPYmplY3QiLCJfcmVhY3RJbnRlcm5hbEZpYmVyIiwiY2hpbGQiLCJtZW1vaXplZFByb3BzIiwiY2hpbGRyZW4iLCJwcm9wcyIsIm9uU2V0U2VjdGlvbiIsInNldFNlY3Rpb24iLCJsb2FkQ1NTIiwid2F0Y2hDb250ZW50IiwiZGlzYWJsZWQiLCJyZW1vdmVQYW5lbCIsInVud2F0Y2hDb250ZW50Iiwid2F0Y2hlciIsImVycm9yIiwidGltZUNhY2hlIiwibG9nIiwid2F0Y2giLCJEYXRhU3RvcmUiLCJjdXN0b21DU1MiLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJQcm9taXNlIiwiciIsInNldFRpbWVvdXQiLCJzdGF0U3luYyIsImVyciIsImNvZGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsIm5ld0NTUyIsImxvYWRDdXN0b21DU1MiLCJFdmVudHMiLCJlbWl0IiwiY2xvc2UiLCJ2YWx1ZSIsIm5ld0NzcyIsInVwZGF0ZUN1c3RvbUNTUyIsInNhdmVDdXN0b21DU1MiLCJzaGVsbCIsIm9wZW5FeHRlcm5hbCIsImN1cnJlbnRDU1MiLCJlZGl0b3JSZWYiLCJjcmVhdGVSZWYiLCJlZGl0b3IiLCJyZWYiLCJGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciIsIm9wZW4iLCJvbkNsb3NlIiwib25SZXNpemUiLCJjdXJyZW50IiwicmVzaXplIiwidGl0bGUiLCJoZWlnaHQiLCJ3aWR0aCIsImNlbnRlciIsInJlc2l6YWJsZSIsImNvbmZpcm1DbG9zZSIsImhhc1Vuc2F2ZWRDaGFuZ2VzIiwiY29uZmlybWF0aW9uVGV4dCIsImRpcnR5RGlzcGF0Y2giLCJ0eXBlIiwiTEFZRVJfUE9QIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLE1BQU1BLEVBQUUsR0FBR0MsbUJBQU8sQ0FBQyxjQUFELENBQWxCOztBQUNBLE1BQU1DLFFBQVEsR0FBR0QsbUJBQU8sQ0FBQywwQkFBRCxDQUF4Qjs7QUFDQSxNQUFNRSxZQUFZLEdBQUdDLHNEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsQ0FBckI7QUFDQSxNQUFNQyxVQUFVLEdBQUdGLHNEQUFjLENBQUNDLFVBQWYsQ0FBMEIsZUFBMUIsQ0FBbkI7QUFDQSxNQUFNRSxXQUFXLEdBQUdILHNEQUFjLENBQUNDLFVBQWYsQ0FBMEIsYUFBMUIsRUFBeUNFLFdBQTdEO0FBRWUsbUVBQUksTUFBTUMsU0FBTixTQUF3QkMsd0RBQXhCLENBQWdDO0FBQy9DLE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sWUFBUDtBQUFxQjs7QUFDakMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxXQUFQO0FBQW9COztBQUNwQyxNQUFJQyxFQUFK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LFFBQUUsRUFBRSx3QkFUcUI7QUFVekJ3RixZQUFNLEVBQUUsR0FWaUI7QUFXekJDLFdBQUssRUFBRSxHQVhrQjtBQVl6QkMsWUFBTSxFQUFFLElBWmlCO0FBYXpCQyxlQUFTLEVBQUUsSUFiYztBQWN6QnRELGNBQVEsRUFBRTBDLE1BZGU7QUFlekJhLGtCQUFZLEVBQUUsTUFBTTtBQUNoQixZQUFJLENBQUNmLFNBQUQsSUFBYyxDQUFDQSxTQUFTLENBQUNRLE9BQTdCLEVBQXNDLE9BQU8sS0FBUDtBQUN0QyxlQUFPUixTQUFTLENBQUNRLE9BQVYsQ0FBa0JRLGlCQUF6QjtBQUNILE9BbEJ3QjtBQW1CekJDLHNCQUFnQixFQUFFO0FBbkJPLEtBQTdCO0FBcUJBLFNBQUtyRixVQUFMLEdBQWtCLElBQWxCO0FBQ0FsQixnQkFBWSxDQUFDOEUsS0FBYjtBQUNBM0UsY0FBVSxDQUFDcUcsYUFBWCxDQUF5QjtBQUFDQyxVQUFJLEVBQUVyRyxXQUFXLENBQUNzRztBQUFuQixLQUF6QjtBQUNIOztBQWhKOEMsQ0FBcEMsRUFBZiIsImZpbGUiOiIuL3NyYy9idWlsdGlucy9jdXN0b21jc3MuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7U2V0dGluZ3MsIERhdGFTdG9yZSwgUmVhY3QsIFdlYnBhY2tNb2R1bGVzLCBFdmVudHMsIERPTU1hbmFnZXJ9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBDU1NFZGl0b3IgZnJvbSBcIi4uL3VpL2N1c3RvbWNzcy9jc3NlZGl0b3JcIjtcclxuaW1wb3J0IEZsb2F0aW5nV2luZG93Q29udGFpbmVyIGZyb20gXCIuLi91aS9mbG9hdGluZy9jb250YWluZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4uL3VpL3NldHRpbmdzL3RpdGxlXCI7XHJcblxyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7XHJcbmNvbnN0IFVzZXJTZXR0aW5ncyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ1cGRhdGVBY2NvdW50XCIpO1xyXG5jb25zdCBEaXNwYXRjaGVyID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRpcnR5RGlzcGF0Y2hcIik7XHJcbmNvbnN0IEFjdGlvblR5cGVzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkFjdGlvblR5cGVzXCIpLkFjdGlvblR5cGVzO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEN1c3RvbUNTUyBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiQ3VzdG9tIENTU1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJjdXN0b21jc3NcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiY3VzdG9tY3NzXCI7fVxyXG4gICAgZ2V0IHN0YXJ0RGV0YWNoZWQoKSB7cmV0dXJuIFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIFwic3RhcnREZXRhY2hlZFwiKTt9XHJcbiAgICBnZXQgbmF0aXZlT3BlbigpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgXCJuYXRpdmVPcGVuXCIpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc2F2ZWRDc3MgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuaW5zZXJ0ZWRDc3MgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuaXNEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuYWNlKSB7XHJcbiAgICAgICAgICAgIERPTU1hbmFnZXIuaW5qZWN0U2NyaXB0KFwiYWNlLXNjcmlwdFwiLCBcImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2FjZS8xLjIuOS9hY2UuanNcIikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LnJlcXVpcmUub3JpZ2luYWwpIHdpbmRvdy5yZXF1aXJlID0gd2luZG93LnJlcXVpcmUub3JpZ2luYWw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKHRoaXMuaWQsIHRoaXMubmFtZSwge1xyXG4gICAgICAgICAgICBvcmRlcjogMixcclxuICAgICAgICAgICAgZWxlbWVudDogKCkgPT4gWzxTZXR0aW5nc1RpdGxlIHRleHQ9XCJDdXN0b20gQ1NTIEVkaXRvclwiIC8+LCBSZWFjdC5jcmVhdGVFbGVtZW50KENTU0VkaXRvciwge1xyXG4gICAgICAgICAgICAgICAgY3NzOiB0aGlzLnNhdmVkQ3NzLFxyXG4gICAgICAgICAgICAgICAgc2F2ZTogdGhpcy5zYXZlQ1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGU6IHRoaXMuaW5zZXJ0Q1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvcGVuTmF0aXZlOiB0aGlzLm9wZW5OYXRpdmUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9wZW5EZXRhY2hlZDogdGhpcy5vcGVuRGV0YWNoZWQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICAgICAgfSldLFxyXG4gICAgICAgICAgICBvbkNsaWNrOiAodGhpc09iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXRhY2hlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmF0aXZlT3BlbikgdGhpcy5vcGVuTmF0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXJ0RGV0YWNoZWQpIHRoaXMub3BlbkRldGFjaGVkKCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXNPYmplY3QuX3JlYWN0SW50ZXJuYWxGaWJlci5jaGlsZC5tZW1vaXplZFByb3BzLmNoaWxkcmVuLnByb3BzLm9uU2V0U2VjdGlvbih0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWN0aW9uID0gdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLmNoaWxkLm1lbW9pemVkUHJvcHMuY2hpbGRyZW4ucHJvcHMub25TZXRTZWN0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQ1NTKCk7XHJcbiAgICAgICAgdGhpcy5pbnNlcnRDU1ModGhpcy5zYXZlZENzcyk7XHJcbiAgICAgICAgdGhpcy53YXRjaENvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZW1vdmVQYW5lbCh0aGlzLmlkKTtcclxuICAgICAgICB0aGlzLnVud2F0Y2hDb250ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgd2F0Y2hDb250ZW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXIpIHJldHVybiB0aGlzLmVycm9yKFwiQWxyZWFkeSB3YXRjaGluZyBjb250ZW50LlwiKTtcclxuICAgICAgICBjb25zdCB0aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLmxvZyhcIlN0YXJ0aW5nIHRvIHdhdGNoIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlciA9IGZzLndhdGNoKERhdGFTdG9yZS5jdXN0b21DU1MsIHtwZXJzaXN0ZW50OiBmYWxzZX0sIGFzeW5jIChldmVudFR5cGUsIGZpbGVuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghZXZlbnRUeXBlIHx8ICFmaWxlbmFtZSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhEYXRhU3RvcmUuY3VzdG9tQ1NTKTt9XHJcbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnIuY29kZSAhPT0gXCJFTk9FTlRcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZGVsZXRlIHRpbWVDYWNoZVtmaWxlbmFtZV07XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVDU1MoXCJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhEYXRhU3RvcmUuY3VzdG9tQ1NTKTtcclxuICAgICAgICAgICAgaWYgKCFzdGF0cyB8fCAhc3RhdHMubXRpbWUgfHwgIXN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mKHN0YXRzLm10aW1lLmdldFRpbWUoKSkgIT09IFwibnVtYmVyXCIpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHRpbWVDYWNoZVtmaWxlbmFtZV0gPT0gc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRpbWVDYWNoZVtmaWxlbmFtZV0gPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q1NTID0gRGF0YVN0b3JlLmxvYWRDdXN0b21DU1MoKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZXdDU1MgPT0gdGhpcy5zYXZlZENzcykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlZENzcyA9IG5ld0NTUztcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0Q1NTKHRoaXMuc2F2ZWRDc3MpO1xyXG4gICAgICAgICAgICAgICAgRXZlbnRzLmVtaXQoXCJjdXN0b21jc3MtdXBkYXRlZFwiLCB0aGlzLnNhdmVkQ3NzKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVud2F0Y2hDb250ZW50KCkge1xyXG4gICAgICAgIGlmICghdGhpcy53YXRjaGVyKSByZXR1cm4gdGhpcy5lcnJvcihcIldhcyBub3Qgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyLmNsb3NlKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMud2F0Y2hlcjtcclxuICAgICAgICB0aGlzLmxvZyhcIk5vIGxvbmdlciB3YXRjaGluZyBjb250ZW50LlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBvbkNoYW5nZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICghU2V0dGluZ3MuZ2V0KFwic2V0dGluZ3NcIiwgXCJjdXN0b21jc3NcIiwgXCJsaXZlVXBkYXRlXCIpKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5pbnNlcnRDU1ModmFsdWUpO1xyXG4gICAgICAgIHRoaXMuc2F2ZUNTUyh2YWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZENTUygpIHtcclxuICAgICAgICB0aGlzLnNhdmVkQ3NzID0gRGF0YVN0b3JlLmxvYWRDdXN0b21DU1MoKTtcclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRDU1MobmV3Q3NzKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihuZXdDc3MpID09PSBcInVuZGVmaW5lZFwiKSBuZXdDc3MgPSB0aGlzLmluc2VydGVkQ3NzO1xyXG4gICAgICAgIGVsc2UgdGhpcy5pbnNlcnRlZENzcyA9IG5ld0NzcztcclxuICAgICAgICBET01NYW5hZ2VyLnVwZGF0ZUN1c3RvbUNTUyhuZXdDc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVDU1MobmV3Q3NzKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZihuZXdDc3MpICE9PSBcInVuZGVmaW5lZFwiKSB0aGlzLnNhdmVkQ3NzID0gbmV3Q3NzO1xyXG4gICAgICAgIERhdGFTdG9yZS5zYXZlQ3VzdG9tQ1NTKHRoaXMuc2F2ZWRDc3MpO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5OYXRpdmUoKSB7XHJcbiAgICAgICAgZWxlY3Ryb24uc2hlbGwub3BlbkV4dGVybmFsKGBmaWxlOi8vJHtEYXRhU3RvcmUuY3VzdG9tQ1NTfWApO1xyXG4gICAgfVxyXG5cclxuICAgIG9wZW5EZXRhY2hlZChjdXJyZW50Q1NTKSB7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yUmVmID0gUmVhY3QuY3JlYXRlUmVmKCk7XHJcbiAgICAgICAgY29uc3QgZWRpdG9yID0gUmVhY3QuY3JlYXRlRWxlbWVudChDU1NFZGl0b3IsIHtcclxuICAgICAgICAgICAgaWQ6IFwiYmQtZmxvYXRpbmctZWRpdG9yXCIsXHJcbiAgICAgICAgICAgIHJlZjogZWRpdG9yUmVmLFxyXG4gICAgICAgICAgICBjc3M6IGN1cnJlbnRDU1MsXHJcbiAgICAgICAgICAgIHNhdmU6IHRoaXMuc2F2ZUNTUy5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICB1cGRhdGU6IHRoaXMuaW5zZXJ0Q1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIG9wZW5OYXRpdmU6IHRoaXMub3Blbk5hdGl2ZS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIEZsb2F0aW5nV2luZG93Q29udGFpbmVyLm9wZW4oe1xyXG4gICAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25SZXNpemU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZWRpdG9yUmVmIHx8ICFlZGl0b3JSZWYuY3VycmVudCB8fCAhZWRpdG9yUmVmLmN1cnJlbnQucmVzaXplKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBlZGl0b3JSZWYuY3VycmVudC5yZXNpemUoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIixcclxuICAgICAgICAgICAgaWQ6IFwiZmxvYXRpbmctZWRpdG9yLXdpbmRvd1wiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDQ3MCxcclxuICAgICAgICAgICAgd2lkdGg6IDQxMCxcclxuICAgICAgICAgICAgY2VudGVyOiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBlZGl0b3IsXHJcbiAgICAgICAgICAgIGNvbmZpcm1DbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlZGl0b3JSZWYgfHwgIWVkaXRvclJlZi5jdXJyZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWRpdG9yUmVmLmN1cnJlbnQuaGFzVW5zYXZlZENoYW5nZXM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbmZpcm1hdGlvblRleHQ6IFwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIHRvIHlvdXIgQ3VzdG9tIENTUy4gQ2xvc2luZyB0aGlzIHdpbmRvdyB3aWxsIGxvc2UgYWxsIHRob3NlIGNoYW5nZXMuXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzRGV0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgIFVzZXJTZXR0aW5ncy5jbG9zZSgpO1xyXG4gICAgICAgIERpc3BhdGNoZXIuZGlydHlEaXNwYXRjaCh7dHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfUE9QfSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/customcss.js\n"); /***/ }), @@ -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 = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].monkeyPatch(this.MessageContentComponent.prototype, \"render\", {\n after: ({\n retVal\n }) => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].monkeyPatch(retVal.props, \"children\", {\n silent: true,\n after: ({\n returnValue\n }) => {\n if (this.categories.length == 0) return;\n const markup = returnValue.props.children[1];\n if (!markup.props.children) return;\n const nodes = markup.props.children[1];\n if (!nodes || !nodes.length) return;\n\n for (let n = 0; n < nodes.length; n++) {\n const node = nodes[n];\n if (typeof node !== \"string\") continue;\n const words = node.split(/([^\\s]+)([\\s]|$)/g);\n\n for (let c = 0, clen = this.categories.length; c < clen; c++) {\n for (let w = 0, wlen = words.length; w < wlen; w++) {\n const emote = words[w];\n const emoteSplit = emote.split(\":\");\n const emoteName = emoteSplit[0];\n let emoteModifier = emoteSplit[1] ? emoteSplit[1] : \"\";\n let emoteOverride = emoteModifier.slice(0);\n if (emoteName.length < 4 || blacklist.includes(emoteName)) continue;\n if (!modifiers.includes(emoteModifier) || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"general\", \"modifiers\")) emoteModifier = \"\";\n if (!overrides.includes(emoteOverride)) emoteOverride = \"\";else emoteModifier = emoteOverride;\n let current = this.categories[c];\n\n if (emoteOverride === \"twitch\") {\n if (Emotes.TwitchGlobal[emoteName]) current = \"TwitchGlobal\";else if (Emotes.TwitchSubscriber[emoteName]) current = \"TwitchSubscriber\";\n } else if (emoteOverride === \"bttv\") {\n if (Emotes.BTTV[emoteName]) current = \"BTTV\";else if (Emotes.BTTV2[emoteName]) current = \"BTTV2\";\n } else if (emoteOverride === \"ffz\") {\n if (Emotes.FrankerFaceZ[emoteName]) current = \"FrankerFaceZ\";\n }\n\n if (!Emotes[current][emoteName] || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"categories\", bdEmoteSettingIDs[current])) continue;\n const results = nodes[n].match(new RegExp(`([\\\\s]|^)${modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].escape(emoteModifier ? emoteName + \":\" + emoteModifier : emoteName)}([\\\\s]|$)`));\n if (!results) continue;\n const pre = nodes[n].substring(0, results.index + results[1].length);\n const post = nodes[n].substring(results.index + results[0].length - results[2].length);\n nodes[n] = pre;\n const emoteComponent = modules__WEBPACK_IMPORTED_MODULE_2__[\"DiscordModules\"].React.createElement(_ui_emote__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: emoteName,\n url: Emotes[current][emoteName],\n modifier: emoteModifier\n });\n nodes.splice(n + 1, 0, post);\n nodes.splice(n + 1, 0, emoteComponent);\n }\n }\n }\n\n const onlyEmotes = nodes.every(r => {\n if (typeof r == \"string\" && r.replace(/\\s*/, \"\") == \"\") return true;else if (r.type && r.type.name == \"BDEmote\") return true;else if (r.props && r.props.children && r.props.children.props && r.props.children.props.emojiName) return true;\n return false;\n });\n if (!onlyEmotes) return;\n\n for (const node of nodes) {\n if (typeof node != \"object\") continue;\n if (node.type.name == \"BDEmote\") node.props.jumboable = true;else if (node.props && node.props.children && node.props.children.props && node.props.children.props.emojiName) node.props.children.props.jumboable = true;\n }\n }\n });\n }\n });\n }\n\n async loadEmoteData(emoteInfo) {\n 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 modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Loading emotes from local cache.\");\n const data = await new Promise(resolve => {\n _fs.readFile(file, \"utf8\", (err, content) => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"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 modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Cache was corrupt, downloading...\");\n\n _fs.unlinkSync(file);\n }\n\n if (!modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"general\", \"download\")) return;\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Downloading emotes in the background do not reload.\", {\n type: \"info\"\n });\n\n for (const e in emoteInfo) {\n await new Promise(r => setTimeout(r, 1000));\n const data = await this.downloadEmotes(emoteInfo[e]);\n Emotes[emoteInfo[e].variable] = data;\n }\n\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"All emotes successfully downloaded.\", {\n type: \"success\"\n });\n\n try {\n _fs.writeFileSync(file, JSON.stringify(Emotes), \"utf8\");\n } catch (err) {\n 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 modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", `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 modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Downloaded: \" + emoteMeta.variable);\n });\n });\n }\n\n getBlacklist() {\n return new Promise(resolve => {\n $.getJSON(`https://rauenzi.github.io/BetterDiscordApp/data/emotefilter.json`, function (data) {\n resolve(blacklist.push(...data.blacklist));\n });\n });\n }\n\n isCacheValid() {\n const cacheLength = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDays\") || modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDays\", 7) || 7;\n const cacheDate = new Date(modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDate\") || null);\n const currentDate = new Date();\n const daysBetween = Math.round(Math.abs((currentDate.getTime() - cacheDate.getTime()) / (24 * 60 * 60 * 1000)));\n\n if (daysBetween > cacheLength) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", currentDate.toJSON());\n return false;\n }\n\n return true;\n }\n\n clearEmoteData() {\n const _fs = __webpack_require__(/*! fs */ \"fs\");\n\n const emoteFile = \"emote_data.json\";\n const file = data__WEBPACK_IMPORTED_MODULE_1__[\"Config\"].dataPath + emoteFile;\n\n const exists = _fs.existsSync(file);\n\n if (exists) _fs.unlinkSync(file);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", new Date().toJSON());\n\n for (const category in Emotes) Object.assign(Emotes, {\n [category]: {}\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbIkVtb3RlcyIsIlR3aXRjaEdsb2JhbCIsIlR3aXRjaFN1YnNjcmliZXIiLCJCVFRWIiwiRnJhbmtlckZhY2VaIiwiQlRUVjIiLCJiZEVtb3RlU2V0dGluZ0lEcyIsImJsYWNrbGlzdCIsIm92ZXJyaWRlcyIsIm1vZGlmaWVycyIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwiZ2V0IiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENhdGVnb3J5IiwiaW5pdGlhbGl6ZSIsImVuYWJsZWQiLCJTZXR0aW5ncyIsInJlZ2lzdGVyQ29sbGVjdGlvbiIsIkVtb3RlQ29uZmlnIiwidGl0bGUiLCJvbkNsaWNrIiwiY2xlYXJFbW90ZURhdGEiLCJsb2FkRW1vdGVEYXRhIiwiRW1vdGVJbmZvIiwiZGlzYWJsZWQiLCJyZW1vdmVDb2xsZWN0aW9uIiwiZW1wdHlFbW90ZXMiLCJjYW5jZWxFbW90ZVJlbmRlciIsImNhdCIsImFzc2lnbiIsInBhdGNoTWVzc2FnZUNvbnRlbnQiLCJVdGlsaXRpZXMiLCJtb25rZXlQYXRjaCIsInByb3RvdHlwZSIsImFmdGVyIiwicmV0VmFsIiwicHJvcHMiLCJzaWxlbnQiLCJyZXR1cm5WYWx1ZSIsImxlbmd0aCIsIm1hcmt1cCIsImNoaWxkcmVuIiwibm9kZXMiLCJuIiwibm9kZSIsIndvcmRzIiwic3BsaXQiLCJjIiwiY2xlbiIsInciLCJ3bGVuIiwiZW1vdGUiLCJlbW90ZVNwbGl0IiwiZW1vdGVOYW1lIiwiZW1vdGVNb2RpZmllciIsImVtb3RlT3ZlcnJpZGUiLCJzbGljZSIsImluY2x1ZGVzIiwiY3VycmVudCIsInJlc3VsdHMiLCJtYXRjaCIsIlJlZ0V4cCIsImVzY2FwZSIsInByZSIsInN1YnN0cmluZyIsImluZGV4IiwicG9zdCIsImVtb3RlQ29tcG9uZW50IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJCREVtb3RlIiwidXJsIiwibW9kaWZpZXIiLCJzcGxpY2UiLCJvbmx5RW1vdGVzIiwiZXZlcnkiLCJyIiwicmVwbGFjZSIsInR5cGUiLCJlbW9qaU5hbWUiLCJqdW1ib2FibGUiLCJlbW90ZUluZm8iLCJlbW90ZXNMb2FkZWQiLCJfZnMiLCJyZXF1aXJlIiwiZW1vdGVGaWxlIiwiZmlsZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwiZXhpc3RzIiwiZXhpc3RzU3luYyIsImlzQ2FjaGVWYWxpZCIsIlRvYXN0cyIsInNob3ciLCJsb2ciLCJkYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWFkRmlsZSIsImVyciIsImNvbnRlbnQiLCJwYXJzZWQiLCJ0ZXN0SlNPTiIsImlzVmFsaWQiLCJlIiwidmFyaWFibGUiLCJFdmVudHMiLCJkaXNwYXRjaCIsInVubGlua1N5bmMiLCJzZXRUaW1lb3V0IiwiZG93bmxvYWRFbW90ZXMiLCJ3cml0ZUZpbGVTeW5jIiwiSlNPTiIsInN0cmluZ2lmeSIsInN0YWNrdHJhY2UiLCJlbW90ZU1ldGEiLCJyZXF1ZXN0Iiwib3B0aW9ucyIsInRpbWVvdXQiLCJqc29uIiwicmVqZWN0IiwiZXJyb3IiLCJyZXNwb25zZSIsInBhcnNlZERhdGEiLCJiYWNrdXAiLCJiYWNrdXBQYXJzZXIiLCJwYXJzZXIiLCJnZXRFbW90ZVVSTCIsImdldEJsYWNrbGlzdCIsIiQiLCJnZXRKU09OIiwicHVzaCIsImNhY2hlTGVuZ3RoIiwiRGF0YVN0b3JlIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwiY2FjaGVEYXRlIiwiRGF0ZSIsImN1cnJlbnREYXRlIiwiZGF5c0JldHdlZW4iLCJNYXRoIiwi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QkMsdURBQVMsQ0FBQ0UsU0FBVixDQUFvQixnQkFBcEIsRUFBc0NHLFdBQVcsQ0FBQ00sTUFBWixFQUF0QztBQUNBLGFBQU8sS0FBUDtBQUNIOztBQUNELFdBQU8sSUFBUDtBQUNIOztBQUVENUgsZ0JBQWMsR0FBRztBQUNiLFVBQU0rRCxHQUFHLEdBQUdDLG1CQUFPLENBQUMsY0FBRCxDQUFuQjs7QUFDQSxVQUFNQyxTQUFTLEdBQUcsaUJBQWxCO0FBQ0EsVUFBTUMsSUFBSSxHQUFHQywyQ0FBTSxDQUFDQyxRQUFQLEdBQWtCSCxTQUEvQjs7QUFDQSxVQUFNSSxNQUFNLEdBQUdOLEdBQUcsQ0FBQ08sVUFBSixDQUFlSixJQUFmLENBQWY7O0FBQ0EsUUFBSUcsTUFBSixFQUFZTixHQUFHLENBQUN5QixVQUFKLENBQWV0QixJQUFmO0FBQ1orQyxxREFBUyxDQUFDRSxTQUFWLENBQW9CLGdCQUFwQixFQUF1QyxJQUFJRSxJQUFKLEVBQUQsQ0FBYU8sTUFBYixFQUF0Qzs7QUFDQSxTQUFLLE1BQU1uSixRQUFYLElBQXVCZCxNQUF2QixFQUErQmlCLE1BQU0sQ0FBQzRCLE1BQVAsQ0FBYzdDLE1BQWQsRUFBc0I7QUFBQyxPQUFDYyxRQUFELEdBQVk7QUFBYixLQUF0QjtBQUNsQzs7QUF2UGdELENBQXRDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZW1vdGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5cclxuaW1wb3J0IHtDb25maWcsIEVtb3RlSW5mbywgRW1vdGVDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7VXRpbGl0aWVzLCBXZWJwYWNrTW9kdWxlcywgRGF0YVN0b3JlLCBEaXNjb3JkTW9kdWxlcywgRXZlbnRzLCBTZXR0aW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IEJERW1vdGUgZnJvbSBcIi4uL3VpL2Vtb3RlXCI7XHJcbmltcG9ydCB7VG9hc3RzfSBmcm9tIFwidWlcIjtcclxuXHJcbmNvbnN0IEVtb3RlcyA9IHtcclxuICAgIFR3aXRjaEdsb2JhbDoge30sXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiB7fSxcclxuICAgIEJUVFY6IHt9LFxyXG4gICAgRnJhbmtlckZhY2VaOiB7fSxcclxuICAgIEJUVFYyOiB7fVxyXG59O1xyXG5cclxuY29uc3QgYmRFbW90ZVNldHRpbmdJRHMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IFwidHdpdGNoXCIsXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiBcInR3aXRjaFwiLFxyXG4gICAgQlRUVjogXCJidHR2XCIsXHJcbiAgICBGcmFua2VyRmFjZVo6IFwiZmZ6XCIsXHJcbiAgICBCVFRWMjogXCJidHR2XCJcclxufTtcclxuXHJcbmNvbnN0IGJsYWNrbGlzdCA9IFtdO1xyXG5jb25zdCBvdmVycmlkZXMgPSBbXCJ0d2l0Y2hcIiwgXCJidHR2XCIsIFwiZmZ6XCJdO1xyXG5jb25zdCBtb2RpZmllcnMgPSBbXCJmbGlwXCIsIFwic3BpblwiLCBcInB1bHNlXCIsIFwic3BpbjJcIiwgXCJzcGluM1wiLCBcIjFzcGluXCIsIFwiMnNwaW5cIiwgXCIzc3BpblwiLCBcInRyXCIsIFwiYmxcIiwgXCJiclwiLCBcInNoYWtlXCIsIFwic2hha2UyXCIsIFwic2hha2UzXCIsIFwiZmxhcFwiXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW90ZU1vZHVsZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcmllcygpIHsgcmV0dXJuIE9iamVjdC5rZXlzKGJkRW1vdGVTZXR0aW5nSURzKS5maWx0ZXIoayA9PiB0aGlzLmlzQ2F0ZWdvcnlFbmFibGVkKGJkRW1vdGVTZXR0aW5nSURzW2tdKSk7IH1cclxuXHJcbiAgICBpc0NhdGVnb3J5RW5hYmxlZChpZCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXQoXCJlbW90ZXNcIiwgXCJjYXRlZ29yaWVzXCIsIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoaWQpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KFwiZW1vdGVzXCIsIFwiZ2VuZXJhbFwiLCBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcblxyXG4gICAgZ2V0IEVtb3RlcygpIHtyZXR1cm4gRW1vdGVzO31cclxuICAgIGdldCBUd2l0Y2hHbG9iYWwoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hHbG9iYWw7fVxyXG4gICAgZ2V0IFR3aXRjaFN1YnNjcmliZXIoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyO31cclxuICAgIGdldCBCVFRWKCkge3JldHVybiBFbW90ZXMuQlRUVjt9XHJcbiAgICBnZXQgRnJhbmtlckZhY2VaKCkge3JldHVybiBFbW90ZXMuRnJhbmtlckZhY2VaO31cclxuICAgIGdldCBCVFRWMigpIHtyZXR1cm4gRW1vdGVzLkJUVFYyO31cclxuICAgIGdldCBibGFja2xpc3QoKSB7cmV0dXJuIGJsYWNrbGlzdDt9XHJcblxyXG4gICAgZ2V0Q2F0ZWdvcnkoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gRW1vdGVzW2NhdGVnb3J5XTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICAvLyBFbW90ZUNvbmZpZztcclxuICAgICAgICAvLyBlbW90ZUNvbGxlY3Rpb24uYnV0dG9uID0ge3RpdGxlOiBcIkNsZWFyIEVtb3RlIENhY2hlXCIsIG9uQ2xpY2s6ICgpID0+IHsgdGhpcy5jbGVhckVtb3RlRGF0YSgpOyB0aGlzLmxvYWRFbW90ZURhdGEoRW1vdGVJbmZvKTsgfX07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlckNvbGxlY3Rpb24oXCJlbW90ZXNcIiwgXCJFbW90ZXNcIiwgRW1vdGVDb25maWcsIHt0aXRsZTogXCJDbGVhciBFbW90ZSBDYWNoZVwiLCBvbkNsaWNrOiAoKSA9PiB7IHRoaXMuY2xlYXJFbW90ZURhdGEoKTsgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7IH19KTtcclxuICAgICAgICAvLyBEaXNhYmxlIGVtb3RlIG1vZHVsZSBmb3Igbm93IGJlY2F1c2UgaXQncyBhbm5veWluZyBhbmQgc2xvd1xyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QmxhY2tsaXN0KCk7XHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7XHJcblxyXG4gICAgICAgIC8vIHdoaWxlICghdGhpcy5NZXNzYWdlQ29udGVudENvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG4gICAgICAgIC8vIHRoaXMucGF0Y2hNZXNzYWdlQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZUNvbGxlY3Rpb24oXCJlbW90ZXNcIik7XHJcbiAgICAgICAgdGhpcy5lbXB0eUVtb3RlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBlbXB0eUVtb3RlcygpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdCBpbiBFbW90ZXMpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCB7W2NhdF06IHt9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hNZXNzYWdlQ29udGVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBVdGlsaXRpZXMubW9ua2V5UGF0Y2godGhpcy5NZXNzYWdlQ29udGVudENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKHtyZXRWYWx9KSA9PiB7XHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5tb25rZXlQYXRjaChyZXRWYWwucHJvcHMsIFwiY2hpbGRyZW5cIiwge3NpbGVudDogdHJ1ZSwgYWZ0ZXI6ICh7cmV0dXJuVmFsdWV9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrdXAgPSByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXTtcclxuICAgICAgICAgICAgICAgIGlmICghbWFya3VwLnByb3BzLmNoaWxkcmVuKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IG1hcmt1cC5wcm9wcy5jaGlsZHJlblsxXTtcclxuICAgICAgICAgICAgICAgIGlmICghbm9kZXMgfHwgIW5vZGVzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoLyhbXlxcc10rKShbXFxzXXwkKS9nKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IHRoaXMuY2F0ZWdvcmllcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdyA9IDAsIHdsZW4gPSB3b3Jkcy5sZW5ndGg7IHcgPCB3bGVuOyB3KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlID0gd29yZHNbd107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZVNwbGl0ID0gZW1vdGUuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGVOYW1lID0gZW1vdGVTcGxpdFswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbW90ZU1vZGlmaWVyID0gZW1vdGVTcGxpdFsxXSA/IGVtb3RlU3BsaXRbMV0gOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVtb3RlT3ZlcnJpZGUgPSBlbW90ZU1vZGlmaWVyLnNsaWNlKDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU5hbWUubGVuZ3RoIDwgNCB8fCBibGFja2xpc3QuaW5jbHVkZXMoZW1vdGVOYW1lKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZGlmaWVycy5pbmNsdWRlcyhlbW90ZU1vZGlmaWVyKSB8fCAhU2V0dGluZ3MuZ2V0KHRoaXMuY2F0ZWdvcnksIFwiZ2VuZXJhbFwiLCBcIm1vZGlmaWVyc1wiKSkgZW1vdGVNb2RpZmllciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW92ZXJyaWRlcy5pbmNsdWRlcyhlbW90ZU92ZXJyaWRlKSkgZW1vdGVPdmVycmlkZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGVtb3RlTW9kaWZpZXIgPSBlbW90ZU92ZXJyaWRlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5jYXRlZ29yaWVzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwidHdpdGNoXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLlR3aXRjaEdsb2JhbFtlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJUd2l0Y2hHbG9iYWxcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChFbW90ZXMuVHdpdGNoU3Vic2NyaWJlcltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJUd2l0Y2hTdWJzY3JpYmVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbW90ZU92ZXJyaWRlID09PSBcImJ0dHZcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuQlRUVltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJCVFRWXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRW1vdGVzLkJUVFYyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkJUVFYyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbW90ZU92ZXJyaWRlID09PSBcImZmelwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5GcmFua2VyRmFjZVpbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiRnJhbmtlckZhY2VaXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFFbW90ZXNbY3VycmVudF1bZW1vdGVOYW1lXSB8fCAhU2V0dGluZ3MuZ2V0KHRoaXMuY2F0ZWdvcnksIFwiY2F0ZWdvcmllc1wiLCBiZEVtb3RlU2V0dGluZ0lEc1tjdXJyZW50XSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5vZGVzW25dLm1hdGNoKG5ldyBSZWdFeHAoYChbXFxcXHNdfF4pJHtVdGlsaXRpZXMuZXNjYXBlKGVtb3RlTW9kaWZpZXIgPyBlbW90ZU5hbWUgKyBcIjpcIiArIGVtb3RlTW9kaWZpZXIgOiBlbW90ZU5hbWUpfShbXFxcXHNdfCQpYCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZSA9IG5vZGVzW25dLnN1YnN0cmluZygwLCByZXN1bHRzLmluZGV4ICsgcmVzdWx0c1sxXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zdCA9IG5vZGVzW25dLnN1YnN0cmluZyhyZXN1bHRzLmluZGV4ICsgcmVzdWx0c1swXS5sZW5ndGggLSByZXN1bHRzWzJdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1tuXSA9IHByZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlQ29tcG9uZW50ID0gRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChCREVtb3RlLCB7bmFtZTogZW1vdGVOYW1lLCB1cmw6IEVtb3Rlc1tjdXJyZW50XVtlbW90ZU5hbWVdLCBtb2RpZmllcjogZW1vdGVNb2RpZmllcn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKG4gKyAxLCAwLCBwb3N0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShuICsgMSwgMCwgZW1vdGVDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seUVtb3RlcyA9IG5vZGVzLmV2ZXJ5KHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YocikgPT0gXCJzdHJpbmdcIiAmJiByLnJlcGxhY2UoL1xccyovLCBcIlwiKSA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyLnR5cGUgJiYgci50eXBlLm5hbWUgPT0gXCJCREVtb3RlXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIucHJvcHMgJiYgci5wcm9wcy5jaGlsZHJlbiAmJiByLnByb3BzLmNoaWxkcmVuLnByb3BzICYmIHIucHJvcHMuY2hpbGRyZW4ucHJvcHMuZW1vamlOYW1lKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghb25seUVtb3RlcykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT0gXCJvYmplY3RcIikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudHlwZS5uYW1lID09IFwiQkRFbW90ZVwiKSBub2RlLnByb3BzLmp1bWJvYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5wcm9wcyAmJiBub2RlLnByb3BzLmNoaWxkcmVuICYmIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMgJiYgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcy5lbW9qaU5hbWUpIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMuanVtYm9hYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkRW1vdGVEYXRhKGVtb3RlSW5mbykge1xyXG4gICAgICAgIHRoaXMuZW1vdGVzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgX2ZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgICAgIGNvbnN0IGVtb3RlRmlsZSA9IFwiZW1vdGVfZGF0YS5qc29uXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IENvbmZpZy5kYXRhUGF0aCArIGVtb3RlRmlsZTtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSBfZnMuZXhpc3RzU3luYyhmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGV4aXN0cyAmJiB0aGlzLmlzQ2FjaGVWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgIFRvYXN0cy5zaG93KFwiTG9hZGluZyBlbW90ZXMgZnJvbSBjYWNoZS5cIiwge3R5cGU6IFwiaW5mb1wifSk7XHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJMb2FkaW5nIGVtb3RlcyBmcm9tIGxvY2FsIGNhY2hlLlwiKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgICAgIF9mcy5yZWFkRmlsZShmaWxlLCBcInV0ZjhcIiwgKGVyciwgY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJFbW90ZXMgbG9hZGVkIGZyb20gY2FjaGUuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIGNvbnRlbnQgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbGl0aWVzLnRlc3RKU09OKGRhdGEpO1xyXG4gICAgICAgICAgICBsZXQgaXNWYWxpZCA9ICEhcGFyc2VkO1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCkgT2JqZWN0LmFzc2lnbihFbW90ZXMsIHBhcnNlZCk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgaW4gZW1vdGVJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gT2JqZWN0LmtleXMoRW1vdGVzW2Vtb3RlSW5mb1tlXS52YXJpYWJsZV0pLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICBUb2FzdHMuc2hvdyhcIkVtb3RlcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlwiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1vdGVzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJDYWNoZSB3YXMgY29ycnVwdCwgZG93bmxvYWRpbmcuLi5cIik7XHJcbiAgICAgICAgICAgIF9mcy51bmxpbmtTeW5jKGZpbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFTZXR0aW5ncy5nZXQodGhpcy5jYXRlZ29yeSwgXCJnZW5lcmFsXCIsIFwiZG93bmxvYWRcIikpIHJldHVybjtcclxuICAgICAgICBUb2FzdHMuc2hvdyhcIkRvd25sb2FkaW5nIGVtb3RlcyBpbiB0aGUgYmFja2dyb3VuZCBkbyBub3QgcmVsb2FkLlwiLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBlIGluIGVtb3RlSW5mbykge1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kb3dubG9hZEVtb3RlcyhlbW90ZUluZm9bZV0pO1xyXG4gICAgICAgICAgICBFbW90ZXNbZW1vdGVJbmZvW2VdLnZhcmlhYmxlXSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBUb2FzdHMuc2hvdyhcIkFsbCBlbW90ZXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG5cclxuICAgICAgICB0cnkgeyBfZnMud3JpdGVGaWxlU3luYyhmaWxlLCBKU09OLnN0cmluZ2lmeShFbW90ZXMpLCBcInV0ZjhcIik7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IHRoaXMuc3RhY2t0cmFjZShcIkNvdWxkIG5vdCBzYXZlIGVtb3RlIGRhdGEuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRFbW90ZXMoZW1vdGVNZXRhKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHVybDogZW1vdGVNZXRhLnVybCxcclxuICAgICAgICAgICAgdGltZW91dDogZW1vdGVNZXRhLnRpbWVvdXQgPyBlbW90ZU1ldGEudGltZW91dCA6IDUwMDAsXHJcbiAgICAgICAgICAgIGpzb246IHRydWVcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBVdGlsaXRpZXMubG9nKFwiRW1vdGVzXCIsIGBEb3dubG9hZGluZzogJHtlbW90ZU1ldGEudmFyaWFibGV9ICgke2Vtb3RlTWV0YS51cmx9KWApO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnJvciwgcmVzcG9uc2UsIHBhcnNlZERhdGEpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhY2t0cmFjZShcIkNvdWxkIG5vdCBkb3dubG9hZCBcIiArIGVtb3RlTWV0YS52YXJpYWJsZSwgZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU1ldGEuYmFja3VwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb3RlTWV0YS51cmwgPSBlbW90ZU1ldGEuYmFja3VwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW90ZU1ldGEuYmFja3VwID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTWV0YS5iYWNrdXBQYXJzZXIpIGVtb3RlTWV0YS5wYXJzZXIgPSBlbW90ZU1ldGEuYmFja3VwUGFyc2VyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmRvd25sb2FkRW1vdGVzKGVtb3RlTWV0YSkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KHt9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGVtb3RlTWV0YS5wYXJzZXIpID09PSBcImZ1bmN0aW9uXCIpIHBhcnNlZERhdGEgPSBlbW90ZU1ldGEucGFyc2VyKHBhcnNlZERhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFbZW1vdGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YVtlbW90ZV0gPSBlbW90ZU1ldGEuZ2V0RW1vdGVVUkwocGFyc2VkRGF0YVtlbW90ZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwYXJzZWREYXRhKTtcclxuICAgICAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJEb3dubG9hZGVkOiBcIiArIGVtb3RlTWV0YS52YXJpYWJsZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJsYWNrbGlzdCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICQuZ2V0SlNPTihgaHR0cHM6Ly9yYXVlbnppLmdpdGh1Yi5pby9CZXR0ZXJEaXNjb3JkQXBwL2RhdGEvZW1vdGVmaWx0ZXIuanNvbmAsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGJsYWNrbGlzdC5wdXNoKC4uLmRhdGEuYmxhY2tsaXN0KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQ2FjaGVWYWxpZCgpIHtcclxuICAgICAgICBjb25zdCBjYWNoZUxlbmd0aCA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF5c1wiKSB8fCBEYXRhU3RvcmUuc2V0QkREYXRhKFwiZW1vdGVDYWNoZURheXNcIiwgNykgfHwgNztcclxuICAgICAgICBjb25zdCBjYWNoZURhdGUgPSBuZXcgRGF0ZShEYXRhU3RvcmUuZ2V0QkREYXRhKFwiZW1vdGVDYWNoZURhdGVcIikgfHwgbnVsbCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGRheXNCZXR3ZWVuID0gTWF0aC5yb3VuZChNYXRoLmFicygoY3VycmVudERhdGUuZ2V0VGltZSgpIC0gY2FjaGVEYXRlLmdldFRpbWUoKSkgLyAoMjQgKiA2MCAqIDYwICogMTAwMCkpKTtcclxuICAgICAgICBpZiAoZGF5c0JldHdlZW4gPiBjYWNoZUxlbmd0aCkge1xyXG4gICAgICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiZW1vdGVDYWNoZURhdGVcIiwgY3VycmVudERhdGUudG9KU09OKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRW1vdGVEYXRhKCkge1xyXG4gICAgICAgIGNvbnN0IF9mcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgICAgICBjb25zdCBlbW90ZUZpbGUgPSBcImVtb3RlX2RhdGEuanNvblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBDb25maWcuZGF0YVBhdGggKyBlbW90ZUZpbGU7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gX2ZzLmV4aXN0c1N5bmMoZmlsZSk7XHJcbiAgICAgICAgaWYgKGV4aXN0cykgX2ZzLnVubGlua1N5bmMoZmlsZSk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImVtb3RlQ2FjaGVEYXRlXCIsIChuZXcgRGF0ZSgpKS50b0pTT04oKSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBpbiBFbW90ZXMpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCB7W2NhdGVnb3J5XToge319KTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/emotes.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_emote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/emote */ \"./src/ui/emote.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\n\n\nconst Emotes = {\n TwitchGlobal: {},\n TwitchSubscriber: {},\n BTTV: {},\n FrankerFaceZ: {},\n BTTV2: {}\n};\nconst bdEmoteSettingIDs = {\n TwitchGlobal: \"twitch\",\n TwitchSubscriber: \"twitch\",\n BTTV: \"bttv\",\n FrankerFaceZ: \"ffz\",\n BTTV2: \"bttv\"\n};\nconst blacklist = [];\nconst overrides = [\"twitch\", \"bttv\", \"ffz\"];\nconst modifiers = [\"flip\", \"spin\", \"pulse\", \"spin2\", \"spin3\", \"1spin\", \"2spin\", \"3spin\", \"tr\", \"bl\", \"br\", \"shake\", \"shake2\", \"shake3\", \"flap\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteModule extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Emotes\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emotes\";\n }\n\n get categories() {\n return Object.keys(bdEmoteSettingIDs).filter(k => this.isCategoryEnabled(bdEmoteSettingIDs[k]));\n }\n\n isCategoryEnabled(id) {\n return super.get(\"emotes\", \"categories\", id);\n }\n\n get(id) {\n return super.get(\"emotes\", \"general\", id);\n }\n\n get MessageContentComponent() {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n }\n\n get Emotes() {\n return Emotes;\n }\n\n get TwitchGlobal() {\n return Emotes.TwitchGlobal;\n }\n\n get TwitchSubscriber() {\n return Emotes.TwitchSubscriber;\n }\n\n get BTTV() {\n return Emotes.BTTV;\n }\n\n get FrankerFaceZ() {\n return Emotes.FrankerFaceZ;\n }\n\n get BTTV2() {\n return Emotes.BTTV2;\n }\n\n get blacklist() {\n return blacklist;\n }\n\n getCategory(category) {\n return Emotes[category];\n }\n\n initialize() {\n super.initialize(); // EmoteConfig;\n // emoteCollection.button = {title: \"Clear Emote Cache\", onClick: () => { this.clearEmoteData(); this.loadEmoteData(EmoteInfo); }};\n }\n\n async enabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].registerCollection(\"emotes\", \"Emotes\", data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteConfig\"], {\n title: \"Clear Emote Cache\",\n onClick: () => {\n this.clearEmoteData();\n this.loadEmoteData(data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteInfo\"]);\n }\n }); // Disable emote module for now because it's annoying and slow\n // await this.getBlacklist();\n // await this.loadEmoteData(EmoteInfo);\n // while (!this.MessageContentComponent) await new Promise(resolve => setTimeout(resolve, 100));\n // this.patchMessageContent();\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].removeCollection(\"emotes\");\n this.emptyEmotes();\n if (!this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n delete this.cancelEmoteRender;\n }\n\n emptyEmotes() {\n for (const cat in Emotes) Object.assign(Emotes, {\n [cat]: {}\n });\n }\n\n patchMessageContent() {\n if (this.cancelEmoteRender) return;\n this.cancelEmoteRender = 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"); /***/ }), @@ -215,7 +215,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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class MinimalMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"MinimalMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"minimalMode\";\n }\n\n get hideChannelsID() {\n return \"hideChannels\";\n }\n\n get hideChannels() {\n return this.get(this.hideChannelsID);\n }\n\n constructor() {\n super();\n this.enableHideChannels = this.enableHideChannels.bind(this);\n this.disableHideChannels = this.disableHideChannels.bind(this);\n }\n\n enabled() {\n $(\"body\").addClass(\"bd-minimal\");\n if (this.hideChannels) this.enableHideChannels();\n this.hideChannelCancel = this.registerSetting(this.hideChannelsID, this.enableHideChannels, this.disableHideChannels);\n }\n\n disabled() {\n $(\"body\").removeClass(\"bd-minimal\");\n if (this.hideChannels) this.disableHideChannels();\n if (this.hideChannelCancel) this.hideChannelCancel();\n }\n\n enableHideChannels() {\n $(\"body\").addClass(\"bd-minimal-chan\");\n }\n\n disableHideChannels() {\n $(\"body\").removeClass(\"bd-minimal-chan\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL21pbmltYWxtb2RlLmpzPzgzMzgiXSwibmFtZXMiOlsiTWluaW1hbE1vZGUiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJoaWRlQ2hhbm5lbHNJRCIsImhpZGVDaGFubmVscyIsImdldCIsImNvbnN0cnVjdG9yIiwiZW5hYmxlSGlkZUNoYW5uZWxzIiwiYmluZCIsImRpc2FibGVIaWRlQ2hhbm5lbHMiLCJlbmFibGVkIiwiJCIsImFkZENsYXNzIiwiaGlkZUNoYW5uZWxDYW5jZWwiLCJyZWdpc3RlclNldHRpbmciLCJkaXNhYmxlZCIsInJlbW92ZUNsYXNzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFFZSxtRUFBSSxNQUFNQSxXQUFOLFNBQTBCQyx3REFBMUIsQ0FBa0M7QUFDakQsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxhQUFQO0FBQXNCOztBQUNsQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFlBQVA7QUFBcUI7O0FBQ3JDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFDaEMsTUFBSUMsY0FBSixHQUFxQjtBQUFDLFdBQU8sY0FBUDtBQUF1Qjs7QUFDN0MsTUFBSUMsWUFBSixHQUFtQjtBQUFDLFdBQU8sS0FBS0MsR0FBTCxDQUFTLEtBQUtGLGNBQWQsQ0FBUDtBQUFzQzs7QUFFMURHLGFBQVcsR0FBRztBQUNWO0FBQ0EsU0FBS0Msa0JBQUwsR0FBMEIsS0FBS0Esa0JBQUwsQ0FBd0JDLElBQXhCLENBQTZCLElBQTdCLENBQTFCO0FBQ0EsU0FBS0MsbUJBQUwsR0FBMkIsS0FBS0EsbUJBQUwsQ0FBeUJELElBQXpCLENBQThCLElBQTlCLENBQTNCO0FBQ0g7O0FBRURFLFNBQU8sR0FBRztBQUNOQyxLQUFDLENBQUMsTUFBRCxDQUFELENBQVVDLFFBQVYsQ0FBbUIsWUFBbkI7QUFDQSxRQUFJLEtBQUtSLFlBQVQsRUFBdUIsS0FBS0csa0JBQUw7QUFDdkIsU0FBS00saUJBQUwsR0FBeUIsS0FBS0MsZUFBTCxDQUFxQixLQUFLWCxjQUExQixFQUEwQyxLQUFLSSxrQkFBL0MsRUFBbUUsS0FBS0UsbUJBQXhFLENBQXpCO0FBQ0g7O0FBRURNLFVBQVEsR0FBRztBQUNQSixLQUFDLENBQUMsTUFBRCxDQUFELENBQVVLLFdBQVYsQ0FBc0IsWUFBdEI7QUFDQSxRQUFJLEtBQUtaLFlBQVQsRUFBdUIsS0FBS0ssbUJBQUw7QUFDdkIsUUFBSSxLQUFLSSxpQkFBVCxFQUE0QixLQUFLQSxpQkFBTDtBQUMvQjs7QUFFRE4sb0JBQWtCLEdBQUc7QUFDakJJLEtBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUMsUUFBVixDQUFtQixpQkFBbkI7QUFDSDs7QUFFREgscUJBQW1CLEdBQUc7QUFDbEJFLEtBQUMsQ0FBQyxNQUFELENBQUQsQ0FBVUssV0FBVixDQUFzQixpQkFBdEI7QUFDSDs7QUEvQmdELENBQXRDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvbWluaW1hbG1vZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgTWluaW1hbE1vZGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIk1pbmltYWxNb2RlXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImFwcGVhcmFuY2VcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwibWluaW1hbE1vZGVcIjt9XHJcbiAgICBnZXQgaGlkZUNoYW5uZWxzSUQoKSB7cmV0dXJuIFwiaGlkZUNoYW5uZWxzXCI7fVxyXG4gICAgZ2V0IGhpZGVDaGFubmVscygpIHtyZXR1cm4gdGhpcy5nZXQodGhpcy5oaWRlQ2hhbm5lbHNJRCk7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVIaWRlQ2hhbm5lbHMgPSB0aGlzLmVuYWJsZUhpZGVDaGFubmVscy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUhpZGVDaGFubmVscyA9IHRoaXMuZGlzYWJsZUhpZGVDaGFubmVscy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgJChcImJvZHlcIikuYWRkQ2xhc3MoXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVDaGFubmVscykgdGhpcy5lbmFibGVIaWRlQ2hhbm5lbHMoKTtcclxuICAgICAgICB0aGlzLmhpZGVDaGFubmVsQ2FuY2VsID0gdGhpcy5yZWdpc3RlclNldHRpbmcodGhpcy5oaWRlQ2hhbm5lbHNJRCwgdGhpcy5lbmFibGVIaWRlQ2hhbm5lbHMsIHRoaXMuZGlzYWJsZUhpZGVDaGFubmVscyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgJChcImJvZHlcIikucmVtb3ZlQ2xhc3MoXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVDaGFubmVscykgdGhpcy5kaXNhYmxlSGlkZUNoYW5uZWxzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUNoYW5uZWxDYW5jZWwpIHRoaXMuaGlkZUNoYW5uZWxDYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVIaWRlQ2hhbm5lbHMoKSB7XHJcbiAgICAgICAgJChcImJvZHlcIikuYWRkQ2xhc3MoXCJiZC1taW5pbWFsLWNoYW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZUhpZGVDaGFubmVscygpIHtcclxuICAgICAgICAkKFwiYm9keVwiKS5yZW1vdmVDbGFzcyhcImJkLW1pbmltYWwtY2hhblwiKTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/minimalmode.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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class MinimalMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"MinimalMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"minimalMode\";\n }\n\n get hideChannelsID() {\n return \"hideChannels\";\n }\n\n get hideChannels() {\n return this.get(this.hideChannelsID);\n }\n\n constructor() {\n super();\n this.enableHideChannels = this.enableHideChannels.bind(this);\n this.disableHideChannels = this.disableHideChannels.bind(this);\n }\n\n enabled() {\n document.body.classList.add(\"bd-minimal\");\n if (this.hideChannels) this.enableHideChannels();\n this.hideChannelCancel = this.registerSetting(this.hideChannelsID, this.enableHideChannels, this.disableHideChannels);\n }\n\n disabled() {\n document.body.classList.remove(\"bd-minimal\");\n if (this.hideChannels) this.disableHideChannels();\n if (this.hideChannelCancel) this.hideChannelCancel();\n }\n\n enableHideChannels() {\n document.body.classList.add(\"bd-minimal-chan\");\n }\n\n disableHideChannels() {\n document.body.classList.remove(\"bd-minimal-chan\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL21pbmltYWxtb2RlLmpzPzgzMzgiXSwibmFtZXMiOlsiTWluaW1hbE1vZGUiLCJCdWlsdGluIiwibmFtZSIsImNhdGVnb3J5IiwiaWQiLCJoaWRlQ2hhbm5lbHNJRCIsImhpZGVDaGFubmVscyIsImdldCIsImNvbnN0cnVjdG9yIiwiZW5hYmxlSGlkZUNoYW5uZWxzIiwiYmluZCIsImRpc2FibGVIaWRlQ2hhbm5lbHMiLCJlbmFibGVkIiwiZG9jdW1lbnQiLCJib2R5IiwiY2xhc3NMaXN0IiwiYWRkIiwiaGlkZUNoYW5uZWxDYW5jZWwiLCJyZWdpc3RlclNldHRpbmciLCJkaXNhYmxlZCIsInJlbW92ZSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRWUsbUVBQUksTUFBTUEsV0FBTixTQUEwQkMsd0RBQTFCLENBQWtDO0FBQ2pELE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sYUFBUDtBQUFzQjs7QUFDbEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUNyQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLGFBQVA7QUFBc0I7O0FBQ2hDLE1BQUlDLGNBQUosR0FBcUI7QUFBQyxXQUFPLGNBQVA7QUFBdUI7O0FBQzdDLE1BQUlDLFlBQUosR0FBbUI7QUFBQyxXQUFPLEtBQUtDLEdBQUwsQ0FBUyxLQUFLRixjQUFkLENBQVA7QUFBc0M7O0FBRTFERyxhQUFXLEdBQUc7QUFDVjtBQUNBLFNBQUtDLGtCQUFMLEdBQTBCLEtBQUtBLGtCQUFMLENBQXdCQyxJQUF4QixDQUE2QixJQUE3QixDQUExQjtBQUNBLFNBQUtDLG1CQUFMLEdBQTJCLEtBQUtBLG1CQUFMLENBQXlCRCxJQUF6QixDQUE4QixJQUE5QixDQUEzQjtBQUNIOztBQUVERSxTQUFPLEdBQUc7QUFDTkMsWUFBUSxDQUFDQyxJQUFULENBQWNDLFNBQWQsQ0FBd0JDLEdBQXhCLENBQTRCLFlBQTVCO0FBQ0EsUUFBSSxLQUFLVixZQUFULEVBQXVCLEtBQUtHLGtCQUFMO0FBQ3ZCLFNBQUtRLGlCQUFMLEdBQXlCLEtBQUtDLGVBQUwsQ0FBcUIsS0FBS2IsY0FBMUIsRUFBMEMsS0FBS0ksa0JBQS9DLEVBQW1FLEtBQUtFLG1CQUF4RSxDQUF6QjtBQUNIOztBQUVEUSxVQUFRLEdBQUc7QUFDUE4sWUFBUSxDQUFDQyxJQUFULENBQWNDLFNBQWQsQ0FBd0JLLE1BQXhCLENBQStCLFlBQS9CO0FBQ0EsUUFBSSxLQUFLZCxZQUFULEVBQXVCLEtBQUtLLG1CQUFMO0FBQ3ZCLFFBQUksS0FBS00saUJBQVQsRUFBNEIsS0FBS0EsaUJBQUw7QUFDL0I7O0FBRURSLG9CQUFrQixHQUFHO0FBQ2pCSSxZQUFRLENBQUNDLElBQVQsQ0FBY0MsU0FBZCxDQUF3QkMsR0FBeEIsQ0FBNEIsaUJBQTVCO0FBQ0g7O0FBRURMLHFCQUFtQixHQUFHO0FBQ2xCRSxZQUFRLENBQUNDLElBQVQsQ0FBY0MsU0FBZCxDQUF3QkssTUFBeEIsQ0FBK0IsaUJBQS9CO0FBQ0g7O0FBL0JnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL21pbmltYWxtb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIE1pbmltYWxNb2RlIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJNaW5pbWFsTW9kZVwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJhcHBlYXJhbmNlXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcIm1pbmltYWxNb2RlXCI7fVxyXG4gICAgZ2V0IGhpZGVDaGFubmVsc0lEKCkge3JldHVybiBcImhpZGVDaGFubmVsc1wiO31cclxuICAgIGdldCBoaWRlQ2hhbm5lbHMoKSB7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuaGlkZUNoYW5uZWxzSUQpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlSGlkZUNoYW5uZWxzID0gdGhpcy5lbmFibGVIaWRlQ2hhbm5lbHMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVIaWRlQ2hhbm5lbHMgPSB0aGlzLmRpc2FibGVIaWRlQ2hhbm5lbHMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChcImJkLW1pbmltYWxcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUNoYW5uZWxzKSB0aGlzLmVuYWJsZUhpZGVDaGFubmVscygpO1xyXG4gICAgICAgIHRoaXMuaGlkZUNoYW5uZWxDYW5jZWwgPSB0aGlzLnJlZ2lzdGVyU2V0dGluZyh0aGlzLmhpZGVDaGFubmVsc0lELCB0aGlzLmVuYWJsZUhpZGVDaGFubmVscywgdGhpcy5kaXNhYmxlSGlkZUNoYW5uZWxzKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoXCJiZC1taW5pbWFsXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVDaGFubmVscykgdGhpcy5kaXNhYmxlSGlkZUNoYW5uZWxzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUNoYW5uZWxDYW5jZWwpIHRoaXMuaGlkZUNoYW5uZWxDYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVIaWRlQ2hhbm5lbHMoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVIaWRlQ2hhbm5lbHMoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKFwiYmQtbWluaW1hbC1jaGFuXCIpO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/minimalmode.js\n"); /***/ }), @@ -251,7 +251,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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class VoiceMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"VoiceMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"voiceMode\";\n }\n\n enabled() {\n $(\".scroller.guild-channels ul\").first().css(\"display\", \"none\");\n $(\".scroller.guild-channels header\").first().css(\"display\", \"none\");\n $(\".app.flex-vertical, .app-2rEoOp\").first().css(\"overflow\", \"hidden\");\n $(\".chat-3bRxxu\").first().css(\"visibility\", \"hidden\").css(\"min-width\", \"0px\");\n $(\".flex-vertical.channels-wrap\").first().css(\"flex-grow\", \"100000\");\n $(\".guild-header .btn.btn-hamburger\").first().css(\"visibility\", \"hidden\");\n }\n\n disabled() {\n $(\".scroller.guild-channels ul\").first().css(\"display\", \"\");\n $(\".scroller.guild-channels header\").first().css(\"display\", \"\");\n $(\".app.flex-vertical, .app-2rEoOp\").first().css(\"overflow\", \"\");\n $(\".chat-3bRxxu\").first().css(\"visibility\", \"\").css(\"min-width\", \"\");\n $(\".flex-vertical.channels-wrap\").first().css(\"flex-grow\", \"\");\n $(\".guild-header .btn.btn-hamburger\").first().css(\"visibility\", \"\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3ZvaWNlbW9kZS5qcz80M2E3Il0sIm5hbWVzIjpbIlZvaWNlTW9kZSIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCIkIiwiZmlyc3QiLCJjc3MiLCJkaXNhYmxlZCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBRWUsbUVBQUksTUFBTUEsU0FBTixTQUF3QkMsd0RBQXhCLENBQWdDO0FBQy9DLE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sV0FBUDtBQUFvQjs7QUFDaEMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUNyQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBRTlCQyxTQUFPLEdBQUc7QUFDTkMsS0FBQyxDQUFDLDZCQUFELENBQUQsQ0FBaUNDLEtBQWpDLEdBQXlDQyxHQUF6QyxDQUE2QyxTQUE3QyxFQUF3RCxNQUF4RDtBQUNBRixLQUFDLENBQUMsaUNBQUQsQ0FBRCxDQUFxQ0MsS0FBckMsR0FBNkNDLEdBQTdDLENBQWlELFNBQWpELEVBQTRELE1BQTVEO0FBQ0FGLEtBQUMsQ0FBQyxpQ0FBRCxDQUFELENBQXFDQyxLQUFyQyxHQUE2Q0MsR0FBN0MsQ0FBaUQsVUFBakQsRUFBNkQsUUFBN0Q7QUFDQUYsS0FBQyxDQUFDLGNBQUQsQ0FBRCxDQUFrQkMsS0FBbEIsR0FBMEJDLEdBQTFCLENBQThCLFlBQTlCLEVBQTRDLFFBQTVDLEVBQXNEQSxHQUF0RCxDQUEwRCxXQUExRCxFQUF1RSxLQUF2RTtBQUNBRixLQUFDLENBQUMsOEJBQUQsQ0FBRCxDQUFrQ0MsS0FBbEMsR0FBMENDLEdBQTFDLENBQThDLFdBQTlDLEVBQTJELFFBQTNEO0FBQ0FGLEtBQUMsQ0FBQyxrQ0FBRCxDQUFELENBQXNDQyxLQUF0QyxHQUE4Q0MsR0FBOUMsQ0FBa0QsWUFBbEQsRUFBZ0UsUUFBaEU7QUFDSDs7QUFFREMsVUFBUSxHQUFHO0FBQ1BILEtBQUMsQ0FBQyw2QkFBRCxDQUFELENBQWlDQyxLQUFqQyxHQUF5Q0MsR0FBekMsQ0FBNkMsU0FBN0MsRUFBd0QsRUFBeEQ7QUFDQUYsS0FBQyxDQUFDLGlDQUFELENBQUQsQ0FBcUNDLEtBQXJDLEdBQTZDQyxHQUE3QyxDQUFpRCxTQUFqRCxFQUE0RCxFQUE1RDtBQUNBRixLQUFDLENBQUMsaUNBQUQsQ0FBRCxDQUFxQ0MsS0FBckMsR0FBNkNDLEdBQTdDLENBQWlELFVBQWpELEVBQTZELEVBQTdEO0FBQ0FGLEtBQUMsQ0FBQyxjQUFELENBQUQsQ0FBa0JDLEtBQWxCLEdBQTBCQyxHQUExQixDQUE4QixZQUE5QixFQUE0QyxFQUE1QyxFQUFnREEsR0FBaEQsQ0FBb0QsV0FBcEQsRUFBaUUsRUFBakU7QUFDQUYsS0FBQyxDQUFDLDhCQUFELENBQUQsQ0FBa0NDLEtBQWxDLEdBQTBDQyxHQUExQyxDQUE4QyxXQUE5QyxFQUEyRCxFQUEzRDtBQUNBRixLQUFDLENBQUMsa0NBQUQsQ0FBRCxDQUFzQ0MsS0FBdEMsR0FBOENDLEdBQTlDLENBQWtELFlBQWxELEVBQWdFLEVBQWhFO0FBQ0g7O0FBckI4QyxDQUFwQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL3ZvaWNlbW9kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBWb2ljZU1vZGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIlZvaWNlTW9kZVwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJhcHBlYXJhbmNlXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcInZvaWNlTW9kZVwiO31cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgICQoXCIuc2Nyb2xsZXIuZ3VpbGQtY2hhbm5lbHMgdWxcIikuZmlyc3QoKS5jc3MoXCJkaXNwbGF5XCIsIFwibm9uZVwiKTtcclxuICAgICAgICAkKFwiLnNjcm9sbGVyLmd1aWxkLWNoYW5uZWxzIGhlYWRlclwiKS5maXJzdCgpLmNzcyhcImRpc3BsYXlcIiwgXCJub25lXCIpO1xyXG4gICAgICAgICQoXCIuYXBwLmZsZXgtdmVydGljYWwsIC5hcHAtMnJFb09wXCIpLmZpcnN0KCkuY3NzKFwib3ZlcmZsb3dcIiwgXCJoaWRkZW5cIik7XHJcbiAgICAgICAgJChcIi5jaGF0LTNiUnh4dVwiKS5maXJzdCgpLmNzcyhcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIikuY3NzKFwibWluLXdpZHRoXCIsIFwiMHB4XCIpO1xyXG4gICAgICAgICQoXCIuZmxleC12ZXJ0aWNhbC5jaGFubmVscy13cmFwXCIpLmZpcnN0KCkuY3NzKFwiZmxleC1ncm93XCIsIFwiMTAwMDAwXCIpO1xyXG4gICAgICAgICQoXCIuZ3VpbGQtaGVhZGVyIC5idG4uYnRuLWhhbWJ1cmdlclwiKS5maXJzdCgpLmNzcyhcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgJChcIi5zY3JvbGxlci5ndWlsZC1jaGFubmVscyB1bFwiKS5maXJzdCgpLmNzcyhcImRpc3BsYXlcIiwgXCJcIik7XHJcbiAgICAgICAgJChcIi5zY3JvbGxlci5ndWlsZC1jaGFubmVscyBoZWFkZXJcIikuZmlyc3QoKS5jc3MoXCJkaXNwbGF5XCIsIFwiXCIpO1xyXG4gICAgICAgICQoXCIuYXBwLmZsZXgtdmVydGljYWwsIC5hcHAtMnJFb09wXCIpLmZpcnN0KCkuY3NzKFwib3ZlcmZsb3dcIiwgXCJcIik7XHJcbiAgICAgICAgJChcIi5jaGF0LTNiUnh4dVwiKS5maXJzdCgpLmNzcyhcInZpc2liaWxpdHlcIiwgXCJcIikuY3NzKFwibWluLXdpZHRoXCIsIFwiXCIpO1xyXG4gICAgICAgICQoXCIuZmxleC12ZXJ0aWNhbC5jaGFubmVscy13cmFwXCIpLmZpcnN0KCkuY3NzKFwiZmxleC1ncm93XCIsIFwiXCIpO1xyXG4gICAgICAgICQoXCIuZ3VpbGQtaGVhZGVyIC5idG4uYnRuLWhhbWJ1cmdlclwiKS5maXJzdCgpLmNzcyhcInZpc2liaWxpdHlcIiwgXCJcIik7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/voicemode.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\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class VoiceMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"VoiceMode\";\n }\n\n get category() {\n return \"appearance\";\n }\n\n get id() {\n return \"voiceMode\";\n }\n\n enabled() {\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"visibility\", \"hidden\");\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"min-width\", \"0px\");\n document.querySelector(\".channels-Ie2l6A\").style.setProperty(\"flex-grow\", \"100000\");\n }\n\n disabled() {\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"visibility\", \"\");\n document.querySelector(\".chat-3bRxxu\").style.setProperty(\"min-width\", \"\");\n document.querySelector(\".channels-Ie2l6A\").style.setProperty(\"flex-grow\", \"\");\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL3ZvaWNlbW9kZS5qcz80M2E3Il0sIm5hbWVzIjpbIlZvaWNlTW9kZSIsIkJ1aWx0aW4iLCJuYW1lIiwiY2F0ZWdvcnkiLCJpZCIsImVuYWJsZWQiLCJkb2N1bWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJzdHlsZSIsInNldFByb3BlcnR5IiwiZGlzYWJsZWQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUVlLG1FQUFJLE1BQU1BLFNBQU4sU0FBd0JDLHdEQUF4QixDQUFnQztBQUMvQyxNQUFJQyxJQUFKLEdBQVc7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBQ2hDLE1BQUlDLFFBQUosR0FBZTtBQUFDLFdBQU8sWUFBUDtBQUFxQjs7QUFDckMsTUFBSUMsRUFBSixHQUFTO0FBQUMsV0FBTyxXQUFQO0FBQW9COztBQUU5QkMsU0FBTyxHQUFHO0FBQ05DLFlBQVEsQ0FBQ0MsYUFBVCxDQUF1QixjQUF2QixFQUF1Q0MsS0FBdkMsQ0FBNkNDLFdBQTdDLENBQXlELFlBQXpELEVBQXVFLFFBQXZFO0FBQ0FILFlBQVEsQ0FBQ0MsYUFBVCxDQUF1QixjQUF2QixFQUF1Q0MsS0FBdkMsQ0FBNkNDLFdBQTdDLENBQXlELFdBQXpELEVBQXNFLEtBQXRFO0FBQ0FILFlBQVEsQ0FBQ0MsYUFBVCxDQUF1QixrQkFBdkIsRUFBMkNDLEtBQTNDLENBQWlEQyxXQUFqRCxDQUE2RCxXQUE3RCxFQUEwRSxRQUExRTtBQUNIOztBQUVEQyxVQUFRLEdBQUc7QUFDUEosWUFBUSxDQUFDQyxhQUFULENBQXVCLGNBQXZCLEVBQXVDQyxLQUF2QyxDQUE2Q0MsV0FBN0MsQ0FBeUQsWUFBekQsRUFBdUUsRUFBdkU7QUFDQUgsWUFBUSxDQUFDQyxhQUFULENBQXVCLGNBQXZCLEVBQXVDQyxLQUF2QyxDQUE2Q0MsV0FBN0MsQ0FBeUQsV0FBekQsRUFBc0UsRUFBdEU7QUFDQUgsWUFBUSxDQUFDQyxhQUFULENBQXVCLGtCQUF2QixFQUEyQ0MsS0FBM0MsQ0FBaURDLFdBQWpELENBQTZELFdBQTdELEVBQTBFLEVBQTFFO0FBQ0g7O0FBZjhDLENBQXBDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvdm9pY2Vtb2RlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIFZvaWNlTW9kZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiVm9pY2VNb2RlXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImFwcGVhcmFuY2VcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwidm9pY2VNb2RlXCI7fVxyXG5cclxuICAgIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jaGF0LTNiUnh4dVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcInZpc2liaWxpdHlcIiwgXCJoaWRkZW5cIik7XHJcbiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcIi5jaGF0LTNiUnh4dVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcIm1pbi13aWR0aFwiLCBcIjBweFwiKTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNoYW5uZWxzLUllMmw2QVwiKS5zdHlsZS5zZXRQcm9wZXJ0eShcImZsZXgtZ3Jvd1wiLCBcIjEwMDAwMFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNoYXQtM2JSeHh1XCIpLnN0eWxlLnNldFByb3BlcnR5KFwidmlzaWJpbGl0eVwiLCBcIlwiKTtcclxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwiLmNoYXQtM2JSeHh1XCIpLnN0eWxlLnNldFByb3BlcnR5KFwibWluLXdpZHRoXCIsIFwiXCIpO1xyXG4gICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCIuY2hhbm5lbHMtSWUybDZBXCIpLnN0eWxlLnNldFByb3BlcnR5KFwiZmxleC1ncm93XCIsIFwiXCIpO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/voicemode.js\n"); /***/ }), @@ -335,7 +335,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony default export */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CoreWrapper; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _modules_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/core */ \"./src/modules/core.js\");\n/* harmony import */ var _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _modules_thememanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _modules_oldstorage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/oldstorage */ \"./src/modules/oldstorage.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _modules_datastore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./builtins/emotes */ \"./src/builtins/emotes.js\");\n/* harmony import */ var _modules_dommanager__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/dommanager */ \"./src/modules/dommanager.js\");\n\n\n\n\n\n\n\n\n\n\n // Perform some setup\n// proxyLocalStorage();\n\nconst loadingIcon = document.createElement(\"div\");\nloadingIcon.className = \"bd-loaderv2\";\nloadingIcon.title = \"BandagedBD is loading...\";\ndocument.body.appendChild(loadingIcon); // window.Core = Core;\n\nwindow.BdApi = _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; // window.settings = SettingsInfo;\n// window.settingsCookie = SettingsCookie;\n// window.pluginCookie = PluginCookie;\n// window.themeCookie = ThemeCookie;\n\nwindow.pluginModule = _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nwindow.themeModule = _modules_thememanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; // window.bdthemes = Themes;\n// window.bdplugins = Plugins;\n\nwindow.bdEmotes = _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Emotes;\nwindow.bemotes = _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__[\"default\"].blacklist;\nwindow.bdPluginStorage = _modules_oldstorage__WEBPACK_IMPORTED_MODULE_5__[\"bdPluginStorage\"];\nwindow.settingsModule = _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nwindow.DataStore = _modules_datastore__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\nwindow.DomManager = _modules_dommanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\nwindow.BDEvents = _modules_emitter__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\nwindow.bdConfig = data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"];\nclass CoreWrapper {\n constructor(config) {\n _modules_core__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setConfig(config);\n }\n\n init() {\n _modules_core__WEBPACK_IMPORTED_MODULE_1__[\"default\"].init();\n }\n\n}\n\nfunction patchModuleLoad() {\n const namespace = \"betterdiscord\";\n const prefix = `${namespace}/`;\n\n const Module = __webpack_require__(/*! module */ \"module\");\n\n const load = Module._load; // const resolveFilename = Module._resolveFilename;\n\n Module._load = function (request) {\n if (request === namespace || request.startsWith(prefix)) {\n const requested = request.substr(prefix.length);\n if (requested == \"api\") return _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n }\n\n return load.apply(this, arguments);\n }; // Module._resolveFilename = function (request, parent, isMain) {\n // if (request === \"betterdiscord\" || request.startsWith(\"betterdiscord/\")) {\n // const contentPath = PluginManager.getPluginPathByModule(parent);\n // if (contentPath) return request;\n // }\n // return resolveFilename.apply(this, arguments);\n // };\n\n\n return function () {\n Module._load = load;\n };\n}\n\npatchModuleLoad(); // export function getPluginByModule(module) {\n// return this.localContent.find(plugin => module.filename === plugin.contentPath || module.filename.startsWith(plugin.contentPath + path.sep));\n// }\n// export function getPluginPathByModule(module) {\n// return Object.keys(this.pluginApiInstances).find(contentPath => module.filename === contentPath || module.filename.startsWith(contentPath + path.sep));\n// }\n// var settingsPanel, emoteModule, quickEmoteMenu, voiceMode,, dMode, publicServersModule;\n// var bdConfig = null;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2luZGV4LmpzP2I2MzUiXSwibmFtZXMiOlsibG9hZGluZ0ljb24iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ0aXRsZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIndpbmRvdyIsIkJkQXBpIiwicGx1Z2luTW9kdWxlIiwiUGx1Z2luTWFuYWdlciIsInRoZW1lTW9kdWxlIiwiVGhlbWVNYW5hZ2VyIiwiYmRFbW90ZXMiLCJFbW90ZU1vZHVsZSIsIkVtb3RlcyIsImJlbW90ZXMiLCJibGFja2xpc3QiLCJiZFBsdWdpblN0b3JhZ2UiLCJzZXR0aW5nc01vZHVsZSIsIlNldHRpbmdzIiwiRGF0YVN0b3JlIiwiRG9tTWFuYWdlciIsIkJERXZlbnRzIiwiRXZlbnRzIiwiYmRDb25maWciLCJDb25maWciLCJDb3JlV3JhcHBlciIsImNvbnN0cnVjdG9yIiwiY29uZmlnIiwiQ29yZSIsInNldENvbmZpZyIsImluaXQiLCJwYXRjaE1vZHVsZUxvYWQiLCJuYW1lc3BhY2UiLCJwcmVmaXgiLCJNb2R1bGUiLCJyZXF1aXJlIiwibG9hZCIsIl9sb2FkIiwicmVxdWVzdCIsInN0YXJ0c1dpdGgiLCJyZXF1ZXN0ZWQiLCJzdWJzdHIiLCJsZW5ndGgiLCJhcHBseSIsImFyZ3VtZW50cyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUdBO0FBQ0E7O0FBQ0EsTUFBTUEsV0FBVyxHQUFHQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBcEI7QUFDQUYsV0FBVyxDQUFDRyxTQUFaLEdBQXdCLGFBQXhCO0FBQ0FILFdBQVcsQ0FBQ0ksS0FBWixHQUFvQiwwQkFBcEI7QUFDQUgsUUFBUSxDQUFDSSxJQUFULENBQWNDLFdBQWQsQ0FBMEJOLFdBQTFCLEUsQ0FFQTs7QUFDQU8sTUFBTSxDQUFDQyxLQUFQLEdBQWVBLDBEQUFmLEMsQ0FDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQUQsTUFBTSxDQUFDRSxZQUFQLEdBQXNCQyw4REFBdEI7QUFDQUgsTUFBTSxDQUFDSSxXQUFQLEdBQXFCQyw2REFBckIsQyxDQUNBO0FBQ0E7O0FBQ0FMLE1BQU0sQ0FBQ00sUUFBUCxHQUFrQkMsd0RBQVcsQ0FBQ0MsTUFBOUI7QUFDQVIsTUFBTSxDQUFDUyxPQUFQLEdBQWlCRix3REFBVyxDQUFDRyxTQUE3QjtBQUNBVixNQUFNLENBQUNXLGVBQVAsR0FBeUJBLG1FQUF6QjtBQUNBWCxNQUFNLENBQUNZLGNBQVAsR0FBd0JDLGdFQUF4QjtBQUNBYixNQUFNLENBQUNjLFNBQVAsR0FBbUJBLDBEQUFuQjtBQUdBZCxNQUFNLENBQUNlLFVBQVAsR0FBb0JBLDREQUFwQjtBQUdBZixNQUFNLENBQUNnQixRQUFQLEdBQWtCQyx3REFBbEI7QUFDQWpCLE1BQU0sQ0FBQ2tCLFFBQVAsR0FBa0JDLDJDQUFsQjtBQUVlLE1BQU1DLFdBQU4sQ0FBa0I7QUFDN0JDLGFBQVcsQ0FBQ0MsTUFBRCxFQUFTO0FBQ2hCQyx5REFBSSxDQUFDQyxTQUFMLENBQWVGLE1BQWY7QUFDSDs7QUFFREcsTUFBSSxHQUFHO0FBQ0hGLHlEQUFJLENBQUNFLElBQUw7QUFDSDs7QUFQNEI7O0FBVWpDLFNBQVNDLGVBQVQsR0FBMkI7QUFDdkIsUUFBTUMsU0FBUyxHQUFHLGVBQWxCO0FBQ0EsUUFBTUMsTUFBTSxHQUFJLEdBQUVELFNBQVUsR0FBNUI7O0FBQ0EsUUFBTUUsTUFBTSxHQUFHQyxtQkFBTyxDQUFDLHNCQUFELENBQXRCOztBQUNBLFFBQU1DLElBQUksR0FBR0YsTUFBTSxDQUFDRyxLQUFwQixDQUp1QixDQUt2Qjs7QUFFQUgsUUFBTSxDQUFDRyxLQUFQLEdBQWUsVUFBVUMsT0FBVixFQUFtQjtBQUM5QixRQUFJQSxPQUFPLEtBQUtOLFNBQVosSUFBeUJNLE9BQU8sQ0FBQ0MsVUFBUixDQUFtQk4sTUFBbkIsQ0FBN0IsRUFBeUQ7QUFDckQsWUFBTU8sU0FBUyxHQUFHRixPQUFPLENBQUNHLE1BQVIsQ0FBZVIsTUFBTSxDQUFDUyxNQUF0QixDQUFsQjtBQUNBLFVBQUlGLFNBQVMsSUFBSSxLQUFqQixFQUF3QixPQUFPbEMsMERBQVA7QUFDM0I7O0FBRUQsV0FBTzhCLElBQUksQ0FBQ08sS0FBTCxDQUFXLElBQVgsRUFBaUJDLFNBQWpCLENBQVA7QUFDSCxHQVBELENBUHVCLENBZ0J2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7O0FBRUEsU0FBTyxZQUFXO0FBQ2RWLFVBQU0sQ0FBQ0csS0FBUCxHQUFlRCxJQUFmO0FBQ0gsR0FGRDtBQUdIOztBQUVETCxlQUFlLEcsQ0FFZjtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBDb3JlIGZyb20gXCIuL21vZHVsZXMvY29yZVwiO1xyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5hcGlcIjtcclxuaW1wb3J0IFBsdWdpbk1hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5tYW5hZ2VyXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IHtiZFBsdWdpblN0b3JhZ2V9IGZyb20gXCIuL21vZHVsZXMvb2xkc3RvcmFnZVwiO1xyXG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL21vZHVsZXMvZW1pdHRlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9tb2R1bGVzL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vYnVpbHRpbnMvZW1vdGVzXCI7XHJcbmltcG9ydCBEb21NYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvZG9tbWFuYWdlclwiO1xyXG5cclxuLy8gUGVyZm9ybSBzb21lIHNldHVwXHJcbi8vIHByb3h5TG9jYWxTdG9yYWdlKCk7XHJcbmNvbnN0IGxvYWRpbmdJY29uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxubG9hZGluZ0ljb24uY2xhc3NOYW1lID0gXCJiZC1sb2FkZXJ2MlwiO1xyXG5sb2FkaW5nSWNvbi50aXRsZSA9IFwiQmFuZGFnZWRCRCBpcyBsb2FkaW5nLi4uXCI7XHJcbmRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobG9hZGluZ0ljb24pO1xyXG5cclxuLy8gd2luZG93LkNvcmUgPSBDb3JlO1xyXG53aW5kb3cuQmRBcGkgPSBCZEFwaTtcclxuLy8gd2luZG93LnNldHRpbmdzID0gU2V0dGluZ3NJbmZvO1xyXG4vLyB3aW5kb3cuc2V0dGluZ3NDb29raWUgPSBTZXR0aW5nc0Nvb2tpZTtcclxuLy8gd2luZG93LnBsdWdpbkNvb2tpZSA9IFBsdWdpbkNvb2tpZTtcclxuLy8gd2luZG93LnRoZW1lQ29va2llID0gVGhlbWVDb29raWU7XHJcbndpbmRvdy5wbHVnaW5Nb2R1bGUgPSBQbHVnaW5NYW5hZ2VyO1xyXG53aW5kb3cudGhlbWVNb2R1bGUgPSBUaGVtZU1hbmFnZXI7XHJcbi8vIHdpbmRvdy5iZHRoZW1lcyA9IFRoZW1lcztcclxuLy8gd2luZG93LmJkcGx1Z2lucyA9IFBsdWdpbnM7XHJcbndpbmRvdy5iZEVtb3RlcyA9IEVtb3RlTW9kdWxlLkVtb3Rlcztcclxud2luZG93LmJlbW90ZXMgPSBFbW90ZU1vZHVsZS5ibGFja2xpc3Q7XHJcbndpbmRvdy5iZFBsdWdpblN0b3JhZ2UgPSBiZFBsdWdpblN0b3JhZ2U7XHJcbndpbmRvdy5zZXR0aW5nc01vZHVsZSA9IFNldHRpbmdzO1xyXG53aW5kb3cuRGF0YVN0b3JlID0gRGF0YVN0b3JlO1xyXG5cclxuXHJcbndpbmRvdy5Eb21NYW5hZ2VyID0gRG9tTWFuYWdlcjtcclxuXHJcblxyXG53aW5kb3cuQkRFdmVudHMgPSBFdmVudHM7XHJcbndpbmRvdy5iZENvbmZpZyA9IENvbmZpZztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xyXG4gICAgICAgIENvcmUuc2V0Q29uZmlnKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBDb3JlLmluaXQoKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcGF0Y2hNb2R1bGVMb2FkKCkge1xyXG4gICAgY29uc3QgbmFtZXNwYWNlID0gXCJiZXR0ZXJkaXNjb3JkXCI7XHJcbiAgICBjb25zdCBwcmVmaXggPSBgJHtuYW1lc3BhY2V9L2A7XHJcbiAgICBjb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpO1xyXG4gICAgY29uc3QgbG9hZCA9IE1vZHVsZS5fbG9hZDtcclxuICAgIC8vIGNvbnN0IHJlc29sdmVGaWxlbmFtZSA9IE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lO1xyXG5cclxuICAgIE1vZHVsZS5fbG9hZCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XHJcbiAgICAgICAgaWYgKHJlcXVlc3QgPT09IG5hbWVzcGFjZSB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ZWQgPSByZXF1ZXN0LnN1YnN0cihwcmVmaXgubGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlcXVlc3RlZCA9PSBcImFwaVwiKSByZXR1cm4gQmRBcGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbG9hZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZSA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBwYXJlbnQsIGlzTWFpbikge1xyXG4gICAgLy8gICAgIGlmIChyZXF1ZXN0ID09PSBcImJldHRlcmRpc2NvcmRcIiB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgoXCJiZXR0ZXJkaXNjb3JkL1wiKSkge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBjb250ZW50UGF0aCA9IFBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luUGF0aEJ5TW9kdWxlKHBhcmVudCk7XHJcbiAgICAvLyAgICAgICAgIGlmIChjb250ZW50UGF0aCkgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICByZXR1cm4gcmVzb2x2ZUZpbGVuYW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAvLyB9O1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICBNb2R1bGUuX2xvYWQgPSBsb2FkO1xyXG4gICAgfTtcclxufVxyXG5cclxucGF0Y2hNb2R1bGVMb2FkKCk7XHJcblxyXG4vLyBleHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luQnlNb2R1bGUobW9kdWxlKSB7XHJcbi8vICAgICByZXR1cm4gdGhpcy5sb2NhbENvbnRlbnQuZmluZChwbHVnaW4gPT4gbW9kdWxlLmZpbGVuYW1lID09PSBwbHVnaW4uY29udGVudFBhdGggfHwgbW9kdWxlLmZpbGVuYW1lLnN0YXJ0c1dpdGgocGx1Z2luLmNvbnRlbnRQYXRoICsgcGF0aC5zZXApKTtcclxuLy8gfVxyXG5cclxuLy8gZXhwb3J0IGZ1bmN0aW9uIGdldFBsdWdpblBhdGhCeU1vZHVsZShtb2R1bGUpIHtcclxuLy8gICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnBsdWdpbkFwaUluc3RhbmNlcykuZmluZChjb250ZW50UGF0aCA9PiBtb2R1bGUuZmlsZW5hbWUgPT09IGNvbnRlbnRQYXRoIHx8IG1vZHVsZS5maWxlbmFtZS5zdGFydHNXaXRoKGNvbnRlbnRQYXRoICsgcGF0aC5zZXApKTtcclxuLy8gfVxyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIGVtb3RlTW9kdWxlLCBxdWlja0Vtb3RlTWVudSwgdm9pY2VNb2RlLCwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGU7XHJcbi8vIHZhciBiZENvbmZpZyA9IG51bGw7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/index.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return CoreWrapper; });\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var _modules_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./modules/core */ \"./src/modules/core.js\");\n/* harmony import */ var _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./modules/pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony import */ var _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./modules/pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _modules_thememanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./modules/thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _modules_oldstorage__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./modules/oldstorage */ \"./src/modules/oldstorage.js\");\n/* harmony import */ var _modules_emitter__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./modules/emitter */ \"./src/modules/emitter.js\");\n/* harmony import */ var _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./modules/settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var _modules_datastore__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./modules/datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./builtins/emotes */ \"./src/builtins/emotes.js\");\n/* harmony import */ var _modules_dommanager__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./modules/dommanager */ \"./src/modules/dommanager.js\");\n/* harmony import */ var _modules_utilities__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./modules/utilities */ \"./src/modules/utilities.js\");\n\n\n\n\n\n\n\n\n\n\n\n // Perform some setup\n// proxyLocalStorage();\n\nconst loadingIcon = document.createElement(\"div\");\nloadingIcon.className = \"bd-loaderv2\";\nloadingIcon.title = \"BandagedBD is loading...\";\ndocument.body.appendChild(loadingIcon); // window.Core = Core;\n\nwindow.BdApi = _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; // window.settings = SettingsInfo;\n// window.settingsCookie = SettingsCookie;\n// window.pluginCookie = PluginCookie;\n// window.themeCookie = ThemeCookie;\n\nwindow.pluginModule = _modules_pluginmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"];\nwindow.themeModule = _modules_thememanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; // window.bdthemes = Themes;\n// window.bdplugins = Plugins;\n\nwindow.bdEmotes = _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__[\"default\"].Emotes;\nwindow.bemotes = _builtins_emotes__WEBPACK_IMPORTED_MODULE_9__[\"default\"].blacklist;\nwindow.bdPluginStorage = _modules_oldstorage__WEBPACK_IMPORTED_MODULE_5__[\"bdPluginStorage\"];\nwindow.settingsModule = _modules_settingsmanager__WEBPACK_IMPORTED_MODULE_7__[\"default\"];\nwindow.DataStore = _modules_datastore__WEBPACK_IMPORTED_MODULE_8__[\"default\"];\nwindow.DomManager = _modules_dommanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"];\nwindow.utils = _modules_utilities__WEBPACK_IMPORTED_MODULE_11__[\"default\"];\nwindow.BDEvents = _modules_emitter__WEBPACK_IMPORTED_MODULE_6__[\"default\"];\nwindow.bdConfig = data__WEBPACK_IMPORTED_MODULE_0__[\"Config\"];\nclass CoreWrapper {\n constructor(config) {\n _modules_core__WEBPACK_IMPORTED_MODULE_1__[\"default\"].setConfig(config);\n }\n\n init() {\n _modules_core__WEBPACK_IMPORTED_MODULE_1__[\"default\"].init();\n }\n\n}\n\nfunction patchModuleLoad() {\n const namespace = \"betterdiscord\";\n const prefix = `${namespace}/`;\n\n const Module = __webpack_require__(/*! module */ \"module\");\n\n const load = Module._load; // const resolveFilename = Module._resolveFilename;\n\n Module._load = function (request) {\n if (request === namespace || request.startsWith(prefix)) {\n const requested = request.substr(prefix.length);\n if (requested == \"api\") return _modules_pluginapi__WEBPACK_IMPORTED_MODULE_2__[\"default\"];\n }\n\n return load.apply(this, arguments);\n }; // Module._resolveFilename = function (request, parent, isMain) {\n // if (request === \"betterdiscord\" || request.startsWith(\"betterdiscord/\")) {\n // const contentPath = PluginManager.getPluginPathByModule(parent);\n // if (contentPath) return request;\n // }\n // return resolveFilename.apply(this, arguments);\n // };\n\n\n return function () {\n Module._load = load;\n };\n}\n\npatchModuleLoad(); // export function getPluginByModule(module) {\n// return this.localContent.find(plugin => module.filename === plugin.contentPath || module.filename.startsWith(plugin.contentPath + path.sep));\n// }\n// export function getPluginPathByModule(module) {\n// return Object.keys(this.pluginApiInstances).find(contentPath => module.filename === contentPath || module.filename.startsWith(contentPath + path.sep));\n// }\n// var settingsPanel, emoteModule, quickEmoteMenu, voiceMode,, dMode, publicServersModule;\n// var bdConfig = null;//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2luZGV4LmpzP2I2MzUiXSwibmFtZXMiOlsibG9hZGluZ0ljb24iLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJ0aXRsZSIsImJvZHkiLCJhcHBlbmRDaGlsZCIsIndpbmRvdyIsIkJkQXBpIiwicGx1Z2luTW9kdWxlIiwiUGx1Z2luTWFuYWdlciIsInRoZW1lTW9kdWxlIiwiVGhlbWVNYW5hZ2VyIiwiYmRFbW90ZXMiLCJFbW90ZU1vZHVsZSIsIkVtb3RlcyIsImJlbW90ZXMiLCJibGFja2xpc3QiLCJiZFBsdWdpblN0b3JhZ2UiLCJzZXR0aW5nc01vZHVsZSIsIlNldHRpbmdzIiwiRGF0YVN0b3JlIiwiRG9tTWFuYWdlciIsInV0aWxzIiwiVXRpbGl0aWVzIiwiQkRFdmVudHMiLCJFdmVudHMiLCJiZENvbmZpZyIsIkNvbmZpZyIsIkNvcmVXcmFwcGVyIiwiY29uc3RydWN0b3IiLCJjb25maWciLCJDb3JlIiwic2V0Q29uZmlnIiwiaW5pdCIsInBhdGNoTW9kdWxlTG9hZCIsIm5hbWVzcGFjZSIsInByZWZpeCIsIk1vZHVsZSIsInJlcXVpcmUiLCJsb2FkIiwiX2xvYWQiLCJyZXF1ZXN0Iiwic3RhcnRzV2l0aCIsInJlcXVlc3RlZCIsInN1YnN0ciIsImxlbmd0aCIsImFwcGx5IiwiYXJndW1lbnRzIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtDQUdBO0FBQ0E7O0FBQ0EsTUFBTUEsV0FBVyxHQUFHQyxRQUFRLENBQUNDLGFBQVQsQ0FBdUIsS0FBdkIsQ0FBcEI7QUFDQUYsV0FBVyxDQUFDRyxTQUFaLEdBQXdCLGFBQXhCO0FBQ0FILFdBQVcsQ0FBQ0ksS0FBWixHQUFvQiwwQkFBcEI7QUFDQUgsUUFBUSxDQUFDSSxJQUFULENBQWNDLFdBQWQsQ0FBMEJOLFdBQTFCLEUsQ0FFQTs7QUFDQU8sTUFBTSxDQUFDQyxLQUFQLEdBQWVBLDBEQUFmLEMsQ0FDQTtBQUNBO0FBQ0E7QUFDQTs7QUFDQUQsTUFBTSxDQUFDRSxZQUFQLEdBQXNCQyw4REFBdEI7QUFDQUgsTUFBTSxDQUFDSSxXQUFQLEdBQXFCQyw2REFBckIsQyxDQUNBO0FBQ0E7O0FBQ0FMLE1BQU0sQ0FBQ00sUUFBUCxHQUFrQkMsd0RBQVcsQ0FBQ0MsTUFBOUI7QUFDQVIsTUFBTSxDQUFDUyxPQUFQLEdBQWlCRix3REFBVyxDQUFDRyxTQUE3QjtBQUNBVixNQUFNLENBQUNXLGVBQVAsR0FBeUJBLG1FQUF6QjtBQUNBWCxNQUFNLENBQUNZLGNBQVAsR0FBd0JDLGdFQUF4QjtBQUNBYixNQUFNLENBQUNjLFNBQVAsR0FBbUJBLDBEQUFuQjtBQUdBZCxNQUFNLENBQUNlLFVBQVAsR0FBb0JBLDREQUFwQjtBQUNBZixNQUFNLENBQUNnQixLQUFQLEdBQWVDLDJEQUFmO0FBRUFqQixNQUFNLENBQUNrQixRQUFQLEdBQWtCQyx3REFBbEI7QUFDQW5CLE1BQU0sQ0FBQ29CLFFBQVAsR0FBa0JDLDJDQUFsQjtBQUVlLE1BQU1DLFdBQU4sQ0FBa0I7QUFDN0JDLGFBQVcsQ0FBQ0MsTUFBRCxFQUFTO0FBQ2hCQyx5REFBSSxDQUFDQyxTQUFMLENBQWVGLE1BQWY7QUFDSDs7QUFFREcsTUFBSSxHQUFHO0FBQ0hGLHlEQUFJLENBQUNFLElBQUw7QUFDSDs7QUFQNEI7O0FBVWpDLFNBQVNDLGVBQVQsR0FBMkI7QUFDdkIsUUFBTUMsU0FBUyxHQUFHLGVBQWxCO0FBQ0EsUUFBTUMsTUFBTSxHQUFJLEdBQUVELFNBQVUsR0FBNUI7O0FBQ0EsUUFBTUUsTUFBTSxHQUFHQyxtQkFBTyxDQUFDLHNCQUFELENBQXRCOztBQUNBLFFBQU1DLElBQUksR0FBR0YsTUFBTSxDQUFDRyxLQUFwQixDQUp1QixDQUt2Qjs7QUFFQUgsUUFBTSxDQUFDRyxLQUFQLEdBQWUsVUFBVUMsT0FBVixFQUFtQjtBQUM5QixRQUFJQSxPQUFPLEtBQUtOLFNBQVosSUFBeUJNLE9BQU8sQ0FBQ0MsVUFBUixDQUFtQk4sTUFBbkIsQ0FBN0IsRUFBeUQ7QUFDckQsWUFBTU8sU0FBUyxHQUFHRixPQUFPLENBQUNHLE1BQVIsQ0FBZVIsTUFBTSxDQUFDUyxNQUF0QixDQUFsQjtBQUNBLFVBQUlGLFNBQVMsSUFBSSxLQUFqQixFQUF3QixPQUFPcEMsMERBQVA7QUFDM0I7O0FBRUQsV0FBT2dDLElBQUksQ0FBQ08sS0FBTCxDQUFXLElBQVgsRUFBaUJDLFNBQWpCLENBQVA7QUFDSCxHQVBELENBUHVCLENBZ0J2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTs7O0FBRUEsU0FBTyxZQUFXO0FBQ2RWLFVBQU0sQ0FBQ0csS0FBUCxHQUFlRCxJQUFmO0FBQ0gsR0FGRDtBQUdIOztBQUVETCxlQUFlLEcsQ0FFZjtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBIiwiZmlsZSI6Ii4vc3JjL2luZGV4LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCBDb3JlIGZyb20gXCIuL21vZHVsZXMvY29yZVwiO1xyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5hcGlcIjtcclxuaW1wb3J0IFBsdWdpbk1hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy9wbHVnaW5tYW5hZ2VyXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vbW9kdWxlcy90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IHtiZFBsdWdpblN0b3JhZ2V9IGZyb20gXCIuL21vZHVsZXMvb2xkc3RvcmFnZVwiO1xyXG5pbXBvcnQgRXZlbnRzIGZyb20gXCIuL21vZHVsZXMvZW1pdHRlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vbW9kdWxlcy9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IERhdGFTdG9yZSBmcm9tIFwiLi9tb2R1bGVzL2RhdGFzdG9yZVwiO1xyXG5pbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vYnVpbHRpbnMvZW1vdGVzXCI7XHJcbmltcG9ydCBEb21NYW5hZ2VyIGZyb20gXCIuL21vZHVsZXMvZG9tbWFuYWdlclwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL21vZHVsZXMvdXRpbGl0aWVzXCI7XHJcblxyXG4vLyBQZXJmb3JtIHNvbWUgc2V0dXBcclxuLy8gcHJveHlMb2NhbFN0b3JhZ2UoKTtcclxuY29uc3QgbG9hZGluZ0ljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xyXG5sb2FkaW5nSWNvbi5jbGFzc05hbWUgPSBcImJkLWxvYWRlcnYyXCI7XHJcbmxvYWRpbmdJY29uLnRpdGxlID0gXCJCYW5kYWdlZEJEIGlzIGxvYWRpbmcuLi5cIjtcclxuZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsb2FkaW5nSWNvbik7XHJcblxyXG4vLyB3aW5kb3cuQ29yZSA9IENvcmU7XHJcbndpbmRvdy5CZEFwaSA9IEJkQXBpO1xyXG4vLyB3aW5kb3cuc2V0dGluZ3MgPSBTZXR0aW5nc0luZm87XHJcbi8vIHdpbmRvdy5zZXR0aW5nc0Nvb2tpZSA9IFNldHRpbmdzQ29va2llO1xyXG4vLyB3aW5kb3cucGx1Z2luQ29va2llID0gUGx1Z2luQ29va2llO1xyXG4vLyB3aW5kb3cudGhlbWVDb29raWUgPSBUaGVtZUNvb2tpZTtcclxud2luZG93LnBsdWdpbk1vZHVsZSA9IFBsdWdpbk1hbmFnZXI7XHJcbndpbmRvdy50aGVtZU1vZHVsZSA9IFRoZW1lTWFuYWdlcjtcclxuLy8gd2luZG93LmJkdGhlbWVzID0gVGhlbWVzO1xyXG4vLyB3aW5kb3cuYmRwbHVnaW5zID0gUGx1Z2lucztcclxud2luZG93LmJkRW1vdGVzID0gRW1vdGVNb2R1bGUuRW1vdGVzO1xyXG53aW5kb3cuYmVtb3RlcyA9IEVtb3RlTW9kdWxlLmJsYWNrbGlzdDtcclxud2luZG93LmJkUGx1Z2luU3RvcmFnZSA9IGJkUGx1Z2luU3RvcmFnZTtcclxud2luZG93LnNldHRpbmdzTW9kdWxlID0gU2V0dGluZ3M7XHJcbndpbmRvdy5EYXRhU3RvcmUgPSBEYXRhU3RvcmU7XHJcblxyXG5cclxud2luZG93LkRvbU1hbmFnZXIgPSBEb21NYW5hZ2VyO1xyXG53aW5kb3cudXRpbHMgPSBVdGlsaXRpZXM7XHJcblxyXG53aW5kb3cuQkRFdmVudHMgPSBFdmVudHM7XHJcbndpbmRvdy5iZENvbmZpZyA9IENvbmZpZztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvcmVXcmFwcGVyIHtcclxuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xyXG4gICAgICAgIENvcmUuc2V0Q29uZmlnKGNvbmZpZyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdCgpIHtcclxuICAgICAgICBDb3JlLmluaXQoKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcGF0Y2hNb2R1bGVMb2FkKCkge1xyXG4gICAgY29uc3QgbmFtZXNwYWNlID0gXCJiZXR0ZXJkaXNjb3JkXCI7XHJcbiAgICBjb25zdCBwcmVmaXggPSBgJHtuYW1lc3BhY2V9L2A7XHJcbiAgICBjb25zdCBNb2R1bGUgPSByZXF1aXJlKFwibW9kdWxlXCIpO1xyXG4gICAgY29uc3QgbG9hZCA9IE1vZHVsZS5fbG9hZDtcclxuICAgIC8vIGNvbnN0IHJlc29sdmVGaWxlbmFtZSA9IE1vZHVsZS5fcmVzb2x2ZUZpbGVuYW1lO1xyXG5cclxuICAgIE1vZHVsZS5fbG9hZCA9IGZ1bmN0aW9uIChyZXF1ZXN0KSB7XHJcbiAgICAgICAgaWYgKHJlcXVlc3QgPT09IG5hbWVzcGFjZSB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgocHJlZml4KSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0ZWQgPSByZXF1ZXN0LnN1YnN0cihwcmVmaXgubGVuZ3RoKTtcclxuICAgICAgICAgICAgaWYgKHJlcXVlc3RlZCA9PSBcImFwaVwiKSByZXR1cm4gQmRBcGk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbG9hZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvLyBNb2R1bGUuX3Jlc29sdmVGaWxlbmFtZSA9IGZ1bmN0aW9uIChyZXF1ZXN0LCBwYXJlbnQsIGlzTWFpbikge1xyXG4gICAgLy8gICAgIGlmIChyZXF1ZXN0ID09PSBcImJldHRlcmRpc2NvcmRcIiB8fCByZXF1ZXN0LnN0YXJ0c1dpdGgoXCJiZXR0ZXJkaXNjb3JkL1wiKSkge1xyXG4gICAgLy8gICAgICAgICBjb25zdCBjb250ZW50UGF0aCA9IFBsdWdpbk1hbmFnZXIuZ2V0UGx1Z2luUGF0aEJ5TW9kdWxlKHBhcmVudCk7XHJcbiAgICAvLyAgICAgICAgIGlmIChjb250ZW50UGF0aCkgcmV0dXJuIHJlcXVlc3Q7XHJcbiAgICAvLyAgICAgfVxyXG5cclxuICAgIC8vICAgICByZXR1cm4gcmVzb2x2ZUZpbGVuYW1lLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAvLyB9O1xyXG5cclxuICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICBNb2R1bGUuX2xvYWQgPSBsb2FkO1xyXG4gICAgfTtcclxufVxyXG5cclxucGF0Y2hNb2R1bGVMb2FkKCk7XHJcblxyXG4vLyBleHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luQnlNb2R1bGUobW9kdWxlKSB7XHJcbi8vICAgICByZXR1cm4gdGhpcy5sb2NhbENvbnRlbnQuZmluZChwbHVnaW4gPT4gbW9kdWxlLmZpbGVuYW1lID09PSBwbHVnaW4uY29udGVudFBhdGggfHwgbW9kdWxlLmZpbGVuYW1lLnN0YXJ0c1dpdGgocGx1Z2luLmNvbnRlbnRQYXRoICsgcGF0aC5zZXApKTtcclxuLy8gfVxyXG5cclxuLy8gZXhwb3J0IGZ1bmN0aW9uIGdldFBsdWdpblBhdGhCeU1vZHVsZShtb2R1bGUpIHtcclxuLy8gICAgIHJldHVybiBPYmplY3Qua2V5cyh0aGlzLnBsdWdpbkFwaUluc3RhbmNlcykuZmluZChjb250ZW50UGF0aCA9PiBtb2R1bGUuZmlsZW5hbWUgPT09IGNvbnRlbnRQYXRoIHx8IG1vZHVsZS5maWxlbmFtZS5zdGFydHNXaXRoKGNvbnRlbnRQYXRoICsgcGF0aC5zZXApKTtcclxuLy8gfVxyXG5cclxuLy8gdmFyIHNldHRpbmdzUGFuZWwsIGVtb3RlTW9kdWxlLCBxdWlja0Vtb3RlTWVudSwgdm9pY2VNb2RlLCwgZE1vZGUsIHB1YmxpY1NlcnZlcnNNb2R1bGU7XHJcbi8vIHZhciBiZENvbmZpZyA9IG51bGw7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/index.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 = /^\\\\@/;\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 _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].log(this.name, \"Starting to watch content.\");\n this.watcher = fs.watch(this.contentFolder, {\n persistent: false\n }, async (eventType, filename) => {\n if (!eventType || !filename || !filename.endsWith(this.extension)) return;\n await new Promise(r => setTimeout(r, 50));\n\n try {\n fs.statSync(path.resolve(this.contentFolder, filename));\n } catch (err) {\n if (err.code !== \"ENOENT\") return;\n delete this.timeCache[filename];\n this.unloadContent(filename, true);\n }\n\n if (!fs.statSync(path.resolve(this.contentFolder, filename)).isFile()) return;\n const stats = fs.statSync(path.resolve(this.contentFolder, filename));\n if (!stats || !stats.mtime || !stats.mtime.getTime()) return;\n if (typeof stats.mtime.getTime() !== \"number\") return;\n if (this.timeCache[filename] == stats.mtime.getTime()) return;\n this.timeCache[filename] = stats.mtime.getTime();\n if (eventType == \"rename\") this.loadContent(filename, true);\n if (eventType == \"change\") this.reloadContent(filename, true);\n });\n }\n\n unwatchContent() {\n if (!this.watcher) return _logger__WEBPACK_IMPORTED_MODULE_1__[\"default\"].error(this.name, \"Was not watching content.\");\n this.watcher.close();\n delete this.watcher;\n _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].log(this.name, \"No longer watching content.\");\n }\n\n extractMeta(content) {\n const firstLine = content.split(\"\\n\")[0];\n const hasOldMeta = firstLine.includes(\"//META\");\n if (hasOldMeta) return this.parseOldMeta(content);\n const hasNewMeta = firstLine.includes(\"/**\");\n if (hasNewMeta) return this.parseNewMeta(content);\n throw new _structs_metaerror__WEBPACK_IMPORTED_MODULE_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 = _utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].stripBOM(content);\n const meta = self.extractMeta(content);\n meta.id = meta.name;\n meta.filename = path.basename(filename);\n content = self.getContentModification(module, content, meta);\n\n module._compile(content, filename);\n };\n } // Subclasses should use the return (if not ContentError) and push to this.contentList\n\n\n loadContent(filename, shouldToast = 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/OTA0MyJdLCJuYW1lcyI6WyJwYXRoIiwicmVxdWlyZSIsImZzIiwiTW9kdWxlIiwiZ2xvYmFsUGF0aHMiLCJwdXNoIiwicmVzb2x2ZSIsInJlbW90ZSIsImFwcCIsImdldEFwcFBhdGgiLCJzcGxpdFJlZ2V4IiwiZXNjYXBlZEF0UmVnZXgiLCJDb250ZW50TWFuYWdlciIsIm5hbWUiLCJtb2R1bGVFeHRlbnNpb24iLCJleHRlbnNpb24iLCJjb250ZW50Rm9sZGVyIiwicHJlZml4IiwiY29sbGVjdGlvbiIsImNhdGVnb3J5IiwiaWQiLCJlbWl0IiwiZXZlbnQiLCJhcmdzIiwiRXZlbnRzIiwiY29uc3RydWN0b3IiLCJ0aW1lQ2FjaGUiLCJjb250ZW50TGlzdCIsInN0YXRlIiwib3JpZ2luYWxSZXF1aXJlIiwiX2V4dGVuc2lvbnMiLCJnZXRDb250ZW50UmVxdWlyZSIsIlNldHRpbmdzIiwib24iLCJlbmFibGVkIiwid2F0Y2hDb250ZW50IiwidW53YXRjaENvbnRlbnQiLCJpbml0aWFsaXplQ29udGVudCIsImdldENvbnRlbnRNb2RpZmljYXRpb24iLCJtb2R1bGUiLCJjb250ZW50Iiwic3RhcnRDb250ZW50Iiwic3RvcENvbnRlbnQiLCJsb2FkU3RhdGUiLCJzYXZlZCIsIkRhdGFTdG9yZSIsImdldERhdGEiLCJPYmplY3QiLCJhc3NpZ24iLCJzYXZlU3RhdGUiLCJzZXREYXRhIiwid2F0Y2hlciIsIkxvZ2dlciIsImVycm9yIiwiVXRpbGl0aWVzIiwibG9nIiwid2F0Y2giLCJwZXJzaXN0ZW50IiwiZXZlbnRUeXBlIiwiZmlsZW5hbWUiLCJlbmRzV2l0aCIsIlByb21pc2UiLCJyIiwic2V0VGltZW91dCIsInN0YXRTeW5jIiwiZXJyIiwiY29kZSIsInVubG9hZENvbnRlbnQiLCJpc0ZpbGUiLCJzdGF0cyIsIm10aW1lIiwiZ2V0VGltZSIsImxvYWRDb250ZW50IiwicmVsb2FkQ29udGVudCIsImNsb3NlIiwiZXh0cmFjdE1ldGEiLCJmaXJzdExpbmUiLCJzcGxpdCIsImhhc09sZE1ldGEiLCJpbmNsdWRlcyIsInBhcnNlT2xkTWV0YSIsImhhc05ld01ldGEiLCJwYXJzZU5ld01ldGEiLCJNZXRhRXJyb3IiLCJtZXRhIiwibWV0YURhdGEiLCJzdWJzdHJpbmciLCJsYXN0SW5kZXhPZiIsInBhcnNlZCIsInRlc3RKU09OIiwiYmxvY2siLCJvdXQiLCJmaWVsZCIsImFjY3VtIiwibGluZSIsImxlbmd0aCIsImNoYXJBdCIsImwiLCJpbmRleE9mIiwic3Vic3RyIiwicmVwbGFjZSIsInRyaW0iLCJzZWxmIiwicG9zc2libGVQYXRoIiwiYmFzZW5hbWUiLCJleGlzdHNTeW5jIiwicmVhbHBhdGhTeW5jIiwiUmVmbGVjdCIsImFwcGx5IiwiYXJndW1lbnRzIiwicmVhZEZpbGVTeW5jIiwic3RyaXBCT00iLCJfY29tcGlsZSIsInNob3VsZFRvYXN0IiwiX19ub25fd2VicGFja19yZXF1aXJlX18iLCJDb250ZW50RXJyb3IiLCJtZXNzYWdlIiwic3RhY2siLCJmaW5kIiwiYyIsIlRvYXN0cyIsInN1Y2Nlc3MiLCJ2ZXJzaW9uIiwiaWRPckZpbGVPckNvbnRlbnQiLCJpc1JlbG9hZCIsImRpc2FibGVDb250ZW50IiwiY2FjaGUiLCJzcGxpY2UiLCJkaWRVbmxvYWQiLCJpc0xvYWRlZCIsImlkT3JGaWxlIiwiaXNFbmFibGVkIiwiZW5hYmxlQ29udGVudCIsImlkT3JDb250ZW50IiwicCIsInRvZ2dsZUNvbnRlbnQiLCJsb2FkTmV3Q29udGVudCIsImZpbGVzIiwicmVhZGRpclN5bmMiLCJyZW1vdmVkIiwiZmlsdGVyIiwidCIsIm1hcCIsImFkZGVkIiwiZiIsInVwZGF0ZUxpc3QiLCJyZXN1bHRzIiwibG9hZEFsbENvbnRlbnQiLCJlcnJvcnMiLCJnZXQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFD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S1UsYUFBbEIsRUFBaUMyQyxRQUFqQyxDQUFaLEVBQXdEUyxNQUF4RCxFQUFELElBQXFFLENBQUNULFFBQVEsQ0FBQ0MsUUFBVCxDQUFrQixLQUFLN0MsU0FBdkIsQ0FBMUUsRUFBNkc7QUFDN0csWUFBTXlCLE9BQU8sR0FBRyxLQUFLZ0MsV0FBTCxDQUFpQmIsUUFBakIsRUFBMkIsS0FBM0IsQ0FBaEI7QUFDQSxVQUFJbkIsT0FBTyxZQUFZMkUsNkRBQXZCLEVBQXFDaUMsTUFBTSxDQUFDL0ksSUFBUCxDQUFZbUMsT0FBWjtBQUN4Qzs7QUFFRCxTQUFLUyxTQUFMO0FBQ0EsUUFBSWpCLHdEQUFRLENBQUNxSCxHQUFULENBQWEsS0FBS25JLFVBQWxCLEVBQThCLEtBQUtDLFFBQW5DLEVBQTZDLEtBQUtDLEVBQWxELENBQUosRUFBMkQsS0FBS2UsWUFBTDtBQUMzRCxXQUFPaUgsTUFBUDtBQUNIOztBQW5PK0IiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb250ZW50bWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBMb2dnZXIgZnJvbSBcIi4vbG9nZ2VyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi9lbWl0dGVyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbmltcG9ydCBDb250ZW50RXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvY29udGVudGVycm9yXCI7XHJcbmltcG9ydCBNZXRhRXJyb3IgZnJvbSBcIi4uL3N0cnVjdHMvbWV0YWVycm9yXCI7XHJcbmltcG9ydCB7VG9hc3RzfSBmcm9tIFwidWlcIjtcclxuXHJcbmNvbnN0IHBhdGggPSByZXF1aXJlKFwicGF0aFwiKTtcclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IE1vZHVsZSA9IHJlcXVpcmUoXCJtb2R1bGVcIikuTW9kdWxlO1xyXG5Nb2R1bGUuZ2xvYmFsUGF0aHMucHVzaChwYXRoLnJlc29sdmUocmVxdWlyZShcImVsZWN0cm9uXCIpLnJlbW90ZS5hcHAuZ2V0QXBwUGF0aCgpLCBcIm5vZGVfbW9kdWxlc1wiKSk7XHJcblxyXG5jb25zdCBzcGxpdFJlZ2V4ID0gL1teXFxTXFxyXFxuXSo/XFxuW15cXFNcXHJcXG5dKj9cXCpbXlxcU1xcclxcbl0/LztcclxuY29uc3QgZXNjYXBlZEF0UmVnZXggPSAvXlxcXFxALztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbnRlbnRNYW5hZ2VyIHtcclxuXHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJcIjt9XHJcbiAgICBnZXQgbW9kdWxlRXh0ZW5zaW9uKCkge3JldHVybiBcIlwiO31cclxuICAgIGdldCBleHRlbnNpb24oKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IGNvbnRlbnRGb2xkZXIoKSB7cmV0dXJuIFwiXCI7fVxyXG4gICAgZ2V0IHByZWZpeCgpIHtyZXR1cm4gXCJjb250ZW50XCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiY29udGVudFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJhdXRvUmVsb2FkXCI7fVxyXG4gICAgZW1pdChldmVudCwgLi4uYXJncykge3JldHVybiBFdmVudHMuZW1pdChgJHt0aGlzLnByZWZpeH0tJHtldmVudH1gLCAuLi5hcmdzKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aW1lQ2FjaGUgPSB7fTtcclxuICAgICAgICB0aGlzLmNvbnRlbnRMaXN0ID0gW107XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHt9O1xyXG4gICAgICAgIHRoaXMub3JpZ2luYWxSZXF1aXJlID0gTW9kdWxlLl9leHRlbnNpb25zW3RoaXMubW9kdWxlRXh0ZW5zaW9uXTtcclxuICAgICAgICBNb2R1bGUuX2V4dGVuc2lvbnNbdGhpcy5tb2R1bGVFeHRlbnNpb25dID0gdGhpcy5nZXRDb250ZW50UmVxdWlyZSgpO1xyXG4gICAgICAgIFNldHRpbmdzLm9uKHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgdGhpcy5pZCwgKGVuYWJsZWQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVuYWJsZWQpIHRoaXMud2F0Y2hDb250ZW50KCk7XHJcbiAgICAgICAgICAgIGVsc2UgdGhpcy51bndhdGNoQ29udGVudCgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIG92ZXJsb2FkIHRoaXMgYW5kIG1vZGlmeSB0aGUgY29udGVudCBvYmplY3QgYXMgbmVlZGVkIHRvIGZ1bGx5IGxvYWQgaXRcclxuICAgIGluaXRpYWxpemVDb250ZW50KCkge3JldHVybjt9XHJcblxyXG4gICAgLy8gU3ViY2xhc3NlcyBzaG91bGQgb3ZlcmxvYWQgdGhpcyBhbmQgbW9kaWZ5IHRoZSBjb250ZW50IGFzIG5lZWRlZCB0byByZXF1aXJlKCkgdGhlIGZpbGVcclxuICAgIGdldENvbnRlbnRNb2RpZmljYXRpb24obW9kdWxlLCBjb250ZW50KSB7cmV0dXJuIGNvbnRlbnQ7fVxyXG5cclxuICAgIHN0YXJ0Q29udGVudCgpIHtyZXR1cm47fVxyXG4gICAgc3RvcENvbnRlbnQoKSB7cmV0dXJuO31cclxuXHJcbiAgICBsb2FkU3RhdGUoKSB7XHJcbiAgICAgICAgY29uc3Qgc2F2ZWQgPSBEYXRhU3RvcmUuZ2V0RGF0YShgJHt0aGlzLnByZWZpeH1zYCk7XHJcbiAgICAgICAgaWYgKCFzYXZlZCkgcmV0dXJuO1xyXG4gICAgICAgIE9iamVjdC5hc3NpZ24odGhpcy5zdGF0ZSwgc2F2ZWQpO1xyXG4gICAgfVxyXG5cclxuICAgIHNhdmVTdGF0ZSgpIHtcclxuICAgICAgICBEYXRhU3RvcmUuc2V0RGF0YShgJHt0aGlzLnByZWZpeH1zYCwgdGhpcy5zdGF0ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgd2F0Y2hDb250ZW50KCkge1xyXG4gICAgICAgIGlmICh0aGlzLndhdGNoZXIpIHJldHVybiBMb2dnZXIuZXJyb3IodGhpcy5uYW1lLCBcIkFscmVhZHkgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICAgICAgVXRpbGl0aWVzLmxvZyh0aGlzLm5hbWUsIFwiU3RhcnRpbmcgdG8gd2F0Y2ggY29udGVudC5cIik7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyID0gZnMud2F0Y2godGhpcy5jb250ZW50Rm9sZGVyLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgNTApKTtcclxuICAgICAgICAgICAgdHJ5IHtmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVOT0VOVFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51bmxvYWRDb250ZW50KGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkpIHJldHVybjtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdHMgPSBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy50aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWVDYWNoZVtmaWxlbmFtZV0gPSBzdGF0cy5tdGltZS5nZXRUaW1lKCk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJyZW5hbWVcIikgdGhpcy5sb2FkQ29udGVudChmaWxlbmFtZSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gXCJjaGFuZ2VcIikgdGhpcy5yZWxvYWRDb250ZW50KGZpbGVuYW1lLCB0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQ29udGVudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcikgcmV0dXJuIExvZ2dlci5lcnJvcih0aGlzLm5hbWUsIFwiV2FzIG5vdCB3YXRjaGluZyBjb250ZW50LlwiKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIuY2xvc2UoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyO1xyXG4gICAgICAgIFV0aWxpdGllcy5sb2codGhpcy5uYW1lLCBcIk5vIGxvbmdlciB3YXRjaGluZyBjb250ZW50LlwiKTtcclxuICAgIH1cclxuXHJcbiAgICBleHRyYWN0TWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RMaW5lID0gY29udGVudC5zcGxpdChcIlxcblwiKVswXTtcclxuICAgICAgICBjb25zdCBoYXNPbGRNZXRhID0gZmlyc3RMaW5lLmluY2x1ZGVzKFwiLy9NRVRBXCIpO1xyXG4gICAgICAgIGlmIChoYXNPbGRNZXRhKSByZXR1cm4gdGhpcy5wYXJzZU9sZE1ldGEoY29udGVudCk7XHJcbiAgICAgICAgY29uc3QgaGFzTmV3TWV0YSA9IGZpcnN0TGluZS5pbmNsdWRlcyhcIi8qKlwiKTtcclxuICAgICAgICBpZiAoaGFzTmV3TWV0YSkgcmV0dXJuIHRoaXMucGFyc2VOZXdNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgIHRocm93IG5ldyBNZXRhRXJyb3IoXCJNRVRBIHdhcyBub3QgZm91bmQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHBhcnNlT2xkTWV0YShjb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgbWV0YSA9IGNvbnRlbnQuc3BsaXQoXCJcXG5cIilbMF07XHJcbiAgICAgICAgY29uc3QgbWV0YURhdGEgPSBtZXRhLnN1YnN0cmluZyhtZXRhLmxhc3RJbmRleE9mKFwiLy9NRVRBXCIpICsgNiwgbWV0YS5sYXN0SW5kZXhPZihcIiovL1wiKSk7XHJcbiAgICAgICAgY29uc3QgcGFyc2VkID0gVXRpbGl0aWVzLnRlc3RKU09OKG1ldGFEYXRhKTtcclxuICAgICAgICBpZiAoIXBhcnNlZCkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgY291bGQgbm90IGJlIHBhcnNlZC5cIik7XHJcbiAgICAgICAgaWYgKCFwYXJzZWQubmFtZSkgdGhyb3cgbmV3IE1ldGFFcnJvcihcIk1FVEEgbWlzc2luZyBuYW1lIGRhdGEuXCIpO1xyXG4gICAgICAgIHJldHVybiBwYXJzZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcGFyc2VOZXdNZXRhKGNvbnRlbnQpIHtcclxuICAgICAgICBjb25zdCBibG9jayA9IGNvbnRlbnQuc3BsaXQoXCIvKipcIiwgMilbMV0uc3BsaXQoXCIqL1wiLCAxKVswXTtcclxuICAgICAgICBjb25zdCBvdXQgPSB7fTtcclxuICAgICAgICBsZXQgZmllbGQgPSBcIlwiO1xyXG4gICAgICAgIGxldCBhY2N1bSA9IFwiXCI7XHJcbiAgICAgICAgZm9yIChjb25zdCBsaW5lIG9mIGJsb2NrLnNwbGl0KHNwbGl0UmVnZXgpKSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChsaW5lLmNoYXJBdCgwKSA9PT0gXCJAXCIgJiYgbGluZS5jaGFyQXQoMSkgIT09IFwiIFwiKSB7XHJcbiAgICAgICAgICAgICAgICBvdXRbZmllbGRdID0gYWNjdW07XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsID0gbGluZS5pbmRleE9mKFwiIFwiKTtcclxuICAgICAgICAgICAgICAgIGZpZWxkID0gbGluZS5zdWJzdHIoMSwgbCAtIDEpO1xyXG4gICAgICAgICAgICAgICAgYWNjdW0gPSBsaW5lLnN1YnN0cihsICsgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBhY2N1bSArPSBcIiBcIiArIGxpbmUucmVwbGFjZShcIlxcXFxuXCIsIFwiXFxuXCIpLnJlcGxhY2UoZXNjYXBlZEF0UmVnZXgsIFwiQFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBvdXRbZmllbGRdID0gYWNjdW0udHJpbSgpO1xyXG4gICAgICAgIGRlbGV0ZSBvdXRbXCJcIl07XHJcbiAgICAgICAgcmV0dXJuIG91dDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRDb250ZW50UmVxdWlyZSgpIHtcclxuICAgICAgICBjb25zdCBzZWxmID0gdGhpcztcclxuICAgICAgICAvLyBjb25zdCBiYXNlRm9sZGVyID0gdGhpcy5jb250ZW50Rm9sZGVyO1xyXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsUmVxdWlyZSA9IHRoaXMub3JpZ2luYWxSZXF1aXJlO1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbihtb2R1bGUsIGZpbGVuYW1lKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBvc3NpYmxlUGF0aCA9IHBhdGgucmVzb2x2ZShzZWxmLmNvbnRlbnRGb2xkZXIsIHBhdGguYmFzZW5hbWUoZmlsZW5hbWUpKTtcclxuICAgICAgICAgICAgaWYgKCFmcy5leGlzdHNTeW5jKHBvc3NpYmxlUGF0aCkgfHwgZmlsZW5hbWUgIT09IGZzLnJlYWxwYXRoU3luYyhwb3NzaWJsZVBhdGgpKSByZXR1cm4gUmVmbGVjdC5hcHBseShvcmlnaW5hbFJlcXVpcmUsIHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgIGxldCBjb250ZW50ID0gZnMucmVhZEZpbGVTeW5jKGZpbGVuYW1lLCBcInV0ZjhcIik7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBVdGlsaXRpZXMuc3RyaXBCT00oY29udGVudCk7XHJcbiAgICAgICAgICAgIGNvbnN0IG1ldGEgPSBzZWxmLmV4dHJhY3RNZXRhKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBtZXRhLmlkID0gbWV0YS5uYW1lO1xyXG4gICAgICAgICAgICBtZXRhLmZpbGVuYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQgPSBzZWxmLmdldENvbnRlbnRNb2RpZmljYXRpb24obW9kdWxlLCBjb250ZW50LCBtZXRhKTtcclxuICAgICAgICAgICAgbW9kdWxlLl9jb21waWxlKGNvbnRlbnQsIGZpbGVuYW1lKTtcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFN1YmNsYXNzZXMgc2hvdWxkIHVzZSB0aGUgcmV0dXJuIChpZiBub3QgQ29udGVudEVycm9yKSBhbmQgcHVzaCB0byB0aGlzLmNvbnRlbnRMaXN0XHJcbiAgICBsb2FkQ29udGVudChmaWxlbmFtZSwgc2hvdWxkVG9hc3QgPSBmYWxzZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YoZmlsZW5hbWUpID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm47XHJcbiAgICAgICAgdHJ5IHtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO31cclxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtyZXR1cm4gbmV3IENvbnRlbnRFcnJvcihmaWxlbmFtZSwgZmlsZW5hbWUsIFwiQ291bGQgbm90IGJlIGNvbXBpbGVkLlwiLCB7bWVzc2FnZTogZXJyb3IubWVzc2FnZSwgc3RhY2s6IGVycm9yLnN0YWNrfSk7fVxyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmaWxlbmFtZSkpO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRlbnRMaXN0LmZpbmQoYyA9PiBjLmlkID09IGNvbnRlbnQuaWQpKSByZXR1cm4gbmV3IENvbnRlbnRFcnJvcihjb250ZW50Lm5hbWUsIGZpbGVuYW1lLCBgVGhlcmUgaXMgYWxyZWFkeSBhIHBsdWdpbiB3aXRoIG5hbWUgJHtjb250ZW50Lm5hbWV9YCk7XHJcbiAgICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmluaXRpYWxpemVDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgICAgIGlmIChlcnJvcikgcmV0dXJuIGVycm9yO1xyXG4gICAgICAgIHRoaXMuY29udGVudExpc3QucHVzaChjb250ZW50KTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2NvbnRlbnQubmFtZX0gdiR7Y29udGVudC52ZXJzaW9ufSB3YXMgbG9hZGVkLmApO1xyXG4gICAgICAgIHRoaXMuZW1pdChcImxvYWRlZFwiLCBjb250ZW50LmlkKTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSByZXR1cm4gdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0Q29udGVudChjb250ZW50KTtcclxuICAgIH1cclxuXHJcbiAgICB1bmxvYWRDb250ZW50KGlkT3JGaWxlT3JDb250ZW50LCBzaG91bGRUb2FzdCA9IHRydWUsIGlzUmVsb2FkID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdHlwZW9mKGlkT3JGaWxlT3JDb250ZW50KSA9PSBcInN0cmluZ1wiID8gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZU9yQ29udGVudCB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlT3JDb250ZW50KSA6IGlkT3JGaWxlT3JDb250ZW50O1xyXG4gICAgICAgIGlmICghY29udGVudCkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIGlmICh0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSBpc1JlbG9hZCA/IHRoaXMuc3RvcENvbnRlbnQoY29udGVudCkgOiB0aGlzLmRpc2FibGVDb250ZW50KGNvbnRlbnQpO1xyXG4gICAgICAgIGRlbGV0ZSBfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5jYWNoZVtfX25vbl93ZWJwYWNrX3JlcXVpcmVfXy5yZXNvbHZlKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGNvbnRlbnQuZmlsZW5hbWUpKV07XHJcbiAgICAgICAgdGhpcy5jb250ZW50TGlzdC5zcGxpY2UodGhpcy5jb250ZW50TGlzdC5pbmRleE9mKGNvbnRlbnQpLCAxKTtcclxuICAgICAgICB0aGlzLmVtaXQoXCJ1bmxvYWRlZFwiLCBjb250ZW50LmlkKTtcclxuICAgICAgICBpZiAoc2hvdWxkVG9hc3QpIFRvYXN0cy5zdWNjZXNzKGAke2NvbnRlbnQubmFtZX0gd2FzIHVubG9hZGVkLmApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZENvbnRlbnQoaWRPckZpbGVPckNvbnRlbnQsIHNob3VsZFRvYXN0ID0gdHJ1ZSkge1xyXG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0eXBlb2YoaWRPckZpbGVPckNvbnRlbnQpID09IFwic3RyaW5nXCIgPyB0aGlzLmNvbnRlbnRMaXN0LmZpbmQoYyA9PiBjLmlkID09IGlkT3JGaWxlT3JDb250ZW50IHx8IGMuZmlsZW5hbWUgPT0gaWRPckZpbGVPckNvbnRlbnQpIDogaWRPckZpbGVPckNvbnRlbnQ7XHJcbiAgICAgICAgY29uc3QgZGlkVW5sb2FkID0gdGhpcy51bmxvYWRDb250ZW50KGNvbnRlbnQsIHNob3VsZFRvYXN0LCB0cnVlKTtcclxuICAgICAgICBpZiAoIWRpZFVubG9hZCkgcmV0dXJuIGRpZFVubG9hZDtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQ29udGVudChjb250ZW50LmZpbGVuYW1lLCBzaG91bGRUb2FzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNMb2FkZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBpc0VuYWJsZWQoaWRPckZpbGUpIHtcclxuICAgICAgICBjb25zdCBjb250ZW50ID0gdGhpcy5jb250ZW50TGlzdC5maW5kKGMgPT4gYy5pZCA9PSBpZE9yRmlsZSB8fCBjLmZpbGVuYW1lID09IGlkT3JGaWxlKTtcclxuICAgICAgICBpZiAoIWNvbnRlbnQpIHJldHVybiBmYWxzZTtcclxuICAgICAgICByZXR1cm4gdGhpcy5zdGF0ZVtjb250ZW50LmlkXTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVDb250ZW50KGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbY29udGVudC5pZF0pIHJldHVybjtcclxuICAgICAgICB0aGlzLnN0YXRlW2NvbnRlbnQuaWRdID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnN0YXJ0Q29udGVudChjb250ZW50KTtcclxuICAgICAgICB0aGlzLnNhdmVTdGF0ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVDb250ZW50KGlkT3JDb250ZW50KSB7XHJcbiAgICAgICAgY29uc3QgY29udGVudCA9IHR5cGVvZihpZE9yQ29udGVudCkgPT0gXCJzdHJpbmdcIiA/IHRoaXMuY29udGVudExpc3QuZmluZChwID0+IHAuaWQgPT0gaWRPckNvbnRlbnQpIDogaWRPckNvbnRlbnQ7XHJcbiAgICAgICAgaWYgKCFjb250ZW50KSByZXR1cm47XHJcbiAgICAgICAgaWYgKCF0aGlzLnN0YXRlW2NvbnRlbnQuaWRdKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5zdGF0ZVtjb250ZW50LmlkXSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RvcENvbnRlbnQoY29udGVudCk7XHJcbiAgICAgICAgdGhpcy5zYXZlU3RhdGUoKTtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVDb250ZW50KGlkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3RhdGVbaWRdKSB0aGlzLmRpc2FibGVDb250ZW50KGlkKTtcclxuICAgICAgICBlbHNlIHRoaXMuZW5hYmxlQ29udGVudChpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgbG9hZE5ld0NvbnRlbnQoKSB7XHJcbiAgICAgICAgY29uc3QgZmlsZXMgPSBmcy5yZWFkZGlyU3luYyh0aGlzLmNvbnRlbnRGb2xkZXIpO1xyXG4gICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLmNvbnRlbnRMaXN0LmZpbHRlcih0ID0+ICFmaWxlcy5pbmNsdWRlcyh0LmZpbGVuYW1lKSkubWFwKGMgPT4gYy5pZCk7XHJcbiAgICAgICAgY29uc3QgYWRkZWQgPSBmaWxlcy5maWx0ZXIoZiA9PiAhdGhpcy5jb250ZW50TGlzdC5maW5kKHQgPT4gdC5maWxlbmFtZSA9PSBmKSAmJiBmLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSAmJiBmcy5zdGF0U3luYyhwYXRoLnJlc29sdmUodGhpcy5jb250ZW50Rm9sZGVyLCBmKSkuaXNGaWxlKCkpO1xyXG4gICAgICAgIHJldHVybiB7YWRkZWQsIHJlbW92ZWR9O1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUxpc3QoKSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0cyA9IHRoaXMubG9hZE5ld0NvbnRlbnQoKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGZpbGVuYW1lIG9mIHJlc3VsdHMuYWRkZWQpIHRoaXMubG9hZENvbnRlbnQoZmlsZW5hbWUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiByZXN1bHRzLnJlbW92ZWQpIHRoaXMudW5sb2FkQ29udGVudChuYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQWxsQ29udGVudCgpIHtcclxuICAgICAgICB0aGlzLmxvYWRTdGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGVycm9ycyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGhpcy5jb250ZW50Rm9sZGVyKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlbmFtZSBvZiBmaWxlcykge1xyXG4gICAgICAgICAgICBpZiAoIWZzLnN0YXRTeW5jKHBhdGgucmVzb2x2ZSh0aGlzLmNvbnRlbnRGb2xkZXIsIGZpbGVuYW1lKSkuaXNGaWxlKCkgfHwgIWZpbGVuYW1lLmVuZHNXaXRoKHRoaXMuZXh0ZW5zaW9uKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSB0aGlzLmxvYWRDb250ZW50KGZpbGVuYW1lLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50IGluc3RhbmNlb2YgQ29udGVudEVycm9yKSBlcnJvcnMucHVzaChjb250ZW50KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2F2ZVN0YXRlKCk7XHJcbiAgICAgICAgaWYgKFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIHRoaXMuaWQpKSB0aGlzLndhdGNoQ29udGVudCgpO1xyXG4gICAgICAgIHJldHVybiBlcnJvcnM7XHJcbiAgICB9XHJcbn0iXSwic291cmNlUm9vdCI6IiJ9\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__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"); /***/ }), @@ -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 _utilities__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utilities */ \"./src/modules/utilities.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\n\n // import EmoteModule from \"./emotes\";\n// import QuickEmoteMenu from \"../builtins/emotemenu\";\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 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 _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Settings\");\n _settingsmanager__WEBPACK_IMPORTED_MODULE_6__[\"default\"].initialize();\n _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing EmoteModule\"); // window.emotePromise = EmoteModule.init().then(() => {\n // EmoteModule.initialized = true;\n // Utilities.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 _utilities__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 _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].loadAllPlugins();\n _utilities__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 _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Removing Loading Icon\");\n document.getElementsByClassName(\"bd-loaderv2\")[0].remove();\n _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Initializing Main Observer\");\n this.initObserver(); // Show loading errors\n\n _utilities__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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkNvcmUiLCJwcm90b3R5cGUiLCJzZXRDb25maWciLCJjb25maWciLCJPYmplY3QiLCJhc3NpZ24iLCJDb25maWciLCJpbml0IiwidmVyc2lvbiIsIm1pblN1cHBvcnRlZFZlcnNpb24iLCJNb2RhbHMiLCJhbGVydCIsImJiZFZlcnNpb24iLCJsYXRlc3RMb2NhbFZlcnNpb24iLCJ1cGRhdGVyIiwiTGF0ZXN0VmVyc2lvbiIsImxhdGVzdFZlcnNpb24iLCJVdGlsaXRpZXMiLCJsb2ciLCJTZXR0aW5ncyIsImluaXRpYWxpemUiLCJET01NYW5hZ2VyIiwiY2hlY2tGb3JHdWlsZHMiLCJCRFYyIiwibW9kdWxlIiwiQnVpbHRpbnMiLCJwbHVnaW5FcnJvcnMiLCJQbHVnaW5NYW5hZ2VyIiwibG9hZEFsbFBsdWdpbnMiLCJ0aGVtZUVycm9ycyIsIlRoZW1lTWFuYWdlciIsImxvYWRBbGxUaGVtZXMiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJyZW1vdmUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlYWR5U3RhdGUiLCJzZXRUaW1lb3V0Iiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsInNwbGl0IiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsImRlZmVyTG9hZGVkIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsImkiLCJtbGVuIiwibXV0YXRpb24iLCJhZGRlZE5vZGVzIiwiRWxlbWVudCIsIm5vZGUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInNldEF0dHJpYnV0ZSIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIl0s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QixhQUFrQ0MsT0FBcEMsQ0FBbkMsRUFBaUY7QUFFakYsWUFBTUMsSUFBSSxHQUFHSCxRQUFRLENBQUNDLFVBQVQsQ0FBb0IsQ0FBcEIsQ0FBYjs7QUFFQSxVQUFJRSxJQUFJLENBQUNDLFNBQUwsQ0FBZUMsUUFBZixDQUF3QixjQUF4QixDQUFKLEVBQTZDO0FBQ3pDLFlBQUlGLElBQUksQ0FBQzVCLHNCQUFMLENBQTRCLDZCQUE1QixFQUEyRGtCLE1BQS9ELEVBQXVFVSxJQUFJLENBQUNHLFlBQUwsQ0FBa0IsVUFBbEIsRUFBOEIsaUJBQTlCLEVBRDlCLENBR3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSDtBQUNKO0FBQ0osR0FwQm9CLENBQXJCO0FBc0JBWCxjQUFZLENBQUNZLE9BQWIsQ0FBcUJqQyxRQUFyQixFQUErQjtBQUMzQmtDLGFBQVMsRUFBRSxJQURnQjtBQUUzQkMsV0FBTyxFQUFFO0FBRmtCLEdBQS9CO0FBSUgsQ0EzQkQ7O0FBOEJlLG1FQUFJbkUsSUFBSixFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvY29yZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCRFYyIGZyb20gXCIuL2JkdjJcIjtcclxuaW1wb3J0IFV0aWxpdGllcyBmcm9tIFwiLi91dGlsaXRpZXNcIjtcclxuaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbi8vIGltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuLy8gaW1wb3J0IFF1aWNrRW1vdGVNZW51IGZyb20gXCIuLi9idWlsdGlucy9lbW90ZW1lbnVcIjtcclxuaW1wb3J0IERPTU1hbmFnZXIgZnJvbSBcIi4vZG9tbWFuYWdlclwiO1xyXG5pbXBvcnQgUGx1Z2luTWFuYWdlciBmcm9tIFwiLi9wbHVnaW5tYW5hZ2VyXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vdGhlbWVtYW5hZ2VyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0ICogYXMgQnVpbHRpbnMgZnJvbSBcImJ1aWx0aW5zXCI7XHJcbmltcG9ydCB7TW9kYWxzfSBmcm9tIFwidWlcIjtcclxuXHJcbmZ1bmN0aW9uIENvcmUoKSB7XHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgT2JqZWN0LmFzc2lnbihDb25maWcsIGNvbmZpZyk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0ID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoQ29uZmlnLnZlcnNpb24gPCBDb25maWcubWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIE1vZGFscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIENvbmZpZy52ZXJzaW9uICsgXCIgKHlvdXIgdmVyc2lvbilcIiArIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxhdGVzdCBqcyAoXCIgKyBDb25maWcuYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXRlc3RMb2NhbFZlcnNpb24gPSBDb25maWcudXBkYXRlciA/IENvbmZpZy51cGRhdGVyLkxhdGVzdFZlcnNpb24gOiBDb25maWcubGF0ZXN0VmVyc2lvbjtcclxuICAgIGlmIChsYXRlc3RMb2NhbFZlcnNpb24gPiBDb25maWcudmVyc2lvbikge1xyXG4gICAgICAgIE1vZGFscy5hbGVydChcIlVwZGF0ZSBBdmFpbGFibGVcIiwgYFxyXG4gICAgICAgICAgICBBbiB1cGRhdGUgZm9yIEJhbmRhZ2VkQkQgaXMgYXZhaWxhYmxlICgke2xhdGVzdExvY2FsVmVyc2lvbn0pISBQbGVhc2UgUmVpbnN0YWxsITxiciAvPjxiciAvPlxyXG4gICAgICAgICAgICA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkRvd25sb2FkIEluc3RhbGxlcjwvYT5cclxuICAgICAgICBgKTtcclxuICAgIH1cclxuXHJcbiAgICBVdGlsaXRpZXMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcclxuICAgIFNldHRpbmdzLmluaXRpYWxpemUoKTtcclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIEVtb3RlTW9kdWxlXCIpO1xyXG4gICAgLy8gd2luZG93LmVtb3RlUHJvbWlzZSA9IEVtb3RlTW9kdWxlLmluaXQoKS50aGVuKCgpID0+IHtcclxuICAgIC8vICAgICBFbW90ZU1vZHVsZS5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAvLyAgICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgUXVpY2tFbW90ZU1lbnVcIik7XHJcbiAgICAvLyAgICAgRXZlbnRzLmRpc3BhdGNoKFwiZW1vdGVzLWxvYWRlZFwiKTtcclxuICAgIC8vICAgICAvLyBRdWlja0Vtb3RlTWVudS5pbml0KCk7XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICAvLyB0aGlzLmluamVjdEV4dGVybmFscygpO1xyXG5cclxuICAgIERPTU1hbmFnZXIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xyXG4gICAgQkRWMi5pbml0aWFsaXplKCk7XHJcbiAgICBVdGlsaXRpZXMubG9nKFwiU3RhcnR1cFwiLCBcIlVwZGF0aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgaW4gQnVpbHRpbnMpIEJ1aWx0aW5zW21vZHVsZV0uaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgY29uc3QgcGx1Z2luRXJyb3JzID0gUGx1Z2luTWFuYWdlci5sb2FkQWxsUGx1Z2lucygpO1xyXG5cclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBjb25zdCB0aGVtZUVycm9ycyA9IFRoZW1lTWFuYWdlci5sb2FkQWxsVGhlbWVzKCk7XHJcblxyXG4gICAgLy8gUHVibGljU2VydmVycy5pbml0aWFsaXplKCk7XHJcbiAgICAvLyBFbW90ZU1vZHVsZS5hdXRvQ2FwaXRhbGl6ZSgpO1xyXG5cclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcclxuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMsIHRoZW1lczogdGhlbWVFcnJvcnN9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJjb21wbGV0ZVwiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkID0gQkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gQkRWMi5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjaGVja0Zvckd1aWxkcygpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGFkZGVkLCBza2lwXHJcbiAgICAgICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJsYXllci0zUXJVZUdcIikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJndWlsZC1zZXR0aW5ncy1iYXNlLXNlY3Rpb25cIikubGVuZ3RoKSBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzb2NpYWxMaW5rcy0zanFORnlcIikubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJkLXNldHRpbmdzLXNpZGViYXJcIikpIFNldHRpbmdzLnJlbmRlclNpZGViYXIoKTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlKCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\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__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n // import EmoteModule from \"./emotes\";\n// import QuickEmoteMenu from \"../builtins/emotemenu\";\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 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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkNvcmUiLCJwcm90b3R5cGUiLCJzZXRDb25maWciLCJjb25maWciLCJPYmplY3QiLCJhc3NpZ24iLCJDb25maWciLCJpbml0IiwidmVyc2lvbiIsIm1pblN1cHBvcnRlZFZlcnNpb24iLCJNb2RhbHMiLCJhbGVydCIsImJiZFZlcnNpb24iLCJsYXRlc3RMb2NhbFZlcnNpb24iLCJ1cGRhdGVyIiwiTGF0ZXN0VmVyc2lvbiIsImxhdGVzdFZlcnNpb24iLCJMb2dnZXIiLCJsb2ciLCJTZXR0aW5ncyIsImluaXRpYWxpemUiLCJET01NYW5hZ2VyIiwiY2hlY2tGb3JHdWlsZHMiLCJCRFYyIiwibW9kdWxlIiwiQnVpbHRpbnMiLCJwbHVnaW5FcnJvcnMiLCJQbHVnaW5NYW5hZ2VyIiwibG9hZEFsbFBsdWdpbnMiLCJ0aGVtZUVycm9ycyIsIlRoZW1lTWFuYWdlciIsImxvYWRBbGxUaGVtZXMiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJyZW1vdmUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlYWR5U3RhdGUiLCJzZXRUaW1lb3V0Iiwid3JhcHBlciIsImd1aWxkQ2xhc3NlcyIsInNwbGl0IiwiZ3VpbGQiLCJsaXN0SXRlbSIsImJsb2IiLCJibG9iQ29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsImxlbmd0aCIsImRlZmVyTG9hZGVkIiwibWFpbk9ic2VydmVyIiwiTXV0YXRpb25PYnNlcnZlciIsIm11dGF0aW9ucyIsImkiLCJtbGVuIiwibXV0YXRpb24iLCJhZGRlZE5vZGVzIiwiRWxlbWVudCIsIm5vZGUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsInNldEF0dHJpYnV0ZSIsIm9ic2VydmUiLCJjaGlsZExpc3QiLCJzdWJ0cmVlIl0sIm1h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QUFrQ0MsT0FBcEMsQ0FBbkMsRUFBaUY7QUFFakYsWUFBTUMsSUFBSSxHQUFHSCxRQUFRLENBQUNDLFVBQVQsQ0FBb0IsQ0FBcEIsQ0FBYjs7QUFFQSxVQUFJRSxJQUFJLENBQUNDLFNBQUwsQ0FBZUMsUUFBZixDQUF3QixjQUF4QixDQUFKLEVBQTZDO0FBQ3pDLFlBQUlGLElBQUksQ0FBQzVCLHNCQUFMLENBQTRCLDZCQUE1QixFQUEyRGtCLE1BQS9ELEVBQXVFVSxJQUFJLENBQUNHLFlBQUwsQ0FBa0IsVUFBbEIsRUFBOEIsaUJBQTlCLEVBRDlCLENBR3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDSDtBQUNKO0FBQ0osR0FwQm9CLENBQXJCO0FBc0JBWCxjQUFZLENBQUNZLE9BQWIsQ0FBcUJqQyxRQUFyQixFQUErQjtBQUMzQmtDLGFBQVMsRUFBRSxJQURnQjtBQUUzQkMsV0FBTyxFQUFFO0FBRmtCLEdBQS9CO0FBSUgsQ0EzQkQ7O0FBOEJlLG1FQUFJbkUsSUFBSixFQUFmIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvY29yZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCRFYyIGZyb20gXCIuL2JkdjJcIjtcclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuaW1wb3J0IHtDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbi8vIGltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuLy8gaW1wb3J0IFF1aWNrRW1vdGVNZW51IGZyb20gXCIuLi9idWlsdGlucy9lbW90ZW1lbnVcIjtcclxuaW1wb3J0IERPTU1hbmFnZXIgZnJvbSBcIi4vZG9tbWFuYWdlclwiO1xyXG5pbXBvcnQgUGx1Z2luTWFuYWdlciBmcm9tIFwiLi9wbHVnaW5tYW5hZ2VyXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vdGhlbWVtYW5hZ2VyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0ICogYXMgQnVpbHRpbnMgZnJvbSBcImJ1aWx0aW5zXCI7XHJcbmltcG9ydCB7TW9kYWxzfSBmcm9tIFwidWlcIjtcclxuXHJcbmZ1bmN0aW9uIENvcmUoKSB7XHJcbn1cclxuXHJcbkNvcmUucHJvdG90eXBlLnNldENvbmZpZyA9IGZ1bmN0aW9uKGNvbmZpZykge1xyXG4gICAgT2JqZWN0LmFzc2lnbihDb25maWcsIGNvbmZpZyk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0ID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICBpZiAoQ29uZmlnLnZlcnNpb24gPCBDb25maWcubWluU3VwcG9ydGVkVmVyc2lvbikge1xyXG4gICAgICAgIE1vZGFscy5hbGVydChcIk5vdCBTdXBwb3J0ZWRcIiwgXCJCZXR0ZXJEaXNjb3JkIHZcIiArIENvbmZpZy52ZXJzaW9uICsgXCIgKHlvdXIgdmVyc2lvbilcIiArIFwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGxhdGVzdCBqcyAoXCIgKyBDb25maWcuYmJkVmVyc2lvbiArIFwiKS48YnI+PGJyPiBQbGVhc2UgZG93bmxvYWQgdGhlIGxhdGVzdCB2ZXJzaW9uIGZyb20gPGEgaHJlZj0naHR0cHM6Ly9naXRodWIuY29tL3JhdWVuemkvQmV0dGVyRGlzY29yZEFwcC9yZWxlYXNlcy9sYXRlc3QnIHRhcmdldD0nX2JsYW5rJz5HaXRIdWI8L2E+XCIpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBsYXRlc3RMb2NhbFZlcnNpb24gPSBDb25maWcudXBkYXRlciA/IENvbmZpZy51cGRhdGVyLkxhdGVzdFZlcnNpb24gOiBDb25maWcubGF0ZXN0VmVyc2lvbjtcclxuICAgIGlmIChsYXRlc3RMb2NhbFZlcnNpb24gPiBDb25maWcudmVyc2lvbikge1xyXG4gICAgICAgIE1vZGFscy5hbGVydChcIlVwZGF0ZSBBdmFpbGFibGVcIiwgYFxyXG4gICAgICAgICAgICBBbiB1cGRhdGUgZm9yIEJhbmRhZ2VkQkQgaXMgYXZhaWxhYmxlICgke2xhdGVzdExvY2FsVmVyc2lvbn0pISBQbGVhc2UgUmVpbnN0YWxsITxiciAvPjxiciAvPlxyXG4gICAgICAgICAgICA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkRvd25sb2FkIEluc3RhbGxlcjwvYT5cclxuICAgICAgICBgKTtcclxuICAgIH1cclxuXHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBTZXR0aW5nc1wiKTtcclxuICAgIFNldHRpbmdzLmluaXRpYWxpemUoKTtcclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIEVtb3RlTW9kdWxlXCIpO1xyXG4gICAgLy8gd2luZG93LmVtb3RlUHJvbWlzZSA9IEVtb3RlTW9kdWxlLmluaXQoKS50aGVuKCgpID0+IHtcclxuICAgIC8vICAgICBFbW90ZU1vZHVsZS5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAvLyAgICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgUXVpY2tFbW90ZU1lbnVcIik7XHJcbiAgICAvLyAgICAgRXZlbnRzLmRpc3BhdGNoKFwiZW1vdGVzLWxvYWRlZFwiKTtcclxuICAgIC8vICAgICAvLyBRdWlja0Vtb3RlTWVudS5pbml0KCk7XHJcbiAgICAvLyB9KTtcclxuXHJcbiAgICAvLyB0aGlzLmluamVjdEV4dGVybmFscygpO1xyXG5cclxuICAgIERPTU1hbmFnZXIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xyXG4gICAgQkRWMi5pbml0aWFsaXplKCk7XHJcbiAgICBMb2dnZXIubG9nKFwiU3RhcnR1cFwiLCBcIlVwZGF0aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgaW4gQnVpbHRpbnMpIEJ1aWx0aW5zW21vZHVsZV0uaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgY29uc3QgcGx1Z2luRXJyb3JzID0gUGx1Z2luTWFuYWdlci5sb2FkQWxsUGx1Z2lucygpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBjb25zdCB0aGVtZUVycm9ycyA9IFRoZW1lTWFuYWdlci5sb2FkQWxsVGhlbWVzKCk7XHJcblxyXG4gICAgLy8gUHVibGljU2VydmVycy5pbml0aWFsaXplKCk7XHJcbiAgICAvLyBFbW90ZU1vZHVsZS5hdXRvQ2FwaXRhbGl6ZSgpO1xyXG5cclxuICAgIExvZ2dlci5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcclxuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgTG9nZ2VyLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMsIHRoZW1lczogdGhlbWVFcnJvcnN9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgIT0gXCJjb21wbGV0ZVwiKSBzZXRUaW1lb3V0KGNoZWNrRm9yR3VpbGRzLCAxMDApO1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkID0gQkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gQkRWMi5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjaGVja0Zvckd1aWxkcygpO1xyXG4gICAgfSk7XHJcbn07XHJcblxyXG5Db3JlLnByb3RvdHlwZS5pbml0T2JzZXJ2ZXIgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBjb25zdCBtYWluT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB7XHJcblxyXG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBtbGVuID0gbXV0YXRpb25zLmxlbmd0aDsgaSA8IG1sZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbiA9IG11dGF0aW9uc1tpXTtcclxuXHJcbiAgICAgICAgICAgIC8vIGlmIHRoZXJlIHdhcyBub3RoaW5nIGFkZGVkLCBza2lwXHJcbiAgICAgICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcblxyXG4gICAgICAgICAgICBpZiAobm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJsYXllci0zUXJVZUdcIikpIHtcclxuICAgICAgICAgICAgICAgIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJndWlsZC1zZXR0aW5ncy1iYXNlLXNlY3Rpb25cIikubGVuZ3RoKSBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwic2VydmVyLXNldHRpbmdzXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGlmIChub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJzb2NpYWxMaW5rcy0zanFORnlcIikubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLCBcInVzZXItc2V0dGluZ3NcIik7XHJcbiAgICAgICAgICAgICAgICAvLyAgICAgaWYgKCFkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImJkLXNldHRpbmdzLXNpZGViYXJcIikpIFNldHRpbmdzLnJlbmRlclNpZGViYXIoKTtcclxuICAgICAgICAgICAgICAgIC8vIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIG1haW5PYnNlcnZlci5vYnNlcnZlKGRvY3VtZW50LCB7XHJcbiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgIH0pO1xyXG59O1xyXG5cclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBDb3JlKCk7Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); /***/ }), @@ -407,7 +407,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 export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DOMManager; });\nclass DOMManager {\n static get bdHead() {\n return this.getElement(\"bd-head\");\n }\n\n static get bdBody() {\n return this.getElement(\"bd-body\");\n }\n\n static get bdStyles() {\n return this.getElement(\"bd-styles\");\n }\n\n static get bdThemes() {\n return this.getElement(\"bd-themes\");\n }\n\n static get bdCustomCSS() {\n return this.getElement(\"#customcss\");\n }\n\n static get bdTooltips() {\n return this.getElement(\"bd-tooltips\") || this.createElement(\"bd-tooltips\").appendTo(this.bdBody);\n }\n\n static get bdModals() {\n return this.getElement(\"bd-modals\") || this.createElement(\"bd-modals\").appendTo(this.bdBody);\n }\n\n static get bdToasts() {\n return this.getElement(\"bd-toasts\") || this.createElement(\"bd-toasts\").appendTo(this.bdBody);\n }\n\n static initialize() {\n this.createElement(\"bd-head\", {\n target: document.head\n });\n this.createElement(\"bd-body\", {\n target: document.body\n });\n this.createElement(\"bd-styles\", {\n target: this.bdHead\n });\n this.createElement(\"bd-themes\", {\n target: this.bdHead\n });\n this.createElement(\"style\", {\n id: \"customcss\",\n target: this.bdHead\n });\n }\n\n static getElement(e, baseElement = document) {\n if (e instanceof Node) return e;\n return baseElement.querySelector(e);\n }\n\n static createElement(tag, options = {}) {\n const {\n className,\n id,\n target\n } = options;\n const element = document.createElement(tag);\n if (className) element.className = className;\n if (id) element.id = id;\n if (target) this.getElement(target).append(element);\n return element;\n }\n\n static removeStyle(id) {\n const exists = this.getElement(`#${id}`, this.bdStyles);\n if (exists) exists.remove();\n }\n\n static injectStyle(id, css) {\n const style = this.getElement(`#${id}`, this.bdStyles) || this.createElement(\"style\", {\n id\n });\n style.textContent = css;\n this.bdStyles.append(style);\n }\n\n static removeTheme(id) {\n const exists = this.getElement(`#${id}`, this.bdThemes);\n if (exists) exists.remove();\n }\n\n static injectTheme(id, css) {\n const style = this.getElement(`#${id}`, this.bdThemes) || this.createElement(\"style\", {\n id\n });\n style.textContent = css;\n this.bdThemes.append(style);\n }\n\n static updateCustomCSS(css) {\n this.bdCustomCSS.textContent = css;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZG9tbWFuYWdlci5qcz9jZDVjIl0sIm5hbWVzIjpbIkRPTU1hbmFnZXIiLCJiZEhlYWQiLCJnZXRFbGVtZW50IiwiYmRCb2R5IiwiYmRTdHlsZXMiLCJiZFRoZW1lcyIsImJkQ3VzdG9tQ1NTIiwiYmRUb29sdGlwcyIsImNyZWF0ZUVsZW1lbnQiLCJhcHBlbmRUbyIsImJkTW9kYWxzIiwiYmRUb2FzdHMiLCJpbml0aWFsaXplIiwidGFyZ2V0IiwiZG9jdW1lbnQiLCJoZWFkIiwiYm9keSIsImlkIiwiZSIsImJhc2VFbGVtZW50IiwiTm9kZSIsInF1ZXJ5U2VsZWN0b3IiLCJ0YWciLCJvcHRpb25zIiwiY2xhc3NOYW1lIiwiZWxlbWVudCIsImFwcGVuZCIsInJlbW92ZVN0eWxlIiwiZXhpc3RzIiwicmVtb3ZlIiwiaW5qZWN0U3R5bGUiLCJjc3MiLCJzdHlsZSIsInRleHRDb250ZW50IiwicmVtb3ZlVGhlbWUiLCJpbmplY3RUaGVtZSIsInVwZGF0ZUN1c3RvbUNTUyJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFlLE1BQU1BLFVBQU4sQ0FBaUI7QUFFNUIsYUFBV0MsTUFBWCxHQUFvQjtBQUFFLFdBQU8sS0FBS0MsVUFBTCxDQUFnQixTQUFoQixDQUFQO0FBQW9DOztBQUMxRCxhQUFXQyxNQUFYLEdBQW9CO0FBQUUsV0FBTyxLQUFLRCxVQUFMLENBQWdCLFNBQWhCLENBQVA7QUFBb0M7O0FBQzFELGFBQVdFLFFBQVgsR0FBc0I7QUFBRSxXQUFPLEtBQUtGLFVBQUwsQ0FBZ0IsV0FBaEIsQ0FBUDtBQUFzQzs7QUFDOUQsYUFBV0csUUFBWCxHQUFzQjtBQUFFLFdBQU8sS0FBS0gsVUFBTCxDQUFnQixXQUFoQixDQUFQO0FBQXNDOztBQUM5RCxhQUFXSSxXQUFYLEdBQXlCO0FBQUUsV0FBTyxLQUFLSixVQUFMLENBQWdCLFlBQWhCLENBQVA7QUFBdUM7O0FBQ2xFLGFBQVdLLFVBQVgsR0FBd0I7QUFBRSxX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QixFQUEwQixLQUFLWixRQUEvQixDQUFmO0FBQ0EsUUFBSXVCLE1BQUosRUFBWUEsTUFBTSxDQUFDQyxNQUFQO0FBQ2Y7O0FBRUQsU0FBT00sV0FBUCxDQUFtQmxCLEVBQW5CLEVBQXVCYyxHQUF2QixFQUE0QjtBQUN4QixVQUFNQyxLQUFLLEdBQUcsS0FBSzlCLFVBQUwsQ0FBaUIsSUFBR2UsRUFBRyxFQUF2QixFQUEwQixLQUFLWixRQUEvQixLQUE0QyxLQUFLRyxhQUFMLENBQW1CLE9BQW5CLEVBQTRCO0FBQUNTO0FBQUQsS0FBNUIsQ0FBMUQ7QUFDQWUsU0FBSyxDQUFDQyxXQUFOLEdBQW9CRixHQUFwQjtBQUNBLFNBQUsxQixRQUFMLENBQWNxQixNQUFkLENBQXFCTSxLQUFyQjtBQUNIOztBQUVELFNBQU9JLGVBQVAsQ0FBdUJMLEdBQXZCLEVBQTRCO0FBQ3hCLFNBQUt6QixXQUFMLENBQWlCMkIsV0FBakIsR0FBK0JGLEdBQS9CO0FBQ0g7O0FBekQyQiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2RvbW1hbmFnZXIuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZGVmYXVsdCBjbGFzcyBET01NYW5hZ2VyIHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0IGJkSGVhZCgpIHsgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudChcImJkLWhlYWRcIik7IH1cclxuICAgIHN0YXRpYyBnZXQgYmRCb2R5KCkgeyByZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiYmQtYm9keVwiKTsgfVxyXG4gICAgc3RhdGljIGdldCBiZFN0eWxlcygpIHsgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudChcImJkLXN0eWxlc1wiKTsgfVxyXG4gICAgc3RhdGljIGdldCBiZFRoZW1lcygpIHsgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudChcImJkLXRoZW1lc1wiKTsgfVxyXG4gICAgc3RhdGljIGdldCBiZEN1c3RvbUNTUygpIHsgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudChcIiNjdXN0b21jc3NcIik7IH1cclxuICAgIHN0YXRpYyBnZXQgYmRUb29sdGlwcygpIHsgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudChcImJkLXRvb2x0aXBzXCIpIHx8IHRoaXMuY3JlYXRlRWxlbWVudChcImJkLXRvb2x0aXBzXCIpLmFwcGVuZFRvKHRoaXMuYmRCb2R5KTsgfVxyXG4gICAgc3RhdGljIGdldCBiZE1vZGFscygpIHsgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudChcImJkLW1vZGFsc1wiKSB8fCB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJiZC1tb2RhbHNcIikuYXBwZW5kVG8odGhpcy5iZEJvZHkpOyB9XHJcbiAgICBzdGF0aWMgZ2V0IGJkVG9hc3RzKCkgeyByZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiYmQtdG9hc3RzXCIpIHx8IHRoaXMuY3JlYXRlRWxlbWVudChcImJkLXRvYXN0c1wiKS5hcHBlbmRUbyh0aGlzLmJkQm9keSk7IH1cclxuXHJcbiAgICBzdGF0aWMgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJiZC1oZWFkXCIsIHt0YXJnZXQ6IGRvY3VtZW50LmhlYWR9KTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJiZC1ib2R5XCIsIHt0YXJnZXQ6IGRvY3VtZW50LmJvZHl9KTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJiZC1zdHlsZXNcIiwge3RhcmdldDogdGhpcy5iZEhlYWR9KTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJiZC10aGVtZXNcIiwge3RhcmdldDogdGhpcy5iZEhlYWR9KTtcclxuICAgICAgICB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCB7aWQ6IFwiY3VzdG9tY3NzXCIsIHRhcmdldDogdGhpcy5iZEhlYWR9KTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgZ2V0RWxlbWVudChlLCBiYXNlRWxlbWVudCA9IGRvY3VtZW50KSB7XHJcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBOb2RlKSByZXR1cm4gZTtcclxuICAgICAgICByZXR1cm4gYmFzZUVsZW1lbnQucXVlcnlTZWxlY3RvcihlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgY3JlYXRlRWxlbWVudCh0YWcsIG9wdGlvbnMgPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IHtjbGFzc05hbWUsIGlkLCB0YXJnZXR9ID0gb3B0aW9ucztcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xyXG4gICAgICAgIGlmIChjbGFzc05hbWUpIGVsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lO1xyXG4gICAgICAgIGlmIChpZCkgZWxlbWVudC5pZCA9IGlkO1xyXG4gICAgICAgIGlmICh0YXJnZXQpIHRoaXMuZ2V0RWxlbWVudCh0YXJnZXQpLmFwcGVuZChlbGVtZW50KTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudDtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmVtb3ZlU3R5bGUoaWQpIHtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmdldEVsZW1lbnQoYCMke2lkfWAsIHRoaXMuYmRTdHlsZXMpO1xyXG4gICAgICAgIGlmIChleGlzdHMpIGV4aXN0cy5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaW5qZWN0U3R5bGUoaWQsIGNzcykge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5nZXRFbGVtZW50KGAjJHtpZH1gLCB0aGlzLmJkU3R5bGVzKSB8fCB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCB7aWR9KTtcclxuICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzcztcclxuICAgICAgICB0aGlzLmJkU3R5bGVzLmFwcGVuZChzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlbW92ZVRoZW1lKGlkKSB7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5nZXRFbGVtZW50KGAjJHtpZH1gLCB0aGlzLmJkVGhlbWVzKTtcclxuICAgICAgICBpZiAoZXhpc3RzKSBleGlzdHMucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGluamVjdFRoZW1lKGlkLCBjc3MpIHtcclxuICAgICAgICBjb25zdCBzdHlsZSA9IHRoaXMuZ2V0RWxlbWVudChgIyR7aWR9YCwgdGhpcy5iZFRoZW1lcykgfHwgdGhpcy5jcmVhdGVFbGVtZW50KFwic3R5bGVcIiwge2lkfSk7XHJcbiAgICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3M7XHJcbiAgICAgICAgdGhpcy5iZFRoZW1lcy5hcHBlbmQoc3R5bGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyB1cGRhdGVDdXN0b21DU1MoY3NzKSB7XHJcbiAgICAgICAgdGhpcy5iZEN1c3RvbUNTUy50ZXh0Q29udGVudCA9IGNzcztcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/dommanager.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, \"default\", function() { return DOMManager; });\nclass DOMManager {\n static get bdHead() {\n return this.getElement(\"bd-head\");\n }\n\n static get bdBody() {\n return this.getElement(\"bd-body\");\n }\n\n static get bdScripts() {\n return this.getElement(\"bd-scripts\");\n }\n\n static get bdStyles() {\n return this.getElement(\"bd-styles\");\n }\n\n static get bdThemes() {\n return this.getElement(\"bd-themes\");\n }\n\n static get bdCustomCSS() {\n return this.getElement(\"#customcss\");\n } // static get bdTooltips() { return this.getElement(\"bd-tooltips\") || this.createElement(\"bd-tooltips\").appendTo(this.bdBody); }\n // static get bdModals() { return this.getElement(\"bd-modals\") || this.createElement(\"bd-modals\").appendTo(this.bdBody); }\n // static get bdToasts() { return this.getElement(\"bd-toasts\") || this.createElement(\"bd-toasts\").appendTo(this.bdBody); }\n\n\n static initialize() {\n this.createElement(\"bd-head\", {\n target: document.head\n });\n this.createElement(\"bd-body\", {\n target: document.body\n });\n this.createElement(\"bd-scripts\", {\n target: this.bdHead\n });\n this.createElement(\"bd-styles\", {\n target: this.bdHead\n });\n this.createElement(\"bd-themes\", {\n target: this.bdHead\n });\n this.createElement(\"style\", {\n id: \"customcss\",\n target: this.bdHead\n });\n }\n\n static escapeID(id) {\n return id.replace(/^[^a-z]+|[^\\w-]+/gi, \"-\");\n }\n\n static getElement(e, baseElement = document) {\n if (e instanceof Node) return e;\n return baseElement.querySelector(e);\n }\n\n static createElement(tag, options = {}) {\n const {\n className,\n id,\n target\n } = options;\n const element = document.createElement(tag);\n if (className) element.className = className;\n if (id) element.id = id;\n if (target) this.getElement(target).append(element);\n return element;\n }\n\n static removeStyle(id) {\n id = this.escapeID(id);\n const exists = this.getElement(`#${id}`, this.bdStyles);\n if (exists) exists.remove();\n }\n\n static injectStyle(id, css) {\n id = this.escapeID(id);\n const style = this.getElement(`#${id}`, this.bdStyles) || this.createElement(\"style\", {\n id\n });\n style.textContent = css;\n this.bdStyles.append(style);\n }\n\n static removeTheme(id) {\n id = this.escapeID(id);\n const exists = this.getElement(`#${id}`, this.bdThemes);\n if (exists) exists.remove();\n }\n\n static injectTheme(id, css) {\n id = this.escapeID(id);\n const style = this.getElement(`#${id}`, this.bdThemes) || this.createElement(\"style\", {\n id\n });\n style.textContent = css;\n this.bdThemes.append(style);\n }\n\n static updateCustomCSS(css) {\n this.bdCustomCSS.textContent = css;\n }\n\n static removeScript(id) {\n id = this.escapeID(id);\n const exists = this.getElement(`#${id}`, this.bdScripts);\n if (exists) exists.remove();\n }\n\n static injectScript(id, url) {\n id = this.escapeID(id);\n return new Promise(resolve => {\n const script = this.getElement(`#${id}`, this.bdScripts) || this.createElement(\"script\", {\n id\n });\n script.src = url;\n script.onload = resolve;\n this.bdScripts.append(script);\n });\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvZG9tbWFuYWdlci5qcz9jZDVjIl0sIm5hbWVzIjpbIkRPTU1hbmFnZXIiLCJiZEhlYWQiLCJnZXRFbGVtZW50IiwiYmRCb2R5IiwiYmRTY3JpcHRzIiwiYmRTdHlsZXMiLCJiZFRoZW1lcyIsImJkQ3VzdG9tQ1NTIiwiaW5pdGlhbGl6ZSIsImNyZWF0ZUVsZW1lbnQiLCJ0YXJnZXQiLCJkb2N1bWVudCIsImhlYWQiLCJib2R5IiwiaWQiLCJlc2NhcGVJRCIsInJlcGxhY2UiLCJlIiwiYmFzZUVsZW1lbnQiLCJOb2RlIiwicXVlcnlTZWxlY3RvciIsInRhZyIsIm9wdGlvbnMiLCJjbGFzc05hbWUiLCJlbGVtZW50IiwiYXBwZW5kIiwicmVtb3ZlU3R5bGUiLCJleGlzdHMiLCJyZW1vdmUiLCJpbmplY3RTdHlsZSIsImNzcyIsInN0eWxlIiwidGV4dENvbnRlbnQiLCJyZW1vdmVUaGVtZSIsImluamVjdFRoZW1lIiwidXBkYXRlQ3VzdG9tQ1NTIiwicmVtb3ZlU2NyaXB0IiwiaW5qZWN0U2NyaXB0IiwidXJsIiwiUHJvbWlzZSIsInJlc29sdmUiLCJzY3JpcHQiLCJzcmMiLCJvbmxvYWQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBZSxNQUFNQSxVQUFOLENBQWlCO0FBRTVCLGFBQVdDLE1BQVgsR0FBb0I7QUFBQyxXQUFPLEtBQUtDLFVBQUwsQ0FBZ0IsU0FBaEIsQ0FBUDtBQUFtQzs7QUFDeEQsYUFBV0MsTUFBWCxHQUFvQjtBQUFDLFdBQU8sS0FBS0QsVUFBTCxDQUFnQixTQUFoQixDQUFQO0FBQW1DOztBQUN4RCxhQUFXRSxTQUFYLEdBQXVCO0FBQUMsV0FBTyxLQUFLRixVQUFMLENBQWdCLFlBQWhCLENBQVA7QUFBc0M7O0FBQzlELGFBQVdHLFFBQVgsR0FBc0I7QUFBQyxXQUFPLEtBQUtILFVBQUwsQ0FBZ0IsV0FBaEIsQ0FBUDtBQUFxQzs7QUFDNUQsYUFBV0ksUUFBWCxHQUFzQjtBQUFDLFdB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VUFBTCxDQUFpQixJQUFHWSxFQUFHLEVBQXZCLEVBQTBCLEtBQUtWLFNBQS9CLEtBQTZDLEtBQUtLLGFBQUwsQ0FBbUIsUUFBbkIsRUFBNkI7QUFBQ0s7QUFBRCxPQUE3QixDQUE1RDtBQUNBMkIsWUFBTSxDQUFDQyxHQUFQLEdBQWFKLEdBQWI7QUFDQUcsWUFBTSxDQUFDRSxNQUFQLEdBQWdCSCxPQUFoQjtBQUNBLFdBQUtwQyxTQUFMLENBQWVxQixNQUFmLENBQXNCZ0IsTUFBdEI7QUFDSCxLQUxNLENBQVA7QUFNSDs7QUFuRjJCIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvZG9tbWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTU1hbmFnZXIge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgYmRIZWFkKCkge3JldHVybiB0aGlzLmdldEVsZW1lbnQoXCJiZC1oZWFkXCIpO31cclxuICAgIHN0YXRpYyBnZXQgYmRCb2R5KCkge3JldHVybiB0aGlzLmdldEVsZW1lbnQoXCJiZC1ib2R5XCIpO31cclxuICAgIHN0YXRpYyBnZXQgYmRTY3JpcHRzKCkge3JldHVybiB0aGlzLmdldEVsZW1lbnQoXCJiZC1zY3JpcHRzXCIpO31cclxuICAgIHN0YXRpYyBnZXQgYmRTdHlsZXMoKSB7cmV0dXJuIHRoaXMuZ2V0RWxlbWVudChcImJkLXN0eWxlc1wiKTt9XHJcbiAgICBzdGF0aWMgZ2V0IGJkVGhlbWVzKCkge3JldHVybiB0aGlzLmdldEVsZW1lbnQoXCJiZC10aGVtZXNcIik7fVxyXG4gICAgc3RhdGljIGdldCBiZEN1c3RvbUNTUygpIHtyZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiI2N1c3RvbWNzc1wiKTt9XHJcbiAgICAvLyBzdGF0aWMgZ2V0IGJkVG9vbHRpcHMoKSB7IHJldHVybiB0aGlzLmdldEVsZW1lbnQoXCJiZC10b29sdGlwc1wiKSB8fCB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJiZC10b29sdGlwc1wiKS5hcHBlbmRUbyh0aGlzLmJkQm9keSk7IH1cclxuICAgIC8vIHN0YXRpYyBnZXQgYmRNb2RhbHMoKSB7IHJldHVybiB0aGlzLmdldEVsZW1lbnQoXCJiZC1tb2RhbHNcIikgfHwgdGhpcy5jcmVhdGVFbGVtZW50KFwiYmQtbW9kYWxzXCIpLmFwcGVuZFRvKHRoaXMuYmRCb2R5KTsgfVxyXG4gICAgLy8gc3RhdGljIGdldCBiZFRvYXN0cygpIHsgcmV0dXJuIHRoaXMuZ2V0RWxlbWVudChcImJkLXRvYXN0c1wiKSB8fCB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJiZC10b2FzdHNcIikuYXBwZW5kVG8odGhpcy5iZEJvZHkpOyB9XHJcblxyXG4gICAgc3RhdGljIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVFbGVtZW50KFwiYmQtaGVhZFwiLCB7dGFyZ2V0OiBkb2N1bWVudC5oZWFkfSk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVFbGVtZW50KFwiYmQtYm9keVwiLCB7dGFyZ2V0OiBkb2N1bWVudC5ib2R5fSk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVFbGVtZW50KFwiYmQtc2NyaXB0c1wiLCB7dGFyZ2V0OiB0aGlzLmJkSGVhZH0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudChcImJkLXN0eWxlc1wiLCB7dGFyZ2V0OiB0aGlzLmJkSGVhZH0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudChcImJkLXRoZW1lc1wiLCB7dGFyZ2V0OiB0aGlzLmJkSGVhZH0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIHtpZDogXCJjdXN0b21jc3NcIiwgdGFyZ2V0OiB0aGlzLmJkSGVhZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBlc2NhcGVJRChpZCkge1xyXG4gICAgICAgIHJldHVybiBpZC5yZXBsYWNlKC9eW15hLXpdK3xbXlxcdy1dKy9naSwgXCItXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRFbGVtZW50KGUsIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQpIHtcclxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vZGUpIHJldHVybiBlO1xyXG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KHRhZywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3Qge2NsYXNzTmFtZSwgaWQsIHRhcmdldH0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XHJcbiAgICAgICAgaWYgKGNsYXNzTmFtZSkgZWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICAgICAgaWYgKGlkKSBlbGVtZW50LmlkID0gaWQ7XHJcbiAgICAgICAgaWYgKHRhcmdldCkgdGhpcy5nZXRFbGVtZW50KHRhcmdldCkuYXBwZW5kKGVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZW1vdmVTdHlsZShpZCkge1xyXG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5nZXRFbGVtZW50KGAjJHtpZH1gLCB0aGlzLmJkU3R5bGVzKTtcclxuICAgICAgICBpZiAoZXhpc3RzKSBleGlzdHMucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIGluamVjdFN0eWxlKGlkLCBjc3MpIHtcclxuICAgICAgICBpZCA9IHRoaXMuZXNjYXBlSUQoaWQpO1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5nZXRFbGVtZW50KGAjJHtpZH1gLCB0aGlzLmJkU3R5bGVzKSB8fCB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCB7aWR9KTtcclxuICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzcztcclxuICAgICAgICB0aGlzLmJkU3R5bGVzLmFwcGVuZChzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlbW92ZVRoZW1lKGlkKSB7XHJcbiAgICAgICAgaWQgPSB0aGlzLmVzY2FwZUlEKGlkKTtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmdldEVsZW1lbnQoYCMke2lkfWAsIHRoaXMuYmRUaGVtZXMpO1xyXG4gICAgICAgIGlmIChleGlzdHMpIGV4aXN0cy5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaW5qZWN0VGhlbWUoaWQsIGNzcykge1xyXG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmdldEVsZW1lbnQoYCMke2lkfWAsIHRoaXMuYmRUaGVtZXMpIHx8IHRoaXMuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIHtpZH0pO1xyXG4gICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gY3NzO1xyXG4gICAgICAgIHRoaXMuYmRUaGVtZXMuYXBwZW5kKHN0eWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgdXBkYXRlQ3VzdG9tQ1NTKGNzcykge1xyXG4gICAgICAgIHRoaXMuYmRDdXN0b21DU1MudGV4dENvbnRlbnQgPSBjc3M7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHJlbW92ZVNjcmlwdChpZCkge1xyXG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gdGhpcy5nZXRFbGVtZW50KGAjJHtpZH1gLCB0aGlzLmJkU2NyaXB0cyk7XHJcbiAgICAgICAgaWYgKGV4aXN0cykgZXhpc3RzLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpbmplY3RTY3JpcHQoaWQsIHVybCkge1xyXG4gICAgICAgIGlkID0gdGhpcy5lc2NhcGVJRChpZCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzY3JpcHQgPSB0aGlzLmdldEVsZW1lbnQoYCMke2lkfWAsIHRoaXMuYmRTY3JpcHRzKSB8fCB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiwge2lkfSk7XHJcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSB1cmw7XHJcbiAgICAgICAgICAgIHNjcmlwdC5vbmxvYWQgPSByZXNvbHZlO1xyXG4gICAgICAgICAgICB0aGlzLmJkU2NyaXB0cy5hcHBlbmQoc2NyaXB0KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/dommanager.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, Utilities, WebpackModules, DiscordModules, Settings */ +/*! exports provided: React, ReactDOM, BDV2, BdApi, Core, ContentManager, DataStore, Logger, Events, PluginManager, DOMManager, ThemeManager, Patcher, Utilities, WebpackModules, DiscordModules, Settings */ /***/ (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\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\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcz8xNGRiIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdERPTSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBSUE7Q0FFQTs7Q0FFQTs7Q0FFQTs7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVPLE1BQU1BLEtBQUssR0FBR0MsdURBQWMsQ0FBQ0QsS0FBN0I7QUFDQSxNQUFNRSxRQUFRLEdBQUdELHVEQUFjLENBQUNDLFFBQWhDIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcyBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL2JkdjJcIjtcclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL3BsdWdpbmFwaVwiO1xyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9jb3JlXCI7XHJcblxyXG5cclxuXHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50bWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG4vLyBpbXBvcnQgRGV2TW9kZSBmcm9tIFwiLi9kZXZtb2RlXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZW1pdHRlclwiO1xyXG4vLyBpbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vZW1vdGVzXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuLy8gaW1wb3J0IFB1YmxpY1NlcnZlcnMgZnJvbSBcIi4vcHVibGljc2VydmVyc1wiO1xyXG5pbXBvcnQgVGhlbWVNYW5hZ2VyIGZyb20gXCIuL3RoZW1lbWFuYWdlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcbmltcG9ydCBET01NYW5hZ2VyIGZyb20gXCIuL2RvbW1hbmFnZXJcIjtcclxuaW1wb3J0IExvZ2dlciBmcm9tIFwiLi9sb2dnZXJcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBSZWFjdCA9IERpc2NvcmRNb2R1bGVzLlJlYWN0O1xyXG5leHBvcnQgY29uc3QgUmVhY3RET00gPSBEaXNjb3JkTW9kdWxlcy5SZWFjdERPTTtcclxuXHJcbmV4cG9ydCB7QkRWMiwgQmRBcGksIENvcmUsIENvbnRlbnRNYW5hZ2VyLCBEYXRhU3RvcmUsIExvZ2dlcixcclxuICAgICAgICBFdmVudHMsIFBsdWdpbk1hbmFnZXIsIERPTU1hbmFnZXIsIFRoZW1lTWFuYWdlcixcclxuICAgICAgICBVdGlsaXRpZXMsIFdlYnBhY2tNb2R1bGVzLCBEaXNjb3JkTW9kdWxlcywgU2V0dGluZ3N9O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\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 _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"); /***/ }), @@ -459,6 +459,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export (binding) * /***/ }), +/***/ "./src/modules/patcher.js": +/*!********************************!*\ + !*** ./src/modules/patcher.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 Patcher; });\n/* harmony import */ var _logger__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./logger */ \"./src/modules/logger.js\");\n/* harmony import */ var _discordmodules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./discordmodules */ \"./src/modules/discordmodules.js\");\n/* harmony import */ var _webpackmodules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./webpackmodules */ \"./src/modules/webpackmodules.js\");\n/**\r\n * Patcher that can patch other functions allowing you to run code before, after or\r\n * instead of the original function. Can also alter arguments and return values.\r\n *\r\n * This is from Zerebos' library {@link https://github.com/JsSucks/BetterDiscordApp/blob/master/client/src/modules/patcher.js}\r\n *\r\n * @module Patcher\r\n * @version 0.0.2\r\n */\n\n\n\nclass Patcher {\n static get patches() {\n return this._patches || (this._patches = []);\n }\n /**\r\n * Returns all the patches done by a specific caller\r\n * @param {string} name - Name of the patch caller\r\n * @method\r\n */\n\n\n static getPatchesByCaller(name) {\n if (!name) return [];\n const patches = [];\n\n for (const patch of this.patches) {\n for (const childPatch of patch.children) {\n if (childPatch.caller === name) patches.push(childPatch);\n }\n }\n\n return patches;\n }\n /**\r\n * Unpatches all patches passed, or when a string is passed unpatches all\r\n * patches done by that specific caller.\r\n * @param {Array|string} patches - Either an array of patches to unpatch or a caller name\r\n */\n\n\n static unpatchAll(patches) {\n if (typeof patches === \"string\") patches = this.getPatchesByCaller(patches);\n\n for (const patch of patches) {\n patch.unpatch();\n }\n }\n\n static resolveModule(module) {\n if (module instanceof Function || module instanceof Object && !(module instanceof Array)) return module;\n if (typeof module === \"string\") return _discordmodules__WEBPACK_IMPORTED_MODULE_1__[\"default\"][module];\n if (module instanceof Array) return _webpackmodules__WEBPACK_IMPORTED_MODULE_2__[\"default\"].findByUniqueProperties(module);\n return null;\n }\n\n static makeOverride(patch) {\n return function () {\n let returnValue = undefined;\n if (!patch.children || !patch.children.length) return patch.originalFunction.apply(this, arguments);\n\n for (const superPatch of patch.children.filter(c => c.type === \"before\")) {\n try {\n superPatch.callback(this, arguments);\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(\"Patcher\", `Could not fire before callback of ${patch.functionName} for ${superPatch.caller}`, err);\n }\n }\n\n const insteads = patch.children.filter(c => c.type === \"instead\");\n\n if (!insteads.length) {\n returnValue = patch.originalFunction.apply(this, arguments);\n } else {\n for (const insteadPatch of insteads) {\n try {\n const tempReturn = insteadPatch.callback(this, arguments, patch.originalFunction.bind(this));\n if (typeof tempReturn !== \"undefined\") returnValue = tempReturn;\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(\"Patcher\", `Could not fire instead callback of ${patch.functionName} for ${insteadPatch.caller}`, err);\n }\n }\n }\n\n for (const slavePatch of patch.children.filter(c => c.type === \"after\")) {\n try {\n const tempReturn = slavePatch.callback(this, arguments, returnValue);\n if (typeof tempReturn !== \"undefined\") returnValue = tempReturn;\n } catch (err) {\n _logger__WEBPACK_IMPORTED_MODULE_0__[\"default\"].err(\"Patcher\", `Could not fire after callback of ${patch.functionName} for ${slavePatch.caller}`, err);\n }\n }\n\n return returnValue;\n };\n }\n\n static rePatch(patch) {\n patch.proxyFunction = patch.module[patch.functionName] = this.makeOverride(patch);\n }\n\n static makePatch(module, functionName, name) {\n const patch = {\n name,\n module,\n functionName,\n originalFunction: module[functionName],\n proxyFunction: null,\n revert: () => {\n // Calling revert will destroy any patches added to the same module after this\n patch.module[patch.functionName] = patch.originalFunction;\n patch.proxyFunction = null;\n patch.children = [];\n },\n counter: 0,\n children: []\n };\n patch.proxyFunction = module[functionName] = this.makeOverride(patch);\n return this.patches.push(patch), patch;\n }\n /**\r\n * Function with no arguments and no return value that may be called to revert changes made by {@link module:Patcher}, restoring (unpatching) original method.\r\n * @callback module:Patcher~unpatch\r\n */\n\n /**\r\n * A callback that modifies method logic. This callback is called on each call of the original method and is provided all data about original call. Any of the data can be modified if necessary, but do so wisely.\r\n *\r\n * The third argument for the callback will be `undefined` for `before` patches. `originalFunction` for `instead` patches and `returnValue` for `after` patches.\r\n *\r\n * @callback module:Patcher~patchCallback\r\n * @param {object} thisObject - `this` in the context of the original function.\r\n * @param {arguments} arguments - The original arguments of the original function.\r\n * @param {(function|*)} extraValue - For `instead` patches, this is the original function from the module. For `after` patches, this is the return value of the function.\r\n * @return {*} Makes sense only when using an `instead` or `after` patch. If something other than `undefined` is returned, the returned value replaces the value of `returnValue`. If used for `before` the return value is ignored.\r\n */\n\n /**\r\n * This method patches onto another function, allowing your code to run beforehand.\r\n * Using this, you are also able to modify the incoming arguments before the original method is run.\r\n *\r\n * @param {string} caller - Name of the caller of the patch function. Using this you can undo all patches with the same name using {@link module:Patcher.unpatchAll}. Use `\"\"` if you don't care.\r\n * @param {object} moduleToPatch - Object with the function to be patched. Can also patch an object's prototype.\r\n * @param {string} functionName - Name of the method to be patched\r\n * @param {module:Patcher~patchCallback} callback - Function to run before the original method\r\n * @param {object} options - Object used to pass additional options.\r\n * @param {string} [options.displayName] You can provide meaningful name for class/object provided in `what` param for logging purposes. By default, this function will try to determine name automatically.\r\n * @param {boolean} [options.forcePatch=true] Set to `true` to patch even if the function doesnt exist. (Adds noop function in place).\r\n * @return {module:Patcher~unpatch} Function with no arguments and no return value that should be called to cancel (unpatch) this patch. You should save and run it when your plugin is stopped.\r\n */\n\n\n static before(caller, moduleToPatch, functionName, callback, options = {}) {\n return this.pushChildPatch(caller, moduleToPatch, functionName, callback, Object.assign(options, {\n type: \"before\"\n }));\n }\n /**\r\n * This method patches onto another function, allowing your code to run after.\r\n * Using this, you are also able to modify the return value, using the return of your code instead.\r\n *\r\n * @param {string} caller - Name of the caller of the patch function. Using this you can undo all patches with the same name using {@link module:Patcher.unpatchAll}. Use `\"\"` if you don't care.\r\n * @param {object} moduleToPatch - Object with the function to be patched. Can also patch an object's prototype.\r\n * @param {string} functionName - Name of the method to be patched\r\n * @param {module:Patcher~patchCallback} callback - Function to run instead of the original method\r\n * @param {object} options - Object used to pass additional options.\r\n * @param {string} [options.displayName] You can provide meaningful name for class/object provided in `what` param for logging purposes. By default, this function will try to determine name automatically.\r\n * @param {boolean} [options.forcePatch=true] Set to `true` to patch even if the function doesnt exist. (Adds noop function in place).\r\n * @return {module:Patcher~unpatch} Function with no arguments and no return value that should be called to cancel (unpatch) this patch. You should save and run it when your plugin is stopped.\r\n */\n\n\n static after(caller, moduleToPatch, functionName, callback, options = {}) {\n return this.pushChildPatch(caller, moduleToPatch, functionName, callback, Object.assign(options, {\n type: \"after\"\n }));\n }\n /**\r\n * This method patches onto another function, allowing your code to run instead.\r\n * Using this, you are also able to modify the return value, using the return of your code instead.\r\n *\r\n * @param {string} caller - Name of the caller of the patch function. Using this you can undo all patches with the same name using {@link module:Patcher.unpatchAll}. Use `\"\"` if you don't care.\r\n * @param {object} moduleToPatch - Object with the function to be patched. Can also patch an object's prototype.\r\n * @param {string} functionName - Name of the method to be patched\r\n * @param {module:Patcher~patchCallback} callback - Function to run after the original method\r\n * @param {object} options - Object used to pass additional options.\r\n * @param {string} [options.displayName] You can provide meaningful name for class/object provided in `what` param for logging purposes. By default, this function will try to determine name automatically.\r\n * @param {boolean} [options.forcePatch=true] Set to `true` to patch even if the function doesnt exist. (Adds noop function in place).\r\n * @return {module:Patcher~unpatch} Function with no arguments and no return value that should be called to cancel (unpatch) this patch. You should save and run it when your plugin is stopped.\r\n */\n\n\n static instead(caller, moduleToPatch, functionName, callback, options = {}) {\n return this.pushChildPatch(caller, moduleToPatch, functionName, callback, Object.assign(options, {\n type: \"instead\"\n }));\n }\n /**\r\n * This method patches onto another function, allowing your code to run before, instead or after the original function.\r\n * Using this you are able to modify the incoming arguments before the original function is run as well as the return\r\n * value before the original function actually returns.\r\n *\r\n * @param {string} caller - Name of the caller of the patch function. Using this you can undo all patches with the same name using {@link module:Patcher.unpatchAll}. Use `\"\"` if you don't care.\r\n * @param {object} moduleToPatch - Object with the function to be patched. Can also patch an object's prototype.\r\n * @param {string} functionName - Name of the method to be patched\r\n * @param {module:Patcher~patchCallback} callback - Function to run after the original method\r\n * @param {object} options - Object used to pass additional options.\r\n * @param {string} [options.type=after] - Determines whether to run the function `before`, `instead`, or `after` the original.\r\n * @param {string} [options.displayName] You can provide meaningful name for class/object provided in `what` param for logging purposes. By default, this function will try to determine name automatically.\r\n * @param {boolean} [options.forcePatch=true] Set to `true` to patch even if the function doesnt exist. (Adds noop function in place).\r\n * @return {module:Patcher~unpatch} Function with no arguments and no return value that should be called to cancel (unpatch) this patch. You should save and run it when your plugin is stopped.\r\n */\n\n\n static pushChildPatch(caller, moduleToPatch, functionName, callback, options = {}) {\n const {\n type = \"after\",\n forcePatch = true\n } = options;\n const module = this.resolveModule(moduleToPatch);\n if (!module) return null;\n if (!module[functionName] && forcePatch) module[functionName] = function () {};\n if (!(module[functionName] instanceof Function)) return null;\n if (typeof moduleToPatch === \"string\") options.displayName = moduleToPatch;\n const displayName = options.displayName || module.displayName || module.name || module.constructor.displayName || module.constructor.name;\n const patchId = `${displayName}.${functionName}`;\n const patch = this.patches.find(p => p.module == module && p.functionName == functionName) || this.makePatch(module, functionName, patchId);\n if (!patch.proxyFunction) this.rePatch(patch);\n const child = {\n caller,\n type,\n id: patch.counter,\n callback,\n unpatch: () => {\n patch.children.splice(patch.children.findIndex(cpatch => cpatch.id === child.id && cpatch.type === type), 1);\n\n if (patch.children.length <= 0) {\n const patchNum = this.patches.findIndex(p => p.module == module && p.functionName == functionName);\n this.patches[patchNum].revert();\n this.patches.splice(patchNum, 1);\n }\n }\n };\n patch.children.push(child);\n patch.counter++;\n return child.unpatch;\n }\n\n}//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvcGF0Y2hlci5qcz8yNTUwIl0sIm5hbWVzIjpbIlBhdGNoZXIiLCJwYXRjaGVzIiwiX3BhdGNoZXMiLCJnZXRQYXRjaGVzQnlDYWxsZXIiLCJuYW1lIiwicGF0Y2giLCJjaGlsZFBhdGNoIiwiY2hpbGRyZW4iLCJjYWxsZXIiLCJwdXNoIiwidW5wYXRjaEFsbCIsInVucGF0Y2giLCJyZXNvbHZlTW9kdWxlIiwibW9kdWxlIiwiRnVuY3Rpb24iLCJPYmplY3QiLCJBcnJheSIsIkRpc2NvcmRNb2R1bGVzIiwiV2VicGFja01vZHVsZXMiLCJmaW5kQnlVbmlxdWVQcm9wZXJ0aWVzIiwibWFrZU92ZXJyaWRlIiwicmV0dXJuVmFsdWUiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJvcmlnaW5hbEZ1bmN0aW9uIiwiYXBwbHkiLCJhcmd1bWVudHMiLCJzdXBlclBhdGNoIiwiZmlsdGVyIiwiYyIsInR5cGUiLCJjYWxsYmFjayIsImVyciIsIkxvZ2dlciIsImZ1bmN0aW9uTmFtZSIsImluc3RlYWRzIiwiaW5zdGVhZFBhdGNoIiwidGVtcFJldHVybiIsImJpbmQiLCJzbGF2ZVBhdGNoIiwicmVQYXRjaCIsInByb3h5RnVuY3Rpb24iLCJtYWtlUGF0Y2giLCJyZXZlcnQiLCJjb3VudGVyIiwiYmVmb3JlIiwibW9kdWxlVG9QYXRjaCIsIm9wdGlvbnMiLCJwdXNoQ2hpbGRQYXRjaCIsImFzc2lnbiIsImFmdGVyIiwiaW5zdGVhZCIsImZvcmNlUGF0Y2giLCJkaXNwbGF5TmFtZSIsImNvbnN0cnVjdG9yIiwicGF0Y2hJZCIsImZpbmQiLCJwIiwiY2hpbGQiLCJpZCIsInNwbGljZSIsImZpbmRJbmRleCIsImNwYXRjaCIsInBhdGNoTnVtIl0sIm1hcHBpbmdzIjoiQUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7OztBQVVBO0FBQ0E7QUFDQTtBQUVlLE1BQU1BLE9BQU4sQ0FBYztBQUV6QixhQUFXQyxPQUFY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QUE3RSxDQUF0QixFQUEwRyxDQUExRzs7QUFDQSxZQUFJekIsS0FBSyxDQUFDRSxRQUFOLENBQWVnQixNQUFmLElBQXlCLENBQTdCLEVBQWdDO0FBQzNDLGdCQUFNd0MsUUFBUSxHQUFHLEtBQUs5RCxPQUFMLENBQWE0RCxTQUFiLENBQXVCSixDQUFDLElBQUlBLENBQUMsQ0FBQzVDLE1BQUYsSUFBWUEsTUFBWixJQUFzQjRDLENBQUMsQ0FBQ3ZCLFlBQUYsSUFBa0JBLFlBQXBFLENBQWpCO0FBQ0EsZUFBS2pDLE9BQUwsQ0FBYThELFFBQWIsRUFBdUJwQixNQUF2QjtBQUNBLGVBQUsxQyxPQUFMLENBQWEyRCxNQUFiLENBQW9CRyxRQUFwQixFQUE4QixDQUE5QjtBQUNBO0FBQ1E7QUFaUyxLQUFkO0FBY0ExRCxTQUFLLENBQUNFLFFBQU4sQ0FBZUUsSUFBZixDQUFvQmlELEtBQXBCO0FBQ0FyRCxTQUFLLENBQUN1QyxPQUFOO0FBQ0EsV0FBT2MsS0FBSyxDQUFDL0MsT0FBYjtBQUNIOztBQWxOd0IiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9wYXRjaGVyLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFBhdGNoZXIgdGhhdCBjYW4gcGF0Y2ggb3RoZXIgZnVuY3Rpb25zIGFsbG93aW5nIHlvdSB0byBydW4gY29kZSBiZWZvcmUsIGFmdGVyIG9yXHJcbiAqIGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIGZ1bmN0aW9uLiBDYW4gYWxzbyBhbHRlciBhcmd1bWVudHMgYW5kIHJldHVybiB2YWx1ZXMuXHJcbiAqXHJcbiAqIFRoaXMgaXMgZnJvbSBaZXJlYm9zJyBsaWJyYXJ5IHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vSnNTdWNrcy9CZXR0ZXJEaXNjb3JkQXBwL2Jsb2IvbWFzdGVyL2NsaWVudC9zcmMvbW9kdWxlcy9wYXRjaGVyLmpzfVxyXG4gKlxyXG4gKiBAbW9kdWxlIFBhdGNoZXJcclxuICogQHZlcnNpb24gMC4wLjJcclxuICovXHJcblxyXG5pbXBvcnQgTG9nZ2VyIGZyb20gXCIuL2xvZ2dlclwiO1xyXG5pbXBvcnQgRGlzY29yZE1vZHVsZXMgZnJvbSBcIi4vZGlzY29yZG1vZHVsZXNcIjtcclxuaW1wb3J0IFdlYnBhY2tNb2R1bGVzIGZyb20gXCIuL3dlYnBhY2ttb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYXRjaGVyIHtcclxuXHJcbiAgICBzdGF0aWMgZ2V0IHBhdGNoZXMoKSB7IHJldHVybiB0aGlzLl9wYXRjaGVzIHx8ICh0aGlzLl9wYXRjaGVzID0gW10pOyB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZXR1cm5zIGFsbCB0aGUgcGF0Y2hlcyBkb25lIGJ5IGEgc3BlY2lmaWMgY2FsbGVyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIE5hbWUgb2YgdGhlIHBhdGNoIGNhbGxlclxyXG4gICAgICogQG1ldGhvZFxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgZ2V0UGF0Y2hlc0J5Q2FsbGVyKG5hbWUpIHtcclxuXHRcdGlmICghbmFtZSkgcmV0dXJuIFtdO1xyXG4gICAgICAgIGNvbnN0IHBhdGNoZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IHBhdGNoIG9mIHRoaXMucGF0Y2hlcykge1xyXG5cdFx0XHRmb3IgKGNvbnN0IGNoaWxkUGF0Y2ggb2YgcGF0Y2guY2hpbGRyZW4pIHtcclxuXHRcdFx0XHRpZiAoY2hpbGRQYXRjaC5jYWxsZXIgPT09IG5hbWUpIHBhdGNoZXMucHVzaChjaGlsZFBhdGNoKTtcclxuXHRcdFx0fVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGF0Y2hlcztcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVucGF0Y2hlcyBhbGwgcGF0Y2hlcyBwYXNzZWQsIG9yIHdoZW4gYSBzdHJpbmcgaXMgcGFzc2VkIHVucGF0Y2hlcyBhbGxcclxuICAgICAqIHBhdGNoZXMgZG9uZSBieSB0aGF0IHNwZWNpZmljIGNhbGxlci5cclxuICAgICAqIEBwYXJhbSB7QXJyYXl8c3RyaW5nfSBwYXRjaGVzIC0gRWl0aGVyIGFuIGFycmF5IG9mIHBhdGNoZXMgdG8gdW5wYXRjaCBvciBhIGNhbGxlciBuYW1lXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyB1bnBhdGNoQWxsKHBhdGNoZXMpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHBhdGNoZXMgPT09IFwic3RyaW5nXCIpIHBhdGNoZXMgPSB0aGlzLmdldFBhdGNoZXNCeUNhbGxlcihwYXRjaGVzKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBwYXRjaCBvZiBwYXRjaGVzKSB7XHJcblx0XHRcdHBhdGNoLnVucGF0Y2goKTtcclxuICAgICAgICB9XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgcmVzb2x2ZU1vZHVsZShtb2R1bGUpIHtcclxuICAgICAgICBpZiAobW9kdWxlIGluc3RhbmNlb2YgRnVuY3Rpb24gfHwgKG1vZHVsZSBpbnN0YW5jZW9mIE9iamVjdCAmJiAhKG1vZHVsZSBpbnN0YW5jZW9mIEFycmF5KSkpIHJldHVybiBtb2R1bGU7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwic3RyaW5nXCIpIHJldHVybiBEaXNjb3JkTW9kdWxlc1ttb2R1bGVdO1xyXG4gICAgICAgIGlmIChtb2R1bGUgaW5zdGFuY2VvZiBBcnJheSkgcmV0dXJuIFdlYnBhY2tNb2R1bGVzLmZpbmRCeVVuaXF1ZVByb3BlcnRpZXMobW9kdWxlKTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuXHR9XHJcblxyXG4gICAgc3RhdGljIG1ha2VPdmVycmlkZShwYXRjaCkge1xyXG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGxldCByZXR1cm5WYWx1ZSA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgaWYgKCFwYXRjaC5jaGlsZHJlbiB8fCAhcGF0Y2guY2hpbGRyZW4ubGVuZ3RoKSByZXR1cm4gcGF0Y2gub3JpZ2luYWxGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHN1cGVyUGF0Y2ggb2YgcGF0Y2guY2hpbGRyZW4uZmlsdGVyKGMgPT4gYy50eXBlID09PSBcImJlZm9yZVwiKSkge1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBzdXBlclBhdGNoLmNhbGxiYWNrKHRoaXMsIGFyZ3VtZW50cyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgTG9nZ2VyLmVycihcIlBhdGNoZXJcIiwgYENvdWxkIG5vdCBmaXJlIGJlZm9yZSBjYWxsYmFjayBvZiAke3BhdGNoLmZ1bmN0aW9uTmFtZX0gZm9yICR7c3VwZXJQYXRjaC5jYWxsZXJ9YCwgZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgaW5zdGVhZHMgPSBwYXRjaC5jaGlsZHJlbi5maWx0ZXIoYyA9PiBjLnR5cGUgPT09IFwiaW5zdGVhZFwiKTtcclxuICAgICAgICAgICAgaWYgKCFpbnN0ZWFkcy5sZW5ndGgpIHtyZXR1cm5WYWx1ZSA9IHBhdGNoLm9yaWdpbmFsRnVuY3Rpb24uYXBwbHkodGhpcywgYXJndW1lbnRzKTt9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBpbnN0ZWFkUGF0Y2ggb2YgaW5zdGVhZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICB0cnkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCB0ZW1wUmV0dXJuID0gaW5zdGVhZFBhdGNoLmNhbGxiYWNrKHRoaXMsIGFyZ3VtZW50cywgcGF0Y2gub3JpZ2luYWxGdW5jdGlvbi5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZih0ZW1wUmV0dXJuKSAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuVmFsdWUgPSB0ZW1wUmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIExvZ2dlci5lcnIoXCJQYXRjaGVyXCIsIGBDb3VsZCBub3QgZmlyZSBpbnN0ZWFkIGNhbGxiYWNrIG9mICR7cGF0Y2guZnVuY3Rpb25OYW1lfSBmb3IgJHtpbnN0ZWFkUGF0Y2guY2FsbGVyfWAsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNsYXZlUGF0Y2ggb2YgcGF0Y2guY2hpbGRyZW4uZmlsdGVyKGMgPT4gYy50eXBlID09PSBcImFmdGVyXCIpKSB7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG5cdFx0XHRcdFx0Y29uc3QgdGVtcFJldHVybiA9IHNsYXZlUGF0Y2guY2FsbGJhY2sodGhpcywgYXJndW1lbnRzLCByZXR1cm5WYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZih0ZW1wUmV0dXJuKSAhPT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuVmFsdWUgPSB0ZW1wUmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIExvZ2dlci5lcnIoXCJQYXRjaGVyXCIsIGBDb3VsZCBub3QgZmlyZSBhZnRlciBjYWxsYmFjayBvZiAke3BhdGNoLmZ1bmN0aW9uTmFtZX0gZm9yICR7c2xhdmVQYXRjaC5jYWxsZXJ9YCwgZXJyKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuVmFsdWU7XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmVQYXRjaChwYXRjaCkge1xyXG4gICAgICAgIHBhdGNoLnByb3h5RnVuY3Rpb24gPSBwYXRjaC5tb2R1bGVbcGF0Y2guZnVuY3Rpb25OYW1lXSA9IHRoaXMubWFrZU92ZXJyaWRlKHBhdGNoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgbWFrZVBhdGNoKG1vZHVsZSwgZnVuY3Rpb25OYW1lLCBuYW1lKSB7XHJcbiAgICAgICAgY29uc3QgcGF0Y2ggPSB7XHJcblx0XHRcdG5hbWUsXHJcbiAgICAgICAgICAgIG1vZHVsZSxcclxuICAgICAgICAgICAgZnVuY3Rpb25OYW1lLFxyXG4gICAgICAgICAgICBvcmlnaW5hbEZ1bmN0aW9uOiBtb2R1bGVbZnVuY3Rpb25OYW1lXSxcclxuICAgICAgICAgICAgcHJveHlGdW5jdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgcmV2ZXJ0OiAoKSA9PiB7IC8vIENhbGxpbmcgcmV2ZXJ0IHdpbGwgZGVzdHJveSBhbnkgcGF0Y2hlcyBhZGRlZCB0byB0aGUgc2FtZSBtb2R1bGUgYWZ0ZXIgdGhpc1xyXG4gICAgICAgICAgICAgICAgcGF0Y2gubW9kdWxlW3BhdGNoLmZ1bmN0aW9uTmFtZV0gPSBwYXRjaC5vcmlnaW5hbEZ1bmN0aW9uO1xyXG4gICAgICAgICAgICAgICAgcGF0Y2gucHJveHlGdW5jdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBwYXRjaC5jaGlsZHJlbiA9IFtdO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjb3VudGVyOiAwLFxyXG4gICAgICAgICAgICBjaGlsZHJlbjogW11cclxuICAgICAgICB9O1xyXG4gICAgICAgIHBhdGNoLnByb3h5RnVuY3Rpb24gPSBtb2R1bGVbZnVuY3Rpb25OYW1lXSA9IHRoaXMubWFrZU92ZXJyaWRlKHBhdGNoKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5wYXRjaGVzLnB1c2gocGF0Y2gpLCBwYXRjaDtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEZ1bmN0aW9uIHdpdGggbm8gYXJndW1lbnRzIGFuZCBubyByZXR1cm4gdmFsdWUgdGhhdCBtYXkgYmUgY2FsbGVkIHRvIHJldmVydCBjaGFuZ2VzIG1hZGUgYnkge0BsaW5rIG1vZHVsZTpQYXRjaGVyfSwgcmVzdG9yaW5nICh1bnBhdGNoaW5nKSBvcmlnaW5hbCBtZXRob2QuXHJcbiAgICAgKiBAY2FsbGJhY2sgbW9kdWxlOlBhdGNoZXJ+dW5wYXRjaFxyXG4gICAgICovXHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBIGNhbGxiYWNrIHRoYXQgbW9kaWZpZXMgbWV0aG9kIGxvZ2ljLiBUaGlzIGNhbGxiYWNrIGlzIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2YgdGhlIG9yaWdpbmFsIG1ldGhvZCBhbmQgaXMgcHJvdmlkZWQgYWxsIGRhdGEgYWJvdXQgb3JpZ2luYWwgY2FsbC4gQW55IG9mIHRoZSBkYXRhIGNhbiBiZSBtb2RpZmllZCBpZiBuZWNlc3NhcnksIGJ1dCBkbyBzbyB3aXNlbHkuXHJcbiAgICAgKlxyXG4gICAgICogVGhlIHRoaXJkIGFyZ3VtZW50IGZvciB0aGUgY2FsbGJhY2sgd2lsbCBiZSBgdW5kZWZpbmVkYCBmb3IgYGJlZm9yZWAgcGF0Y2hlcy4gYG9yaWdpbmFsRnVuY3Rpb25gIGZvciBgaW5zdGVhZGAgcGF0Y2hlcyBhbmQgYHJldHVyblZhbHVlYCBmb3IgYGFmdGVyYCBwYXRjaGVzLlxyXG4gICAgICpcclxuICAgICAqIEBjYWxsYmFjayBtb2R1bGU6UGF0Y2hlcn5wYXRjaENhbGxiYWNrXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gdGhpc09iamVjdCAtIGB0aGlzYCBpbiB0aGUgY29udGV4dCBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0ge2FyZ3VtZW50c30gYXJndW1lbnRzIC0gVGhlIG9yaWdpbmFsIGFyZ3VtZW50cyBvZiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24uXHJcbiAgICAgKiBAcGFyYW0geyhmdW5jdGlvbnwqKX0gZXh0cmFWYWx1ZSAtIEZvciBgaW5zdGVhZGAgcGF0Y2hlcywgdGhpcyBpcyB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gZnJvbSB0aGUgbW9kdWxlLiBGb3IgYGFmdGVyYCBwYXRjaGVzLCB0aGlzIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGZ1bmN0aW9uLlxyXG4gICAgICogQHJldHVybiB7Kn0gTWFrZXMgc2Vuc2Ugb25seSB3aGVuIHVzaW5nIGFuIGBpbnN0ZWFkYCBvciBgYWZ0ZXJgIHBhdGNoLiBJZiBzb21ldGhpbmcgb3RoZXIgdGhhbiBgdW5kZWZpbmVkYCBpcyByZXR1cm5lZCwgdGhlIHJldHVybmVkIHZhbHVlIHJlcGxhY2VzIHRoZSB2YWx1ZSBvZiBgcmV0dXJuVmFsdWVgLiBJZiB1c2VkIGZvciBgYmVmb3JlYCB0aGUgcmV0dXJuIHZhbHVlIGlzIGlnbm9yZWQuXHJcbiAgICAgKi9cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBhdGNoZXMgb250byBhbm90aGVyIGZ1bmN0aW9uLCBhbGxvd2luZyB5b3VyIGNvZGUgdG8gcnVuIGJlZm9yZWhhbmQuXHJcbiAgICAgKiBVc2luZyB0aGlzLCB5b3UgYXJlIGFsc28gYWJsZSB0byBtb2RpZnkgdGhlIGluY29taW5nIGFyZ3VtZW50cyBiZWZvcmUgdGhlIG9yaWdpbmFsIG1ldGhvZCBpcyBydW4uXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNhbGxlciAtIE5hbWUgb2YgdGhlIGNhbGxlciBvZiB0aGUgcGF0Y2ggZnVuY3Rpb24uIFVzaW5nIHRoaXMgeW91IGNhbiB1bmRvIGFsbCBwYXRjaGVzIHdpdGggdGhlIHNhbWUgbmFtZSB1c2luZyB7QGxpbmsgbW9kdWxlOlBhdGNoZXIudW5wYXRjaEFsbH0uIFVzZSBgXCJcImAgaWYgeW91IGRvbid0IGNhcmUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlVG9QYXRjaCAtIE9iamVjdCB3aXRoIHRoZSBmdW5jdGlvbiB0byBiZSBwYXRjaGVkLiBDYW4gYWxzbyBwYXRjaCBhbiBvYmplY3QncyBwcm90b3R5cGUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lIC0gTmFtZSBvZiB0aGUgbWV0aG9kIHRvIGJlIHBhdGNoZWRcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOlBhdGNoZXJ+cGF0Y2hDYWxsYmFja30gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBydW4gYmVmb3JlIHRoZSBvcmlnaW5hbCBtZXRob2RcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT2JqZWN0IHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZGlzcGxheU5hbWVdIFlvdSBjYW4gcHJvdmlkZSBtZWFuaW5nZnVsIG5hbWUgZm9yIGNsYXNzL29iamVjdCBwcm92aWRlZCBpbiBgd2hhdGAgcGFyYW0gZm9yIGxvZ2dpbmcgcHVycG9zZXMuIEJ5IGRlZmF1bHQsIHRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIG5hbWUgYXV0b21hdGljYWxseS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZm9yY2VQYXRjaD10cnVlXSBTZXQgdG8gYHRydWVgIHRvIHBhdGNoIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGRvZXNudCBleGlzdC4gKEFkZHMgbm9vcCBmdW5jdGlvbiBpbiBwbGFjZSkuXHJcbiAgICAgKiBAcmV0dXJuIHttb2R1bGU6UGF0Y2hlcn51bnBhdGNofSBGdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cyBhbmQgbm8gcmV0dXJuIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB0byBjYW5jZWwgKHVucGF0Y2gpIHRoaXMgcGF0Y2guIFlvdSBzaG91bGQgc2F2ZSBhbmQgcnVuIGl0IHdoZW4geW91ciBwbHVnaW4gaXMgc3RvcHBlZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGJlZm9yZShjYWxsZXIsIG1vZHVsZVRvUGF0Y2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkgeyByZXR1cm4gdGhpcy5wdXNoQ2hpbGRQYXRjaChjYWxsZXIsIG1vZHVsZVRvUGF0Y2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIE9iamVjdC5hc3NpZ24ob3B0aW9ucywge3R5cGU6IFwiYmVmb3JlXCJ9KSk7IH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoaXMgbWV0aG9kIHBhdGNoZXMgb250byBhbm90aGVyIGZ1bmN0aW9uLCBhbGxvd2luZyB5b3VyIGNvZGUgdG8gcnVuIGFmdGVyLlxyXG4gICAgICogVXNpbmcgdGhpcywgeW91IGFyZSBhbHNvIGFibGUgdG8gbW9kaWZ5IHRoZSByZXR1cm4gdmFsdWUsIHVzaW5nIHRoZSByZXR1cm4gb2YgeW91ciBjb2RlIGluc3RlYWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNhbGxlciAtIE5hbWUgb2YgdGhlIGNhbGxlciBvZiB0aGUgcGF0Y2ggZnVuY3Rpb24uIFVzaW5nIHRoaXMgeW91IGNhbiB1bmRvIGFsbCBwYXRjaGVzIHdpdGggdGhlIHNhbWUgbmFtZSB1c2luZyB7QGxpbmsgbW9kdWxlOlBhdGNoZXIudW5wYXRjaEFsbH0uIFVzZSBgXCJcImAgaWYgeW91IGRvbid0IGNhcmUuXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gbW9kdWxlVG9QYXRjaCAtIE9iamVjdCB3aXRoIHRoZSBmdW5jdGlvbiB0byBiZSBwYXRjaGVkLiBDYW4gYWxzbyBwYXRjaCBhbiBvYmplY3QncyBwcm90b3R5cGUuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZnVuY3Rpb25OYW1lIC0gTmFtZSBvZiB0aGUgbWV0aG9kIHRvIGJlIHBhdGNoZWRcclxuICAgICAqIEBwYXJhbSB7bW9kdWxlOlBhdGNoZXJ+cGF0Y2hDYWxsYmFja30gY2FsbGJhY2sgLSBGdW5jdGlvbiB0byBydW4gaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgbWV0aG9kXHJcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gb3B0aW9ucyAtIE9iamVjdCB1c2VkIHRvIHBhc3MgYWRkaXRpb25hbCBvcHRpb25zLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmRpc3BsYXlOYW1lXSBZb3UgY2FuIHByb3ZpZGUgbWVhbmluZ2Z1bCBuYW1lIGZvciBjbGFzcy9vYmplY3QgcHJvdmlkZWQgaW4gYHdoYXRgIHBhcmFtIGZvciBsb2dnaW5nIHB1cnBvc2VzLiBCeSBkZWZhdWx0LCB0aGlzIGZ1bmN0aW9uIHdpbGwgdHJ5IHRvIGRldGVybWluZSBuYW1lIGF1dG9tYXRpY2FsbHkuXHJcbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmZvcmNlUGF0Y2g9dHJ1ZV0gU2V0IHRvIGB0cnVlYCB0byBwYXRjaCBldmVuIGlmIHRoZSBmdW5jdGlvbiBkb2VzbnQgZXhpc3QuIChBZGRzIG5vb3AgZnVuY3Rpb24gaW4gcGxhY2UpLlxyXG4gICAgICogQHJldHVybiB7bW9kdWxlOlBhdGNoZXJ+dW5wYXRjaH0gRnVuY3Rpb24gd2l0aCBubyBhcmd1bWVudHMgYW5kIG5vIHJldHVybiB2YWx1ZSB0aGF0IHNob3VsZCBiZSBjYWxsZWQgdG8gY2FuY2VsICh1bnBhdGNoKSB0aGlzIHBhdGNoLiBZb3Ugc2hvdWxkIHNhdmUgYW5kIHJ1biBpdCB3aGVuIHlvdXIgcGx1Z2luIGlzIHN0b3BwZWQuXHJcbiAgICAgKi9cclxuICAgIHN0YXRpYyBhZnRlcihjYWxsZXIsIG1vZHVsZVRvUGF0Y2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIG9wdGlvbnMgPSB7fSkgeyByZXR1cm4gdGhpcy5wdXNoQ2hpbGRQYXRjaChjYWxsZXIsIG1vZHVsZVRvUGF0Y2gsIGZ1bmN0aW9uTmFtZSwgY2FsbGJhY2ssIE9iamVjdC5hc3NpZ24ob3B0aW9ucywge3R5cGU6IFwiYWZ0ZXJcIn0pKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGF0Y2hlcyBvbnRvIGFub3RoZXIgZnVuY3Rpb24sIGFsbG93aW5nIHlvdXIgY29kZSB0byBydW4gaW5zdGVhZC5cclxuICAgICAqIFVzaW5nIHRoaXMsIHlvdSBhcmUgYWxzbyBhYmxlIHRvIG1vZGlmeSB0aGUgcmV0dXJuIHZhbHVlLCB1c2luZyB0aGUgcmV0dXJuIG9mIHlvdXIgY29kZSBpbnN0ZWFkLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsZXIgLSBOYW1lIG9mIHRoZSBjYWxsZXIgb2YgdGhlIHBhdGNoIGZ1bmN0aW9uLiBVc2luZyB0aGlzIHlvdSBjYW4gdW5kbyBhbGwgcGF0Y2hlcyB3aXRoIHRoZSBzYW1lIG5hbWUgdXNpbmcge0BsaW5rIG1vZHVsZTpQYXRjaGVyLnVucGF0Y2hBbGx9LiBVc2UgYFwiXCJgIGlmIHlvdSBkb24ndCBjYXJlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG1vZHVsZVRvUGF0Y2ggLSBPYmplY3Qgd2l0aCB0aGUgZnVuY3Rpb24gdG8gYmUgcGF0Y2hlZC4gQ2FuIGFsc28gcGF0Y2ggYW4gb2JqZWN0J3MgcHJvdG90eXBlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIG1ldGhvZCB0byBiZSBwYXRjaGVkXHJcbiAgICAgKiBAcGFyYW0ge21vZHVsZTpQYXRjaGVyfnBhdGNoQ2FsbGJhY2t9IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gcnVuIGFmdGVyIHRoZSBvcmlnaW5hbCBtZXRob2RcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT2JqZWN0IHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuZGlzcGxheU5hbWVdIFlvdSBjYW4gcHJvdmlkZSBtZWFuaW5nZnVsIG5hbWUgZm9yIGNsYXNzL29iamVjdCBwcm92aWRlZCBpbiBgd2hhdGAgcGFyYW0gZm9yIGxvZ2dpbmcgcHVycG9zZXMuIEJ5IGRlZmF1bHQsIHRoaXMgZnVuY3Rpb24gd2lsbCB0cnkgdG8gZGV0ZXJtaW5lIG5hbWUgYXV0b21hdGljYWxseS5cclxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuZm9yY2VQYXRjaD10cnVlXSBTZXQgdG8gYHRydWVgIHRvIHBhdGNoIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIGRvZXNudCBleGlzdC4gKEFkZHMgbm9vcCBmdW5jdGlvbiBpbiBwbGFjZSkuXHJcbiAgICAgKiBAcmV0dXJuIHttb2R1bGU6UGF0Y2hlcn51bnBhdGNofSBGdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cyBhbmQgbm8gcmV0dXJuIHZhbHVlIHRoYXQgc2hvdWxkIGJlIGNhbGxlZCB0byBjYW5jZWwgKHVucGF0Y2gpIHRoaXMgcGF0Y2guIFlvdSBzaG91bGQgc2F2ZSBhbmQgcnVuIGl0IHdoZW4geW91ciBwbHVnaW4gaXMgc3RvcHBlZC5cclxuICAgICAqL1xyXG4gICAgc3RhdGljIGluc3RlYWQoY2FsbGVyLCBtb2R1bGVUb1BhdGNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHsgcmV0dXJuIHRoaXMucHVzaENoaWxkUGF0Y2goY2FsbGVyLCBtb2R1bGVUb1BhdGNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBPYmplY3QuYXNzaWduKG9wdGlvbnMsIHt0eXBlOiBcImluc3RlYWRcIn0pKTsgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhpcyBtZXRob2QgcGF0Y2hlcyBvbnRvIGFub3RoZXIgZnVuY3Rpb24sIGFsbG93aW5nIHlvdXIgY29kZSB0byBydW4gYmVmb3JlLCBpbnN0ZWFkIG9yIGFmdGVyIHRoZSBvcmlnaW5hbCBmdW5jdGlvbi5cclxuICAgICAqIFVzaW5nIHRoaXMgeW91IGFyZSBhYmxlIHRvIG1vZGlmeSB0aGUgaW5jb21pbmcgYXJndW1lbnRzIGJlZm9yZSB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gaXMgcnVuIGFzIHdlbGwgYXMgdGhlIHJldHVyblxyXG4gICAgICogdmFsdWUgYmVmb3JlIHRoZSBvcmlnaW5hbCBmdW5jdGlvbiBhY3R1YWxseSByZXR1cm5zLlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBjYWxsZXIgLSBOYW1lIG9mIHRoZSBjYWxsZXIgb2YgdGhlIHBhdGNoIGZ1bmN0aW9uLiBVc2luZyB0aGlzIHlvdSBjYW4gdW5kbyBhbGwgcGF0Y2hlcyB3aXRoIHRoZSBzYW1lIG5hbWUgdXNpbmcge0BsaW5rIG1vZHVsZTpQYXRjaGVyLnVucGF0Y2hBbGx9LiBVc2UgYFwiXCJgIGlmIHlvdSBkb24ndCBjYXJlLlxyXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG1vZHVsZVRvUGF0Y2ggLSBPYmplY3Qgd2l0aCB0aGUgZnVuY3Rpb24gdG8gYmUgcGF0Y2hlZC4gQ2FuIGFsc28gcGF0Y2ggYW4gb2JqZWN0J3MgcHJvdG90eXBlLlxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGZ1bmN0aW9uTmFtZSAtIE5hbWUgb2YgdGhlIG1ldGhvZCB0byBiZSBwYXRjaGVkXHJcbiAgICAgKiBAcGFyYW0ge21vZHVsZTpQYXRjaGVyfnBhdGNoQ2FsbGJhY2t9IGNhbGxiYWNrIC0gRnVuY3Rpb24gdG8gcnVuIGFmdGVyIHRoZSBvcmlnaW5hbCBtZXRob2RcclxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zIC0gT2JqZWN0IHVzZWQgdG8gcGFzcyBhZGRpdGlvbmFsIG9wdGlvbnMuXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMudHlwZT1hZnRlcl0gLSBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gcnVuIHRoZSBmdW5jdGlvbiBgYmVmb3JlYCwgYGluc3RlYWRgLCBvciBgYWZ0ZXJgIHRoZSBvcmlnaW5hbC5cclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0aW9ucy5kaXNwbGF5TmFtZV0gWW91IGNhbiBwcm92aWRlIG1lYW5pbmdmdWwgbmFtZSBmb3IgY2xhc3Mvb2JqZWN0IHByb3ZpZGVkIGluIGB3aGF0YCBwYXJhbSBmb3IgbG9nZ2luZyBwdXJwb3Nlcy4gQnkgZGVmYXVsdCwgdGhpcyBmdW5jdGlvbiB3aWxsIHRyeSB0byBkZXRlcm1pbmUgbmFtZSBhdXRvbWF0aWNhbGx5LlxyXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5mb3JjZVBhdGNoPXRydWVdIFNldCB0byBgdHJ1ZWAgdG8gcGF0Y2ggZXZlbiBpZiB0aGUgZnVuY3Rpb24gZG9lc250IGV4aXN0LiAoQWRkcyBub29wIGZ1bmN0aW9uIGluIHBsYWNlKS5cclxuICAgICAqIEByZXR1cm4ge21vZHVsZTpQYXRjaGVyfnVucGF0Y2h9IEZ1bmN0aW9uIHdpdGggbm8gYXJndW1lbnRzIGFuZCBubyByZXR1cm4gdmFsdWUgdGhhdCBzaG91bGQgYmUgY2FsbGVkIHRvIGNhbmNlbCAodW5wYXRjaCkgdGhpcyBwYXRjaC4gWW91IHNob3VsZCBzYXZlIGFuZCBydW4gaXQgd2hlbiB5b3VyIHBsdWdpbiBpcyBzdG9wcGVkLlxyXG4gICAgICovXHJcbiAgICBzdGF0aWMgcHVzaENoaWxkUGF0Y2goY2FsbGVyLCBtb2R1bGVUb1BhdGNoLCBmdW5jdGlvbk5hbWUsIGNhbGxiYWNrLCBvcHRpb25zID0ge30pIHtcclxuXHRcdGNvbnN0IHt0eXBlID0gXCJhZnRlclwiLCBmb3JjZVBhdGNoID0gdHJ1ZX0gPSBvcHRpb25zO1xyXG5cdFx0Y29uc3QgbW9kdWxlID0gdGhpcy5yZXNvbHZlTW9kdWxlKG1vZHVsZVRvUGF0Y2gpO1xyXG5cdFx0aWYgKCFtb2R1bGUpIHJldHVybiBudWxsO1xyXG5cdFx0aWYgKCFtb2R1bGVbZnVuY3Rpb25OYW1lXSAmJiBmb3JjZVBhdGNoKSBtb2R1bGVbZnVuY3Rpb25OYW1lXSA9IGZ1bmN0aW9uKCkge307XHJcblx0XHRpZiAoIShtb2R1bGVbZnVuY3Rpb25OYW1lXSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSkgcmV0dXJuIG51bGw7XHJcblxyXG5cdFx0aWYgKHR5cGVvZiBtb2R1bGVUb1BhdGNoID09PSBcInN0cmluZ1wiKSBvcHRpb25zLmRpc3BsYXlOYW1lID0gbW9kdWxlVG9QYXRjaDtcclxuICAgICAgICBjb25zdCBkaXNwbGF5TmFtZSA9IG9wdGlvbnMuZGlzcGxheU5hbWUgfHwgbW9kdWxlLmRpc3BsYXlOYW1lIHx8IG1vZHVsZS5uYW1lIHx8IG1vZHVsZS5jb25zdHJ1Y3Rvci5kaXNwbGF5TmFtZSB8fCBtb2R1bGUuY29uc3RydWN0b3IubmFtZTtcclxuXHJcblx0XHRjb25zdCBwYXRjaElkID0gYCR7ZGlzcGxheU5hbWV9LiR7ZnVuY3Rpb25OYW1lfWA7XHJcbiAgICAgICAgY29uc3QgcGF0Y2ggPSB0aGlzLnBhdGNoZXMuZmluZChwID0+IHAubW9kdWxlID09IG1vZHVsZSAmJiBwLmZ1bmN0aW9uTmFtZSA9PSBmdW5jdGlvbk5hbWUpIHx8IHRoaXMubWFrZVBhdGNoKG1vZHVsZSwgZnVuY3Rpb25OYW1lLCBwYXRjaElkKTtcclxuICAgICAgICBpZiAoIXBhdGNoLnByb3h5RnVuY3Rpb24pIHRoaXMucmVQYXRjaChwYXRjaCk7XHJcbiAgICAgICAgY29uc3QgY2hpbGQgPSB7XHJcbiAgICAgICAgICAgIGNhbGxlcixcclxuICAgICAgICAgICAgdHlwZSxcclxuICAgICAgICAgICAgaWQ6IHBhdGNoLmNvdW50ZXIsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrLFxyXG4gICAgICAgICAgICB1bnBhdGNoOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBwYXRjaC5jaGlsZHJlbi5zcGxpY2UocGF0Y2guY2hpbGRyZW4uZmluZEluZGV4KGNwYXRjaCA9PiBjcGF0Y2guaWQgPT09IGNoaWxkLmlkICYmIGNwYXRjaC50eXBlID09PSB0eXBlKSwgMSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocGF0Y2guY2hpbGRyZW4ubGVuZ3RoIDw9IDApIHtcclxuXHRcdFx0XHRcdGNvbnN0IHBhdGNoTnVtID0gdGhpcy5wYXRjaGVzLmZpbmRJbmRleChwID0+IHAubW9kdWxlID09IG1vZHVsZSAmJiBwLmZ1bmN0aW9uTmFtZSA9PSBmdW5jdGlvbk5hbWUpO1xyXG5cdFx0XHRcdFx0dGhpcy5wYXRjaGVzW3BhdGNoTnVtXS5yZXZlcnQoKTtcclxuXHRcdFx0XHRcdHRoaXMucGF0Y2hlcy5zcGxpY2UocGF0Y2hOdW0sIDEpO1xyXG5cdFx0XHRcdH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgcGF0Y2guY2hpbGRyZW4ucHVzaChjaGlsZCk7XHJcbiAgICAgICAgcGF0Y2guY291bnRlcisrO1xyXG4gICAgICAgIHJldHVybiBjaGlsZC51bnBhdGNoO1xyXG4gICAgfVxyXG5cclxufSJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/patcher.js\n"); + +/***/ }), + /***/ "./src/modules/pluginapi.js": /*!**********************************!*\ !*** ./src/modules/pluginapi.js ***! @@ -467,7 +479,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(_utilities__WEBPACK_IMPORTED_MODULE_0__[\"default\"].escapeID(id), css); // $(\"head\").append($(\"