diff --git a/.eslintrc b/.eslintrc index 5a6f3f13..12b4baf1 100644 --- a/.eslintrc +++ b/.eslintrc @@ -16,16 +16,18 @@ } }, "rules": { - "semi": 2, - "space-infix-ops": ["error", {"int32Hint": false}], + "semi": "error", + "space-infix-ops": "error", "quotes": ["error", "double", {"allowTemplateLiterals": true}], - "no-console": 2, + "no-console": "error", + "no-shadow": ["warn", { "builtinGlobals": false, "hoist": "functions", "allow": [] }], + "no-redeclare": ["error", { "builtinGlobals": true }], "brace-style": ["error", "stroustrup", {"allowSingleLine": true}], - "keyword-spacing": 2, - "no-else-return": 2, + "keyword-spacing": "error", + "no-else-return": "error", "curly": ["error", "multi-line", "consistent"], - "dot-notation": 2, - "yoda": 2, + "dot-notation": "error", + "yoda": "error", "linebreak-style": ["error", "windows"], "quote-props": ["error", "consistent-as-needed", {"keywords": true}], "object-curly-spacing": ["error", "never", { "objectsInObjects": false }], @@ -33,19 +35,60 @@ "prefer-const": "error", "react/jsx-uses-react": "error", "react/jsx-uses-vars": "error", - "react/prop-types": 0, + "react/prop-types": "off", "react/jsx-no-target-blank": "error", - "react/jsx-key": 0 + "react/jsx-key": "off" }, "globals": { - "webpackJsonp": false, - "Proxy": false, - "Set": false, - "WeakMap": false, - "Promise": false, - "ace": false, - "Reflect": false, - "DiscordNative": false, - "__non_webpack_require__": false + "webpackJsonp": "readonly", + "Proxy": "readonly", + "Set": "readonly", + "WeakMap": "readonly", + "Promise": "readonly", + "ace": "readonly", + "Reflect": "readonly", + "DiscordNative": "readonly", + "__non_webpack_require__": "readonly", + + "alert": "off", + "atob": "off", + "blur": "off", + "btoa": "off", + "caches": "off", + "close": "off", + "closed": "off", + "confirm": "off", + "crypto": "off", + "defaultstatus": "off", + "event": "off", + "external": "off", + "fetch": "off", + "find": "off", + "focus": "off", + "frames": "off", + "history": "off", + "length": "off", + "location": "off", + "locationbar": "off", + "menubar": "off", + "name": "off", + "navigator": "off", + "open": "off", + "opener": "off", + "origin": "off", + "parent": "off", + "performance": "off", + "personalbar": "off", + "print": "off", + "prompt": "off", + "screen": "off", + "scroll": "off", + "scrollbars": "off", + "self": "off", + "status": "off", + "statusbar": "off", + "stop": "off", + "toolbar": "off", + "top": "off" } } \ No newline at end of file diff --git a/css/main.css b/css/main.css index 61fe29b1..9cef9bf6 100644 --- a/css/main.css +++ b/css/main.css @@ -123,6 +123,10 @@ z-index: 1001; } +.floating-window.modal-open { + z-index: 999; +} + .floating-window.resizable { overflow: auto; resize: both; diff --git a/js/main.js b/js/main.js index 6d3140a1..3df16548 100644 --- a/js/main.js +++ b/js/main.js @@ -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 } //* {outline: 1px solid red;}\n //DataStore.customCSS\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\n if ($(\"#customcss\").length == 0) {\n $(\"head\").append(\"\");\n }\n\n $(\"#customcss\").text(newCss).detach().appendTo(document.head);\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 editorRef: 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 });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2N1c3RvbWNzcy5qcz9jM2YyIl0sIm5hbWVzIjpbImZzIiwicmVxdWlyZSIsImVsZWN0cm9uIiwiVXNlclNldHRpbmdzIiwiV2VicGFja01vZHVsZXMiLCJnZXRCeVByb3BzIiwiRGlzcGF0Y2hlciIsIkFjdGlvblR5cGVzIiwiQ3VzdG9tQ1NTIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic3RhcnREZXRhY2hlZCIsIlNldHRpbmdzIiwiZ2V0IiwiY29sbGVjdGlvbiIsIm5hdGl2ZU9wZW4iLCJjb25zdHJ1Y3RvciIsInNhdmVkQ3NzIiwiaW5zZXJ0ZWRDc3MiLCJpc0RldGFjaGVkIiwiZW5hYmxlZCIsIndpbmRvdyIsImFjZSIsIlV0aWxpdGllcyIsImluamVjdEpzIiwidGhlbiIsIm9yaWdpbmFsIiwicmVnaXN0ZXJQYW5lbCIsIm9yZGVyIiwiZWxlbWVudCIsIlJlYWN0IiwiY3JlYXRlRWxlbWVudCIsIkNTU0VkaXRvciIsImNzcyIsInNhdmUiLCJzYXZlQ1NTIiwiYmluZCIsInVwZGF0ZSIsImluc2VydENTUyIsIm9wZW5OYXRpdmUiLCJvcGVuRGV0YWNoZWQiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJ0aGlzT2JqZWN0IiwiX3JlYWN0SW50ZXJuYWxGaWJlciIsImNoaWxkIiwibWVtb2l6ZWRQcm9wcyIsImNoaWxkcmVuIiwicHJvcHMiLCJvblNldFNlY3Rpb24iLCJzZXRTZWN0aW9uIiwibG9hZENTUyIsIndhdGNoQ29udGVudCIsImRpc2FibGVkIiwicmVtb3ZlUGFuZWwiLCJ1bndhdGNoQ29udGVudCIsIndhdGNoZXIiLCJlcnJvciIsInRpbWVDYWNoZSIsImxvZyIsIndhdGNoIiwiRGF0YVN0b3JlIiwiY3VzdG9tQ1NTIiwicGVyc2lzdGVudCIsImV2ZW50VHlwZSIsImZpbGVuYW1lIiwiUHJvbWlzZSIsInIiLCJzZXRUaW1lb3V0Iiwic3RhdFN5bmMiLCJlcnIiLCJjb2RlIiwic3RhdHMiLCJtdGltZSIsImdldFRpbWUiLCJuZXdDU1MiLCJsb2FkQ3VzdG9tQ1NTIiwiRXZlbnRzIiwiZW1pdCIsImNsb3NlIiwidmFsdWUiLCJuZXdDc3MiLCIkIiwibGVuZ3RoIiwiYXBwZW5kIiwidGV4dCIsImRldGFjaCIsImFwcGVuZFRvIiwiZG9jdW1lbnQiLCJoZWFkIiwic2F2ZUN1c3RvbUNTUyIsInNoZWxsIiwib3BlbkV4dGVybmFsIiwiY3VycmVudENTUyIsImVkaXRvclJlZiIsImNyZWF0ZVJlZiIsImVkaXRvciIsIkZsb2F0aW5nV2luZG93Q29udGFpbmVyIiwib3BlbiIsIm9uQ2xvc2UiLCJvblJlc2l6ZSIsImN1cnJlbnQiLCJyZXNpemUiLCJ0aXRsZSIsImhlaWdodCIsIndpZHRoIiwiY2VudGVyIiwicmVzaXphYmxlIiwiZGlydHlEaXNwYXRjaCIsInR5cGUiLCJMQVlFUl9QT1AiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsTUFBTUEsRUFBRSxHQUFHQyxtQkFBTyxDQUFDLGNBQUQsQ0FBbEI7O0FBQ0EsTUFBTUMsUUFBUSxHQUFHRCxtQkFBTyxDQUFDLDBCQUFELENBQXhCOztBQUNBLE1BQU1FLFlBQVksR0FBR0Msc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixDQUFyQjtBQUNBLE1BQU1DLFVBQVUsR0FBR0Ysc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixlQUExQixDQUFuQjtBQUNBLE1BQU1FLFdBQVcsR0FBR0gsc0RBQWMsQ0FBQ0MsVUFBZixDQUEwQixhQUExQixFQUF5Q0UsV0FBN0Q7QUFFZSxtRUFBSSxNQUFNQyxTQUFOLFNBQXdCQyx3REFBeEIsQ0FBZ0M7QUFDL0MsTUFBSUMsSUFBSixHQUFXO0FBQUMsV0FBTyxZQUFQO0FBQXFCOztBQUNqQyxNQUFJQyxRQUFKLEdBQWU7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBQ3BDLE1BQUlDLEVBQUosR0FBUztBQUFDLFdBQU8s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TTtBQUNaLFlBQUksQ0FBQ04sU0FBRCxJQUFjLENBQUNBLFNBQVMsQ0FBQ08sT0FBekIsSUFBb0MsQ0FBQ1AsU0FBUyxDQUFDTyxPQUFWLENBQWtCQyxNQUEzRCxFQUFtRTtBQUNuRVIsaUJBQVMsQ0FBQ08sT0FBVixDQUFrQkMsTUFBbEI7QUFDSCxPQUx3QjtBQU16QkMsV0FBSyxFQUFFLG1CQU5rQjtBQU96QjdGLFFBQUUsRUFBRSx3QkFQcUI7QUFRekI4RixZQUFNLEVBQUUsR0FSaUI7QUFTekJDLFdBQUssRUFBRSxHQVRrQjtBQVV6QkMsWUFBTSxFQUFFLElBVmlCO0FBV3pCQyxlQUFTLEVBQUUsSUFYYztBQVl6QjVELGNBQVEsRUFBRWlEO0FBWmUsS0FBN0I7QUFjQSxTQUFLN0UsVUFBTCxHQUFrQixJQUFsQjtBQUNBbEIsZ0JBQVksQ0FBQzhFLEtBQWI7QUFDQTNFLGNBQVUsQ0FBQ3dHLGFBQVgsQ0FBeUI7QUFBQ0MsVUFBSSxFQUFFeEcsV0FBVyxDQUFDeUc7QUFBbkIsS0FBekI7QUFDSDs7QUE3SThDLENBQXBDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvY3VzdG9tY3NzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge1NldHRpbmdzLCBEYXRhU3RvcmUsIFJlYWN0LCBVdGlsaXRpZXMsIFdlYnBhY2tNb2R1bGVzLCBFdmVudHN9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBDU1NFZGl0b3IgZnJvbSBcIi4uL3VpL2N1c3RvbWNzcy9jc3NlZGl0b3JcIjtcclxuaW1wb3J0IEZsb2F0aW5nV2luZG93Q29udGFpbmVyIGZyb20gXCIuLi91aS9mbG9hdGluZy9jb250YWluZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzVGl0bGUgZnJvbSBcIi4uL3VpL3NldHRpbmdzL3RpdGxlXCI7XHJcblxyXG5jb25zdCBmcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuY29uc3QgZWxlY3Ryb24gPSByZXF1aXJlKFwiZWxlY3Ryb25cIik7XHJcbmNvbnN0IFVzZXJTZXR0aW5ncyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJ1cGRhdGVBY2NvdW50XCIpO1xyXG5jb25zdCBEaXNwYXRjaGVyID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcImRpcnR5RGlzcGF0Y2hcIik7XHJcbmNvbnN0IEFjdGlvblR5cGVzID0gV2VicGFja01vZHVsZXMuZ2V0QnlQcm9wcyhcIkFjdGlvblR5cGVzXCIpLkFjdGlvblR5cGVzO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEN1c3RvbUNTUyBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiQ3VzdG9tIENTU1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJjdXN0b21jc3NcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiY3VzdG9tY3NzXCI7fVxyXG4gICAgZ2V0IHN0YXJ0RGV0YWNoZWQoKSB7cmV0dXJuIFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIFwic3RhcnREZXRhY2hlZFwiKTt9XHJcbiAgICBnZXQgbmF0aXZlT3BlbigpIHtyZXR1cm4gU2V0dGluZ3MuZ2V0KHRoaXMuY29sbGVjdGlvbiwgdGhpcy5jYXRlZ29yeSwgXCJuYXRpdmVPcGVuXCIpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuc2F2ZWRDc3MgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuaW5zZXJ0ZWRDc3MgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuaXNEZXRhY2hlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgaWYgKCF3aW5kb3cuYWNlKSB7XHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5pbmplY3RKcyhcImh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL2FjZS8xLjIuOS9hY2UuanNcIikudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LnJlcXVpcmUub3JpZ2luYWwpIHdpbmRvdy5yZXF1aXJlID0gd2luZG93LnJlcXVpcmUub3JpZ2luYWw7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlclBhbmVsKHRoaXMuaWQsIHRoaXMubmFtZSwge1xyXG4gICAgICAgICAgICBvcmRlcjogMixcclxuICAgICAgICAgICAgZWxlbWVudDogKCkgPT4gWzxTZXR0aW5nc1RpdGxlIHRleHQ9XCJDdXN0b20gQ1NTIEVkaXRvclwiIC8+LCBSZWFjdC5jcmVhdGVFbGVtZW50KENTU0VkaXRvciwge1xyXG4gICAgICAgICAgICAgICAgY3NzOiB0aGlzLnNhdmVkQ3NzLFxyXG4gICAgICAgICAgICAgICAgc2F2ZTogdGhpcy5zYXZlQ1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICB1cGRhdGU6IHRoaXMuaW5zZXJ0Q1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvcGVuTmF0aXZlOiB0aGlzLm9wZW5OYXRpdmUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9wZW5EZXRhY2hlZDogdGhpcy5vcGVuRGV0YWNoZWQuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICAgICAgfSldLFxyXG4gICAgICAgICAgICBvbkNsaWNrOiAodGhpc09iamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaXNEZXRhY2hlZCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMubmF0aXZlT3BlbikgdGhpcy5vcGVuTmF0aXZlKCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLnN0YXJ0RGV0YWNoZWQpIHRoaXMub3BlbkRldGFjaGVkKCk7XHJcbiAgICAgICAgICAgICAgICBlbHNlIHRoaXNPYmplY3QuX3JlYWN0SW50ZXJuYWxGaWJlci5jaGlsZC5tZW1vaXplZFByb3BzLmNoaWxkcmVuLnByb3BzLm9uU2V0U2VjdGlvbih0aGlzLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTZWN0aW9uID0gdGhpc09iamVjdC5fcmVhY3RJbnRlcm5hbEZpYmVyLmNoaWxkLm1lbW9pemVkUHJvcHMuY2hpbGRyZW4ucHJvcHMub25TZXRTZWN0aW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5sb2FkQ1NTKCk7XHJcbiAgICAgICAgdGhpcy5pbnNlcnRDU1ModGhpcy5zYXZlZENzcyk7XHJcbiAgICAgICAgdGhpcy53YXRjaENvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZW1vdmVQYW5lbCh0aGlzLmlkKTtcclxuICAgICAgICB0aGlzLnVud2F0Y2hDb250ZW50KCk7XHJcbiAgICB9XHJcbiAgICAvLyoge291dGxpbmU6IDFweCBzb2xpZCByZWQ7fVxyXG4gICAgLy9EYXRhU3RvcmUuY3VzdG9tQ1NTXHJcbiAgICB3YXRjaENvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2F0Y2hlcikgcmV0dXJuIHRoaXMuZXJyb3IoXCJBbHJlYWR5IHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIGNvbnN0IHRpbWVDYWNoZSA9IHt9O1xyXG4gICAgICAgIHRoaXMubG9nKFwiU3RhcnRpbmcgdG8gd2F0Y2ggY29udGVudC5cIik7XHJcbiAgICAgICAgdGhpcy53YXRjaGVyID0gZnMud2F0Y2goRGF0YVN0b3JlLmN1c3RvbUNTUywge3BlcnNpc3RlbnQ6IGZhbHNlfSwgYXN5bmMgKGV2ZW50VHlwZSwgZmlsZW5hbWUpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFldmVudFR5cGUgfHwgIWZpbGVuYW1lKSByZXR1cm47XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCA1MCkpO1xyXG4gICAgICAgICAgICB0cnkge2ZzLnN0YXRTeW5jKERhdGFTdG9yZS5jdXN0b21DU1MpO31cclxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVyci5jb2RlICE9PSBcIkVOT0VOVFwiKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBkZWxldGUgdGltZUNhY2hlW2ZpbGVuYW1lXTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZUNTUyhcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzdGF0cyA9IGZzLnN0YXRTeW5jKERhdGFTdG9yZS5jdXN0b21DU1MpO1xyXG4gICAgICAgICAgICBpZiAoIXN0YXRzIHx8ICFzdGF0cy5tdGltZSB8fCAhc3RhdHMubXRpbWUuZ2V0VGltZSgpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Yoc3RhdHMubXRpbWUuZ2V0VGltZSgpKSAhPT0gXCJudW1iZXJcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGltZUNhY2hlW2ZpbGVuYW1lXSA9PSBzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgdGltZUNhY2hlW2ZpbGVuYW1lXSA9IHN0YXRzLm10aW1lLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBcImNoYW5nZVwiKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDU1MgPSBEYXRhU3RvcmUubG9hZEN1c3RvbUNTUygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKG5ld0NTUyA9PSB0aGlzLnNhdmVkQ3NzKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVkQ3NzID0gbmV3Q1NTO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRDU1ModGhpcy5zYXZlZENzcyk7XHJcbiAgICAgICAgICAgICAgICBFdmVudHMuZW1pdChcImN1c3RvbWNzcy11cGRhdGVkXCIsIHRoaXMuc2F2ZWRDc3MpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgdW53YXRjaENvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLndhdGNoZXIpIHJldHVybiB0aGlzLmVycm9yKFwiV2FzIG5vdCB3YXRjaGluZyBjb250ZW50LlwiKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIuY2xvc2UoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy53YXRjaGVyO1xyXG4gICAgICAgIHRoaXMubG9nKFwiTm8gbG9uZ2VyIHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uQ2hhbmdlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKCFTZXR0aW5ncy5nZXQoXCJzZXR0aW5nc1wiLCBcImN1c3RvbWNzc1wiLCBcImxpdmVVcGRhdGVcIikpIHJldHVybjtcclxuICAgICAgICB0aGlzLmluc2VydENTUyh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5zYXZlQ1NTKHZhbHVlKTtcclxuICAgIH1cclxuXHJcbiAgICBsb2FkQ1NTKCkge1xyXG4gICAgICAgIHRoaXMuc2F2ZWRDc3MgPSBEYXRhU3RvcmUubG9hZEN1c3RvbUNTUygpO1xyXG4gICAgfVxyXG5cclxuICAgIGluc2VydENTUyhuZXdDc3MpIHtcclxuICAgICAgICBpZiAodHlwZW9mKG5ld0NzcykgPT09IFwidW5kZWZpbmVkXCIpIG5ld0NzcyA9IHRoaXMuaW5zZXJ0ZWRDc3M7XHJcbiAgICAgICAgZWxzZSB0aGlzLmluc2VydGVkQ3NzID0gbmV3Q3NzO1xyXG4gICAgICAgIGlmICgkKFwiI2N1c3RvbWNzc1wiKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAkKFwiaGVhZFwiKS5hcHBlbmQoXCI8c3R5bGUgaWQ9XFxcImN1c3RvbWNzc1xcXCI+PC9zdHlsZT5cIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgICQoXCIjY3VzdG9tY3NzXCIpLnRleHQobmV3Q3NzKS5kZXRhY2goKS5hcHBlbmRUbyhkb2N1bWVudC5oZWFkKTtcclxuICAgIH1cclxuXHJcbiAgICBzYXZlQ1NTKG5ld0Nzcykge1xyXG4gICAgICAgIGlmICh0eXBlb2YobmV3Q3NzKSAhPT0gXCJ1bmRlZmluZWRcIikgdGhpcy5zYXZlZENzcyA9IG5ld0NzcztcclxuICAgICAgICBEYXRhU3RvcmUuc2F2ZUN1c3RvbUNTUyh0aGlzLnNhdmVkQ3NzKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuTmF0aXZlKCkge1xyXG4gICAgICAgIGVsZWN0cm9uLnNoZWxsLm9wZW5FeHRlcm5hbChgZmlsZTovLyR7RGF0YVN0b3JlLmN1c3RvbUNTU31gKTtcclxuICAgIH1cclxuXHJcbiAgICBvcGVuRGV0YWNoZWQoY3VycmVudENTUykge1xyXG4gICAgICAgIGNvbnN0IGVkaXRvclJlZiA9IFJlYWN0LmNyZWF0ZVJlZigpO1xyXG4gICAgICAgIGNvbnN0IGVkaXRvciA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoQ1NTRWRpdG9yLCB7XHJcbiAgICAgICAgICAgIGlkOiBcImJkLWZsb2F0aW5nLWVkaXRvclwiLFxyXG4gICAgICAgICAgICBlZGl0b3JSZWY6IGVkaXRvclJlZixcclxuICAgICAgICAgICAgY3NzOiBjdXJyZW50Q1NTLFxyXG4gICAgICAgICAgICBzYXZlOiB0aGlzLnNhdmVDU1MuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgdXBkYXRlOiB0aGlzLmluc2VydENTUy5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICBvcGVuTmF0aXZlOiB0aGlzLm9wZW5OYXRpdmUuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25DaGFuZ2UuYmluZCh0aGlzKVxyXG4gICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgRmxvYXRpbmdXaW5kb3dDb250YWluZXIub3Blbih7XHJcbiAgICAgICAgICAgIG9uQ2xvc2U6ICgpID0+IHt0aGlzLmlzRGV0YWNoZWQgPSBmYWxzZTt9LFxyXG4gICAgICAgICAgICBvblJlc2l6ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlZGl0b3JSZWYgfHwgIWVkaXRvclJlZi5jdXJyZW50IHx8ICFlZGl0b3JSZWYuY3VycmVudC5yZXNpemUpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGVkaXRvclJlZi5jdXJyZW50LnJlc2l6ZSgpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aXRsZTogXCJDdXN0b20gQ1NTIEVkaXRvclwiLFxyXG4gICAgICAgICAgICBpZDogXCJmbG9hdGluZy1lZGl0b3Itd2luZG93XCIsXHJcbiAgICAgICAgICAgIGhlaWdodDogNDcwLFxyXG4gICAgICAgICAgICB3aWR0aDogNDEwLFxyXG4gICAgICAgICAgICBjZW50ZXI6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc2l6YWJsZTogdHJ1ZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IGVkaXRvclxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuaXNEZXRhY2hlZCA9IHRydWU7XHJcbiAgICAgICAgVXNlclNldHRpbmdzLmNsb3NlKCk7XHJcbiAgICAgICAgRGlzcGF0Y2hlci5kaXJ0eURpc3BhdGNoKHt0eXBlOiBBY3Rpb25UeXBlcy5MQVlFUl9QT1B9KTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\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__[\"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; // if ($(\"#customcss\").length == 0) {\n // $(\"head\").append(\"\");\n // }\n // $(\"#customcss\").text(newCss).detach().appendTo(document.head);\n\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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LEVBQUUsbUJBUmtCO0FBU3pCeEYsUUFBRSxFQUFFLHdCQVRxQjtBQVV6QnlGLFlBQU0sRUFBRSxHQVZpQjtBQVd6QkMsV0FBSyxFQUFFLEdBWGtCO0FBWXpCQyxZQUFNLEVBQUUsSUFaaUI7QUFhekJDLGVBQVMsRUFBRSxJQWJjO0FBY3pCdkQsY0FBUSxFQUFFMkMsTUFkZTtBQWV6QmEsa0JBQVksRUFBRSxNQUFNO0FBQ2hCLFlBQUksQ0FBQ2YsU0FBRCxJQUFjLENBQUNBLFNBQVMsQ0FBQ1EsT0FBN0IsRUFBc0MsT0FBTyxLQUFQO0FBQ3RDLGVBQU9SLFNBQVMsQ0FBQ1EsT0FBVixDQUFrQlEsaUJBQXpCO0FBQ0gsT0FsQndCO0FBbUJ6QkMsc0JBQWdCLEVBQUU7QUFuQk8sS0FBN0I7QUFxQkEsU0FBS3RGLFVBQUwsR0FBa0IsSUFBbEI7QUFDQWxCLGdCQUFZLENBQUM4RSxLQUFiO0FBQ0EzRSxjQUFVLENBQUNzRyxhQUFYLENBQXlCO0FBQUNDLFVBQUksRUFBRXRHLFdBQVcsQ0FBQ3VHO0FBQW5CLEtBQXpCO0FBQ0g7O0FBcEo4QyxDQUFwQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2N1c3RvbWNzcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtTZXR0aW5ncywgRGF0YVN0b3JlLCBSZWFjdCwgVXRpbGl0aWVzLCBXZWJwYWNrTW9kdWxlcywgRXZlbnRzLCBET01NYW5hZ2VyfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5pbXBvcnQgQ1NTRWRpdG9yIGZyb20gXCIuLi91aS9jdXN0b21jc3MvY3NzZWRpdG9yXCI7XHJcbmltcG9ydCBGbG9hdGluZ1dpbmRvd0NvbnRhaW5lciBmcm9tIFwiLi4vdWkvZmxvYXRpbmcvY29udGFpbmVyXCI7XHJcbmltcG9ydCBTZXR0aW5nc1RpdGxlIGZyb20gXCIuLi91aS9zZXR0aW5ncy90aXRsZVwiO1xyXG5cclxuY29uc3QgZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbmNvbnN0IGVsZWN0cm9uID0gcmVxdWlyZShcImVsZWN0cm9uXCIpO1xyXG5jb25zdCBVc2VyU2V0dGluZ3MgPSBXZWJwYWNrTW9kdWxlcy5nZXRCeVByb3BzKFwidXBkYXRlQWNjb3VudFwiKTtcclxuY29uc3QgRGlzcGF0Y2hlciA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJkaXJ0eURpc3BhdGNoXCIpO1xyXG5jb25zdCBBY3Rpb25UeXBlcyA9IFdlYnBhY2tNb2R1bGVzLmdldEJ5UHJvcHMoXCJBY3Rpb25UeXBlc1wiKS5BY3Rpb25UeXBlcztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBDdXN0b21DU1MgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkN1c3RvbSBDU1NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiY3VzdG9tY3NzXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImN1c3RvbWNzc1wiO31cclxuICAgIGdldCBzdGFydERldGFjaGVkKCkge3JldHVybiBTZXR0aW5ncy5nZXQodGhpcy5jb2xsZWN0aW9uLCB0aGlzLmNhdGVnb3J5LCBcInN0YXJ0RGV0YWNoZWRcIik7fVxyXG4gICAgZ2V0IG5hdGl2ZU9wZW4oKSB7cmV0dXJuIFNldHRpbmdzLmdldCh0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2F0ZWdvcnksIFwibmF0aXZlT3BlblwiKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLnNhdmVkQ3NzID0gXCJcIjtcclxuICAgICAgICB0aGlzLmluc2VydGVkQ3NzID0gXCJcIjtcclxuICAgICAgICB0aGlzLmlzRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbmFibGVkKCkge1xyXG4gICAgICAgIGlmICghd2luZG93LmFjZSkge1xyXG4gICAgICAgICAgICBVdGlsaXRpZXMuaW5qZWN0SnMoXCJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9hY2UvMS4yLjkvYWNlLmpzXCIpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHdpbmRvdy5yZXF1aXJlLm9yaWdpbmFsKSB3aW5kb3cucmVxdWlyZSA9IHdpbmRvdy5yZXF1aXJlLm9yaWdpbmFsO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgU2V0dGluZ3MucmVnaXN0ZXJQYW5lbCh0aGlzLmlkLCB0aGlzLm5hbWUsIHtcclxuICAgICAgICAgICAgb3JkZXI6IDIsXHJcbiAgICAgICAgICAgIGVsZW1lbnQ6ICgpID0+IFs8U2V0dGluZ3NUaXRsZSB0ZXh0PVwiQ3VzdG9tIENTUyBFZGl0b3JcIiAvPiwgUmVhY3QuY3JlYXRlRWxlbWVudChDU1NFZGl0b3IsIHtcclxuICAgICAgICAgICAgICAgIGNzczogdGhpcy5zYXZlZENzcyxcclxuICAgICAgICAgICAgICAgIHNhdmU6IHRoaXMuc2F2ZUNTUy5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgdXBkYXRlOiB0aGlzLmluc2VydENTUy5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb3Blbk5hdGl2ZTogdGhpcy5vcGVuTmF0aXZlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvcGVuRGV0YWNoZWQ6IHRoaXMub3BlbkRldGFjaGVkLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkNoYW5nZS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgIH0pXSxcclxuICAgICAgICAgICAgb25DbGljazogKHRoaXNPYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGV0YWNoZWQpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLm5hdGl2ZU9wZW4pIHRoaXMub3Blbk5hdGl2ZSgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5zdGFydERldGFjaGVkKSB0aGlzLm9wZW5EZXRhY2hlZCgpO1xyXG4gICAgICAgICAgICAgICAgZWxzZSB0aGlzT2JqZWN0Ll9yZWFjdEludGVybmFsRmliZXIuY2hpbGQubWVtb2l6ZWRQcm9wcy5jaGlsZHJlbi5wcm9wcy5vblNldFNlY3Rpb24odGhpcy5uYW1lKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U2VjdGlvbiA9IHRoaXNPYmplY3QuX3JlYWN0SW50ZXJuYWxGaWJlci5jaGlsZC5tZW1vaXplZFByb3BzLmNoaWxkcmVuLnByb3BzLm9uU2V0U2VjdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubG9hZENTUygpO1xyXG4gICAgICAgIHRoaXMuaW5zZXJ0Q1NTKHRoaXMuc2F2ZWRDc3MpO1xyXG4gICAgICAgIHRoaXMud2F0Y2hDb250ZW50KCk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgU2V0dGluZ3MucmVtb3ZlUGFuZWwodGhpcy5pZCk7XHJcbiAgICAgICAgdGhpcy51bndhdGNoQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHdhdGNoQ29udGVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy53YXRjaGVyKSByZXR1cm4gdGhpcy5lcnJvcihcIkFscmVhZHkgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICAgICAgY29uc3QgdGltZUNhY2hlID0ge307XHJcbiAgICAgICAgdGhpcy5sb2coXCJTdGFydGluZyB0byB3YXRjaCBjb250ZW50LlwiKTtcclxuICAgICAgICB0aGlzLndhdGNoZXIgPSBmcy53YXRjaChEYXRhU3RvcmUuY3VzdG9tQ1NTLCB7cGVyc2lzdGVudDogZmFsc2V9LCBhc3luYyAoZXZlbnRUeXBlLCBmaWxlbmFtZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWV2ZW50VHlwZSB8fCAhZmlsZW5hbWUpIHJldHVybjtcclxuICAgICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UociA9PiBzZXRUaW1lb3V0KHIsIDUwKSk7XHJcbiAgICAgICAgICAgIHRyeSB7ZnMuc3RhdFN5bmMoRGF0YVN0b3JlLmN1c3RvbUNTUyk7fVxyXG4gICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyLmNvZGUgIT09IFwiRU5PRU5UXCIpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGRlbGV0ZSB0aW1lQ2FjaGVbZmlsZW5hbWVdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlQ1NTKFwiXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHN0YXRzID0gZnMuc3RhdFN5bmMoRGF0YVN0b3JlLmN1c3RvbUNTUyk7XHJcbiAgICAgICAgICAgIGlmICghc3RhdHMgfHwgIXN0YXRzLm10aW1lIHx8ICFzdGF0cy5tdGltZS5nZXRUaW1lKCkpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZihzdGF0cy5tdGltZS5nZXRUaW1lKCkpICE9PSBcIm51bWJlclwiKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0aW1lQ2FjaGVbZmlsZW5hbWVdID09IHN0YXRzLm10aW1lLmdldFRpbWUoKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICB0aW1lQ2FjaGVbZmlsZW5hbWVdID0gc3RhdHMubXRpbWUuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IFwiY2hhbmdlXCIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NTUyA9IERhdGFTdG9yZS5sb2FkQ3VzdG9tQ1NTKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAobmV3Q1NTID09IHRoaXMuc2F2ZWRDc3MpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZWRDc3MgPSBuZXdDU1M7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluc2VydENTUyh0aGlzLnNhdmVkQ3NzKTtcclxuICAgICAgICAgICAgICAgIEV2ZW50cy5lbWl0KFwiY3VzdG9tY3NzLXVwZGF0ZWRcIiwgdGhpcy5zYXZlZENzcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1bndhdGNoQ29udGVudCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMud2F0Y2hlcikgcmV0dXJuIHRoaXMuZXJyb3IoXCJXYXMgbm90IHdhdGNoaW5nIGNvbnRlbnQuXCIpO1xyXG4gICAgICAgIHRoaXMud2F0Y2hlci5jbG9zZSgpO1xyXG4gICAgICAgIGRlbGV0ZSB0aGlzLndhdGNoZXI7XHJcbiAgICAgICAgdGhpcy5sb2coXCJObyBsb25nZXIgd2F0Y2hpbmcgY29udGVudC5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgb25DaGFuZ2UodmFsdWUpIHtcclxuICAgICAgICBpZiAoIVNldHRpbmdzLmdldChcInNldHRpbmdzXCIsIFwiY3VzdG9tY3NzXCIsIFwibGl2ZVVwZGF0ZVwiKSkgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaW5zZXJ0Q1NTKHZhbHVlKTtcclxuICAgICAgICB0aGlzLnNhdmVDU1ModmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGxvYWRDU1MoKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlZENzcyA9IERhdGFTdG9yZS5sb2FkQ3VzdG9tQ1NTKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0Q1NTKG5ld0Nzcykge1xyXG4gICAgICAgIGlmICh0eXBlb2YobmV3Q3NzKSA9PT0gXCJ1bmRlZmluZWRcIikgbmV3Q3NzID0gdGhpcy5pbnNlcnRlZENzcztcclxuICAgICAgICBlbHNlIHRoaXMuaW5zZXJ0ZWRDc3MgPSBuZXdDc3M7XHJcbiAgICAgICAgLy8gaWYgKCQoXCIjY3VzdG9tY3NzXCIpLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgLy8gICAgICQoXCJoZWFkXCIpLmFwcGVuZChcIjxzdHlsZSBpZD1cXFwiY3VzdG9tY3NzXFxcIj48L3N0eWxlPlwiKTtcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgLy8gJChcIiNjdXN0b21jc3NcIikudGV4dChuZXdDc3MpLmRldGFjaCgpLmFwcGVuZFRvKGRvY3VtZW50LmhlYWQpO1xyXG4gICAgICAgIERPTU1hbmFnZXIudXBkYXRlQ3VzdG9tQ1NTKG5ld0Nzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2F2ZUNTUyhuZXdDc3MpIHtcclxuICAgICAgICBpZiAodHlwZW9mKG5ld0NzcykgIT09IFwidW5kZWZpbmVkXCIpIHRoaXMuc2F2ZWRDc3MgPSBuZXdDc3M7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNhdmVDdXN0b21DU1ModGhpcy5zYXZlZENzcyk7XHJcbiAgICB9XHJcblxyXG4gICAgb3Blbk5hdGl2ZSgpIHtcclxuICAgICAgICBlbGVjdHJvbi5zaGVsbC5vcGVuRXh0ZXJuYWwoYGZpbGU6Ly8ke0RhdGFTdG9yZS5jdXN0b21DU1N9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgb3BlbkRldGFjaGVkKGN1cnJlbnRDU1MpIHtcclxuICAgICAgICBjb25zdCBlZGl0b3JSZWYgPSBSZWFjdC5jcmVhdGVSZWYoKTtcclxuICAgICAgICBjb25zdCBlZGl0b3IgPSBSZWFjdC5jcmVhdGVFbGVtZW50KENTU0VkaXRvciwge1xyXG4gICAgICAgICAgICBpZDogXCJiZC1mbG9hdGluZy1lZGl0b3JcIixcclxuICAgICAgICAgICAgcmVmOiBlZGl0b3JSZWYsXHJcbiAgICAgICAgICAgIGNzczogY3VycmVudENTUyxcclxuICAgICAgICAgICAgc2F2ZTogdGhpcy5zYXZlQ1NTLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIHVwZGF0ZTogdGhpcy5pbnNlcnRDU1MuYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgb3Blbk5hdGl2ZTogdGhpcy5vcGVuTmF0aXZlLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIG9uQ2hhbmdlOiB0aGlzLm9uQ2hhbmdlLmJpbmQodGhpcylcclxuICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgIEZsb2F0aW5nV2luZG93Q29udGFpbmVyLm9wZW4oe1xyXG4gICAgICAgICAgICBvbkNsb3NlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlzRGV0YWNoZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25SZXNpemU6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICghZWRpdG9yUmVmIHx8ICFlZGl0b3JSZWYuY3VycmVudCB8fCAhZWRpdG9yUmVmLmN1cnJlbnQucmVzaXplKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBlZGl0b3JSZWYuY3VycmVudC5yZXNpemUoKTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGl0bGU6IFwiQ3VzdG9tIENTUyBFZGl0b3JcIixcclxuICAgICAgICAgICAgaWQ6IFwiZmxvYXRpbmctZWRpdG9yLXdpbmRvd1wiLFxyXG4gICAgICAgICAgICBoZWlnaHQ6IDQ3MCxcclxuICAgICAgICAgICAgd2lkdGg6IDQxMCxcclxuICAgICAgICAgICAgY2VudGVyOiB0cnVlLFxyXG4gICAgICAgICAgICByZXNpemFibGU6IHRydWUsXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBlZGl0b3IsXHJcbiAgICAgICAgICAgIGNvbmZpcm1DbG9zZTogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFlZGl0b3JSZWYgfHwgIWVkaXRvclJlZi5jdXJyZW50KSByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWRpdG9yUmVmLmN1cnJlbnQuaGFzVW5zYXZlZENoYW5nZXM7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNvbmZpcm1hdGlvblRleHQ6IFwiWW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzIHRvIHlvdXIgQ3VzdG9tIENTUy4gQ2xvc2luZyB0aGlzIHdpbmRvdyB3aWxsIGxvc2UgYWxsIHRob3NlIGNoYW5nZXMuXCJcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmlzRGV0YWNoZWQgPSB0cnVlO1xyXG4gICAgICAgIFVzZXJTZXR0aW5ncy5jbG9zZSgpO1xyXG4gICAgICAgIERpc3BhdGNoZXIuZGlydHlEaXNwYXRjaCh7dHlwZTogQWN0aW9uVHlwZXMuTEFZRVJfUE9QfSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/customcss.js\n"); /***/ }), @@ -167,7 +167,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class DeveloperMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"DeveloperMode\";\n }\n\n get category() {\n return \"developer\";\n }\n\n get id() {\n return \"developerMode\";\n }\n\n get selectorModeID() {\n return \"copySelector\";\n }\n\n get selectorMode() {\n return this.get(this.selectorModeID);\n }\n\n constructor() {\n super();\n this.enableSelectors = this.enableSelectors.bind(this);\n this.disableSelectors = this.disableSelectors.bind(this);\n }\n\n enabled() {\n $(window).on(\"keydown.bdDevmode\", e => {\n if (e.which === 119 || e.which == 118) {\n //F8\n this.log(\"Debugger Activated\");\n debugger; // eslint-disable-line no-debugger\n }\n });\n if (this.selectorMode) this.enableSelectors();\n this.selectorCancel = this.registerSetting(this.selectorModeID, this.enableSelectors, this.disableSelectors);\n }\n\n disabled() {\n $(window).off(\"keydown.bdDevmode\");\n if (this.selectorMode) this.disableSelectors();\n if (this.selectorCancel) this.selectorCancel();\n }\n\n enableSelectors() {\n $(document).on(\"contextmenu.bdDevmode\", e => {\n this.lastSelector = this.getSelector(e.toElement);\n\n const attach = () => {\n let cm = $(\".contextMenu-HLZMGh\");\n\n if (cm.length <= 0) {\n cm = $(\"
\");\n cm.addClass($(\".app, .app-2rEoOp\").hasClass(\"theme-dark\") ? \"theme-dark\" : \"theme-light\");\n cm.appendTo(\".app, .app-2rEoOp\");\n cm.css(\"top\", e.clientY);\n cm.css(\"left\", e.clientX);\n $(document).on(\"click.bdDevModeCtx\", () => {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n });\n $(document).on(\"contextmenu.bdDevModeCtx\", () => {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n });\n $(document).on(\"keyup.bdDevModeCtx\", e => {\n if (e.keyCode === 27) {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n }\n });\n }\n\n const cmo = $(\"
\", {\n \"class\": \"itemGroup-1tL0uz\"\n });\n const cmi = $(\"
\", {\n \"class\": \"item-1Yvehc\",\n \"click\": () => {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ElectronModule.copy(this.lastSelector);\n cm.hide();\n }\n }).append($(\"\", {\n text: \"Copy Selector\"\n }));\n cmo.append(cmi);\n cm.append(cmo);\n if (cm.hasClass(\"undefined\")) cm.css(\"top\", \"-=\" + cmo.outerHeight());\n };\n\n setImmediate(attach);\n e.stopPropagation();\n });\n }\n\n disableSelectors() {\n $(document).off(\"contextmenu.bdDevmode\");\n $(document).off(\"contextmenu.bdDevModeCtx\");\n }\n\n getRules(element, css = element.ownerDocument.styleSheets) {\n // return [].concat(...[...css].map(s => [...s.cssRules || []])).filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(\", \").length < 8);\n const sheets = [...css].filter(s => !s.href || !s.href.includes(\"BetterDiscordApp\"));\n const rules = sheets.map(s => [...(s.cssRules || [])]).flat();\n const elementRules = rules.filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(\", \").length < 8 && !r.selectorText.split(\", \").includes(\"*\"));\n return elementRules;\n }\n\n getSelector(element) {\n if (element.id) return `#${element.id}`;\n const rules = this.getRules(element);\n const latestRule = rules[rules.length - 1];\n if (latestRule) return latestRule.selectorText;else if (element.classList.length) return `.${Array.from(element.classList).join(\".\")}`;\n return `.${Array.from(element.parentElement.classList).join(\".\")}`;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2RldmVsb3Blcm1vZGUuanM/NjY2OSJdLCJuYW1lcyI6WyJEZXZlbG9wZXJNb2RlIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic2VsZWN0b3JNb2RlSUQiLCJzZWxlY3Rvck1vZGUiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImVuYWJsZVNlbGVjdG9ycyIsImJpbmQiLCJkaXNhYmxlU2VsZWN0b3JzIiwiZW5hYmxlZCIsIiQiLCJ3aW5kb3ciLCJvbiIsImUiLCJ3aGljaCIsImxvZyIsInNlbGVjdG9yQ2FuY2VsIiwicmVnaXN0ZXJTZXR0aW5nIiwiZGlzYWJsZWQiLCJvZmYiLCJkb2N1bWVudCIsImxhc3RTZWxlY3RvciIsImdldFNlbGVjdG9yIiwidG9FbGVtZW50IiwiYXR0YWNoIiwiY20iLCJsZW5ndGgiLCJhZGRDbGFzcyIsImhhc0NsYXNzIiwiYXBwZW5kVG8iLCJjc3MiLCJjbGllbnRZIiwiY2xpZW50WCIsInJlbW92ZSIsImtleUNvZGUiLCJjbW8iLCJjbWkiLCJEaXNjb3JkTW9kdWxlcyIsIkVsZWN0cm9uTW9kdWxlIiwiY29weSIsImhpZGUiLCJhcHBlbmQiLCJ0ZXh0Iiwib3V0ZXJIZWlnaHQiLCJzZXRJbW1lZGlhdGUiLCJzdG9wUHJvcGFnYXRpb24iLCJnZXRSdWxlcyIsImVsZW1lbnQiLCJvd25lckRvY3VtZW50Iiwic3R5bGVTaGVldHMiLCJzaGVldHMiLCJmaWx0ZXIiLCJzIiwiaHJlZiIsImluY2x1ZGVzIiwicnVsZXMiLCJtYXAiLCJjc3NSdWxlcyIsImZsYXQiLCJlbGVtZW50UnVsZXMiLCJyIiwic2VsZWN0b3JUZXh0IiwibWF0Y2hlcyIsInN0eWxlIiwic3BsaXQiLCJsYXRlc3RSdWxlIiwiY2xhc3NMaXN0IiwiQXJyYXkiLCJmcm9tIiwiam9pbiIsInBhcmVudEVsZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFZSxtRUFB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QUFDQSxLQUFLLENBQUM3QixNQUFOLEdBQWUsQ0FBaEIsQ0FBeEI7QUFDQSxRQUFJdUMsVUFBSixFQUFnQixPQUFPQSxVQUFVLENBQUNKLFlBQWxCLENBQWhCLEtBQ0ssSUFBSWQsT0FBTyxDQUFDbUIsU0FBUixDQUFrQnhDLE1BQXRCLEVBQThCLE9BQVEsSUFBR3lDLEtBQUssQ0FBQ0MsSUFBTixDQUFXckIsT0FBTyxDQUFDbUIsU0FBbkIsRUFBOEJHLElBQTlCLENBQW1DLEdBQW5DLENBQXdDLEVBQW5EO0FBQ25DLFdBQVEsSUFBR0YsS0FBSyxDQUFDQyxJQUFOLENBQVdyQixPQUFPLENBQUN1QixhQUFSLENBQXNCSixTQUFqQyxFQUE0Q0csSUFBNUMsQ0FBaUQsR0FBakQsQ0FBc0QsRUFBakU7QUFDSDs7QUFsR2tELENBQXhDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZGV2ZWxvcGVybW9kZS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtEaXNjb3JkTW9kdWxlc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBEZXZlbG9wZXJNb2RlIGV4dGVuZHMgQnVpbHRpbiB7XHJcbiAgICBnZXQgbmFtZSgpIHtyZXR1cm4gXCJEZXZlbG9wZXJNb2RlXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImRldmVsb3BlclwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJkZXZlbG9wZXJNb2RlXCI7fVxyXG4gICAgZ2V0IHNlbGVjdG9yTW9kZUlEKCkge3JldHVybiBcImNvcHlTZWxlY3RvclwiO31cclxuICAgIGdldCBzZWxlY3Rvck1vZGUoKSB7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuc2VsZWN0b3JNb2RlSUQpO31cclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlU2VsZWN0b3JzID0gdGhpcy5lbmFibGVTZWxlY3RvcnMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVTZWxlY3RvcnMgPSB0aGlzLmRpc2FibGVTZWxlY3RvcnMuYmluZCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVkKCkge1xyXG4gICAgICAgICQod2luZG93KS5vbihcImtleWRvd24uYmREZXZtb2RlXCIsIChlKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlLndoaWNoID09PSAxMTkgfHwgZS53aGljaCA9PSAxMTgpIHsvL0Y4XHJcbiAgICAgICAgICAgICAgIHRoaXMubG9nKFwiRGVidWdnZXIgQWN0aXZhdGVkXCIpO1xyXG4gICAgICAgICAgICAgICBkZWJ1Z2dlcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1kZWJ1Z2dlclxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3JNb2RlKSB0aGlzLmVuYWJsZVNlbGVjdG9ycygpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0b3JDYW5jZWwgPSB0aGlzLnJlZ2lzdGVyU2V0dGluZyh0aGlzLnNlbGVjdG9yTW9kZUlELCB0aGlzLmVuYWJsZVNlbGVjdG9ycywgdGhpcy5kaXNhYmxlU2VsZWN0b3JzKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICAkKHdpbmRvdykub2ZmKFwia2V5ZG93bi5iZERldm1vZGVcIik7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3JNb2RlKSB0aGlzLmRpc2FibGVTZWxlY3RvcnMoKTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RvckNhbmNlbCkgdGhpcy5zZWxlY3RvckNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZVNlbGVjdG9ycygpIHtcclxuICAgICAgICAkKGRvY3VtZW50KS5vbihcImNvbnRleHRtZW51LmJkRGV2bW9kZVwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3IoZS50b0VsZW1lbnQpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgYXR0YWNoID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICBsZXQgY20gPSAkKFwiLmNvbnRleHRNZW51LUhMWk1HaFwiKTtcclxuICAgICAgICAgICAgICAgaWYgKGNtLmxlbmd0aCA8PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICBjbSA9ICQoXCI8ZGl2IGNsYXNzPVxcXCJjb250ZXh0TWVudS1ITFpNR2ggYmQtY29udGV4dC1tZW51XFxcIj48L2Rpdj5cIik7XHJcbiAgICAgICAgICAgICAgICAgICBjbS5hZGRDbGFzcygkKFwiLmFwcCwgLmFwcC0yckVvT3BcIikuaGFzQ2xhc3MoXCJ0aGVtZS1kYXJrXCIpID8gXCJ0aGVtZS1kYXJrXCIgOiBcInRoZW1lLWxpZ2h0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgY20uYXBwZW5kVG8oXCIuYXBwLCAuYXBwLTJyRW9PcFwiKTtcclxuICAgICAgICAgICAgICAgICAgIGNtLmNzcyhcInRvcFwiLCBlLmNsaWVudFkpO1xyXG4gICAgICAgICAgICAgICAgICAgY20uY3NzKFwibGVmdFwiLCBlLmNsaWVudFgpO1xyXG4gICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJjbGljay5iZERldk1vZGVDdHhcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgIGNtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihcIi5iZERldk1vZGVDdHhcIik7XHJcbiAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwiY29udGV4dG1lbnUuYmREZXZNb2RlQ3R4XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBjbS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCIuYmREZXZNb2RlQ3R4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbihcImtleXVwLmJkRGV2TW9kZUN0eFwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCIuYmREZXZNb2RlQ3R4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICBjb25zdCBjbW8gPSAkKFwiPGRpdi8+XCIsIHtcclxuICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGVtR3JvdXAtMXRMMHV6XCJcclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0ZW0tMVl2ZWhjXCIsXHJcbiAgICAgICAgICAgICAgICAgICBcImNsaWNrXCI6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTW9kdWxlcy5FbGVjdHJvbk1vZHVsZS5jb3B5KHRoaXMubGFzdFNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICBjbS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH0pLmFwcGVuZCgkKFwiPHNwYW4vPlwiLCB7dGV4dDogXCJDb3B5IFNlbGVjdG9yXCJ9KSk7XHJcbiAgICAgICAgICAgICAgIGNtby5hcHBlbmQoY21pKTtcclxuICAgICAgICAgICAgICAgY20uYXBwZW5kKGNtbyk7XHJcbiAgICAgICAgICAgICAgIGlmIChjbS5oYXNDbGFzcyhcInVuZGVmaW5lZFwiKSkgY20uY3NzKFwidG9wXCIsICBcIi09XCIgKyBjbW8ub3V0ZXJIZWlnaHQoKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoYXR0YWNoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlU2VsZWN0b3JzKCkge1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZihcImNvbnRleHRtZW51LmJkRGV2bW9kZVwiKTtcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJjb250ZXh0bWVudS5iZERldk1vZGVDdHhcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UnVsZXMoZWxlbWVudCwgY3NzID0gZWxlbWVudC5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIFtdLmNvbmNhdCguLi5bLi4uY3NzXS5tYXAocyA9PiBbLi4ucy5jc3NSdWxlcyB8fCBbXV0pKS5maWx0ZXIociA9PiByICYmIHIuc2VsZWN0b3JUZXh0ICYmIGVsZW1lbnQubWF0Y2hlcyhyLnNlbGVjdG9yVGV4dCkgJiYgci5zdHlsZS5sZW5ndGggJiYgci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5sZW5ndGggPCA4KTtcclxuICAgICAgICBjb25zdCBzaGVldHMgPSBbLi4uY3NzXS5maWx0ZXIocyA9PiAhcy5ocmVmIHx8ICFzLmhyZWYuaW5jbHVkZXMoXCJCZXR0ZXJEaXNjb3JkQXBwXCIpKTtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0cy5tYXAocyA9PiBbLi4uKHMuY3NzUnVsZXMgfHwgW10pXSkuZmxhdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlcyA9IHJ1bGVzLmZpbHRlcihyID0+IHIgJiYgci5zZWxlY3RvclRleHQgJiYgZWxlbWVudC5tYXRjaGVzKHIuc2VsZWN0b3JUZXh0KSAmJiByLnN0eWxlLmxlbmd0aCAmJiByLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmxlbmd0aCA8IDggJiYgIXIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFJ1bGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdFJ1bGUgPSBydWxlc1tydWxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAobGF0ZXN0UnVsZSkgcmV0dXJuIGxhdGVzdFJ1bGUuc2VsZWN0b3JUZXh0O1xyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCkgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgICAgIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/developermode.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 DeveloperMode extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"DeveloperMode\";\n }\n\n get category() {\n return \"developer\";\n }\n\n get id() {\n return \"developerMode\";\n }\n\n get selectorModeID() {\n return \"copySelector\";\n }\n\n get selectorMode() {\n return this.get(this.selectorModeID);\n }\n\n constructor() {\n super();\n this.enableSelectors = this.enableSelectors.bind(this);\n this.disableSelectors = this.disableSelectors.bind(this);\n }\n\n enabled() {\n $(window).on(\"keydown.bdDevmode\", e => {\n if (e.which === 119 || e.which == 118) {\n //F8\n this.log(\"Debugger Activated\");\n debugger; // eslint-disable-line no-debugger\n }\n });\n if (this.selectorMode) this.enableSelectors();\n this.selectorCancel = this.registerSetting(this.selectorModeID, this.enableSelectors, this.disableSelectors);\n }\n\n disabled() {\n $(window).off(\"keydown.bdDevmode\");\n if (this.selectorMode) this.disableSelectors();\n if (this.selectorCancel) this.selectorCancel();\n }\n\n enableSelectors() {\n $(document).on(\"contextmenu.bdDevmode\", e => {\n this.lastSelector = this.getSelector(e.toElement);\n\n const attach = () => {\n let cm = $(\".contextMenu-HLZMGh\");\n\n if (cm.length <= 0) {\n cm = $(\"
\");\n cm.addClass($(\".app, .app-2rEoOp\").hasClass(\"theme-dark\") ? \"theme-dark\" : \"theme-light\");\n cm.appendTo(\".app, .app-2rEoOp\");\n cm.css(\"top\", e.clientY);\n cm.css(\"left\", e.clientX);\n $(document).on(\"click.bdDevModeCtx\", () => {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n });\n $(document).on(\"contextmenu.bdDevModeCtx\", () => {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n });\n $(document).on(\"keyup.bdDevModeCtx\", event => {\n if (event.keyCode === 27) {\n cm.remove();\n $(document).off(\".bdDevModeCtx\");\n }\n });\n }\n\n const cmo = $(\"
\", {\n \"class\": \"itemGroup-1tL0uz\"\n });\n const cmi = $(\"
\", {\n \"class\": \"item-1Yvehc\",\n \"click\": () => {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ElectronModule.copy(this.lastSelector);\n cm.hide();\n }\n }).append($(\"\", {\n text: \"Copy Selector\"\n }));\n cmo.append(cmi);\n cm.append(cmo);\n if (cm.hasClass(\"undefined\")) cm.css(\"top\", \"-=\" + cmo.outerHeight());\n };\n\n setImmediate(attach);\n e.stopPropagation();\n });\n }\n\n disableSelectors() {\n $(document).off(\"contextmenu.bdDevmode\");\n $(document).off(\"contextmenu.bdDevModeCtx\");\n }\n\n getRules(element, css = element.ownerDocument.styleSheets) {\n // return [].concat(...[...css].map(s => [...s.cssRules || []])).filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(\", \").length < 8);\n const sheets = [...css].filter(s => !s.href || !s.href.includes(\"BetterDiscordApp\"));\n const rules = sheets.map(s => [...(s.cssRules || [])]).flat();\n const elementRules = rules.filter(r => r && r.selectorText && element.matches(r.selectorText) && r.style.length && r.selectorText.split(\", \").length < 8 && !r.selectorText.split(\", \").includes(\"*\"));\n return elementRules;\n }\n\n getSelector(element) {\n if (element.id) return `#${element.id}`;\n const rules = this.getRules(element);\n const latestRule = rules[rules.length - 1];\n if (latestRule) return latestRule.selectorText;else if (element.classList.length) return `.${Array.from(element.classList).join(\".\")}`;\n return `.${Array.from(element.parentElement.classList).join(\".\")}`;\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2RldmVsb3Blcm1vZGUuanM/NjY2OSJdLCJuYW1lcyI6WyJEZXZlbG9wZXJNb2RlIiwiQnVpbHRpbiIsIm5hbWUiLCJjYXRlZ29yeSIsImlkIiwic2VsZWN0b3JNb2RlSUQiLCJzZWxlY3Rvck1vZGUiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImVuYWJsZVNlbGVjdG9ycyIsImJpbmQiLCJkaXNhYmxlU2VsZWN0b3JzIiwiZW5hYmxlZCIsIiQiLCJ3aW5kb3ciLCJvbiIsImUiLCJ3aGljaCIsImxvZyIsInNlbGVjdG9yQ2FuY2VsIiwicmVnaXN0ZXJTZXR0aW5nIiwiZGlzYWJsZWQiLCJvZmYiLCJkb2N1bWVudCIsImxhc3RTZWxlY3RvciIsImdldFNlbGVjdG9yIiwidG9FbGVtZW50IiwiYXR0YWNoIiwiY20iLCJsZW5ndGgiLCJhZGRDbGFzcyIsImhhc0NsYXNzIiwiYXBwZW5kVG8iLCJjc3MiLCJjbGllbnRZIiwiY2xpZW50WCIsInJlbW92ZSIsImV2ZW50Iiwia2V5Q29kZSIsImNtbyIsImNtaSIsIkRpc2NvcmRNb2R1bGVzIiwiRWxlY3Ryb25Nb2R1bGUiLCJjb3B5IiwiaGlkZSIsImFwcGVuZCIsInRleHQiLCJvdXRlckhlaWdodCIsInNldEltbWVkaWF0ZSIsInN0b3BQcm9wYWdhdGlvbiIsImdldFJ1bGVzIiwiZWxlbWVudCIsIm93bmVyRG9jdW1lbnQiLCJzdHlsZVNoZWV0cyIsInNoZWV0cyIsImZpbHRlciIsInMiLCJocmVmIiwiaW5jbHVkZXMiLCJydWxlcyIsIm1hcCIsImNzc1J1bGVzIiwiZmxhdCIsImVsZW1lbnRSdWxlcyIsInIiLCJzZWxlY3RvclRleHQiLCJtYXRjaGVzIiwic3R5bGUiLCJzcGxpdCIsImxhdGVzdFJ1bGUiLCJjbGFzc0xpc3QiLCJBcnJheSIsImZyb20iLCJqb2luIiwicGFyZW50RWxlbWVudCJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtB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QUdWLEtBQUssQ0FBQ0EsS0FBSyxDQUFDOUIsTUFBTixHQUFlLENBQWhCLENBQXhCO0FBQ0EsUUFBSXdDLFVBQUosRUFBZ0IsT0FBT0EsVUFBVSxDQUFDSixZQUFsQixDQUFoQixLQUNLLElBQUlkLE9BQU8sQ0FBQ21CLFNBQVIsQ0FBa0J6QyxNQUF0QixFQUE4QixPQUFRLElBQUcwQyxLQUFLLENBQUNDLElBQU4sQ0FBV3JCLE9BQU8sQ0FBQ21CLFNBQW5CLEVBQThCRyxJQUE5QixDQUFtQyxHQUFuQyxDQUF3QyxFQUFuRDtBQUNuQyxXQUFRLElBQUdGLEtBQUssQ0FBQ0MsSUFBTixDQUFXckIsT0FBTyxDQUFDdUIsYUFBUixDQUFzQkosU0FBakMsRUFBNENHLElBQTVDLENBQWlELEdBQWpELENBQXNELEVBQWpFO0FBQ0g7O0FBbEdrRCxDQUF4QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2RldmVsb3Blcm1vZGUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQnVpbHRpbiBmcm9tIFwiLi4vc3RydWN0cy9idWlsdGluXCI7XHJcbmltcG9ydCB7RGlzY29yZE1vZHVsZXN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRGV2ZWxvcGVyTW9kZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRGV2ZWxvcGVyTW9kZVwiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJkZXZlbG9wZXJcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZGV2ZWxvcGVyTW9kZVwiO31cclxuICAgIGdldCBzZWxlY3Rvck1vZGVJRCgpIHtyZXR1cm4gXCJjb3B5U2VsZWN0b3JcIjt9XHJcbiAgICBnZXQgc2VsZWN0b3JNb2RlKCkge3JldHVybiB0aGlzLmdldCh0aGlzLnNlbGVjdG9yTW9kZUlEKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmVuYWJsZVNlbGVjdG9ycyA9IHRoaXMuZW5hYmxlU2VsZWN0b3JzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlU2VsZWN0b3JzID0gdGhpcy5kaXNhYmxlU2VsZWN0b3JzLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlZCgpIHtcclxuICAgICAgICAkKHdpbmRvdykub24oXCJrZXlkb3duLmJkRGV2bW9kZVwiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZS53aGljaCA9PT0gMTE5IHx8IGUud2hpY2ggPT0gMTE4KSB7Ly9GOFxyXG4gICAgICAgICAgICAgICB0aGlzLmxvZyhcIkRlYnVnZ2VyIEFjdGl2YXRlZFwiKTtcclxuICAgICAgICAgICAgICAgZGVidWdnZXI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZGVidWdnZXJcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdG9yTW9kZSkgdGhpcy5lbmFibGVTZWxlY3RvcnMoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdG9yQ2FuY2VsID0gdGhpcy5yZWdpc3RlclNldHRpbmcodGhpcy5zZWxlY3Rvck1vZGVJRCwgdGhpcy5lbmFibGVTZWxlY3RvcnMsIHRoaXMuZGlzYWJsZVNlbGVjdG9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgJCh3aW5kb3cpLm9mZihcImtleWRvd24uYmREZXZtb2RlXCIpO1xyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdG9yTW9kZSkgdGhpcy5kaXNhYmxlU2VsZWN0b3JzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3JDYW5jZWwpIHRoaXMuc2VsZWN0b3JDYW5jZWwoKTtcclxuICAgIH1cclxuXHJcbiAgICBlbmFibGVTZWxlY3RvcnMoKSB7XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJjb250ZXh0bWVudS5iZERldm1vZGVcIiwgKGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0b3IgPSB0aGlzLmdldFNlbGVjdG9yKGUudG9FbGVtZW50KTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgbGV0IGNtID0gJChcIi5jb250ZXh0TWVudS1ITFpNR2hcIik7XHJcbiAgICAgICAgICAgICAgIGlmIChjbS5sZW5ndGggPD0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgY20gPSAkKFwiPGRpdiBjbGFzcz1cXFwiY29udGV4dE1lbnUtSExaTUdoIGJkLWNvbnRleHQtbWVudVxcXCI+PC9kaXY+XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgY20uYWRkQ2xhc3MoJChcIi5hcHAsIC5hcHAtMnJFb09wXCIpLmhhc0NsYXNzKFwidGhlbWUtZGFya1wiKSA/IFwidGhlbWUtZGFya1wiIDogXCJ0aGVtZS1saWdodFwiKTtcclxuICAgICAgICAgICAgICAgICAgIGNtLmFwcGVuZFRvKFwiLmFwcCwgLmFwcC0yckVvT3BcIik7XHJcbiAgICAgICAgICAgICAgICAgICBjbS5jc3MoXCJ0b3BcIiwgZS5jbGllbnRZKTtcclxuICAgICAgICAgICAgICAgICAgIGNtLmNzcyhcImxlZnRcIiwgZS5jbGllbnRYKTtcclxuICAgICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLm9uKFwiY2xpY2suYmREZXZNb2RlQ3R4XCIsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBjbS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCIuYmREZXZNb2RlQ3R4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vbihcImNvbnRleHRtZW51LmJkRGV2TW9kZUN0eFwiLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgY20ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub2ZmKFwiLmJkRGV2TW9kZUN0eFwiKTtcclxuICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgJChkb2N1bWVudCkub24oXCJrZXl1cC5iZERldk1vZGVDdHhcIiwgKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IDI3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCIuYmREZXZNb2RlQ3R4XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICBjb25zdCBjbW8gPSAkKFwiPGRpdi8+XCIsIHtcclxuICAgICAgICAgICAgICAgICAgIFwiY2xhc3NcIjogXCJpdGVtR3JvdXAtMXRMMHV6XCJcclxuICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgIGNvbnN0IGNtaSA9ICQoXCI8ZGl2Lz5cIiwge1xyXG4gICAgICAgICAgICAgICAgICAgXCJjbGFzc1wiOiBcIml0ZW0tMVl2ZWhjXCIsXHJcbiAgICAgICAgICAgICAgICAgICBcImNsaWNrXCI6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICBEaXNjb3JkTW9kdWxlcy5FbGVjdHJvbk1vZHVsZS5jb3B5KHRoaXMubGFzdFNlbGVjdG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICBjbS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIH0pLmFwcGVuZCgkKFwiPHNwYW4vPlwiLCB7dGV4dDogXCJDb3B5IFNlbGVjdG9yXCJ9KSk7XHJcbiAgICAgICAgICAgICAgIGNtby5hcHBlbmQoY21pKTtcclxuICAgICAgICAgICAgICAgY20uYXBwZW5kKGNtbyk7XHJcbiAgICAgICAgICAgICAgIGlmIChjbS5oYXNDbGFzcyhcInVuZGVmaW5lZFwiKSkgY20uY3NzKFwidG9wXCIsICBcIi09XCIgKyBjbW8ub3V0ZXJIZWlnaHQoKSk7XHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBzZXRJbW1lZGlhdGUoYXR0YWNoKTtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlU2VsZWN0b3JzKCkge1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9mZihcImNvbnRleHRtZW51LmJkRGV2bW9kZVwiKTtcclxuICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJjb250ZXh0bWVudS5iZERldk1vZGVDdHhcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0UnVsZXMoZWxlbWVudCwgY3NzID0gZWxlbWVudC5vd25lckRvY3VtZW50LnN0eWxlU2hlZXRzKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIFtdLmNvbmNhdCguLi5bLi4uY3NzXS5tYXAocyA9PiBbLi4ucy5jc3NSdWxlcyB8fCBbXV0pKS5maWx0ZXIociA9PiByICYmIHIuc2VsZWN0b3JUZXh0ICYmIGVsZW1lbnQubWF0Y2hlcyhyLnNlbGVjdG9yVGV4dCkgJiYgci5zdHlsZS5sZW5ndGggJiYgci5zZWxlY3RvclRleHQuc3BsaXQoXCIsIFwiKS5sZW5ndGggPCA4KTtcclxuICAgICAgICBjb25zdCBzaGVldHMgPSBbLi4uY3NzXS5maWx0ZXIocyA9PiAhcy5ocmVmIHx8ICFzLmhyZWYuaW5jbHVkZXMoXCJCZXR0ZXJEaXNjb3JkQXBwXCIpKTtcclxuICAgICAgICBjb25zdCBydWxlcyA9IHNoZWV0cy5tYXAocyA9PiBbLi4uKHMuY3NzUnVsZXMgfHwgW10pXSkuZmxhdCgpO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnRSdWxlcyA9IHJ1bGVzLmZpbHRlcihyID0+IHIgJiYgci5zZWxlY3RvclRleHQgJiYgZWxlbWVudC5tYXRjaGVzKHIuc2VsZWN0b3JUZXh0KSAmJiByLnN0eWxlLmxlbmd0aCAmJiByLnNlbGVjdG9yVGV4dC5zcGxpdChcIiwgXCIpLmxlbmd0aCA8IDggJiYgIXIuc2VsZWN0b3JUZXh0LnNwbGl0KFwiLCBcIikuaW5jbHVkZXMoXCIqXCIpKTtcclxuICAgICAgICByZXR1cm4gZWxlbWVudFJ1bGVzO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFNlbGVjdG9yKGVsZW1lbnQpIHtcclxuICAgICAgICBpZiAoZWxlbWVudC5pZCkgcmV0dXJuIGAjJHtlbGVtZW50LmlkfWA7XHJcbiAgICAgICAgY29uc3QgcnVsZXMgPSB0aGlzLmdldFJ1bGVzKGVsZW1lbnQpO1xyXG4gICAgICAgIGNvbnN0IGxhdGVzdFJ1bGUgPSBydWxlc1tydWxlcy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAobGF0ZXN0UnVsZSkgcmV0dXJuIGxhdGVzdFJ1bGUuc2VsZWN0b3JUZXh0O1xyXG4gICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuY2xhc3NMaXN0Lmxlbmd0aCkgcmV0dXJuIGAuJHtBcnJheS5mcm9tKGVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgICAgIHJldHVybiBgLiR7QXJyYXkuZnJvbShlbGVtZW50LnBhcmVudEVsZW1lbnQuY2xhc3NMaXN0KS5qb2luKFwiLlwiKX1gO1xyXG4gICAgfVxyXG59OyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/builtins/developermode.js\n"); /***/ }), @@ -191,7 +191,7 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _str /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes.js\");\n\n\n\nconst headerHTML = `
\n \n \n
`;\nconst twitchEmoteHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\nconst favoritesHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\n\nconst makeEmote = (emote, url, options = {}) => {\n const {\n onContextMenu,\n onClick\n } = options;\n const emoteContainer = $(`
\n \"${emote}\"\n
`)[0];\n if (onContextMenu) emoteContainer.addEventListener(\"contextmenu\", onContextMenu);\n emoteContainer.addEventListener(\"click\", onClick);\n return emoteContainer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteMenu\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emoteMenu\";\n }\n\n get hideEmojisID() {\n return \"hideEmojiMenu\";\n }\n\n get hideEmojis() {\n return this.get(this.hideEmojisID);\n }\n\n constructor() {\n super();\n this.lastTab = \"bda-qem-emojis\";\n this.favoriteEmotes = {};\n this.qmeHeader = $(headerHTML)[0];\n\n for (const button of this.qmeHeader.getElementsByTagName(\"button\")) button.addEventListener(\"click\", this.switchMenu.bind(this));\n\n this.teContainer = $(twitchEmoteHTML)[0];\n this.teContainerInner = this.teContainer.querySelector(\".emote-menu-inner\");\n this.faContainer = $(favoritesHTML)[0];\n this.faContainerInner = this.faContainer.querySelector(\".emote-menu-inner\");\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) this.observe(mutation);\n });\n this.enableHideEmojis = this.enableHideEmojis.bind(this);\n this.disableHideEmojis = this.disableHideEmojis.bind(this);\n this.updateTwitchEmotes = this.updateTwitchEmotes.bind(this);\n }\n\n initialize() {\n super.initialize();\n const fe = modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].getBDData(\"bdfavemotes\");\n if (fe !== \"\" && fe !== null) this.favoriteEmotes = JSON.parse(atob(fe));\n this.updateFavorites();\n }\n\n async enabled() {\n this.log(\"Starting to observe\");\n this.observer.observe(document.getElementById(\"app-mount\"), {\n childList: true,\n subtree: true\n });\n this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis);\n if (this.hideEmojis) this.enableHideEmojis();\n if (_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].emotesLoaded) this.updateTwitchEmotes();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].on(\"emotes-loaded\", this.updateTwitchEmotes);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].off(\"emotes-loaded\", this.updateTwitchEmotes);\n this.observer.disconnect();\n this.disableHideEmojis();\n if (this.hideEmojiCancel) this.hideEmojiCancel();\n }\n\n enableHideEmojis() {\n $(\".emojiPicker-3m1S-j\").addClass(\"bda-qme-hidden\");\n }\n\n disableHideEmojis() {\n $(\".emojiPicker-3m1S-j\").removeClass(\"bda-qme-hidden\");\n }\n\n insertEmote(emote) {\n const ta = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(ta[0], ta.val().slice(-1) == \" \" ? ta.val() + emote : ta.val() + \" \" + emote);\n }\n\n favContext(e) {\n e.stopPropagation();\n const em = e.target.closest(\".emote-container\").children[0];\n const menu = $(`
Remove
`);\n menu.css({\n top: e.pageY - $(\"#bda-qem-favourite-container\").offset().top,\n left: e.pageX - $(\"#bda-qem-favourite-container\").offset().left\n });\n $(em).parent().append(menu);\n menu.on(\"click\", e => {\n e.preventDefault();\n e.stopPropagation();\n $(em).remove();\n delete this.favoriteEmotes[$(em).attr(\"title\")];\n this.updateFavorites();\n $(document).off(\"mousedown.emotemenu\");\n });\n $(document).on(\"mousedown.emotemenu\", function (e) {\n if (e.target.id == \"removemenu\") return;\n $(\"#removemenu\").remove();\n $(document).off(\"mousedown.emotemenu\");\n });\n }\n\n switchMenu(e) {\n let id = typeof e == \"string\" ? e : $(e.target).attr(\"id\");\n if (id == \"bda-qem-emojis\" && this.hideEmojis) id = \"bda-qem-favourite\";\n const twitch = $(\"#bda-qem-twitch\");\n const fav = $(\"#bda-qem-favourite\");\n const emojis = $(\"#bda-qem-emojis\");\n twitch.removeClass(\"active\");\n fav.removeClass(\"active\");\n emojis.removeClass(\"active\");\n $(\".emojiPicker-3m1S-j\").hide();\n $(\"#bda-qem-favourite-container\").hide();\n $(\"#bda-qem-twitch-container\").hide();\n\n switch (id) {\n case \"bda-qem-twitch\":\n twitch.addClass(\"active\");\n $(\"#bda-qem-twitch-container\").show();\n break;\n\n case \"bda-qem-favourite\":\n fav.addClass(\"active\");\n $(\"#bda-qem-favourite-container\").show();\n break;\n\n case \"bda-qem-emojis\":\n emojis.addClass(\"active\");\n $(\".emojiPicker-3m1S-j\").show();\n $(\".emojiPicker-3m1S-j input\").focus();\n break;\n }\n\n if (id) this.lastTab = id;\n }\n\n observe(mutation) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return;\n const node = mutation.addedNodes[0];\n if (!node.classList.contains(\"popout-3sVMXz\") || node.classList.contains(\"popoutLeft-30WmrD\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length) return;\n const e = $(node);\n if (this.hideEmojis) e.addClass(\"bda-qme-hidden\");else e.removeClass(\"bda-qme-hidden\");\n e.prepend(this.qmeHeader);\n e.append(this.teContainer);\n e.append(this.faContainer);\n this.switchMenu(this.lastTab);\n }\n\n favorite(name, url) {\n if (!this.favoriteEmotes.hasOwnProperty(name)) this.favoriteEmotes[name] = url;\n this.updateFavorites();\n }\n\n updateTwitchEmotes() {\n while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\")) {\n if (!_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\").hasOwnProperty(emote)) continue;\n const url = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\")[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote)\n });\n this.teContainerInner.append(emoteElement);\n }\n }\n\n updateFavorites() {\n while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove();\n\n for (const emote in this.favoriteEmotes) {\n const url = this.favoriteEmotes[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote),\n onContextMenu: this.favContext.bind(this)\n });\n this.faContainerInner.append(emoteElement);\n }\n\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].setBDData(\"bdfavemotes\", btoa(JSON.stringify(this.favoriteEmotes)));\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcz8yYWNlIl0sIm5hbWVzIjpbImhlYWRlckhUTUwiLCJ0d2l0Y2hFbW90ZUhUTUwiLCJmYXZvcml0ZXNIVE1MIiwibWFrZUVtb3RlIiwiZW1vdGUiLCJ1cmwiLCJvcHRpb25zIiwib25Db250ZXh0TWVudSIsIm9uQ2xpY2siLCJlbW90ZUNvbnRhaW5lciIsIiQiLCJhZGRFdmVudExpc3RlbmVyIiwiRW1vdGVNZW51IiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImhpZGVFbW9qaXNJRCIsImhpZGVFbW9qaXMiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImxhc3RUYWIiLCJmYXZvcml0ZUVtb3RlcyIsInFtZUhlYWRlciIsImJ1dHRvbiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3dpdGNoTWVudSIsImJpbmQiLCJ0ZUNvbnRhaW5lciIsInRlQ29udGFpbmVySW5uZXIiLCJxdWVyeVNlbGVjdG9yIiwiZmFDb250YWluZXIiLCJmYUNvbnRhaW5lcklubmVyIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibXV0YXRpb24iLCJvYnNlcnZlIiwiZW5hYmxlSGlkZUVtb2ppcyIsImRpc2FibGVIaWRlRW1vamlzIiwidXBkYXRlVHdpdGNoRW1vdGVzIiwiaW5pdGlhbGl6ZSIsImZlIiwiRGF0YVN0b3JlIiwiZ2V0QkREYXRhIiwiSlNPTiIsInBhcnNlIiwiYXRvYiIsInVwZGF0ZUZhdm9yaXRlcyIsImVuYWJsZWQiLCJsb2ciLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImhpZGVFbW9qaUNhbmNlbCIsInJlZ2lzdGVyU2V0dGluZyIsIkVtb3RlTW9kdWxlIiwiZW1vdGVzTG9hZGVkIiwiRXZlbnRzIiwib24iLCJkaXNhYmxlZCIsIm9mZiIsImRpc2Nvbm5lY3QiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiaW5zZXJ0RW1vdGUiLCJ0YSIsIlV0aWxpdGllcyIsImdldFRleHRBcmVhIiwiaW5zZXJ0VGV4dCIsInZhbCIsInNsaWNlIiwiZmF2Q29udGV4dCIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJlbSIsInRhcmdldCIsImNsb3Nlc3QiLCJjaGlsZHJlbiIsIm1lbnUiLCJjc3MiLCJ0b3AiLCJwYWdlWSIsIm9mZnNldCIsImxlZnQiLCJwYWdlWCIsInBhcmVudCIsImFwcGVuZCIsInByZXZlbnREZWZhdWx0IiwicmVtb3ZlIiwiYXR0ciIsInR3aXRjaCIsImZhdiIsImVtb2ppcyIsImhpZGUiLCJzaG93IiwiZm9jdXMiLCJhZGRlZE5vZGVzIiwibGVuZ3RoIiwiRWxlbWVudCIsIm5vZGUiLCJjbGFzc0xpc3QiLCJjb250YWlucyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJwcmVwZW5kIiwiZmF2b3JpdGUiLCJoYXNPd25Qcm9wZXJ0eSIsImZpcnN0Q2hpbGQiLCJnZXRDYXRlZ29yeSIsImVtb3RlRWxlbWVudCIsInNldEJERGF0YSIsImJ0b2EiLCJzdHJpbmdpZnkiXSwibWFwcGluZ3MiOiJBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDQTtBQUVBO0FBRUEsTUFBTUEsVUFBVSxHQUFJOzs7O09BQXBCO0FBTUEsTUFBTUMsZUFBZSxHQUFJOzs7Ozs7OztPQUF6QjtBQVVBLE1BQU1DLGFBQWEsR0FBSTs7Ozs7Ozs7T0FBdkI7O0FBVUEsTUFBTUMsU0FBUyxHQUFHLENBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFhQyxPQUFPLEdBQUcsRUFBdkIsS0FBOEI7QUFDNUMsUUFBTTtBQUFDQyxpQkFBRDtBQUFnQkM7QUFBaEIsTUFBMkJGLE9BQWpDO0FBQ0EsUUFBTUcsY0FBYyxHQUFHQyxDQUFDLENBQUU7dUNBQ1NOLEtBQU0sVUFBU0MsR0FBSSxZQUFXRCxLQUFNO1dBRC9DLENBQUQsQ0FFZCxDQUZjLENBQXZCO0FBR0EsTUFBSUcsYUFBSixFQUFtQkUsY0FBYyxDQUFDRSxn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Q0FBVjtBQUE4Q0cscUJBQWEsRUFBRSxLQUFLbUUsVUFBTCxDQUFnQjlDLElBQWhCLENBQXFCLElBQXJCO0FBQTdELE9BQWIsQ0FBOUI7QUFDQSxXQUFLSyxnQkFBTCxDQUFzQndELE1BQXRCLENBQTZCc0IsWUFBN0I7QUFDSDs7QUFDRG5FLHFEQUFTLENBQUNvRSxTQUFWLENBQW9CLGFBQXBCLEVBQW1DQyxJQUFJLENBQUNuRSxJQUFJLENBQUNvRSxTQUFMLENBQWUsS0FBSzNGLGNBQXBCLENBQUQsQ0FBdkM7QUFDSDs7QUFsSzhDLENBQXBDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZW1vdGVtZW51LmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5pbXBvcnQge0RhdGFTdG9yZSwgVXRpbGl0aWVzLCBFdmVudHN9IGZyb20gXCJtb2R1bGVzXCI7XHJcblxyXG5pbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vZW1vdGVzXCI7XHJcblxyXG5jb25zdCBoZWFkZXJIVE1MID0gYDxkaXYgaWQ9XCJiZGEtcWVtXCI+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiYWN0aXZlXCIgaWQ9XCJiZGEtcWVtLXR3aXRjaFwiPlR3aXRjaDwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImJkYS1xZW0tZmF2b3VyaXRlXCI+RmF2b3VyaXRlPC9idXR0b24+XHJcbiAgICA8YnV0dG9uIGlkPVwiYmRhLXFlbS1lbW9qaXNcIj5FbW9qaXM8L2J1dHRvbmQ+XHJcbjwvZGl2PmA7XHJcblxyXG5jb25zdCB0d2l0Y2hFbW90ZUhUTUwgPSBgPGRpdiBpZD1cImJkYS1xZW0tdHdpdGNoLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJXcmFwLTJsSkVrZCBmYWRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyIHNjcm9sbGVyLTJGS0ZQR1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vdGUtbWVudS1pbm5lclwiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IGZhdm9yaXRlc0hUTUwgPSBgPGRpdiBpZD1cImJkYS1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyLXdyYXAgc2Nyb2xsZXJXcmFwLTJsSkVrZCBmYWRlXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInNjcm9sbGVyIHNjcm9sbGVyLTJGS0ZQR1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZW1vdGUtbWVudS1pbm5lclwiPlxyXG5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuPC9kaXY+YDtcclxuXHJcbmNvbnN0IG1ha2VFbW90ZSA9IChlbW90ZSwgdXJsLCBvcHRpb25zID0ge30pID0+IHtcclxuICAgIGNvbnN0IHtvbkNvbnRleHRNZW51LCBvbkNsaWNrfSA9IG9wdGlvbnM7XHJcbiAgICBjb25zdCBlbW90ZUNvbnRhaW5lciA9ICQoYDxkaXYgY2xhc3M9XCJlbW90ZS1jb250YWluZXJcIj5cclxuICAgICAgICA8aW1nIGNsYXNzPVwiZW1vdGUtaWNvblwiIGFsdD1cIiR7ZW1vdGV9XCIgc3JjPVwiJHt1cmx9XCIgdGl0bGU9XCIke2Vtb3RlfVwiPlxyXG4gICAgPC9kaXY+YClbMF07XHJcbiAgICBpZiAob25Db250ZXh0TWVudSkgZW1vdGVDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNvbnRleHRtZW51XCIsIG9uQ29udGV4dE1lbnUpO1xyXG4gICAgZW1vdGVDb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG9uQ2xpY2spO1xyXG4gICAgcmV0dXJuIGVtb3RlQ29udGFpbmVyO1xyXG59O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IGNsYXNzIEVtb3RlTWVudSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRW1vdGVNZW51XCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwiZW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZW1vdGVNZW51XCI7fVxyXG4gICAgZ2V0IGhpZGVFbW9qaXNJRCgpIHtyZXR1cm4gXCJoaWRlRW1vamlNZW51XCI7fVxyXG4gICAgZ2V0IGhpZGVFbW9qaXMoKSB7cmV0dXJuIHRoaXMuZ2V0KHRoaXMuaGlkZUVtb2ppc0lEKTt9XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgc3VwZXIoKTtcclxuICAgICAgICB0aGlzLmxhc3RUYWIgPSBcImJkYS1xZW0tZW1vamlzXCI7XHJcbiAgICAgICAgdGhpcy5mYXZvcml0ZUVtb3RlcyA9IHt9O1xyXG5cclxuICAgICAgICB0aGlzLnFtZUhlYWRlciA9ICQoaGVhZGVySFRNTClbMF07XHJcbiAgICAgICAgZm9yIChjb25zdCBidXR0b24gb2YgdGhpcy5xbWVIZWFkZXIuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJidXR0b25cIikpIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgdGhpcy5zd2l0Y2hNZW51LmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICB0aGlzLnRlQ29udGFpbmVyID0gJCh0d2l0Y2hFbW90ZUhUTUwpWzBdO1xyXG4gICAgICAgIHRoaXMudGVDb250YWluZXJJbm5lciA9IHRoaXMudGVDb250YWluZXIucXVlcnlTZWxlY3RvcihcIi5lbW90ZS1tZW51LWlubmVyXCIpO1xyXG5cclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVyID0gJChmYXZvcml0ZXNIVE1MKVswXTtcclxuICAgICAgICB0aGlzLmZhQ29udGFpbmVySW5uZXIgPSB0aGlzLmZhQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vdGUtbWVudS1pbm5lclwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKG11dGF0aW9ucyA9PiB7Zm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHRoaXMub2JzZXJ2ZShtdXRhdGlvbik7fSk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVIaWRlRW1vamlzID0gdGhpcy5lbmFibGVIaWRlRW1vamlzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5kaXNhYmxlSGlkZUVtb2ppcyA9IHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVR3aXRjaEVtb3RlcyA9IHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzLmJpbmQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgY29uc3QgZmUgPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiYmRmYXZlbW90ZXNcIik7XHJcbiAgICAgICAgaWYgKGZlICE9PSBcIlwiICYmIGZlICE9PSBudWxsKSB0aGlzLmZhdm9yaXRlRW1vdGVzID0gSlNPTi5wYXJzZShhdG9iKGZlKSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVGYXZvcml0ZXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbmFibGVkKCkge1xyXG4gICAgICAgIHRoaXMubG9nKFwiU3RhcnRpbmcgdG8gb2JzZXJ2ZVwiKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJhcHAtbW91bnRcIiksIHtcclxuICAgICAgICAgICAgY2hpbGRMaXN0OiB0cnVlLFxyXG4gICAgICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5oaWRlRW1vamlDYW5jZWwgPSB0aGlzLnJlZ2lzdGVyU2V0dGluZyh0aGlzLmhpZGVFbW9qaXNJRCwgdGhpcy5lbmFibGVIaWRlRW1vamlzLCB0aGlzLmRpc2FibGVIaWRlRW1vamlzKTtcclxuICAgICAgICBpZiAodGhpcy5oaWRlRW1vamlzKSB0aGlzLmVuYWJsZUhpZGVFbW9qaXMoKTtcclxuICAgICAgICBpZiAoRW1vdGVNb2R1bGUuZW1vdGVzTG9hZGVkKSB0aGlzLnVwZGF0ZVR3aXRjaEVtb3RlcygpO1xyXG4gICAgICAgIEV2ZW50cy5vbihcImVtb3Rlcy1sb2FkZWRcIiwgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIEV2ZW50cy5vZmYoXCJlbW90ZXMtbG9hZGVkXCIsIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKTtcclxuICAgICAgICB0aGlzLm9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcclxuICAgICAgICB0aGlzLmRpc2FibGVIaWRlRW1vamlzKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZUVtb2ppQ2FuY2VsKSB0aGlzLmhpZGVFbW9qaUNhbmNlbCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGVuYWJsZUhpZGVFbW9qaXMoKSB7XHJcbiAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikuYWRkQ2xhc3MoXCJiZGEtcW1lLWhpZGRlblwiKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlSGlkZUVtb2ppcygpIHtcclxuICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5yZW1vdmVDbGFzcyhcImJkYS1xbWUtaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGluc2VydEVtb3RlKGVtb3RlKSB7XHJcbiAgICAgICAgY29uc3QgdGEgPSBVdGlsaXRpZXMuZ2V0VGV4dEFyZWEoKTtcclxuICAgICAgICBVdGlsaXRpZXMuaW5zZXJ0VGV4dCh0YVswXSwgdGEudmFsKCkuc2xpY2UoLTEpID09IFwiIFwiID8gdGEudmFsKCkgKyBlbW90ZSA6IHRhLnZhbCgpICsgXCIgXCIgKyBlbW90ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmF2Q29udGV4dChlKSB7XHJcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICBjb25zdCBlbSA9IGUudGFyZ2V0LmNsb3Nlc3QoXCIuZW1vdGUtY29udGFpbmVyXCIpLmNoaWxkcmVuWzBdO1xyXG4gICAgICAgIGNvbnN0IG1lbnUgPSAkKGA8ZGl2IGlkPVwicmVtb3ZlbWVudVwiIGNsYXNzPVwiYmQtY29udGV4dC1tZW51IGNvbnRleHQtbWVudSB0aGVtZS1kYXJrXCI+UmVtb3ZlPC9kaXY+YCk7XHJcbiAgICAgICAgbWVudS5jc3Moe1xyXG4gICAgICAgICAgICB0b3A6IGUucGFnZVkgLSAkKFwiI2JkYS1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5vZmZzZXQoKS50b3AsXHJcbiAgICAgICAgICAgIGxlZnQ6IGUucGFnZVggLSAkKFwiI2JkYS1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5vZmZzZXQoKS5sZWZ0XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChlbSkucGFyZW50KCkuYXBwZW5kKG1lbnUpO1xyXG4gICAgICAgIG1lbnUub24oXCJjbGlja1wiLCAoZSkgPT4ge1xyXG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICQoZW0pLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICBkZWxldGUgdGhpcy5mYXZvcml0ZUVtb3Rlc1skKGVtKS5hdHRyKFwidGl0bGVcIildO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJtb3VzZWRvd24uZW1vdGVtZW51XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgICQoZG9jdW1lbnQpLm9uKFwibW91c2Vkb3duLmVtb3RlbWVudVwiLCBmdW5jdGlvbihlKSB7XHJcbiAgICAgICAgICAgIGlmIChlLnRhcmdldC5pZCA9PSBcInJlbW92ZW1lbnVcIikgcmV0dXJuO1xyXG4gICAgICAgICAgICAkKFwiI3JlbW92ZW1lbnVcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3dpdGNoTWVudShlKSB7XHJcbiAgICAgICAgbGV0IGlkID0gdHlwZW9mKGUpID09IFwic3RyaW5nXCIgPyBlIDogJChlLnRhcmdldCkuYXR0cihcImlkXCIpO1xyXG4gICAgICAgIGlmIChpZCA9PSBcImJkYS1xZW0tZW1vamlzXCIgJiYgdGhpcy5oaWRlRW1vamlzKSBpZCA9IFwiYmRhLXFlbS1mYXZvdXJpdGVcIjtcclxuICAgICAgICBjb25zdCB0d2l0Y2ggPSAkKFwiI2JkYS1xZW0tdHdpdGNoXCIpO1xyXG4gICAgICAgIGNvbnN0IGZhdiA9ICQoXCIjYmRhLXFlbS1mYXZvdXJpdGVcIik7XHJcbiAgICAgICAgY29uc3QgZW1vamlzID0gJChcIiNiZGEtcWVtLWVtb2ppc1wiKTtcclxuICAgICAgICB0d2l0Y2gucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgZmF2LnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGVtb2ppcy5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuXHJcbiAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikuaGlkZSgpO1xyXG4gICAgICAgICQoXCIjYmRhLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkYS1xZW0tdHdpdGNoLWNvbnRhaW5lclwiKS5oaWRlKCk7XHJcblxyXG4gICAgICAgIHN3aXRjaCAoaWQpIHtcclxuICAgICAgICAgICAgY2FzZSBcImJkYS1xZW0tdHdpdGNoXCI6XHJcbiAgICAgICAgICAgICAgICB0d2l0Y2guYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2JkYS1xZW0tdHdpdGNoLWNvbnRhaW5lclwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJkYS1xZW0tZmF2b3VyaXRlXCI6XHJcbiAgICAgICAgICAgICAgICBmYXYuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiI2JkYS1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImJkYS1xZW0tZW1vamlzXCI6XHJcbiAgICAgICAgICAgICAgICBlbW9qaXMuYWRkQ2xhc3MoXCJhY3RpdmVcIik7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtaiBpbnB1dFwiKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpZCkgdGhpcy5sYXN0VGFiID0gaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgb2JzZXJ2ZShtdXRhdGlvbikge1xyXG4gICAgICAgIGlmICghbXV0YXRpb24uYWRkZWROb2Rlcy5sZW5ndGggfHwgIShtdXRhdGlvbi5hZGRlZE5vZGVzWzBdIGluc3RhbmNlb2YgRWxlbWVudCkpIHJldHVybjtcclxuICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuICAgICAgICBpZiAoIW5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwicG9wb3V0LTNzVk1YelwiKSB8fCBub2RlLmNsYXNzTGlzdC5jb250YWlucyhcInBvcG91dExlZnQtMzBXbXJEXCIpIHx8ICFub2RlLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJlbW9qaVBpY2tlci0zbTFTLWpcIikubGVuZ3RoKSByZXR1cm47XHJcblxyXG4gICAgICAgIGNvbnN0IGUgPSAkKG5vZGUpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVFbW9qaXMpIGUuYWRkQ2xhc3MoXCJiZGEtcW1lLWhpZGRlblwiKTtcclxuICAgICAgICBlbHNlIGUucmVtb3ZlQ2xhc3MoXCJiZGEtcW1lLWhpZGRlblwiKTtcclxuXHJcbiAgICAgICAgZS5wcmVwZW5kKHRoaXMucW1lSGVhZGVyKTtcclxuICAgICAgICBlLmFwcGVuZCh0aGlzLnRlQ29udGFpbmVyKTtcclxuICAgICAgICBlLmFwcGVuZCh0aGlzLmZhQ29udGFpbmVyKTtcclxuXHJcbiAgICAgICAgdGhpcy5zd2l0Y2hNZW51KHRoaXMubGFzdFRhYik7XHJcbiAgICB9XHJcblxyXG4gICAgZmF2b3JpdGUobmFtZSwgdXJsKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmZhdm9yaXRlRW1vdGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB0aGlzLmZhdm9yaXRlRW1vdGVzW25hbWVdID0gdXJsO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlVHdpdGNoRW1vdGVzKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLnRlQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZCkgdGhpcy50ZUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbW90ZSBpbiBFbW90ZU1vZHVsZS5nZXRDYXRlZ29yeShcIlR3aXRjaEdsb2JhbFwiKSkge1xyXG4gICAgICAgICAgICBpZiAoIUVtb3RlTW9kdWxlLmdldENhdGVnb3J5KFwiVHdpdGNoR2xvYmFsXCIpLmhhc093blByb3BlcnR5KGVtb3RlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IEVtb3RlTW9kdWxlLmdldENhdGVnb3J5KFwiVHdpdGNoR2xvYmFsXCIpW2Vtb3RlXTtcclxuICAgICAgICAgICAgY29uc3QgZW1vdGVFbGVtZW50ID0gbWFrZUVtb3RlKGVtb3RlLCB1cmwsIHtvbkNsaWNrOiB0aGlzLmluc2VydEVtb3RlLmJpbmQodGhpcywgZW1vdGUpfSk7XHJcbiAgICAgICAgICAgIHRoaXMudGVDb250YWluZXJJbm5lci5hcHBlbmQoZW1vdGVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgdXBkYXRlRmF2b3JpdGVzKCkge1xyXG4gICAgICAgIHdoaWxlICh0aGlzLmZhQ29udGFpbmVySW5uZXIuZmlyc3RDaGlsZCkgdGhpcy5mYUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQucmVtb3ZlKCk7XHJcbiAgICAgICAgZm9yIChjb25zdCBlbW90ZSBpbiB0aGlzLmZhdm9yaXRlRW1vdGVzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHRoaXMuZmF2b3JpdGVFbW90ZXNbZW1vdGVdO1xyXG4gICAgICAgICAgICBjb25zdCBlbW90ZUVsZW1lbnQgPSBtYWtlRW1vdGUoZW1vdGUsIHVybCwge29uQ2xpY2s6IHRoaXMuaW5zZXJ0RW1vdGUuYmluZCh0aGlzLCBlbW90ZSksIG9uQ29udGV4dE1lbnU6IHRoaXMuZmF2Q29udGV4dC5iaW5kKHRoaXMpfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmFDb250YWluZXJJbm5lci5hcHBlbmQoZW1vdGVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImJkZmF2ZW1vdGVzXCIsIGJ0b2EoSlNPTi5zdHJpbmdpZnkodGhpcy5mYXZvcml0ZUVtb3RlcykpKTtcclxuICAgIH1cclxuXHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotemenu.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _emotes__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./emotes */ \"./src/builtins/emotes.js\");\n\n\n\nconst headerHTML = `
\n \n \n
`;\nconst twitchEmoteHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\nconst favoritesHTML = `
\n
\n
\n
\n\n
\n
\n
\n
`;\n\nconst makeEmote = (emote, url, options = {}) => {\n const {\n onContextMenu,\n onClick\n } = options;\n const emoteContainer = $(`
\n \"${emote}\"\n
`)[0];\n if (onContextMenu) emoteContainer.addEventListener(\"contextmenu\", onContextMenu);\n emoteContainer.addEventListener(\"click\", onClick);\n return emoteContainer;\n};\n\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteMenu extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"EmoteMenu\";\n }\n\n get collection() {\n return \"emotes\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emoteMenu\";\n }\n\n get hideEmojisID() {\n return \"hideEmojiMenu\";\n }\n\n get hideEmojis() {\n return this.get(this.hideEmojisID);\n }\n\n constructor() {\n super();\n this.lastTab = \"bda-qem-emojis\";\n this.favoriteEmotes = {};\n this.qmeHeader = $(headerHTML)[0];\n\n for (const button of this.qmeHeader.getElementsByTagName(\"button\")) button.addEventListener(\"click\", this.switchMenu.bind(this));\n\n this.teContainer = $(twitchEmoteHTML)[0];\n this.teContainerInner = this.teContainer.querySelector(\".emote-menu-inner\");\n this.faContainer = $(favoritesHTML)[0];\n this.faContainerInner = this.faContainer.querySelector(\".emote-menu-inner\");\n this.observer = new MutationObserver(mutations => {\n for (const mutation of mutations) this.observe(mutation);\n });\n this.enableHideEmojis = this.enableHideEmojis.bind(this);\n this.disableHideEmojis = this.disableHideEmojis.bind(this);\n this.updateTwitchEmotes = this.updateTwitchEmotes.bind(this);\n }\n\n initialize() {\n super.initialize();\n const fe = modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].getBDData(\"bdfavemotes\");\n if (fe !== \"\" && fe !== null) this.favoriteEmotes = JSON.parse(window.atob(fe));\n this.updateFavorites();\n }\n\n async enabled() {\n this.log(\"Starting to observe\");\n this.observer.observe(document.getElementById(\"app-mount\"), {\n childList: true,\n subtree: true\n });\n this.hideEmojiCancel = this.registerSetting(this.hideEmojisID, this.enableHideEmojis, this.disableHideEmojis);\n if (this.hideEmojis) this.enableHideEmojis();\n if (_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].emotesLoaded) this.updateTwitchEmotes();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].on(\"emotes-loaded\", this.updateTwitchEmotes);\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Events\"].off(\"emotes-loaded\", this.updateTwitchEmotes);\n this.observer.disconnect();\n this.disableHideEmojis();\n if (this.hideEmojiCancel) this.hideEmojiCancel();\n }\n\n enableHideEmojis() {\n $(\".emojiPicker-3m1S-j\").addClass(\"bda-qme-hidden\");\n }\n\n disableHideEmojis() {\n $(\".emojiPicker-3m1S-j\").removeClass(\"bda-qme-hidden\");\n }\n\n insertEmote(emote) {\n const ta = modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].getTextArea();\n modules__WEBPACK_IMPORTED_MODULE_1__[\"Utilities\"].insertText(ta[0], ta.val().slice(-1) == \" \" ? ta.val() + emote : ta.val() + \" \" + emote);\n }\n\n favContext(e) {\n e.stopPropagation();\n const em = e.target.closest(\".emote-container\").children[0];\n const menu = $(`
Remove
`);\n menu.css({\n top: e.pageY - $(\"#bda-qem-favourite-container\").offset().top,\n left: e.pageX - $(\"#bda-qem-favourite-container\").offset().left\n });\n $(em).parent().append(menu);\n menu.on(\"click\", event => {\n event.preventDefault();\n event.stopPropagation();\n $(em).remove();\n delete this.favoriteEmotes[$(em).attr(\"title\")];\n this.updateFavorites();\n $(document).off(\"mousedown.emotemenu\");\n });\n $(document).on(\"mousedown.emotemenu\", function (event) {\n if (event.target.id == \"removemenu\") return;\n $(\"#removemenu\").remove();\n $(document).off(\"mousedown.emotemenu\");\n });\n }\n\n switchMenu(e) {\n let id = typeof e == \"string\" ? e : $(e.target).attr(\"id\");\n if (id == \"bda-qem-emojis\" && this.hideEmojis) id = \"bda-qem-favourite\";\n const twitch = $(\"#bda-qem-twitch\");\n const fav = $(\"#bda-qem-favourite\");\n const emojis = $(\"#bda-qem-emojis\");\n twitch.removeClass(\"active\");\n fav.removeClass(\"active\");\n emojis.removeClass(\"active\");\n $(\".emojiPicker-3m1S-j\").hide();\n $(\"#bda-qem-favourite-container\").hide();\n $(\"#bda-qem-twitch-container\").hide();\n\n switch (id) {\n case \"bda-qem-twitch\":\n twitch.addClass(\"active\");\n $(\"#bda-qem-twitch-container\").show();\n break;\n\n case \"bda-qem-favourite\":\n fav.addClass(\"active\");\n $(\"#bda-qem-favourite-container\").show();\n break;\n\n case \"bda-qem-emojis\":\n emojis.addClass(\"active\");\n $(\".emojiPicker-3m1S-j\").show();\n $(\".emojiPicker-3m1S-j input\").focus();\n break;\n }\n\n if (id) this.lastTab = id;\n }\n\n observe(mutation) {\n if (!mutation.addedNodes.length || !(mutation.addedNodes[0] instanceof Element)) return;\n const node = mutation.addedNodes[0];\n if (!node.classList.contains(\"popout-3sVMXz\") || node.classList.contains(\"popoutLeft-30WmrD\") || !node.getElementsByClassName(\"emojiPicker-3m1S-j\").length) return;\n const e = $(node);\n if (this.hideEmojis) e.addClass(\"bda-qme-hidden\");else e.removeClass(\"bda-qme-hidden\");\n e.prepend(this.qmeHeader);\n e.append(this.teContainer);\n e.append(this.faContainer);\n this.switchMenu(this.lastTab);\n }\n\n favorite(name, url) {\n if (!this.favoriteEmotes.hasOwnProperty(name)) this.favoriteEmotes[name] = url;\n this.updateFavorites();\n }\n\n updateTwitchEmotes() {\n while (this.teContainerInner.firstChild) this.teContainerInner.firstChild.remove();\n\n for (const emote in _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\")) {\n if (!_emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\").hasOwnProperty(emote)) continue;\n const url = _emotes__WEBPACK_IMPORTED_MODULE_2__[\"default\"].getCategory(\"TwitchGlobal\")[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote)\n });\n this.teContainerInner.append(emoteElement);\n }\n }\n\n updateFavorites() {\n while (this.faContainerInner.firstChild) this.faContainerInner.firstChild.remove();\n\n for (const emote in this.favoriteEmotes) {\n const url = this.favoriteEmotes[emote];\n const emoteElement = makeEmote(emote, url, {\n onClick: this.insertEmote.bind(this, emote),\n onContextMenu: this.favContext.bind(this)\n });\n this.faContainerInner.append(emoteElement);\n }\n\n modules__WEBPACK_IMPORTED_MODULE_1__[\"DataStore\"].setBDData(\"bdfavemotes\", window.btoa(JSON.stringify(this.favoriteEmotes)));\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcz8yYWNlIl0sIm5hbWVzIjpbImhlYWRlckhUTUwiLCJ0d2l0Y2hFbW90ZUhUTUwiLCJmYXZvcml0ZXNIVE1MIiwibWFrZUVtb3RlIiwiZW1vdGUiLCJ1cmwiLCJvcHRpb25zIiwib25Db250ZXh0TWVudSIsIm9uQ2xpY2siLCJlbW90ZUNvbnRhaW5lciIsIiQiLCJhZGRFdmVudExpc3RlbmVyIiwiRW1vdGVNZW51IiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImhpZGVFbW9qaXNJRCIsImhpZGVFbW9qaXMiLCJnZXQiLCJjb25zdHJ1Y3RvciIsImxhc3RUYWIiLCJmYXZvcml0ZUVtb3RlcyIsInFtZUhlYWRlciIsImJ1dHRvbiIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwic3dpdGNoTWVudSIsImJpbmQiLCJ0ZUNvbnRhaW5lciIsInRlQ29udGFpbmVySW5uZXIiLCJxdWVyeVNlbGVjdG9yIiwiZmFDb250YWluZXIiLCJmYUNvbnRhaW5lcklubmVyIiwib2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwibXV0YXRpb24iLCJvYnNlcnZlIiwiZW5hYmxlSGlkZUVtb2ppcyIsImRpc2FibGVIaWRlRW1vamlzIiwidXBkYXRlVHdpdGNoRW1vdGVzIiwiaW5pdGlhbGl6ZSIsImZlIiwiRGF0YVN0b3JlIiwiZ2V0QkREYXRhIiwiSlNPTiIsInBhcnNlIiwid2luZG93IiwiYXRvYiIsInVwZGF0ZUZhdm9yaXRlcyIsImVuYWJsZWQiLCJsb2ciLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIiwiY2hpbGRMaXN0Iiwic3VidHJlZSIsImhpZGVFbW9qaUNhbmNlbCIsInJlZ2lzdGVyU2V0dGluZyIsIkVtb3RlTW9kdWxlIiwiZW1vdGVzTG9hZGVkIiwiRXZlbnRzIiwib24iLCJkaXNhYmxlZCIsIm9mZiIsImRpc2Nvbm5lY3QiLCJhZGRDbGFzcyIsInJlbW92ZUNsYXNzIiwiaW5zZXJ0RW1vdGUiLCJ0YSIsIlV0aWxpdGllcyIsImdldFRleHRBcmVhIiwiaW5zZXJ0VGV4dCIsInZhbCIsInNsaWNlIiwiZmF2Q29udGV4dCIsImUiLCJzdG9wUHJvcGFnYXRpb24iLCJlbSIsInRhcmdldCIsImNsb3Nlc3QiLCJjaGlsZHJlbiIsIm1lbnUiLCJjc3MiLCJ0b3AiLCJwYWdlWSIsIm9mZnNldCIsImxlZnQiLCJwYWdlWCIsInBhcmVudCIsImFwcGVuZCIsImV2ZW50IiwicHJldmVudERlZmF1bHQiLCJyZW1vdmUiLCJhdHRyIiwidHdpdGNoIiwiZmF2IiwiZW1vamlzIiwiaGlkZSIsInNob3ciLCJmb2N1cyIsImFkZGVkTm9kZXMiLCJsZW5ndGgiLCJFbGVtZW50Iiwibm9kZSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsInByZXBlbmQiLCJmYXZvcml0ZSIsImhhc093blByb3BlcnR5IiwiZmlyc3RDaGlsZCIsImdldENhdGVnb3J5IiwiZW1vdGVFbGVtZW50Iiwic2V0QkREYXRhIiwiYnRvYSIsInN0cmluZ2lmeSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBRUE7QUFFQSxNQUFNQSxVQUFVLEdBQUk7Ozs7T0FBcEI7QUFNQSxNQUFNQyxlQUFlLEdBQUk7Ozs7Ozs7O09BQXpCO0FBVUEsTUFBTUMsYUFBYSxHQUFJOzs7Ozs7OztPQUF2Qjs7QUFVQSxNQUFNQyxTQUFTLEdBQUcsQ0FBQ0MsS0FBRCxFQUFRQyxHQUFSLEVBQWFDLE9BQU8sR0FBRyxFQUF2QixLQUE4QjtBQUM1QyxRQUFNO0FBQUNDLGlCQUFEO0FBQWdCQztBQUFoQixNQUEyQkYsT0FBakM7QUFDQSxRQUFNRyxjQUFjLEdBQUdDLENBQUMsQ0FBRTt1Q0FDU04sS0FBTSxVQUFTQyxHQUFJLFlBQVdELEtBQU07V0FEL0MsQ0FBRCxDQUVkLENBRmMsQ0FBdkI7QUFHQSxNQUFJRyxhQUFKLEVBQW1CRSxjQUFjLENBQUNFLGdCQUFmLENBQWdDLGFBQWhDLEVBQStDSixhQUEvQztBQUNuQkUsZ0JBQWMsQ0FBQ0UsZ0JBQWYsQ0FBZ0MsT0FBaEMsRUFBeUNILE9BQXpDO0FBQ0EsU0FBT0MsY0FBUDtBQUNILENBUkQ7O0FBVWUsbUVBQUksTUFBTUcsU0FBTixTQUF3QkMsd0RBQXhCLENBQWdDO0FBQy9DLE1BQUlDLElBQUosR0FBVztBQUFDLFdBQU8sV0FBUDtBQUFvQjs7QUFDaEMsTUFBSUMsVUFBSixHQUFpQjtBQUFDLFdBQU8sUUFBUDtBQUFpQjs7QUFDbkMsTUFBSUMsUUFBSixHQUFlO0FBQUMsV0FBTyxTQUFQO0FBQWtCOztBQUNsQyxNQUFJQyxFQUFKLEdBQVM7QUFBQyxXQUFPLFdBQVA7QUFBb0I7O0FBQzlCLE1BQUlDLFlBQUosR0FBbUI7QUFBQyxXQUFPLGVBQVA7QUFBd0I7O0FBQzVDLE1BQUlDLFVBQUosR0FBaUI7QUFBQyxXQUFPLEtBQUtDLEdBQUwsQ0FBUyxLQUFLRixZQUFkLENBQVA7QUFBb0M7O0FBRXRERyxhQUFXLEdBQUc7QUFDVjtBQUNBLFNBQUtDLE9BQUwsR0FBZSxnQkFBZjtBQUNBLFNBQUtDLGNBQUwsR0FBc0IsRUFBdEI7QUFFQSxTQUFLQyxTQUFMLEdBQWlCZCxDQUFDLENBQUNWLFVBQUQsQ0FBRCxDQUFjLENBQWQsQ0FBakI7O0FBQ0EsU0FBSyxNQUFNeUIsTUFBWCxJQUFxQixLQUFLRCxTQUFMLENBQWVFLG9CQUFmLENBQW9DLFFBQXBDLENBQXJCLEVBQW9FRCxNQUFNLENBQUNkLGdCQUFQLENBQXdCLE9BQXhCLEVBQWlDLEtBQUtnQixVQUFMLENBQWdCQyxJQUFoQixDQUFxQixJQUFyQixDQUFqQzs7QUFFcEUsU0FBS0MsV0FBTCxHQUFtQm5CLENBQUMsQ0FBQ1QsZUFBRCxDQUFELENBQW1CLENBQW5CLENBQW5CO0FBQ0EsU0FBSzZCLGdCQUFMLEdBQXdCLEtBQUtELFdBQUwsQ0FBaUJFLGFBQWpCLENBQStCLG1CQUEvQixDQUF4QjtBQUVBLFNBQUtDLFdBQUwsR0FBbUJ0QixDQUFDLENBQUNSLGFBQUQsQ0FBRCxDQUFpQixDQUFqQixDQUFuQjtBQUNBLFNBQUsrQixnQkFBTCxHQUF3QixLQUFLRCxXQUFMLENBQWlCRCxhQUFqQixDQUErQixtQkFBL0IsQ0FBeEI7QUFFQSxTQUFLRyxRQUFMLEdBQWdCLElBQUlDLGdCQUFKLENBQXFCQyxTQUFTLElBQUk7QUFBQyxXQUFLLE1BQU1DLFFBQVgsSUFBdUJELFNBQXZCLEVBQWtDLEtBQUtFLE9BQUwsQ0FBYUQsUUFBYjtBQUF3QixLQUE3RixDQUFoQjtBQUNBLFNBQUtFLGdCQUFMLEdBQXdCLEtBQUtBLGdCQUFMLENBQXNCWCxJQUF0QixDQUEyQixJQUEzQixDQUF4QjtBQUNBLFNBQUtZLGlCQUFMLEdBQXlCLEtBQUtBLGlCQUFMLENBQXVCWixJQUF2QixDQUE0QixJQUE1QixDQUF6QjtBQUNBLFNBQUthLGtCQUFMLEdBQTBCLEtBQUtBLGtCQUFMLENBQXdCYixJQUF4QixDQUE2QixJQUE3QixDQUExQjtBQUNIOztBQUVEYyxZQUFVLEdBQUc7QUFDVCxVQUFNQSxVQUFOO0FBQ0EsVUFBTUMsRUFBRSxHQUFHQyxpREFBUyxDQUFDQyxTQUFWLENBQW9CLGFBQXBCLENBQVg7QUFDQSxRQUFJRixFQUFFLEtBQUssRUFBUCxJQUFhQSxFQUFFLEtBQUssSUFBeEIsRUFBOEIsS0FBS3BCLGNBQUwsR0FBc0J1QixJQUFJLENBQUNDLEtBQUwsQ0FBV0MsTUFBTSxDQUFDQyxJQUFQLENBQVlOLEVBQVosQ0FBWCxDQUF0QjtBQUM5QixTQUFLTyxlQUFMO0FBQ0g7O0FBRUQsUUFBTUMsT0FBTixHQUFnQjtBQUNaLFNBQUtDLEdBQUwsQ0FBUyxxQkFBVDtBQUNBLFNBQUtsQixRQUFMLENBQWNJLE9BQWQsQ0FBc0JlLFFBQVEsQ0FBQ0MsY0FBVCxDQUF3QixXQUF4QixDQUF0QixFQUE0RDtBQUN4REMsZUFBUyxFQUFFLElBRDZDO0FBRXhEQyxhQUFPLEVBQUU7QUFGK0MsS0FBNUQ7QUFJQSxTQUFLQyxlQUFMLEdBQXVCLEtBQUtDLGVBQUwsQ0FBcUIsS0FBS3hDLFlBQTFCLEVBQXdDLEtBQUtxQixnQkFBN0MsRUFBK0QsS0FBS0MsaUJBQXBFLENBQXZCO0FBQ0EsUUFBSSxLQUFLckIsVUFBVCxFQUFxQixLQUFLb0IsZ0JBQUw7QUFDckIsUUFBSW9CLCtDQUFXLENBQUNDLFlBQWhCLEVBQThCLEtBQUtuQixrQkFBTDtBQUM5Qm9CLGtEQUFNLENBQUNDLEVBQVAsQ0FBVSxlQUFWLEVBQTJCLEtBQUtyQixrQkFBaEM7QUFDSDs7QUFFRHNCLFVBQVEsR0FBRztBQUNQRixrREFBTSxDQUFDRyxHQUFQLENBQVcsZUFBWCxFQUE0QixLQUFLdkIsa0JBQWpDO0FBQ0EsU0FBS1AsUUFBTCxDQUFjK0IsVUFBZDtBQUNBLFNBQUt6QixpQkFBTDtBQUNBLFFBQUksS0FBS2lCLGVBQVQsRUFBMEIsS0FBS0EsZUFBTDtBQUM3Qjs7QUFFRGxCLGtCQUFnQixHQUFHO0FBQ2Y3QixLQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QndELFFBQXpCLENBQWtDLGdCQUFsQztBQUNIOztBQUVEMUIsbUJBQWlCLEdBQUc7QUFDaEI5QixLQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QnlELFdBQXpCLENBQXFDLGdCQUFyQztBQUNIOztBQUVEQyxhQUFXLENBQUNoRSxLQUFELEVBQVE7QUFDZixVQUFNaUUsRUFBRSxHQUFHQyxpREFBUyxDQUFDQyxXQUFWLEVBQVg7QUFDQUQscURBQVMsQ0FBQ0UsVUFBVixDQUFxQkgsRUFBRSxDQUFDLENBQUQsQ0FBdkIsRUFBNEJBLEVBQUUsQ0FBQ0ksR0FBSCxHQUFTQyxLQUFULENBQWUsQ0FBQyxDQUFoQixLQUFzQixHQUF0QixHQUE0QkwsRUFBRSxDQUFDSSxHQUFILEtBQVdyRSxLQUF2QyxHQUErQ2lFLEVBQUUsQ0FBQ0ksR0FBSCxLQUFXLEdBQVgsR0FBaUJyRSxLQUE1RjtBQUNIOztBQUVEdUUsWUFBVSxDQUFDQyxDQUFELEVBQUk7QUFDVkEsS0FBQyxDQUFDQyxlQUFGO0FBQ0EsVUFBTUMsRUFBRSxHQUFHRixDQUFDLENBQUNHLE1BQUYsQ0FBU0MsT0FBVCxDQUFpQixrQkFBakIsRUFBcUNDLFFBQXJDLENBQThDLENBQTlDLENBQVg7QUFDQSxVQUFNQyxJQUFJLEdBQUd4RSxDQUFDLENBQUUsbUZBQUYsQ0FBZDtBQUNBd0UsUUFBSSxDQUFDQyxHQUFMLENBQVM7QUFDTEMsU0FBRyxFQUFFUixDQUFDLENBQUNTLEtBQUYsR0FBVTNFLENBQUMsQ0FBQyw4QkFBRCxDQUFELENBQWtDNEUsTUFBbEMsR0FBMkNGLEdBRHJEO0FBRUxHLFVBQUksRUFBRVgsQ0FBQyxDQUFDWSxLQUFGLEdBQVU5RSxDQUFDLENBQUMsOEJBQUQsQ0FBRCxDQUFrQzRFLE1BQWxDLEdBQTJDQztBQUZ0RCxLQUFUO0FBSUE3RSxLQUFDLENBQUNvRSxFQUFELENBQUQsQ0FBTVcsTUFBTixHQUFlQyxNQUFmLENBQXNCUixJQUF0QjtBQUNBQSxRQUFJLENBQUNwQixFQUFMLENBQVEsT0FBUixFQUFrQjZCLEtBQUQsSUFBVztBQUN4QkEsV0FBSyxDQUFDQyxjQUFOO0FBQ0FELFdBQUssQ0FBQ2QsZUFBTjtBQUNBbkUsT0FBQyxDQUFDb0UsRUFBRCxDQUFELENBQU1lLE1BQU47QUFDQSxhQUFPLEtBQUt0RSxjQUFMLENBQW9CYixDQUFDLENBQUNvRSxFQUFELENBQUQsQ0FBTWdCLElBQU4sQ0FBVyxPQUFYLENBQXBCLENBQVA7QUFDQSxXQUFLNUMsZUFBTDtBQUNBeEMsT0FBQyxDQUFDMkMsUUFBRCxDQUFELENBQVlXLEdBQVosQ0FBZ0IscUJBQWhCO0FBQ0gsS0FQRDtBQVFBdEQsS0FBQyxDQUFDMkMsUUFBRCxDQUFELENBQVlTLEVBQVosQ0FBZSxxQkFBZixFQUFzQyxVQUFTNkIsS0FBVCxFQUFnQjtBQUNsRCxVQUFJQSxLQUFLLENBQUNaLE1BQU4sQ0FBYTlELEVBQWIsSUFBbUIsWUFBdkIsRUFBcUM7QUFDckNQLE9BQUMsQ0FBQyxhQUFELENBQUQsQ0FBaUJtRixNQUFqQjtBQUNBbkYsT0FBQyxDQUFDMkMsUUFBRCxDQUFELENBQVlXLEdBQVosQ0FBZ0IscUJBQWhCO0FBQ0gsS0FKRDtBQUtIOztBQUVEckMsWUFBVSxDQUFDaUQsQ0FBRCxFQUFJO0FBQ1YsUUFBSTNELEVBQUUsR0FBRyxPQUFPMkQsQ0FBUCxJQUFhLFFBQWIsR0FBd0JBLENBQXhCLEdBQTRCbEUsQ0FBQyxDQUFDa0UsQ0FBQyxDQUFDRyxNQUFILENBQUQsQ0FBWWUsSUFBWixDQUFpQixJQUFqQixDQUFyQztBQUNBLFFBQUk3RSxFQUFFLElBQUksZ0JBQU4sSUFBMEIsS0FBS0UsVUFBbkMsRUFBK0NGLEVBQUUsR0FBRyxtQkFBTDtBQUMvQyxVQUFNOEUsTUFBTSxHQUFHckYsQ0FBQyxDQUFDLGlCQUFELENBQWhCO0FBQ0EsVUFBTXNGLEdBQUcsR0FBR3RGLENBQUMsQ0FBQyxvQkFBRCxDQUFiO0FBQ0EsVUFBTXVGLE1BQU0sR0FBR3ZGLENBQUMsQ0FBQyxpQkFBRCxDQUFoQjtBQUNBcUYsVUFBTSxDQUFDNUIsV0FBUCxDQUFtQixRQUFuQjtBQUNBNkIsT0FBRyxDQUFDN0IsV0FBSixDQUFnQixRQUFoQjtBQUNBOEIsVUFBTSxDQUFDOUIsV0FBUCxDQUFtQixRQUFuQjtBQUVBekQsS0FBQyxDQUFDLHFCQUFELENBQUQsQ0FBeUJ3RixJQUF6QjtBQUNBeEYsS0FBQyxDQUFDLDhCQUFELENBQUQsQ0FBa0N3RixJQUFsQztBQUNBeEYsS0FBQyxDQUFDLDJCQUFELENBQUQsQ0FBK0J3RixJQUEvQjs7QUFFQSxZQUFRakYsRUFBUjtBQUNJLFdBQUssZ0JBQUw7QUFDSThFLGNBQU0sQ0FBQzdCLFFBQVAsQ0FBZ0IsUUFBaEI7QUFDQXhELFNBQUMsQ0FBQywyQkFBRCxDQUFELENBQStCeUYsSUFBL0I7QUFDQTs7QUFDSixXQUFLLG1CQUFMO0FBQ0lILFdBQUcsQ0FBQzlCLFFBQUosQ0FBYSxRQUFiO0FBQ0F4RCxTQUFDLENBQUMsOEJBQUQsQ0FBRCxDQUFrQ3lGLElBQWxDO0FBQ0E7O0FBQ0osV0FBSyxnQkFBTDtBQUNJRixjQUFNLENBQUMvQixRQUFQLENBQWdCLFFBQWhCO0FBQ0F4RCxTQUFDLENBQUMscUJBQUQsQ0FBRCxDQUF5QnlGLElBQXpCO0FBQ0F6RixTQUFDLENBQUMsMkJBQUQsQ0FBRCxDQUErQjBGLEtBQS9CO0FBQ0E7QUFiUjs7QUFlQSxRQUFJbkYsRUFBSixFQUFRLEtBQUtLLE9BQUwsR0FBZUwsRUFBZjtBQUNYOztBQUVEcUIsU0FBTyxDQUFDRCxRQUFELEVBQVc7QUFDZCxRQUFJLENBQUNBLFFBQVEsQ0FBQ2dFLFVBQVQsQ0FBb0JDLE1BQXJCLElBQStCLEVBQUVqRSxRQUFRLENBQUNnRSxVQUFULENBQW9CLENBQXBCLGFBQWtDRSxPQUFwQyxDQUFuQyxFQUFpRjtBQUNqRixVQUFNQyxJQUFJLEdBQUduRSxRQUFRLENBQUNnRSxVQUFULENBQW9CLENBQXBCLENBQWI7QUFDQSxRQUFJLENBQUNHLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxRQUFmLENBQXdCLGVBQXhCLENBQUQsSUFBNkNGLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxRQUFmLENBQXdCLG1CQUF4QixDQUE3QyxJQUE2RixDQUFDRixJQUFJLENBQUNHLHNCQUFMLENBQTRCLG9CQUE1QixFQUFrREwsTUFBcEosRUFBNEo7QUFFNUosVUFBTTFCLENBQUMsR0FBR2xFLENBQUMsQ0FBQzhGLElBQUQsQ0FBWDtBQUNBLFFBQUksS0FBS3JGLFVBQVQsRUFBcUJ5RCxDQUFDLENBQUNWLFFBQUYsQ0FBVyxnQkFBWCxFQUFyQixLQUNLVSxDQUFDLENBQUNULFdBQUYsQ0FBYyxnQkFBZDtBQUVMUyxLQUFDLENBQUNnQyxPQUFGLENBQVUsS0FBS3BGLFNBQWY7QUFDQW9ELEtBQUMsQ0FBQ2MsTUFBRixDQUFTLEtBQUs3RCxXQUFkO0FBQ0ErQyxLQUFDLENBQUNjLE1BQUYsQ0FBUyxLQUFLMUQsV0FBZDtBQUVBLFNBQUtMLFVBQUwsQ0FBZ0IsS0FBS0wsT0FBckI7QUFDSDs7QUFFRHVGLFVBQVEsQ0FBQy9GLElBQUQsRUFBT1QsR0FBUCxFQUFZO0FBQ2hCLFFBQUksQ0FBQyxLQUFLa0IsY0FBTCxDQUFvQnVGLGNBQXBCLENBQW1DaEcsSUFBbkMsQ0FBTCxFQUErQyxLQUFLUyxjQUFMLENBQW9CVCxJQUFwQixJQUE0QlQsR0FBNUI7QUFDL0MsU0FBSzZDLGVBQUw7QUFDSDs7QUFFRFQsb0JBQWtCLEdBQUc7QUFDakIsV0FBTyxLQUFLWCxnQkFBTCxDQUFzQmlGLFVBQTdCLEVBQXlDLEtBQUtqRixnQkFBTCxDQUFzQmlGLFVBQXRCLENBQWlDbEIsTUFBakM7O0FBQ3pDLFNBQUssTUFBTXpGLEtBQVgsSUFBb0J1RCwrQ0FBVyxDQUFDcUQsV0FBWixDQUF3QixjQUF4QixDQUFwQixFQUE2RDtBQUN6RCxVQUFJLENBQUNyRCwrQ0FBVyxDQUFDcUQsV0FBWixDQUF3QixjQUF4QixFQUF3Q0YsY0FBeEMsQ0FBdUQxRyxLQUF2RCxDQUFMLEVBQW9FO0FBQ3BFLFlBQU1DLEdBQUcsR0FBR3NELCtDQUFXLENBQUNxRCxXQUFaLENBQXdCLGNBQXhCLEVBQXdDNUcsS0FBeEMsQ0FBWjtBQUNBLFlBQU02RyxZQUFZLEdBQUc5RyxTQUFTLENBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFhO0FBQUNHLGVBQU8sRUFBRSxLQUFLNEQsV0FBTCxDQUFpQnhDLElBQWpCLENBQXNCLElBQXRCLEVBQTRCeEIsS0FBNUI7QUFBVixPQUFiLENBQTlCO0FBQ0EsV0FBSzBCLGdCQUFMLENBQXNCNEQsTUFBdEIsQ0FBNkJ1QixZQUE3QjtBQUNIO0FBQ0o7O0FBRUQvRCxpQkFBZSxHQUFHO0FBQ2QsV0FBTyxLQUFLakIsZ0JBQUwsQ0FBc0I4RSxVQUE3QixFQUF5QyxLQUFLOUUsZ0JBQUwsQ0FBc0I4RSxVQUF0QixDQUFpQ2xCLE1BQWpDOztBQUN6QyxTQUFLLE1BQU16RixLQUFYLElBQW9CLEtBQUttQixjQUF6QixFQUF5QztBQUNyQyxZQUFNbEIsR0FBRyxHQUFHLEtBQUtrQixjQUFMLENBQW9CbkIsS0FBcEIsQ0FBWjtBQUNBLFlBQU02RyxZQUFZLEdBQUc5RyxTQUFTLENBQUNDLEtBQUQsRUFBUUMsR0FBUixFQUFhO0FBQUNHLGVBQU8sRUFBRSxLQUFLNEQsV0FBTCxDQUFpQnhDLElBQWpCLENBQXNCLElBQXRCLEVBQTRCeEIsS0FBNUIsQ0FBVjtBQUE4Q0cscUJBQWEsRUFBRSxLQUFLb0UsVUFBTCxDQUFnQi9DLElBQWhCLENBQXFCLElBQXJCO0FBQTdELE9BQWIsQ0FBOUI7QUFDQSxXQUFLSyxnQkFBTCxDQUFzQnlELE1BQXRCLENBQTZCdUIsWUFBN0I7QUFDSDs7QUFDRHJFLHFEQUFTLENBQUNzRSxTQUFWLENBQW9CLGFBQXBCLEVBQW1DbEUsTUFBTSxDQUFDbUUsSUFBUCxDQUFZckUsSUFBSSxDQUFDc0UsU0FBTCxDQUFlLEtBQUs3RixjQUFwQixDQUFaLENBQW5DO0FBQ0g7O0FBbEs4QyxDQUFwQyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3RlbWVudS5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuaW1wb3J0IHtEYXRhU3RvcmUsIFV0aWxpdGllcywgRXZlbnRzfSBmcm9tIFwibW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG5cclxuY29uc3QgaGVhZGVySFRNTCA9IGA8ZGl2IGlkPVwiYmRhLXFlbVwiPlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImFjdGl2ZVwiIGlkPVwiYmRhLXFlbS10d2l0Y2hcIj5Ud2l0Y2g8L2J1dHRvbj5cclxuICAgIDxidXR0b24gaWQ9XCJiZGEtcWVtLWZhdm91cml0ZVwiPkZhdm91cml0ZTwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvbiBpZD1cImJkYS1xZW0tZW1vamlzXCI+RW1vamlzPC9idXR0b25kPlxyXG48L2Rpdj5gO1xyXG5cclxuY29uc3QgdHdpdGNoRW1vdGVIVE1MID0gYDxkaXYgaWQ9XCJiZGEtcWVtLXR3aXRjaC1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIHNjcm9sbGVyV3JhcC0ybEpFa2QgZmFkZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlciBzY3JvbGxlci0yRktGUEdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtb3RlLW1lbnUtaW5uZXJcIj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmA7XHJcblxyXG5jb25zdCBmYXZvcml0ZXNIVE1MID0gYDxkaXYgaWQ9XCJiZGEtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlci13cmFwIHNjcm9sbGVyV3JhcC0ybEpFa2QgZmFkZVwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzY3JvbGxlciBzY3JvbGxlci0yRktGUEdcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImVtb3RlLW1lbnUtaW5uZXJcIj5cclxuXHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PmA7XHJcblxyXG5jb25zdCBtYWtlRW1vdGUgPSAoZW1vdGUsIHVybCwgb3B0aW9ucyA9IHt9KSA9PiB7XHJcbiAgICBjb25zdCB7b25Db250ZXh0TWVudSwgb25DbGlja30gPSBvcHRpb25zO1xyXG4gICAgY29uc3QgZW1vdGVDb250YWluZXIgPSAkKGA8ZGl2IGNsYXNzPVwiZW1vdGUtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGltZyBjbGFzcz1cImVtb3RlLWljb25cIiBhbHQ9XCIke2Vtb3RlfVwiIHNyYz1cIiR7dXJsfVwiIHRpdGxlPVwiJHtlbW90ZX1cIj5cclxuICAgIDwvZGl2PmApWzBdO1xyXG4gICAgaWYgKG9uQ29udGV4dE1lbnUpIGVtb3RlQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCBvbkNvbnRleHRNZW51KTtcclxuICAgIGVtb3RlQ29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBvbkNsaWNrKTtcclxuICAgIHJldHVybiBlbW90ZUNvbnRhaW5lcjtcclxufTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW90ZU1lbnUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkVtb3RlTWVudVwiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcImVtb3Rlc1wiO31cclxuICAgIGdldCBjYXRlZ29yeSgpIHtyZXR1cm4gXCJnZW5lcmFsXCI7fVxyXG4gICAgZ2V0IGlkKCkge3JldHVybiBcImVtb3RlTWVudVwiO31cclxuICAgIGdldCBoaWRlRW1vamlzSUQoKSB7cmV0dXJuIFwiaGlkZUVtb2ppTWVudVwiO31cclxuICAgIGdldCBoaWRlRW1vamlzKCkge3JldHVybiB0aGlzLmdldCh0aGlzLmhpZGVFbW9qaXNJRCk7fVxyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgdGhpcy5sYXN0VGFiID0gXCJiZGEtcWVtLWVtb2ppc1wiO1xyXG4gICAgICAgIHRoaXMuZmF2b3JpdGVFbW90ZXMgPSB7fTtcclxuXHJcbiAgICAgICAgdGhpcy5xbWVIZWFkZXIgPSAkKGhlYWRlckhUTUwpWzBdO1xyXG4gICAgICAgIGZvciAoY29uc3QgYnV0dG9uIG9mIHRoaXMucW1lSGVhZGVyLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiYnV0dG9uXCIpKSBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIHRoaXMuc3dpdGNoTWVudS5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgdGhpcy50ZUNvbnRhaW5lciA9ICQodHdpdGNoRW1vdGVIVE1MKVswXTtcclxuICAgICAgICB0aGlzLnRlQ29udGFpbmVySW5uZXIgPSB0aGlzLnRlQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoXCIuZW1vdGUtbWVudS1pbm5lclwiKTtcclxuXHJcbiAgICAgICAgdGhpcy5mYUNvbnRhaW5lciA9ICQoZmF2b3JpdGVzSFRNTClbMF07XHJcbiAgICAgICAgdGhpcy5mYUNvbnRhaW5lcklubmVyID0gdGhpcy5mYUNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKFwiLmVtb3RlLW1lbnUtaW5uZXJcIik7XHJcblxyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihtdXRhdGlvbnMgPT4ge2ZvciAoY29uc3QgbXV0YXRpb24gb2YgbXV0YXRpb25zKSB0aGlzLm9ic2VydmUobXV0YXRpb24pO30pO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlSGlkZUVtb2ppcyA9IHRoaXMuZW5hYmxlSGlkZUVtb2ppcy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMgPSB0aGlzLmRpc2FibGVIaWRlRW1vamlzLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMgPSB0aGlzLnVwZGF0ZVR3aXRjaEVtb3Rlcy5iaW5kKHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGluaXRpYWxpemUoKSB7XHJcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xyXG4gICAgICAgIGNvbnN0IGZlID0gRGF0YVN0b3JlLmdldEJERGF0YShcImJkZmF2ZW1vdGVzXCIpO1xyXG4gICAgICAgIGlmIChmZSAhPT0gXCJcIiAmJiBmZSAhPT0gbnVsbCkgdGhpcy5mYXZvcml0ZUVtb3RlcyA9IEpTT04ucGFyc2Uod2luZG93LmF0b2IoZmUpKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgdGhpcy5sb2coXCJTdGFydGluZyB0byBvYnNlcnZlXCIpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcImFwcC1tb3VudFwiKSwge1xyXG4gICAgICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgICAgIHN1YnRyZWU6IHRydWVcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmhpZGVFbW9qaUNhbmNlbCA9IHRoaXMucmVnaXN0ZXJTZXR0aW5nKHRoaXMuaGlkZUVtb2ppc0lELCB0aGlzLmVuYWJsZUhpZGVFbW9qaXMsIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMpO1xyXG4gICAgICAgIGlmICh0aGlzLmhpZGVFbW9qaXMpIHRoaXMuZW5hYmxlSGlkZUVtb2ppcygpO1xyXG4gICAgICAgIGlmIChFbW90ZU1vZHVsZS5lbW90ZXNMb2FkZWQpIHRoaXMudXBkYXRlVHdpdGNoRW1vdGVzKCk7XHJcbiAgICAgICAgRXZlbnRzLm9uKFwiZW1vdGVzLWxvYWRlZFwiLCB0aGlzLnVwZGF0ZVR3aXRjaEVtb3Rlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgZGlzYWJsZWQoKSB7XHJcbiAgICAgICAgRXZlbnRzLm9mZihcImVtb3Rlcy1sb2FkZWRcIiwgdGhpcy51cGRhdGVUd2l0Y2hFbW90ZXMpO1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUhpZGVFbW9qaXMoKTtcclxuICAgICAgICBpZiAodGhpcy5oaWRlRW1vamlDYW5jZWwpIHRoaXMuaGlkZUVtb2ppQ2FuY2VsKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZW5hYmxlSGlkZUVtb2ppcygpIHtcclxuICAgICAgICAkKFwiLmVtb2ppUGlja2VyLTNtMVMtalwiKS5hZGRDbGFzcyhcImJkYS1xbWUtaGlkZGVuXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVIaWRlRW1vamlzKCkge1xyXG4gICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLnJlbW92ZUNsYXNzKFwiYmRhLXFtZS1oaWRkZW5cIik7XHJcbiAgICB9XHJcblxyXG4gICAgaW5zZXJ0RW1vdGUoZW1vdGUpIHtcclxuICAgICAgICBjb25zdCB0YSA9IFV0aWxpdGllcy5nZXRUZXh0QXJlYSgpO1xyXG4gICAgICAgIFV0aWxpdGllcy5pbnNlcnRUZXh0KHRhWzBdLCB0YS52YWwoKS5zbGljZSgtMSkgPT0gXCIgXCIgPyB0YS52YWwoKSArIGVtb3RlIDogdGEudmFsKCkgKyBcIiBcIiArIGVtb3RlKTtcclxuICAgIH1cclxuXHJcbiAgICBmYXZDb250ZXh0KGUpIHtcclxuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICAgIGNvbnN0IGVtID0gZS50YXJnZXQuY2xvc2VzdChcIi5lbW90ZS1jb250YWluZXJcIikuY2hpbGRyZW5bMF07XHJcbiAgICAgICAgY29uc3QgbWVudSA9ICQoYDxkaXYgaWQ9XCJyZW1vdmVtZW51XCIgY2xhc3M9XCJiZC1jb250ZXh0LW1lbnUgY29udGV4dC1tZW51IHRoZW1lLWRhcmtcIj5SZW1vdmU8L2Rpdj5gKTtcclxuICAgICAgICBtZW51LmNzcyh7XHJcbiAgICAgICAgICAgIHRvcDogZS5wYWdlWSAtICQoXCIjYmRhLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLm9mZnNldCgpLnRvcCxcclxuICAgICAgICAgICAgbGVmdDogZS5wYWdlWCAtICQoXCIjYmRhLXFlbS1mYXZvdXJpdGUtY29udGFpbmVyXCIpLm9mZnNldCgpLmxlZnRcclxuICAgICAgICB9KTtcclxuICAgICAgICAkKGVtKS5wYXJlbnQoKS5hcHBlbmQobWVudSk7XHJcbiAgICAgICAgbWVudS5vbihcImNsaWNrXCIsIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgJChlbSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmZhdm9yaXRlRW1vdGVzWyQoZW0pLmF0dHIoXCJ0aXRsZVwiKV07XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmF2b3JpdGVzKCk7XHJcbiAgICAgICAgICAgICQoZG9jdW1lbnQpLm9mZihcIm1vdXNlZG93bi5lbW90ZW1lbnVcIik7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgJChkb2N1bWVudCkub24oXCJtb3VzZWRvd24uZW1vdGVtZW51XCIsIGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50YXJnZXQuaWQgPT0gXCJyZW1vdmVtZW51XCIpIHJldHVybjtcclxuICAgICAgICAgICAgJChcIiNyZW1vdmVtZW51XCIpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS5vZmYoXCJtb3VzZWRvd24uZW1vdGVtZW51XCIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN3aXRjaE1lbnUoZSkge1xyXG4gICAgICAgIGxldCBpZCA9IHR5cGVvZihlKSA9PSBcInN0cmluZ1wiID8gZSA6ICQoZS50YXJnZXQpLmF0dHIoXCJpZFwiKTtcclxuICAgICAgICBpZiAoaWQgPT0gXCJiZGEtcWVtLWVtb2ppc1wiICYmIHRoaXMuaGlkZUVtb2ppcykgaWQgPSBcImJkYS1xZW0tZmF2b3VyaXRlXCI7XHJcbiAgICAgICAgY29uc3QgdHdpdGNoID0gJChcIiNiZGEtcWVtLXR3aXRjaFwiKTtcclxuICAgICAgICBjb25zdCBmYXYgPSAkKFwiI2JkYS1xZW0tZmF2b3VyaXRlXCIpO1xyXG4gICAgICAgIGNvbnN0IGVtb2ppcyA9ICQoXCIjYmRhLXFlbS1lbW9qaXNcIik7XHJcbiAgICAgICAgdHdpdGNoLnJlbW92ZUNsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgIGZhdi5yZW1vdmVDbGFzcyhcImFjdGl2ZVwiKTtcclxuICAgICAgICBlbW9qaXMucmVtb3ZlQ2xhc3MoXCJhY3RpdmVcIik7XHJcblxyXG4gICAgICAgICQoXCIuZW1vamlQaWNrZXItM20xUy1qXCIpLmhpZGUoKTtcclxuICAgICAgICAkKFwiI2JkYS1xZW0tZmF2b3VyaXRlLWNvbnRhaW5lclwiKS5oaWRlKCk7XHJcbiAgICAgICAgJChcIiNiZGEtcWVtLXR3aXRjaC1jb250YWluZXJcIikuaGlkZSgpO1xyXG5cclxuICAgICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZGEtcWVtLXR3aXRjaFwiOlxyXG4gICAgICAgICAgICAgICAgdHdpdGNoLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNiZGEtcWVtLXR3aXRjaC1jb250YWluZXJcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZGEtcWVtLWZhdm91cml0ZVwiOlxyXG4gICAgICAgICAgICAgICAgZmF2LmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNiZGEtcWVtLWZhdm91cml0ZS1jb250YWluZXJcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJiZGEtcWVtLWVtb2ppc1wiOlxyXG4gICAgICAgICAgICAgICAgZW1vamlzLmFkZENsYXNzKFwiYWN0aXZlXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWpcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgJChcIi5lbW9qaVBpY2tlci0zbTFTLWogaW5wdXRcIikuZm9jdXMoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaWQpIHRoaXMubGFzdFRhYiA9IGlkO1xyXG4gICAgfVxyXG5cclxuICAgIG9ic2VydmUobXV0YXRpb24pIHtcclxuICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSByZXR1cm47XHJcbiAgICAgICAgY29uc3Qgbm9kZSA9IG11dGF0aW9uLmFkZGVkTm9kZXNbMF07XHJcbiAgICAgICAgaWYgKCFub2RlLmNsYXNzTGlzdC5jb250YWlucyhcInBvcG91dC0zc1ZNWHpcIikgfHwgbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoXCJwb3BvdXRMZWZ0LTMwV21yRFwiKSB8fCAhbm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZW1vamlQaWNrZXItM20xUy1qXCIpLmxlbmd0aCkgcmV0dXJuO1xyXG5cclxuICAgICAgICBjb25zdCBlID0gJChub2RlKTtcclxuICAgICAgICBpZiAodGhpcy5oaWRlRW1vamlzKSBlLmFkZENsYXNzKFwiYmRhLXFtZS1oaWRkZW5cIik7XHJcbiAgICAgICAgZWxzZSBlLnJlbW92ZUNsYXNzKFwiYmRhLXFtZS1oaWRkZW5cIik7XHJcblxyXG4gICAgICAgIGUucHJlcGVuZCh0aGlzLnFtZUhlYWRlcik7XHJcbiAgICAgICAgZS5hcHBlbmQodGhpcy50ZUNvbnRhaW5lcik7XHJcbiAgICAgICAgZS5hcHBlbmQodGhpcy5mYUNvbnRhaW5lcik7XHJcblxyXG4gICAgICAgIHRoaXMuc3dpdGNoTWVudSh0aGlzLmxhc3RUYWIpO1xyXG4gICAgfVxyXG5cclxuICAgIGZhdm9yaXRlKG5hbWUsIHVybCkge1xyXG4gICAgICAgIGlmICghdGhpcy5mYXZvcml0ZUVtb3Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkgdGhpcy5mYXZvcml0ZUVtb3Rlc1tuYW1lXSA9IHVybDtcclxuICAgICAgICB0aGlzLnVwZGF0ZUZhdm9yaXRlcygpO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZVR3aXRjaEVtb3RlcygpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy50ZUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQpIHRoaXMudGVDb250YWluZXJJbm5lci5maXJzdENoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gRW1vdGVNb2R1bGUuZ2V0Q2F0ZWdvcnkoXCJUd2l0Y2hHbG9iYWxcIikpIHtcclxuICAgICAgICAgICAgaWYgKCFFbW90ZU1vZHVsZS5nZXRDYXRlZ29yeShcIlR3aXRjaEdsb2JhbFwiKS5oYXNPd25Qcm9wZXJ0eShlbW90ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSBFbW90ZU1vZHVsZS5nZXRDYXRlZ29yeShcIlR3aXRjaEdsb2JhbFwiKVtlbW90ZV07XHJcbiAgICAgICAgICAgIGNvbnN0IGVtb3RlRWxlbWVudCA9IG1ha2VFbW90ZShlbW90ZSwgdXJsLCB7b25DbGljazogdGhpcy5pbnNlcnRFbW90ZS5iaW5kKHRoaXMsIGVtb3RlKX0pO1xyXG4gICAgICAgICAgICB0aGlzLnRlQ29udGFpbmVySW5uZXIuYXBwZW5kKGVtb3RlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUZhdm9yaXRlcygpIHtcclxuICAgICAgICB3aGlsZSAodGhpcy5mYUNvbnRhaW5lcklubmVyLmZpcnN0Q2hpbGQpIHRoaXMuZmFDb250YWluZXJJbm5lci5maXJzdENoaWxkLnJlbW92ZSgpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gdGhpcy5mYXZvcml0ZUVtb3Rlcykge1xyXG4gICAgICAgICAgICBjb25zdCB1cmwgPSB0aGlzLmZhdm9yaXRlRW1vdGVzW2Vtb3RlXTtcclxuICAgICAgICAgICAgY29uc3QgZW1vdGVFbGVtZW50ID0gbWFrZUVtb3RlKGVtb3RlLCB1cmwsIHtvbkNsaWNrOiB0aGlzLmluc2VydEVtb3RlLmJpbmQodGhpcywgZW1vdGUpLCBvbkNvbnRleHRNZW51OiB0aGlzLmZhdkNvbnRleHQuYmluZCh0aGlzKX0pO1xyXG4gICAgICAgICAgICB0aGlzLmZhQ29udGFpbmVySW5uZXIuYXBwZW5kKGVtb3RlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJiZGZhdmVtb3Rlc1wiLCB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeSh0aGlzLmZhdm9yaXRlRW1vdGVzKSkpO1xyXG4gICAgfVxyXG5cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/emotemenu.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 returnValue\n }) => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].monkeyPatch(returnValue.props, \"children\", {\n silent: true,\n after: ({\n returnValue\n }) => {\n if (this.categories.length == 0) return;\n const markup = returnValue.props.children[1];\n if (!markup.props.children) return;\n const nodes = markup.props.children[1];\n if (!nodes || !nodes.length) return;\n\n for (let n = 0; n < nodes.length; n++) {\n const node = nodes[n];\n if (typeof node !== \"string\") continue;\n const words = node.split(/([^\\s]+)([\\s]|$)/g);\n\n for (let c = 0, clen = this.categories.length; c < clen; c++) {\n for (let w = 0, wlen = words.length; w < wlen; w++) {\n const emote = words[w];\n const emoteSplit = emote.split(\":\");\n const emoteName = emoteSplit[0];\n let emoteModifier = emoteSplit[1] ? emoteSplit[1] : \"\";\n let emoteOverride = emoteModifier.slice(0);\n if (emoteName.length < 4 || blacklist.includes(emoteName)) continue;\n if (!modifiers.includes(emoteModifier) || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"general\", \"modifiers\")) emoteModifier = \"\";\n if (!overrides.includes(emoteOverride)) emoteOverride = \"\";else emoteModifier = emoteOverride;\n let current = this.categories[c];\n\n if (emoteOverride === \"twitch\") {\n if (Emotes.TwitchGlobal[emoteName]) current = \"TwitchGlobal\";else if (Emotes.TwitchSubscriber[emoteName]) current = \"TwitchSubscriber\";\n } else if (emoteOverride === \"bttv\") {\n if (Emotes.BTTV[emoteName]) current = \"BTTV\";else if (Emotes.BTTV2[emoteName]) current = \"BTTV2\";\n } else if (emoteOverride === \"ffz\") {\n if (Emotes.FrankerFaceZ[emoteName]) current = \"FrankerFaceZ\";\n }\n\n if (!Emotes[current][emoteName] || !modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].get(this.category, \"categories\", bdEmoteSettingIDs[current])) continue;\n const results = nodes[n].match(new RegExp(`([\\\\s]|^)${modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].escape(emoteModifier ? emoteName + \":\" + emoteModifier : emoteName)}([\\\\s]|$)`));\n if (!results) continue;\n const pre = nodes[n].substring(0, results.index + results[1].length);\n const post = nodes[n].substring(results.index + results[0].length - results[2].length);\n nodes[n] = pre;\n const emoteComponent = modules__WEBPACK_IMPORTED_MODULE_2__[\"DiscordModules\"].React.createElement(_ui_emote__WEBPACK_IMPORTED_MODULE_3__[\"default\"], {\n name: emoteName,\n url: Emotes[current][emoteName],\n modifier: emoteModifier\n });\n nodes.splice(n + 1, 0, post);\n nodes.splice(n + 1, 0, emoteComponent);\n }\n }\n }\n\n const onlyEmotes = nodes.every(r => {\n if (typeof r == \"string\" && r.replace(/\\s*/, \"\") == \"\") return true;else if (r.type && r.type.name == \"BDEmote\") return true;else if (r.props && r.props.children && r.props.children.props && r.props.children.props.emojiName) return true;\n return false;\n });\n if (!onlyEmotes) return;\n\n for (const node of nodes) {\n if (typeof node != \"object\") continue;\n if (node.type.name == \"BDEmote\") node.props.jumboable = true;else if (node.props && node.props.children && node.props.children.props && node.props.children.props.emojiName) node.props.children.props.jumboable = true;\n }\n }\n });\n }\n });\n }\n\n async loadEmoteData(emoteInfo) {\n 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, data) => {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Emotes loaded from cache.\");\n if (err) data = {};\n resolve(data);\n });\n });\n let isValid = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].testJSON(data);\n if (isValid) Object.assign(Emotes, JSON.parse(data));\n\n for (const e in emoteInfo) {\n isValid = Object.keys(Emotes[emoteInfo[e].variable]).length > 0;\n }\n\n if (isValid) {\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Emotes successfully loaded.\", {\n type: \"success\"\n });\n 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 modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"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 };\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", `Downloading: ${emoteMeta.variable} (${emoteMeta.url})`);\n return new Promise((resolve, reject) => {\n request(options, (error, response, body) => {\n if (error) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not download \" + emoteMeta.variable, error);\n\n if (emoteMeta.backup) {\n emoteMeta.url = emoteMeta.backup;\n emoteMeta.backup = null;\n if (emoteMeta.backupParser) emoteMeta.parser = emoteMeta.backupParser;\n return resolve(this.downloadEmotes(emoteMeta));\n }\n\n return reject({});\n }\n\n let parsedData = {};\n\n try {\n parsedData = JSON.parse(body);\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not download \" + emoteMeta.variable, err);\n\n if (emoteMeta.backup) {\n emoteMeta.url = emoteMeta.backup;\n emoteMeta.backup = null;\n if (emoteMeta.backupParser) emoteMeta.parser = emoteMeta.backupParser;\n return resolve(this.downloadEmotes(emoteMeta));\n }\n\n return reject({});\n }\n\n if (typeof emoteMeta.parser === \"function\") parsedData = emoteMeta.parser(parsedData);\n\n for (const emote in parsedData) {\n if (emote.length < 4 || blacklist.includes(emote)) {\n delete parsedData[emote];\n continue;\n }\n\n parsedData[emote] = emoteMeta.getEmoteURL(parsedData[emote]);\n }\n\n resolve(parsedData);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Downloaded: \" + emoteMeta.variable);\n });\n });\n }\n\n getBlacklist() {\n return new Promise(resolve => {\n $.getJSON(`https://rauenzi.github.io/BetterDiscordApp/data/emotefilter.json`, function (data) {\n resolve(blacklist.push(...data.blacklist));\n });\n });\n }\n\n isCacheValid() {\n const cacheLength = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDays\") || modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDays\", 7) || 7;\n const cacheDate = new Date(modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDate\") || null);\n const currentDate = new Date();\n const daysBetween = Math.round(Math.abs((currentDate.getTime() - cacheDate.getTime()) / (24 * 60 * 60 * 1000)));\n\n if (daysBetween > cacheLength) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", currentDate.toJSON());\n return false;\n }\n\n return true;\n }\n\n clearEmoteData() {\n const _fs = __webpack_require__(/*! fs */ \"fs\");\n\n const emoteFile = \"emote_data.json\";\n const file = data__WEBPACK_IMPORTED_MODULE_1__[\"Config\"].dataPath + emoteFile;\n\n const exists = _fs.existsSync(file);\n\n if (exists) _fs.unlinkSync(file);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", new Date().toJSON());\n\n for (const category in Emotes) Object.assign(Emotes, {\n [category]: {}\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbIkVtb3RlcyIsIlR3aXRjaEdsb2JhbCIsIlR3aXRjaFN1YnNjcmliZXIiLCJCVFRWIiwiRnJhbmtlckZhY2VaIiwiQlRUVjIiLCJiZEVtb3RlU2V0dGluZ0lEcyIsImJsYWNrbGlzdCIsIm92ZXJyaWRlcyIsIm1vZGlmaWVycyIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwiZ2V0IiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENhdGVnb3J5IiwiaW5pdGlhbGl6ZSIsImVuYWJsZWQiLCJTZXR0aW5ncyIsInJlZ2lzdGVyQ29sbGVjdGlvbiIsIkVtb3RlQ29uZmlnIiwidGl0bGUiLCJvbkNsaWNrIiwiY2xlYXJFbW90ZURhdGEiLCJsb2FkRW1vdGVEYXRhIiwiRW1vdGVJbmZvIiwiZGlzYWJsZWQiLCJyZW1vdmVDb2xsZWN0aW9uIiwiZW1wdHlFbW90ZXMiLCJjYW5jZWxFbW90ZVJlbmRlciIsImNhdCIsImFzc2lnbiIsInBhdGNoTWVzc2FnZUNvbnRlbnQiLCJVdGlsaXRpZXMiLCJtb25rZXlQYXRjaCIsInByb3RvdHlwZSIsImFmdGVyIiwicmV0dXJuVmFsdWUiLCJwcm9wcyIsInNpbGVudCIsImxlbmd0aCIsIm1hcmt1cCIsImNoaWxkcmVuIiwibm9kZXMiLCJuIiwibm9kZSIsIndvcmRzIiwic3BsaXQiLCJjIiwiY2xlbiIsInciLCJ3bGVuIiwiZW1vdGUiLCJlbW90ZVNwbGl0IiwiZW1vdGVOYW1lIiwiZW1vdGVNb2RpZmllciIsImVtb3RlT3ZlcnJpZGUiLCJzbGljZSIsImluY2x1ZGVzIiwiY3VycmVudCIsInJlc3VsdHMiLCJtYXRjaCIsIlJlZ0V4cCIsImVzY2FwZSIsInByZSIsInN1YnN0cmluZyIsImluZGV4IiwicG9zdCIsImVtb3RlQ29tcG9uZW50IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJCREVtb3RlIiwidXJsIiwibW9kaWZpZXIiLCJzcGxpY2UiLCJvbmx5RW1vdGVzIiwiZXZlcnkiLCJyIiwicmVwbGFjZSIsInR5cGUiLCJlbW9qaU5hbWUiLCJqdW1ib2FibGUiLCJlbW90ZUluZm8iLCJlbW90ZXNMb2FkZWQiLCJfZnMiLCJyZXF1aXJlIiwiZW1vdGVGaWxlIiwiZmlsZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwiZXhpc3RzIiwiZXhpc3RzU3luYyIsImlzQ2FjaGVWYWxpZCIsIlRvYXN0cyIsInNob3ciLCJsb2ciLCJkYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWFkRmlsZSIsImVyciIsImlzVmFsaWQiLCJ0ZXN0SlNPTiIsIkpTT04iLCJwYXJzZSIsImUiLCJ2YXJpYWJsZSIsIkV2ZW50cyIsImRpc3BhdGNoIiwidW5saW5rU3luYyIsInNldFRpbWVvdXQiLCJkb3dubG9hZEVtb3RlcyIsIndyaXRlRmlsZVN5bmMiLCJzdHJpbmdpZnkiLCJlbW90ZU1ldGEiLCJyZXF1ZXN0Iiwib3B0aW9ucyIsInRpbWVvdXQiLCJyZWplY3QiLCJlcnJvciIsInJlc3BvbnNlIiwiYm9keSIsImJhY2t1cCIsImJhY2t1cFBhcnNlciIsInBhcnNlciIsInBhcnNlZERhdGEiLCJnZXRFbW90ZVVSTCIsImdldEJsYWNrbGlzdCIsIiQiLCJnZXRKU09OIiwicHVzaCIsImNhY2hlTGVuZ3RoIiwiRGF0YVN0b3JlIiwiZ2V0QkREYXRhIiwic2V0QkREYXRhIiwiY2FjaGVEYXRlIiwiRGF0ZSIsImN1cnJlbnREYXRlIiwiZGF5c0JldHdlZW4iLCJNYXRoIiwicm91bmQiLCJhYnMiLCJnZXRUaW1lIiwidG9KU09OIl0s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O0FBQ0EsU0FBSyxNQUFNaEosUUFBWCxJQUF1QmQsTUFBdkIsRUFBK0JpQixNQUFNLENBQUM0QixNQUFQLENBQWM3QyxNQUFkLEVBQXNCO0FBQUMsT0FBQ2MsUUFBRCxHQUFZO0FBQWIsS0FBdEI7QUFDbEM7O0FBblFnRCxDQUF0QyxFQUFmIiwiZmlsZSI6Ii4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBCdWlsdGluIGZyb20gXCIuLi9zdHJ1Y3RzL2J1aWx0aW5cIjtcclxuXHJcbmltcG9ydCB7Q29uZmlnLCBFbW90ZUluZm8sIEVtb3RlQ29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG5pbXBvcnQge1V0aWxpdGllcywgV2VicGFja01vZHVsZXMsIERhdGFTdG9yZSwgRGlzY29yZE1vZHVsZXMsIEV2ZW50cywgU2V0dGluZ3N9IGZyb20gXCJtb2R1bGVzXCI7XHJcbmltcG9ydCBCREVtb3RlIGZyb20gXCIuLi91aS9lbW90ZVwiO1xyXG5pbXBvcnQge1RvYXN0c30gZnJvbSBcInVpXCI7XHJcblxyXG5jb25zdCBFbW90ZXMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IHt9LFxyXG4gICAgVHdpdGNoU3Vic2NyaWJlcjoge30sXHJcbiAgICBCVFRWOiB7fSxcclxuICAgIEZyYW5rZXJGYWNlWjoge30sXHJcbiAgICBCVFRWMjoge31cclxufTtcclxuXHJcbmNvbnN0IGJkRW1vdGVTZXR0aW5nSURzID0ge1xyXG4gICAgVHdpdGNoR2xvYmFsOiBcInR3aXRjaFwiLFxyXG4gICAgVHdpdGNoU3Vic2NyaWJlcjogXCJ0d2l0Y2hcIixcclxuICAgIEJUVFY6IFwiYnR0dlwiLFxyXG4gICAgRnJhbmtlckZhY2VaOiBcImZmelwiLFxyXG4gICAgQlRUVjI6IFwiYnR0dlwiXHJcbn07XHJcblxyXG5jb25zdCBibGFja2xpc3QgPSBbXTtcclxuY29uc3Qgb3ZlcnJpZGVzID0gW1widHdpdGNoXCIsIFwiYnR0dlwiLCBcImZmelwiXTtcclxuY29uc3QgbW9kaWZpZXJzID0gW1wiZmxpcFwiLCBcInNwaW5cIiwgXCJwdWxzZVwiLCBcInNwaW4yXCIsIFwic3BpbjNcIiwgXCIxc3BpblwiLCBcIjJzcGluXCIsIFwiM3NwaW5cIiwgXCJ0clwiLCBcImJsXCIsIFwiYnJcIiwgXCJzaGFrZVwiLCBcInNoYWtlMlwiLCBcInNoYWtlM1wiLCBcImZsYXBcIl07XHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgY2xhc3MgRW1vdGVNb2R1bGUgZXh0ZW5kcyBCdWlsdGluIHtcclxuICAgIGdldCBuYW1lKCkge3JldHVybiBcIkVtb3Rlc1wiO31cclxuICAgIGdldCBjb2xsZWN0aW9uKCkge3JldHVybiBcInNldHRpbmdzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3J5KCkge3JldHVybiBcImdlbmVyYWxcIjt9XHJcbiAgICBnZXQgaWQoKSB7cmV0dXJuIFwiZW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNhdGVnb3JpZXMoKSB7IHJldHVybiBPYmplY3Qua2V5cyhiZEVtb3RlU2V0dGluZ0lEcykuZmlsdGVyKGsgPT4gdGhpcy5pc0NhdGVnb3J5RW5hYmxlZChiZEVtb3RlU2V0dGluZ0lEc1trXSkpOyB9XHJcblxyXG4gICAgaXNDYXRlZ29yeUVuYWJsZWQoaWQpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KFwiZW1vdGVzXCIsIFwiY2F0ZWdvcmllc1wiLCBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0KGlkKSB7XHJcbiAgICAgICAgcmV0dXJuIHN1cGVyLmdldChcImVtb3Rlc1wiLCBcImdlbmVyYWxcIiwgaWQpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldCBNZXNzYWdlQ29udGVudENvbXBvbmVudCgpIHtyZXR1cm4gV2VicGFja01vZHVsZXMuZ2V0TW9kdWxlKG0gPT4gbS5kZWZhdWx0UHJvcHMgJiYgbS5kZWZhdWx0UHJvcHMuaGFzT3duUHJvcGVydHkoXCJkaXNhYmxlQnV0dG9uc1wiKSk7fVxyXG5cclxuICAgIGdldCBFbW90ZXMoKSB7cmV0dXJuIEVtb3Rlczt9XHJcbiAgICBnZXQgVHdpdGNoR2xvYmFsKCkge3JldHVybiBFbW90ZXMuVHdpdGNoR2xvYmFsO31cclxuICAgIGdldCBUd2l0Y2hTdWJzY3JpYmVyKCkge3JldHVybiBFbW90ZXMuVHdpdGNoU3Vic2NyaWJlcjt9XHJcbiAgICBnZXQgQlRUVigpIHtyZXR1cm4gRW1vdGVzLkJUVFY7fVxyXG4gICAgZ2V0IEZyYW5rZXJGYWNlWigpIHtyZXR1cm4gRW1vdGVzLkZyYW5rZXJGYWNlWjt9XHJcbiAgICBnZXQgQlRUVjIoKSB7cmV0dXJuIEVtb3Rlcy5CVFRWMjt9XHJcbiAgICBnZXQgYmxhY2tsaXN0KCkge3JldHVybiBibGFja2xpc3Q7fVxyXG5cclxuICAgIGdldENhdGVnb3J5KGNhdGVnb3J5KSB7XHJcbiAgICAgICAgcmV0dXJuIEVtb3Rlc1tjYXRlZ29yeV07XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdGlhbGl6ZSgpIHtcclxuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XHJcbiAgICAgICAgLy8gRW1vdGVDb25maWc7XHJcbiAgICAgICAgLy8gZW1vdGVDb2xsZWN0aW9uLmJ1dHRvbiA9IHt0aXRsZTogXCJDbGVhciBFbW90ZSBDYWNoZVwiLCBvbkNsaWNrOiAoKSA9PiB7IHRoaXMuY2xlYXJFbW90ZURhdGEoKTsgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7IH19O1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVuYWJsZWQoKSB7XHJcbiAgICAgICAgU2V0dGluZ3MucmVnaXN0ZXJDb2xsZWN0aW9uKFwiZW1vdGVzXCIsIFwiRW1vdGVzXCIsIEVtb3RlQ29uZmlnLCB7dGl0bGU6IFwiQ2xlYXIgRW1vdGUgQ2FjaGVcIiwgb25DbGljazogKCkgPT4geyB0aGlzLmNsZWFyRW1vdGVEYXRhKCk7IHRoaXMubG9hZEVtb3RlRGF0YShFbW90ZUluZm8pOyB9fSk7XHJcbiAgICAgICAgLy8gRGlzYWJsZSBlbW90ZSBtb2R1bGUgZm9yIG5vdyBiZWNhdXNlIGl0J3MgYW5ub3lpbmcgYW5kIHNsb3dcclxuICAgICAgICAvLyBhd2FpdCB0aGlzLmdldEJsYWNrbGlzdCgpO1xyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMubG9hZEVtb3RlRGF0YShFbW90ZUluZm8pO1xyXG5cclxuICAgICAgICAvLyB3aGlsZSAoIXRoaXMuTWVzc2FnZUNvbnRlbnRDb21wb25lbnQpIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDApKTtcclxuICAgICAgICAvLyB0aGlzLnBhdGNoTWVzc2FnZUNvbnRlbnQoKTtcclxuICAgIH1cclxuXHJcbiAgICBkaXNhYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZW1vdmVDb2xsZWN0aW9uKFwiZW1vdGVzXCIpO1xyXG4gICAgICAgIHRoaXMuZW1wdHlFbW90ZXMoKTtcclxuICAgICAgICBpZiAoIXRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyKCk7XHJcbiAgICAgICAgZGVsZXRlIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZW1wdHlFbW90ZXMoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBjYXQgaW4gRW1vdGVzKSBPYmplY3QuYXNzaWduKEVtb3Rlcywge1tjYXRdOiB7fX0pO1xyXG4gICAgfVxyXG5cclxuICAgIHBhdGNoTWVzc2FnZUNvbnRlbnQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIpIHJldHVybjtcclxuICAgICAgICB0aGlzLmNhbmNlbEVtb3RlUmVuZGVyID0gVXRpbGl0aWVzLm1vbmtleVBhdGNoKHRoaXMuTWVzc2FnZUNvbnRlbnRDb21wb25lbnQucHJvdG90eXBlLCBcInJlbmRlclwiLCB7YWZ0ZXI6ICh7cmV0dXJuVmFsdWV9KSA9PiB7XHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5tb25rZXlQYXRjaChyZXR1cm5WYWx1ZS5wcm9wcywgXCJjaGlsZHJlblwiLCB7c2lsZW50OiB0cnVlLCBhZnRlcjogKHtyZXR1cm5WYWx1ZX0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhdGVnb3JpZXMubGVuZ3RoID09IDApIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcmt1cCA9IHJldHVyblZhbHVlLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFtYXJrdXAucHJvcHMuY2hpbGRyZW4pIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gbWFya3VwLnByb3BzLmNoaWxkcmVuWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFub2RlcyB8fCAhbm9kZXMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IG5vZGVzLmxlbmd0aDsgbisrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzW25dO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT09IFwic3RyaW5nXCIpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gbm9kZS5zcGxpdCgvKFteXFxzXSspKFtcXHNdfCQpL2cpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGMgPSAwLCBjbGVuID0gdGhpcy5jYXRlZ29yaWVzLmxlbmd0aDsgYyA8IGNsZW47IGMrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCB3ID0gMCwgd2xlbiA9IHdvcmRzLmxlbmd0aDsgdyA8IHdsZW47IHcrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGUgPSB3b3Jkc1t3XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlU3BsaXQgPSBlbW90ZS5zcGxpdChcIjpcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZU5hbWUgPSBlbW90ZVNwbGl0WzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVtb3RlTW9kaWZpZXIgPSBlbW90ZVNwbGl0WzFdID8gZW1vdGVTcGxpdFsxXSA6IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW1vdGVPdmVycmlkZSA9IGVtb3RlTW9kaWZpZXIuc2xpY2UoMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTmFtZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZU5hbWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbW9kaWZpZXJzLmluY2x1ZGVzKGVtb3RlTW9kaWZpZXIpIHx8ICFTZXR0aW5ncy5nZXQodGhpcy5jYXRlZ29yeSwgXCJnZW5lcmFsXCIsIFwibW9kaWZpZXJzXCIpKSBlbW90ZU1vZGlmaWVyID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghb3ZlcnJpZGVzLmluY2x1ZGVzKGVtb3RlT3ZlcnJpZGUpKSBlbW90ZU92ZXJyaWRlID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgZW1vdGVNb2RpZmllciA9IGVtb3RlT3ZlcnJpZGU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJlbnQgPSB0aGlzLmNhdGVnb3JpZXNbY107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVPdmVycmlkZSA9PT0gXCJ0d2l0Y2hcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuVHdpdGNoR2xvYmFsW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaEdsb2JhbFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIlR3aXRjaFN1YnNjcmliZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwiYnR0dlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5CVFRWW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkJUVFZcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChFbW90ZXMuQlRUVjJbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiQlRUVjJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwiZmZ6XCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLkZyYW5rZXJGYWNlWltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJGcmFua2VyRmFjZVpcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIUVtb3Rlc1tjdXJyZW50XVtlbW90ZU5hbWVdIHx8ICFTZXR0aW5ncy5nZXQodGhpcy5jYXRlZ29yeSwgXCJjYXRlZ29yaWVzXCIsIGJkRW1vdGVTZXR0aW5nSURzW2N1cnJlbnRdKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXN1bHRzID0gbm9kZXNbbl0ubWF0Y2gobmV3IFJlZ0V4cChgKFtcXFxcc118Xikke1V0aWxpdGllcy5lc2NhcGUoZW1vdGVNb2RpZmllciA/IGVtb3RlTmFtZSArIFwiOlwiICsgZW1vdGVNb2RpZmllciA6IGVtb3RlTmFtZSl9KFtcXFxcc118JClgKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdHMpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJlID0gbm9kZXNbbl0uc3Vic3RyaW5nKDAsIHJlc3VsdHMuaW5kZXggKyByZXN1bHRzWzFdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3N0ID0gbm9kZXNbbl0uc3Vic3RyaW5nKHJlc3VsdHMuaW5kZXggKyByZXN1bHRzWzBdLmxlbmd0aCAtIHJlc3VsdHNbMl0ubGVuZ3RoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzW25dID0gcHJlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGVDb21wb25lbnQgPSBEaXNjb3JkTW9kdWxlcy5SZWFjdC5jcmVhdGVFbGVtZW50KEJERW1vdGUsIHtuYW1lOiBlbW90ZU5hbWUsIHVybDogRW1vdGVzW2N1cnJlbnRdW2Vtb3RlTmFtZV0sIG1vZGlmaWVyOiBlbW90ZU1vZGlmaWVyfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5zcGxpY2UobiArIDEsIDAsIHBvc3QpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKG4gKyAxLCAwLCBlbW90ZUNvbXBvbmVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvbmx5RW1vdGVzID0gbm9kZXMuZXZlcnkociA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihyKSA9PSBcInN0cmluZ1wiICYmIHIucmVwbGFjZSgvXFxzKi8sIFwiXCIpID09IFwiXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIudHlwZSAmJiByLnR5cGUubmFtZSA9PSBcIkJERW1vdGVcIikgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoci5wcm9wcyAmJiByLnByb3BzLmNoaWxkcmVuICYmIHIucHJvcHMuY2hpbGRyZW4ucHJvcHMgJiYgci5wcm9wcy5jaGlsZHJlbi5wcm9wcy5lbW9qaU5hbWUpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFvbmx5RW1vdGVzKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIG5vZGVzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZihub2RlKSAhPSBcIm9iamVjdFwiKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS50eXBlLm5hbWUgPT0gXCJCREVtb3RlXCIpIG5vZGUucHJvcHMuanVtYm9hYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChub2RlLnByb3BzICYmIG5vZGUucHJvcHMuY2hpbGRyZW4gJiYgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcyAmJiBub2RlLnByb3BzLmNoaWxkcmVuLnByb3BzLmVtb2ppTmFtZSkgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcy5qdW1ib2FibGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9fSk7XHJcbiAgICAgICAgfX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRFbW90ZURhdGEoZW1vdGVJbmZvKSB7XHJcbiAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBfZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICAgICAgY29uc3QgZW1vdGVGaWxlID0gXCJlbW90ZV9kYXRhLmpzb25cIjtcclxuICAgICAgICBjb25zdCBmaWxlID0gQ29uZmlnLmRhdGFQYXRoICsgZW1vdGVGaWxlO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IF9mcy5leGlzdHNTeW5jKGZpbGUpO1xyXG5cclxuICAgICAgICBpZiAoZXhpc3RzICYmIHRoaXMuaXNDYWNoZVZhbGlkKCkpIHtcclxuICAgICAgICAgICAgVG9hc3RzLnNob3coXCJMb2FkaW5nIGVtb3RlcyBmcm9tIGNhY2hlLlwiLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuICAgICAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBcIkxvYWRpbmcgZW1vdGVzIGZyb20gbG9jYWwgY2FjaGUuXCIpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAgICAgX2ZzLnJlYWRGaWxlKGZpbGUsIFwidXRmOFwiLCAoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBcIkVtb3RlcyBsb2FkZWQgZnJvbSBjYWNoZS5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVycikgZGF0YSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgaXNWYWxpZCA9IFV0aWxpdGllcy50ZXN0SlNPTihkYXRhKTtcclxuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCBKU09OLnBhcnNlKGRhdGEpKTtcclxuXHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZSBpbiBlbW90ZUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBPYmplY3Qua2V5cyhFbW90ZXNbZW1vdGVJbmZvW2VdLnZhcmlhYmxlXSkubGVuZ3RoID4gMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGlzVmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIFRvYXN0cy5zaG93KFwiRW1vdGVzIHN1Y2Nlc3NmdWxseSBsb2FkZWQuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgRXZlbnRzLmRpc3BhdGNoKFwiZW1vdGVzLWxvYWRlZFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBcIkNhY2hlIHdhcyBjb3JydXB0LCBkb3dubG9hZGluZy4uLlwiKTtcclxuICAgICAgICAgICAgX2ZzLnVubGlua1N5bmMoZmlsZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIVNldHRpbmdzLmdldCh0aGlzLmNhdGVnb3J5LCBcImdlbmVyYWxcIiwgXCJkb3dubG9hZFwiKSkgcmV0dXJuO1xyXG4gICAgICAgIFRvYXN0cy5zaG93KFwiRG93bmxvYWRpbmcgZW1vdGVzIGluIHRoZSBiYWNrZ3JvdW5kIGRvIG5vdCByZWxvYWQuXCIsIHt0eXBlOiBcImluZm9cIn0pO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGUgaW4gZW1vdGVJbmZvKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHIgPT4gc2V0VGltZW91dChyLCAxMDAwKSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmRvd25sb2FkRW1vdGVzKGVtb3RlSW5mb1tlXSk7XHJcbiAgICAgICAgICAgIEVtb3Rlc1tlbW90ZUluZm9bZV0udmFyaWFibGVdID0gZGF0YTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIFRvYXN0cy5zaG93KFwiQWxsIGVtb3RlcyBzdWNjZXNzZnVsbHkgZG93bmxvYWRlZC5cIiwge3R5cGU6IFwic3VjY2Vzc1wifSk7XHJcblxyXG4gICAgICAgIHRyeSB7IF9mcy53cml0ZUZpbGVTeW5jKGZpbGUsIEpTT04uc3RyaW5naWZ5KEVtb3RlcyksIFwidXRmOFwiKTsgfVxyXG4gICAgICAgIGNhdGNoIChlcnIpIHsgVXRpbGl0aWVzLmVycihcIkVtb3Rlc1wiLCBcIkNvdWxkIG5vdCBzYXZlIGVtb3RlIGRhdGEuXCIsIGVycik7IH1cclxuXHJcbiAgICAgICAgdGhpcy5lbW90ZXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgZG93bmxvYWRFbW90ZXMoZW1vdGVNZXRhKSB7XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVpcmUoXCJyZXF1ZXN0XCIpO1xyXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7XHJcbiAgICAgICAgICAgIHVybDogZW1vdGVNZXRhLnVybCxcclxuICAgICAgICAgICAgdGltZW91dDogZW1vdGVNZXRhLnRpbWVvdXQgPyBlbW90ZU1ldGEudGltZW91dCA6IDUwMDBcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBVdGlsaXRpZXMubG9nKFwiRW1vdGVzXCIsIGBEb3dubG9hZGluZzogJHtlbW90ZU1ldGEudmFyaWFibGV9ICgke2Vtb3RlTWV0YS51cmx9KWApO1xyXG5cclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICByZXF1ZXN0KG9wdGlvbnMsIChlcnJvciwgcmVzcG9uc2UsIGJvZHkpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxpdGllcy5lcnIoXCJFbW90ZXNcIiwgXCJDb3VsZCBub3QgZG93bmxvYWQgXCIgKyBlbW90ZU1ldGEudmFyaWFibGUsIGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVNZXRhLmJhY2t1cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW90ZU1ldGEudXJsID0gZW1vdGVNZXRhLmJhY2t1cDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vdGVNZXRhLmJhY2t1cCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU1ldGEuYmFja3VwUGFyc2VyKSBlbW90ZU1ldGEucGFyc2VyID0gZW1vdGVNZXRhLmJhY2t1cFBhcnNlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5kb3dubG9hZEVtb3RlcyhlbW90ZU1ldGEpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlZERhdGEgPSB7fTtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YSA9IEpTT04ucGFyc2UoYm9keSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgVXRpbGl0aWVzLmVycihcIkVtb3Rlc1wiLCBcIkNvdWxkIG5vdCBkb3dubG9hZCBcIiArIGVtb3RlTWV0YS52YXJpYWJsZSwgZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVNZXRhLmJhY2t1cCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbW90ZU1ldGEudXJsID0gZW1vdGVNZXRhLmJhY2t1cDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vdGVNZXRhLmJhY2t1cCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU1ldGEuYmFja3VwUGFyc2VyKSBlbW90ZU1ldGEucGFyc2VyID0gZW1vdGVNZXRhLmJhY2t1cFBhcnNlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUodGhpcy5kb3dubG9hZEVtb3RlcyhlbW90ZU1ldGEpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdCh7fSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mKGVtb3RlTWV0YS5wYXJzZXIpID09PSBcImZ1bmN0aW9uXCIpIHBhcnNlZERhdGEgPSBlbW90ZU1ldGEucGFyc2VyKHBhcnNlZERhdGEpO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZW1vdGUgaW4gcGFyc2VkRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZS5sZW5ndGggPCA0IHx8IGJsYWNrbGlzdC5pbmNsdWRlcyhlbW90ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHBhcnNlZERhdGFbZW1vdGVdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VkRGF0YVtlbW90ZV0gPSBlbW90ZU1ldGEuZ2V0RW1vdGVVUkwocGFyc2VkRGF0YVtlbW90ZV0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShwYXJzZWREYXRhKTtcclxuICAgICAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJEb3dubG9hZGVkOiBcIiArIGVtb3RlTWV0YS52YXJpYWJsZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEJsYWNrbGlzdCgpIHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgICAgICQuZ2V0SlNPTihgaHR0cHM6Ly9yYXVlbnppLmdpdGh1Yi5pby9CZXR0ZXJEaXNjb3JkQXBwL2RhdGEvZW1vdGVmaWx0ZXIuanNvbmAsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKGJsYWNrbGlzdC5wdXNoKC4uLmRhdGEuYmxhY2tsaXN0KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQ2FjaGVWYWxpZCgpIHtcclxuICAgICAgICBjb25zdCBjYWNoZUxlbmd0aCA9IERhdGFTdG9yZS5nZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF5c1wiKSB8fCBEYXRhU3RvcmUuc2V0QkREYXRhKFwiZW1vdGVDYWNoZURheXNcIiwgNykgfHwgNztcclxuICAgICAgICBjb25zdCBjYWNoZURhdGUgPSBuZXcgRGF0ZShEYXRhU3RvcmUuZ2V0QkREYXRhKFwiZW1vdGVDYWNoZURhdGVcIikgfHwgbnVsbCk7XHJcbiAgICAgICAgY29uc3QgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGRheXNCZXR3ZWVuID0gTWF0aC5yb3VuZChNYXRoLmFicygoY3VycmVudERhdGUuZ2V0VGltZSgpIC0gY2FjaGVEYXRlLmdldFRpbWUoKSkgLyAoMjQgKiA2MCAqIDYwICogMTAwMCkpKTtcclxuICAgICAgICBpZiAoZGF5c0JldHdlZW4gPiBjYWNoZUxlbmd0aCkge1xyXG4gICAgICAgICAgICBEYXRhU3RvcmUuc2V0QkREYXRhKFwiZW1vdGVDYWNoZURhdGVcIiwgY3VycmVudERhdGUudG9KU09OKCkpO1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyRW1vdGVEYXRhKCkge1xyXG4gICAgICAgIGNvbnN0IF9mcyA9IHJlcXVpcmUoXCJmc1wiKTtcclxuICAgICAgICBjb25zdCBlbW90ZUZpbGUgPSBcImVtb3RlX2RhdGEuanNvblwiO1xyXG4gICAgICAgIGNvbnN0IGZpbGUgPSBDb25maWcuZGF0YVBhdGggKyBlbW90ZUZpbGU7XHJcbiAgICAgICAgY29uc3QgZXhpc3RzID0gX2ZzLmV4aXN0c1N5bmMoZmlsZSk7XHJcbiAgICAgICAgaWYgKGV4aXN0cykgX2ZzLnVubGlua1N5bmMoZmlsZSk7XHJcbiAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImVtb3RlQ2FjaGVEYXRlXCIsIChuZXcgRGF0ZSgpKS50b0pTT04oKSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBpbiBFbW90ZXMpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCB7W2NhdGVnb3J5XToge319KTtcclxuICAgIH1cclxufTsiXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/builtins/emotes.js\n"); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var _structs_builtin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../structs/builtin */ \"./src/structs/builtin.js\");\n/* harmony import */ var data__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! data */ \"./src/data/data.js\");\n/* harmony import */ var modules__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! modules */ \"./src/modules/modules.js\");\n/* harmony import */ var _ui_emote__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../ui/emote */ \"./src/ui/emote.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\n\n\nconst Emotes = {\n TwitchGlobal: {},\n TwitchSubscriber: {},\n BTTV: {},\n FrankerFaceZ: {},\n BTTV2: {}\n};\nconst bdEmoteSettingIDs = {\n TwitchGlobal: \"twitch\",\n TwitchSubscriber: \"twitch\",\n BTTV: \"bttv\",\n FrankerFaceZ: \"ffz\",\n BTTV2: \"bttv\"\n};\nconst blacklist = [];\nconst overrides = [\"twitch\", \"bttv\", \"ffz\"];\nconst modifiers = [\"flip\", \"spin\", \"pulse\", \"spin2\", \"spin3\", \"1spin\", \"2spin\", \"3spin\", \"tr\", \"bl\", \"br\", \"shake\", \"shake2\", \"shake3\", \"flap\"];\n/* harmony default export */ __webpack_exports__[\"default\"] = (new class EmoteModule extends _structs_builtin__WEBPACK_IMPORTED_MODULE_0__[\"default\"] {\n get name() {\n return \"Emotes\";\n }\n\n get collection() {\n return \"settings\";\n }\n\n get category() {\n return \"general\";\n }\n\n get id() {\n return \"emotes\";\n }\n\n get categories() {\n return Object.keys(bdEmoteSettingIDs).filter(k => this.isCategoryEnabled(bdEmoteSettingIDs[k]));\n }\n\n isCategoryEnabled(id) {\n return super.get(\"emotes\", \"categories\", id);\n }\n\n get(id) {\n return super.get(\"emotes\", \"general\", id);\n }\n\n get MessageContentComponent() {\n return modules__WEBPACK_IMPORTED_MODULE_2__[\"WebpackModules\"].getModule(m => m.defaultProps && m.defaultProps.hasOwnProperty(\"disableButtons\"));\n }\n\n get Emotes() {\n return Emotes;\n }\n\n get TwitchGlobal() {\n return Emotes.TwitchGlobal;\n }\n\n get TwitchSubscriber() {\n return Emotes.TwitchSubscriber;\n }\n\n get BTTV() {\n return Emotes.BTTV;\n }\n\n get FrankerFaceZ() {\n return Emotes.FrankerFaceZ;\n }\n\n get BTTV2() {\n return Emotes.BTTV2;\n }\n\n get blacklist() {\n return blacklist;\n }\n\n getCategory(category) {\n return Emotes[category];\n }\n\n initialize() {\n super.initialize(); // EmoteConfig;\n // emoteCollection.button = {title: \"Clear Emote Cache\", onClick: () => { this.clearEmoteData(); this.loadEmoteData(EmoteInfo); }};\n }\n\n async enabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].registerCollection(\"emotes\", \"Emotes\", data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteConfig\"], {\n title: \"Clear Emote Cache\",\n onClick: () => {\n this.clearEmoteData();\n this.loadEmoteData(data__WEBPACK_IMPORTED_MODULE_1__[\"EmoteInfo\"]);\n }\n }); // Disable emote module for now because it's annoying and slow\n // await this.getBlacklist();\n // await this.loadEmoteData(EmoteInfo);\n // while (!this.MessageContentComponent) await new Promise(resolve => setTimeout(resolve, 100));\n // this.patchMessageContent();\n }\n\n disabled() {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Settings\"].removeCollection(\"emotes\");\n this.emptyEmotes();\n if (!this.cancelEmoteRender) return;\n this.cancelEmoteRender();\n delete this.cancelEmoteRender;\n }\n\n emptyEmotes() {\n for (const cat in Emotes) Object.assign(Emotes, {\n [cat]: {}\n });\n }\n\n patchMessageContent() {\n if (this.cancelEmoteRender) return;\n this.cancelEmoteRender = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].monkeyPatch(this.MessageContentComponent.prototype, \"render\", {\n after: ({\n 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 let isValid = modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].testJSON(data);\n if (isValid) Object.assign(Emotes, JSON.parse(data));\n\n for (const e in emoteInfo) {\n isValid = Object.keys(Emotes[emoteInfo[e].variable]).length > 0;\n }\n\n if (isValid) {\n ui__WEBPACK_IMPORTED_MODULE_4__[\"Toasts\"].show(\"Emotes successfully loaded.\", {\n type: \"success\"\n });\n 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 modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"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 };\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", `Downloading: ${emoteMeta.variable} (${emoteMeta.url})`);\n return new Promise((resolve, reject) => {\n request(options, (error, response, body) => {\n if (error) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not download \" + emoteMeta.variable, error);\n\n if (emoteMeta.backup) {\n emoteMeta.url = emoteMeta.backup;\n emoteMeta.backup = null;\n if (emoteMeta.backupParser) emoteMeta.parser = emoteMeta.backupParser;\n return resolve(this.downloadEmotes(emoteMeta));\n }\n\n return reject({});\n }\n\n let parsedData = {};\n\n try {\n parsedData = JSON.parse(body);\n } catch (err) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].err(\"Emotes\", \"Could not download \" + emoteMeta.variable, err);\n\n if (emoteMeta.backup) {\n emoteMeta.url = emoteMeta.backup;\n emoteMeta.backup = null;\n if (emoteMeta.backupParser) emoteMeta.parser = emoteMeta.backupParser;\n return resolve(this.downloadEmotes(emoteMeta));\n }\n\n return reject({});\n }\n\n if (typeof emoteMeta.parser === \"function\") parsedData = emoteMeta.parser(parsedData);\n\n for (const emote in parsedData) {\n if (emote.length < 4 || blacklist.includes(emote)) {\n delete parsedData[emote];\n continue;\n }\n\n parsedData[emote] = emoteMeta.getEmoteURL(parsedData[emote]);\n }\n\n resolve(parsedData);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"Utilities\"].log(\"Emotes\", \"Downloaded: \" + emoteMeta.variable);\n });\n });\n }\n\n getBlacklist() {\n return new Promise(resolve => {\n $.getJSON(`https://rauenzi.github.io/BetterDiscordApp/data/emotefilter.json`, function (data) {\n resolve(blacklist.push(...data.blacklist));\n });\n });\n }\n\n isCacheValid() {\n const cacheLength = modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDays\") || modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDays\", 7) || 7;\n const cacheDate = new Date(modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].getBDData(\"emoteCacheDate\") || null);\n const currentDate = new Date();\n const daysBetween = Math.round(Math.abs((currentDate.getTime() - cacheDate.getTime()) / (24 * 60 * 60 * 1000)));\n\n if (daysBetween > cacheLength) {\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", currentDate.toJSON());\n return false;\n }\n\n return true;\n }\n\n clearEmoteData() {\n const _fs = __webpack_require__(/*! fs */ \"fs\");\n\n const emoteFile = \"emote_data.json\";\n const file = data__WEBPACK_IMPORTED_MODULE_1__[\"Config\"].dataPath + emoteFile;\n\n const exists = _fs.existsSync(file);\n\n if (exists) _fs.unlinkSync(file);\n modules__WEBPACK_IMPORTED_MODULE_2__[\"DataStore\"].setBDData(\"emoteCacheDate\", new Date().toJSON());\n\n for (const category in Emotes) Object.assign(Emotes, {\n [category]: {}\n });\n }\n\n}());//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL2J1aWx0aW5zL2Vtb3Rlcy5qcz82YTA0Il0sIm5hbWVzIjpbIkVtb3RlcyIsIlR3aXRjaEdsb2JhbCIsIlR3aXRjaFN1YnNjcmliZXIiLCJCVFRWIiwiRnJhbmtlckZhY2VaIiwiQlRUVjIiLCJiZEVtb3RlU2V0dGluZ0lEcyIsImJsYWNrbGlzdCIsIm92ZXJyaWRlcyIsIm1vZGlmaWVycyIsIkVtb3RlTW9kdWxlIiwiQnVpbHRpbiIsIm5hbWUiLCJjb2xsZWN0aW9uIiwiY2F0ZWdvcnkiLCJpZCIsImNhdGVnb3JpZXMiLCJPYmplY3QiLCJrZXlzIiwiZmlsdGVyIiwiayIsImlzQ2F0ZWdvcnlFbmFibGVkIiwiZ2V0IiwiTWVzc2FnZUNvbnRlbnRDb21wb25lbnQiLCJXZWJwYWNrTW9kdWxlcyIsImdldE1vZHVsZSIsIm0iLCJkZWZhdWx0UHJvcHMiLCJoYXNPd25Qcm9wZXJ0eSIsImdldENhdGVnb3J5IiwiaW5pdGlhbGl6ZSIsImVuYWJsZWQiLCJTZXR0aW5ncyIsInJlZ2lzdGVyQ29sbGVjdGlvbiIsIkVtb3RlQ29uZmlnIiwidGl0bGUiLCJvbkNsaWNrIiwiY2xlYXJFbW90ZURhdGEiLCJsb2FkRW1vdGVEYXRhIiwiRW1vdGVJbmZvIiwiZGlzYWJsZWQiLCJyZW1vdmVDb2xsZWN0aW9uIiwiZW1wdHlFbW90ZXMiLCJjYW5jZWxFbW90ZVJlbmRlciIsImNhdCIsImFzc2lnbiIsInBhdGNoTWVzc2FnZUNvbnRlbnQiLCJVdGlsaXRpZXMiLCJtb25rZXlQYXRjaCIsInByb3RvdHlwZSIsImFmdGVyIiwicmV0VmFsIiwicHJvcHMiLCJzaWxlbnQiLCJyZXR1cm5WYWx1ZSIsImxlbmd0aCIsIm1hcmt1cCIsImNoaWxkcmVuIiwibm9kZXMiLCJuIiwibm9kZSIsIndvcmRzIiwic3BsaXQiLCJjIiwiY2xlbiIsInciLCJ3bGVuIiwiZW1vdGUiLCJlbW90ZVNwbGl0IiwiZW1vdGVOYW1lIiwiZW1vdGVNb2RpZmllciIsImVtb3RlT3ZlcnJpZGUiLCJzbGljZSIsImluY2x1ZGVzIiwiY3VycmVudCIsInJlc3VsdHMiLCJtYXRjaCIsIlJlZ0V4cCIsImVzY2FwZSIsInByZSIsInN1YnN0cmluZyIsImluZGV4IiwicG9zdCIsImVtb3RlQ29tcG9uZW50IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJCREVtb3RlIiwidXJsIiwibW9kaWZpZXIiLCJzcGxpY2UiLCJvbmx5RW1vdGVzIiwiZXZlcnkiLCJyIiwicmVwbGFjZSIsInR5cGUiLCJlbW9qaU5hbWUiLCJqdW1ib2FibGUiLCJlbW90ZUluZm8iLCJlbW90ZXNMb2FkZWQiLCJfZnMiLCJyZXF1aXJlIiwiZW1vdGVGaWxlIiwiZmlsZSIsIkNvbmZpZyIsImRhdGFQYXRoIiwiZXhpc3RzIiwiZXhpc3RzU3luYyIsImlzQ2FjaGVWYWxpZCIsIlRvYXN0cyIsInNob3ciLCJsb2ciLCJkYXRhIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWFkRmlsZSIsImVyciIsImNvbnRlbnQiLCJpc1ZhbGlkIiwidGVzdEpTT04iLCJKU09OIiwicGFyc2UiLCJlIiwidmFyaWFibGUiLCJFdmVudHMiLCJkaXNwYXRjaCIsInVubGlua1N5bmMiLCJzZXRUaW1lb3V0IiwiZG93bmxvYWRFbW90ZXMiLCJ3cml0ZUZpbGVTeW5jIiwic3RyaW5naWZ5IiwiZW1vdGVNZXRhIiwicmVxdWVzdCIsIm9wdGlvbnMiLCJ0aW1lb3V0IiwicmVqZWN0IiwiZXJyb3IiLCJyZXNwb25zZSIsImJvZHkiLCJiYWNrdXAiLCJiYWNrdXBQYXJzZXIiLCJwYXJzZXIiLCJwYXJzZWREYXRhIiwiZ2V0RW1vdGVVUkwiLCJnZXRCbGFja2xpc3QiLCIkIiwiZ2V0SlNPTiIsInB1c2giLCJjYWNoZUxlbmd0aCIsIkRhdGFTdG9yZSIsImdldEJERGF0YSIsInNldEJERGF0YSIsImNhY2hlRGF0ZSIsIkRhdGUiLCJjdXJyZW50RGF0ZSIsImRheXNCZXR3ZWVuIiwiTWF0aCIsInJvdW5kIiwiYWJzIiwi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QUQsQ0FBYU8sTUFBYixFQUF0Qzs7QUFDQSxTQUFLLE1BQU1sSixRQUFYLElBQXVCZCxNQUF2QixFQUErQmlCLE1BQU0sQ0FBQzRCLE1BQVAsQ0FBYzdDLE1BQWQsRUFBc0I7QUFBQyxPQUFDYyxRQUFELEdBQVk7QUFBYixLQUF0QjtBQUNsQzs7QUFuUWdELENBQXRDLEVBQWYiLCJmaWxlIjoiLi9zcmMvYnVpbHRpbnMvZW1vdGVzLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJ1aWx0aW4gZnJvbSBcIi4uL3N0cnVjdHMvYnVpbHRpblwiO1xyXG5cclxuaW1wb3J0IHtDb25maWcsIEVtb3RlSW5mbywgRW1vdGVDb25maWd9IGZyb20gXCJkYXRhXCI7XHJcbmltcG9ydCB7VXRpbGl0aWVzLCBXZWJwYWNrTW9kdWxlcywgRGF0YVN0b3JlLCBEaXNjb3JkTW9kdWxlcywgRXZlbnRzLCBTZXR0aW5nc30gZnJvbSBcIm1vZHVsZXNcIjtcclxuaW1wb3J0IEJERW1vdGUgZnJvbSBcIi4uL3VpL2Vtb3RlXCI7XHJcbmltcG9ydCB7VG9hc3RzfSBmcm9tIFwidWlcIjtcclxuXHJcbmNvbnN0IEVtb3RlcyA9IHtcclxuICAgIFR3aXRjaEdsb2JhbDoge30sXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiB7fSxcclxuICAgIEJUVFY6IHt9LFxyXG4gICAgRnJhbmtlckZhY2VaOiB7fSxcclxuICAgIEJUVFYyOiB7fVxyXG59O1xyXG5cclxuY29uc3QgYmRFbW90ZVNldHRpbmdJRHMgPSB7XHJcbiAgICBUd2l0Y2hHbG9iYWw6IFwidHdpdGNoXCIsXHJcbiAgICBUd2l0Y2hTdWJzY3JpYmVyOiBcInR3aXRjaFwiLFxyXG4gICAgQlRUVjogXCJidHR2XCIsXHJcbiAgICBGcmFua2VyRmFjZVo6IFwiZmZ6XCIsXHJcbiAgICBCVFRWMjogXCJidHR2XCJcclxufTtcclxuXHJcbmNvbnN0IGJsYWNrbGlzdCA9IFtdO1xyXG5jb25zdCBvdmVycmlkZXMgPSBbXCJ0d2l0Y2hcIiwgXCJidHR2XCIsIFwiZmZ6XCJdO1xyXG5jb25zdCBtb2RpZmllcnMgPSBbXCJmbGlwXCIsIFwic3BpblwiLCBcInB1bHNlXCIsIFwic3BpbjJcIiwgXCJzcGluM1wiLCBcIjFzcGluXCIsIFwiMnNwaW5cIiwgXCIzc3BpblwiLCBcInRyXCIsIFwiYmxcIiwgXCJiclwiLCBcInNoYWtlXCIsIFwic2hha2UyXCIsIFwic2hha2UzXCIsIFwiZmxhcFwiXTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IG5ldyBjbGFzcyBFbW90ZU1vZHVsZSBleHRlbmRzIEJ1aWx0aW4ge1xyXG4gICAgZ2V0IG5hbWUoKSB7cmV0dXJuIFwiRW1vdGVzXCI7fVxyXG4gICAgZ2V0IGNvbGxlY3Rpb24oKSB7cmV0dXJuIFwic2V0dGluZ3NcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcnkoKSB7cmV0dXJuIFwiZ2VuZXJhbFwiO31cclxuICAgIGdldCBpZCgpIHtyZXR1cm4gXCJlbW90ZXNcIjt9XHJcbiAgICBnZXQgY2F0ZWdvcmllcygpIHsgcmV0dXJuIE9iamVjdC5rZXlzKGJkRW1vdGVTZXR0aW5nSURzKS5maWx0ZXIoayA9PiB0aGlzLmlzQ2F0ZWdvcnlFbmFibGVkKGJkRW1vdGVTZXR0aW5nSURzW2tdKSk7IH1cclxuXHJcbiAgICBpc0NhdGVnb3J5RW5hYmxlZChpZCkge1xyXG4gICAgICAgIHJldHVybiBzdXBlci5nZXQoXCJlbW90ZXNcIiwgXCJjYXRlZ29yaWVzXCIsIGlkKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXQoaWQpIHtcclxuICAgICAgICByZXR1cm4gc3VwZXIuZ2V0KFwiZW1vdGVzXCIsIFwiZ2VuZXJhbFwiLCBpZCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0IE1lc3NhZ2VDb250ZW50Q29tcG9uZW50KCkge3JldHVybiBXZWJwYWNrTW9kdWxlcy5nZXRNb2R1bGUobSA9PiBtLmRlZmF1bHRQcm9wcyAmJiBtLmRlZmF1bHRQcm9wcy5oYXNPd25Qcm9wZXJ0eShcImRpc2FibGVCdXR0b25zXCIpKTt9XHJcblxyXG4gICAgZ2V0IEVtb3RlcygpIHtyZXR1cm4gRW1vdGVzO31cclxuICAgIGdldCBUd2l0Y2hHbG9iYWwoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hHbG9iYWw7fVxyXG4gICAgZ2V0IFR3aXRjaFN1YnNjcmliZXIoKSB7cmV0dXJuIEVtb3Rlcy5Ud2l0Y2hTdWJzY3JpYmVyO31cclxuICAgIGdldCBCVFRWKCkge3JldHVybiBFbW90ZXMuQlRUVjt9XHJcbiAgICBnZXQgRnJhbmtlckZhY2VaKCkge3JldHVybiBFbW90ZXMuRnJhbmtlckZhY2VaO31cclxuICAgIGdldCBCVFRWMigpIHtyZXR1cm4gRW1vdGVzLkJUVFYyO31cclxuICAgIGdldCBibGFja2xpc3QoKSB7cmV0dXJuIGJsYWNrbGlzdDt9XHJcblxyXG4gICAgZ2V0Q2F0ZWdvcnkoY2F0ZWdvcnkpIHtcclxuICAgICAgICByZXR1cm4gRW1vdGVzW2NhdGVnb3J5XTtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcclxuICAgICAgICAvLyBFbW90ZUNvbmZpZztcclxuICAgICAgICAvLyBlbW90ZUNvbGxlY3Rpb24uYnV0dG9uID0ge3RpdGxlOiBcIkNsZWFyIEVtb3RlIENhY2hlXCIsIG9uQ2xpY2s6ICgpID0+IHsgdGhpcy5jbGVhckVtb3RlRGF0YSgpOyB0aGlzLmxvYWRFbW90ZURhdGEoRW1vdGVJbmZvKTsgfX07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5hYmxlZCgpIHtcclxuICAgICAgICBTZXR0aW5ncy5yZWdpc3RlckNvbGxlY3Rpb24oXCJlbW90ZXNcIiwgXCJFbW90ZXNcIiwgRW1vdGVDb25maWcsIHt0aXRsZTogXCJDbGVhciBFbW90ZSBDYWNoZVwiLCBvbkNsaWNrOiAoKSA9PiB7IHRoaXMuY2xlYXJFbW90ZURhdGEoKTsgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7IH19KTtcclxuICAgICAgICAvLyBEaXNhYmxlIGVtb3RlIG1vZHVsZSBmb3Igbm93IGJlY2F1c2UgaXQncyBhbm5veWluZyBhbmQgc2xvd1xyXG4gICAgICAgIC8vIGF3YWl0IHRoaXMuZ2V0QmxhY2tsaXN0KCk7XHJcbiAgICAgICAgLy8gYXdhaXQgdGhpcy5sb2FkRW1vdGVEYXRhKEVtb3RlSW5mbyk7XHJcblxyXG4gICAgICAgIC8vIHdoaWxlICghdGhpcy5NZXNzYWdlQ29udGVudENvbXBvbmVudCkgYXdhaXQgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIDEwMCkpO1xyXG4gICAgICAgIC8vIHRoaXMucGF0Y2hNZXNzYWdlQ29udGVudCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc2FibGVkKCkge1xyXG4gICAgICAgIFNldHRpbmdzLnJlbW92ZUNvbGxlY3Rpb24oXCJlbW90ZXNcIik7XHJcbiAgICAgICAgdGhpcy5lbXB0eUVtb3RlcygpO1xyXG4gICAgICAgIGlmICghdGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIoKTtcclxuICAgICAgICBkZWxldGUgdGhpcy5jYW5jZWxFbW90ZVJlbmRlcjtcclxuICAgIH1cclxuXHJcbiAgICBlbXB0eUVtb3RlcygpIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNhdCBpbiBFbW90ZXMpIE9iamVjdC5hc3NpZ24oRW1vdGVzLCB7W2NhdF06IHt9fSk7XHJcbiAgICB9XHJcblxyXG4gICAgcGF0Y2hNZXNzYWdlQ29udGVudCgpIHtcclxuICAgICAgICBpZiAodGhpcy5jYW5jZWxFbW90ZVJlbmRlcikgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuY2FuY2VsRW1vdGVSZW5kZXIgPSBVdGlsaXRpZXMubW9ua2V5UGF0Y2godGhpcy5NZXNzYWdlQ29udGVudENvbXBvbmVudC5wcm90b3R5cGUsIFwicmVuZGVyXCIsIHthZnRlcjogKHtyZXRWYWx9KSA9PiB7XHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5tb25rZXlQYXRjaChyZXRWYWwucHJvcHMsIFwiY2hpbGRyZW5cIiwge3NpbGVudDogdHJ1ZSwgYWZ0ZXI6ICh7cmV0dXJuVmFsdWV9KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5jYXRlZ29yaWVzLmxlbmd0aCA9PSAwKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtYXJrdXAgPSByZXR1cm5WYWx1ZS5wcm9wcy5jaGlsZHJlblsxXTtcclxuICAgICAgICAgICAgICAgIGlmICghbWFya3VwLnByb3BzLmNoaWxkcmVuKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICBjb25zdCBub2RlcyA9IG1hcmt1cC5wcm9wcy5jaGlsZHJlblsxXTtcclxuICAgICAgICAgICAgICAgIGlmICghbm9kZXMgfHwgIW5vZGVzLmxlbmd0aCkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBub2Rlcy5sZW5ndGg7IG4rKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tuXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mKG5vZGUpICE9PSBcInN0cmluZ1wiKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3b3JkcyA9IG5vZGUuc3BsaXQoLyhbXlxcc10rKShbXFxzXXwkKS9nKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBjID0gMCwgY2xlbiA9IHRoaXMuY2F0ZWdvcmllcy5sZW5ndGg7IGMgPCBjbGVuOyBjKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgdyA9IDAsIHdsZW4gPSB3b3Jkcy5sZW5ndGg7IHcgPCB3bGVuOyB3KyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlID0gd29yZHNbd107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBlbW90ZVNwbGl0ID0gZW1vdGUuc3BsaXQoXCI6XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW1vdGVOYW1lID0gZW1vdGVTcGxpdFswXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbW90ZU1vZGlmaWVyID0gZW1vdGVTcGxpdFsxXSA/IGVtb3RlU3BsaXRbMV0gOiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVtb3RlT3ZlcnJpZGUgPSBlbW90ZU1vZGlmaWVyLnNsaWNlKDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbW90ZU5hbWUubGVuZ3RoIDwgNCB8fCBibGFja2xpc3QuaW5jbHVkZXMoZW1vdGVOYW1lKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZGlmaWVycy5pbmNsdWRlcyhlbW90ZU1vZGlmaWVyKSB8fCAhU2V0dGluZ3MuZ2V0KHRoaXMuY2F0ZWdvcnksIFwiZ2VuZXJhbFwiLCBcIm1vZGlmaWVyc1wiKSkgZW1vdGVNb2RpZmllciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW92ZXJyaWRlcy5pbmNsdWRlcyhlbW90ZU92ZXJyaWRlKSkgZW1vdGVPdmVycmlkZSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGVtb3RlTW9kaWZpZXIgPSBlbW90ZU92ZXJyaWRlO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyZW50ID0gdGhpcy5jYXRlZ29yaWVzW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlT3ZlcnJpZGUgPT09IFwidHdpdGNoXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRW1vdGVzLlR3aXRjaEdsb2JhbFtlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJUd2l0Y2hHbG9iYWxcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChFbW90ZXMuVHdpdGNoU3Vic2NyaWJlcltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJUd2l0Y2hTdWJzY3JpYmVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbW90ZU92ZXJyaWRlID09PSBcImJ0dHZcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChFbW90ZXMuQlRUVltlbW90ZU5hbWVdKSBjdXJyZW50ID0gXCJCVFRWXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoRW1vdGVzLkJUVFYyW2Vtb3RlTmFtZV0pIGN1cnJlbnQgPSBcIkJUVFYyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChlbW90ZU92ZXJyaWRlID09PSBcImZmelwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEVtb3Rlcy5GcmFua2VyRmFjZVpbZW1vdGVOYW1lXSkgY3VycmVudCA9IFwiRnJhbmtlckZhY2VaXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFFbW90ZXNbY3VycmVudF1bZW1vdGVOYW1lXSB8fCAhU2V0dGluZ3MuZ2V0KHRoaXMuY2F0ZWdvcnksIFwiY2F0ZWdvcmllc1wiLCBiZEVtb3RlU2V0dGluZ0lEc1tjdXJyZW50XSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0cyA9IG5vZGVzW25dLm1hdGNoKG5ldyBSZWdFeHAoYChbXFxcXHNdfF4pJHtVdGlsaXRpZXMuZXNjYXBlKGVtb3RlTW9kaWZpZXIgPyBlbW90ZU5hbWUgKyBcIjpcIiArIGVtb3RlTW9kaWZpZXIgOiBlbW90ZU5hbWUpfShbXFxcXHNdfCQpYCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZSA9IG5vZGVzW25dLnN1YnN0cmluZygwLCByZXN1bHRzLmluZGV4ICsgcmVzdWx0c1sxXS5sZW5ndGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zdCA9IG5vZGVzW25dLnN1YnN0cmluZyhyZXN1bHRzLmluZGV4ICsgcmVzdWx0c1swXS5sZW5ndGggLSByZXN1bHRzWzJdLmxlbmd0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rlc1tuXSA9IHByZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtb3RlQ29tcG9uZW50ID0gRGlzY29yZE1vZHVsZXMuUmVhY3QuY3JlYXRlRWxlbWVudChCREVtb3RlLCB7bmFtZTogZW1vdGVOYW1lLCB1cmw6IEVtb3Rlc1tjdXJyZW50XVtlbW90ZU5hbWVdLCBtb2RpZmllcjogZW1vdGVNb2RpZmllcn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZXMuc3BsaWNlKG4gKyAxLCAwLCBwb3N0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGVzLnNwbGljZShuICsgMSwgMCwgZW1vdGVDb21wb25lbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3Qgb25seUVtb3RlcyA9IG5vZGVzLmV2ZXJ5KHIgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YocikgPT0gXCJzdHJpbmdcIiAmJiByLnJlcGxhY2UoL1xccyovLCBcIlwiKSA9PSBcIlwiKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyLnR5cGUgJiYgci50eXBlLm5hbWUgPT0gXCJCREVtb3RlXCIpIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHIucHJvcHMgJiYgci5wcm9wcy5jaGlsZHJlbiAmJiByLnByb3BzLmNoaWxkcmVuLnByb3BzICYmIHIucHJvcHMuY2hpbGRyZW4ucHJvcHMuZW1vamlOYW1lKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGlmICghb25seUVtb3RlcykgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgbm9kZSBvZiBub2Rlcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yobm9kZSkgIT0gXCJvYmplY3RcIikgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUudHlwZS5uYW1lID09IFwiQkRFbW90ZVwiKSBub2RlLnByb3BzLmp1bWJvYWJsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobm9kZS5wcm9wcyAmJiBub2RlLnByb3BzLmNoaWxkcmVuICYmIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMgJiYgbm9kZS5wcm9wcy5jaGlsZHJlbi5wcm9wcy5lbW9qaU5hbWUpIG5vZGUucHJvcHMuY2hpbGRyZW4ucHJvcHMuanVtYm9hYmxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH19KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2FkRW1vdGVEYXRhKGVtb3RlSW5mbykge1xyXG4gICAgICAgIHRoaXMuZW1vdGVzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgX2ZzID0gcmVxdWlyZShcImZzXCIpO1xyXG4gICAgICAgIGNvbnN0IGVtb3RlRmlsZSA9IFwiZW1vdGVfZGF0YS5qc29uXCI7XHJcbiAgICAgICAgY29uc3QgZmlsZSA9IENvbmZpZy5kYXRhUGF0aCArIGVtb3RlRmlsZTtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSBfZnMuZXhpc3RzU3luYyhmaWxlKTtcclxuXHJcbiAgICAgICAgaWYgKGV4aXN0cyAmJiB0aGlzLmlzQ2FjaGVWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgIFRvYXN0cy5zaG93KFwiTG9hZGluZyBlbW90ZXMgZnJvbSBjYWNoZS5cIiwge3R5cGU6IFwiaW5mb1wifSk7XHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJMb2FkaW5nIGVtb3RlcyBmcm9tIGxvY2FsIGNhY2hlLlwiKTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgICAgIF9mcy5yZWFkRmlsZShmaWxlLCBcInV0ZjhcIiwgKGVyciwgY29udGVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJFbW90ZXMgbG9hZGVkIGZyb20gY2FjaGUuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpIGNvbnRlbnQgPSB7fTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGNvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgbGV0IGlzVmFsaWQgPSBVdGlsaXRpZXMudGVzdEpTT04oZGF0YSk7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSBPYmplY3QuYXNzaWduKEVtb3RlcywgSlNPTi5wYXJzZShkYXRhKSk7XHJcblxyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGUgaW4gZW1vdGVJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBpc1ZhbGlkID0gT2JqZWN0LmtleXMoRW1vdGVzW2Vtb3RlSW5mb1tlXS52YXJpYWJsZV0pLmxlbmd0aCA+IDA7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICBUb2FzdHMuc2hvdyhcIkVtb3RlcyBzdWNjZXNzZnVsbHkgbG9hZGVkLlwiLCB7dHlwZTogXCJzdWNjZXNzXCJ9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZW1vdGVzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIEV2ZW50cy5kaXNwYXRjaChcImVtb3Rlcy1sb2FkZWRcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIFV0aWxpdGllcy5sb2coXCJFbW90ZXNcIiwgXCJDYWNoZSB3YXMgY29ycnVwdCwgZG93bmxvYWRpbmcuLi5cIik7XHJcbiAgICAgICAgICAgIF9mcy51bmxpbmtTeW5jKGZpbGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFTZXR0aW5ncy5nZXQodGhpcy5jYXRlZ29yeSwgXCJnZW5lcmFsXCIsIFwiZG93bmxvYWRcIikpIHJldHVybjtcclxuICAgICAgICBUb2FzdHMuc2hvdyhcIkRvd25sb2FkaW5nIGVtb3RlcyBpbiB0aGUgYmFja2dyb3VuZCBkbyBub3QgcmVsb2FkLlwiLCB7dHlwZTogXCJpbmZvXCJ9KTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBlIGluIGVtb3RlSW5mbykge1xyXG4gICAgICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZShyID0+IHNldFRpbWVvdXQociwgMTAwMCkpO1xyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5kb3dubG9hZEVtb3RlcyhlbW90ZUluZm9bZV0pO1xyXG4gICAgICAgICAgICBFbW90ZXNbZW1vdGVJbmZvW2VdLnZhcmlhYmxlXSA9IGRhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBUb2FzdHMuc2hvdyhcIkFsbCBlbW90ZXMgc3VjY2Vzc2Z1bGx5IGRvd25sb2FkZWQuXCIsIHt0eXBlOiBcInN1Y2Nlc3NcIn0pO1xyXG5cclxuICAgICAgICB0cnkgeyBfZnMud3JpdGVGaWxlU3luYyhmaWxlLCBKU09OLnN0cmluZ2lmeShFbW90ZXMpLCBcInV0ZjhcIik7IH1cclxuICAgICAgICBjYXRjaCAoZXJyKSB7IFV0aWxpdGllcy5lcnIoXCJFbW90ZXNcIiwgXCJDb3VsZCBub3Qgc2F2ZSBlbW90ZSBkYXRhLlwiLCBlcnIpOyB9XHJcblxyXG4gICAgICAgIHRoaXMuZW1vdGVzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICBFdmVudHMuZGlzcGF0Y2goXCJlbW90ZXMtbG9hZGVkXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGRvd25sb2FkRW1vdGVzKGVtb3RlTWV0YSkge1xyXG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1aXJlKFwicmVxdWVzdFwiKTtcclxuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xyXG4gICAgICAgICAgICB1cmw6IGVtb3RlTWV0YS51cmwsXHJcbiAgICAgICAgICAgIHRpbWVvdXQ6IGVtb3RlTWV0YS50aW1lb3V0ID8gZW1vdGVNZXRhLnRpbWVvdXQgOiA1MDAwXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgVXRpbGl0aWVzLmxvZyhcIkVtb3Rlc1wiLCBgRG93bmxvYWRpbmc6ICR7ZW1vdGVNZXRhLnZhcmlhYmxlfSAoJHtlbW90ZU1ldGEudXJsfSlgKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgcmVxdWVzdChvcHRpb25zLCAoZXJyb3IsIHJlc3BvbnNlLCBib2R5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBVdGlsaXRpZXMuZXJyKFwiRW1vdGVzXCIsIFwiQ291bGQgbm90IGRvd25sb2FkIFwiICsgZW1vdGVNZXRhLnZhcmlhYmxlLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTWV0YS5iYWNrdXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vdGVNZXRhLnVybCA9IGVtb3RlTWV0YS5iYWNrdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb3RlTWV0YS5iYWNrdXAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVNZXRhLmJhY2t1cFBhcnNlcikgZW1vdGVNZXRhLnBhcnNlciA9IGVtb3RlTWV0YS5iYWNrdXBQYXJzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuZG93bmxvYWRFbW90ZXMoZW1vdGVNZXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGxldCBwYXJzZWREYXRhID0ge307XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGEgPSBKU09OLnBhcnNlKGJvZHkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIFV0aWxpdGllcy5lcnIoXCJFbW90ZXNcIiwgXCJDb3VsZCBub3QgZG93bmxvYWQgXCIgKyBlbW90ZU1ldGEudmFyaWFibGUsIGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVtb3RlTWV0YS5iYWNrdXApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZW1vdGVNZXRhLnVybCA9IGVtb3RlTWV0YS5iYWNrdXA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVtb3RlTWV0YS5iYWNrdXAgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGVNZXRhLmJhY2t1cFBhcnNlcikgZW1vdGVNZXRhLnBhcnNlciA9IGVtb3RlTWV0YS5iYWNrdXBQYXJzZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKHRoaXMuZG93bmxvYWRFbW90ZXMoZW1vdGVNZXRhKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3Qoe30pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihlbW90ZU1ldGEucGFyc2VyKSA9PT0gXCJmdW5jdGlvblwiKSBwYXJzZWREYXRhID0gZW1vdGVNZXRhLnBhcnNlcihwYXJzZWREYXRhKTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGVtb3RlIGluIHBhcnNlZERhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZW1vdGUubGVuZ3RoIDwgNCB8fCBibGFja2xpc3QuaW5jbHVkZXMoZW1vdGUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJzZWREYXRhW2Vtb3RlXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlZERhdGFbZW1vdGVdID0gZW1vdGVNZXRhLmdldEVtb3RlVVJMKHBhcnNlZERhdGFbZW1vdGVdKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUocGFyc2VkRGF0YSk7XHJcbiAgICAgICAgICAgICAgICBVdGlsaXRpZXMubG9nKFwiRW1vdGVzXCIsIFwiRG93bmxvYWRlZDogXCIgKyBlbW90ZU1ldGEudmFyaWFibGUpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRCbGFja2xpc3QoKSB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xyXG4gICAgICAgICAgICAkLmdldEpTT04oYGh0dHBzOi8vcmF1ZW56aS5naXRodWIuaW8vQmV0dGVyRGlzY29yZEFwcC9kYXRhL2Vtb3RlZmlsdGVyLmpzb25gLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShibGFja2xpc3QucHVzaCguLi5kYXRhLmJsYWNrbGlzdCkpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBpc0NhY2hlVmFsaWQoKSB7XHJcbiAgICAgICAgY29uc3QgY2FjaGVMZW5ndGggPSBEYXRhU3RvcmUuZ2V0QkREYXRhKFwiZW1vdGVDYWNoZURheXNcIikgfHwgRGF0YVN0b3JlLnNldEJERGF0YShcImVtb3RlQ2FjaGVEYXlzXCIsIDcpIHx8IDc7XHJcbiAgICAgICAgY29uc3QgY2FjaGVEYXRlID0gbmV3IERhdGUoRGF0YVN0b3JlLmdldEJERGF0YShcImVtb3RlQ2FjaGVEYXRlXCIpIHx8IG51bGwpO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICBjb25zdCBkYXlzQmV0d2VlbiA9IE1hdGgucm91bmQoTWF0aC5hYnMoKGN1cnJlbnREYXRlLmdldFRpbWUoKSAtIGNhY2hlRGF0ZS5nZXRUaW1lKCkpIC8gKDI0ICogNjAgKiA2MCAqIDEwMDApKSk7XHJcbiAgICAgICAgaWYgKGRheXNCZXR3ZWVuID4gY2FjaGVMZW5ndGgpIHtcclxuICAgICAgICAgICAgRGF0YVN0b3JlLnNldEJERGF0YShcImVtb3RlQ2FjaGVEYXRlXCIsIGN1cnJlbnREYXRlLnRvSlNPTigpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckVtb3RlRGF0YSgpIHtcclxuICAgICAgICBjb25zdCBfZnMgPSByZXF1aXJlKFwiZnNcIik7XHJcbiAgICAgICAgY29uc3QgZW1vdGVGaWxlID0gXCJlbW90ZV9kYXRhLmpzb25cIjtcclxuICAgICAgICBjb25zdCBmaWxlID0gQ29uZmlnLmRhdGFQYXRoICsgZW1vdGVGaWxlO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IF9mcy5leGlzdHNTeW5jKGZpbGUpO1xyXG4gICAgICAgIGlmIChleGlzdHMpIF9mcy51bmxpbmtTeW5jKGZpbGUpO1xyXG4gICAgICAgIERhdGFTdG9yZS5zZXRCRERhdGEoXCJlbW90ZUNhY2hlRGF0ZVwiLCAobmV3IERhdGUoKSkudG9KU09OKCkpO1xyXG4gICAgICAgIGZvciAoY29uc3QgY2F0ZWdvcnkgaW4gRW1vdGVzKSBPYmplY3QuYXNzaWduKEVtb3Rlcywge1tjYXRlZ29yeV06IHt9fSk7XHJcbiAgICB9XHJcbn07Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/builtins/emotes.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 _pluginmanager__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony import */ var builtins__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! builtins */ \"./src/builtins/builtins.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_7__ = __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\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_7__[\"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_7__[\"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_5__[\"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 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_6__) builtins__WEBPACK_IMPORTED_MODULE_6__[module].initialize();\n\n _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Plugins\");\n const pluginErrors = _pluginmanager__WEBPACK_IMPORTED_MODULE_3__[\"default\"].loadAllPlugins();\n _utilities__WEBPACK_IMPORTED_MODULE_1__[\"default\"].log(\"Startup\", \"Loading Themes\");\n const themeErrors = _thememanager__WEBPACK_IMPORTED_MODULE_4__[\"default\"].loadAllThemes();\n $(\"#customcss\").detach().appendTo(document.head); // 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_7__[\"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 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 $(document).ready(function () {\n setTimeout(checkForGuilds, 100);\n });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkNvcmUiLCJwcm90b3R5cGUiLCJzZXRDb25maWciLCJjb25maWciLCJPYmplY3QiLCJhc3NpZ24iLCJDb25maWciLCJpbml0IiwidmVyc2lvbiIsIm1pblN1cHBvcnRlZFZlcnNpb24iLCJNb2RhbHMiLCJhbGVydCIsImJiZFZlcnNpb24iLCJsYXRlc3RMb2NhbFZlcnNpb24iLCJ1cGRhdGVyIiwiTGF0ZXN0VmVyc2lvbiIsImxhdGVzdFZlcnNpb24iLCJVdGlsaXRpZXMiLCJsb2ciLCJTZXR0aW5ncyIsImluaXRpYWxpemUiLCJjaGVja0Zvckd1aWxkcyIsIkJEVjIiLCJtb2R1bGUiLCJCdWlsdGlucyIsInBsdWdpbkVycm9ycyIsIlBsdWdpbk1hbmFnZXIiLCJsb2FkQWxsUGx1Z2lucyIsInRoZW1lRXJyb3JzIiwiVGhlbWVNYW5hZ2VyIiwibG9hZEFsbFRoZW1lcyIsIiQiLCJkZXRhY2giLCJhcHBlbmRUbyIsImRvY3VtZW50IiwiaGVhZCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJyZW1vdmUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIndyYXBwZXIiLCJndWlsZENsYXNzZXMiLCJzcGxpdCIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJkZWZlckxvYWRlZCIsInNldFRpbWVvdXQiLCJyZWFkeSIsIm1haW5PYnNlcnZlciIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJtdXRhdGlvbnMiLCJpIiwibWxlbiIsIm11dGF0aW9uIiwiYWRkZWROb2RlcyIsIkVsZW1lbnQiLCJub2RlIiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJzZXRBdHRyaWJ1dGUiLCJvYnNlcnZlIiwiY2hpbGRMaXN0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UUFBUSxDQUFDQyxVQUFULENBQW9CVixNQUFyQixJQUErQixFQUFFUyxRQUFRLENBQUNDLFVBQVQsQ0FBb0IsQ0FBcEIsYUFBa0NDLE9BQXBDLENBQW5DLEVBQWlGO0FBRWpGLFlBQU1DLElBQUksR0FBR0gsUUFBUSxDQUFDQyxVQUFULENBQW9CLENBQXBCLENBQWI7O0FBRUEsVUFBSUUsSUFBSSxDQUFDQyxTQUFMLENBQWVDLFFBQWYsQ0FBd0IsY0FBeEIsQ0FBSixFQUE2QztBQUN6QyxZQUFJRixJQUFJLENBQUM1QixzQkFBTCxDQUE0Qiw2QkFBNUIsRUFBMkRnQixNQUEvRCxFQUF1RVksSUFBSSxDQUFDRyxZQUFMLENBQWtCLFVBQWxCLEVBQThCLGlCQUE5QixFQUQ5QixDQUd6QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0g7QUFDSjtBQUNKLEdBcEJvQixDQUFyQjtBQXNCQVgsY0FBWSxDQUFDWSxPQUFiLENBQXFCbEMsUUFBckIsRUFBK0I7QUFDM0JtQyxhQUFTLEVBQUUsSUFEZ0I7QUFFM0JDLFdBQU8sRUFBRTtBQUZrQixHQUEvQjtBQUlILENBM0JEOztBQThCZSxtRUFBSXRFLElBQUosRUFBZiIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL2NvcmUuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQkRWMiBmcm9tIFwiLi9iZHYyXCI7XHJcbmltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCB7Q29uZmlnfSBmcm9tIFwiZGF0YVwiO1xyXG4vLyBpbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vZW1vdGVzXCI7XHJcbi8vIGltcG9ydCBRdWlja0Vtb3RlTWVudSBmcm9tIFwiLi4vYnVpbHRpbnMvZW1vdGVtZW51XCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgKiBhcyBCdWlsdGlucyBmcm9tIFwiYnVpbHRpbnNcIjtcclxuaW1wb3J0IHtNb2RhbHN9IGZyb20gXCJ1aVwiO1xyXG5cclxuZnVuY3Rpb24gQ29yZSgpIHtcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmIChDb25maWcudmVyc2lvbiA8IENvbmZpZy5taW5TdXBwb3J0ZWRWZXJzaW9uKSB7XHJcbiAgICAgICAgTW9kYWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIENvbmZpZy5iYmRWZXJzaW9uICsgXCIpLjxicj48YnI+IFBsZWFzZSBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkdpdEh1YjwvYT5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhdGVzdExvY2FsVmVyc2lvbiA9IENvbmZpZy51cGRhdGVyID8gQ29uZmlnLnVwZGF0ZXIuTGF0ZXN0VmVyc2lvbiA6IENvbmZpZy5sYXRlc3RWZXJzaW9uO1xyXG4gICAgaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAgICAgTW9kYWxzLmFsZXJ0KFwiVXBkYXRlIEF2YWlsYWJsZVwiLCBgXHJcbiAgICAgICAgICAgIEFuIHVwZGF0ZSBmb3IgQmFuZGFnZWRCRCBpcyBhdmFpbGFibGUgKCR7bGF0ZXN0TG9jYWxWZXJzaW9ufSkhIFBsZWFzZSBSZWluc3RhbGwhPGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+RG93bmxvYWQgSW5zdGFsbGVyPC9hPlxyXG4gICAgICAgIGApO1xyXG4gICAgfVxyXG5cclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgU2V0dGluZ3MuaW5pdGlhbGl6ZSgpO1xyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgRW1vdGVNb2R1bGVcIik7XHJcbiAgICAvLyB3aW5kb3cuZW1vdGVQcm9taXNlID0gRW1vdGVNb2R1bGUuaW5pdCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgLy8gICAgIEVtb3RlTW9kdWxlLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIC8vICAgICBVdGlsaXRpZXMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBRdWlja0Vtb3RlTWVudVwiKTtcclxuICAgIC8vICAgICBFdmVudHMuZGlzcGF0Y2goXCJlbW90ZXMtbG9hZGVkXCIpO1xyXG4gICAgLy8gICAgIC8vIFF1aWNrRW1vdGVNZW51LmluaXQoKTtcclxuICAgIC8vIH0pO1xyXG5cclxuICAgIC8vIHRoaXMuaW5qZWN0RXh0ZXJuYWxzKCk7XHJcblxyXG4gICAgYXdhaXQgdGhpcy5jaGVja0Zvckd1aWxkcygpO1xyXG4gICAgQkRWMi5pbml0aWFsaXplKCk7XHJcbiAgICBVdGlsaXRpZXMubG9nKFwiU3RhcnR1cFwiLCBcIlVwZGF0aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgZm9yIChjb25zdCBtb2R1bGUgaW4gQnVpbHRpbnMpIEJ1aWx0aW5zW21vZHVsZV0uaW5pdGlhbGl6ZSgpO1xyXG5cclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBQbHVnaW5zXCIpO1xyXG4gICAgY29uc3QgcGx1Z2luRXJyb3JzID0gUGx1Z2luTWFuYWdlci5sb2FkQWxsUGx1Z2lucygpO1xyXG5cclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiTG9hZGluZyBUaGVtZXNcIik7XHJcbiAgICBjb25zdCB0aGVtZUVycm9ycyA9IFRoZW1lTWFuYWdlci5sb2FkQWxsVGhlbWVzKCk7XHJcblxyXG4gICAgJChcIiNjdXN0b21jc3NcIikuZGV0YWNoKCkuYXBwZW5kVG8oZG9jdW1lbnQuaGVhZCk7XHJcblxyXG4gICAgLy8gUHVibGljU2VydmVycy5pbml0aWFsaXplKCk7XHJcbiAgICAvLyBFbW90ZU1vZHVsZS5hdXRvQ2FwaXRhbGl6ZSgpO1xyXG5cclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiUmVtb3ZpbmcgTG9hZGluZyBJY29uXCIpO1xyXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImJkLWxvYWRlcnYyXCIpWzBdLnJlbW92ZSgpO1xyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgTWFpbiBPYnNlcnZlclwiKTtcclxuICAgIHRoaXMuaW5pdE9ic2VydmVyKCk7XHJcblxyXG4gICAgLy8gU2hvdyBsb2FkaW5nIGVycm9yc1xyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJDb2xsZWN0aW5nIFN0YXJ0dXAgRXJyb3JzXCIpO1xyXG4gICAgTW9kYWxzLnNob3dDb250ZW50RXJyb3JzKHtwbHVnaW5zOiBwbHVnaW5FcnJvcnMsIHRoZW1lczogdGhlbWVFcnJvcnN9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmNoZWNrRm9yR3VpbGRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICAgICAgY29uc3Qgd3JhcHBlciA9IEJEVjIuZ3VpbGRDbGFzc2VzLndyYXBwZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBndWlsZCA9IEJEVjIuZ3VpbGRDbGFzc2VzLmxpc3RJdGVtLnNwbGl0KFwiIFwiKVswXTtcclxuICAgICAgICAgICAgY29uc3QgYmxvYiA9IEJEVjIuZ3VpbGRDbGFzc2VzLmJsb2JDb250YWluZXIuc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBpZiAoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChgLiR7d3JhcHBlcn0gLiR7Z3VpbGR9IC4ke2Jsb2J9YCkubGVuZ3RoID4gMCkgcmV0dXJuIHJlc29sdmUoQ29uZmlnLmRlZmVyTG9hZGVkID0gdHJ1ZSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfTtcclxuICAgICAgICAkKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoY2hlY2tGb3JHdWlsZHMsIDEwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXRPYnNlcnZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIGNvbnN0IG1haW5PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIG1sZW4gPSBtdXRhdGlvbnMubGVuZ3RoOyBpIDwgbWxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uID0gbXV0YXRpb25zW2ldO1xyXG5cclxuICAgICAgICAgICAgLy8gaWYgdGhlcmUgd2FzIG5vdGhpbmcgYWRkZWQsIHNraXBcclxuICAgICAgICAgICAgaWYgKCFtdXRhdGlvbi5hZGRlZE5vZGVzLmxlbmd0aCB8fCAhKG11dGF0aW9uLmFkZGVkTm9kZXNbMF0gaW5zdGFuY2VvZiBFbGVtZW50KSkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbXV0YXRpb24uYWRkZWROb2Rlc1swXTtcclxuXHJcbiAgICAgICAgICAgIGlmIChub2RlLmNsYXNzTGlzdC5jb250YWlucyhcImxheWVyLTNRclVlR1wiKSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImd1aWxkLXNldHRpbmdzLWJhc2Utc2VjdGlvblwiKS5sZW5ndGgpIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJzZXJ2ZXItc2V0dGluZ3NcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gaWYgKG5vZGUuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInNvY2lhbExpbmtzLTNqcU5GeVwiKS5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIC8vICAgICBub2RlLnNldEF0dHJpYnV0ZShcImxheWVyLWlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIC8vICAgICBub2RlLnNldEF0dHJpYnV0ZShcImlkXCIsIFwidXNlci1zZXR0aW5nc1wiKTtcclxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwiYmQtc2V0dGluZ3Mtc2lkZWJhclwiKSkgU2V0dGluZ3MucmVuZGVyU2lkZWJhcigpO1xyXG4gICAgICAgICAgICAgICAgLy8gfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgbWFpbk9ic2VydmVyLm9ic2VydmUoZG9jdW1lbnQsIHtcclxuICAgICAgICBjaGlsZExpc3Q6IHRydWUsXHJcbiAgICAgICAgc3VidHJlZTogdHJ1ZVxyXG4gICAgfSk7XHJcbn07XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgbmV3IENvcmUoKTsiXSwic291cmNlUm9vdCI6IiJ9\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 _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(); // $(\"#customcss\").detach().appendTo(document.head);\n // 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 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 $(document).ready(function () {\n setTimeout(checkForGuilds, 100);\n });\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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvY29yZS5qcz9iNmRlIl0sIm5hbWVzIjpbIkNvcmUiLCJwcm90b3R5cGUiLCJzZXRDb25maWciLCJjb25maWciLCJPYmplY3QiLCJhc3NpZ24iLCJDb25maWciLCJpbml0IiwidmVyc2lvbiIsIm1pblN1cHBvcnRlZFZlcnNpb24iLCJNb2RhbHMiLCJhbGVydCIsImJiZFZlcnNpb24iLCJsYXRlc3RMb2NhbFZlcnNpb24iLCJ1cGRhdGVyIiwiTGF0ZXN0VmVyc2lvbiIsImxhdGVzdFZlcnNpb24iLCJVdGlsaXRpZXMiLCJsb2ciLCJTZXR0aW5ncyIsImluaXRpYWxpemUiLCJET01NYW5hZ2VyIiwiY2hlY2tGb3JHdWlsZHMiLCJCRFYyIiwibW9kdWxlIiwiQnVpbHRpbnMiLCJwbHVnaW5FcnJvcnMiLCJQbHVnaW5NYW5hZ2VyIiwibG9hZEFsbFBsdWdpbnMiLCJ0aGVtZUVycm9ycyIsIlRoZW1lTWFuYWdlciIsImxvYWRBbGxUaGVtZXMiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJyZW1vdmUiLCJpbml0T2JzZXJ2ZXIiLCJzaG93Q29udGVudEVycm9ycyIsInBsdWdpbnMiLCJ0aGVtZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsIndyYXBwZXIiLCJndWlsZENsYXNzZXMiLCJzcGxpdCIsImd1aWxkIiwibGlzdEl0ZW0iLCJibG9iIiwiYmxvYkNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJsZW5ndGgiLCJkZWZlckxvYWRlZCIsInNldFRpbWVvdXQiLCIkIiwicmVhZHkiLCJtYWluT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwiaSIsIm1sZW4iLCJtdXRhdGlvbiIsImFkZGVkTm9kZXMiLCJFbGVtZW50Iiwibm9kZSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwic2V0QXR0cmlidXRlIiwib2JzZXJ2ZSIsImNoaWxkTGlzdCIsInN1YnRyZWUiXSwi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QUFULENBQW9CLENBQXBCLGFBQWtDQyxPQUFwQyxDQUFuQyxFQUFpRjtBQUVqRixZQUFNQyxJQUFJLEdBQUdILFFBQVEsQ0FBQ0MsVUFBVCxDQUFvQixDQUFwQixDQUFiOztBQUVBLFVBQUlFLElBQUksQ0FBQ0MsU0FBTCxDQUFlQyxRQUFmLENBQXdCLGNBQXhCLENBQUosRUFBNkM7QUFDekMsWUFBSUYsSUFBSSxDQUFDN0Isc0JBQUwsQ0FBNEIsNkJBQTVCLEVBQTJEZ0IsTUFBL0QsRUFBdUVhLElBQUksQ0FBQ0csWUFBTCxDQUFrQixVQUFsQixFQUE4QixpQkFBOUIsRUFEOUIsQ0FHekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNIO0FBQ0o7QUFDSixHQXBCb0IsQ0FBckI7QUFzQkFYLGNBQVksQ0FBQ1ksT0FBYixDQUFxQmxDLFFBQXJCLEVBQStCO0FBQzNCbUMsYUFBUyxFQUFFLElBRGdCO0FBRTNCQyxXQUFPLEVBQUU7QUFGa0IsR0FBL0I7QUFJSCxDQTNCRDs7QUE4QmUsbUVBQUlwRSxJQUFKLEVBQWYiLCJmaWxlIjoiLi9zcmMvbW9kdWxlcy9jb3JlLmpzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IEJEVjIgZnJvbSBcIi4vYmR2MlwiO1xyXG5pbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQge0NvbmZpZ30gZnJvbSBcImRhdGFcIjtcclxuLy8gaW1wb3J0IEVtb3RlTW9kdWxlIGZyb20gXCIuL2Vtb3Rlc1wiO1xyXG4vLyBpbXBvcnQgUXVpY2tFbW90ZU1lbnUgZnJvbSBcIi4uL2J1aWx0aW5zL2Vtb3RlbWVudVwiO1xyXG5pbXBvcnQgRE9NTWFuYWdlciBmcm9tIFwiLi9kb21tYW5hZ2VyXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuaW1wb3J0IFRoZW1lTWFuYWdlciBmcm9tIFwiLi90aGVtZW1hbmFnZXJcIjtcclxuaW1wb3J0IFNldHRpbmdzIGZyb20gXCIuL3NldHRpbmdzbWFuYWdlclwiO1xyXG5pbXBvcnQgKiBhcyBCdWlsdGlucyBmcm9tIFwiYnVpbHRpbnNcIjtcclxuaW1wb3J0IHtNb2RhbHN9IGZyb20gXCJ1aVwiO1xyXG5cclxuZnVuY3Rpb24gQ29yZSgpIHtcclxufVxyXG5cclxuQ29yZS5wcm90b3R5cGUuc2V0Q29uZmlnID0gZnVuY3Rpb24oY29uZmlnKSB7XHJcbiAgICBPYmplY3QuYXNzaWduKENvbmZpZywgY29uZmlnKTtcclxufTtcclxuXHJcbkNvcmUucHJvdG90eXBlLmluaXQgPSBhc3luYyBmdW5jdGlvbigpIHtcclxuICAgIGlmIChDb25maWcudmVyc2lvbiA8IENvbmZpZy5taW5TdXBwb3J0ZWRWZXJzaW9uKSB7XHJcbiAgICAgICAgTW9kYWxzLmFsZXJ0KFwiTm90IFN1cHBvcnRlZFwiLCBcIkJldHRlckRpc2NvcmQgdlwiICsgQ29uZmlnLnZlcnNpb24gKyBcIiAoeW91ciB2ZXJzaW9uKVwiICsgXCIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgbGF0ZXN0IGpzIChcIiArIENvbmZpZy5iYmRWZXJzaW9uICsgXCIpLjxicj48YnI+IFBsZWFzZSBkb3dubG9hZCB0aGUgbGF0ZXN0IHZlcnNpb24gZnJvbSA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vcmF1ZW56aS9CZXR0ZXJEaXNjb3JkQXBwL3JlbGVhc2VzL2xhdGVzdCcgdGFyZ2V0PSdfYmxhbmsnPkdpdEh1YjwvYT5cIik7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGxhdGVzdExvY2FsVmVyc2lvbiA9IENvbmZpZy51cGRhdGVyID8gQ29uZmlnLnVwZGF0ZXIuTGF0ZXN0VmVyc2lvbiA6IENvbmZpZy5sYXRlc3RWZXJzaW9uO1xyXG4gICAgaWYgKGxhdGVzdExvY2FsVmVyc2lvbiA+IENvbmZpZy52ZXJzaW9uKSB7XHJcbiAgICAgICAgTW9kYWxzLmFsZXJ0KFwiVXBkYXRlIEF2YWlsYWJsZVwiLCBgXHJcbiAgICAgICAgICAgIEFuIHVwZGF0ZSBmb3IgQmFuZGFnZWRCRCBpcyBhdmFpbGFibGUgKCR7bGF0ZXN0TG9jYWxWZXJzaW9ufSkhIFBsZWFzZSBSZWluc3RhbGwhPGJyIC8+PGJyIC8+XHJcbiAgICAgICAgICAgIDxhIGhyZWY9J2h0dHBzOi8vZ2l0aHViLmNvbS9yYXVlbnppL0JldHRlckRpc2NvcmRBcHAvcmVsZWFzZXMvbGF0ZXN0JyB0YXJnZXQ9J19ibGFuayc+RG93bmxvYWQgSW5zdGFsbGVyPC9hPlxyXG4gICAgICAgIGApO1xyXG4gICAgfVxyXG5cclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiSW5pdGlhbGl6aW5nIFNldHRpbmdzXCIpO1xyXG4gICAgU2V0dGluZ3MuaW5pdGlhbGl6ZSgpO1xyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJJbml0aWFsaXppbmcgRW1vdGVNb2R1bGVcIik7XHJcbiAgICAvLyB3aW5kb3cuZW1vdGVQcm9taXNlID0gRW1vdGVNb2R1bGUuaW5pdCgpLnRoZW4oKCkgPT4ge1xyXG4gICAgLy8gICAgIEVtb3RlTW9kdWxlLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgIC8vICAgICBVdGlsaXRpZXMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBRdWlja0Vtb3RlTWVudVwiKTtcclxuICAgIC8vICAgICBFdmVudHMuZGlzcGF0Y2goXCJlbW90ZXMtbG9hZGVkXCIpO1xyXG4gICAgLy8gICAgIC8vIFF1aWNrRW1vdGVNZW51LmluaXQoKTtcclxuICAgIC8vIH0pO1xyXG5cclxuICAgIC8vIHRoaXMuaW5qZWN0RXh0ZXJuYWxzKCk7XHJcblxyXG4gICAgRE9NTWFuYWdlci5pbml0aWFsaXplKCk7XHJcbiAgICBhd2FpdCB0aGlzLmNoZWNrRm9yR3VpbGRzKCk7XHJcbiAgICBCRFYyLmluaXRpYWxpemUoKTtcclxuICAgIFV0aWxpdGllcy5sb2coXCJTdGFydHVwXCIsIFwiVXBkYXRpbmcgU2V0dGluZ3NcIik7XHJcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBpbiBCdWlsdGlucykgQnVpbHRpbnNbbW9kdWxlXS5pbml0aWFsaXplKCk7XHJcblxyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFBsdWdpbnNcIik7XHJcbiAgICBjb25zdCBwbHVnaW5FcnJvcnMgPSBQbHVnaW5NYW5hZ2VyLmxvYWRBbGxQbHVnaW5zKCk7XHJcblxyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJMb2FkaW5nIFRoZW1lc1wiKTtcclxuICAgIGNvbnN0IHRoZW1lRXJyb3JzID0gVGhlbWVNYW5hZ2VyLmxvYWRBbGxUaGVtZXMoKTtcclxuXHJcbiAgICAvLyAkKFwiI2N1c3RvbWNzc1wiKS5kZXRhY2goKS5hcHBlbmRUbyhkb2N1bWVudC5oZWFkKTtcclxuXHJcbiAgICAvLyBQdWJsaWNTZXJ2ZXJzLmluaXRpYWxpemUoKTtcclxuICAgIC8vIEVtb3RlTW9kdWxlLmF1dG9DYXBpdGFsaXplKCk7XHJcblxyXG4gICAgVXRpbGl0aWVzLmxvZyhcIlN0YXJ0dXBcIiwgXCJSZW1vdmluZyBMb2FkaW5nIEljb25cIik7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiYmQtbG9hZGVydjJcIilbMF0ucmVtb3ZlKCk7XHJcbiAgICBVdGlsaXRpZXMubG9nKFwiU3RhcnR1cFwiLCBcIkluaXRpYWxpemluZyBNYWluIE9ic2VydmVyXCIpO1xyXG4gICAgdGhpcy5pbml0T2JzZXJ2ZXIoKTtcclxuXHJcbiAgICAvLyBTaG93IGxvYWRpbmcgZXJyb3JzXHJcbiAgICBVdGlsaXRpZXMubG9nKFwiU3RhcnR1cFwiLCBcIkNvbGxlY3RpbmcgU3RhcnR1cCBFcnJvcnNcIik7XHJcbiAgICBNb2RhbHMuc2hvd0NvbnRlbnRFcnJvcnMoe3BsdWdpbnM6IHBsdWdpbkVycm9ycywgdGhlbWVzOiB0aGVtZUVycm9yc30pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuY2hlY2tGb3JHdWlsZHMgPSBmdW5jdGlvbigpIHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcclxuICAgICAgICBjb25zdCBjaGVja0Zvckd1aWxkcyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICBjb25zdCB3cmFwcGVyID0gQkRWMi5ndWlsZENsYXNzZXMud3JhcHBlci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGNvbnN0IGd1aWxkID0gQkRWMi5ndWlsZENsYXNzZXMubGlzdEl0ZW0uc3BsaXQoXCIgXCIpWzBdO1xyXG4gICAgICAgICAgICBjb25zdCBibG9iID0gQkRWMi5ndWlsZENsYXNzZXMuYmxvYkNvbnRhaW5lci5zcGxpdChcIiBcIilbMF07XHJcbiAgICAgICAgICAgIGlmIChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGAuJHt3cmFwcGVyfSAuJHtndWlsZH0gLiR7YmxvYn1gKS5sZW5ndGggPiAwKSByZXR1cm4gcmVzb2x2ZShDb25maWcuZGVmZXJMb2FkZWQgPSB0cnVlKTtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgc2V0VGltZW91dChjaGVja0Zvckd1aWxkcywgMTAwKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59O1xyXG5cclxuQ29yZS5wcm90b3R5cGUuaW5pdE9ic2VydmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgY29uc3QgbWFpbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKG11dGF0aW9ucykgPT4ge1xyXG5cclxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbWxlbiA9IG11dGF0aW9ucy5sZW5ndGg7IGkgPCBtbGVuOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb24gPSBtdXRhdGlvbnNbaV07XHJcblxyXG4gICAgICAgICAgICAvLyBpZiB0aGVyZSB3YXMgbm90aGluZyBhZGRlZCwgc2tpcFxyXG4gICAgICAgICAgICBpZiAoIW11dGF0aW9uLmFkZGVkTm9kZXMubGVuZ3RoIHx8ICEobXV0YXRpb24uYWRkZWROb2Rlc1swXSBpbnN0YW5jZW9mIEVsZW1lbnQpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBtdXRhdGlvbi5hZGRlZE5vZGVzWzBdO1xyXG5cclxuICAgICAgICAgICAgaWYgKG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKFwibGF5ZXItM1FyVWVHXCIpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwiZ3VpbGQtc2V0dGluZ3MtYmFzZS1zZWN0aW9uXCIpLmxlbmd0aCkgbm9kZS5zZXRBdHRyaWJ1dGUoXCJsYXllci1pZFwiLCBcInNlcnZlci1zZXR0aW5nc1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICAvLyBpZiAobm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwic29jaWFsTGlua3MtM2pxTkZ5XCIpLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIG5vZGUuc2V0QXR0cmlidXRlKFwibGF5ZXItaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIG5vZGUuc2V0QXR0cmlidXRlKFwiaWRcIiwgXCJ1c2VyLXNldHRpbmdzXCIpO1xyXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICghZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJiZC1zZXR0aW5ncy1zaWRlYmFyXCIpKSBTZXR0aW5ncy5yZW5kZXJTaWRlYmFyKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBtYWluT2JzZXJ2ZXIub2JzZXJ2ZShkb2N1bWVudCwge1xyXG4gICAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcclxuICAgICAgICBzdWJ0cmVlOiB0cnVlXHJcbiAgICB9KTtcclxufTtcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBuZXcgQ29yZSgpOyJdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///./src/modules/core.js\n"); /***/ }), @@ -387,6 +387,18 @@ eval("__webpack_require__.r(__webpack_exports__);\n/* harmony import */ var data /***/ }), +/***/ "./src/modules/dommanager.js": +/*!***********************************!*\ + !*** ./src/modules/dommanager.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 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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UUFBSXVCLE1BQUosRUFBWUEsTUFBTSxDQUFDQyxNQUFQO0FBQ2Y7O0FBRUQsU0FBT00sV0FBUCxDQUFtQmxCLEVBQW5CLEVBQXVCYyxHQUF2QixFQUE0QjtBQUN4QixVQUFNQyxLQUFLLEdBQUcsS0FBSzlCLFVBQUwsQ0FBZ0JlLEVBQWhCLEVBQW9CLEtBQUtaLFFBQXpCLEtBQXNDLEtBQUtHLGFBQUwsQ0FBbUIsT0FBbkIsRUFBNEI7QUFBQ1M7QUFBRCxLQUE1QixDQUFwRDtBQUNBZSxTQUFLLENBQUNDLFdBQU4sR0FBb0JGLEdBQXBCO0FBQ0EsU0FBSzFCLFFBQUwsQ0FBY3FCLE1BQWQsQ0FBcUJNLEtBQXJCO0FBQ0g7O0FBRUQsU0FBT0ksZUFBUCxDQUF1QkwsR0FBdkIsRUFBNEI7QUFDeEIsU0FBS3pCLFdBQUwsQ0FBaUIyQixXQUFqQixHQUErQkYsR0FBL0I7QUFDSDs7QUF6RDJCIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvZG9tbWFuYWdlci5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGNsYXNzIERPTU1hbmFnZXIge1xyXG5cclxuICAgIHN0YXRpYyBnZXQgYmRIZWFkKCkgeyByZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiYmQtaGVhZFwiKTsgfVxyXG4gICAgc3RhdGljIGdldCBiZEJvZHkoKSB7IHJldHVybiB0aGlzLmdldEVsZW1lbnQoXCJiZC1ib2R5XCIpOyB9XHJcbiAgICBzdGF0aWMgZ2V0IGJkU3R5bGVzKCkgeyByZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiYmQtc3R5bGVzXCIpOyB9XHJcbiAgICBzdGF0aWMgZ2V0IGJkVGhlbWVzKCkgeyByZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiYmQtdGhlbWVzXCIpOyB9XHJcbiAgICBzdGF0aWMgZ2V0IGJkQ3VzdG9tQ1NTKCkgeyByZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiI2N1c3RvbWNzc1wiKTsgfVxyXG4gICAgc3RhdGljIGdldCBiZFRvb2x0aXBzKCkgeyByZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiYmQtdG9vbHRpcHNcIikgfHwgdGhpcy5jcmVhdGVFbGVtZW50KFwiYmQtdG9vbHRpcHNcIikuYXBwZW5kVG8odGhpcy5iZEJvZHkpOyB9XHJcbiAgICBzdGF0aWMgZ2V0IGJkTW9kYWxzKCkgeyByZXR1cm4gdGhpcy5nZXRFbGVtZW50KFwiYmQtbW9kYWxzXCIpIHx8IHRoaXMuY3JlYXRlRWxlbWVudChcImJkLW1vZGFsc1wiKS5hcHBlbmRUbyh0aGlzLmJkQm9keSk7IH1cclxuICAgIHN0YXRpYyBnZXQgYmRUb2FzdHMoKSB7IHJldHVybiB0aGlzLmdldEVsZW1lbnQoXCJiZC10b2FzdHNcIikgfHwgdGhpcy5jcmVhdGVFbGVtZW50KFwiYmQtdG9hc3RzXCIpLmFwcGVuZFRvKHRoaXMuYmRCb2R5KTsgfVxyXG5cclxuICAgIHN0YXRpYyBpbml0aWFsaXplKCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudChcImJkLWhlYWRcIiwge3RhcmdldDogZG9jdW1lbnQuaGVhZH0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudChcImJkLWJvZHlcIiwge3RhcmdldDogZG9jdW1lbnQuYm9keX0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudChcImJkLXN0eWxlc1wiLCB7dGFyZ2V0OiB0aGlzLmJkSGVhZH0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudChcImJkLXRoZW1lc1wiLCB7dGFyZ2V0OiB0aGlzLmJkSGVhZH0pO1xyXG4gICAgICAgIHRoaXMuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIHtpZDogXCJjdXN0b21jc3NcIiwgdGFyZ2V0OiB0aGlzLmJkSGVhZH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBnZXRFbGVtZW50KGUsIGJhc2VFbGVtZW50ID0gZG9jdW1lbnQpIHtcclxuICAgICAgICBpZiAoZSBpbnN0YW5jZW9mIE5vZGUpIHJldHVybiBlO1xyXG4gICAgICAgIHJldHVybiBiYXNlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KHRhZywgb3B0aW9ucyA9IHt9KSB7XHJcbiAgICAgICAgY29uc3Qge2NsYXNzTmFtZSwgaWQsIHRhcmdldH0gPSBvcHRpb25zO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XHJcbiAgICAgICAgaWYgKGNsYXNzTmFtZSkgZWxlbWVudC5jbGFzc05hbWUgPSBjbGFzc05hbWU7XHJcbiAgICAgICAgaWYgKGlkKSBlbGVtZW50LmlkID0gaWQ7XHJcbiAgICAgICAgaWYgKHRhcmdldCkgdGhpcy5nZXRFbGVtZW50KHRhcmdldCkuYXBwZW5kKGVsZW1lbnQpO1xyXG4gICAgICAgIHJldHVybiBlbGVtZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyByZW1vdmVTdHlsZShpZCkge1xyXG4gICAgICAgIGNvbnN0IGV4aXN0cyA9IHRoaXMuZ2V0RWxlbWVudChpZCwgdGhpcy5iZFN0eWxlcyk7XHJcbiAgICAgICAgaWYgKGV4aXN0cykgZXhpc3RzLnJlbW92ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHN0YXRpYyBpbmplY3RTdHlsZShpZCwgY3NzKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmdldEVsZW1lbnQoaWQsIHRoaXMuYmRTdHlsZXMpIHx8IHRoaXMuY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIHtpZH0pO1xyXG4gICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gY3NzO1xyXG4gICAgICAgIHRoaXMuYmRTdHlsZXMuYXBwZW5kKHN0eWxlKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgcmVtb3ZlVGhlbWUoaWQpIHtcclxuICAgICAgICBjb25zdCBleGlzdHMgPSB0aGlzLmdldEVsZW1lbnQoaWQsIHRoaXMuYmRUaGVtZXMpO1xyXG4gICAgICAgIGlmIChleGlzdHMpIGV4aXN0cy5yZW1vdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBzdGF0aWMgaW5qZWN0VGhlbWUoaWQsIGNzcykge1xyXG4gICAgICAgIGNvbnN0IHN0eWxlID0gdGhpcy5nZXRFbGVtZW50KGlkLCB0aGlzLmJkVGhlbWVzKSB8fCB0aGlzLmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCB7aWR9KTtcclxuICAgICAgICBzdHlsZS50ZXh0Q29udGVudCA9IGNzcztcclxuICAgICAgICB0aGlzLmJkVGhlbWVzLmFwcGVuZChzdHlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhdGljIHVwZGF0ZUN1c3RvbUNTUyhjc3MpIHtcclxuICAgICAgICB0aGlzLmJkQ3VzdG9tQ1NTLnRleHRDb250ZW50ID0gY3NzO1xyXG4gICAgfVxyXG59Il0sInNvdXJjZVJvb3QiOiIifQ==\n//# sourceURL=webpack-internal:///./src/modules/dommanager.js\n"); + +/***/ }), + /***/ "./src/modules/emitter.js": /*!********************************!*\ !*** ./src/modules/emitter.js ***! @@ -403,11 +415,11 @@ eval("__webpack_require__.r(__webpack_exports__);\nconst EventEmitter = __webpac /*!********************************!*\ !*** ./src/modules/modules.js ***! \********************************/ -/*! exports provided: React, ReactDOM, BDV2, BdApi, Core, ContentManager, DataStore, Events, PluginManager, ThemeManager, Utilities, WebpackModules, DiscordModules, Settings */ +/*! exports provided: React, ReactDOM, BDV2, BdApi, Core, ContentManager, DataStore, Events, PluginManager, DOMManager, ThemeManager, 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 reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DiscordModules\", function() { return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"]; });\n\n/* harmony import */ var _bdv2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bdv2 */ \"./src/modules/bdv2.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BDV2\", function() { return _bdv2__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _pluginapi__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BdApi\", function() { return _pluginapi__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./core */ \"./src/modules/core.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Core\", function() { return _core__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ContentManager\", function() { return _contentmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DataStore\", function() { return _datastore__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Events\", function() { return _emitter__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PluginManager\", function() { return _pluginmanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ThemeManager\", function() { return _thememanager__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Settings\", function() { return _settingsmanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\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\nconst React = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React;\nconst ReactDOM = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ReactDOM;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcz8xNGRiIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdERPTSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtDQUVBOztDQUVBOztDQUVBOztBQUNBO0FBQ0E7QUFFTyxNQUFNQSxLQUFLLEdBQUdDLDhEQUFjLENBQUNELEtBQTdCO0FBQ0EsTUFBTUUsUUFBUSxHQUFHRCw4REFBYyxDQUFDQyxRQUFoQyIsImZpbGUiOiIuL3NyYy9tb2R1bGVzL21vZHVsZXMuanMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgVXRpbGl0aWVzIGZyb20gXCIuL3V0aWxpdGllc1wiO1xyXG5pbXBvcnQgV2VicGFja01vZHVsZXMsIHtEaXNjb3JkTW9kdWxlc30gZnJvbSBcIi4vd2VicGFja21vZHVsZXNcIjtcclxuXHJcbmltcG9ydCBCRFYyIGZyb20gXCIuL2JkdjJcIjtcclxuaW1wb3J0IEJkQXBpIGZyb20gXCIuL3BsdWdpbmFwaVwiO1xyXG5pbXBvcnQgQ29yZSBmcm9tIFwiLi9jb3JlXCI7XHJcblxyXG5cclxuXHJcbmltcG9ydCBDb250ZW50TWFuYWdlciBmcm9tIFwiLi9jb250ZW50bWFuYWdlclwiO1xyXG5pbXBvcnQgRGF0YVN0b3JlIGZyb20gXCIuL2RhdGFzdG9yZVwiO1xyXG4vLyBpbXBvcnQgRGV2TW9kZSBmcm9tIFwiLi9kZXZtb2RlXCI7XHJcbmltcG9ydCBFdmVudHMgZnJvbSBcIi4vZW1pdHRlclwiO1xyXG4vLyBpbXBvcnQgRW1vdGVNb2R1bGUgZnJvbSBcIi4vZW1vdGVzXCI7XHJcbmltcG9ydCBQbHVnaW5NYW5hZ2VyIGZyb20gXCIuL3BsdWdpbm1hbmFnZXJcIjtcclxuLy8gaW1wb3J0IFB1YmxpY1NlcnZlcnMgZnJvbSBcIi4vcHVibGljc2VydmVyc1wiO1xyXG5pbXBvcnQgVGhlbWVNYW5hZ2VyIGZyb20gXCIuL3RoZW1lbWFuYWdlclwiO1xyXG5pbXBvcnQgU2V0dGluZ3MgZnJvbSBcIi4vc2V0dGluZ3NtYW5hZ2VyXCI7XHJcblxyXG5leHBvcnQgY29uc3QgUmVhY3QgPSBEaXNjb3JkTW9kdWxlcy5SZWFjdDtcclxuZXhwb3J0IGNvbnN0IFJlYWN0RE9NID0gRGlzY29yZE1vZHVsZXMuUmVhY3RET007XHJcblxyXG5leHBvcnQge0JEVjIsIEJkQXBpLCBDb3JlLCBDb250ZW50TWFuYWdlciwgRGF0YVN0b3JlLFxyXG4gICAgICAgIEV2ZW50cywgUGx1Z2luTWFuYWdlciwgLypQdWJsaWNTZXJ2ZXJzLCovIFRoZW1lTWFuYWdlcixcclxuICAgICAgICBVdGlsaXRpZXMsIFdlYnBhY2tNb2R1bGVzLCBEaXNjb3JkTW9kdWxlcywgU2V0dGluZ3N9O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\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 reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DiscordModules\", function() { return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"]; });\n\n/* harmony import */ var _bdv2__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./bdv2 */ \"./src/modules/bdv2.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BDV2\", function() { return _bdv2__WEBPACK_IMPORTED_MODULE_2__[\"default\"]; });\n\n/* harmony import */ var _pluginapi__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./pluginapi */ \"./src/modules/pluginapi.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"BdApi\", function() { return _pluginapi__WEBPACK_IMPORTED_MODULE_3__[\"default\"]; });\n\n/* harmony import */ var _core__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./core */ \"./src/modules/core.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Core\", function() { return _core__WEBPACK_IMPORTED_MODULE_4__[\"default\"]; });\n\n/* harmony import */ var _contentmanager__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./contentmanager */ \"./src/modules/contentmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ContentManager\", function() { return _contentmanager__WEBPACK_IMPORTED_MODULE_5__[\"default\"]; });\n\n/* harmony import */ var _datastore__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DataStore\", function() { return _datastore__WEBPACK_IMPORTED_MODULE_6__[\"default\"]; });\n\n/* harmony import */ var _emitter__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./emitter */ \"./src/modules/emitter.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Events\", function() { return _emitter__WEBPACK_IMPORTED_MODULE_7__[\"default\"]; });\n\n/* harmony import */ var _pluginmanager__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./pluginmanager */ \"./src/modules/pluginmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"PluginManager\", function() { return _pluginmanager__WEBPACK_IMPORTED_MODULE_8__[\"default\"]; });\n\n/* harmony import */ var _thememanager__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./thememanager */ \"./src/modules/thememanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"ThemeManager\", function() { return _thememanager__WEBPACK_IMPORTED_MODULE_9__[\"default\"]; });\n\n/* harmony import */ var _settingsmanager__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./settingsmanager */ \"./src/modules/settingsmanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"Settings\", function() { return _settingsmanager__WEBPACK_IMPORTED_MODULE_10__[\"default\"]; });\n\n/* harmony import */ var _dommanager__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./dommanager */ \"./src/modules/dommanager.js\");\n/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, \"DOMManager\", function() { return _dommanager__WEBPACK_IMPORTED_MODULE_11__[\"default\"]; });\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\nconst React = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React;\nconst ReactDOM = _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].ReactDOM;\n//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9Db3JlLy4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcz8xNGRiIl0sIm5hbWVzIjpbIlJlYWN0IiwiRGlzY29yZE1vZHVsZXMiLCJSZWFjdERPTSJdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFJQTtDQUVBOztDQUVBOztDQUVBOztBQUNBO0FBQ0E7QUFDQTtBQUVPLE1BQU1BLEtBQUssR0FBR0MsOERBQWMsQ0FBQ0QsS0FBN0I7QUFDQSxNQUFNRSxRQUFRLEdBQUdELDhEQUFjLENBQUNDLFFBQWhDIiwiZmlsZSI6Ii4vc3JjL21vZHVsZXMvbW9kdWxlcy5qcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBVdGlsaXRpZXMgZnJvbSBcIi4vdXRpbGl0aWVzXCI7XHJcbmltcG9ydCBXZWJwYWNrTW9kdWxlcywge0Rpc2NvcmRNb2R1bGVzfSBmcm9tIFwiLi93ZWJwYWNrbW9kdWxlc1wiO1xyXG5cclxuaW1wb3J0IEJEVjIgZnJvbSBcIi4vYmR2MlwiO1xyXG5pbXBvcnQgQmRBcGkgZnJvbSBcIi4vcGx1Z2luYXBpXCI7XHJcbmltcG9ydCBDb3JlIGZyb20gXCIuL2NvcmVcIjtcclxuXHJcblxyXG5cclxuaW1wb3J0IENvbnRlbnRNYW5hZ2VyIGZyb20gXCIuL2NvbnRlbnRtYW5hZ2VyXCI7XHJcbmltcG9ydCBEYXRhU3RvcmUgZnJvbSBcIi4vZGF0YXN0b3JlXCI7XHJcbi8vIGltcG9ydCBEZXZNb2RlIGZyb20gXCIuL2Rldm1vZGVcIjtcclxuaW1wb3J0IEV2ZW50cyBmcm9tIFwiLi9lbWl0dGVyXCI7XHJcbi8vIGltcG9ydCBFbW90ZU1vZHVsZSBmcm9tIFwiLi9lbW90ZXNcIjtcclxuaW1wb3J0IFBsdWdpbk1hbmFnZXIgZnJvbSBcIi4vcGx1Z2lubWFuYWdlclwiO1xyXG4vLyBpbXBvcnQgUHVibGljU2VydmVycyBmcm9tIFwiLi9wdWJsaWNzZXJ2ZXJzXCI7XHJcbmltcG9ydCBUaGVtZU1hbmFnZXIgZnJvbSBcIi4vdGhlbWVtYW5hZ2VyXCI7XHJcbmltcG9ydCBTZXR0aW5ncyBmcm9tIFwiLi9zZXR0aW5nc21hbmFnZXJcIjtcclxuaW1wb3J0IERPTU1hbmFnZXIgZnJvbSBcIi4vZG9tbWFuYWdlclwiO1xyXG5cclxuZXhwb3J0IGNvbnN0IFJlYWN0ID0gRGlzY29yZE1vZHVsZXMuUmVhY3Q7XHJcbmV4cG9ydCBjb25zdCBSZWFjdERPTSA9IERpc2NvcmRNb2R1bGVzLlJlYWN0RE9NO1xyXG5cclxuZXhwb3J0IHtCRFYyLCBCZEFwaSwgQ29yZSwgQ29udGVudE1hbmFnZXIsIERhdGFTdG9yZSxcclxuICAgICAgICBFdmVudHMsIFBsdWdpbk1hbmFnZXIsIERPTU1hbmFnZXIsIFRoZW1lTWFuYWdlcixcclxuICAgICAgICBVdGlsaXRpZXMsIFdlYnBhY2tNb2R1bGVzLCBEaXNjb3JkTW9kdWxlcywgU2V0dGluZ3N9O1xyXG4iXSwic291cmNlUm9vdCI6IiJ9\n//# sourceURL=webpack-internal:///./src/modules/modules.js\n"); /***/ }), @@ -431,7 +443,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 _datastore__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./datastore */ \"./src/modules/datastore.js\");\n/* harmony import */ var ui__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ui */ \"./src/ui/ui.js\");\n\n\n\n\nconst BdApi = {\n get React() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].React;\n },\n\n get ReactDOM() {\n return _webpackmodules__WEBPACK_IMPORTED_MODULE_1__[\"DiscordModules\"].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 $(\"head\").append($(\""); - } - $("#customcss").text(newCss).detach().appendTo(document.head); + // if ($("#customcss").length == 0) { + // $("head").append(""); + // } + // $("#customcss").text(newCss).detach().appendTo(document.head); + DOMManager.updateCustomCSS(newCss); } saveCSS(newCss) { @@ -126,7 +126,7 @@ export default new class CustomCSS extends Builtin { const editorRef = React.createRef(); const editor = React.createElement(CSSEditor, { id: "bd-floating-editor", - editorRef: editorRef, + ref: editorRef, css: currentCSS, save: this.saveCSS.bind(this), update: this.insertCSS.bind(this), @@ -135,7 +135,9 @@ export default new class CustomCSS extends Builtin { }); FloatingWindowContainer.open({ - onClose: () => {this.isDetached = false;}, + onClose: () => { + this.isDetached = false; + }, onResize: () => { if (!editorRef || !editorRef.current || !editorRef.current.resize) return; editorRef.current.resize(); @@ -146,7 +148,12 @@ export default new class CustomCSS extends Builtin { width: 410, center: true, resizable: true, - children: editor + children: editor, + confirmClose: () => { + if (!editorRef || !editorRef.current) return false; + return editorRef.current.hasUnsavedChanges; + }, + confirmationText: "You have unsaved changes to your Custom CSS. Closing this window will lose all those changes." }); this.isDetached = true; UserSettings.close(); diff --git a/src/builtins/developermode.js b/src/builtins/developermode.js index e3b72dfa..82d6b6f8 100644 --- a/src/builtins/developermode.js +++ b/src/builtins/developermode.js @@ -51,8 +51,8 @@ export default new class DeveloperMode extends Builtin { cm.remove(); $(document).off(".bdDevModeCtx"); }); - $(document).on("keyup.bdDevModeCtx", (e) => { - if (e.keyCode === 27) { + $(document).on("keyup.bdDevModeCtx", (event) => { + if (event.keyCode === 27) { cm.remove(); $(document).off(".bdDevModeCtx"); } diff --git a/src/builtins/emotemenu.js b/src/builtins/emotemenu.js index 99150bf6..502e1a49 100644 --- a/src/builtins/emotemenu.js +++ b/src/builtins/emotemenu.js @@ -70,7 +70,7 @@ export default new class EmoteMenu extends Builtin { initialize() { super.initialize(); const fe = DataStore.getBDData("bdfavemotes"); - if (fe !== "" && fe !== null) this.favoriteEmotes = JSON.parse(atob(fe)); + if (fe !== "" && fe !== null) this.favoriteEmotes = JSON.parse(window.atob(fe)); this.updateFavorites(); } @@ -115,16 +115,16 @@ export default new class EmoteMenu extends Builtin { left: e.pageX - $("#bda-qem-favourite-container").offset().left }); $(em).parent().append(menu); - menu.on("click", (e) => { - e.preventDefault(); - e.stopPropagation(); + menu.on("click", (event) => { + event.preventDefault(); + event.stopPropagation(); $(em).remove(); delete this.favoriteEmotes[$(em).attr("title")]; this.updateFavorites(); $(document).off("mousedown.emotemenu"); }); - $(document).on("mousedown.emotemenu", function(e) { - if (e.target.id == "removemenu") return; + $(document).on("mousedown.emotemenu", function(event) { + if (event.target.id == "removemenu") return; $("#removemenu").remove(); $(document).off("mousedown.emotemenu"); }); @@ -200,7 +200,7 @@ export default new class EmoteMenu extends Builtin { const emoteElement = makeEmote(emote, url, {onClick: this.insertEmote.bind(this, emote), onContextMenu: this.favContext.bind(this)}); this.faContainerInner.append(emoteElement); } - DataStore.setBDData("bdfavemotes", btoa(JSON.stringify(this.favoriteEmotes))); + DataStore.setBDData("bdfavemotes", window.btoa(JSON.stringify(this.favoriteEmotes))); } }; \ No newline at end of file diff --git a/src/builtins/emotes.js b/src/builtins/emotes.js index 8cb125b2..dd41d5b5 100644 --- a/src/builtins/emotes.js +++ b/src/builtins/emotes.js @@ -84,8 +84,8 @@ export default new class EmoteModule extends Builtin { patchMessageContent() { if (this.cancelEmoteRender) return; - this.cancelEmoteRender = Utilities.monkeyPatch(this.MessageContentComponent.prototype, "render", {after: ({returnValue}) => { - Utilities.monkeyPatch(returnValue.props, "children", {silent: true, after: ({returnValue}) => { + this.cancelEmoteRender = Utilities.monkeyPatch(this.MessageContentComponent.prototype, "render", {after: ({retVal}) => { + Utilities.monkeyPatch(retVal.props, "children", {silent: true, after: ({returnValue}) => { if (this.categories.length == 0) return; const markup = returnValue.props.children[1]; if (!markup.props.children) return; @@ -162,10 +162,10 @@ export default new class EmoteModule extends Builtin { Utilities.log("Emotes", "Loading emotes from local cache."); const data = await new Promise(resolve => { - _fs.readFile(file, "utf8", (err, data) => { + _fs.readFile(file, "utf8", (err, content) => { Utilities.log("Emotes", "Emotes loaded from cache."); - if (err) data = {}; - resolve(data); + if (err) content = {}; + resolve(content); }); }); diff --git a/src/modules/core.js b/src/modules/core.js index e09460ee..d02b9a28 100644 --- a/src/modules/core.js +++ b/src/modules/core.js @@ -3,6 +3,7 @@ import Utilities from "./utilities"; import {Config} from "data"; // import EmoteModule from "./emotes"; // import QuickEmoteMenu from "../builtins/emotemenu"; +import DOMManager from "./dommanager"; import PluginManager from "./pluginmanager"; import ThemeManager from "./thememanager"; import Settings from "./settingsmanager"; @@ -42,6 +43,7 @@ Core.prototype.init = async function() { // this.injectExternals(); + DOMManager.initialize(); await this.checkForGuilds(); BDV2.initialize(); Utilities.log("Startup", "Updating Settings"); @@ -53,7 +55,7 @@ Core.prototype.init = async function() { Utilities.log("Startup", "Loading Themes"); const themeErrors = ThemeManager.loadAllThemes(); - $("#customcss").detach().appendTo(document.head); + // $("#customcss").detach().appendTo(document.head); // PublicServers.initialize(); // EmoteModule.autoCapitalize(); diff --git a/src/modules/dommanager.js b/src/modules/dommanager.js new file mode 100644 index 00000000..968a251c --- /dev/null +++ b/src/modules/dommanager.js @@ -0,0 +1,59 @@ +export default class DOMManager { + + static get bdHead() { return this.getElement("bd-head"); } + static get bdBody() { return this.getElement("bd-body"); } + static get bdStyles() { return this.getElement("bd-styles"); } + static get bdThemes() { return this.getElement("bd-themes"); } + static get bdCustomCSS() { return this.getElement("#customcss"); } + static get bdTooltips() { return this.getElement("bd-tooltips") || this.createElement("bd-tooltips").appendTo(this.bdBody); } + static get bdModals() { return this.getElement("bd-modals") || this.createElement("bd-modals").appendTo(this.bdBody); } + static get bdToasts() { return this.getElement("bd-toasts") || this.createElement("bd-toasts").appendTo(this.bdBody); } + + static initialize() { + this.createElement("bd-head", {target: document.head}); + this.createElement("bd-body", {target: document.body}); + this.createElement("bd-styles", {target: this.bdHead}); + this.createElement("bd-themes", {target: this.bdHead}); + this.createElement("style", {id: "customcss", target: this.bdHead}); + } + + static getElement(e, baseElement = document) { + if (e instanceof Node) return e; + return baseElement.querySelector(e); + } + + static createElement(tag, options = {}) { + const {className, id, target} = options; + const element = document.createElement(tag); + if (className) element.className = className; + if (id) element.id = id; + if (target) this.getElement(target).append(element); + return element; + } + + static removeStyle(id) { + const exists = this.getElement(id, this.bdStyles); + if (exists) exists.remove(); + } + + static injectStyle(id, css) { + const style = this.getElement(id, this.bdStyles) || this.createElement("style", {id}); + style.textContent = css; + this.bdStyles.append(style); + } + + static removeTheme(id) { + const exists = this.getElement(id, this.bdThemes); + if (exists) exists.remove(); + } + + static injectTheme(id, css) { + const style = this.getElement(id, this.bdThemes) || this.createElement("style", {id}); + style.textContent = css; + this.bdThemes.append(style); + } + + static updateCustomCSS(css) { + this.bdCustomCSS.textContent = css; + } +} \ No newline at end of file diff --git a/src/modules/modules.js b/src/modules/modules.js index a59d60da..eafd5629 100644 --- a/src/modules/modules.js +++ b/src/modules/modules.js @@ -16,10 +16,11 @@ import PluginManager from "./pluginmanager"; // import PublicServers from "./publicservers"; import ThemeManager from "./thememanager"; import Settings from "./settingsmanager"; +import DOMManager from "./dommanager"; export const React = DiscordModules.React; export const ReactDOM = DiscordModules.ReactDOM; export {BDV2, BdApi, Core, ContentManager, DataStore, - Events, PluginManager, /*PublicServers,*/ ThemeManager, + Events, PluginManager, DOMManager, ThemeManager, Utilities, WebpackModules, DiscordModules, Settings}; diff --git a/src/modules/pluginapi.js b/src/modules/pluginapi.js index 4d2f8402..ffd7f630 100644 --- a/src/modules/pluginapi.js +++ b/src/modules/pluginapi.js @@ -1,6 +1,7 @@ import Utilities from "./utilities"; import WebpackModules, {DiscordModules} from "./webpackmodules"; import DataStore from "./datastore"; +import DOMManager from "./dommanager"; import {Toasts, Modals} from "ui"; const BdApi = { @@ -44,13 +45,15 @@ BdApi.setWindowPreference = function(key, value) { //id = id of element //css = custom css BdApi.injectCSS = function (id, css) { - $("head").append($("