diff --git a/.obsidian/appearance.json b/.obsidian/appearance.json index 1689abf..c1ab66c 100644 --- a/.obsidian/appearance.json +++ b/.obsidian/appearance.json @@ -1,4 +1,6 @@ { "translucency": true, - "baseFontSize": 22 + "baseFontSize": 22, + "cssTheme": "Discordian", + "theme": "obsidian" } \ No newline at end of file diff --git a/.obsidian/community-plugins.json b/.obsidian/community-plugins.json index a549471..e3d2121 100644 --- a/.obsidian/community-plugins.json +++ b/.obsidian/community-plugins.json @@ -2,5 +2,5 @@ "obsidian-git", "table-editor-obsidian", "obsidian-image-toolkit", - "obsidian-minimal-settings" + "discordian-plugin" ] \ No newline at end of file diff --git a/.obsidian/plugins/discordian-plugin/data.json b/.obsidian/plugins/discordian-plugin/data.json new file mode 100644 index 0000000..c581019 --- /dev/null +++ b/.obsidian/plugins/discordian-plugin/data.json @@ -0,0 +1,16 @@ +{ + "hideVault": true, + "hideTitleBar": false, + "hideStatusBar": true, + "originalMarkings": false, + "relationLinesPreview": true, + "prettyTasksEditor": true, + "darkEnhance": true, + "fontSizeNotes": 14, + "fontSizeFileExplorer": 14, + "writerMode": true, + "paragraphFocusMode": false, + "paragraphFocusFade": 75, + "flatAndyMode": true, + "readableLength": 45 +} \ No newline at end of file diff --git a/.obsidian/plugins/discordian-plugin/main.js b/.obsidian/plugins/discordian-plugin/main.js new file mode 100644 index 0000000..589cb12 --- /dev/null +++ b/.obsidian/plugins/discordian-plugin/main.js @@ -0,0 +1,489 @@ +'use strict'; + +var obsidian = require('obsidian'); + +/*! ***************************************************************************** +Copyright (c) Microsoft Corporation. + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. +***************************************************************************** */ +/* global Reflect, Promise */ + +var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); +}; + +function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +} + +function __awaiter(thisArg, _arguments, P, generator) { + function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +} + +function __generator(thisArg, body) { + var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; + return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; + function verb(n) { return function (v) { return step([n, v]); }; } + function step(op) { + if (f) throw new TypeError("Generator is already executing."); + while (_) try { + if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; + if (y = 0, t) op = [op[0] & 2, t.value]; + switch (op[0]) { + case 0: case 1: t = op; break; + case 4: _.label++; return { value: op[1], done: false }; + case 5: _.label++; y = op[1]; op = [0]; continue; + case 7: op = _.ops.pop(); _.trys.pop(); continue; + default: + if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } + if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } + if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } + if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } + if (t[2]) _.ops.pop(); + _.trys.pop(); continue; + } + op = body.call(thisArg, _); + } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } + if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; + } +} + +var DiscordianPlugin = /** @class */ (function (_super) { + __extends(DiscordianPlugin, _super); + function DiscordianPlugin() { + var _this = _super !== null && _super.apply(this, arguments) || this; + // refresh function for when we change settings + _this.refresh = function () { + // re-load the style + _this.updateStyle(); + }; + return _this; + } + DiscordianPlugin.prototype.onload = function () { + return __awaiter(this, void 0, void 0, function () { + var _a; + return __generator(this, function (_b) { + switch (_b.label) { + case 0: + _a = this; + return [4 /*yield*/, this.loadData()]; + case 1: + _a.settings = (_b.sent()) || { + hideVault: true, + hideTitleBar: true, + hideStatusBar: true, + originalMarkings: false, + relationLinesPreview: true, + prettyTasksEditor: true, + darkEnhance: false, + fontSizeNotes: 14, + fontSizeFileExplorer: 14, + writerMode: false, + paragraphFocusMode: false, + paragraphFocusFade: 75, + flatAndyMode: true, + readableLength: 45 + }; + this.addSettingTab(new DiscordianPluginSettingsTab(this.app, this)); + this.addStyle(); + this.addCommands(); + this.refresh(); + return [2 /*return*/]; + } + }); + }); + }; + DiscordianPlugin.prototype.onunload = function () { + this.removeStyle(); + }; + DiscordianPlugin.prototype.addCommands = function () { + var _this = this; + this.addCommand({ + id: 'toggle-discordian-writer-mode', + name: 'Toggle Writer Mode', + callback: function () { + _this.settings.writerMode = !_this.settings.writerMode; + _this.saveData(_this.settings); + _this.refresh(); + } + }); + this.addCommand({ + id: 'toggle-flat-andy-mode', + name: 'Toggle Flat Andy Mode', + callback: function () { + _this.settings.flatAndyMode = !_this.settings.flatAndyMode; + _this.saveData(_this.settings); + _this.refresh(); + } + }); + this.addCommand({ + id: 'toggle-paragraph-focus-mode', + name: 'Toggle Paragraph Focus Mode', + callback: function () { + _this.settings.paragraphFocusMode = !_this.settings.paragraphFocusMode; + _this.saveData(_this.settings); + _this.refresh(); + } + }); + this.addCommand({ + id: 'toggle-discord-original-markings', + name: 'Toggle Discord original markings', + callback: function () { + _this.settings.originalMarkings = !_this.settings.originalMarkings; + _this.saveData(_this.settings); + _this.refresh(); + } + }); + this.addCommand({ + id: 'toggle-relationship-lines-preview', + name: 'Toggle relationship lines in Preview mode', + callback: function () { + _this.settings.relationLinesPreview = !_this.settings.relationLinesPreview; + _this.saveData(_this.settings); + _this.refresh(); + } + }); + this.addCommand({ + id: 'toggle-pretty-tasks-preview', + name: 'Toggle Pretty Task Lists in Editor mode', + callback: function () { + _this.settings.prettyTasksEditor = !_this.settings.prettyTasksEditor; + _this.saveData(_this.settings); + _this.refresh(); + } + }); + this.addCommand({ + id: 'toggle-dark-enhance', + name: 'Toggle Dark note headers', + callback: function () { + _this.settings.darkEnhance = !_this.settings.darkEnhance; + _this.saveData(_this.settings); + _this.refresh(); + } + }); + }; + // add the styling elements we need + DiscordianPlugin.prototype.addStyle = function () { + // add a css block for our settings-dependent styles + var css = document.createElement('style'); + css.id = 'discordian-theme'; + document.getElementsByTagName("head")[0].appendChild(css); + // add the main class + document.body.classList.add('discordian-theme'); + document.body.classList.add('discordian-readable-length'); + document.body.classList.add('discordian-paragraph-focus-fade'); + // update the style with the settings-dependent styles + this.updateStyle(); + }; + DiscordianPlugin.prototype.removeStyle = function () { + var discordianClasses = [ + 'discordian-theme', + 'discordian-writer-mode', + 'discordian-flat-andy-mode', + 'discordian-paragraph-focus', + 'discordian-paragraph-focus-fade', + 'discordian-readable-length', + 'discordian-font-size-notes', + 'discordian-font-size-file-explorer', + 'discordian-discord-markings', + 'discordian-rel-preview', + 'discordian-pretty-tasks-editor', + 'discordian-dark-enhance', + 'discordian-hide-vault', + 'discordian-hide-titlebar', + 'discordian-hide-statusbar' + ]; + document.body.removeClasses(discordianClasses); + }; + DiscordianPlugin.prototype.initStyles = function () { + var discordianEl = document.getElementById('discordian-theme'); + if (discordianEl) { + var len = this.settings.readableLength + 'rem'; + var fade = 100 - this.settings.paragraphFocusFade; + var fontSizeNotes = this.settings.fontSizeNotes / 16 + 'rem'; + var fontSizeFileExplorer = this.settings.fontSizeFileExplorer / 16 + 'rem'; + var letterSpacingNotes = (this.settings.fontSizeNotes < 16 ? -0.2 : -0.4) + 'px'; + discordianEl.innerText = "\n body.discordian-theme {\n --readable-line-length:" + len + ";\n --paragraph-focus-fade: 0." + fade + ";\n --font-size-notes: " + fontSizeNotes + ";\n --font-size-file-explorer: " + fontSizeFileExplorer + ";\n --letter-spacing-notes: " + letterSpacingNotes + ";\n }\n "; + } + else { + throw "Could not find Discordian Theme"; + } + }; + // update the styles (at the start, or as the result of a settings change) + DiscordianPlugin.prototype.updateStyle = function () { + document.body.classList.toggle('discordian-writer-mode', this.settings.writerMode); + document.body.classList.toggle('discordian-flat-andy-mode', this.settings.flatAndyMode); + document.body.classList.toggle('discordian-paragraph-focus', this.settings.paragraphFocusMode); + document.body.classList.toggle('discordian-hide-vault', this.settings.hideVault); + document.body.classList.toggle('discordian-hide-titlebar', this.settings.hideTitleBar); + document.body.classList.toggle('discordian-hide-statusbar', this.settings.hideStatusBar); + document.body.classList.toggle('discordian-original-markings', this.settings.originalMarkings); + document.body.classList.toggle('discordian-rel-preview', this.settings.relationLinesPreview); + document.body.classList.toggle('discordian-pretty-tasks-editor', this.settings.prettyTasksEditor); + document.body.classList.toggle('discordian-dark-enhance', this.settings.darkEnhance); + this.initStyles(); + }; + return DiscordianPlugin; +}(obsidian.Plugin)); +var DiscordianPluginSettingsTab = /** @class */ (function (_super) { + __extends(DiscordianPluginSettingsTab, _super); + function DiscordianPluginSettingsTab(app, plugin) { + var _this = _super.call(this, app, plugin) || this; + _this.plugin = plugin; + return _this; + } + DiscordianPluginSettingsTab.prototype.display = function () { + var containerEl = this.containerEl; + var settings = this.plugin.settings; + containerEl.empty(); + this.addPluginDescription(containerEl); + this.addPluginSettingsHeader(containerEl, 'Theme Settings'); + this.addWriterModeSettings(containerEl, settings); + this.addFlatAndyModeSettings(containerEl, settings); + this.addParagraphFocusModeSettings(containerEl, settings); + this.addReadableLengthSettings(containerEl, settings); + this.addOriginalMarkingsSettings(containerEl, settings); + this.addRelationLinesPreviewSettings(containerEl, settings); + this.addPrettyTasksEditorSettings(containerEl, settings); + this.addDarkEnhanceSettings(containerEl, settings); + this.addPluginSettingsSeparator(containerEl); + this.addPluginSettingsHeader(containerEl, 'Fonts'); + this.addNotesFontSizeSettings(containerEl, settings); + this.addFileExplorerFontSizeSettings(containerEl, settings); + this.addPluginSettingsSeparator(containerEl); + this.addPluginSettingsHeader(containerEl, 'If not using Hider plugin'); + this.addHideVaultSettings(containerEl, settings); + this.addHideTitleBarSettings(containerEl, settings); + this.addHideStatusBarSettings(containerEl, settings); + }; + DiscordianPluginSettingsTab.prototype.addPluginDescription = function (containerEl) { + var description = containerEl.createEl('div', { cls: 'plugin-description' }); + description.createEl('h3', { text: 'Thanks for using Discordian !' }); + description.createEl('p', { text: 'If you notice any issues, try to update to the latest version and reload Obsidian.' }); + description.createEl('p', { text: 'Otherwise feel free to bring it up on Github or better yet contribute a fix.' }); + description.createEl('a', { + text: 'https://github.com/radekkozak/discordian/issues/', + attr: { 'href': 'https://github.com/radekkozak/discordian/issues/', 'target': '_blank' } + }); + }; + DiscordianPluginSettingsTab.prototype.addPluginSettingsHeader = function (containerEl, headerTitle) { + containerEl.createEl('h4', { text: headerTitle }); + }; + DiscordianPluginSettingsTab.prototype.addPluginSettingsSeparator = function (containerEl) { + containerEl.createEl('p', { text: '⊷', cls: 'plugin-description separator' }); + }; + DiscordianPluginSettingsTab.prototype.addWriterModeSettings = function (containerEl, settings) { + var _this = this; + var description = new DocumentFragment(); + description.appendText('Hides visual excess when sidebars are collapsed (accessible by hover)'); + description.createEl('br'); + description.appendText('NOTE : this setting will hide Status bar and Title bar ' + + 'regardless of their individual options'); + new obsidian.Setting(containerEl) + .setName('Writer mode') + .setDesc(description) + .addToggle(function (toggle) { return toggle.setValue(settings.writerMode) + .onChange(function (value) { + settings.writerMode = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addFlatAndyModeSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Flat Andy Mode') + .setDesc('Flatter notes stacking when in Andy Mode (no elevation shadow)') + .addToggle(function (toggle) { return toggle.setValue(settings.flatAndyMode) + .onChange(function (value) { + settings.flatAndyMode = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addParagraphFocusModeSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Paragraph focus mode') + .setDesc('This aims to imitate well-known iA Writer paragraph focus.') + .addToggle(function (toggle) { return toggle.setValue(settings.paragraphFocusMode) + .onChange(function (value) { + settings.paragraphFocusMode = value; + _this.plugin.saveData(settings); + setting.settingEl.classList.toggle('discordian-plugin-setting-disabled', !value); + _this.plugin.refresh(); + }); }); + var nameFade = 'Paragraph Focus Mode fade '; + var setting = new obsidian.Setting(containerEl) + .setName(nameFade + '( = ' + settings.paragraphFocusFade + '% )') + .setDesc('Amount of fade out when in Paragraph Focus Mode (default 75%)') + .addSlider(function (slider) { return slider.setLimits(25, 90, 5) + .setValue(settings.paragraphFocusFade) + .onChange(function (value) { + settings.paragraphFocusFade = value; + setting.settingEl.classList.toggle('discordian-plugin-setting-disabled', !value); + _this.plugin.saveData(settings); + _this.plugin.refresh(); + setting.setName(nameFade + '( = ' + settings.paragraphFocusFade + '% )'); + }); }); + setting.settingEl.classList.toggle('discordian-plugin-setting-disabled', !settings.paragraphFocusMode); + }; + DiscordianPluginSettingsTab.prototype.addReadableLengthSettings = function (containerEl, settings) { + var _this = this; + var readableLineLength = document.getElementsByClassName('is-readable-line-width'); + var name = 'Readable line length '; + var setting = new obsidian.Setting(containerEl) + .setName(name + '( = ' + settings.readableLength + 'rem )') + .setDesc('Obsidian\'s Readable line length needs to be enabled (default 45 rem)') + .addSlider(function (slider) { return slider.setLimits(45, 120, 5) + .setValue(settings.readableLength) + .onChange(function (value) { + settings.readableLength = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + setting.setName(name + '( = ' + settings.readableLength + 'rem )'); + }); }); + setting.settingEl.classList.toggle('discordian-plugin-setting-disabled', readableLineLength.length == 0); + }; + DiscordianPluginSettingsTab.prototype.addOriginalMarkingsSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Discord original markings') + .setDesc('Use Discord original markings such as bold, italics, inline code, quotes and so on') + .addToggle(function (toggle) { return toggle.setValue(settings.originalMarkings) + .onChange(function (value) { + settings.originalMarkings = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addDarkEnhanceSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Dark note headers') + .setDesc('Make note headers more prominent') + .addToggle(function (toggle) { return toggle.setValue(settings.darkEnhance) + .onChange(function (value) { + settings.darkEnhance = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addRelationLinesPreviewSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Relationship lines in Preview mode') + .setDesc('Show lines connecting related bullet points and task lists') + .addToggle(function (toggle) { return toggle.setValue(settings.relationLinesPreview) + .onChange(function (value) { + settings.relationLinesPreview = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addPrettyTasksEditorSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Pretty Task Lists in Editor mode') + .setDesc("HACKISH : please use both 'Smart indent lists' and 'Use tabs' options for best experience") + .addToggle(function (toggle) { return toggle.setValue(settings.prettyTasksEditor) + .onChange(function (value) { + settings.prettyTasksEditor = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addNotesFontSizeSettings = function (containerEl, settings) { + var _this = this; + var name = 'Notes font size '; + var setting = new obsidian.Setting(containerEl) + .setName(name + '( = ' + settings.fontSizeNotes + 'px )') + .setDesc('Used in editor/preview mode (default 14px)') + .addSlider(function (slider) { return slider.setLimits(14, 22, 2) + .setValue(settings.fontSizeNotes) + .onChange(function (value) { + settings.fontSizeNotes = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + setting.setName(name + '( = ' + value + 'px )'); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addFileExplorerFontSizeSettings = function (containerEl, settings) { + var _this = this; + var name = 'File Explorer font size '; + var setting = new obsidian.Setting(containerEl) + .setName(name + '( = ' + settings.fontSizeFileExplorer + 'px )') + .setDesc('Used in File Explorer (default 14px)') + .addSlider(function (slider) { return slider.setLimits(12, 18, 2) + .setValue(settings.fontSizeFileExplorer) + .onChange(function (value) { + settings.fontSizeFileExplorer = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + setting.setName(name + '( = ' + value + 'px )'); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addHideVaultSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Hide vault name') + .setDesc('Hides vault name in File Explorer') + .addToggle(function (toggle) { return toggle.setValue(settings.hideVault) + .onChange(function (value) { + settings.hideVault = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addHideTitleBarSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Hide title bar') + .setDesc('Hides main title bar (theme\'s default)') + .addToggle(function (toggle) { return toggle.setValue(settings.hideTitleBar) + .onChange(function (value) { + settings.hideTitleBar = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + DiscordianPluginSettingsTab.prototype.addHideStatusBarSettings = function (containerEl, settings) { + var _this = this; + new obsidian.Setting(containerEl) + .setName('Hide status bar') + .setDesc('Hides status bar (theme\'s default)') + .addToggle(function (toggle) { return toggle.setValue(settings.hideStatusBar) + .onChange(function (value) { + settings.hideStatusBar = value; + _this.plugin.saveData(settings); + _this.plugin.refresh(); + }); }); + }; + return DiscordianPluginSettingsTab; +}(obsidian.PluginSettingTab)); + +module.exports = DiscordianPlugin; +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tKSB7XHJcbiAgICBmb3IgKHZhciBpID0gMCwgaWwgPSBmcm9tLmxlbmd0aCwgaiA9IHRvLmxlbmd0aDsgaSA8IGlsOyBpKyssIGorKylcclxuICAgICAgICB0b1tqXSA9IGZyb21baV07XHJcbiAgICByZXR1cm4gdG87XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHByaXZhdGVNYXApIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBnZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgcHJpdmF0ZU1hcCwgdmFsdWUpIHtcclxuICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImF0dGVtcHRlZCB0byBzZXQgcHJpdmF0ZSBmaWVsZCBvbiBub24taW5zdGFuY2VcIik7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlTWFwLnNldChyZWNlaXZlciwgdmFsdWUpO1xyXG4gICAgcmV0dXJuIHZhbHVlO1xyXG59XHJcbiIsImltcG9ydCB7QXBwLCBQbHVnaW4sIFBsdWdpblNldHRpbmdUYWIsIFNldHRpbmd9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY29yZGlhblBsdWdpbiBleHRlbmRzIFBsdWdpbiB7XHJcbiAgICBzZXR0aW5nczogRGlzY29yZGlhblBsdWdpblNldHRpbmdzO1xyXG5cclxuICAgIGFzeW5jIG9ubG9hZCgpIHtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncyA9IGF3YWl0IHRoaXMubG9hZERhdGEoKSB8fCB7XHJcbiAgICAgICAgICAgIGhpZGVWYXVsdDogdHJ1ZSxcclxuICAgICAgICAgICAgaGlkZVRpdGxlQmFyOiB0cnVlLFxyXG4gICAgICAgICAgICBoaWRlU3RhdHVzQmFyOiB0cnVlLFxyXG4gICAgICAgICAgICBvcmlnaW5hbE1hcmtpbmdzOiBmYWxzZSxcclxuICAgICAgICAgICAgcmVsYXRpb25MaW5lc1ByZXZpZXc6IHRydWUsXHJcbiAgICAgICAgICAgIHByZXR0eVRhc2tzRWRpdG9yOiB0cnVlLFxyXG4gICAgICAgICAgICBkYXJrRW5oYW5jZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGZvbnRTaXplTm90ZXM6IDE0LFxyXG4gICAgICAgICAgICBmb250U2l6ZUZpbGVFeHBsb3JlcjogMTQsXHJcbiAgICAgICAgICAgIHdyaXRlck1vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYXJhZ3JhcGhGb2N1c01vZGU6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYXJhZ3JhcGhGb2N1c0ZhZGU6IDc1LFxyXG4gICAgICAgICAgICBmbGF0QW5keU1vZGU6IHRydWUsXHJcbiAgICAgICAgICAgIHJlYWRhYmxlTGVuZ3RoOiA0NVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgRGlzY29yZGlhblBsdWdpblNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkU3R5bGUoKVxyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmRzKClcclxuXHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKClcclxuICAgIH1cclxuXHJcbiAgICBvbnVubG9hZCgpIHtcclxuICAgICAgICB0aGlzLnJlbW92ZVN0eWxlKClcclxuICAgIH1cclxuXHJcbiAgICBhZGRDb21tYW5kcygpIHtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgICAgICAgaWQ6ICd0b2dnbGUtZGlzY29yZGlhbi13cml0ZXItbW9kZScsXHJcbiAgICAgICAgICAgIG5hbWU6ICdUb2dnbGUgV3JpdGVyIE1vZGUnLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy53cml0ZXJNb2RlID0gIXRoaXMuc2V0dGluZ3Mud3JpdGVyTW9kZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogJ3RvZ2dsZS1mbGF0LWFuZHktbW9kZScsXHJcbiAgICAgICAgICAgIG5hbWU6ICdUb2dnbGUgRmxhdCBBbmR5IE1vZGUnLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5mbGF0QW5keU1vZGUgPSAhdGhpcy5zZXR0aW5ncy5mbGF0QW5keU1vZGU7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgICAgICAgaWQ6ICd0b2dnbGUtcGFyYWdyYXBoLWZvY3VzLW1vZGUnLFxyXG4gICAgICAgICAgICBuYW1lOiAnVG9nZ2xlIFBhcmFncmFwaCBGb2N1cyBNb2RlJyxcclxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MucGFyYWdyYXBoRm9jdXNNb2RlID0gIXRoaXMuc2V0dGluZ3MucGFyYWdyYXBoRm9jdXNNb2RlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgICAgICAgIGlkOiAndG9nZ2xlLWRpc2NvcmQtb3JpZ2luYWwtbWFya2luZ3MnLFxyXG4gICAgICAgICAgICBuYW1lOiAnVG9nZ2xlIERpc2NvcmQgb3JpZ2luYWwgbWFya2luZ3MnLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5ncy5vcmlnaW5hbE1hcmtpbmdzID0gIXRoaXMuc2V0dGluZ3Mub3JpZ2luYWxNYXJraW5ncztcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogJ3RvZ2dsZS1yZWxhdGlvbnNoaXAtbGluZXMtcHJldmlldycsXHJcbiAgICAgICAgICAgIG5hbWU6ICdUb2dnbGUgcmVsYXRpb25zaGlwIGxpbmVzIGluIFByZXZpZXcgbW9kZScsXHJcbiAgICAgICAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmdzLnJlbGF0aW9uTGluZXNQcmV2aWV3ID0gIXRoaXMuc2V0dGluZ3MucmVsYXRpb25MaW5lc1ByZXZpZXc7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgICAgICAgaWQ6ICd0b2dnbGUtcHJldHR5LXRhc2tzLXByZXZpZXcnLFxyXG4gICAgICAgICAgICBuYW1lOiAnVG9nZ2xlIFByZXR0eSBUYXNrIExpc3RzIGluIEVkaXRvciBtb2RlJyxcclxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MucHJldHR5VGFza3NFZGl0b3IgPSAhdGhpcy5zZXR0aW5ncy5wcmV0dHlUYXNrc0VkaXRvcjtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogJ3RvZ2dsZS1kYXJrLWVuaGFuY2UnLFxyXG4gICAgICAgICAgICBuYW1lOiAnVG9nZ2xlIERhcmsgbm90ZSBoZWFkZXJzJyxcclxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya0VuaGFuY2UgPSAhdGhpcy5zZXR0aW5ncy5kYXJrRW5oYW5jZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGFkZCB0aGUgc3R5bGluZyBlbGVtZW50cyB3ZSBuZWVkXHJcbiAgICBhZGRTdHlsZSgpIHtcclxuICAgICAgICAvLyBhZGQgYSBjc3MgYmxvY2sgZm9yIG91ciBzZXR0aW5ncy1kZXBlbmRlbnQgc3R5bGVzXHJcbiAgICAgICAgY29uc3QgY3NzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcclxuICAgICAgICBjc3MuaWQgPSAnZGlzY29yZGlhbi10aGVtZSc7XHJcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJoZWFkXCIpWzBdLmFwcGVuZENoaWxkKGNzcyk7XHJcblxyXG4gICAgICAgIC8vIGFkZCB0aGUgbWFpbiBjbGFzc1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZGlzY29yZGlhbi10aGVtZScpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZGlzY29yZGlhbi1yZWFkYWJsZS1sZW5ndGgnKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2Rpc2NvcmRpYW4tcGFyYWdyYXBoLWZvY3VzLWZhZGUnKTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIHRoZSBzdHlsZSB3aXRoIHRoZSBzZXR0aW5ncy1kZXBlbmRlbnQgc3R5bGVzXHJcbiAgICAgICAgdGhpcy51cGRhdGVTdHlsZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbW92ZVN0eWxlKCkge1xyXG4gICAgICAgIGNvbnN0IGRpc2NvcmRpYW5DbGFzc2VzID0gW1xyXG4gICAgICAgICAgICAnZGlzY29yZGlhbi10aGVtZScsXHJcbiAgICAgICAgICAgICdkaXNjb3JkaWFuLXdyaXRlci1tb2RlJyxcclxuICAgICAgICAgICAgJ2Rpc2NvcmRpYW4tZmxhdC1hbmR5LW1vZGUnLFxyXG4gICAgICAgICAgICAnZGlzY29yZGlhbi1wYXJhZ3JhcGgtZm9jdXMnLFxyXG4gICAgICAgICAgICAnZGlzY29yZGlhbi1wYXJhZ3JhcGgtZm9jdXMtZmFkZScsXHJcbiAgICAgICAgICAgICdkaXNjb3JkaWFuLXJlYWRhYmxlLWxlbmd0aCcsXHJcbiAgICAgICAgICAgICdkaXNjb3JkaWFuLWZvbnQtc2l6ZS1ub3RlcycsXHJcbiAgICAgICAgICAgICdkaXNjb3JkaWFuLWZvbnQtc2l6ZS1maWxlLWV4cGxvcmVyJyxcclxuICAgICAgICAgICAgJ2Rpc2NvcmRpYW4tZGlzY29yZC1tYXJraW5ncycsXHJcbiAgICAgICAgICAgICdkaXNjb3JkaWFuLXJlbC1wcmV2aWV3JyxcclxuICAgICAgICAgICAgJ2Rpc2NvcmRpYW4tcHJldHR5LXRhc2tzLWVkaXRvcicsXHJcbiAgICAgICAgICAgICdkaXNjb3JkaWFuLWRhcmstZW5oYW5jZScsXHJcbiAgICAgICAgICAgICdkaXNjb3JkaWFuLWhpZGUtdmF1bHQnLFxyXG4gICAgICAgICAgICAnZGlzY29yZGlhbi1oaWRlLXRpdGxlYmFyJyxcclxuICAgICAgICAgICAgJ2Rpc2NvcmRpYW4taGlkZS1zdGF0dXNiYXInXHJcbiAgICAgICAgXVxyXG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3NlcyhkaXNjb3JkaWFuQ2xhc3Nlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdFN0eWxlcygpIHtcclxuICAgICAgICBjb25zdCBkaXNjb3JkaWFuRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGlzY29yZGlhbi10aGVtZScpXHJcbiAgICAgICAgaWYgKGRpc2NvcmRpYW5FbCkge1xyXG4gICAgICAgICAgICBjb25zdCBsZW4gPSB0aGlzLnNldHRpbmdzLnJlYWRhYmxlTGVuZ3RoICsgJ3JlbSdcclxuICAgICAgICAgICAgY29uc3QgZmFkZSA9IDEwMCAtIHRoaXMuc2V0dGluZ3MucGFyYWdyYXBoRm9jdXNGYWRlXHJcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplTm90ZXMgPSB0aGlzLnNldHRpbmdzLmZvbnRTaXplTm90ZXMgLyAxNiArICdyZW0nXHJcbiAgICAgICAgICAgIGNvbnN0IGZvbnRTaXplRmlsZUV4cGxvcmVyID0gdGhpcy5zZXR0aW5ncy5mb250U2l6ZUZpbGVFeHBsb3JlciAvIDE2ICsgJ3JlbSdcclxuICAgICAgICAgICAgY29uc3QgbGV0dGVyU3BhY2luZ05vdGVzID0gKHRoaXMuc2V0dGluZ3MuZm9udFNpemVOb3RlcyA8IDE2ID8gLTAuMiA6IC0wLjQpICsgJ3B4J1xyXG5cclxuICAgICAgICAgICAgZGlzY29yZGlhbkVsLmlubmVyVGV4dCA9IGBcclxuICAgICAgICAgICAgICAgICAgICBib2R5LmRpc2NvcmRpYW4tdGhlbWUge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAtLXJlYWRhYmxlLWxpbmUtbGVuZ3RoOiR7bGVufTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLS1wYXJhZ3JhcGgtZm9jdXMtZmFkZTogMC4ke2ZhZGV9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAtLWZvbnQtc2l6ZS1ub3RlczogJHtmb250U2l6ZU5vdGVzfTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLS1mb250LXNpemUtZmlsZS1leHBsb3JlcjogJHtmb250U2l6ZUZpbGVFeHBsb3Jlcn07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC0tbGV0dGVyLXNwYWNpbmctbm90ZXM6ICR7bGV0dGVyU3BhY2luZ05vdGVzfTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IFwiQ291bGQgbm90IGZpbmQgRGlzY29yZGlhbiBUaGVtZVwiO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvLyB1cGRhdGUgdGhlIHN0eWxlcyAoYXQgdGhlIHN0YXJ0LCBvciBhcyB0aGUgcmVzdWx0IG9mIGEgc2V0dGluZ3MgY2hhbmdlKVxyXG4gICAgdXBkYXRlU3R5bGUoKSB7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdkaXNjb3JkaWFuLXdyaXRlci1tb2RlJywgdGhpcy5zZXR0aW5ncy53cml0ZXJNb2RlKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2NvcmRpYW4tZmxhdC1hbmR5LW1vZGUnLCB0aGlzLnNldHRpbmdzLmZsYXRBbmR5TW9kZSk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdkaXNjb3JkaWFuLXBhcmFncmFwaC1mb2N1cycsIHRoaXMuc2V0dGluZ3MucGFyYWdyYXBoRm9jdXNNb2RlKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2NvcmRpYW4taGlkZS12YXVsdCcsIHRoaXMuc2V0dGluZ3MuaGlkZVZhdWx0KTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2NvcmRpYW4taGlkZS10aXRsZWJhcicsIHRoaXMuc2V0dGluZ3MuaGlkZVRpdGxlQmFyKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2NvcmRpYW4taGlkZS1zdGF0dXNiYXInLCB0aGlzLnNldHRpbmdzLmhpZGVTdGF0dXNCYXIpO1xyXG4gICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnZGlzY29yZGlhbi1vcmlnaW5hbC1tYXJraW5ncycsIHRoaXMuc2V0dGluZ3Mub3JpZ2luYWxNYXJraW5ncyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdkaXNjb3JkaWFuLXJlbC1wcmV2aWV3JywgdGhpcy5zZXR0aW5ncy5yZWxhdGlvbkxpbmVzUHJldmlldyk7XHJcbiAgICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdkaXNjb3JkaWFuLXByZXR0eS10YXNrcy1lZGl0b3InLCB0aGlzLnNldHRpbmdzLnByZXR0eVRhc2tzRWRpdG9yKTtcclxuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2NvcmRpYW4tZGFyay1lbmhhbmNlJywgdGhpcy5zZXR0aW5ncy5kYXJrRW5oYW5jZSk7XHJcblxyXG4gICAgICAgIHRoaXMuaW5pdFN0eWxlcygpXHJcbiAgICB9XHJcblxyXG4vLyByZWZyZXNoIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGNoYW5nZSBzZXR0aW5nc1xyXG4gICAgcmVmcmVzaCA9ICgpID0+IHtcclxuICAgICAgICAvLyByZS1sb2FkIHRoZSBzdHlsZVxyXG4gICAgICAgIHRoaXMudXBkYXRlU3R5bGUoKVxyXG4gICAgfVxyXG59XHJcblxyXG5pbnRlcmZhY2UgRGlzY29yZGlhblBsdWdpblNldHRpbmdzIHtcclxuICAgIGhpZGVWYXVsdDogYm9vbGVhblxyXG4gICAgaGlkZU1ldGFkYXRhOiBib29sZWFuXHJcbiAgICBoaWRlVGl0bGVCYXI6IGJvb2xlYW5cclxuICAgIGhpZGVTdGF0dXNCYXI6IGJvb2xlYW5cclxuICAgIG9yaWdpbmFsTWFya2luZ3M6IGJvb2xlYW5cclxuICAgIHJlbGF0aW9uTGluZXNQcmV2aWV3OiBib29sZWFuXHJcbiAgICBwcmV0dHlUYXNrc0VkaXRvcjogYm9vbGVhblxyXG4gICAgZGFya0VuaGFuY2U6IGJvb2xlYW5cclxuICAgIGZvbnRTaXplTm90ZXM6IG51bWJlclxyXG4gICAgZm9udFNpemVGaWxlRXhwbG9yZXI6IG51bWJlclxyXG4gICAgbGV0dGVyU3BhY2luZ05vdGVzOiBudW1iZXJcclxuICAgIHdyaXRlck1vZGU6IGJvb2xlYW5cclxuICAgIHBhcmFncmFwaEZvY3VzTW9kZTogYm9vbGVhblxyXG4gICAgcGFyYWdyYXBoRm9jdXNGYWRlOiBudW1iZXJcclxuICAgIGZsYXRBbmR5TW9kZTogYm9vbGVhblxyXG4gICAgcmVhZGFibGVMZW5ndGg6IG51bWJlclxyXG59XHJcblxyXG5jbGFzcyBEaXNjb3JkaWFuUGx1Z2luU2V0dGluZ3NUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuICAgIHBsdWdpbjogRGlzY29yZGlhblBsdWdpbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBEaXNjb3JkaWFuUGx1Z2luKSB7XHJcbiAgICAgICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xyXG4gICAgfVxyXG5cclxuICAgIGRpc3BsYXkoKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XHJcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnBsdWdpbi5zZXR0aW5ncztcclxuXHJcbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcbiAgICAgICAgdGhpcy5hZGRQbHVnaW5EZXNjcmlwdGlvbihjb250YWluZXJFbClcclxuXHJcbiAgICAgICAgdGhpcy5hZGRQbHVnaW5TZXR0aW5nc0hlYWRlcihjb250YWluZXJFbCwgJ1RoZW1lIFNldHRpbmdzJylcclxuICAgICAgICB0aGlzLmFkZFdyaXRlck1vZGVTZXR0aW5ncyhjb250YWluZXJFbCwgc2V0dGluZ3MpXHJcbiAgICAgICAgdGhpcy5hZGRGbGF0QW5keU1vZGVTZXR0aW5ncyhjb250YWluZXJFbCwgc2V0dGluZ3MpXHJcbiAgICAgICAgdGhpcy5hZGRQYXJhZ3JhcGhGb2N1c01vZGVTZXR0aW5ncyhjb250YWluZXJFbCwgc2V0dGluZ3MpXHJcbiAgICAgICAgdGhpcy5hZGRSZWFkYWJsZUxlbmd0aFNldHRpbmdzKGNvbnRhaW5lckVsLCBzZXR0aW5ncylcclxuICAgICAgICB0aGlzLmFkZE9yaWdpbmFsTWFya2luZ3NTZXR0aW5ncyhjb250YWluZXJFbCwgc2V0dGluZ3MpXHJcbiAgICAgICAgdGhpcy5hZGRSZWxhdGlvbkxpbmVzUHJldmlld1NldHRpbmdzKGNvbnRhaW5lckVsLCBzZXR0aW5ncylcclxuICAgICAgICB0aGlzLmFkZFByZXR0eVRhc2tzRWRpdG9yU2V0dGluZ3MoY29udGFpbmVyRWwsIHNldHRpbmdzKVxyXG4gICAgICAgIHRoaXMuYWRkRGFya0VuaGFuY2VTZXR0aW5ncyhjb250YWluZXJFbCwgc2V0dGluZ3MpXHJcblxyXG4gICAgICAgIHRoaXMuYWRkUGx1Z2luU2V0dGluZ3NTZXBhcmF0b3IoY29udGFpbmVyRWwpXHJcblxyXG4gICAgICAgIHRoaXMuYWRkUGx1Z2luU2V0dGluZ3NIZWFkZXIoY29udGFpbmVyRWwsICdGb250cycpXHJcbiAgICAgICAgdGhpcy5hZGROb3Rlc0ZvbnRTaXplU2V0dGluZ3MoY29udGFpbmVyRWwsIHNldHRpbmdzKVxyXG4gICAgICAgIHRoaXMuYWRkRmlsZUV4cGxvcmVyRm9udFNpemVTZXR0aW5ncyhjb250YWluZXJFbCwgc2V0dGluZ3MpXHJcblxyXG4gICAgICAgIHRoaXMuYWRkUGx1Z2luU2V0dGluZ3NTZXBhcmF0b3IoY29udGFpbmVyRWwpXHJcblxyXG4gICAgICAgIHRoaXMuYWRkUGx1Z2luU2V0dGluZ3NIZWFkZXIoY29udGFpbmVyRWwsICdJZiBub3QgdXNpbmcgSGlkZXIgcGx1Z2luJylcclxuICAgICAgICB0aGlzLmFkZEhpZGVWYXVsdFNldHRpbmdzKGNvbnRhaW5lckVsLCBzZXR0aW5ncylcclxuICAgICAgICB0aGlzLmFkZEhpZGVUaXRsZUJhclNldHRpbmdzKGNvbnRhaW5lckVsLCBzZXR0aW5ncylcclxuICAgICAgICB0aGlzLmFkZEhpZGVTdGF0dXNCYXJTZXR0aW5ncyhjb250YWluZXJFbCwgc2V0dGluZ3MpXHJcbiAgICB9XHJcblxyXG4gICAgYWRkUGx1Z2luRGVzY3JpcHRpb24oY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBjb250YWluZXJFbC5jcmVhdGVFbCgnZGl2Jywge2NsczogJ3BsdWdpbi1kZXNjcmlwdGlvbid9KTtcclxuXHJcbiAgICAgICAgZGVzY3JpcHRpb24uY3JlYXRlRWwoJ2gzJywge3RleHQ6ICdUaGFua3MgZm9yIHVzaW5nIERpc2NvcmRpYW4gISd9KTtcclxuICAgICAgICBkZXNjcmlwdGlvbi5jcmVhdGVFbCgncCcsIHt0ZXh0OiAnSWYgeW91IG5vdGljZSBhbnkgaXNzdWVzLCB0cnkgdG8gdXBkYXRlIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBhbmQgcmVsb2FkIE9ic2lkaWFuLid9KTtcclxuICAgICAgICBkZXNjcmlwdGlvbi5jcmVhdGVFbCgncCcsIHt0ZXh0OiAnT3RoZXJ3aXNlIGZlZWwgZnJlZSB0byBicmluZyBpdCB1cCBvbiBHaXRodWIgb3IgYmV0dGVyIHlldCBjb250cmlidXRlIGEgZml4Lid9KTtcclxuICAgICAgICBkZXNjcmlwdGlvbi5jcmVhdGVFbCgnYScsIHtcclxuICAgICAgICAgICAgdGV4dDogJ2h0dHBzOi8vZ2l0aHViLmNvbS9yYWRla2tvemFrL2Rpc2NvcmRpYW4vaXNzdWVzLycsXHJcbiAgICAgICAgICAgIGF0dHI6IHsnaHJlZic6ICdodHRwczovL2dpdGh1Yi5jb20vcmFkZWtrb3phay9kaXNjb3JkaWFuL2lzc3Vlcy8nLCAndGFyZ2V0JzogJ19ibGFuayd9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUGx1Z2luU2V0dGluZ3NIZWFkZXIoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBoZWFkZXJUaXRsZTogc3RyaW5nKSB7XHJcbiAgICAgICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2g0Jywge3RleHQ6IGhlYWRlclRpdGxlfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUGx1Z2luU2V0dGluZ3NTZXBhcmF0b3IoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ3AnLCB7dGV4dDogJ+KKtycsIGNsczogJ3BsdWdpbi1kZXNjcmlwdGlvbiBzZXBhcmF0b3InfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkV3JpdGVyTW9kZVNldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgc2V0dGluZ3M6IERpc2NvcmRpYW5QbHVnaW5TZXR0aW5ncykge1xyXG4gICAgICAgIGxldCBkZXNjcmlwdGlvbiA9IG5ldyBEb2N1bWVudEZyYWdtZW50KClcclxuICAgICAgICBkZXNjcmlwdGlvbi5hcHBlbmRUZXh0KCdIaWRlcyB2aXN1YWwgZXhjZXNzIHdoZW4gc2lkZWJhcnMgYXJlIGNvbGxhcHNlZCAoYWNjZXNzaWJsZSBieSBob3ZlciknKVxyXG4gICAgICAgIGRlc2NyaXB0aW9uLmNyZWF0ZUVsKCdicicpXHJcbiAgICAgICAgZGVzY3JpcHRpb24uYXBwZW5kVGV4dCgnTk9URSA6IHRoaXMgc2V0dGluZyB3aWxsIGhpZGUgU3RhdHVzIGJhciBhbmQgVGl0bGUgYmFyICcgK1xyXG4gICAgICAgICAgICAncmVnYXJkbGVzcyBvZiB0aGVpciBpbmRpdmlkdWFsIG9wdGlvbnMnKVxyXG5cclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoJ1dyaXRlciBtb2RlJylcclxuICAgICAgICAgICAgLnNldERlc2MoZGVzY3JpcHRpb24pXHJcbiAgICAgICAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZShzZXR0aW5ncy53cml0ZXJNb2RlKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLndyaXRlck1vZGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YShzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRGbGF0QW5keU1vZGVTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHNldHRpbmdzOiBEaXNjb3JkaWFuUGx1Z2luU2V0dGluZ3MpIHtcclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoJ0ZsYXQgQW5keSBNb2RlJylcclxuICAgICAgICAgICAgLnNldERlc2MoJ0ZsYXR0ZXIgbm90ZXMgc3RhY2tpbmcgd2hlbiBpbiBBbmR5IE1vZGUgKG5vIGVsZXZhdGlvbiBzaGFkb3cpJylcclxuICAgICAgICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHNldHRpbmdzLmZsYXRBbmR5TW9kZSlcclxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5mbGF0QW5keU1vZGUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YShzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRQYXJhZ3JhcGhGb2N1c01vZGVTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHNldHRpbmdzOiBEaXNjb3JkaWFuUGx1Z2luU2V0dGluZ3MpIHtcclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoJ1BhcmFncmFwaCBmb2N1cyBtb2RlJylcclxuICAgICAgICAgICAgLnNldERlc2MoJ1RoaXMgYWltcyB0byBpbWl0YXRlIHdlbGwta25vd24gaUEgV3JpdGVyIHBhcmFncmFwaCBmb2N1cy4nKVxyXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUoc2V0dGluZ3MucGFyYWdyYXBoRm9jdXNNb2RlKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLnBhcmFncmFwaEZvY3VzTW9kZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLnNldHRpbmdFbC5jbGFzc0xpc3QudG9nZ2xlKCdkaXNjb3JkaWFuLXBsdWdpbi1zZXR0aW5nLWRpc2FibGVkJywgIXZhbHVlKVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIGNvbnN0IG5hbWVGYWRlID0gJ1BhcmFncmFwaCBGb2N1cyBNb2RlIGZhZGUgJ1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUobmFtZUZhZGUgKyAnKCA9ICcgKyBzZXR0aW5ncy5wYXJhZ3JhcGhGb2N1c0ZhZGUgKyAnJSApJylcclxuICAgICAgICAgICAgLnNldERlc2MoJ0Ftb3VudCBvZiBmYWRlIG91dCB3aGVuIGluIFBhcmFncmFwaCBGb2N1cyBNb2RlIChkZWZhdWx0IDc1JSknKVxyXG4gICAgICAgICAgICAuYWRkU2xpZGVyKHNsaWRlciA9PiBzbGlkZXIuc2V0TGltaXRzKDI1LCA5MCwgNSlcclxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzZXR0aW5ncy5wYXJhZ3JhcGhGb2N1c0ZhZGUpXHJcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MucGFyYWdyYXBoRm9jdXNGYWRlID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5zZXR0aW5nRWwuY2xhc3NMaXN0LnRvZ2dsZSgnZGlzY29yZGlhbi1wbHVnaW4tc2V0dGluZy1kaXNhYmxlZCcsICF2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEoc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLnNldE5hbWUobmFtZUZhZGUgKyAnKCA9ICcgKyBzZXR0aW5ncy5wYXJhZ3JhcGhGb2N1c0ZhZGUgKyAnJSApJylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHNldHRpbmcuc2V0dGluZ0VsLmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2NvcmRpYW4tcGx1Z2luLXNldHRpbmctZGlzYWJsZWQnLCAhc2V0dGluZ3MucGFyYWdyYXBoRm9jdXNNb2RlKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRSZWFkYWJsZUxlbmd0aFNldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgc2V0dGluZ3M6IERpc2NvcmRpYW5QbHVnaW5TZXR0aW5ncykge1xyXG4gICAgICAgIGNvbnN0IHJlYWRhYmxlTGluZUxlbmd0aCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2lzLXJlYWRhYmxlLWxpbmUtd2lkdGgnKVxyXG5cclxuICAgICAgICBjb25zdCBuYW1lID0gJ1JlYWRhYmxlIGxpbmUgbGVuZ3RoICdcclxuICAgICAgICBjb25zdCBzZXR0aW5nID0gbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgIC5zZXROYW1lKG5hbWUgKyAnKCA9ICcgKyBzZXR0aW5ncy5yZWFkYWJsZUxlbmd0aCArICdyZW0gKScpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKCdPYnNpZGlhblxcJ3MgUmVhZGFibGUgbGluZSBsZW5ndGggbmVlZHMgdG8gYmUgZW5hYmxlZCAoZGVmYXVsdCA0NSByZW0pJylcclxuICAgICAgICAgICAgLmFkZFNsaWRlcihzbGlkZXIgPT4gc2xpZGVyLnNldExpbWl0cyg0NSwgMTIwLCA1KVxyXG4gICAgICAgICAgICAgICAgLnNldFZhbHVlKHNldHRpbmdzLnJlYWRhYmxlTGVuZ3RoKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLnJlYWRhYmxlTGVuZ3RoID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEoc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5nLnNldE5hbWUobmFtZSArICcoID0gJyArIHNldHRpbmdzLnJlYWRhYmxlTGVuZ3RoICsgJ3JlbSApJylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgIHNldHRpbmcuc2V0dGluZ0VsLmNsYXNzTGlzdC50b2dnbGUoJ2Rpc2NvcmRpYW4tcGx1Z2luLXNldHRpbmctZGlzYWJsZWQnLCByZWFkYWJsZUxpbmVMZW5ndGgubGVuZ3RoID09IDApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZE9yaWdpbmFsTWFya2luZ3NTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHNldHRpbmdzOiBEaXNjb3JkaWFuUGx1Z2luU2V0dGluZ3MpIHtcclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoJ0Rpc2NvcmQgb3JpZ2luYWwgbWFya2luZ3MnKVxyXG4gICAgICAgICAgICAuc2V0RGVzYygnVXNlIERpc2NvcmQgb3JpZ2luYWwgbWFya2luZ3Mgc3VjaCBhcyBib2xkLCBpdGFsaWNzLCBpbmxpbmUgY29kZSwgcXVvdGVzIGFuZCBzbyBvbicpXHJcbiAgICAgICAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZShzZXR0aW5ncy5vcmlnaW5hbE1hcmtpbmdzKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLm9yaWdpbmFsTWFya2luZ3MgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YShzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGREYXJrRW5oYW5jZVNldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgc2V0dGluZ3M6IERpc2NvcmRpYW5QbHVnaW5TZXR0aW5ncykge1xyXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgICAgICAuc2V0TmFtZSgnRGFyayBub3RlIGhlYWRlcnMnKVxyXG4gICAgICAgICAgICAuc2V0RGVzYygnTWFrZSBub3RlIGhlYWRlcnMgbW9yZSBwcm9taW5lbnQnKVxyXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUoc2V0dGluZ3MuZGFya0VuaGFuY2UpXHJcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MuZGFya0VuaGFuY2UgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YShzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRSZWxhdGlvbkxpbmVzUHJldmlld1NldHRpbmdzKGNvbnRhaW5lckVsOiBIVE1MRWxlbWVudCwgc2V0dGluZ3M6IERpc2NvcmRpYW5QbHVnaW5TZXR0aW5ncykge1xyXG4gICAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgICAgICAuc2V0TmFtZSgnUmVsYXRpb25zaGlwIGxpbmVzIGluIFByZXZpZXcgbW9kZScpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKCdTaG93IGxpbmVzIGNvbm5lY3RpbmcgcmVsYXRlZCBidWxsZXQgcG9pbnRzIGFuZCB0YXNrIGxpc3RzJylcclxuICAgICAgICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHNldHRpbmdzLnJlbGF0aW9uTGluZXNQcmV2aWV3KVxyXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLnJlbGF0aW9uTGluZXNQcmV2aWV3ID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEoc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkUHJldHR5VGFza3NFZGl0b3JTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHNldHRpbmdzOiBEaXNjb3JkaWFuUGx1Z2luU2V0dGluZ3MpIHtcclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoJ1ByZXR0eSBUYXNrIExpc3RzIGluIEVkaXRvciBtb2RlJylcclxuICAgICAgICAgICAgLnNldERlc2MoXCJIQUNLSVNIIDogcGxlYXNlIHVzZSBib3RoICdTbWFydCBpbmRlbnQgbGlzdHMnIGFuZCAnVXNlIHRhYnMnIG9wdGlvbnMgZm9yIGJlc3QgZXhwZXJpZW5jZVwiKVxyXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUoc2V0dGluZ3MucHJldHR5VGFza3NFZGl0b3IpXHJcbiAgICAgICAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZ3MucHJldHR5VGFza3NFZGl0b3IgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YShzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGROb3Rlc0ZvbnRTaXplU2V0dGluZ3MoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBzZXR0aW5nczogRGlzY29yZGlhblBsdWdpblNldHRpbmdzKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9ICdOb3RlcyBmb250IHNpemUgJ1xyXG4gICAgICAgIGNvbnN0IHNldHRpbmcgPSBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUobmFtZSArICcoID0gJyArIHNldHRpbmdzLmZvbnRTaXplTm90ZXMgKyAncHggKScpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKCdVc2VkIGluIGVkaXRvci9wcmV2aWV3IG1vZGUgKGRlZmF1bHQgMTRweCknKVxyXG4gICAgICAgICAgICAuYWRkU2xpZGVyKHNsaWRlciA9PiBzbGlkZXIuc2V0TGltaXRzKDE0LCAyMiwgMilcclxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzZXR0aW5ncy5mb250U2l6ZU5vdGVzKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmZvbnRTaXplTm90ZXMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YShzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmcuc2V0TmFtZShuYW1lICsgJyggPSAnICsgdmFsdWUgKyAncHggKScpXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEZpbGVFeHBsb3JlckZvbnRTaXplU2V0dGluZ3MoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBzZXR0aW5nczogRGlzY29yZGlhblBsdWdpblNldHRpbmdzKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9ICdGaWxlIEV4cGxvcmVyIGZvbnQgc2l6ZSAnXHJcbiAgICAgICAgY29uc3Qgc2V0dGluZyA9IG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgICAgICAuc2V0TmFtZShuYW1lICsgJyggPSAnICsgc2V0dGluZ3MuZm9udFNpemVGaWxlRXhwbG9yZXIgKyAncHggKScpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKCdVc2VkIGluIEZpbGUgRXhwbG9yZXIgKGRlZmF1bHQgMTRweCknKVxyXG4gICAgICAgICAgICAuYWRkU2xpZGVyKHNsaWRlciA9PiBzbGlkZXIuc2V0TGltaXRzKDEyLCAxOCwgMilcclxuICAgICAgICAgICAgICAgIC5zZXRWYWx1ZShzZXR0aW5ncy5mb250U2l6ZUZpbGVFeHBsb3JlcilcclxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5mb250U2l6ZUZpbGVFeHBsb3JlciA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgc2V0dGluZy5zZXROYW1lKG5hbWUgKyAnKCA9ICcgKyB2YWx1ZSArICdweCApJylcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRkSGlkZVZhdWx0U2V0dGluZ3MoY29udGFpbmVyRWw6IEhUTUxFbGVtZW50LCBzZXR0aW5nczogRGlzY29yZGlhblBsdWdpblNldHRpbmdzKSB7XHJcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgIC5zZXROYW1lKCdIaWRlIHZhdWx0IG5hbWUnKVxyXG4gICAgICAgICAgICAuc2V0RGVzYygnSGlkZXMgdmF1bHQgbmFtZSBpbiBGaWxlIEV4cGxvcmVyJylcclxuICAgICAgICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHNldHRpbmdzLmhpZGVWYXVsdClcclxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5oaWRlVmF1bHQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YShzZXR0aW5ncyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRIaWRlVGl0bGVCYXJTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHNldHRpbmdzOiBEaXNjb3JkaWFuUGx1Z2luU2V0dGluZ3MpIHtcclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoJ0hpZGUgdGl0bGUgYmFyJylcclxuICAgICAgICAgICAgLnNldERlc2MoJ0hpZGVzIG1haW4gdGl0bGUgYmFyICh0aGVtZVxcJ3MgZGVmYXVsdCknKVxyXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUoc2V0dGluZ3MuaGlkZVRpdGxlQmFyKVxyXG4gICAgICAgICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzLmhpZGVUaXRsZUJhciA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHNldHRpbmdzKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZEhpZGVTdGF0dXNCYXJTZXR0aW5ncyhjb250YWluZXJFbDogSFRNTEVsZW1lbnQsIHNldHRpbmdzOiBEaXNjb3JkaWFuUGx1Z2luU2V0dGluZ3MpIHtcclxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAgICAgLnNldE5hbWUoJ0hpZGUgc3RhdHVzIGJhcicpXHJcbiAgICAgICAgICAgIC5zZXREZXNjKCdIaWRlcyBzdGF0dXMgYmFyICh0aGVtZVxcJ3MgZGVmYXVsdCknKVxyXG4gICAgICAgICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUoc2V0dGluZ3MuaGlkZVN0YXR1c0JhcilcclxuICAgICAgICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5ncy5oaWRlU3RhdHVzQmFyID0gdmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEoc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuIl0sIm5hbWVzIjpbIlBsdWdpbiIsIlNldHRpbmciLCJQbHVnaW5TZXR0aW5nVGFiIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxJQUFJLGFBQWEsR0FBRyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUU7QUFDbkMsSUFBSSxhQUFhLEdBQUcsTUFBTSxDQUFDLGNBQWM7QUFDekMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsWUFBWSxLQUFLLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQ3BGLFFBQVEsVUFBVSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxNQUFNLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO0FBQzFHLElBQUksT0FBTyxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQztBQUNGO0FBQ08sU0FBUyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRTtBQUNoQyxJQUFJLElBQUksT0FBTyxDQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsS0FBSyxJQUFJO0FBQzdDLFFBQVEsTUFBTSxJQUFJLFNBQVMsQ0FBQyxzQkFBc0IsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsK0JBQStCLENBQUMsQ0FBQztBQUNsRyxJQUFJLGFBQWEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEIsSUFBSSxTQUFTLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLEVBQUU7QUFDM0MsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQyxTQUFTLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pGLENBQUM7QUF1Q0Q7QUFDTyxTQUFTLFNBQVMsQ0FBQyxPQUFPLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUU7QUFDN0QsSUFBSSxTQUFTLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxPQUFPLEtBQUssWUFBWSxDQUFDLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLFVBQVUsT0FBTyxFQUFFLEVBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7QUFDaEgsSUFBSSxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLENBQUMsRUFBRSxVQUFVLE9BQU8sRUFBRSxNQUFNLEVBQUU7QUFDL0QsUUFBUSxTQUFTLFNBQVMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ25HLFFBQVEsU0FBUyxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO0FBQ3RHLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxRQUFRLENBQUMsQ0FBQyxFQUFFO0FBQ3RILFFBQVEsSUFBSSxDQUFDLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLFVBQVUsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0FBQzlFLEtBQUssQ0FBQyxDQUFDO0FBQ1AsQ0FBQztBQUNEO0FBQ08sU0FBUyxXQUFXLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRTtBQUMzQyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDckgsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxNQUFNLEtBQUssVUFBVSxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsV0FBVyxFQUFFLE9BQU8sSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUM3SixJQUFJLFNBQVMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLE9BQU8sVUFBVSxDQUFDLEVBQUUsRUFBRSxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0FBQ3RFLElBQUksU0FBUyxJQUFJLENBQUMsRUFBRSxFQUFFO0FBQ3RCLFFBQVEsSUFBSSxDQUFDLEVBQUUsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0FBQ3RFLFFBQVEsT0FBTyxDQUFDLEVBQUUsSUFBSTtBQUN0QixZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ3pLLFlBQVksSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwRCxZQUFZLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUN6QixnQkFBZ0IsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsTUFBTTtBQUM5QyxnQkFBZ0IsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQ3hFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQixLQUFLLENBQUMsRUFBRSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxTQUFTO0FBQ2pFLGdCQUFnQjtBQUNoQixvQkFBb0IsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtBQUNoSSxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRTtBQUMxRyxvQkFBb0IsSUFBSSxFQUFFLENBQUMsQ0FBQyxD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 diff --git a/.obsidian/plugins/discordian-plugin/manifest.json b/.obsidian/plugins/discordian-plugin/manifest.json new file mode 100644 index 0000000..4b38802 --- /dev/null +++ b/.obsidian/plugins/discordian-plugin/manifest.json @@ -0,0 +1,11 @@ +{ + "id": "discordian-plugin", + "name": "Discordian Theme", + "version": "0.7.1", + "minAppVersion": "0.10.6", + "description": "Discordian plugin for tweaking Discordian theme", + "author": "@radekkozak", + "authorUrl": "https://github.com/radekkozak", + "isDesktopOnly": false +} + diff --git a/.obsidian/plugins/discordian-plugin/styles.css b/.obsidian/plugins/discordian-plugin/styles.css new file mode 100644 index 0000000..710cecc --- /dev/null +++ b/.obsidian/plugins/discordian-plugin/styles.css @@ -0,0 +1 @@ +/* Empty */ diff --git a/.obsidian/plugins/obsidian-minimal-settings/data.json b/.obsidian/plugins/obsidian-minimal-settings/data.json deleted file mode 100644 index 0f4cfd4..0000000 --- a/.obsidian/plugins/obsidian-minimal-settings/data.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "theme": "moonstone", - "accentHue": 201, - "accentSat": 17, - "lightStyle": "minimal-light", - "darkStyle": "minimal-dark", - "lightScheme": "minimal-default-light", - "darkScheme": "minimal-default-dark", - "editorFont": "", - "lineHeight": 1.5, - "lineWidth": 40, - "lineWidthWide": 50, - "maxWidth": 88, - "trimCols": true, - "maxColWidth": "18em", - "textNormal": 22, - "textSmall": 13, - "imgGrid": false, - "imgWidth": "img-default-width", - "tableWidth": "table-default-width", - "iframeWidth": "iframe-default-width", - "mapWidth": "map-default-width", - "chartWidth": "chart-default-width", - "colorfulHeadings": false, - "minimalIcons": true, - "colorfulActiveStates": false, - "fancyCursor": false, - "frostedSidebar": true, - "trimNames": true, - "labeledNav": false, - "fullWidthMedia": true, - "bordersToggle": true, - "bordersTitle": false, - "minimalStatus": true, - "focusMode": false, - "underlineInternal": true, - "underlineExternal": true, - "useSystemTheme": false, - "folding": true, - "lineNumbers": false, - "readableLineLength": true, - "devBlockWidth": false -} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-minimal-settings/main.js b/.obsidian/plugins/obsidian-minimal-settings/main.js deleted file mode 100644 index 2efed40..0000000 --- a/.obsidian/plugins/obsidian-minimal-settings/main.js +++ /dev/null @@ -1,959 +0,0 @@ -/* -THIS IS A GENERATED/BUNDLED FILE BY ESBUILD -if you want to view the source, please visit the github repository of this plugin -*/ - -var __create = Object.create; -var __defProp = Object.defineProperty; -var __getOwnPropDesc = Object.getOwnPropertyDescriptor; -var __getOwnPropNames = Object.getOwnPropertyNames; -var __getProtoOf = Object.getPrototypeOf; -var __hasOwnProp = Object.prototype.hasOwnProperty; -var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); -var __export = (target, all) => { - __markAsModule(target); - for (var name in all) - __defProp(target, name, { get: all[name], enumerable: true }); -}; -var __reExport = (target, module2, desc) => { - if (module2 && typeof module2 === "object" || typeof module2 === "function") { - for (let key of __getOwnPropNames(module2)) - if (!__hasOwnProp.call(target, key) && key !== "default") - __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable }); - } - return target; -}; -var __toModule = (module2) => { - return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", module2 && module2.__esModule && "default" in module2 ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2); -}; -var __async = (__this, __arguments, generator) => { - return new Promise((resolve, reject) => { - var fulfilled = (value) => { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - }; - var rejected = (value) => { - try { - step(generator.throw(value)); - } catch (e) { - reject(e); - } - }; - var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected); - step((generator = generator.apply(__this, __arguments)).next()); - }); -}; - -// main.ts -__export(exports, { - default: () => MinimalTheme -}); -var import_obsidian = __toModule(require("obsidian")); -var MinimalTheme = class extends import_obsidian.Plugin { - onload() { - return __async(this, null, function* () { - yield this.loadSettings(); - this.addSettingTab(new MinimalSettingTab(this.app, this)); - this.addStyle(); - let media = window.matchMedia("(prefers-color-scheme: dark)"); - let updateSystemTheme = () => { - if (media.matches && this.settings.useSystemTheme) { - console.log("Dark mode active"); - this.updateDarkStyle(); - } else if (this.settings.useSystemTheme) { - console.log("Light mode active"); - this.updateLightStyle(); - } - }; - media.addEventListener("change", updateSystemTheme); - this.register(() => media.removeEventListener("change", updateSystemTheme)); - updateSystemTheme(); - let settingsUpdate = () => { - const fontSize = this.app.vault.getConfig("baseFontSize"); - this.settings.textNormal = fontSize; - if (this.app.vault.getConfig("foldHeading")) { - this.settings.folding = true; - this.saveData(this.settings); - console.log("Folding is on"); - } else { - this.settings.folding = false; - this.saveData(this.settings); - console.log("Folding is off"); - } - document.body.classList.toggle("minimal-folding", this.settings.folding); - if (this.app.vault.getConfig("showLineNumber")) { - this.settings.lineNumbers = true; - this.saveData(this.settings); - console.log("Line numbers are on"); - } else { - this.settings.lineNumbers = false; - this.saveData(this.settings); - console.log("Line numbers are off"); - } - document.body.classList.toggle("minimal-line-nums", this.settings.lineNumbers); - if (this.app.vault.getConfig("readableLineLength")) { - this.settings.readableLineLength = true; - this.saveData(this.settings); - console.log("Readable line length is on"); - } else { - this.settings.readableLineLength = false; - this.saveData(this.settings); - console.log("Readable line length is off"); - } - document.body.classList.toggle("minimal-readable", this.settings.readableLineLength); - document.body.classList.toggle("minimal-readable-off", !this.settings.readableLineLength); - }; - this.registerEvent(app.vault.on("config-changed", settingsUpdate)); - settingsUpdate(); - const lightStyles = ["minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white"]; - const darkStyles = ["minimal-dark", "minimal-dark-tonal", "minimal-dark-black"]; - const imgGridStyles = ["img-grid", "img-grid-ratio", "img-nogrid"]; - const tableWidthStyles = ["table-100", "table-default-width", "table-wide", "table-max"]; - const iframeWidthStyles = ["iframe-100", "iframe-default-width", "iframe-wide", "iframe-max"]; - const imgWidthStyles = ["img-100", "img-default-width", "img-wide", "img-max"]; - const mapWidthStyles = ["map-100", "map-default-width", "map-wide", "map-max"]; - const chartWidthStyles = ["chart-100", "chart-default-width", "chart-wide", "chart-max"]; - const theme = ["moonstone", "obsidian"]; - this.addCommand({ - id: "increase-body-font-size", - name: "Increase body font size", - callback: () => { - this.settings.textNormal = this.settings.textNormal + 0.5; - this.saveData(this.settings); - this.setFontSize(); - } - }); - this.addCommand({ - id: "decrease-body-font-size", - name: "Decrease body font size", - callback: () => { - this.settings.textNormal = this.settings.textNormal - 0.5; - this.saveData(this.settings); - this.setFontSize(); - } - }); - this.addCommand({ - id: "toggle-minimal-dark-cycle", - name: "Cycle between dark mode styles", - callback: () => { - this.settings.darkStyle = darkStyles[(darkStyles.indexOf(this.settings.darkStyle) + 1) % darkStyles.length]; - this.saveData(this.settings); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-cycle", - name: "Cycle between light mode styles", - callback: () => { - this.settings.lightStyle = lightStyles[(lightStyles.indexOf(this.settings.lightStyle) + 1) % lightStyles.length]; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-hidden-borders", - name: "Toggle sidebar borders", - callback: () => { - this.settings.bordersToggle = !this.settings.bordersToggle; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-colorful-headings", - name: "Toggle colorful headings", - callback: () => { - this.settings.colorfulHeadings = !this.settings.colorfulHeadings; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-minimal-focus-mode", - name: "Toggle focus mode", - callback: () => { - this.settings.focusMode = !this.settings.focusMode; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-table-width", - name: "Cycle between table width options", - callback: () => { - this.settings.tableWidth = tableWidthStyles[(tableWidthStyles.indexOf(this.settings.tableWidth) + 1) % tableWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-image-width", - name: "Cycle between image width options", - callback: () => { - this.settings.imgWidth = imgWidthStyles[(imgWidthStyles.indexOf(this.settings.imgWidth) + 1) % imgWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-iframe-width", - name: "Cycle between iframe width options", - callback: () => { - this.settings.iframeWidth = iframeWidthStyles[(iframeWidthStyles.indexOf(this.settings.iframeWidth) + 1) % iframeWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-chart-width", - name: "Cycle between chart width options", - callback: () => { - this.settings.chartWidth = chartWidthStyles[(chartWidthStyles.indexOf(this.settings.chartWidth) + 1) % chartWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "cycle-minimal-map-width", - name: "Cycle between map width options", - callback: () => { - this.settings.mapWidth = mapWidthStyles[(mapWidthStyles.indexOf(this.settings.mapWidth) + 1) % mapWidthStyles.length]; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-minimal-img-grid", - name: "Toggle image grids", - callback: () => { - this.settings.imgGrid = !this.settings.imgGrid; - this.saveData(this.settings); - this.refresh(); - } - }); - this.addCommand({ - id: "toggle-minimal-switch", - name: "Switch between light and dark mode", - callback: () => { - this.settings.theme = theme[(theme.indexOf(this.settings.theme) + 1) % theme.length]; - this.saveData(this.settings); - this.updateTheme(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-default", - name: "Use light mode (default)", - callback: () => { - this.settings.lightStyle = "minimal-light"; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-white", - name: "Use light mode (all white)", - callback: () => { - this.settings.lightStyle = "minimal-light-white"; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-tonal", - name: "Use light mode (low contrast)", - callback: () => { - this.settings.lightStyle = "minimal-light-tonal"; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-light-contrast", - name: "Use light mode (high contrast)", - callback: () => { - this.settings.lightStyle = "minimal-light-contrast"; - this.saveData(this.settings); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dark-default", - name: "Use dark mode (default)", - callback: () => { - this.settings.darkStyle = "minimal-dark"; - this.saveData(this.settings); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dark-tonal", - name: "Use dark mode (low contrast)", - callback: () => { - this.settings.darkStyle = "minimal-dark-tonal"; - this.saveData(this.settings); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dark-black", - name: "Use dark mode (true black)", - callback: () => { - this.settings.darkStyle = "minimal-dark-black"; - this.saveData(this.settings); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-atom-light", - name: "Switch light color scheme to Atom (light)", - callback: () => { - this.settings.lightScheme = "minimal-atom-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-default-light", - name: "Switch light color scheme to default (light)", - callback: () => { - this.settings.lightScheme = "minimal-default-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-gruvbox-light", - name: "Switch light color scheme to Gruvbox (light)", - callback: () => { - this.settings.lightScheme = "minimal-gruvbox-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-everforest-light", - name: "Switch light color scheme to Everforest (light)", - callback: () => { - this.settings.lightScheme = "minimal-everforest-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-macos-light", - name: "Switch light color scheme to macOS (light)", - callback: () => { - this.settings.lightScheme = "minimal-macos-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-notion-light", - name: "Switch light color scheme to Notion (light)", - callback: () => { - this.settings.lightScheme = "minimal-notion-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-nord-light", - name: "Switch light color scheme to Nord (light)", - callback: () => { - this.settings.lightScheme = "minimal-nord-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-solarized-light", - name: "Switch light color scheme to Solarized (light)", - callback: () => { - this.settings.lightScheme = "minimal-solarized-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-things-light", - name: "Switch light color scheme to Things (light)", - callback: () => { - this.settings.lightScheme = "minimal-things-light"; - this.saveData(this.settings); - this.updateLightScheme(); - this.updateLightStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-atom-dark", - name: "Switch color scheme to Atom (dark)", - callback: () => { - this.settings.darkScheme = "minimal-atom-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dracula-dark", - name: "Switch color scheme to Dracula (dark)", - callback: () => { - this.settings.darkScheme = "minimal-dracula-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-default-dark", - name: "Switch dark color scheme to default (dark)", - callback: () => { - this.settings.darkScheme = "minimal-default-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-gruvbox-dark", - name: "Switch dark color scheme to Gruvbox (dark)", - callback: () => { - this.settings.darkScheme = "minimal-gruvbox-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-everforest-dark", - name: "Switch dark color scheme to Everforest (dark)", - callback: () => { - this.settings.darkScheme = "minimal-everforest-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-macos-dark", - name: "Switch light color scheme to macOS (dark)", - callback: () => { - this.settings.darkScheme = "minimal-macos-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-nord-dark", - name: "Switch dark color scheme to Nord (dark)", - callback: () => { - this.settings.darkScheme = "minimal-nord-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-notion-dark", - name: "Switch dark color scheme to Notion (dark)", - callback: () => { - this.settings.darkScheme = "minimal-notion-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-solarized-dark", - name: "Switch dark color scheme to Solarized (dark)", - callback: () => { - this.settings.darkScheme = "minimal-solarized-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-things-dark", - name: "Switch dark color scheme to Things (dark)", - callback: () => { - this.settings.darkScheme = "minimal-things-dark"; - this.saveData(this.settings); - this.updateDarkScheme(); - this.updateDarkStyle(); - } - }); - this.addCommand({ - id: "toggle-minimal-dev-block-width", - name: "Dev \u2014 Show block widths", - callback: () => { - this.settings.devBlockWidth = !this.settings.devBlockWidth; - this.saveData(this.settings); - this.refresh(); - } - }); - this.refresh(); - }); - } - onunload() { - console.log("Unloading Minimal Theme Settings plugin"); - } - loadSettings() { - return __async(this, null, function* () { - this.settings = Object.assign(DEFAULT_SETTINGS, yield this.loadData()); - }); - } - saveSettings() { - return __async(this, null, function* () { - yield this.saveData(this.settings); - }); - } - refresh() { - this.updateStyle(); - } - addStyle() { - const css = document.createElement("style"); - css.id = "minimal-theme"; - document.getElementsByTagName("head")[0].appendChild(css); - document.body.classList.add("minimal-theme"); - this.updateStyle(); - } - setFontSize() { - this.app.vault.setConfig("baseFontSize", this.settings.textNormal); - this.app.updateFontSize(); - } - updateStyle() { - this.removeStyle(); - document.body.addClass(this.settings.darkScheme); - document.body.addClass(this.settings.lightScheme); - document.body.classList.toggle("borders-none", !this.settings.bordersToggle); - document.body.classList.toggle("borders-title", this.settings.bordersTitle); - document.body.classList.toggle("colorful-headings", this.settings.colorfulHeadings); - document.body.classList.toggle("fancy-cursor", this.settings.fancyCursor); - document.body.classList.toggle("colorful-active", this.settings.colorfulActiveStates); - document.body.classList.toggle("minimal-focus-mode", this.settings.focusMode); - document.body.classList.toggle("links-int-on", this.settings.underlineInternal); - document.body.classList.toggle("links-ext-on", this.settings.underlineExternal); - document.body.classList.toggle("system-shade", this.settings.useSystemTheme); - document.body.classList.toggle("full-width-media", this.settings.fullWidthMedia); - document.body.classList.toggle("img-grid", this.settings.imgGrid); - document.body.classList.toggle("minimal-dev-block-width", this.settings.devBlockWidth); - document.body.classList.toggle("minimal-status-off", !this.settings.minimalStatus); - document.body.classList.toggle("full-file-names", !this.settings.trimNames); - document.body.classList.toggle("labeled-nav", this.settings.labeledNav); - document.body.classList.toggle("trim-cols", this.settings.trimCols); - document.body.classList.toggle("minimal-icons-off", !this.settings.minimalIcons); - document.body.classList.toggle("minimal-folding", this.settings.folding); - document.body.classList.toggle("frosted-sidebar", this.settings.frostedSidebar); - document.body.removeClass("table-wide", "table-max", "table-100", "table-default-width", "iframe-wide", "iframe-max", "iframe-100", "iframe-default-width", "img-wide", "img-max", "img-100", "img-default-width", "chart-wide", "chart-max", "chart-100", "chart-default-width", "map-wide", "map-max", "map-100", "map-default-width"); - document.body.addClass(this.settings.chartWidth); - document.body.addClass(this.settings.tableWidth); - document.body.addClass(this.settings.imgWidth); - document.body.addClass(this.settings.iframeWidth); - document.body.addClass(this.settings.mapWidth); - const el = document.getElementById("minimal-theme"); - if (!el) - throw "minimal-theme element not found!"; - else { - el.innerText = "body.minimal-theme{--font-normal:" + this.settings.textNormal + "px;--font-small:" + this.settings.textSmall + "px;--line-height:" + this.settings.lineHeight + ";--line-width:" + this.settings.lineWidth + "rem;--line-width-wide:" + this.settings.lineWidthWide + "rem;--max-width:" + this.settings.maxWidth + "%;--max-col-width:" + this.settings.maxColWidth + ";--font-editor-override:" + this.settings.editorFont + ";--accent-h:" + this.settings.accentHue + ";--accent-s:" + this.settings.accentSat + "%;}"; - } - } - refreshSystemTheme() { - const isDarkMode = window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches; - if (isDarkMode && this.settings.useSystemTheme) { - console.log("Dark mode active"); - this.updateDarkStyle(); - } else if (this.settings.useSystemTheme) { - console.log("Light mode active"); - this.updateLightStyle(); - } - } - updateDarkStyle() { - document.body.removeClass("theme-light", "minimal-dark", "minimal-dark-tonal", "minimal-dark-black"); - document.body.addClass(this.settings.darkStyle); - this.app.setTheme("obsidian"); - this.app.vault.setConfig("theme", "obsidian"); - this.app.workspace.trigger("css-change"); - } - updateLightStyle() { - document.body.removeClass("theme-dark", "minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white"); - document.body.addClass(this.settings.lightStyle); - this.app.setTheme("moonstone"); - this.app.vault.setConfig("theme", "moonstone"); - this.app.workspace.trigger("css-change"); - } - updateDarkScheme() { - document.body.removeClass("minimal-atom-dark", "minimal-default-dark", "minimal-dracula-dark", "minimal-everforest-dark", "minimal-gruvbox-dark", "minimal-macos-dark", "minimal-nord-dark", "minimal-notion-dark", "minimal-solarized-dark", "minimal-things-dark"); - document.body.addClass(this.settings.darkScheme); - } - updateLightScheme() { - document.body.removeClass("minimal-atom-light", "minimal-default-light", "minimal-everforest-light", "minimal-gruvbox-light", "minimal-macos-light", "minimal-nord-light", "minimal-notion-light", "minimal-solarized-light", "minimal-things-light"); - document.body.addClass(this.settings.lightScheme); - } - updateTheme() { - this.app.setTheme(this.settings.theme); - this.app.vault.setConfig("theme", this.settings.theme); - this.app.workspace.trigger("css-change"); - } - removeStyle() { - document.body.removeClass("minimal-light", "minimal-light-tonal", "minimal-light-contrast", "minimal-light-white", "minimal-dark", "minimal-dark-tonal", "minimal-dark-black"); - document.body.addClass(this.settings.lightStyle, this.settings.darkStyle); - } -}; -var DEFAULT_SETTINGS = { - theme: "moonstone", - accentHue: 201, - accentSat: 17, - lightStyle: "minimal-light", - darkStyle: "minimal-dark", - lightScheme: "minimal-default-light", - darkScheme: "minimal-default-dark", - editorFont: "", - lineHeight: 1.5, - lineWidth: 40, - lineWidthWide: 50, - maxWidth: 88, - trimCols: true, - maxColWidth: "18em", - textNormal: 16, - textSmall: 13, - imgGrid: false, - imgWidth: "img-default-width", - tableWidth: "table-default-width", - iframeWidth: "iframe-default-width", - mapWidth: "map-default-width", - chartWidth: "chart-default-width", - colorfulHeadings: false, - minimalIcons: true, - colorfulActiveStates: false, - fancyCursor: false, - frostedSidebar: true, - trimNames: true, - labeledNav: false, - fullWidthMedia: true, - bordersToggle: true, - bordersTitle: false, - minimalStatus: true, - focusMode: false, - underlineInternal: true, - underlineExternal: true, - useSystemTheme: false, - folding: true, - lineNumbers: false, - readableLineLength: false, - devBlockWidth: false -}; -var MinimalSettingTab = class extends import_obsidian.PluginSettingTab { - constructor(app2, plugin) { - super(app2, plugin); - this.plugin = plugin; - } - display() { - let { containerEl } = this; - containerEl.empty(); - containerEl.createEl("h3", { text: "Minimal Theme Settings" }); - const mainDesc = containerEl.createEl("p"); - mainDesc.appendText("Need help? Explore the "); - mainDesc.appendChild(createEl("a", { - text: "Minimal documentation", - href: "https://minimal.guide" - })); - mainDesc.appendText(" or visit the "); - mainDesc.appendChild(createEl("strong", { - text: "#minimal" - })); - mainDesc.appendText(" channel in the official Obsidian Discord. You can support continued development by "); - mainDesc.appendChild(createEl("a", { - text: "buying me a coffee", - href: "https://www.buymeacoffee.com/kepano" - })); - mainDesc.appendText(" \u2615"); - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Color scheme" }); - const colorDesc = containerEl.createEl("p"); - colorDesc.appendChild(createEl("span", { - text: "To create a completely custom color scheme use " - })); - colorDesc.appendChild(createEl("a", { - text: "Style Settings plugin", - href: "obsidian://show-plugin?id=obsidian-style-settings" - })); - colorDesc.appendText("."); - new import_obsidian.Setting(containerEl).setName("Light mode color scheme").setDesc("Preset color options for light mode").addDropdown((dropdown) => dropdown.addOption("minimal-default-light", "Default").addOption("minimal-atom-light", "Atom").addOption("minimal-everforest-light", "Everforest").addOption("minimal-gruvbox-light", "Gruvbox").addOption("minimal-macos-light", "macOS").addOption("minimal-nord-light", "Nord").addOption("minimal-notion-light", "Notion").addOption("minimal-solarized-light", "Solarized").addOption("minimal-things-light", "Things").setValue(this.plugin.settings.lightScheme).onChange((value) => { - this.plugin.settings.lightScheme = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.updateLightScheme(); - })); - new import_obsidian.Setting(containerEl).setName("Light mode background contrast").setDesc("Level of contrast between sidebar and main content").addDropdown((dropdown) => dropdown.addOption("minimal-light", "Default").addOption("minimal-light-white", "All white").addOption("minimal-light-tonal", "Low contrast").addOption("minimal-light-contrast", "High contrast").setValue(this.plugin.settings.lightStyle).onChange((value) => { - this.plugin.settings.lightStyle = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.removeStyle(); - })); - new import_obsidian.Setting(containerEl).setName("Dark mode color scheme").setDesc("Preset colors options for dark mode").addDropdown((dropdown) => dropdown.addOption("minimal-default-dark", "Default").addOption("minimal-atom-dark", "Atom").addOption("minimal-dracula-dark", "Dracula").addOption("minimal-everforest-dark", "Everforest").addOption("minimal-gruvbox-dark", "Gruvbox").addOption("minimal-macos-dark", "macOS").addOption("minimal-nord-dark", "Nord").addOption("minimal-notion-dark", "Notion").addOption("minimal-solarized-dark", "Solarized").addOption("minimal-things-dark", "Things").setValue(this.plugin.settings.darkScheme).onChange((value) => { - this.plugin.settings.darkScheme = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.updateDarkScheme(); - })); - new import_obsidian.Setting(containerEl).setName("Dark mode background contrast").setDesc("Level of contrast between sidebar and main content").addDropdown((dropdown) => dropdown.addOption("minimal-dark", "Default").addOption("minimal-dark-tonal", "Low contrast").addOption("minimal-dark-black", "True black").setValue(this.plugin.settings.darkStyle).onChange((value) => { - this.plugin.settings.darkStyle = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.removeStyle(); - })); - new import_obsidian.Setting(containerEl).setName("Accent color hue").setDesc("For links and interactive elements in default color scheme").addSlider((slider) => slider.setLimits(0, 360, 1).setValue(this.plugin.settings.accentHue).onChange((value) => { - this.plugin.settings.accentHue = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Accent color saturation").setDesc("For links and interactive elements in default color scheme").addSlider((slider) => slider.setLimits(0, 100, 1).setValue(this.plugin.settings.accentSat).onChange((value) => { - this.plugin.settings.accentSat = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - containerEl.createEl("br"); - containerEl.createEl("h3"); - containerEl.createEl("h3", { text: "Features" }); - new import_obsidian.Setting(containerEl).setName("Match system setting for light or dark mode").setDesc("Automatically switch based on your OS setting").addToggle((toggle) => toggle.setValue(this.plugin.settings.useSystemTheme).onChange((value) => { - this.plugin.settings.useSystemTheme = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refreshSystemTheme(); - })); - new import_obsidian.Setting(containerEl).setName("Text labels for primary navigation").setDesc("Navigation in left sidebar uses text labels (see documentation for localization support)").addToggle((toggle) => toggle.setValue(this.plugin.settings.labeledNav).onChange((value) => { - this.plugin.settings.labeledNav = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Colorful cursor").setDesc("Editor cursor uses your accent color").addToggle((toggle) => toggle.setValue(this.plugin.settings.fancyCursor).onChange((value) => { - this.plugin.settings.fancyCursor = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Colorful active states").setDesc("Active file and menu items use your accent color").addToggle((toggle) => toggle.setValue(this.plugin.settings.colorfulActiveStates).onChange((value) => { - this.plugin.settings.colorfulActiveStates = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Colorful headings").setDesc("Headings use a different color for each size").addToggle((toggle) => toggle.setValue(this.plugin.settings.colorfulHeadings).onChange((value) => { - this.plugin.settings.colorfulHeadings = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Minimal status bar").setDesc("Use narrow status bar").addToggle((toggle) => toggle.setValue(this.plugin.settings.minimalStatus).onChange((value) => { - this.plugin.settings.minimalStatus = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Trim file names in sidebars").setDesc("Use ellipses to fit file names on a single line").addToggle((toggle) => toggle.setValue(this.plugin.settings.trimNames).onChange((value) => { - this.plugin.settings.trimNames = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Translucent sidebar").setDesc('Use frosted glass effect for sidebar when "Translucent window" is on in Appearance settings').addToggle((toggle) => toggle.setValue(this.plugin.settings.frostedSidebar).onChange((value) => { - this.plugin.settings.frostedSidebar = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Sidebar borders").setDesc("Display divider lines between sidebar elements").addToggle((toggle) => toggle.setValue(this.plugin.settings.bordersToggle).onChange((value) => { - this.plugin.settings.bordersToggle = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Title bar border").setDesc("Display border below pane title (if borders are not hidden)").addToggle((toggle) => toggle.setValue(this.plugin.settings.bordersTitle).onChange((value) => { - this.plugin.settings.bordersTitle = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Focus mode").setDesc("Hide title bar and status bar, hover to display (can be toggled with hotkey)").addToggle((toggle) => toggle.setValue(this.plugin.settings.focusMode).onChange((value) => { - this.plugin.settings.focusMode = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Underline internal links").setDesc("Show underlines on internal links").addToggle((toggle) => toggle.setValue(this.plugin.settings.underlineInternal).onChange((value) => { - this.plugin.settings.underlineInternal = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Underline external links").setDesc("Show underlines on external links").addToggle((toggle) => toggle.setValue(this.plugin.settings.underlineExternal).onChange((value) => { - this.plugin.settings.underlineExternal = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Custom icons").setDesc("Replace default icons with Minimal set").addToggle((toggle) => toggle.setValue(this.plugin.settings.minimalIcons).onChange((value) => { - this.plugin.settings.minimalIcons = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Maximize media").setDesc("Images and videos fill the width of the line").addToggle((toggle) => toggle.setValue(this.plugin.settings.fullWidthMedia).onChange((value) => { - this.plugin.settings.fullWidthMedia = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - containerEl.createEl("br"); - containerEl.createEl("h3"); - containerEl.createEl("h3", { text: "Layout" }); - const layoutDesc = containerEl.createEl("p"); - layoutDesc.appendChild(createEl("span", { - text: "The following options require the " - })); - layoutDesc.appendChild(createEl("a", { - text: "Contextual Typography plugin", - href: "obsidian://show-plugin?id=obsidian-contextual-typography" - })); - layoutDesc.appendText(". These options can also be defined on a per-file basis using YAML, "); - layoutDesc.appendChild(createEl("a", { - text: "see documentation", - href: "https://minimal.guide/Features/Block+width" - })); - layoutDesc.appendText(" for details."); - new import_obsidian.Setting(containerEl).setName("Image grids").setDesc("Turn consecutive images into columns \u2014 to make a new row, add an extra line break between images").addToggle((toggle) => toggle.setValue(this.plugin.settings.imgGrid).onChange((value) => { - this.plugin.settings.imgGrid = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Chart width").setDesc("Default width for chart blocks").addDropdown((dropdown) => dropdown.addOption("chart-default-width", "Default").addOption("chart-wide", "Wide line width").addOption("chart-max", "Maximum line width").addOption("chart-100", "100% pane width").setValue(this.plugin.settings.chartWidth).onChange((value) => { - this.plugin.settings.chartWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Iframe width").setDesc("Default width for iframe blocks").addDropdown((dropdown) => dropdown.addOption("iframe-default-width", "Default").addOption("iframe-wide", "Wide line width").addOption("iframe-max", "Maximum line width").addOption("iframe-100", "100% pane width").setValue(this.plugin.settings.iframeWidth).onChange((value) => { - this.plugin.settings.iframeWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Image width").setDesc("Default width for image blocks").addDropdown((dropdown) => dropdown.addOption("img-default-width", "Default").addOption("img-wide", "Wide line width").addOption("img-max", "Maximum line width").addOption("img-100", "100% pane width").setValue(this.plugin.settings.imgWidth).onChange((value) => { - this.plugin.settings.imgWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Map width").setDesc("Default width for map blocks").addDropdown((dropdown) => dropdown.addOption("map-default-width", "Default").addOption("map-wide", "Wide line width").addOption("map-max", "Maximum line width").addOption("map-100", "100% pane width").setValue(this.plugin.settings.mapWidth).onChange((value) => { - this.plugin.settings.mapWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Table width").setDesc("Default width for table and Dataview blocks").addDropdown((dropdown) => dropdown.addOption("table-default-width", "Default").addOption("table-wide", "Wide line width").addOption("table-max", "Maximum line width").addOption("table-100", "100% pane width").setValue(this.plugin.settings.tableWidth).onChange((value) => { - this.plugin.settings.tableWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - containerEl.createEl("br"); - containerEl.createEl("h3"); - containerEl.createEl("h3", { text: "Tables" }); - new import_obsidian.Setting(containerEl).setName("Trim Dataview columns").setDesc("Disables word wrapping in table cells, and trims long text").addToggle((toggle) => toggle.setValue(this.plugin.settings.trimCols).onChange((value) => { - this.plugin.settings.trimCols = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Dataview maximum column width").setDesc("Maximum width for Dataview columns, accepts any CSS width value").addText((text) => text.setPlaceholder("").setValue((this.plugin.settings.maxColWidth || "") + "").onChange((value) => { - this.plugin.settings.maxColWidth = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - containerEl.createEl("br"); - containerEl.createEl("h3"); - containerEl.createEl("h3", { text: "Typography" }); - new import_obsidian.Setting(containerEl).setName("Body font size").setDesc("Used for the main text (default 16)").addText((text) => text.setPlaceholder("16").setValue((this.plugin.settings.textNormal || "") + "").onChange((value) => { - this.plugin.settings.textNormal = parseFloat(value); - this.plugin.saveData(this.plugin.settings); - this.plugin.setFontSize(); - })); - new import_obsidian.Setting(containerEl).setName("Sidebar font size").setDesc("Used for text in the sidebars (default 13)").addText((text) => text.setPlaceholder("13").setValue((this.plugin.settings.textSmall || "") + "").onChange((value) => { - this.plugin.settings.textSmall = parseFloat(value); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Line height").setDesc("Line height of text (default 1.5)").addText((text) => text.setPlaceholder("1.5").setValue((this.plugin.settings.lineHeight || "") + "").onChange((value) => { - this.plugin.settings.lineHeight = parseFloat(value); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Normal line length").setDesc("Number of characters per line (default 40)").addText((text) => text.setPlaceholder("40").setValue((this.plugin.settings.lineWidth || "") + "").onChange((value) => { - this.plugin.settings.lineWidth = parseInt(value.trim()); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Wide line length").setDesc("Number of characters per line for wide elements (default 50)").addText((text) => text.setPlaceholder("50").setValue((this.plugin.settings.lineWidthWide || "") + "").onChange((value) => { - this.plugin.settings.lineWidthWide = parseInt(value.trim()); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - new import_obsidian.Setting(containerEl).setName("Maximum line length %").setDesc("Percentage of space inside a pane that a line can fill (default 88)").addText((text) => text.setPlaceholder("88").setValue((this.plugin.settings.maxWidth || "") + "").onChange((value) => { - this.plugin.settings.maxWidth = parseInt(value.trim()); - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - containerEl.createEl("br"); - containerEl.createEl("h3"); - containerEl.createEl("h3", { text: "Editor font" }); - containerEl.createEl("p", { text: "Overrides the text font defined in Obsidian Appearance settings when in edit mode" }); - new import_obsidian.Setting(containerEl).setName("Editor font").setDesc("Use the exact name of the font as it appears on your system").addText((text) => text.setPlaceholder("").setValue((this.plugin.settings.editorFont || "") + "").onChange((value) => { - this.plugin.settings.editorFont = value; - this.plugin.saveData(this.plugin.settings); - this.plugin.refresh(); - })); - containerEl.createEl("br"); - containerEl.createEl("h3", { text: "Support development" }); - const donateText = containerEl.createEl("p"); - donateText.appendChild(createEl("span", { - text: "If you enjoy Minimal, consider " - })); - donateText.appendChild(createEl("a", { - text: "buying me a coffee", - href: "https://www.buymeacoffee.com/kepano" - })); - donateText.appendChild(createEl("span", { - text: ", and following me on Twitter " - })); - donateText.appendChild(createEl("a", { - text: "@kepano", - href: "https://twitter.com/kepano" - })); - const div = containerEl.createEl("div", { - cls: "minimal-donation" - }); - const parser = new DOMParser(); - div.appendChild(createDonateButton("https://www.buymeacoffee.com/kepano", parser.parseFromString(buyMeACoffee, "text/xml").documentElement)); - } -}; -var createDonateButton = (link, img) => { - const a = document.createElement("a"); - a.setAttribute("href", link); - a.addClass("minimal-donate-button"); - a.appendChild(img); - return a; -}; -var buyMeACoffee = ` - - - - - - - - - - - - - - - - - - - - - -`; -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgQXBwLCBXb3Jrc3BhY2UsIE1vZGFsLCBOb3RpY2UsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gJ29ic2lkaWFuJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1pbmltYWxUaGVtZSBleHRlbmRzIFBsdWdpbiB7XHJcbiAgc2V0dGluZ3M6IE1pbmltYWxTZXR0aW5ncztcclxuXHJcbiAgYXN5bmMgb25sb2FkKCkge1xyXG5cclxuICBhd2FpdCB0aGlzLmxvYWRTZXR0aW5ncygpO1xyXG5cclxuICB0aGlzLmFkZFNldHRpbmdUYWIobmV3IE1pbmltYWxTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XHJcblxyXG4gIHRoaXMuYWRkU3R5bGUoKTtcclxuXHJcbiAgLy8gV2F0Y2ggZm9yIHN5c3RlbSBjaGFuZ2VzIHRvIGNvbG9yIHRoZW1lIFxyXG5cclxuICBsZXQgbWVkaWEgPSB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpO1xyXG5cclxuICBsZXQgdXBkYXRlU3lzdGVtVGhlbWUgPSAoKSA9PiB7XHJcbiAgICBpZiAobWVkaWEubWF0Y2hlcyAmJiB0aGlzLnNldHRpbmdzLnVzZVN5c3RlbVRoZW1lKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdEYXJrIG1vZGUgYWN0aXZlJyk7XHJcbiAgICAgIHRoaXMudXBkYXRlRGFya1N0eWxlKClcclxuXHJcbiAgICB9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MudXNlU3lzdGVtVGhlbWUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0xpZ2h0IG1vZGUgYWN0aXZlJyk7XHJcbiAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpXHJcbiAgICB9XHJcbiAgfVxyXG4gIG1lZGlhLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZVN5c3RlbVRoZW1lKTtcclxuXHJcbiAgLy8gUmVtb3ZlIHN5c3RlbSB0aGVtZSBsaXN0ZW5lciB3aGVuIHdlIHVubG9hZFxyXG5cclxuICB0aGlzLnJlZ2lzdGVyKCgpID0+IG1lZGlhLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHVwZGF0ZVN5c3RlbVRoZW1lKSk7XHJcblxyXG4gIHVwZGF0ZVN5c3RlbVRoZW1lKCk7XHJcblxyXG4gIC8vIENoZWNrIHN0YXRlIG9mIE9ic2lkaWFuIFNldHRpbmdzXHJcblxyXG4gIGxldCBzZXR0aW5nc1VwZGF0ZSA9ICgpID0+IHtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGNvbnN0IGZvbnRTaXplID0gdGhpcy5hcHAudmF1bHQuZ2V0Q29uZmlnKCdiYXNlRm9udFNpemUnKTtcclxuICAgIHRoaXMuc2V0dGluZ3MudGV4dE5vcm1hbCA9IGZvbnRTaXplO1xyXG5cclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ2ZvbGRIZWFkaW5nJykpIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5mb2xkaW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgY29uc29sZS5sb2coJ0ZvbGRpbmcgaXMgb24nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MuZm9sZGluZyA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICBjb25zb2xlLmxvZygnRm9sZGluZyBpcyBvZmYnKTtcclxuICAgIH1cclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnbWluaW1hbC1mb2xkaW5nJywgdGhpcy5zZXR0aW5ncy5mb2xkaW5nKTtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIGlmICh0aGlzLmFwcC52YXVsdC5nZXRDb25maWcoJ3Nob3dMaW5lTnVtYmVyJykpIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5saW5lTnVtYmVycyA9IHRydWU7XHJcbiAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdMaW5lIG51bWJlcnMgYXJlIG9uJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNldHRpbmdzLmxpbmVOdW1iZXJzID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdMaW5lIG51bWJlcnMgYXJlIG9mZicpO1xyXG4gICAgfVxyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWxpbmUtbnVtcycsIHRoaXMuc2V0dGluZ3MubGluZU51bWJlcnMpO1xyXG4gICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgaWYgKHRoaXMuYXBwLnZhdWx0LmdldENvbmZpZygncmVhZGFibGVMaW5lTGVuZ3RoJykpIHtcclxuICAgICAgdGhpcy5zZXR0aW5ncy5yZWFkYWJsZUxpbmVMZW5ndGggPSB0cnVlO1xyXG4gICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICBjb25zb2xlLmxvZygnUmVhZGFibGUgbGluZSBsZW5ndGggaXMgb24nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2V0dGluZ3MucmVhZGFibGVMaW5lTGVuZ3RoID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdSZWFkYWJsZSBsaW5lIGxlbmd0aCBpcyBvZmYnKTtcclxuICAgIH1cclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnbWluaW1hbC1yZWFkYWJsZScsIHRoaXMuc2V0dGluZ3MucmVhZGFibGVMaW5lTGVuZ3RoKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnbWluaW1hbC1yZWFkYWJsZS1vZmYnLCAhdGhpcy5zZXR0aW5ncy5yZWFkYWJsZUxpbmVMZW5ndGgpO1xyXG4gIH1cclxuICBcclxuICAvLyBAdHMtaWdub3JlXHJcbiAgdGhpcy5yZWdpc3RlckV2ZW50KGFwcC52YXVsdC5vbignY29uZmlnLWNoYW5nZWQnLCBzZXR0aW5nc1VwZGF0ZSkpO1xyXG5cclxuICBzZXR0aW5nc1VwZGF0ZSgpO1xyXG5cclxuICBjb25zdCBsaWdodFN0eWxlcyA9IFsnbWluaW1hbC1saWdodCcsICdtaW5pbWFsLWxpZ2h0LXRvbmFsJywgJ21pbmltYWwtbGlnaHQtY29udHJhc3QnLCAnbWluaW1hbC1saWdodC13aGl0ZSddO1xyXG4gIGNvbnN0IGRhcmtTdHlsZXMgPSBbJ21pbmltYWwtZGFyaycsICdtaW5pbWFsLWRhcmstdG9uYWwnLCAnbWluaW1hbC1kYXJrLWJsYWNrJ107XHJcbiAgY29uc3QgaW1nR3JpZFN0eWxlcyA9IFsnaW1nLWdyaWQnLCdpbWctZ3JpZC1yYXRpbycsJ2ltZy1ub2dyaWQnXTtcclxuICBjb25zdCB0YWJsZVdpZHRoU3R5bGVzID0gWyd0YWJsZS0xMDAnLCd0YWJsZS1kZWZhdWx0LXdpZHRoJywndGFibGUtd2lkZScsJ3RhYmxlLW1heCddO1xyXG4gIGNvbnN0IGlmcmFtZVdpZHRoU3R5bGVzID0gWydpZnJhbWUtMTAwJywnaWZyYW1lLWRlZmF1bHQtd2lkdGgnLCdpZnJhbWUtd2lkZScsJ2lmcmFtZS1tYXgnXTtcclxuICBjb25zdCBpbWdXaWR0aFN0eWxlcyA9IFsnaW1nLTEwMCcsJ2ltZy1kZWZhdWx0LXdpZHRoJywnaW1nLXdpZGUnLCdpbWctbWF4J107XHJcbiAgY29uc3QgbWFwV2lkdGhTdHlsZXMgPSBbJ21hcC0xMDAnLCdtYXAtZGVmYXVsdC13aWR0aCcsJ21hcC13aWRlJywnbWFwLW1heCddO1xyXG4gIGNvbnN0IGNoYXJ0V2lkdGhTdHlsZXMgPSBbJ2NoYXJ0LTEwMCcsJ2NoYXJ0LWRlZmF1bHQtd2lkdGgnLCdjaGFydC13aWRlJywnY2hhcnQtbWF4J107XHJcbiAgY29uc3QgdGhlbWUgPSBbJ21vb25zdG9uZScsICdvYnNpZGlhbiddO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ2luY3JlYXNlLWJvZHktZm9udC1zaXplJyxcclxuICAgICAgbmFtZTogJ0luY3JlYXNlIGJvZHkgZm9udCBzaXplJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnRleHROb3JtYWwgPSB0aGlzLnNldHRpbmdzLnRleHROb3JtYWwgKyAwLjU7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnNldEZvbnRTaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ2RlY3JlYXNlLWJvZHktZm9udC1zaXplJyxcclxuICAgICAgbmFtZTogJ0RlY3JlYXNlIGJvZHkgZm9udCBzaXplJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLnRleHROb3JtYWwgPSB0aGlzLnNldHRpbmdzLnRleHROb3JtYWwgLSAwLjU7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnNldEZvbnRTaXplKCk7XHJcbiAgICAgIH1cclxuICAgIH0pOyBcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kYXJrLWN5Y2xlJyxcclxuICAgICAgbmFtZTogJ0N5Y2xlIGJldHdlZW4gZGFyayBtb2RlIHN0eWxlcycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU3R5bGUgPSBkYXJrU3R5bGVzWyhkYXJrU3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5kYXJrU3R5bGUpICsgMSkgJSBkYXJrU3R5bGVzLmxlbmd0aF07XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTsgIFxyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWxpZ2h0LWN5Y2xlJyxcclxuICAgICAgbmFtZTogJ0N5Y2xlIGJldHdlZW4gbGlnaHQgbW9kZSBzdHlsZXMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSA9IGxpZ2h0U3R5bGVzWyhsaWdodFN0eWxlcy5pbmRleE9mKHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSkgKyAxKSAlIGxpZ2h0U3R5bGVzLmxlbmd0aF07XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLWhpZGRlbi1ib3JkZXJzJyxcclxuICAgICAgbmFtZTogJ1RvZ2dsZSBzaWRlYmFyIGJvcmRlcnMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuYm9yZGVyc1RvZ2dsZSA9ICF0aGlzLnNldHRpbmdzLmJvcmRlcnNUb2dnbGU7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1jb2xvcmZ1bC1oZWFkaW5ncycsXHJcbiAgICAgIG5hbWU6ICdUb2dnbGUgY29sb3JmdWwgaGVhZGluZ3MnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuY29sb3JmdWxIZWFkaW5ncyA9ICF0aGlzLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3M7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZm9jdXMtbW9kZScsXHJcbiAgICAgIG5hbWU6ICdUb2dnbGUgZm9jdXMgbW9kZScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5mb2N1c01vZGUgPSAhdGhpcy5zZXR0aW5ncy5mb2N1c01vZGU7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnY3ljbGUtbWluaW1hbC10YWJsZS13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdDeWNsZSBiZXR3ZWVuIHRhYmxlIHdpZHRoIG9wdGlvbnMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MudGFibGVXaWR0aCA9IHRhYmxlV2lkdGhTdHlsZXNbKHRhYmxlV2lkdGhTdHlsZXMuaW5kZXhPZih0aGlzLnNldHRpbmdzLnRhYmxlV2lkdGgpICsgMSkgJSB0YWJsZVdpZHRoU3R5bGVzLmxlbmd0aF07XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnY3ljbGUtbWluaW1hbC1pbWFnZS13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdDeWNsZSBiZXR3ZWVuIGltYWdlIHdpZHRoIG9wdGlvbnMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuaW1nV2lkdGggPSBpbWdXaWR0aFN0eWxlc1soaW1nV2lkdGhTdHlsZXMuaW5kZXhPZih0aGlzLnNldHRpbmdzLmltZ1dpZHRoKSArIDEpICUgaW1nV2lkdGhTdHlsZXMubGVuZ3RoXTtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICdjeWNsZS1taW5pbWFsLWlmcmFtZS13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdDeWNsZSBiZXR3ZWVuIGlmcmFtZSB3aWR0aCBvcHRpb25zJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmlmcmFtZVdpZHRoID0gaWZyYW1lV2lkdGhTdHlsZXNbKGlmcmFtZVdpZHRoU3R5bGVzLmluZGV4T2YodGhpcy5zZXR0aW5ncy5pZnJhbWVXaWR0aCkgKyAxKSAlIGlmcmFtZVdpZHRoU3R5bGVzLmxlbmd0aF07XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnY3ljbGUtbWluaW1hbC1jaGFydC13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdDeWNsZSBiZXR3ZWVuIGNoYXJ0IHdpZHRoIG9wdGlvbnMnLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuY2hhcnRXaWR0aCA9IGNoYXJ0V2lkdGhTdHlsZXNbKGNoYXJ0V2lkdGhTdHlsZXMuaW5kZXhPZih0aGlzLnNldHRpbmdzLmNoYXJ0V2lkdGgpICsgMSkgJSBjaGFydFdpZHRoU3R5bGVzLmxlbmd0aF07XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnJlZnJlc2goKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAnY3ljbGUtbWluaW1hbC1tYXAtd2lkdGgnLFxyXG4gICAgICBuYW1lOiAnQ3ljbGUgYmV0d2VlbiBtYXAgd2lkdGggb3B0aW9ucycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5tYXBXaWR0aCA9IG1hcFdpZHRoU3R5bGVzWyhtYXBXaWR0aFN0eWxlcy5pbmRleE9mKHRoaXMuc2V0dGluZ3MubWFwV2lkdGgpICsgMSkgJSBtYXBXaWR0aFN0eWxlcy5sZW5ndGhdO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWltZy1ncmlkJyxcclxuICAgICAgbmFtZTogJ1RvZ2dsZSBpbWFnZSBncmlkcycsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5pbWdHcmlkID0gIXRoaXMuc2V0dGluZ3MuaW1nR3JpZDtcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMucmVmcmVzaCgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1zd2l0Y2gnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGJldHdlZW4gbGlnaHQgYW5kIGRhcmsgbW9kZScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy50aGVtZSA9IHRoZW1lWyh0aGVtZS5pbmRleE9mKHRoaXMuc2V0dGluZ3MudGhlbWUpICsgMSkgJSB0aGVtZS5sZW5ndGhdO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVUaGVtZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1saWdodC1kZWZhdWx0JyxcclxuICAgICAgbmFtZTogJ1VzZSBsaWdodCBtb2RlIChkZWZhdWx0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFN0eWxlID0gJ21pbmltYWwtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWxpZ2h0LXdoaXRlJyxcclxuICAgICAgbmFtZTogJ1VzZSBsaWdodCBtb2RlIChhbGwgd2hpdGUpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U3R5bGUgPSAnbWluaW1hbC1saWdodC13aGl0ZSc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtbGlnaHQtdG9uYWwnLFxyXG4gICAgICBuYW1lOiAnVXNlIGxpZ2h0IG1vZGUgKGxvdyBjb250cmFzdCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSA9ICdtaW5pbWFsLWxpZ2h0LXRvbmFsJztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1saWdodC1jb250cmFzdCcsXHJcbiAgICAgIG5hbWU6ICdVc2UgbGlnaHQgbW9kZSAoaGlnaCBjb250cmFzdCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSA9ICdtaW5pbWFsLWxpZ2h0LWNvbnRyYXN0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kYXJrLWRlZmF1bHQnLFxyXG4gICAgICBuYW1lOiAnVXNlIGRhcmsgbW9kZSAoZGVmYXVsdCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1N0eWxlID0gJ21pbmltYWwtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kYXJrLXRvbmFsJyxcclxuICAgICAgbmFtZTogJ1VzZSBkYXJrIG1vZGUgKGxvdyBjb250cmFzdCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1N0eWxlID0gJ21pbmltYWwtZGFyay10b25hbCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kYXJrLWJsYWNrJyxcclxuICAgICAgbmFtZTogJ1VzZSBkYXJrIG1vZGUgKHRydWUgYmxhY2spJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTdHlsZSA9ICdtaW5pbWFsLWRhcmstYmxhY2snO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtYXRvbS1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIEF0b20gKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLWF0b20tbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kZWZhdWx0LWxpZ2h0JyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gZGVmYXVsdCAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtZGVmYXVsdC1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWdydXZib3gtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBHcnV2Ym94IChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1ncnV2Ym94LWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZXZlcmZvcmVzdC1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIEV2ZXJmb3Jlc3QgKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLWV2ZXJmb3Jlc3QtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1tYWNvcy1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIG1hY09TIChsaWdodCknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUgPSAnbWluaW1hbC1tYWNvcy1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLW5vdGlvbi1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIE5vdGlvbiAobGlnaHQpJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmxpZ2h0U2NoZW1lID0gJ21pbmltYWwtbm90aW9uLWxpZ2h0JztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtbm9yZC1saWdodCcsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggbGlnaHQgY29sb3Igc2NoZW1lIHRvIE5vcmQgKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLW5vcmQtbGlnaHQnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFNjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlTGlnaHRTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1zb2xhcml6ZWQtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBTb2xhcml6ZWQgKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLXNvbGFyaXplZC1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC10aGluZ3MtbGlnaHQnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGxpZ2h0IGNvbG9yIHNjaGVtZSB0byBUaGluZ3MgKGxpZ2h0KScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5saWdodFNjaGVtZSA9ICdtaW5pbWFsLXRoaW5ncy1saWdodCc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVMaWdodFN0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWF0b20tZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggY29sb3Igc2NoZW1lIHRvIEF0b20gKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1hdG9tLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZHJhY3VsYS1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBjb2xvciBzY2hlbWUgdG8gRHJhY3VsYSAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWRyYWN1bGEtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1kZWZhdWx0LWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIGRlZmF1bHQgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1kZWZhdWx0LWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtZ3J1dmJveC1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBHcnV2Ym94IChkYXJrKScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU2NoZW1lID0gJ21pbmltYWwtZ3J1dmJveC1kYXJrJztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGFya1NjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGFya1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWV2ZXJmb3Jlc3QtZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gRXZlcmZvcmVzdCAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLWV2ZXJmb3Jlc3QtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1tYWNvcy1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBsaWdodCBjb2xvciBzY2hlbWUgdG8gbWFjT1MgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC1tYWNvcy1kYXJrJztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGFya1NjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGFya1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLW5vcmQtZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gTm9yZCAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLW5vcmQtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgdGhpcy5hZGRDb21tYW5kKHtcclxuICAgICAgaWQ6ICd0b2dnbGUtbWluaW1hbC1ub3Rpb24tZGFyaycsXHJcbiAgICAgIG5hbWU6ICdTd2l0Y2ggZGFyayBjb2xvciBzY2hlbWUgdG8gTm90aW9uIChkYXJrKScsXHJcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5ncy5kYXJrU2NoZW1lID0gJ21pbmltYWwtbm90aW9uLWRhcmsnO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU2NoZW1lKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVEYXJrU3R5bGUoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gIHRoaXMuYWRkQ29tbWFuZCh7XHJcbiAgICAgIGlkOiAndG9nZ2xlLW1pbmltYWwtc29sYXJpemVkLWRhcmsnLFxyXG4gICAgICBuYW1lOiAnU3dpdGNoIGRhcmsgY29sb3Igc2NoZW1lIHRvIFNvbGFyaXplZCAoZGFyayknLFxyXG4gICAgICBjYWxsYmFjazogKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSA9ICdtaW5pbWFsLXNvbGFyaXplZC1kYXJrJztcclxuICAgICAgICB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGFya1NjaGVtZSgpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGFya1N0eWxlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLXRoaW5ncy1kYXJrJyxcclxuICAgICAgbmFtZTogJ1N3aXRjaCBkYXJrIGNvbG9yIHNjaGVtZSB0byBUaGluZ3MgKGRhcmspJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRhcmtTY2hlbWUgPSAnbWluaW1hbC10aGluZ3MtZGFyayc7XHJcbiAgICAgICAgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICBpZDogJ3RvZ2dsZS1taW5pbWFsLWRldi1ibG9jay13aWR0aCcsXHJcbiAgICAgIG5hbWU6ICdEZXYgXHUyMDE0IFNob3cgYmxvY2sgd2lkdGhzJyxcclxuICAgICAgY2FsbGJhY2s6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzLmRldkJsb2NrV2lkdGggPSAhdGhpcy5zZXR0aW5ncy5kZXZCbG9ja1dpZHRoO1xyXG4gICAgICAgIHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICB0aGlzLnJlZnJlc2goKVxyXG5cclxufVxyXG5cclxuICBvbnVubG9hZCgpIHtcclxuICAgIGNvbnNvbGUubG9nKCdVbmxvYWRpbmcgTWluaW1hbCBUaGVtZSBTZXR0aW5ncyBwbHVnaW4nKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKERFRkFVTFRfU0VUVElOR1MsIGF3YWl0IHRoaXMubG9hZERhdGEoKSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBzYXZlU2V0dGluZ3MoKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xyXG4gIH1cclxuXHJcbiAgLy8gcmVmcmVzaCBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBjaGFuZ2Ugc2V0dGluZ3NcclxuICByZWZyZXNoKCkge1xyXG4gICAgLy8gcmUtbG9hZCB0aGUgc3R5bGVcclxuICAgIHRoaXMudXBkYXRlU3R5bGUoKVxyXG4gIH1cclxuXHJcbiAgLy8gYWRkIHRoZSBzdHlsaW5nIGVsZW1lbnRzIHdlIG5lZWRcclxuICBhZGRTdHlsZSgpIHtcclxuICAgIC8vIGFkZCBhIGNzcyBibG9jayBmb3Igb3VyIHNldHRpbmdzLWRlcGVuZGVudCBzdHlsZXNcclxuICAgIGNvbnN0IGNzcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XHJcbiAgICBjc3MuaWQgPSAnbWluaW1hbC10aGVtZSc7XHJcbiAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImhlYWRcIilbMF0uYXBwZW5kQ2hpbGQoY3NzKTtcclxuXHJcbiAgICAvLyBhZGQgdGhlIG1haW4gY2xhc3NcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnbWluaW1hbC10aGVtZScpO1xyXG5cclxuICAgIC8vIHVwZGF0ZSB0aGUgc3R5bGUgd2l0aCB0aGUgc2V0dGluZ3MtZGVwZW5kZW50IHN0eWxlc1xyXG4gICAgdGhpcy51cGRhdGVTdHlsZSgpO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9udFNpemUoKSB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC52YXVsdC5zZXRDb25maWcoJ2Jhc2VGb250U2l6ZScsIHRoaXMuc2V0dGluZ3MudGV4dE5vcm1hbCk7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC51cGRhdGVGb250U2l6ZSgpO1xyXG4gIH1cclxuXHJcbiAgLy8gdXBkYXRlIHRoZSBzdHlsZXMgKGF0IHRoZSBzdGFydCwgb3IgYXMgdGhlIHJlc3VsdCBvZiBhIHNldHRpbmdzIGNoYW5nZSlcclxuICB1cGRhdGVTdHlsZSgpIHtcclxuICAgIHRoaXMucmVtb3ZlU3R5bGUoKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuZGFya1NjaGVtZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUpO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnYm9yZGVycy1ub25lJywgIXRoaXMuc2V0dGluZ3MuYm9yZGVyc1RvZ2dsZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2JvcmRlcnMtdGl0bGUnLCB0aGlzLnNldHRpbmdzLmJvcmRlcnNUaXRsZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2NvbG9yZnVsLWhlYWRpbmdzJywgdGhpcy5zZXR0aW5ncy5jb2xvcmZ1bEhlYWRpbmdzKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnZmFuY3ktY3Vyc29yJywgdGhpcy5zZXR0aW5ncy5mYW5jeUN1cnNvcik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2NvbG9yZnVsLWFjdGl2ZScsIHRoaXMuc2V0dGluZ3MuY29sb3JmdWxBY3RpdmVTdGF0ZXMpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWZvY3VzLW1vZGUnLCB0aGlzLnNldHRpbmdzLmZvY3VzTW9kZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2xpbmtzLWludC1vbicsIHRoaXMuc2V0dGluZ3MudW5kZXJsaW5lSW50ZXJuYWwpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdsaW5rcy1leHQtb24nLCB0aGlzLnNldHRpbmdzLnVuZGVybGluZUV4dGVybmFsKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnc3lzdGVtLXNoYWRlJywgdGhpcy5zZXR0aW5ncy51c2VTeXN0ZW1UaGVtZSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Z1bGwtd2lkdGgtbWVkaWEnLCB0aGlzLnNldHRpbmdzLmZ1bGxXaWR0aE1lZGlhKTtcclxuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgnaW1nLWdyaWQnLCB0aGlzLnNldHRpbmdzLmltZ0dyaWQpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWRldi1ibG9jay13aWR0aCcsIHRoaXMuc2V0dGluZ3MuZGV2QmxvY2tXaWR0aCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ21pbmltYWwtc3RhdHVzLW9mZicsICF0aGlzLnNldHRpbmdzLm1pbmltYWxTdGF0dXMpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdmdWxsLWZpbGUtbmFtZXMnLCAhdGhpcy5zZXR0aW5ncy50cmltTmFtZXMpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdsYWJlbGVkLW5hdicsIHRoaXMuc2V0dGluZ3MubGFiZWxlZE5hdik7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ3RyaW0tY29scycsIHRoaXMuc2V0dGluZ3MudHJpbUNvbHMpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCdtaW5pbWFsLWljb25zLW9mZicsICF0aGlzLnNldHRpbmdzLm1pbmltYWxJY29ucyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ21pbmltYWwtZm9sZGluZycsIHRoaXMuc2V0dGluZ3MuZm9sZGluZyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoJ2Zyb3N0ZWQtc2lkZWJhcicsIHRoaXMuc2V0dGluZ3MuZnJvc3RlZFNpZGViYXIpO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoJ3RhYmxlLXdpZGUnLCd0YWJsZS1tYXgnLCd0YWJsZS0xMDAnLCd0YWJsZS1kZWZhdWx0LXdpZHRoJyxcclxuICAgICAgJ2lmcmFtZS13aWRlJywnaWZyYW1lLW1heCcsJ2lmcmFtZS0xMDAnLCdpZnJhbWUtZGVmYXVsdC13aWR0aCcsXHJcbiAgICAgICdpbWctd2lkZScsJ2ltZy1tYXgnLCdpbWctMTAwJywnaW1nLWRlZmF1bHQtd2lkdGgnLFxyXG4gICAgICAnY2hhcnQtd2lkZScsJ2NoYXJ0LW1heCcsJ2NoYXJ0LTEwMCcsJ2NoYXJ0LWRlZmF1bHQtd2lkdGgnLFxyXG4gICAgICAnbWFwLXdpZGUnLCdtYXAtbWF4JywnbWFwLTEwMCcsJ21hcC1kZWZhdWx0LXdpZHRoJyk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuY2hhcnRXaWR0aCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MudGFibGVXaWR0aCk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MuaW1nV2lkdGgpO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmlmcmFtZVdpZHRoKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5tYXBXaWR0aCk7XHJcblxyXG4gICAgLy8gZ2V0IHRoZSBjdXN0b20gY3NzIGVsZW1lbnRcclxuICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21pbmltYWwtdGhlbWUnKTtcclxuICAgIGlmICghZWwpIHRocm93IFwibWluaW1hbC10aGVtZSBlbGVtZW50IG5vdCBmb3VuZCFcIjtcclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBzZXQgdGhlIHNldHRpbmdzLWRlcGVuZGVudCBjc3NcclxuICAgICAgZWwuaW5uZXJUZXh0ID0gXHJcbiAgICAgICAgJ2JvZHkubWluaW1hbC10aGVtZXsnXHJcbiAgICAgICAgLy8gZm9udC1ub3JtYWwgY2FuIGJlIHJlbW92ZWQgaW4gYSBjb3VwbGUgbW9udGhzIG9uY2UgcGVvcGxlIHVwZ3JhZGUgdGhlIHRoZW1lXHJcbiAgICAgICAgKyAnLS1mb250LW5vcm1hbDonICsgdGhpcy5zZXR0aW5ncy50ZXh0Tm9ybWFsICsgJ3B4OydcclxuICAgICAgICArICctLWZvbnQtc21hbGw6JyArIHRoaXMuc2V0dGluZ3MudGV4dFNtYWxsICsgJ3B4OydcclxuICAgICAgICArICctLWxpbmUtaGVpZ2h0OicgKyB0aGlzLnNldHRpbmdzLmxpbmVIZWlnaHQgKyAnOydcclxuICAgICAgICArICctLWxpbmUtd2lkdGg6JyArIHRoaXMuc2V0dGluZ3MubGluZVdpZHRoICsgJ3JlbTsnXHJcbiAgICAgICAgKyAnLS1saW5lLXdpZHRoLXdpZGU6JyArIHRoaXMuc2V0dGluZ3MubGluZVdpZHRoV2lkZSArICdyZW07J1xyXG4gICAgICAgICsgJy0tbWF4LXdpZHRoOicgKyB0aGlzLnNldHRpbmdzLm1heFdpZHRoICsgJyU7J1xyXG4gICAgICAgICsgJy0tbWF4LWNvbC13aWR0aDonICsgdGhpcy5zZXR0aW5ncy5tYXhDb2xXaWR0aCArICc7J1xyXG4gICAgICAgICsgJy0tZm9udC1lZGl0b3Itb3ZlcnJpZGU6JyArIHRoaXMuc2V0dGluZ3MuZWRpdG9yRm9udCArICc7J1xyXG4gICAgICAgICsgJy0tYWNjZW50LWg6JyArIHRoaXMuc2V0dGluZ3MuYWNjZW50SHVlICsgJzsnXHJcbiAgICAgICAgKyAnLS1hY2NlbnQtczonICsgdGhpcy5zZXR0aW5ncy5hY2NlbnRTYXQgKyAnJTt9JztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlZnJlc2hTeXN0ZW1UaGVtZSgpIHtcclxuICAgIGNvbnN0IGlzRGFya01vZGUgPSB3aW5kb3cubWF0Y2hNZWRpYSAmJiB3aW5kb3cubWF0Y2hNZWRpYSgnKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKScpLm1hdGNoZXNcclxuXHJcbiAgICBpZiAoaXNEYXJrTW9kZSAmJiB0aGlzLnNldHRpbmdzLnVzZVN5c3RlbVRoZW1lKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0RhcmsgbW9kZSBhY3RpdmUnKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZURhcmtTdHlsZSgpXHJcblxyXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuc2V0dGluZ3MudXNlU3lzdGVtVGhlbWUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnTGlnaHQgbW9kZSBhY3RpdmUnKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUxpZ2h0U3R5bGUoKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuICB1cGRhdGVEYXJrU3R5bGUoKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKFxyXG4gICAgICAndGhlbWUtbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtZGFyay10b25hbCcsXHJcbiAgICAgICdtaW5pbWFsLWRhcmstYmxhY2snXHJcbiAgICApO1xyXG4gICAgZG9jdW1lbnQuYm9keS5hZGRDbGFzcyh0aGlzLnNldHRpbmdzLmRhcmtTdHlsZSk7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC5zZXRUaGVtZSgnb2JzaWRpYW4nKTtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMuYXBwLnZhdWx0LnNldENvbmZpZygndGhlbWUnLCAnb2JzaWRpYW4nKTtcclxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKCdjc3MtY2hhbmdlJyk7XHJcbiAgfVxyXG5cclxuICB1cGRhdGVMaWdodFN0eWxlKCkge1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDbGFzcyhcclxuICAgICAgJ3RoZW1lLWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLWxpZ2h0LXRvbmFsJyxcclxuICAgICAgJ21pbmltYWwtbGlnaHQtY29udHJhc3QnLFxyXG4gICAgICAnbWluaW1hbC1saWdodC13aGl0ZSdcclxuICAgICk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MubGlnaHRTdHlsZSk7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC5zZXRUaGVtZSgnbW9vbnN0b25lJyk7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC52YXVsdC5zZXRDb25maWcoJ3RoZW1lJywgJ21vb25zdG9uZScpO1xyXG4gICAgdGhpcy5hcHAud29ya3NwYWNlLnRyaWdnZXIoJ2Nzcy1jaGFuZ2UnKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZURhcmtTY2hlbWUoKSB7XHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNsYXNzKFxyXG4gICAgICAnbWluaW1hbC1hdG9tLWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1kZWZhdWx0LWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1kcmFjdWxhLWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1ldmVyZm9yZXN0LWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1ncnV2Ym94LWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1tYWNvcy1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtbm9yZC1kYXJrJyxcclxuICAgICAgJ21pbmltYWwtbm90aW9uLWRhcmsnLFxyXG4gICAgICAnbWluaW1hbC1zb2xhcml6ZWQtZGFyaycsXHJcbiAgICAgICdtaW5pbWFsLXRoaW5ncy1kYXJrJ1xyXG4gICAgKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5kYXJrU2NoZW1lKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUxpZ2h0U2NoZW1lKCkge1xyXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDbGFzcyhcclxuICAgICAgJ21pbmltYWwtYXRvbS1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLWRlZmF1bHQtbGlnaHQnLFxyXG4gICAgICAnbWluaW1hbC1ldmVyZm9yZXN0LWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtZ3J1dmJveC1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLW1hY29zLWxpZ2h0JyxcclxuICAgICAgJ21pbmltYWwtbm9yZC1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLW5vdGlvbi1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLXNvbGFyaXplZC1saWdodCcsXHJcbiAgICAgICdtaW5pbWFsLXRoaW5ncy1saWdodCdcclxuICAgICk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFkZENsYXNzKHRoaXMuc2V0dGluZ3MubGlnaHRTY2hlbWUpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVGhlbWUoKSB7XHJcbiAgICAvLyBAdHMtaWdub3JlXHJcbiAgICB0aGlzLmFwcC5zZXRUaGVtZSh0aGlzLnNldHRpbmdzLnRoZW1lKTtcclxuICAgIC8vIEB0cy1pZ25vcmVcclxuICAgIHRoaXMuYXBwLnZhdWx0LnNldENvbmZpZygndGhlbWUnLCB0aGlzLnNldHRpbmdzLnRoZW1lKTtcclxuICAgIHRoaXMuYXBwLndvcmtzcGFjZS50cmlnZ2VyKCdjc3MtY2hhbmdlJyk7XHJcbiAgfVxyXG5cclxuICByZW1vdmVTdHlsZSgpIHtcclxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2xhc3MoJ21pbmltYWwtbGlnaHQnLCdtaW5pbWFsLWxpZ2h0LXRvbmFsJywnbWluaW1hbC1saWdodC1jb250cmFzdCcsJ21pbmltYWwtbGlnaHQtd2hpdGUnLCdtaW5pbWFsLWRhcmsnLCdtaW5pbWFsLWRhcmstdG9uYWwnLCdtaW5pbWFsLWRhcmstYmxhY2snKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYWRkQ2xhc3ModGhpcy5zZXR0aW5ncy5saWdodFN0eWxlLHRoaXMuc2V0dGluZ3MuZGFya1N0eWxlKTtcclxuICB9XHJcblxyXG59XHJcblxyXG5pbnRlcmZhY2UgTWluaW1hbFNldHRpbmdzIHtcclxuICB0aGVtZTogc3RyaW5nO1xyXG4gIGFjY2VudEh1ZTogbnVtYmVyO1xyXG4gIGFjY2VudFNhdDogbnVtYmVyO1xyXG4gIGxpZ2h0U3R5bGU6IHN0cmluZztcclxuICBkYXJrU3R5bGU6IHN0cmluZztcclxuICBsaWdodFNjaGVtZTogc3RyaW5nO1xyXG4gIGRhcmtTY2hlbWU6IHN0cmluZztcclxuICB1aUZvbnQ6IHN0cmluZztcclxuICB0ZXh0Rm9udDogc3RyaW5nO1xyXG4gIGVkaXRvckZvbnQ6IHN0cmluZztcclxuICBtb25vRm9udDogc3RyaW5nO1xyXG4gIGNvbG9yZnVsSGVhZGluZ3M6IGJvb2xlYW47XHJcbiAgZmFuY3lDdXJzb3I6IGJvb2xlYW47XHJcbiAgY29sb3JmdWxBY3RpdmVTdGF0ZXM6IGJvb2xlYW4sXHJcbiAgZnJvc3RlZFNpZGViYXI6IGJvb2xlYW47XHJcbiAgbWluaW1hbEljb25zOiBib29sZWFuO1xyXG4gIHRyaW1OYW1lczogYm9vbGVhbjtcclxuICBsYWJlbGVkTmF2OiBib29sZWFuO1xyXG4gIGJvcmRlcnNUb2dnbGU6IGJvb2xlYW47XHJcbiAgYm9yZGVyc1RpdGxlOiBib29sZWFuO1xyXG4gIGZvY3VzTW9kZTogYm9vbGVhbjtcclxuICBsaW5lSGVpZ2h0OiBudW1iZXI7XHJcbiAgbGluZVdpZHRoOiBudW1iZXI7XHJcbiAgbGluZVdpZHRoV2lkZTogbnVtYmVyO1xyXG4gIG1heFdpZHRoOiBudW1iZXI7XHJcbiAgdHJpbUNvbHM6IGJvb2xlYW47XHJcbiAgbWF4Q29sV2lkdGg6IHN0cmluZztcclxuICBpbWdHcmlkOiBib29sZWFuO1xyXG4gIGRldkJsb2NrV2lkdGg6IGJvb2xlYW47XHJcbiAgdGFibGVXaWR0aDogc3RyaW5nO1xyXG4gIGlmcmFtZVdpZHRoOiBzdHJpbmc7XHJcbiAgaW1nV2lkdGg6IHN0cmluZztcclxuICBjaGFydFdpZHRoOiBzdHJpbmc7XHJcbiAgbWFwV2lkdGg6IHN0cmluZztcclxuICBmdWxsV2lkdGhNZWRpYTogYm9vbGVhbixcclxuICBtaW5pbWFsU3RhdHVzOiBib29sZWFuLFxyXG4gIHRleHROb3JtYWw6IG51bWJlcjtcclxuICB0ZXh0U21hbGw6IG51bWJlcjtcclxuICB1bmRlcmxpbmVJbnRlcm5hbDogYm9vbGVhbjtcclxuICB1bmRlcmxpbmVFeHRlcm5hbDogYm9vbGVhbjtcclxuICB1c2VTeXN0ZW1UaGVtZTogYm9vbGVhbjtcclxuICBmb2xkaW5nOiBib29sZWFuO1xyXG4gIGxpbmVOdW1iZXJzOiBib29sZWFuO1xyXG4gIHJlYWRhYmxlTGluZUxlbmd0aDogYm9vbGVhbjtcclxufVxyXG5cclxuY29uc3QgREVGQVVMVF9TRVRUSU5HUzogTWluaW1hbFNldHRpbmdzID0ge1xyXG4gIHRoZW1lOiAnbW9vbnN0b25lJyxcclxuICBhY2NlbnRIdWU6IDIwMSxcclxuICBhY2NlbnRTYXQ6IDE3LFxyXG4gIGxpZ2h0U3R5bGU6ICdtaW5pbWFsLWxpZ2h0JyxcclxuICBkYXJrU3R5bGU6ICdtaW5pbWFsLWRhcmsnLFxyXG4gIGxpZ2h0U2NoZW1lOiAnbWluaW1hbC1kZWZhdWx0LWxpZ2h0JyxcclxuICBkYXJrU2NoZW1lOiAnbWluaW1hbC1kZWZhdWx0LWRhcmsnLFxyXG4gIGVkaXRvckZvbnQ6ICcnLFxyXG4gIGxpbmVIZWlnaHQ6IDEuNSxcclxuICBsaW5lV2lkdGg6IDQwLFxyXG4gIGxpbmVXaWR0aFdpZGU6IDUwLFxyXG4gIG1heFdpZHRoOiA4OCxcclxuICB0cmltQ29sczogdHJ1ZSxcclxuICBtYXhDb2xXaWR0aDogJzE4ZW0nLFxyXG4gIHRleHROb3JtYWw6IDE2LFxyXG4gIHRleHRTbWFsbDogMTMsXHJcbiAgaW1nR3JpZDogZmFsc2UsXHJcbiAgaW1nV2lkdGg6ICdpbWctZGVmYXVsdC13aWR0aCcsXHJcbiAgdGFibGVXaWR0aDogJ3RhYmxlLWRlZmF1bHQtd2lkdGgnLFxyXG4gIGlmcmFtZVdpZHRoOiAnaWZyYW1lLWRlZmF1bHQtd2lkdGgnLFxyXG4gIG1hcFdpZHRoOiAnbWFwLWRlZmF1bHQtd2lkdGgnLFxyXG4gIGNoYXJ0V2lkdGg6ICdjaGFydC1kZWZhdWx0LXdpZHRoJyxcclxuICBjb2xvcmZ1bEhlYWRpbmdzOiBmYWxzZSxcclxuICBtaW5pbWFsSWNvbnM6IHRydWUsXHJcbiAgY29sb3JmdWxBY3RpdmVTdGF0ZXM6IGZhbHNlLFxyXG4gIGZhbmN5Q3Vyc29yOiBmYWxzZSxcclxuICBmcm9zdGVkU2lkZWJhcjogdHJ1ZSxcclxuICB0cmltTmFtZXM6IHRydWUsXHJcbiAgbGFiZWxlZE5hdjogZmFsc2UsXHJcbiAgZnVsbFdpZHRoTWVkaWE6IHRydWUsXHJcbiAgYm9yZGVyc1RvZ2dsZTogdHJ1ZSxcclxuICBib3JkZXJzVGl0bGU6IGZhbHNlLFxyXG4gIG1pbmltYWxTdGF0dXM6IHRydWUsXHJcbiAgZm9jdXNNb2RlOiBmYWxzZSxcclxuICB1bmRlcmxpbmVJbnRlcm5hbDogdHJ1ZSxcclxuICB1bmRlcmxpbmVFeHRlcm5hbDogdHJ1ZSxcclxuICB1c2VTeXN0ZW1UaGVtZTogZmFsc2UsXHJcbiAgZm9sZGluZzogdHJ1ZSxcclxuICBsaW5lTnVtYmVyczogZmFsc2UsXHJcbiAgcmVhZGFibGVMaW5lTGVuZ3RoOiBmYWxzZSxcclxuICBkZXZCbG9ja1dpZHRoOiBmYWxzZSxcclxufVxyXG5cclxuY2xhc3MgTWluaW1hbFNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcclxuXHJcblxyXG4gIHBsdWdpbjogTWluaW1hbFRoZW1lO1xyXG4gIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IE1pbmltYWxUaGVtZSkge1xyXG4gICAgc3VwZXIoYXBwLCBwbHVnaW4pO1xyXG4gICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgfVxyXG5cclxuICBkaXNwbGF5KCk6IHZvaWQge1xyXG4gICAgbGV0IHtjb250YWluZXJFbH0gPSB0aGlzO1xyXG5cclxuICAgIGNvbnRhaW5lckVsLmVtcHR5KCk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDMnLCB7dGV4dDogJ01pbmltYWwgVGhlbWUgU2V0dGluZ3MnfSk7XHJcblxyXG4gICAgY29uc3QgbWFpbkRlc2MgPSBjb250YWluZXJFbC5jcmVhdGVFbCgncCcpO1xyXG5cclxuICAgICAgbWFpbkRlc2MuYXBwZW5kVGV4dCgnTmVlZCBoZWxwPyBFeHBsb3JlIHRoZSAnKTtcclxuICAgICAgbWFpbkRlc2MuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgY3JlYXRlRWwoJ2EnLCB7XHJcbiAgICAgICAgICB0ZXh0OiBcIk1pbmltYWwgZG9jdW1lbnRhdGlvblwiLFxyXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL21pbmltYWwuZ3VpZGVcIixcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgICBtYWluRGVzYy5hcHBlbmRUZXh0KCcgb3IgdmlzaXQgdGhlICcpO1xyXG4gICAgICBtYWluRGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnc3Ryb25nJywge1xyXG4gICAgICAgICAgdGV4dDogXCIjbWluaW1hbFwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIG1haW5EZXNjLmFwcGVuZFRleHQoJyBjaGFubmVsIGluIHRoZSBvZmZpY2lhbCBPYnNpZGlhbiBEaXNjb3JkLiBZb3UgY2FuIHN1cHBvcnQgY29udGludWVkIGRldmVsb3BtZW50IGJ5ICcpO1xyXG4gICAgICBtYWluRGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnYScsIHtcclxuICAgICAgICAgIHRleHQ6IFwiYnV5aW5nIG1lIGEgY29mZmVlXCIsXHJcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vd3d3LmJ1eW1lYWNvZmZlZS5jb20va2VwYW5vXCIsXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgbWFpbkRlc2MuYXBwZW5kVGV4dCgnIFx1MjYxNScpO1xyXG5cclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdicicpO1xyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gzJywge3RleHQ6ICdDb2xvciBzY2hlbWUnfSk7XHJcblxyXG4gICAgY29uc3QgY29sb3JEZXNjID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ3AnKTtcclxuXHJcbiAgICAgIGNvbG9yRGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnc3BhbicsIHtcclxuICAgICAgICAgIHRleHQ6ICdUbyBjcmVhdGUgYSBjb21wbGV0ZWx5IGN1c3RvbSBjb2xvciBzY2hlbWUgdXNlICdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgY29sb3JEZXNjLmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdhJywge1xyXG4gICAgICAgICAgdGV4dDogXCJTdHlsZSBTZXR0aW5ncyBwbHVnaW5cIixcclxuICAgICAgICAgIGhyZWY6IFwib2JzaWRpYW46Ly9zaG93LXBsdWdpbj9pZD1vYnNpZGlhbi1zdHlsZS1zZXR0aW5nc1wiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbG9yRGVzYy5hcHBlbmRUZXh0KCcuJyk7XHJcblxyXG4gICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAuc2V0TmFtZSgnTGlnaHQgbW9kZSBjb2xvciBzY2hlbWUnKVxyXG4gICAgICAgIC5zZXREZXNjKCdQcmVzZXQgY29sb3Igb3B0aW9ucyBmb3IgbGlnaHQgbW9kZScpXHJcbiAgICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWRlZmF1bHQtbGlnaHQnLCdEZWZhdWx0JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtYXRvbS1saWdodCcsJ0F0b20nKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1ldmVyZm9yZXN0LWxpZ2h0JywnRXZlcmZvcmVzdCcpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWdydXZib3gtbGlnaHQnLCdHcnV2Ym94JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbWFjb3MtbGlnaHQnLCdtYWNPUycpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLW5vcmQtbGlnaHQnLCdOb3JkJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbm90aW9uLWxpZ2h0JywnTm90aW9uJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtc29sYXJpemVkLWxpZ2h0JywnU29sYXJpemVkJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtdGhpbmdzLWxpZ2h0JywnVGhpbmdzJylcclxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saWdodFNjaGVtZSlcclxuICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5saWdodFNjaGVtZSA9IHZhbHVlO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4udXBkYXRlTGlnaHRTY2hlbWUoKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAuc2V0TmFtZSgnTGlnaHQgbW9kZSBiYWNrZ3JvdW5kIGNvbnRyYXN0JylcclxuICAgICAgICAuc2V0RGVzYygnTGV2ZWwgb2YgY29udHJhc3QgYmV0d2VlbiBzaWRlYmFyIGFuZCBtYWluIGNvbnRlbnQnKVxyXG4gICAgICAgIC5hZGREcm9wZG93bihkcm9wZG93biA9PiBkcm9wZG93blxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1saWdodCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1saWdodC13aGl0ZScsJ0FsbCB3aGl0ZScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWxpZ2h0LXRvbmFsJywnTG93IGNvbnRyYXN0JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbGlnaHQtY29udHJhc3QnLCdIaWdoIGNvbnRyYXN0JylcclxuICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5saWdodFN0eWxlKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxpZ2h0U3R5bGUgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlbW92ZVN0eWxlKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgLnNldE5hbWUoJ0RhcmsgbW9kZSBjb2xvciBzY2hlbWUnKVxyXG4gICAgICAgIC5zZXREZXNjKCdQcmVzZXQgY29sb3JzIG9wdGlvbnMgZm9yIGRhcmsgbW9kZScpXHJcbiAgICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWRlZmF1bHQtZGFyaycsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1hdG9tLWRhcmsnLCdBdG9tJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZHJhY3VsYS1kYXJrJywnRHJhY3VsYScpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLWV2ZXJmb3Jlc3QtZGFyaycsJ0V2ZXJmb3Jlc3QnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1ncnV2Ym94LWRhcmsnLCdHcnV2Ym94JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbWFjb3MtZGFyaycsJ21hY09TJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtbm9yZC1kYXJrJywnTm9yZCcpXHJcbiAgICAgICAgICAuYWRkT3B0aW9uKCdtaW5pbWFsLW5vdGlvbi1kYXJrJywnTm90aW9uJylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtc29sYXJpemVkLWRhcmsnLCdTb2xhcml6ZWQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC10aGluZ3MtZGFyaycsJ1RoaW5ncycpXHJcbiAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGFya1NjaGVtZSlcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGFya1NjaGVtZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnVwZGF0ZURhcmtTY2hlbWUoKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgIC5zZXROYW1lKCdEYXJrIG1vZGUgYmFja2dyb3VuZCBjb250cmFzdCcpXHJcbiAgICAgICAgLnNldERlc2MoJ0xldmVsIG9mIGNvbnRyYXN0IGJldHdlZW4gc2lkZWJhciBhbmQgbWFpbiBjb250ZW50JylcclxuICAgICAgICAuYWRkRHJvcGRvd24oZHJvcGRvd24gPT4gZHJvcGRvd25cclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZGFyaycsJ0RlZmF1bHQnKVxyXG4gICAgICAgICAgLmFkZE9wdGlvbignbWluaW1hbC1kYXJrLXRvbmFsJywnTG93IGNvbnRyYXN0JylcclxuICAgICAgICAgIC5hZGRPcHRpb24oJ21pbmltYWwtZGFyay1ibGFjaycsJ1RydWUgYmxhY2snKVxyXG4gICAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRhcmtTdHlsZSlcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGFya1N0eWxlID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVtb3ZlU3R5bGUoKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgIC5zZXROYW1lKCdBY2NlbnQgY29sb3IgaHVlJylcclxuICAgICAgICAuc2V0RGVzYygnRm9yIGxpbmtzIGFuZCBpbnRlcmFjdGl2ZSBlbGVtZW50cyBpbiBkZWZhdWx0IGNvbG9yIHNjaGVtZScpXHJcbiAgICAgICAgLmFkZFNsaWRlcihzbGlkZXIgPT4gc2xpZGVyXHJcbiAgICAgICAgICAgIC5zZXRMaW1pdHMoMCwgMzYwLCAxKVxyXG4gICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYWNjZW50SHVlKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5hY2NlbnRIdWUgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICB9KSk7XHJcblxyXG4gICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgICAuc2V0TmFtZSgnQWNjZW50IGNvbG9yIHNhdHVyYXRpb24nKVxyXG4gICAgICAgIC5zZXREZXNjKCdGb3IgbGlua3MgYW5kIGludGVyYWN0aXZlIGVsZW1lbnRzIGluIGRlZmF1bHQgY29sb3Igc2NoZW1lJylcclxuICAgICAgICAuYWRkU2xpZGVyKHNsaWRlciA9PiBzbGlkZXJcclxuICAgICAgICAgICAgLnNldExpbWl0cygwLCAxMDAsIDEpXHJcbiAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5hY2NlbnRTYXQpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmFjY2VudFNhdCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnYnInKTtcclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMycpO1xyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gzJywge3RleHQ6ICdGZWF0dXJlcyd9KTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ01hdGNoIHN5c3RlbSBzZXR0aW5nIGZvciBsaWdodCBvciBkYXJrIG1vZGUnKVxyXG4gICAgICAuc2V0RGVzYygnQXV0b21hdGljYWxseSBzd2l0Y2ggYmFzZWQgb24geW91ciBPUyBzZXR0aW5nJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnVzZVN5c3RlbVRoZW1lKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51c2VTeXN0ZW1UaGVtZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2hTeXN0ZW1UaGVtZSgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ1RleHQgbGFiZWxzIGZvciBwcmltYXJ5IG5hdmlnYXRpb24nKVxyXG4gICAgICAuc2V0RGVzYygnTmF2aWdhdGlvbiBpbiBsZWZ0IHNpZGViYXIgdXNlcyB0ZXh0IGxhYmVscyAoc2VlIGRvY3VtZW50YXRpb24gZm9yIGxvY2FsaXphdGlvbiBzdXBwb3J0KScpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYWJlbGVkTmF2KVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5sYWJlbGVkTmF2ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnQ29sb3JmdWwgY3Vyc29yJylcclxuICAgICAgLnNldERlc2MoJ0VkaXRvciBjdXJzb3IgdXNlcyB5b3VyIGFjY2VudCBjb2xvcicpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mYW5jeUN1cnNvcilcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZmFuY3lDdXJzb3IgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnQ29sb3JmdWwgYWN0aXZlIHN0YXRlcycpXHJcbiAgICAgIC5zZXREZXNjKCdBY3RpdmUgZmlsZSBhbmQgbWVudSBpdGVtcyB1c2UgeW91ciBhY2NlbnQgY29sb3InKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY29sb3JmdWxBY3RpdmVTdGF0ZXMpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbG9yZnVsQWN0aXZlU3RhdGVzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0NvbG9yZnVsIGhlYWRpbmdzJylcclxuICAgICAgLnNldERlc2MoJ0hlYWRpbmdzIHVzZSBhIGRpZmZlcmVudCBjb2xvciBmb3IgZWFjaCBzaXplJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3MpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmNvbG9yZnVsSGVhZGluZ3MgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTWluaW1hbCBzdGF0dXMgYmFyJylcclxuICAgICAgLnNldERlc2MoJ1VzZSBuYXJyb3cgc3RhdHVzIGJhcicpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5taW5pbWFsU3RhdHVzKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5taW5pbWFsU3RhdHVzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnVHJpbSBmaWxlIG5hbWVzIGluIHNpZGViYXJzJylcclxuICAgICAgLnNldERlc2MoJ1VzZSBlbGxpcHNlcyB0byBmaXQgZmlsZSBuYW1lcyBvbiBhIHNpbmdsZSBsaW5lJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnRyaW1OYW1lcylcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudHJpbU5hbWVzID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnVHJhbnNsdWNlbnQgc2lkZWJhcicpXHJcbiAgICAgIC5zZXREZXNjKCdVc2UgZnJvc3RlZCBnbGFzcyBlZmZlY3QgZm9yIHNpZGViYXIgd2hlbiBcIlRyYW5zbHVjZW50IHdpbmRvd1wiIGlzIG9uIGluIEFwcGVhcmFuY2Ugc2V0dGluZ3MnKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZnJvc3RlZFNpZGViYXIpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZyb3N0ZWRTaWRlYmFyID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgIC5zZXROYW1lKCdTaWRlYmFyIGJvcmRlcnMnKVxyXG4gICAgICAgIC5zZXREZXNjKCdEaXNwbGF5IGRpdmlkZXIgbGluZXMgYmV0d2VlbiBzaWRlYmFyIGVsZW1lbnRzJylcclxuICAgICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuYm9yZGVyc1RvZ2dsZSlcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuYm9yZGVyc1RvZ2dsZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAgIC5zZXROYW1lKCdUaXRsZSBiYXIgYm9yZGVyJylcclxuICAgICAgICAuc2V0RGVzYygnRGlzcGxheSBib3JkZXIgYmVsb3cgcGFuZSB0aXRsZSAoaWYgYm9yZGVycyBhcmUgbm90IGhpZGRlbiknKVxyXG4gICAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5ib3JkZXJzVGl0bGUpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmJvcmRlcnNUaXRsZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0ZvY3VzIG1vZGUnKVxyXG4gICAgICAuc2V0RGVzYygnSGlkZSB0aXRsZSBiYXIgYW5kIHN0YXR1cyBiYXIsIGhvdmVyIHRvIGRpc3BsYXkgKGNhbiBiZSB0b2dnbGVkIHdpdGggaG90a2V5KScpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2N1c01vZGUpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZvY3VzTW9kZSA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdVbmRlcmxpbmUgaW50ZXJuYWwgbGlua3MnKVxyXG4gICAgICAuc2V0RGVzYygnU2hvdyB1bmRlcmxpbmVzIG9uIGludGVybmFsIGxpbmtzJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnVuZGVybGluZUludGVybmFsKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51bmRlcmxpbmVJbnRlcm5hbCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdVbmRlcmxpbmUgZXh0ZXJuYWwgbGlua3MnKVxyXG4gICAgICAuc2V0RGVzYygnU2hvdyB1bmRlcmxpbmVzIG9uIGV4dGVybmFsIGxpbmtzJylcclxuICAgICAgLmFkZFRvZ2dsZSh0b2dnbGUgPT4gdG9nZ2xlLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLnVuZGVybGluZUV4dGVybmFsKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy51bmRlcmxpbmVFeHRlcm5hbCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdDdXN0b20gaWNvbnMnKVxyXG4gICAgICAuc2V0RGVzYygnUmVwbGFjZSBkZWZhdWx0IGljb25zIHdpdGggTWluaW1hbCBzZXQnKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MubWluaW1hbEljb25zKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5taW5pbWFsSWNvbnMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTWF4aW1pemUgbWVkaWEnKVxyXG4gICAgICAuc2V0RGVzYygnSW1hZ2VzIGFuZCB2aWRlb3MgZmlsbCB0aGUgd2lkdGggb2YgdGhlIGxpbmUnKVxyXG4gICAgICAuYWRkVG9nZ2xlKHRvZ2dsZSA9PiB0b2dnbGUuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZnVsbFdpZHRoTWVkaWEpXHJcbiAgICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmZ1bGxXaWR0aE1lZGlhID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdicicpO1xyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gzJyk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDMnLCB7dGV4dDogJ0xheW91dCd9KTtcclxuXHJcbiAgICBjb25zdCBsYXlvdXREZXNjID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ3AnKTtcclxuXHJcbiAgICAgIGxheW91dERlc2MuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgY3JlYXRlRWwoJ3NwYW4nLCB7XHJcbiAgICAgICAgICB0ZXh0OiAnVGhlIGZvbGxvd2luZyBvcHRpb25zIHJlcXVpcmUgdGhlICdcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgbGF5b3V0RGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnYScsIHtcclxuICAgICAgICAgIHRleHQ6IFwiQ29udGV4dHVhbCBUeXBvZ3JhcGh5IHBsdWdpblwiLFxyXG4gICAgICAgICAgaHJlZjogXCJvYnNpZGlhbjovL3Nob3ctcGx1Z2luP2lkPW9ic2lkaWFuLWNvbnRleHR1YWwtdHlwb2dyYXBoeVwiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGxheW91dERlc2MuYXBwZW5kVGV4dCgnLiBUaGVzZSBvcHRpb25zIGNhbiBhbHNvIGJlIGRlZmluZWQgb24gYSBwZXItZmlsZSBiYXNpcyB1c2luZyBZQU1MLCAnKTtcclxuICAgICAgbGF5b3V0RGVzYy5hcHBlbmRDaGlsZChcclxuICAgICAgICBjcmVhdGVFbCgnYScsIHtcclxuICAgICAgICAgIHRleHQ6IFwic2VlIGRvY3VtZW50YXRpb25cIixcclxuICAgICAgICAgIGhyZWY6IFwiaHR0cHM6Ly9taW5pbWFsLmd1aWRlL0ZlYXR1cmVzL0Jsb2NrK3dpZHRoXCIsXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgICAgbGF5b3V0RGVzYy5hcHBlbmRUZXh0KCcgZm9yIGRldGFpbHMuJyk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdJbWFnZSBncmlkcycpXHJcbiAgICAgIC5zZXREZXNjKCdUdXJuIGNvbnNlY3V0aXZlIGltYWdlcyBpbnRvIGNvbHVtbnMgXHUyMDE0IHRvIG1ha2UgYSBuZXcgcm93LCBhZGQgYW4gZXh0cmEgbGluZSBicmVhayBiZXR3ZWVuIGltYWdlcycpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbWdHcmlkKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbWdHcmlkID0gdmFsdWU7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4ucmVmcmVzaCgpO1xyXG4gICAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnQ2hhcnQgd2lkdGgnKVxyXG4gICAgICAuc2V0RGVzYygnRGVmYXVsdCB3aWR0aCBmb3IgY2hhcnQgYmxvY2tzJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbignY2hhcnQtZGVmYXVsdC13aWR0aCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ2NoYXJ0LXdpZGUnLCdXaWRlIGxpbmUgd2lkdGgnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ2NoYXJ0LW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignY2hhcnQtMTAwJywnMTAwJSBwYW5lIHdpZHRoJylcclxuICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRXaWR0aClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuY2hhcnRXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0lmcmFtZSB3aWR0aCcpXHJcbiAgICAgIC5zZXREZXNjKCdEZWZhdWx0IHdpZHRoIGZvciBpZnJhbWUgYmxvY2tzJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLWRlZmF1bHQtd2lkdGgnLCdEZWZhdWx0JylcclxuICAgICAgICAuYWRkT3B0aW9uKCdpZnJhbWUtd2lkZScsJ1dpZGUgbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignaWZyYW1lLTEwMCcsJzEwMCUgcGFuZSB3aWR0aCcpXHJcbiAgICAgICAgLnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmlmcmFtZVdpZHRoKVxyXG4gICAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5pZnJhbWVXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0ltYWdlIHdpZHRoJylcclxuICAgICAgLnNldERlc2MoJ0RlZmF1bHQgd2lkdGggZm9yIGltYWdlIGJsb2NrcycpXHJcbiAgICAgIC5hZGREcm9wZG93bihkcm9wZG93biA9PiBkcm9wZG93blxyXG4gICAgICAgIC5hZGRPcHRpb24oJ2ltZy1kZWZhdWx0LXdpZHRoJywnRGVmYXVsdCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignaW1nLXdpZGUnLCdXaWRlIGxpbmUgd2lkdGgnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ2ltZy1tYXgnLCdNYXhpbXVtIGxpbmUgd2lkdGgnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ2ltZy0xMDAnLCcxMDAlIHBhbmUgd2lkdGgnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5pbWdXaWR0aClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuaW1nV2lkdGggPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdNYXAgd2lkdGgnKVxyXG4gICAgICAuc2V0RGVzYygnRGVmYXVsdCB3aWR0aCBmb3IgbWFwIGJsb2NrcycpXHJcbiAgICAgIC5hZGREcm9wZG93bihkcm9wZG93biA9PiBkcm9wZG93blxyXG4gICAgICAgIC5hZGRPcHRpb24oJ21hcC1kZWZhdWx0LXdpZHRoJywnRGVmYXVsdCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbignbWFwLXdpZGUnLCdXaWRlIGxpbmUgd2lkdGgnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ21hcC1tYXgnLCdNYXhpbXVtIGxpbmUgd2lkdGgnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ21hcC0xMDAnLCcxMDAlIHBhbmUgd2lkdGgnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5tYXBXaWR0aClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubWFwV2lkdGggPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdUYWJsZSB3aWR0aCcpXHJcbiAgICAgIC5zZXREZXNjKCdEZWZhdWx0IHdpZHRoIGZvciB0YWJsZSBhbmQgRGF0YXZpZXcgYmxvY2tzJylcclxuICAgICAgLmFkZERyb3Bkb3duKGRyb3Bkb3duID0+IGRyb3Bkb3duXHJcbiAgICAgICAgLmFkZE9wdGlvbigndGFibGUtZGVmYXVsdC13aWR0aCcsJ0RlZmF1bHQnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ3RhYmxlLXdpZGUnLCdXaWRlIGxpbmUgd2lkdGgnKVxyXG4gICAgICAgIC5hZGRPcHRpb24oJ3RhYmxlLW1heCcsJ01heGltdW0gbGluZSB3aWR0aCcpXHJcbiAgICAgICAgLmFkZE9wdGlvbigndGFibGUtMTAwJywnMTAwJSBwYW5lIHdpZHRoJylcclxuICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MudGFibGVXaWR0aClcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudGFibGVXaWR0aCA9IHZhbHVlO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnYnInKTtcclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMycpO1xyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2gzJywge3RleHQ6ICdUYWJsZXMnfSk7XHJcblxyXG4gICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgIC5zZXROYW1lKCdUcmltIERhdGF2aWV3IGNvbHVtbnMnKVxyXG4gICAgICAuc2V0RGVzYygnRGlzYWJsZXMgd29yZCB3cmFwcGluZyBpbiB0YWJsZSBjZWxscywgYW5kIHRyaW1zIGxvbmcgdGV4dCcpXHJcbiAgICAgIC5hZGRUb2dnbGUodG9nZ2xlID0+IHRvZ2dsZS5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy50cmltQ29scylcclxuICAgICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudHJpbUNvbHMgPSB2YWx1ZTtcclxuICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2F2ZURhdGEodGhpcy5wbHVnaW4uc2V0dGluZ3MpO1xyXG4gICAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnRGF0YXZpZXcgbWF4aW11bSBjb2x1bW4gd2lkdGgnKVxyXG4gICAgICAuc2V0RGVzYygnTWF4aW11bSB3aWR0aCBmb3IgRGF0YXZpZXcgY29sdW1ucywgYWNjZXB0cyBhbnkgQ1NTIHdpZHRoIHZhbHVlJylcclxuICAgICAgLmFkZFRleHQodGV4dCA9PiB0ZXh0LnNldFBsYWNlaG9sZGVyKCcnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MubWF4Q29sV2lkdGggfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubWF4Q29sV2lkdGggPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2JyJyk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDMnKTtcclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMycsIHt0ZXh0OiAnVHlwb2dyYXBoeSd9KTtcclxuXHJcbiAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcclxuICAgICAgLnNldE5hbWUoJ0JvZHkgZm9udCBzaXplJylcclxuICAgICAgLnNldERlc2MoJ1VzZWQgZm9yIHRoZSBtYWluIHRleHQgKGRlZmF1bHQgMTYpJylcclxuICAgICAgLmFkZFRleHQodGV4dCA9PiB0ZXh0LnNldFBsYWNlaG9sZGVyKCcxNicpXHJcbiAgICAgICAgLnNldFZhbHVlKCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50ZXh0Tm9ybWFsIHx8ICcnKSArICcnKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLnRleHROb3JtYWwgPSBwYXJzZUZsb2F0KHZhbHVlKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldEZvbnRTaXplKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnU2lkZWJhciBmb250IHNpemUnKVxyXG4gICAgICAuc2V0RGVzYygnVXNlZCBmb3IgdGV4dCBpbiB0aGUgc2lkZWJhcnMgKGRlZmF1bHQgMTMpJylcclxuICAgICAgLmFkZFRleHQodGV4dCA9PiB0ZXh0LnNldFBsYWNlaG9sZGVyKCcxMycpXHJcbiAgICAgICAgLnNldFZhbHVlKCh0aGlzLnBsdWdpbi5zZXR0aW5ncy50ZXh0U21hbGwgfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MudGV4dFNtYWxsID0gcGFyc2VGbG9hdCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTGluZSBoZWlnaHQnKVxyXG4gICAgICAuc2V0RGVzYygnTGluZSBoZWlnaHQgb2YgdGV4dCAoZGVmYXVsdCAxLjUpJylcclxuICAgICAgLmFkZFRleHQodGV4dCA9PiB0ZXh0LnNldFBsYWNlaG9sZGVyKCcxLjUnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MubGluZUhlaWdodCB8fCAnJykgKyAnJylcclxuICAgICAgICAub25DaGFuZ2UoKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5saW5lSGVpZ2h0ID0gcGFyc2VGbG9hdCh2YWx1ZSk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTm9ybWFsIGxpbmUgbGVuZ3RoJylcclxuICAgICAgLnNldERlc2MoJ051bWJlciBvZiBjaGFyYWN0ZXJzIHBlciBsaW5lIChkZWZhdWx0IDQwKScpXHJcbiAgICAgIC5hZGRUZXh0KHRleHQgPT4gdGV4dC5zZXRQbGFjZWhvbGRlcignNDAnKVxyXG4gICAgICAgIC5zZXRWYWx1ZSgodGhpcy5wbHVnaW4uc2V0dGluZ3MubGluZVdpZHRoIHx8ICcnKSArICcnKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmxpbmVXaWR0aCA9IHBhcnNlSW50KHZhbHVlLnRyaW0oKSk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnV2lkZSBsaW5lIGxlbmd0aCcpXHJcbiAgICAgIC5zZXREZXNjKCdOdW1iZXIgb2YgY2hhcmFjdGVycyBwZXIgbGluZSBmb3Igd2lkZSBlbGVtZW50cyAoZGVmYXVsdCA1MCknKVxyXG4gICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHQuc2V0UGxhY2Vob2xkZXIoJzUwJylcclxuICAgICAgICAuc2V0VmFsdWUoKHRoaXMucGx1Z2luLnNldHRpbmdzLmxpbmVXaWR0aFdpZGUgfHwgJycpICsgJycpXHJcbiAgICAgICAgLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MubGluZVdpZHRoV2lkZSA9IHBhcnNlSW50KHZhbHVlLnRyaW0oKSk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5zYXZlRGF0YSh0aGlzLnBsdWdpbi5zZXR0aW5ncyk7XHJcbiAgICAgICAgICB0aGlzLnBsdWdpbi5yZWZyZXNoKCk7XHJcbiAgICAgICAgfSkpO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnTWF4aW11bSBsaW5lIGxlbmd0aCAlJylcclxuICAgICAgLnNldERlc2MoJ1BlcmNlbnRhZ2Ugb2Ygc3BhY2UgaW5zaWRlIGEgcGFuZSB0aGF0IGEgbGluZSBjYW4gZmlsbCAoZGVmYXVsdCA4OCknKVxyXG4gICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHQuc2V0UGxhY2Vob2xkZXIoJzg4JylcclxuICAgICAgICAuc2V0VmFsdWUoKHRoaXMucGx1Z2luLnNldHRpbmdzLm1heFdpZHRoIHx8ICcnKSArICcnKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLm1heFdpZHRoID0gcGFyc2VJbnQodmFsdWUudHJpbSgpKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2JyJyk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDMnKTtcclxuICAgIGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdoMycsIHt0ZXh0OiAnRWRpdG9yIGZvbnQnfSk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgncCcsIHt0ZXh0OiAnT3ZlcnJpZGVzIHRoZSB0ZXh0IGZvbnQgZGVmaW5lZCBpbiBPYnNpZGlhbiBBcHBlYXJhbmNlIHNldHRpbmdzIHdoZW4gaW4gZWRpdCBtb2RlJ30pO1xyXG5cclxuICAgIG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxyXG4gICAgICAuc2V0TmFtZSgnRWRpdG9yIGZvbnQnKVxyXG4gICAgICAuc2V0RGVzYygnVXNlIHRoZSBleGFjdCBuYW1lIG9mIHRoZSBmb250IGFzIGl0IGFwcGVhcnMgb24geW91ciBzeXN0ZW0nKVxyXG4gICAgICAuYWRkVGV4dCh0ZXh0ID0+IHRleHQuc2V0UGxhY2Vob2xkZXIoJycpXHJcbiAgICAgICAgLnNldFZhbHVlKCh0aGlzLnBsdWdpbi5zZXR0aW5ncy5lZGl0b3JGb250IHx8ICcnKSArICcnKVxyXG4gICAgICAgIC5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmVkaXRvckZvbnQgPSB2YWx1ZTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnNhdmVEYXRhKHRoaXMucGx1Z2luLnNldHRpbmdzKTtcclxuICAgICAgICAgIHRoaXMucGx1Z2luLnJlZnJlc2goKTtcclxuICAgICAgICB9KSk7XHJcblxyXG4gICAgY29udGFpbmVyRWwuY3JlYXRlRWwoJ2JyJyk7XHJcbiAgICBjb250YWluZXJFbC5jcmVhdGVFbCgnaDMnLCB7dGV4dDogJ1N1cHBvcnQgZGV2ZWxvcG1lbnQnfSk7XHJcblxyXG4gICAgY29uc3QgZG9uYXRlVGV4dCA9IGNvbnRhaW5lckVsLmNyZWF0ZUVsKCdwJyk7XHJcblxyXG4gICAgICBkb25hdGVUZXh0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdzcGFuJywge1xyXG4gICAgICAgICAgdGV4dDogJ0lmIHlvdSBlbmpveSBNaW5pbWFsLCBjb25zaWRlciAnXHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICAgIGRvbmF0ZVRleHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgY3JlYXRlRWwoJ2EnLCB7XHJcbiAgICAgICAgICB0ZXh0OiBcImJ1eWluZyBtZSBhIGNvZmZlZVwiLFxyXG4gICAgICAgICAgaHJlZjogXCJodHRwczovL3d3dy5idXltZWFjb2ZmZWUuY29tL2tlcGFub1wiLFxyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgICAgIGRvbmF0ZVRleHQuYXBwZW5kQ2hpbGQoXHJcbiAgICAgICAgY3JlYXRlRWwoJ3NwYW4nLCB7XHJcbiAgICAgICAgICB0ZXh0OiAnLCBhbmQgZm9sbG93aW5nIG1lIG9uIFR3aXR0ZXIgJ1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICBkb25hdGVUZXh0LmFwcGVuZENoaWxkKFxyXG4gICAgICAgIGNyZWF0ZUVsKCdhJywge1xyXG4gICAgICAgICAgdGV4dDogXCJAa2VwYW5vXCIsXHJcbiAgICAgICAgICBocmVmOiBcImh0dHBzOi8vdHdpdHRlci5jb20va2VwYW5vXCIsXHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuXHJcbiAgICBjb25zdCBkaXYgPSBjb250YWluZXJFbC5jcmVhdGVFbCgnZGl2Jywge1xyXG4gICAgICBjbHM6ICdtaW5pbWFsLWRvbmF0aW9uJyxcclxuICAgIH0pO1xyXG5cclxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBET01QYXJzZXIoKTtcclxuICAgIGRpdi5hcHBlbmRDaGlsZChcclxuICAgICAgY3JlYXRlRG9uYXRlQnV0dG9uKFxyXG4gICAgICAgICdodHRwczovL3d3dy5idXltZWFjb2ZmZWUuY29tL2tlcGFubycsXHJcbiAgICAgICAgcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhidXlNZUFDb2ZmZWUsICd0ZXh0L3htbCcpLmRvY3VtZW50RWxlbWVudCxcclxuICAgICAgKSxcclxuICAgICk7XHJcblxyXG5cclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGNyZWF0ZURvbmF0ZUJ1dHRvbiA9IChsaW5rOiBzdHJpbmcsIGltZzogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCA9PiB7XHJcbiAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuICBhLnNldEF0dHJpYnV0ZSgnaHJlZicsIGxpbmspO1xyXG4gIGEuYWRkQ2xhc3MoJ21pbmltYWwtZG9uYXRlLWJ1dHRvbicpO1xyXG4gIGEuYXBwZW5kQ2hpbGQoaW1nKTtcclxuICByZXR1cm4gYTtcclxufTtcclxuXHJcbmNvbnN0IGJ1eU1lQUNvZmZlZSA9IGBcclxuPHN2ZyB3aWR0aD1cIjE1MFwiIGhlaWdodD1cIjQyXCIgdmlld0JveD1cIjAgMCAyNjAgNzNcIiBzdHlsZT1cIm1hcmdpbi1yaWdodDoxMHB4XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+XHJcbjxwYXRoIGQ9XCJNMCAxMS42OEMwIDUuMjI5MzIgNS4yMjkzMSAwIDExLjY4IDBIMjQ4LjJDMjU0LjY1MSAwIDI1OS44OCA1LjIyOTMxIDI1OS44OCAxMS42OFY2MS4zMkMyNTkuODggNjcuNzcwNyAyNTQuNjUxIDczIDI0OC4yIDczSDExLjY4QzUuMjI5MzEgNzMgMCA2Ny43NzA3IDAgNjEuMzJWMTEuNjhaXCIgZmlsbD1cIiNGRkREMDBcIi8+XHJcbjxwYXRoIGQ9XCJNNTIuMjU2NiAyNC4wMDc4TDUyLjIyNDYgMjMuOTg4OUw1Mi4xNTA0IDIzLjk2NjNDNTIuMTgwMiAyMy45OTE1IDUyLjIxNzYgMjQuMDA2MSA1Mi4yNTY2IDI0LjAwNzhaXCIgZmlsbD1cIiMwRDBDMjJcIi8+XHJcbjxwYXRoIGQ9XCJNNTIuNzI0OCAyNy4zNDU3TDUyLjY4OTUgMjcuMzU1Nkw1Mi43MjQ4IDI3LjM0NTdaXCIgZmlsbD1cIiMwRDBDMjJcIi8+XHJcbjxwYXRoIGQ9XCJNNTIuMjcwMSAyNC4wMDI0QzUyLjI2NiAyNC4wMDE5IDUyLjI2MTkgMjQuMDAwOSA1Mi4yNTggMjMuOTk5NUM1Mi4yNTc4IDI0LjAwMjIgNTIuMjU3OCAyNC4wMDQ5IDUyLjI1OCAyNC4wMDc2QzUyLjI2MjQgMjQuMDA3IDUyLjI2NjYgMjQuMDA1MiA1Mi4yNzAxIDI0LjAwMjRaXCIgZmlsbD1cIiMwRDBDMjJcIi8+XHJcbjxwYXRoIGQ9XCJNNTIuMjU3OCAyNC4wMDk0SDUyLjI2NDNWMjQuMDA1NEw1Mi4yNTc4IDI0LjAwOTRaXCIgZmlsbD1cIiMwRDBDMjJcIi8+XHJcbjxwYXRoIGQ9XCJNNTIuNjk3MyAyNy4zMzk0TDUyLjc1MTMgMjcuMzA4Nkw1Mi43NzE0IDI3LjI5NzNMNTIuNzg5NyAyNy4yNzc4QzUyLjc1NTQgMjcuMjkyNiA1Mi43MjQxIDI3LjMxMzUgNTIuNjk3MyAyNy4zMzk0WlwiIGZpbGw9XCIjMEQwQzIyXCIvPlxyXG48cGF0aCBkPVwiTTUyLjM0ODQgMjQuMDgxMkw1Mi4yOTU2IDI0LjAzMUw1Mi4yNTk4IDI0LjAxMTVDNTIuMjc5IDI0LjA0NTQgNTIuMzEwOCAyNC4wNzA1IDUyLjM0ODQgMjQuMDgxMlpcIiBmaWxsPVwiIzBEMEMyMlwiLz5cclxuPHBhdGggZD1cIk0zOS4wNjg0IDU2LjQ2OUMzOS4wMjYyIDU2LjQ4NzIgMzguOTg5MyA1Ni41MTU4IDM4Ljk2MDkgNTYuNTUyTDM4Ljk5NDMgNTYuNTMwNkMzOS4wMTY5IDU2LjUwOTggMzkuMDQ4OSA1Ni40ODUzIDM5LjA2ODQgNTYuNDY5WlwiIGZpbGw9XCIjMEQwQzIyXCIvPlxyXG48cGF0aCBkPVwiTTQ2Ljc4MDIgNTQuOTUxOEM0Ni43ODAyIDU0LjkwNDEgNDYuNzU2OSA1NC45MTI5IDQ2Ljc2MjYgNTUuMDgyNkM0Ni43NjI2IDU1LjA2ODcgNDYuNzY4MyA1NS4wNTQ5IDQ2Ljc3MDggNTUuMDQxN0M0Ni43NzM5IDU1LjAxMTUgNDYuNzc2NCA1NC45ODIgNDYuNzgwMiA1NC45NTE4WlwiIGZpbGw9XCIjMEQwQzIyXCIvPlxyXG48cGF0aCBkPVwiTTQ1Ljk4NDQgNTYuNDY5QzQ1Ljk0MjIgNTYuNDg3MiA0NS45MDUzIDU2LjUxNTggNDUuODc3IDU2LjU1Mkw0NS45MTAzIDU2LjUzMDZDNDUuOTMyOSA1Ni41MDk4IDQ1Ljk2NDkgNTYuNDg1MyA0NS45ODQ0IDU2LjQ2OVpcIiBmaWxsPVwiIzBEMEMyMlwiLz5cclxuPHBhdGggZD1cIk0zMy42MzA3IDU2LjgzMDFDMzMuNTk4NyA1Ni44MDIzIDMzLjU1OTUgNTYuNzg0IDMzLjUxNzYgNTYuNzc3M0MzMy41NTE1IDU2Ljc5MzcgMzMuNTg1NSA1Ni44MSAzMy42MDgxIDU2LjgyMjZMMzMuNjMwNyA1Ni44MzAxWlwiIGZpbGw9XCIjMEQwQzIyXCIvPlxyXG48cGF0aCBkPVwiTTMyLjQxMTggNTUuNjU5OEMzMi40MDY4IDU1LjYxMDMgMzIuMzkxNiA1NS41NjI0IDMyLjM2NzIgNTUuNTE5QzMyLjM4NDUgNTUuNTY0MiAzMi4zOTkgNTUuNjEwNCAzMi40MTA2IDU1LjY1NzNMMzIuNDExOCA1NS42NTk4WlwiIGZpbGw9XCIjMEQwQzIyXCIvPlxyXG48cGF0aCBkPVwiTTQwLjYyMyAzNC43MjIxQzM4Ljk0NDkgMzUuNDQwNSAzNy4wNDA0IDM2LjI1NTEgMzQuNTcyMiAzNi4yNTUxQzMzLjUzOTcgMzYuMjUzMSAzMi41MTIyIDM2LjExMTQgMzEuNTE3NiAzNS44MzRMMzMuMjI0NyA1My4zNjA1QzMzLjI4NTEgNTQuMDkzIDMzLjYxODggNTQuNzc2MSAzNC4xNTk1IDU1LjI3MzlDMzQuNzAwMyA1NS43NzE4IDM1LjQwODUgNTYuMDQ4MiAzNi4xNDM1IDU2LjA0OEMzNi4xNDM1IDU2LjA0OCAzOC41NjQgNTYuMTczNyAzOS4zNzE2IDU2LjE3MzdDNDAuMjQwOSA1Ni4xNzM3IDQyLjg0NzQgNTYuMDQ4IDQyLjg0NzQgNTYuMDQ4QzQzLjU4MjMgNTYuMDQ4IDQ0LjI5MDQgNTUuNzcxNiA0NC44MzEgNTUuMjczN0M0NS4zNzE2IDU0Ljc3NTkgNDUuNzA1MiA1NC4wOTI5IDQ1Ljc2NTYgNTMuMzYwNUw0Ny41OTQgMzMuOTkzQzQ2Ljc3NjkgMzMuNzE0IDQ1Ljk1MjMgMzMuNTI4NiA0NS4wMjI3IDMzLjUyODZDNDMuNDE1IDMzLjUyNzkgNDIuMTE5NiAzNC4wODE3IDQwLjYyMyAzNC43MjIxWlwiIGZpbGw9XCJ3aGl0ZVwiLz5cclxuPHBhdGggZD1cIk0yNi4yMzQ0IDI3LjI0NDlMMjYuMjYzMyAyNy4yNzE5TDI2LjI4MjEgMjcuMjgzMkMyNi4yNjc2IDI3LjI2ODggMjYuMjUxNiAyNy4yNTU5IDI2LjIzNDQgMjcuMjQ0OVpcIiBmaWxsPVwiIzBEMEMyMlwiLz5cclxuPHBhdGggZD1cIk01NS40OTA2IDI1LjYyNzRMNTUuMjMzNiAyNC4zMzA3QzU1LjAwMjkgMjMuMTY3MyA1NC40NzkzIDIyLjA2OCA1My4yODUxIDIxLjY0NzVDNTIuOTAyNCAyMS41MTMgNTIuNDY4IDIxLjQ1NTIgNTIuMTc0NSAyMS4xNzY4QzUxLjg4MSAyMC44OTgzIDUxLjc5NDMgMjAuNDY1OSA1MS43MjY0IDIwLjA2NDlDNTEuNjAwNyAxOS4zMjg5IDUxLjQ4MjUgMTguNTkyMyA1MS4zNTM3IDE3Ljg1NzVDNTEuMjQyNCAxNy4yMjU5IDUxLjE1NDQgMTYuNTE2MyA1MC44NjQ3IDE1LjkzNjhDNTAuNDg3NiAxNS4xNTg2IDQ5LjcwNSAxNC43MDM2IDQ4LjkyNjkgMTQuNDAyNUM0OC41MjgyIDE0LjI1MzcgNDguMTIxMyAxNC4xMjc4IDQ3LjcwODIgMTQuMDI1NEM0NS43NjQyIDEzLjUxMjUgNDMuNzIwMiAxMy4zMjQgNDEuNzIwMiAxMy4yMTY1QzM5LjMxOTcgMTMuMDg0IDM2LjkxMjggMTMuMTIzOSAzNC41MTggMTMuMzM1OUMzMi43MzU1IDEzLjQ5ODEgMzAuODU4MSAxMy42OTQyIDI5LjE2NDIgMTQuMzEwOEMyOC41NDUxIDE0LjUzNjQgMjcuOTA3MSAxNC44MDczIDI3LjQzNjQgMTUuMjg1NkMyNi44NTg3IDE1Ljg3MzMgMjYuNjcwMiAxNi43ODIxIDI3LjA5MTkgMTcuNTE1QzI3LjM5MTcgMTguMDM1NCAyNy44OTk2IDE4LjQwMzEgMjguNDM4MiAxOC42NDYzQzI5LjEzOTggMTguOTU5NyAyOS44NzI2IDE5LjE5ODIgMzAuNjI0MiAxOS4zNTc4QzMyLjcxNzIgMTkuODIwNCAzNC44ODUgMjAuMDAyMSAzNy4wMjMzIDIwLjA3OTRDMzkuMzkzMiAyMC4xNzUgNDEuNzY3IDIwLjA5NzUgNDQuMTI1NiAxOS44NDc0QzQ0LjcwODkgMTkuNzgzMyA0NS4yOTExIDE5LjcwNjQgNDUuODcyMyAxOS42MTY4QzQ2LjU1NjggMTkuNTExOCA0Ni45OTYxIDE4LjYxNjggNDYuNzk0MyAxNy45OTMzQzQ2LjU1MyAxNy4yNDc5IDQ1LjkwNDQgMTYuOTU4NyA0NS4xNzA5IDE3LjA3MTJDNDUuMDYyOCAxNy4wODgyIDQ0Ljk1NTMgMTcuMTAzOSA0NC44NDcyIDE3LjExOTZMNDQuNzY5MiAxNy4xMzFDNDQuNTIwOCAxNy4xNjI0IDQ0LjI3MjMgMTcuMTkxNyA0NC4wMjM4IDE3LjIxOUM0My41MTA1IDE3LjI3NDMgNDIuOTk1OSAxNy4zMTk1IDQyLjQ4MDEgMTcuMzU0N0M0MS4zMjQ5IDE3LjQzNTIgNDAuMTY2NSAxNy40NzIyIDM5LjAwODggMTcuNDc0MUMzNy44NzEyIDE3LjQ3NDEgMzYuNzMyOSAxNy40NDIxIDM1LjU5NzggMTcuMzY3M0MzNS4wNzk5IDE3LjMzMzMgMzQuNTYzMiAxNy4yOTAyIDM0LjA0NzggMTcuMjM3OEMzMy44MTM0IDE3LjIxMzMgMzMuNTc5NiAxNy4xODc1IDMzLjM0NTggMTcuMTU4NkwzMy4xMjMzIDE3LjEzMDNMMzMuMDc0OSAxNy4xMjM0TDMyLjg0NDIgMTcuMDkwMUMzMi4zNzI4IDE3LjAxOTEgMzEuOTAxNCAxNi45Mzc0IDMxLjQzNSAxNi44Mzg3QzMxLjM4OCAxNi44MjgzIDMxLjM0NTkgMTYuODAyMSAzMS4zMTU3IDE2Ljc2NDVDMzEuMjg1NiAxNi43MjY5IDMxLjI2OTEgMTYuNjgwMSAzMS4yNjkxIDE2LjYzMTlDMzEuMjY5MSAxNi41ODM3IDMxLjI4NTYgMTYuNTM2OSAzMS4zMTU3IDE2LjQ5OTNDMzEuMzQ1OSAxNi40NjE3IDMxLjM4OCAxNi40MzU2IDMxLjQzNSAxNi40MjUxSDMxLjQ0MzhDMzEuODQ4IDE2LjMzOSAzMi4yNTUzIDE2LjI2NTUgMzIuNjYzOCAxNi4yMDE0QzMyLjggMTYuMTggMzIuOTM2NiAxNi4xNTkgMzMuMDczNiAxNi4xMzg1SDMzLjA3NzRDMzMuMzMzMiAxNi4xMjE1IDMzLjU5MDMgMTYuMDc1NyAzMy44NDQ4IDE2LjA0NTVDMzYuMDU5NSAxNS44MTUxIDM4LjI4NzQgMTUuNzM2NiA0MC41MTI4IDE1LjgxMDRDNDEuNTkzMyAxNS44NDE5IDQyLjY3MzEgMTUuOTA1MyA0My43NDg1IDE2LjAxNDdDNDMuOTc5OCAxNi4wMzg2IDQ0LjIwOTggMTYuMDYzNyA0NC40Mzk5IDE2LjA5MkM0NC41Mjc5IDE2LjEwMjcgNDQuNjE2NSAxNi4xMTUzIDQ0LjcwNTEgMTYuMTI1OUw0NC44ODM2IDE2LjE1MTdDNDUuNDA0IDE2LjIyOTIgNDUuOTIxNyAxNi4zMjMzIDQ2LjQzNjcgMTYuNDMzOUM0Ny4xOTk3IDE2LjU5OTkgNDguMTc5NiAxNi42NTM5IDQ4LjUxOSAxNy40ODk4QzQ4LjYyNzEgMTcuNzU1MSA0OC42NzYxIDE4LjA0OTkgNDguNzM1OSAxOC4zMjgzTDQ4LjgxMTkgMTguNjgzNEM0OC44MTM5IDE4LjY4OTggNDguODE1NCAxOC42OTYzIDQ4LjgxNjMgMTguNzAyOUM0OC45OTYxIDE5LjU0MDkgNDkuMTc2IDIwLjM3OSA0OS4zNTYyIDIxLjIxN0M0OS4zNjk0IDIxLjI3ODkgNDkuMzY5NyAyMS4zNDI5IDQ5LjM1NzEgMjEuNDA0OUM0OS4zNDQ1IDIxLjQ2NjkgNDkuMzE5MyAyMS41MjU3IDQ5LjI4MjkgMjEuNTc3NkM0OS4yNDY2IDIxLjYyOTQgNDkuMiAyMS42NzMyIDQ5LjE0NiAyMS43MDYyQzQ5LjA5MiAyMS43MzkyIDQ5LjAzMTcgMjEuNzYwOCA0OC45NjkgMjEuNzY5NUg0OC45NjRMNDguODU0IDIxLjc4NDZMNDguNzQ1MyAyMS43OTlDNDguNDAwOSAyMS44NDM5IDQ4LjA1NiAyMS44ODU4IDQ3LjcxMDcgMjEuOTI0N0M0Ny4wMzA3IDIyLjAwMjIgNDYuMzQ5NiAyMi4wNjkzIDQ1LjY2NzQgMjIuMTI1OUM0NC4zMTE5IDIyLjIzODYgNDIuOTUzNiAyMi4zMTI1IDQxLjU5MjcgMjIuMzQ3N0M0MC44OTkyIDIyLjM2NjIgNDAuMjA1OSAyMi4zNzQ4IDM5LjUxMjkgMjIuMzczNUMzNi43NTQzIDIyLjM3MTMgMzMuOTk4MSAyMi4yMTEgMzEuMjU3OCAyMS44OTMzQzMwLjk2MTEgMjEuODU4MSAzMC42NjQ1IDIxLjgyMDQgMzAuMzY3OCAyMS43ODIxQzMwLjU5NzggMjEuODExNiAzMC4yMDA2IDIxLjc1OTQgMzAuMTIwMiAyMS43NDgxQzI5LjkzMTYgMjEuNzIxNyAyOS43NDMxIDIxLjY5NDMgMjkuNTU0NSAyMS42NjU4QzI4LjkyMTYgMjEuNTcwOSAyOC4yOTI0IDIxLjQ1NCAyNy42NjA3IDIxLjM1MTVDMjYuODk3MSAyMS4yMjU4IDI2LjE2NjcgMjEuMjg4NyAyNS40NzYgMjEuNjY1OEMyNC45MDkgMjEuOTc2IDI0LjQ1MDEgMjIuNDUxOCAyNC4xNjA1IDIzLjAyOTdDMjMuODYyNiAyMy42NDU2IDIzLjc3MzkgMjQuMzE2MyAyMy42NDA3IDI0Ljk3ODFDMjMuNTA3NCAyNS42Mzk5IDIzLjMgMjYuMzUyMSAyMy4zNzg2IDI3LjAzMTVDMjMuNTQ3NyAyOC40OTc5IDI0LjU3MjggMjkuNjg5NSAyNi4wNDczIDI5Ljk1NkMyNy40MzQ1IDMwLjIwNzQgMjguODI5MiAzMC40MTExIDMwLjIyNzYgMzAuNTg0NkMzNS43MjEyIDMxLjI1NzQgNDEuMjcxMSAzMS4zMzc5IDQ2Ljc4MTggMzAuODI0N0M0Ny4yMzA1IDMwLjc4MjggNDcuNjc4NyAzMC43MzcxIDQ4LjEyNjIgMzAuNjg3NkM0OC4yNjYgMzAuNjcyMyA0OC40MDc0IDMwLjY4ODQgNDguNTQwMSAzMC43MzQ4QzQ4LjY3MjkgMzAuNzgxMiA0OC43OTM2IDMwLjg1NjYgNDguODkzNCAzMC45NTU3QzQ4Ljk5MzIgMzEuMDU0OCA0OS4wNjk1IDMxLjE3NDkgNDkuMTE2OSAzMS4zMDczQzQ5LjE2NDIgMzEuNDM5NyA0OS4xODE0IDMxLjU4MTEgNDkuMTY3IDMxLjcyMDlMNDkuMDI3NSAzMy4wNzczQzQ4Ljc0NjMgMzUuODE4MSA0OC40NjUyIDM4LjU1ODcgNDguMTg0IDQxLjI5OUM0Ny44OTA3IDQ0LjE3NjkgNDcuNTk1NSA0Ny4wNTQ1IDQ3LjI5ODQgNDkuOTMxOUM0Ny4yMTQ2IDUwLjc0MjIgNDcuMTMwOCA1MS41NTI0IDQ3LjA0NyA1Mi4zNjI0QzQ2Ljk2NjYgNTMuMTYgNDYuOTU1MiA1My45ODI3IDQ2LjgwMzggNTQuNzcwOUM0Ni41NjQ5IDU2LjAxMDMgNDUuNzI1OCA1Ni43NzE1IDQ0LjUwMTUgNTcuMDQ5OUM0My4zNzk4IDU3LjMwNTIgNDIuMjMzOSA1Ny40MzkyIDQxLjA4MzYgNTcuNDQ5N0MzOS44MDgzIDU3LjQ1NjYgMzguNTMzNiA1Ny40IDM3LjI1ODMgNTcuNDA2OUMzNS44OTcgNTcuNDE0NSAzNC4yMjk1IDU3LjI4ODcgMzMuMTc4NiA1Ni4yNzU2QzMyLjI1NTMgNTUuMzg1NiAzMi4xMjc3IDUzLjk5MjEgMzIuMDAyIDUyLjc4NzJDMzEuODM0NCA1MS4xOTIgMzEuNjY4MiA0OS41OTcxIDMxLjUwMzYgNDguMDAyM0wzMC41Nzk2IDM5LjEzNDRMMjkuOTgxOSAzMy4zOTY2QzI5Ljk3MTggMzMuMzAxNyAyOS45NjE4IDMzLjIwOCAyOS45NTI0IDMzLjExMjVDMjkuODgwNyAzMi40MjggMjkuMzk2MSAzMS43NTggMjguNjMyNCAzMS43OTI2QzI3Ljk3ODggMzEuODIxNSAyNy4yMzU5IDMyLjM3NzEgMjcuMzEyNSAzMy4xMTI1TDI3Ljc1NTcgMzcuMzY2NEwyOC42NzIgNDYuMTY1N0MyOC45MzMxIDQ4LjY2NTIgMjkuMTkzNSA1MS4xNjUgMjkuNDUzMyA1My42NjUzQzI5LjUwMzYgNTQuMTQ0MiAyOS41NTA3IDU0LjYyNDQgMjkuNjAzNSA1NS4xMDM0QzI5Ljg5MDggNTcuNzIwNSAzMS44ODk1IDU5LjEzMSAzNC4zNjQ2IDU5LjUyODJDMzUuODEwMiA1OS43NjA3IDM3LjI5MSA1OS44MDg1IDM4Ljc1OCA1OS44MzI0QzQwLjYzODYgNTkuODYyNiA0Mi41MzggNTkuOTM0OCA0NC4zODc3IDU5LjU5NDJDNDcuMTI4NyA1OS4wOTE0IDQ5LjE4NTMgNTcuMjYxMSA0OS40Nzg4IDU0LjQyMkM0OS41NjI2IDUzLjYwMjQgNDkuNjQ2NCA1Mi43ODI2IDQ5LjczMDIgNTEuOTYyNkM1MC4wMDg4IDQ5LjI1MDcgNTAuMjg3MSA0Ni41Mzg2IDUwLjU2NDkgNDMuODI2M0w1MS40NzM3IDM0Ljk2NDFMNTEuODkwNCAzMC45MDI2QzUxLjkxMTIgMzAuNzAxMiA1MS45OTYyIDMwLjUxMTggNTIuMTMzIDMwLjM2MjVDNTIuMjY5NyAzMC4yMTMyIDUyLjQ1MDkgMzAuMTExOSA1Mi42NDk3IDMwLjA3MzZDNTMuNDMzNSAyOS45MjA4IDU0LjE4MjcgMjkuNjYgNTQuNzQwMiAyOS4wNjM1QzU1LjYyNzcgMjguMTEzOCA1NS44MDQzIDI2Ljg3NTYgNTUuNDkwNiAyNS42Mjc0Wk0yNi4wMDcxIDI2LjUwMzVDMjYuMDE5IDI2LjQ5NzkgMjUuOTk3IDI2LjYwMDMgMjUuOTg3NiAyNi42NDgxQzI1Ljk4NTcgMjYuNTc1OCAyNS45ODk1IDI2LjUxMTcgMjYuMDA3MSAyNi41MDM1Wk0yNi4wODMxIDI3LjA5MThDMjYuMDg5NCAyNy4wODc0IDI2LjEwODMgMjcuMTEyNiAyNi4xMjc4IDI3LjE0MjhDMjYuMDk4MiAyNy4xMTUxIDI2LjA3OTQgMjcuMDk0NCAyNi4wODI1IDI3LjA5MThIMjYuMDgzMVpNMjYuMTU3OSAyNy4xOTA1QzI2LjE4NSAyNy4yMzY0IDI2LjE5OTQgMjcuMjY1MyAyNi4xNTc5IDI3LjE5MDVWMjcuMTkwNVpNMjYuMzA4MiAyNy4zMTI1SDI2LjMxMTlDMjYuMzExOSAyNy4zMTY5IDI2LjMxODggMjcuMzIxMyAyNi4zMjE0IDI3LjMyNTdDMjYuMzE3MiAyNy4zMjA4IDI2LjMxMjYgMjcuMzE2NCAyNi4zMDc1IDI3LjMxMjVIMjYuMzA4MlpNNTIuNjEzMiAyNy4xMzAyQzUyLjMzMTcgMjcuMzk3OSA1MS45MDc0IDI3LjUyMjQgNTEuNDg4MiAyNy41ODQ2QzQ2Ljc4NjggMjguMjgyMyA0Mi4wMTY5IDI4LjYzNTUgMzcuMjY0IDI4LjQ3OTZDMzMuODYyNCAyOC4zNjMzIDMwLjQ5NjcgMjcuOTg1NiAyNy4xMjkgMjcuNTA5OEMyNi43OTkgMjcuNDYzMyAyNi40NDE0IDI3LjQwMyAyNi4yMTQ1IDI3LjE1OTdDMjUuNzg3MSAyNi43MDA5IDI1Ljk5NyAyNS43NzcgMjYuMTA4MyAyNS4yMjI2QzI2LjIxMDEgMjQuNzE0OCAyNi40MDUgMjQuMDM3OCAyNy4wMDkgMjMuOTY1NkMyNy45NTE4IDIzLjg1NDkgMjkuMDQ2NiAyNC4yNTI4IDI5Ljk3OTQgMjQuMzk0MkMzMS4xMDIzIDI0LjU2NTYgMzIuMjI5NSAyNC43MDI4IDMzLjM2MDkgMjQuODA1OUMzOC4xODkyIDI1LjI0NTkgNDMuMDk4NiAyNS4xNzc0IDQ3LjkwNTYgMjQuNTMzN0M0OC43ODE3IDI0LjQxNiA0OS42NTQ4IDI0LjI3OTIgNTAuNTI0NiAyNC4xMjMzQzUxLjI5OTYgMjMuOTg0NCA1Mi4xNTg4IDIzLjcyMzYgNTIuNjI3MSAyNC41MjYyQzUyLjk0ODIgMjUuMDczIDUyLjk5MSAyNS44MDQ2IDUyLjk0MTMgMjYuNDIyNUM1Mi45MjYgMjYuNjkxNyA1Mi44MDg0IDI2Ljk0NDggNTIuNjEyNiAyNy4xMzAySDUyLjYxMzJaXCIgZmlsbD1cIiMwRDBDMjJcIi8+XHJcbjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk04MS4xMzAyIDQwLjE5MjlDODAuODU1NiA0MC43MTY5IDgwLjQ3ODEgNDEuMTczMiA3OS45OTc4IDQxLjU2MDRDNzkuNTE3NSA0MS45NDc5IDc4Ljk1NzEgNDIuMjYzMyA3OC4zMTY2IDQyLjUwNjJDNzcuNjc2MSA0Mi43NDk3IDc3LjAzMTUgNDIuOTEzMSA3Ni4zODM1IDQyLjk5NjRDNzUuNzM1MiA0My4wNzk5IDc1LjEwNiA0My4wNzI3IDc0LjQ5NjMgNDIuOTczNUM3My44ODYzIDQyLjg3NDkgNzMuMzY3NCA0Mi42NzM3IDcyLjk0MDggNDIuMzY5NUw3My40MjE0IDM3LjM3NzlDNzMuODYzMyAzNy4yMjYxIDc0LjQxOTcgMzcuMDcwMyA3NS4wOTA5IDM2LjkxMDdDNzUuNzYxOSAzNi43NTEzIDc2LjQ1MiAzNi42MzcxIDc3LjE2MTMgMzYuNTY4OUM3Ny44NzA1IDM2LjUwMDMgNzguNTQxMiAzNi41MDg0IDc5LjE3NDQgMzYuNTkxN0M3OS44MDY4IDM2LjY3NTMgODAuMzA2NSAzNi44NzY1IDgwLjY3MjUgMzcuMTk1OEM4MC44NzA3IDM3LjM3OCA4MS4wMzg3IDM3LjU3NTQgODEuMTc2IDM3Ljc4ODNDODEuMzEzIDM4LjAwMTEgODEuMzk2OSAzOC4yMjE0IDgxLjQyNzYgMzguNDQ5M0M4MS41MDM3IDM5LjA4NzUgODEuNDA0NyAzOS42Njg3IDgxLjEzMDIgNDAuMTkyOVpNNzQuMTUzIDI5LjU2MDJDNzQuNDczNCAyOS4zNjI3IDc0Ljg1ODUgMjkuMTg3NyA3NS4zMDgzIDI5LjAzNTZDNzUuNzU4MSAyOC44ODQxIDc2LjIxOTUgMjguNzc3NCA3Ni42OTIzIDI4LjcxNjdDNzcuMTY0OCAyOC42NTYyIDc3LjYyNjIgMjguNjQ4MSA3OC4wNzYzIDI4LjY5MzhDNzguNTI1OCAyOC43Mzk1IDc4LjkyMjggMjguODY0NyA3OS4yNjU5IDI5LjA2OTdDNzkuNjA4OSAyOS4yNzUxIDc5Ljg2NDMgMjkuNTcxNCA4MC4wMzIgMjkuOTU4NkM4MC4xOTk3IDMwLjM0NjQgODAuMjQ1NiAzMC44MzY1IDgwLjE2OTMgMzEuNDI5QzgwLjEwODMgMzEuOTAwMSA3OS45MjExIDMyLjI5OTEgNzkuNjA4OSAzMi42MjU2Qzc5LjI5NjMgMzIuOTUyNiA3OC45MTQ3IDMzLjIyNTkgNzguNDY1MiAzMy40NDYyQzc4LjAxNTQgMzMuNjY2OCA3Ny41Mzg4IDMzLjg0MTUgNzcuMDM1NiAzMy45NzAyQzc2LjUzMjEgMzQuMDk5NyA3Ni4wNDc3IDM0LjE5NDkgNzUuNTgyOCAzNC4yNTUzQzc1LjExNzYgMzQuMzE2MyA3NC43MTM3IDM0LjM1NDUgNzQuMzcwNiAzNC4zNjkyQzc0LjAyNzMgMzQuMzg0NSA3My44MDIxIDM0LjM5MjEgNzMuNjk1NiAzNC4zOTIxTDc0LjE1MyAyOS41NjAyWk04My42MDA3IDM2Ljk2NzZDODMuMzU2NiAzNi40MzYxIDgzLjAyODcgMzUuOTY4OSA4Mi42MTcyIDM1LjU2NThDODIuMjA1NCAzNS4xNjMzIDgxLjcxNyAzNC44NzA5IDgxLjE1MzEgMzQuNjg4NUM4MS4zOTY5IDM0LjQ5MSA4MS42MzcxIDM0LjE3OTUgODEuODczNyAzMy43NTM5QzgyLjEwOTkgMzMuMzI4OCA4Mi4zMTE5IDMyLjg2NSA4Mi40Nzk2IDMyLjM2MzZDODIuNjQ3NCAzMS44NjE5IDgyLjc2MiAzMS4zNTcgODIuODIyOSAzMC44NDc4QzgyLjg4MzYgMzAuMzM4OSA4Mi44NjA3IDI5LjkwMiA4Mi43NTQ0IDI5LjUzN0M4Mi40OTQ3IDI4LjYyNTYgODIuMDg3IDI3LjkxMTQgODEuNTMwMyAyNy4zOTQ2QzgwLjk3MzQgMjYuODc4MiA4MC4zMjU3IDI2LjUyMTEgNzkuNTg2IDI2LjMyMzNDNzguODQ2MiAyNi4xMjY0IDc4LjAzMDQgMjYuMDg0MiA3Ny4xMzgzIDI2LjE5ODFDNzYuMjQ2MiAyNi4zMTIgNzUuMzM0NyAyNi41MzYxIDc0LjQwNDkgMjYuODcwNEM3NC40MDQ5IDI2Ljc5NDYgNzQuNDEyNCAyNi43MTQ4IDc0LjQyNzggMjYuNjMxMkM3NC40NDI2IDI2LjU0OCA3NC40NTA0IDI2LjQ2MDQgNzQuNDUwNCAyNi4zNjlDNzQuNDUwNCAyNi4xNDExIDc0LjMzNjEgMjUuOTQzOSA3NC4xMDc0IDI1Ljc3NjVDNzMuODc4NyAyNS42MDkzIDczLjYxNTUgMjUuNTEwNyA3My4zMTgzIDI1LjQ4MDFDNzMuMDIwOSAyNS40NSA3Mi43MzEgMjUuNTE0MiA3Mi40NDg5IDI1LjY3MzhDNzIuMTY2NSAyNS44MzM0IDcxLjk3MjEgMjYuMTI2NCA3MS44NjU2IDI2LjU1MTFDNzEuNzQzNCAyNy45MTg5IDcxLjYyMTUgMjkuMzM5OCA3MS40OTk2IDMwLjgxMzRDNzEuMzc3NCAzMi4yODc1IDcxLjI0OCAzMy43NzY3IDcxLjExMDcgMzUuMjgxMkM3MC45NzM1IDM2Ljc4NTUgNzAuODM2MiAzOC4yNzg0IDcwLjY5ODkgMzkuNzU5OEM3MC41NjE2IDQxLjI0MTQgNzAuNDI0NCA0Mi42NjU5IDcwLjI4NzEgNDQuMDMzM0M3MC4zMzMgNDQuNDQzNiA3MC40NDczIDQ0Ljc2MjkgNzAuNjMwNCA0NC45OTA3QzcwLjgxMzMgNDUuMjE4OSA3MS4wMjY4IDQ1LjM1NTYgNzEuMjcwOSA0NS40MDFDNzEuNTE0NyA0NS40NDY3IDcxLjc3MDQgNDUuNDA0NSA3Mi4wMzcxIDQ1LjI3NTVDNzIuMzAzOCA0NS4xNDY5IDcyLjUzNjUgNDQuOTIyMiA3Mi43MzUgNDQuNjAzMkM3My4zNDQ3IDQ0LjkzNzUgNzQuMDMxMSA0NS4xNTQxIDc0Ljc5MzggNDUuMjUzQzc1LjU1NjEgNDUuMzUxNiA3Ni4zMjk4IDQ1LjM1MTYgNzcuMTE1NyA0NS4yNTNDNzcuOTAwNyA0NS4xNTQxIDc4LjY3NDcgNDQuOTY4MiA3OS40Mzc0IDQ0LjY5NDNDODAuMTk5NyA0NC40MjExIDgwLjg5MzYgNDQuMDc5IDgxLjUxOSA0My42NjlDODIuMTQ0MSA0My4yNTg2IDgyLjY3MDMgNDIuNzkxMSA4My4wOTc1IDQyLjI2NzFDODMuNTI0NCA0MS43NDI2IDgzLjgwNjUgNDEuMTc2NyA4My45NDM3IDQwLjU2OTFDODQuMDgxIDM5Ljk0NiA4NC4xMTkgMzkuMzIzMSA4NC4wNTgxIDM4LjdDODMuOTk3MSAzOC4wNzcxIDgzLjg0NDUgMzcuNSA4My42MDA3IDM2Ljk2NzZaXCIgZmlsbD1cIiMwRDBDMjNcIi8+XHJcbjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMDUuOTE1IDQ5LjAwMTdDMTA1LjgzMiA0OS41MDMxIDEwNS43MTMgNTAuMDMxMSAxMDUuNTYxIDUwLjU4NkMxMDUuNDA4IDUxLjE0MDMgMTA1LjIyOSA1MS42NDU4IDEwNS4wMjMgNTIuMTAxOEMxMDQuODE4IDUyLjU1NzUgMTA0LjU4OSA1Mi45MjU2IDEwNC4zMzcgNTMuMjA3QzEwNC4wODUgNTMuNDg4IDEwMy44MTUgNTMuNjA2IDEwMy41MjUgNTMuNTYwNkMxMDMuMjk2IDUzLjUyOTcgMTAzLjE1MSA1My4zODU0IDEwMy4wOTEgNTMuMTI3NEMxMDMuMDI5IDUyLjg2ODYgMTAzLjAyOSA1Mi41NDk3IDEwMy4wOTEgNTIuMTdDMTAzLjE1MSA1MS43OTAxIDEwMy4yNjkgNTEuMzYwNyAxMDMuNDQ1IDUwLjg4MjFDMTAzLjYyIDUwLjQwMzUgMTAzLjgzNCA0OS45Mjg0IDEwNC4wODUgNDkuNDU3N0MxMDQuMzM3IDQ4Ljk4NjQgMTA0LjYyMyA0OC41MzQ3IDEwNC45NDMgNDguMTAxNUMxMDUuMjY0IDQ3LjY2ODYgMTA1LjU5OSA0Ny4zMDc1IDEwNS45NSA0Ny4wMTg5QzEwNi4wMjYgNDcuMTEgMTA2LjA2IDQ3LjMzNzggMTA2LjA1MyA0Ny43MDI4QzEwNi4wNDUgNDguMDY3NCAxMDUuOTk5IDQ4LjUwMDYgMTA1LjkxNSA0OS4wMDE3Wk0xMTMuNjcgMzkuMTA5N0MxMTMuNDY0IDM4Ljg4MTkgMTEzLjIxMyAzOC43NTI5IDExMi45MTUgMzguNzIyM0MxMTIuNjE4IDM4LjY5MTkgMTEyLjMxNyAzOC44NTkgMTEyLjAxMiAzOS4yMjM3QzExMS44MTMgMzkuNTg4MyAxMTEuNTYyIDM5LjkzNzkgMTExLjI1NyA0MC4yNzIyQzExMC45NTIgNDAuNjA2NyAxMTAuNjM1IDQwLjkxMDMgMTEwLjMwNyA0MS4xODM5QzEwOS45OCA0MS40NTcyIDEwOS42NjcgNDEuNjkzMSAxMDkuMzcgNDEuODkwM0MxMDkuMDcyIDQyLjA4ODEgMTA4Ljg0IDQyLjIzMjQgMTA4LjY3MiA0Mi4zMjM1QzEwOC42MTEgNDEuODM3NCAxMDguNTc2IDQxLjMxMzIgMTA4LjU2OSA0MC43NTA3QzEwOC41NjEgNDAuMTg4NiAxMDguNTczIDM5LjYxOSAxMDguNjAzIDM5LjA0MTVDMTA4LjY0OSAzOC4yMjA5IDEwOC43NDQgMzcuMzkzIDEwOC44ODkgMzYuNTU3QzEwOS4wMzQgMzUuNzIxMyAxMDkuMjQ0IDM0LjkwMDcgMTA5LjUxOCAzNC4wOTUxQzEwOS41MTggMzMuNjcgMTA5LjQxOSAzMy4zMjQyIDEwOS4yMjEgMzMuMDU4MkMxMDkuMDIyIDMyLjc5MjQgMTA4Ljc4MiAzMi42MjUgMTA4LjUgMzIuNTU2N0MxMDguMjE4IDMyLjQ4ODUgMTA3LjkyOSAzMi41MjY0IDEwNy42MzEgMzIuNjcwN0MxMDcuMzM0IDMyLjgxNTMgMTA3LjA3OCAzMy4wNzc1IDEwNi44NjUgMzMuNDU2OUMxMDYuNjgyIDMzLjk1ODYgMTA2LjQ3MiAzNC41MjA3IDEwNi4yMzYgMzUuMTQzNkMxMDUuOTk5IDM1Ljc2NjcgMTA1LjczMiAzNi40MDEyIDEwNS40MzUgMzcuMDQ2OUMxMDUuMTM4IDM3LjY5MzEgMTA0LjgwNiAzOC4zMTk3IDEwNC40NCAzOC45MjczQzEwNC4wNzQgMzkuNTM1NCAxMDMuNjc0IDQwLjA3NSAxMDMuMjM5IDQwLjU0NTdDMTAyLjgwNCA0MS4wMTY4IDEwMi4zMzEgNDEuMzg1NCAxMDEuODIxIDQxLjY1MTJDMTAxLjMxIDQxLjkxNzIgMTAwLjc1NyA0Mi4wMzQ5IDEwMC4xNjIgNDIuMDA0NUM5OS44ODc2IDQxLjkyODUgOTkuNjg5MyA0MS43MjM1IDk5LjU2NzUgNDEuMzg4OUM5OS40NDUzIDQxLjA1NDkgOTkuMzczIDQwLjYzNjggOTkuMzUwNCA0MC4xMzU0Qzk5LjMyNzUgMzkuNjM0IDk5LjM1MDQgMzkuMDgzMSA5OS40MTg5IDM4LjQ4MjhDOTkuNDg3NyAzNy44ODI4IDk5LjU3OTEgMzcuMjg2MyA5OS42OTM0IDM2LjY5MzhDOTkuODA3OCAzNi4xMDEgOTkuOTMzNyAzNS41Mzg5IDEwMC4wNzEgMzUuMDA3MUMxMDAuMjA4IDM0LjQ3NTMgMTAwLjMzNyAzNC4wMjY4IDEwMC40NiAzMy42NjIyQzEwMC42NDMgMzMuMjIxOCAxMDAuNjQzIDMyLjg1MjkgMTAwLjQ2IDMyLjU1NjdDMTAwLjI3NyAzMi4yNjA0IDEwMC4wMjUgMzIuMDYzMSA5OS43MDUgMzEuOTY0Qzk5LjM4NDYgMzEuODY1NCA5OS4wNDg5IDMxLjg2OTQgOTguNjk4MyAzMS45NzU1Qzk4LjM0NzQgMzIuMDgxOSA5OC4wOTU4IDMyLjMxNzMgOTcuOTQzNSAzMi42ODJDOTcuNjg0IDMzLjMwNTQgOTcuNDQ3NSAzNC4wMDQgOTcuMjM0MiAzNC43NzlDOTcuMDIwNiAzNS41NTM5IDk2Ljg0OTEgMzYuMzU1OCA5Ni43MTk3IDM3LjE4MzZDOTYuNTg5NiAzOC4wMTIxIDk2LjUxNzEgMzguODMyNyA5Ni41MDIgMzkuNjQ1NkM5Ni41MDExIDM5LjY5ODUgOTYuNTAzNyAzOS43NDg4IDk2LjUwMzQgMzkuODAxNEM5Ni4xNzA5IDQwLjY4NDggOTUuODU0IDQxLjM1MjUgOTUuNTUzIDQxLjc5OTJDOTUuMTY0MSA0Mi4zNzcgOTQuNzI1MyA0Mi42Mjc3IDk0LjIzNzUgNDIuNTUxM0M5NC4wMjM2IDQyLjQ2MDMgOTMuODgzMiA0Mi4yNDc3IDkzLjgxNDcgNDEuOTEzMkM5My43NDUzIDQxLjU3OTIgOTMuNzIyNyA0MS4xNjg5IDkzLjc0NTMgNDAuNjgyMkM5My43Njg4IDQwLjE5NjQgOTMuODI2IDM5LjY0NTYgOTMuOTE3MSAzOS4wMjk5Qzk0LjAwOTEgMzguNDE0NiA5NC4xMjI5IDM3Ljc3NjQgOTQuMjYwMSAzNy4xMTU0Qzk0LjM5NzcgMzYuNDU0MSA5NC41NDI1IDM1Ljc4OTkgOTQuNjk0OSAzNS4xMjFDOTQuODQ3MiAzNC40NTI1IDk0Ljk4NDUgMzMuODIxOCA5NS4xMDcgMzMuMjI5MUM5NS4wOTE2IDMyLjY5NzMgOTQuOTM1MiAzMi4yOTEgOTQuNjM3NyAzMi4wMDk3Qzk0LjM0MDUgMzEuNzI4OSA5My45MjQ3IDMxLjYxODcgOTMuMzkxMyAzMS42NzkxQzkzLjAyNTMgMzEuODMxMiA5Mi43NTQyIDMyLjAyOSA5Mi41NzkgMzIuMjcxOUM5Mi40MDM0IDMyLjUxNDggOTIuMjYyMyAzMi44MjY1IDkyLjE1NTggMzMuMjA2MkM5Mi4wOTQ2IDMzLjQwNCA5Mi4wMDMyIDMzLjc5OSA5MS44ODEzIDM0LjM5MThDOTEuNzU5MSAzNC45ODQgOTEuNjAzIDM1LjY2NDQgOTEuNDEyMyAzNi40MzE1QzkxLjIyMTcgMzcuMTk5MiA5MC45OTY3IDM4LjAwMDUgOTAuNzM3NiAzOC44MzYyQzkwLjQ3ODEgMzkuNjcxOSA5MC4xODg1IDQwLjQyODMgODkuODY4NCA0MS4xMDQxQzg5LjU0OCA0MS43ODAxIDg5LjE5NzIgNDIuMzIzNSA4OC44MTYxIDQyLjczMzhDODguNDM0OCA0My4xNDM4IDg4LjAyMyA0My4zMTEzIDg3LjU4MDcgNDMuMjM1MkM4Ny4zMzY2IDQzLjE4OTUgODcuMTgwNSA0Mi45Mzg4IDg3LjExMiA0Mi40ODMxQzg3LjA0MzIgNDIuMDI3MSA4Ny4wMzE5IDQxLjQ2NTMgODcuMDc3NSA0MC43OTY0Qzg3LjEyMzMgNDAuMTI3OSA4Ny4yMTQ4IDM5LjM5NDYgODcuMzUyIDM4LjU5NzFDODcuNDg5MyAzNy43OTkzIDg3LjYzIDM3LjA0MzQgODcuNzc1MiAzNi4zMjg5Qzg3LjkyIDM1LjYxNDkgODguMDUzNSAzNC45ODQgODguMTc1NiAzNC40MzcyQzg4LjI5NzUgMzMuODkwMSA4OC4zODE0IDMzLjUyNTQgODguNDI3MiAzMy4zNDMzQzg4LjQyNzIgMzIuOTAyNiA4OC4zMjc3IDMyLjU0OTUgODguMTI5OCAzMi4yODMyQzg3LjkzMTMgMzIuMDE3OCA4Ny42OTEzIDMxLjg1MDMgODcuNDA5MiAzMS43ODE4Qzg3LjEyNjggMzEuNzEzNiA4Ni44MzcyIDMxLjc1MTQgODYuNTQgMzEuODk1N0M4Ni4yNDI2IDMyLjA0MDMgODUuOTg3MiAzMi4zMDI2IDg1Ljc3MzYgMzIuNjgyQzg1LjY5NzMgMzMuMDkyMyA4NS41OTggMzMuNTY3NCA4NS40NzYxIDM0LjEwNjdDODUuMzUzOSAzNC42NDU5IDg1LjIzNjEgMzUuMjAwNiA4NS4xMjE4IDM1Ljc3MDVDODUuMDA3NCAzNi4zNDA0IDg0LjkwMDMgMzYuODk4OCA4NC44MDE0IDM3LjQ0NTlDODQuNzAyMSAzNy45OTMgODQuNjI5OSAzOC40NzE2IDg0LjU4NCAzOC44ODE5Qzg0LjU1MzYgMzkuMjAwOCA4NC41MTkgMzkuNTkyMyA4NC40ODEzIDQwLjA1NTZDODQuNDQzIDQwLjUxOTQgODQuNDIzOCA0MS4wMDkyIDg0LjQyMzggNDEuNTI1N0M4NC40MjM4IDQyLjA0MjcgODQuNDYxOCA0Mi41NTU0IDg0LjUzODUgNDMuMDY0M0M4NC42MTQ1IDQzLjU3MzUgODQuNzUxOCA0NC4wNDA4IDg0Ljk1IDQ0LjQ2NTlDODUuMTQ4MiA0NC44OTE1IDg1LjQyNjUgNDUuMjQwOCA4NS43ODUyIDQ1LjUxNDRDODYuMTQzMyA0NS43ODc5IDg2LjU5NzIgNDUuOTM5NyA4Ny4xNDYzIDQ1Ljk3MDRDODcuNzEwMSA0Ni4wMDA1IDg4LjIwMiA0NS45NTkxIDg4LjYyMTcgNDUuODQ0OUM4OS4wNDEgNDUuNzMxIDg5LjQyMjEgNDUuNTUyMyA4OS43NjU0IDQ1LjMwOTFDOTAuMTA4NCA0NS4wNjY1IDkwLjQyMSA0NC43Nzc2IDkwLjcwMzMgNDQuNDQzQzkwLjk4NTEgNDQuMTA5MSA5MS4yNjM3IDQzLjc0NDQgOTEuNTM4MyA0My4zNDkxQzkxLjc5NzQgNDMuOTI2OSA5Mi4xMzI5IDQ0LjM3NDggOTIuNTQ0NyA0NC42OTRDOTIuOTU2NSA0NS4wMTMgOTMuMzkxMyA0NS4yMDMyIDkzLjg0ODYgNDUuMjYzN0M5NC4zMDYgNDUuMzI0MSA5NC43NzE1IDQ1LjI2MDIgOTUuMjQ0MiA0NS4wNjk5Qzk1LjcxNjcgNDQuODgwMyA5Ni4xNDM2IDQ0LjU1NzMgOTYuNTI1MiA0NC4xMDEyQzk2Ljc3NjIgNDMuODIxNiA5Ny4wMTMxIDQzLjUwMzggOTcuMjM1NCA0My4xNTI1Qzk3LjMyOTcgNDMuMzE3IDk3LjQzMDEgNDMuNDc1OCA5Ny41NDMgNDMuNjIyNEM5Ny45MTY4IDQ0LjEwOTEgOTguNDI0IDQ0LjQ0MyA5OS4wNjQ1IDQ0LjYyNTVDOTkuNzUwNiA0NC44MDggMTAwLjQyMSA0NC44Mzg2IDEwMS4wNzcgNDQuNzE2OUMxMDEuNzMzIDQ0LjU5NTQgMTAyLjM1OCA0NC4zNzQ4IDEwMi45NTMgNDQuMDU1OUMxMDMuNTQ4IDQzLjczNjYgMTA0LjEwMSA0My4zNTMyIDEwNC42MTIgNDIuOTA0N0MxMDUuMTIyIDQyLjQ1NjUgMTA1LjU2OCA0MS45ODk1IDEwNS45NSA0MS41MDI4QzEwNS45MzQgNDEuODUyNCAxMDUuOTI3IDQyLjE4MzIgMTA1LjkyNyA0Mi40OTQ0QzEwNS45MjcgNDIuODA2MSAxMDUuOTE5IDQzLjE0MzggMTA1LjkwNCA0My41MDg4QzEwNS4xNDEgNDQuMDQwOCAxMDQuNDIxIDQ0LjY3OSAxMDMuNzQyIDQ1LjQyMzNDMTAzLjA2NCA0Ni4xNjc2IDEwMi40NjkgNDYuOTYxNiAxMDEuOTU4IDQ3LjgwNTFDMTAxLjQ0NyA0OC42NDgzIDEwMS4wNDcgNDkuNTAzMSAxMDAuNzU3IDUwLjM2OTFDMTAwLjQ2NyA1MS4yMzU3IDEwMC4zMjYgNTIuMDQ0NSAxMDAuMzM0IDUyLjc5NjlDMTAwLjM0MSA1My41NDkgMTAwLjUyMSA1NC4yMDYgMTAwLjg3MSA1NC43NjgxQzEwMS4yMjIgNTUuMzMwNiAxMDEuNzk0IDU1LjczMzEgMTAyLjU4NyA1NS45NzYzQzEwMy40MTEgNTYuMjM0OCAxMDQuMTM1IDU2LjI0MiAxMDQuNzYgNTUuOTk5MUMxMDUuMzg2IDU1Ljc1NTkgMTA1LjkzMSA1NS4zNTMxIDEwNi4zOTYgNTQuNzkxQzEwNi44NjEgNTQuMjI4OSAxMDcuMjQyIDUzLjU0OSAxMDcuNTQgNTIuNzUxMkMxMDcuODM3IDUxLjk1MzQgMTA4LjA3MyA1MS4xMjE1IDEwOC4yNDkgNTAuMjU1NUMxMDguNDI0IDQ5LjM4OTQgMTA4LjUzNSA0OC41Mzc5IDEwOC41OCA0Ny43MDI4QzEwOC42MjYgNDYuODY2OCAxMDguNjI2IDQ2LjEyMTkgMTA4LjU4IDQ1LjQ2ODdDMTA5Ljg5MiA0NC45MjE5IDExMC45NjcgNDQuMjMwNSAxMTEuODA2IDQzLjM5NDVDMTEyLjY0NSA0Mi41NTk0IDExMy4zMzggNDEuNjc3OCAxMTMuODg3IDQwLjc1MDdDMTE0LjA1NSA0MC41MjI5IDExNC4xMTIgNDAuMjQ5MyAxMTQuMDU5IDM5LjkzMDRDMTE0LjAwNiAzOS42MTExIDExMy44NzYgMzkuMzM3NiAxMTMuNjcgMzkuMTA5N1pcIiBmaWxsPVwiIzBEMEMyM1wiLz5cclxuPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE0Mi41MyAzNy42NTE1QzE0Mi41NzUgMzcuMzAyMiAxNDIuNjQ0IDM2LjkzMzUgMTQyLjczNSAzNi41NDZDMTQyLjgyNyAzNi4xNTg1IDE0Mi45NDEgMzUuNzgyMyAxNDMuMDc5IDM1LjQxNzdDMTQzLjIxNiAzNS4wNTMxIDE0My4zNzYgMzQuNzM3OSAxNDMuNTU5IDM0LjQ3MThDMTQzLjc0MiAzNC4yMDYxIDE0My45MzcgMzQuMDE2MSAxNDQuMTQyIDMzLjkwMTlDMTQ0LjM0OCAzMy43ODgzIDE0NC41NTggMzMuNzk5NSAxNDQuNzcxIDMzLjkzNkMxNDUgMzQuMDczMSAxNDUuMTQxIDM0LjM2MTcgMTQ1LjE5NSAzNC44MDIxQzE0NS4yNDggMzUuMjQzMyAxNDUuMTk1IDM1LjcxNDEgMTQ1LjAzNCAzNi4yMTU1QzE0NC44NzQgMzYuNzE3MiAxNDQuNTg4IDM3LjE4NzkgMTQ0LjE3NyAzNy42Mjg2QzE0My43NjUgMzguMDY5NiAxNDMuMjA4IDM4LjM1NzkgMTQyLjUwNyAzOC40OTQ3QzE0Mi40NzYgMzguMjgyNCAxNDIuNDg0IDM4LjAwMTEgMTQyLjUzIDM3LjY1MTVaTTE1MC40NTYgMzguNTg1N0MxNTAuMjA0IDM4LjUxMDMgMTQ5Ljk2NCAzOC41MDI1IDE0OS43MzUgMzguNTYzMkMxNDkuNTA2IDM4LjYyMzkgMTQ5LjM2MSAzOC43ODM1IDE0OS4zMDEgMzkuMDQyQzE0OS4xNzggMzkuNTI4MSAxNDguOTg0IDQwLjAyNTggMTQ4LjcxNyA0MC41MzQ3QzE0OC40NSA0MS4wNDM5IDE0OC4xMjIgNDEuNTI2MiAxNDcuNzM0IDQxLjk4MjJDMTQ3LjM0NSA0Mi40MzggMTQ2LjkwNiA0Mi44NDA4IDE0Ni40MTggNDMuMTkwMUMxNDUuOTMgNDMuNTM5NyAxNDUuNDE5IDQzLjc5MDQgMTQ0Ljg4NiA0My45NDIyQzE0NC4zNTEgNDQuMTA5NiAxNDMuOTEgNDQuMTI4NCAxNDMuNTU5IDQzLjk5OTFDMTQzLjIwOCA0My44NzA1IDE0Mi45MyA0My42NDk4IDE0Mi43MjQgNDMuMzM4NEMxNDIuNTE4IDQzLjAyNyAxNDIuMzY5IDQyLjY1MDggMTQyLjI3OCA0Mi4yMTAxQzE0Mi4xODYgNDEuNzY5NCAxNDIuMTMzIDQxLjMxMzcgMTQyLjExOCA0MC44NDI0QzE0Mi45ODcgNDAuOTAzNCAxNDMuNzYxIDQwLjc0NzggMTQ0LjQ0IDQwLjM3NTFDMTQ1LjExOCA0MC4wMDMyIDE0NS42OTQgMzkuNTA5IDE0Ni4xNjcgMzguODkzN0MxNDYuNjM5IDM4LjI3ODQgMTQ2Ljk5OCAzNy41ODcgMTQ3LjI0MiAzNi44MTk1QzE0Ny40ODUgMzYuMDUyNCAxNDcuNjIzIDM1LjI4ODcgMTQ3LjY1MyAzNC41Mjg4QzE0Ny42NjkgMzMuODE0NiAxNDcuNTYyIDMzLjIxMDggMTQ3LjMzMyAzMi43MTY5QzE0Ny4xMDUgMzIuMjIzMyAxNDYuNzk2IDMxLjgzOSAxNDYuNDA3IDMxLjU2NThDMTQ2LjAxOCAzMS4yOTIyIDE0NS41NzIgMzEuMTMyNiAxNDUuMDY5IDMxLjA4NzJDMTQ0LjU2NiAzMS4wNDE1IDE0NC4wNTQgMzEuMTEgMTQzLjUzNiAzMS4yOTIyQzE0Mi45MSAzMS41MDUgMTQyLjM4MSAzMS44NTA2IDE0MS45NDYgMzIuMzI5NEMxNDEuNTEyIDMyLjgwOCAxNDEuMTQ5IDMzLjM2MjkgMTQwLjg2IDMzLjk5MzNDMTQwLjU3IDM0LjYyMzkgMTQwLjM0MSAzNS4zMDM4IDE0MC4xNzMgMzYuMDMzQzE0MC4wMDUgMzYuNzYyNiAxMzkuODgzIDM3LjQ4MDYgMTM5LjgwNyAzOC4xODczQzEzOS43MzkgMzguODIxNCAxMzkuNzAyIDM5LjQyNzggMTM5LjY4OSA0MC4wMTNDMTM5LjY1NyA0MC4wODc0IDEzOS42MjUgNDAuMTU4OCAxMzkuNTkgNDAuMjM4M0MxMzkuMzU0IDQwLjc3ODIgMTM5LjA3OSA0MS4zMDYyIDEzOC43NjYgNDEuODIyNkMxMzguNDU0IDQyLjMzOTQgMTM4LjEwNyA0Mi43NzI1IDEzNy43MjYgNDMuMTIxOEMxMzcuMzQ0IDQzLjQ3MTQgMTM2Ljk0OCA0My41OTI5IDEzNi41MzYgNDMuNDg2NUMxMzYuMjkyIDQzLjQyNiAxMzYuMTU5IDQzLjE0NDQgMTM2LjEzNiA0Mi42NDMzQzEzNi4xMTMgNDIuMTQxNiAxMzYuMTM5IDQxLjUxODcgMTM2LjIxNiA0MC43NzQxQzEzNi4yOTIgNDAuMDI5OCAxMzYuMzggMzkuMjIzOSAxMzYuNDc5IDM4LjM1NzlDMTM2LjU3OCAzNy40OTE4IDEzNi42MjggMzYuNjY0IDEzNi42MjggMzUuODczN0MxMzYuNjI4IDM1LjE4OTggMTM2LjQ5OCAzNC41MzI5IDEzNi4yMzkgMzMuOTAxOUMxMzUuOTc5IDMzLjI3MTggMTM1LjYyNSAzMi43NDczIDEzNS4xNzUgMzIuMzI5NEMxMzQuNzI1IDMxLjkxMTMgMTM0LjIwMyAzMS42MzQgMTMzLjYwOCAzMS40OTc1QzEzMy4wMTMgMzEuMzYwNSAxMzIuMzczIDMxLjQ1MTggMTMxLjY4NyAzMS43NzA4QzEzMSAzMi4wOSAxMzAuNDU1IDMyLjUzODIgMTMwLjA1MSAzMy4xMTU3QzEyOS42NDcgMzMuNjkzNCAxMjkuMjc3IDM0LjMwMDkgMTI4Ljk0MiAzNC45MzkxQzEyOC44MTkgMzQuNDUyOCAxMjguNjQxIDM0LjAwMTEgMTI4LjQwNCAzMy41ODNDMTI4LjE2NyAzMy4xNjUxIDEyNy44NzggMzIuODAwNSAxMjcuNTM1IDMyLjQ4ODhDMTI3LjE5MSAzMi4xNzc2IDEyNi44MDYgMzEuOTM0NCAxMjYuMzggMzEuNzU5NUMxMjUuOTUzIDMxLjU4NTEgMTI1LjUwMiAzMS40OTc1IDEyNS4wMyAzMS40OTc1QzEyNC41NzIgMzEuNDk3NSAxMjQuMTQ5IDMxLjU4NTEgMTIzLjc2IDMxLjc1OTVDMTIzLjM3MSAzMS45MzQ0IDEyMy4wMTcgMzIuMTU4MyAxMjIuNjk2IDMyLjQzMThDMTIyLjM3NiAzMi43MDU2IDEyMi4wODcgMzMuMDEzIDEyMS44MjcgMzMuMzU1MUMxMjEuNTY4IDMzLjY5NjkgMTIxLjMzOSAzNC4wMzUyIDEyMS4xNDEgMzQuMzY5MkMxMjEuMTEgMzMuOTc0MiAxMjEuMDc2IDMzLjYyODYgMTIxLjAzOCAzMy4zMzJDMTIxIDMzLjAzNTkgMTIwLjkzMSAzMi43ODUyIDEyMC44MzIgMzIuNTgwMUMxMjAuNzMzIDMyLjM3NDggMTIwLjU5MiAzMi4yMTkzIDEyMC40MDkgMzIuMTEyOUMxMjAuMjI2IDMyLjAwNjcgMTE5Ljk2NyAzMS45NTMyIDExOS42MzIgMzEuOTUzMkMxMTkuNDY0IDMxLjk1MzIgMTE5LjI5NiAzMS45ODc0IDExOS4xMjggMzIuMDU1NkMxMTguOTYgMzIuMTI0MSAxMTguODExIDMyLjIxOTMgMTE4LjY4MiAzMi4zNDA3QzExOC41NTIgMzIuNDYyNyAxMTguNDUzIDMyLjYxMDUgMTE4LjM4NSAzMi43ODUyQzExOC4zMTYgMzIuOTU5OCAxMTguMjk3IDMzLjE2MTQgMTE4LjMyNyAzMy4zODkyQzExOC4zNDIgMzMuNTU2NiAxMTguMzg1IDMzLjc1NzYgMTE4LjQ1MyAzMy45OTMzQzExOC41MjIgMzQuMjI4OSAxMTguNTg3IDM0LjUzNjkgMTE4LjY0OCAzNC45MTYzQzExOC43MDggMzUuMjk2MiAxMTguNzU4IDM1Ljc1NiAxMTguNzk2IDM2LjI5NTNDMTE4LjgzNCAzNi44MzQ5IDExOC44NDYgMzcuNDk1OSAxMTguODMxIDM4LjI3ODRDMTE4LjgxNSAzOS4wNjExIDExOC43NTggMzkuOTc2MyAxMTguNjU5IDQxLjAyNDhDMTE4LjU2IDQyLjA3MzMgMTE4LjQwMyA0My4yODkgMTE4LjE5IDQ0LjY3MTRDMTE4LjE2IDQ0Ljk5MDcgMTE4LjI4MiA0NS4yNDkyIDExOC41NTYgNDUuNDQ2N0MxMTguODMxIDQ1LjY0MzkgMTE5LjE0MyA0NS43NTc4IDExOS40OTQgNDUuNzg4NUMxMTkuODQ1IDQ1LjgxODggMTIwLjE3NyA0NS43NTc4IDEyMC40ODkgNDUuNjA2M0MxMjAuODAyIDQ1LjQ1MzkgMTIwLjk4MSA0NS4xODgyIDEyMS4wMjcgNDQuODA4NUMxMjEuMDcyIDQ0LjA5NDMgMTIxLjE2IDQzLjMzNDcgMTIxLjI5IDQyLjUyOUMxMjEuNDE5IDQxLjcyNCAxMjEuNTc5IDQwLjkyNjIgMTIxLjc3IDQwLjEzNTlDMTIxLjk2MSAzOS4zNDYgMTIyLjE3OCAzOC41OTM4IDEyMi40MjIgMzcuODc5M0MxMjIuNjY2IDM3LjE2NTEgMTIyLjkzNyAzNi41MzQ3IDEyMy4yMzQgMzUuOTg3NkMxMjMuNTMyIDM1LjQ0MDUgMTIzLjg0IDM1LjAwMzkgMTI0LjE2MSAzNC42NzcxQzEyNC40ODEgMzQuMzUwNCAxMjQuODE2IDM0LjE4NyAxMjUuMTY3IDM0LjE4N0MxMjUuNTk0IDM0LjE4NyAxMjUuOTI2IDM0LjM4MDUgMTI2LjE2MiAzNC43Njc5QzEyNi4zOTggMzUuMTU1NyAxMjYuNTY2IDM1LjY1MzYgMTI2LjY2NiAzNi4yNjA5QzEyNi43NjUgMzYuODY5IDEyNi44MSAzNy41MzQxIDEyNi44MDMgMzguMjU1NUMxMjYuNzk1IDM4Ljk3NzMgMTI2Ljc2NSAzOS42NzI0IDEyNi43MTEgNDAuMzQxQzEyNi42NTggNDEuMDA5OCAxMjYuNTk3IDQxLjYwNiAxMjYuNTI4IDQyLjEzMDNDMTI2LjQ2IDQyLjY1NDUgMTI2LjQxIDQzLjAxNTcgMTI2LjM4IDQzLjIxMjlDMTI2LjM4IDQzLjU2MjUgMTI2LjUxMyA0My44Mzk1IDEyNi43OCA0NC4wNDQ4QzEyNy4wNDYgNDQuMjQ5OCAxMjcuMzQ0IDQ0LjM3MTYgMTI3LjY3MiA0NC40MDk1QzEyOCA0NC40NDc2IDEyOC4zMDkgNDQuMzg2NiAxMjguNTk4IDQ0LjIyN0MxMjguODg4IDQ0LjA2NzQgMTI5LjA1NiA0My43OTgyIDEyOS4xMDIgNDMuNDE3OUMxMjkuMjU0IDQyLjMyNCAxMjkuNDY0IDQxLjIyNjQgMTI5LjczMSA0MC4xMjQ3QzEyOS45OTcgMzkuMDIzIDEzMC4zMDMgMzguMDM1NSAxMzAuNjQ2IDM3LjE2MTZDMTMwLjk4OSAzNi4yODc4IDEzMS4zNyAzNS41NzM1IDEzMS43OSAzNS4wMTg5QzEzMi4yMDkgMzQuNDY0NiAxMzIuNjU1IDM0LjE4NyAxMzMuMTI4IDM0LjE4N0MxMzMuMzcxIDM0LjE4NyAxMzMuNTU5IDM0LjM1NDQgMTMzLjY4OCAzNC42ODg0QzEzMy44MTggMzUuMDIyNyAxMzMuODgzIDM1LjQ3ODQgMTMzLjg4MyAzNi4wNTU5QzEzMy44ODMgMzYuNDgxNSAxMzMuODQ4IDM2LjkxODQgMTMzLjc4IDM3LjM2NjZDMTMzLjcxMSAzNy44MTQ4IDEzMy42MzEgMzguMjc4NCAxMzMuNTQgMzguNzU2OUMxMzMuNDQ4IDM5LjIzNTggMTMzLjM2OCAzOS43MjU2IDEzMy4yOTkgNDAuMjI3QzEzMy4yMzEgNDAuNzI4NyAxMzMuMTk2IDQxLjI1MjcgMTMzLjE5NiA0MS43OTk4QzEzMy4xOTYgNDIuMTc5NyAxMzMuMjM1IDQyLjYyMDQgMTMzLjMxMSA0My4xMjE4QzEzMy4zODcgNDMuNjIyOSAxMzMuNTMyIDQ0LjA5ODMgMTMzLjc0NSA0NC41NDYyQzEzMy45NTkgNDQuOTk0NyAxMzQuMjUyIDQ1LjM3NDQgMTM0LjYyNiA0NS42ODU4QzEzNSA0NS45OTczIDEzNS40NzYgNDYuMTUzMSAxMzYuMDU2IDQ2LjE1MzFDMTM2LjkyNSA0Ni4xNTMxIDEzNy42OTUgNDUuOTY2OSAxMzguMzY2IDQ1LjU5NDdDMTM5LjAzNyA0NS4yMjI2IDEzOS42MTMgNDQuNzM2NSAxNDAuMDkzIDQ0LjEzNjJDMTQwLjExOCA0NC4xMDQ3IDE0MC4xNDEgNDQuMDcxMSAxNDAuMTY1IDQ0LjAzOTlDMTQwLjIwMiA0NC4xMjg3IDE0MC4yMzUgNDQuMjIyNyAxNDAuMjc2IDQ0LjMwNzFDMTQwLjYwNCA0NC45NzU2IDE0MS4wNSA0NS40OTIxIDE0MS42MTUgNDUuODU3QzE0Mi4xNzggNDYuMjIxNiAxNDIuODQyIDQ2LjQyMjkgMTQzLjYwNSA0Ni40NjExQzE0NC4zNjcgNDYuNDk4NyAxNDUuMTk4IDQ2LjM1ODEgMTQ2LjA5OCA0Ni4wMzkyQzE0Ni43NjkgNDUuNzk2IDE0Ny4zNTIgNDUuNDkyMSAxNDcuODQ4IDQ1LjEyNzVDMTQ4LjM0MyA0NC43NjI4IDE0OC43ODkgNDQuMzE4NCAxNDkuMTg2IDQzLjc5NDFDMTQ5LjU4MyA0My4yNjk5IDE0OS45NDUgNDIuNjY1OCAxNTAuMjczIDQxLjk4MjJDMTUwLjYwMSA0MS4yOTgxIDE1MC45MzIgNDAuNTE1OSAxNTEuMjY4IDM5LjYzNDJDMTUxLjMyOSAzOS4zOTE2IDE1MS4yNzIgMzkuMTc1MSAxNTEuMDk3IDM4Ljk4NDhDMTUwLjkyMSAzOC43OTUxIDE1MC43MDggMzguNjYyMSAxNTAuNDU2IDM4LjU4NTdaXCIgZmlsbD1cIiMwRDBDMjNcIi8+XHJcbjxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNjIuODg3IDM2LjA0MzRDMTYyLjgxIDM2LjQ5MTggMTYyLjcwNyAzNi45ODYgMTYyLjU3OCAzNy41MjVDMTYyLjQ0OCAzOC4wNjQ2IDE2Mi4yODQgMzguNjIzIDE2Mi4wODYgMzkuMjAwNEMxNjEuODg4IDM5Ljc3NzkgMTYxLjY0NCA0MC4yOTg0IDE2MS4zNTQgNDAuNzYxNkMxNjEuMDY0IDQxLjIyNTQgMTYwLjczMyA0MS41OTM1IDE2MC4zNTkgNDEuODY3MUMxNTkuOTg1IDQyLjE0MDYgMTU5LjU1NSA0Mi4yNTQ2IDE1OS4wNjYgNDIuMjA4OUMxNTguODIyIDQyLjE3ODggMTU4LjYzNSA0Mi4wMTE3IDE1OC41MDYgNDEuNzA3NUMxNTguMzc2IDQxLjQwMzggMTU4LjMwOCA0MS4wMTYxIDE1OC4zIDQwLjU0NUMxNTguMjkyIDQwLjA3NDMgMTU4LjMzNCAzOS41NTc1IDE1OC40MjYgMzguOTk1MUMxNTguNTE3IDM4LjQzMzMgMTU4LjY1OCAzNy44ODIxIDE1OC44NDkgMzcuMzQyNkMxNTkuMDQgMzYuODAzNiAxNTkuMjcyIDM2LjMwNTYgMTU5LjU0NyAzNS44NDk2QzE1OS44MjEgMzUuMzkzOSAxNjAuMTM4IDM1LjA0MDUgMTYwLjQ5NiAzNC43ODk4QzE2MC44NTQgMzQuNTM5MSAxNjEuMjQ3IDM0LjQyMTcgMTYxLjY3NCAzNC40MzY1QzE2Mi4xMDEgMzQuNDUxOCAxNjIuNTU5IDM0LjY2NDMgMTYzLjA0NyAzNS4wNzQ3QzE2My4wMTYgMzUuMjcyNSAxNjIuOTYzIDM1LjU5NTQgMTYyLjg4NyAzNi4wNDM0Wk0xNzEuMDE5IDM3Ljc4N0MxNzAuNzgyIDM3LjY2NTYgMTcwLjUzOCAzNy42MzkyIDE3MC4yODcgMzcuNzA3NUMxNzAuMDM1IDM3Ljc3NTcgMTY5Ljg1NiAzOC4wMDc2IDE2OS43NDkgMzguNDAyNkMxNjkuNjg4IDM4LjgyODMgMTY5LjU1MSAzOS4zMjk0IDE2OS4zMzggMzkuOTA2OUMxNjkuMTI0IDQwLjQ4NDMgMTY4Ljg2MSA0MS4wMzE3IDE2OC41NDggNDEuNTQ3OEMxNjguMjM2IDQyLjA2NDYgMTY3Ljg3NyA0Mi40OTQgMTY3LjQ3MyA0Mi44MzU4QzE2Ny4wNjkgNDMuMTc3OCAxNjYuNjM4IDQzLjMzMzcgMTY2LjE4MSA0My4zMDI4QzE2NS43OTkgNDMuMjcyNyAxNjUuNTMyIDQzLjA3OSAxNjUuMzggNDIuNzIxOEMxNjUuMjI3IDQyLjM2NDcgMTY1LjE0NyA0MS45MTY4IDE2NS4xNCA0MS4zNzY5QzE2NS4xMzIgNDAuODM4IDE2NS4xODYgNDAuMjMwMSAxNjUuMyAzOS41NTM4QzE2NS40MTQgMzguODc3NyAxNjUuNTUyIDM4LjIwNTQgMTY1LjcxMiAzNy41MzYzQzE2NS44NzIgMzYuODY4IDE2Ni4wMzYgMzYuMjI1OCAxNjYuMjA0IDM1LjYxMDVDMTY2LjM3MSAzNC45OTUxIDE2Ni41MDggMzQuNDc0NyAxNjYuNjE2IDM0LjA0OTNDMTY2LjczOCAzMy42NjkzIDE2Ni42OTkgMzMuMzQ2NiAxNjYuNTAxIDMzLjA4MDNDMTY2LjMwMyAzMi44MTQ5IDE2Ni4wNTUgMzIuNjI0NiAxNjUuNzU4IDMyLjUxMDdDMTY1LjQ2IDMyLjM5NjcgMTY1LjE1OSAzMi4zNjY0IDE2NC44NTQgMzIuNDE5NkMxNjQuNTQ5IDMyLjQ3MjggMTY0LjM1MSAzMi42MzYyIDE2NC4yNTkgMzIuOTA5NEMxNjMuMzU5IDMyLjEzNDUgMTYyLjQ5NCAzMS43MTY2IDE2MS42NjMgMzEuNjU1OUMxNjAuODMxIDMxLjU5NTIgMTYwLjA2NSAzMS43Nzc2IDE1OS4zNjQgMzIuMjAzQzE1OC42NjIgMzIuNjI4NCAxNTguMDQxIDMzLjI0MzcgMTU3LjUgMzQuMDQ5M0MxNTYuOTU4IDM0Ljg1NDkgMTU2LjUyIDM1LjczMjIgMTU2LjE4NCAzNi42ODE4QzE1NS44NDkgMzcuNjMxNCAxNTUuNjM5IDM4LjYwMDQgMTU1LjU1NSAzOS41ODc5QzE1NS40NzEgNDAuNTc1NyAxNTUuNTM2IDQxLjQ3NjEgMTU1Ljc1IDQyLjI4OUMxNTUuOTYzIDQzLjEwMTggMTU2LjM0IDQzLjc2NjkgMTU2Ljg4MiA0NC4yODNDMTU3LjQyMyA0NC43OTk4IDE1OC4xNTkgNDUuMDU4MyAxNTkuMDg5IDQ1LjA1ODNDMTU5LjUwMSA0NS4wNTgzIDE1OS44OTggNDQuOTc0NyAxNjAuMjc5IDQ0LjgwNzZDMTYwLjY2IDQ0LjY0MDEgMTYxLjAxMSA0NC40NDI2IDE2MS4zMzEgNDQuMjE0OEMxNjEuNjUxIDQzLjk4NjkgMTYxLjkzMyA0My43NDc1IDE2Mi4xNzggNDMuNDk2OEMxNjIuNDIxIDQzLjI0NjEgMTYyLjYxMiA0My4wMzczIDE2Mi43NDkgNDIuODY5OUMxNjIuODU2IDQzLjQxNyAxNjMuMDMyIDQzLjg4MDggMTYzLjI3NiA0NC4yNjA1QzE2My41MTkgNDQuNjQwMSAxNjMuNzk4IDQ0Ljk1MjEgMTY0LjExMSA0NS4xOTQ4QzE2NC40MjMgNDUuNDM3NiAxNjQuNzUxIDQ1LjYxNjQgMTY1LjA5NCA0NS43MzA2QzE2NS40MzcgNDUuODQ0NSAxNjUuNzY5IDQ1LjkwMTUgMTY2LjA4OSA0NS45MDE1QzE2Ni44MDYgNDUuOTAxNSAxNjcuNDc3IDQ1LjY1ODMgMTY4LjEwMiA0NS4xNzE5QzE2OC43MjcgNDQuNjg2MSAxNjkuMjg4IDQ0LjA4OTMgMTY5Ljc4NCA0My4zODI5QzE3MC4yNzkgNDIuNjc2MiAxNzAuNjg3IDQxLjkzMTkgMTcxLjAwNyA0MS4xNDkxQzE3MS4zMjggNDAuMzY2NiAxNzEuNTQxIDM5LjY3MTUgMTcxLjY0OCAzOS4wNjM0QzE3MS43NTUgMzguODM1NSAxNzEuNzM1IDM4LjU5NjQgMTcxLjU5MSAzOC4zNDU3QzE3MS40NDYgMzguMDk1IDE3MS4yNTUgMzcuOTA5IDE3MS4wMTkgMzcuNzg3WlwiIGZpbGw9XCIjMEQwQzIzXCIvPlxyXG48cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMjEyLjE5NCA1MC4zNzAxQzIxMi4wNjQgNTAuODg2NiAyMTEuODYyIDUxLjMyMzggMjExLjU4NyA1MS42ODA2QzIxMS4zMTMgNTIuMDM3NyAyMTAuOTcgNTIuMjIzOSAyMTAuNTU4IDUyLjIzOTNDMjEwLjI5OSA1Mi4yNTQzIDIxMC4xMDEgNTIuMTE3NSAyMDkuOTYzIDUxLjgyODlDMjA5LjgyNiA1MS41NDAxIDIwOS43MzEgNTEuMTY3OSAyMDkuNjc4IDUwLjcxMjJDMjA5LjYyNCA1MC4yNTYyIDIwOS42MDEgNDkuNzQ3IDIwOS42MDkgNDkuMTg0OUMyMDkuNjE2IDQ4LjYyMjcgMjA5LjYzOSA0OC4wNjgxIDIwOS42NzggNDcuNTIxQzIwOS43MTUgNDYuOTc0MiAyMDkuNzYxIDQ2LjQ2NDcgMjA5LjgxNSA0NS45OTM5QzIwOS44NjggNDUuNTIyNiAyMDkuOTEgNDUuMTU4NiAyMDkuOTQgNDQuOUMyMTAuNDU5IDQ0Ljk2MDggMjEwLjg5IDQ1LjE4NDYgMjExLjIzMyA0NS41NzIzQzIxMS41NzYgNDUuOTU5OCAyMTEuODM5IDQ2LjQxOTMgMjEyLjAyMiA0Ni45NTE0QzIxMi4yMDUgNDcuNDgzMSAyMTIuMzEyIDQ4LjA1NjggMjEyLjM0MyA0OC42NzIyQzIxMi4zNzMgNDkuMjg3NSAyMTIuMzIzIDQ5Ljg1MzQgMjEyLjE5NCA1MC4zNzAxWk0yMDMuOTEzIDUwLjM3MDFDMjAzLjc4MyA1MC44ODY2IDIwMy41ODEgNTEuMzIzOCAyMDMuMzA3IDUxLjY4MDZDMjAzLjAzMiA1Mi4wMzc3IDIwMi42ODkgNTIuMjIzOSAyMDIuMjc3IDUyLjIzOTNDMjAyLjAxOCA1Mi4yNTQzIDIwMS44MiA1Mi4xMTc1IDIwMS42ODMgNTEuODI4OUMyMDEuNTQ1IDUxLjU0MDEgMjAxLjQ1IDUxLjE2NzkgMjAxLjM5NyA1MC43MTIyQzIwMS4zNDMgNTAuMjU2MiAyMDEuMzIgNDkuNzQ3IDIwMS4zMjggNDkuMTg0OUMyMDEuMzM2IDQ4LjYyMjcgMjAxLjM1OCA0OC4wNjgxIDIwMS4zOTcgNDcuNTIxQzIwMS40MzQgNDYuOTc0MiAyMDEuNDggNDYuNDY0NyAyMDEuNTM0IDQ1Ljk5MzlDMjAxLjU4NyA0NS41MjI2IDIwMS42MjkgNDUuMTU4NiAyMDEuNjYgNDQuOUMyMDIuMTc4IDQ0Ljk2MDggMjAyLjYwOSA0NS4xODQ2IDIwMi45NTIgNDUuNTcyM0MyMDMuMjk1IDQ1Ljk1OTggMjAzLjU1OCA0Ni40MTkzIDIwMy43NDEgNDYuOTUxNEMyMDMuOTI0IDQ3LjQ4MzEgMjA0LjAzMSA0OC4wNTY4IDIwNC4wNjIgNDguNjcyMkMyMDQuMDkyIDQ5LjI4NzUgMjA0LjA0MiA0OS44NTM0IDIwMy45MTMgNTAuMzcwMVpNMTk1LjQxNSAzNy40MjQxQzE5NS4zOTkgMzcuNzg4NCAxOTUuMzY1IDM4LjExMTQgMTk1LjMxMiAzOC4zOTI1QzE5NS4yNTggMzguNjc0MSAxOTUuMTg2IDM4Ljg1MjIgMTk1LjA5NSAzOC45MjgzQzE5NC45MjcgMzguODM2OSAxOTQuNzIxIDM4LjYwMTggMTk0LjQ3NyAzOC4yMjE2QzE5NC4yMzMgMzcuODQxOSAxOTQuMDQyIDM3LjQxMjIgMTkzLjkwNSAzNi45MzM2QzE5My43NjggMzYuNDU1MSAxOTMuNzI1IDM1Ljk4NDMgMTkzLjc3OSAzNS41MjA1QzE5My44MzIgMzUuMDU3MyAxOTQuMDczIDM0LjY5NjcgMTk0LjUgMzQuNDM3OUMxOTQuNjY3IDM0LjM0NjggMTk0LjgxMiAzNC4zODA5IDE5NC45MzQgMzQuNTQwNUMxOTUuMDU2IDM0LjcwMDEgMTk1LjE1NSAzNC45MzE4IDE5NS4yMzIgMzUuMjM1N0MxOTUuMzA4IDM1LjUzOTkgMTk1LjM2MSAzNS44ODkyIDE5NS4zOTIgMzYuMjg0MkMxOTUuNDIyIDM2LjY3OTUgMTk1LjQzIDM3LjA1OTEgMTk1LjQxNSAzNy40MjQxWk0xOTMuMzkgNDEuOTcxMUMxOTMuMTU0IDQyLjIyMTUgMTkyLjg5IDQyLjQzODEgMTkyLjYwMSA0Mi42MjA2QzE5Mi4zMTEgNDIuODAzIDE5Mi4wMTQgNDIuOTM5OCAxOTEuNzA5IDQzLjAzMDlDMTkxLjQwNCA0My4xMjIzIDE5MS4xMjkgNDMuMTQ0OCAxOTAuODg1IDQzLjA5OTFDMTkwLjE5OSA0Mi45NjI3IDE4OS42NzMgNDIuNjY2IDE4OS4zMDcgNDIuMjEwM0MxODguOTQxIDQxLjc1NDUgMTg4LjcwOCA0MS4yMTkgMTg4LjYwOSA0MC42MDM3QzE4OC41MSAzOS45ODgxIDE4OC41MjEgMzkuMzMwOCAxODguNjQ0IDM4LjYzMTlDMTg4Ljc2NSAzNy45MzMgMTg4Ljk3MSAzNy4yODM1IDE4OS4yNjEgMzYuNjgzMkMxODkuNTUxIDM2LjA4MjkgMTg5LjkwMiAzNS41NjYyIDE5MC4zMTMgMzUuMTMzM0MxOTAuNzI1IDM0LjcwMDEgMTkxLjE3NSAzNC40MzA2IDE5MS42NjMgMzQuMzIzOUMxOTEuNDggMzUuMDk4OSAxOTEuNDE5IDM1LjkwMDcgMTkxLjQ4IDM2LjcyODZDMTkxLjU0MSAzNy41NTY4IDE5MS43MzkgMzguMzM1NSAxOTIuMDc1IDM5LjA2NDhDMTkyLjI4OCAzOS41MDYgMTkyLjU0NCAzOS45MDgyIDE5Mi44NDEgNDAuMjcyOUMxOTMuMTM5IDQwLjYzNzggMTkzLjUwMSA0MC45NDkyIDE5My45MjggNDEuMjA3NUMxOTMuODA2IDQxLjQ2NiAxOTMuNjI2IDQxLjcyMDQgMTkzLjM5IDQxLjk3MTFaTTIxOC43MDIgMzcuNjUxOUMyMTguNzQ3IDM3LjMwMjYgMjE4LjgxNiAzNi45MzM2IDIxOC45MDggMzYuNTQ2MkMyMTguOTk5IDM2LjE1OSAyMTkuMTE0IDM1Ljc4MjggMjE5LjI1MSAzNS40MTgxQzIxOS4zODggMzUuMDUzMiAyMTkuNTQ4IDM0LjczOCAyMTkuNzMxIDM0LjQ3MjNDMjE5LjkxNCAzNC4yMDY1IDIyMC4xMDggMzQuMDE2MyAyMjAuMzE0IDMzLjkwMjRDMjIwLjUyIDMzLjc4ODQgMjIwLjczIDMzLjc5OTcgMjIwLjk0MyAzMy45MzY1QzIyMS4xNzIgMzQuMDczNSAyMjEuMzEzIDM0LjM2MjEgMjIxLjM2NyAzNC44MDI1QzIyMS40MiAzNS4yNDM1IDIyMS4zNjcgMzUuNzE0MiAyMjEuMjA3IDM2LjIxNTlDMjIxLjA0NiAzNi43MTczIDIyMC43NjEgMzcuMTg4NCAyMjAuMzQ5IDM3LjYyODhDMjE5LjkzNyAzOC4wNyAyMTkuMzggMzguMzU4MyAyMTguNjc5IDM4LjQ5NTFDMjE4LjY0OCAzOC4yODI2IDIxOC42NTYgMzguMDAxNSAyMTguNzAyIDM3LjY1MTlaTTIyNy45MjEgMzcuNjUxOUMyMjcuOTY2IDM3LjMwMjYgMjI4LjAzNSAzNi45MzM2IDIyOC4xMjYgMzYuNTQ2MkMyMjguMjE4IDM2LjE1OSAyMjguMzMyIDM1Ljc4MjggMjI4LjQ3IDM1LjQxODFDMjI4LjYwNyAzNS4wNTMyIDIyOC43NjcgMzQuNzM4IDIyOC45NSAzNC40NzIzQzIyOS4xMzMgMzQuMjA2NSAyMjkuMzI4IDM0LjAxNjMgMjI5LjUzMyAzMy45MDI0QzIyOS43MzkgMzMuNzg4NCAyMjkuOTQ5IDMzLjc5OTcgMjMwLjE2MiAzMy45MzY1QzIzMC4zOTEgMzQuMDczNSAyMzAuNTMyIDM0LjM2MjEgMjMwLjU4NiAzNC44MDI1QzIzMC42MzkgMzUuMjQzNSAyMzAuNTg2IDM1LjcxNDIgMjMwLjQyNSAzNi4yMTU5QzIzMC4yNjUgMzYuNzE3MyAyMjkuOTc5IDM3LjE4ODQgMjI5LjU2OCAzNy42Mjg4QzIyOS4xNTYgMzguMDcgMjI4LjU5OSAzOC4zNTgzIDIyNy44OTggMzguNDk1MUMyMjcuODY3IDM4LjI4MjYgMjI3Ljg3NSAzOC4wMDE1IDIyNy45MjEgMzcuNjUxOVpNMjM2LjQ4OCAzOC45ODUyQzIzNi4zMTIgMzguNzk1NSAyMzYuMDk5IDM4LjY2MjUgMjM1Ljg0NyAzOC41ODYyQzIzNS41OTUgMzguNTEwNCAyMzUuMzU1IDM4LjUwMjkgMjM1LjEyNiAzOC41NjM2QzIzNC44OTcgMzguNjI0NCAyMzQuNzUyIDM4Ljc4NCAyMzQuNjkyIDM5LjA0MjJDMjM0LjU3IDM5LjUyODYgMjM0LjM3NSA0MC4wMjYyIDIzNC4xMDggNDAuNTM0OUMyMzMuODQxIDQxLjA0NDQgMjMzLjUxNCA0MS41MjY3IDIzMy4xMjUgNDEuOTgyNEMyMzIuNzM2IDQyLjQzODEgMjMyLjI5NyA0Mi44NDEyIDIzMS44MSA0My4xOTA1QzIzMS4zMjEgNDMuNTQwMSAyMzAuODEgNDMuNzkwOCAyMzAuMjc3IDQzLjk0MjNDMjI5Ljc0MyA0NC4xMTAxIDIyOS4zMDEgNDQuMTI4OSAyMjguOTUgNDMuOTk5NkMyMjguNTk5IDQzLjg3MDYgMjI4LjMyMSA0My42NTAzIDIyOC4xMTUgNDMuMzM4OUMyMjcuOTA5IDQzLjAyNzEgMjI3Ljc2MSA0Mi42NTEyIDIyNy42NjkgNDIuMjEwM0MyMjcuNTc4IDQxLjc2OTkgMjI3LjUyNCA0MS4zMTQyIDIyNy41MDkgNDAuODQyOEMyMjguMzc4IDQwLjkwMzggMjI5LjE1MiA0MC43NDgzIDIyOS44MzEgNDAuMzc1NUMyMzAuNTA5IDQwLjAwMzQgMjMxLjA4NSAzOS41MDkyIDIzMS41NTggMzguODkzOUMyMzIuMDMxIDM4LjI3ODggMjMyLjM4OSAzNy41ODc0IDIzMi42MzMgMzYuODJDMjMyLjg3NyAzNi4wNTI2IDIzMy4wMTQgMzUuMjg5MiAyMzMuMDQ1IDM0LjUyOTNDMjMzLjA2IDMzLjgxNSAyMzIuOTUzIDMzLjIxMSAyMzIuNzI0IDMyLjcxNzFDMjMyLjQ5NiAzMi4yMjM1IDIzMi4xODcgMzEuODM5NSAyMzEuNzk4IDMxLjU2NjJDMjMxLjQwOSAzMS4yOTI0IDIzMC45NjMgMzEuMTMzIDIzMC40NiAzMS4wODc0QzIyOS45NTcgMzEuMDQxNyAyMjkuNDQ1IDMxLjExMDUgMjI4LjkyNyAzMS4yOTI0QzIyOC4zMDIgMzEuNTA1NSAyMjcuNzcyIDMxLjg1MSAyMjcuMzM4IDMyLjMyOTZDMjI2LjkwMyAzMi44MDg1IDIyNi41NCAzMy4zNjM0IDIyNi4yNTEgMzMuOTkzNEMyMjUuOTYxIDM0LjYyNDQgMjI1LjczMiAzNS4zMDM5IDIyNS41NjQgMzYuMDMzNUMyMjUuMzk2IDM2Ljc2MjcgMjI1LjI3NCAzNy40ODEgMjI1LjE5OSAzOC4xODc0QzIyNS4xMjQgMzguODczIDIyNS4wODQgMzkuNTI5MiAyMjUuMDc1IDQwLjE1NzJDMjI1LjAxNyA0MC4yODI0IDIyNC45NTYgNDAuNDA4MiAyMjQuODg5IDQwLjUzNDlDMjI0LjYyMiA0MS4wNDQ0IDIyNC4yOTUgNDEuNTI2NyAyMjMuOTA2IDQxLjk4MjRDMjIzLjUxNyA0Mi40MzgxIDIyMy4wNzggNDIuODQxMiAyMjIuNTkxIDQzLjE5MDVDMjIyLjEwMiA0My41NDAxIDIyMS41OTIgNDMuNzkwOCAyMjEuMDU4IDQzLjk0MjNDMjIwLjUyNCA0NC4xMTAxIDIyMC4wODIgNDQuMTI4OSAyMTkuNzMxIDQzLjk5OTZDMjE5LjM4IDQzLjg3MDYgMjE5LjEwMiA0My42NTAzIDIxOC44OTYgNDMuMzM4OUMyMTguNjkxIDQzLjAyNzEgMjE4LjU0MiA0Mi42NTEyIDIxOC40NSA0Mi4yMTAzQzIxOC4zNTkgNDEuNzY5OSAyMTguMzA1IDQxLjMxNDIgMjE4LjI5IDQwLjg0MjhDMjE5LjE1OSA0MC45MDM4IDIxOS45MzMgNDAuNzQ4MyAyMjAuNjEyIDQwLjM3NTVDMjIxLjI5IDQwLjAwMzQgMjIxLjg2NiAzOS41MDkyIDIyMi4zMzkgMzguODkzOUMyMjIuODExIDM4LjI3ODggMjIzLjE3IDM3LjU4NzQgMjIzLjQxNCAzNi44MkMyMjMuNjU4IDM2LjA1MjYgMjIzLjc5NSAzNS4yODkyIDIyMy44MjYgMzQuNTI5M0MyMjMuODQxIDMzLjgxNSAyMjMuNzM0IDMzLjIxMSAyMjMuNTA2IDMyLjcxNzFDMjIzLjI3NyAzMi4yMjM1IDIyMi45NjggMzEuODM5NSAyMjIuNTc5IDMxLjU2NjJDMjIyLjE5IDMxLjI5MjQgMjIxLjc0NCAzMS4xMzMgMjIxLjI0MSAzMS4wODc0QzIyMC43MzggMzEuMDQxNyAyMjAuMjI3IDMxLjExMDUgMjE5LjcwOCAzMS4yOTI0QzIxOS4wODMgMzEuNTA1NSAyMTguNTUzIDMxLjg1MSAyMTguMTE5IDMyLjMyOTZDMjE3LjY4NCAzMi44MDg1IDIxNy4zMjEgMzMuMzYzNCAyMTcuMDMyIDMzLjk5MzRDMjE2Ljc0MiAzNC42MjQ0IDIxNi41MTMgMzUuMzAzOSAyMTYuMzQ2IDM2LjAzMzVDMjE2LjE3OCAzNi43NjI3IDIxNi4wNTYgMzcuNDgxIDIxNS45OCAzOC4xODc0QzIxNS45MzYgMzguNTg1OSAyMTUuOTA3IDM4Ljk3MjIgMjE1Ljg4NiAzOS4zNTE2QzIxNS43MzkgMzkuNDc2NSAyMTUuNTk1IDM5LjYwMjMgMjE1LjQ0MiAzOS43MjU4QzIxNC45MTYgNDAuMTUxNCAyMTQuMzYzIDQwLjUzNDkgMjEzLjc4NCA0MC44NzY5QzIxMy4yMDQgNDEuMjE5IDIxMi42MDEgNDEuNTAwMSAyMTEuOTc3IDQxLjcyMDRDMjExLjM1MSA0MS45NDA4IDIxMC43MSA0Mi4wNzM4IDIxMC4wNTUgNDIuMTE5MkwyMTEuNDczIDI2Ljk4NDdDMjExLjU2NSAyNi42NjU1IDIxMS41MTkgMjYuMzg0NyAyMTEuMzM2IDI2LjE0MTVDMjExLjE1MyAyNS44OTgzIDIxMC45MTYgMjUuNzMxMiAyMTAuNjI3IDI1LjY0MDFDMjEwLjMzNyAyNS41NDg4IDIxMC4wMjggMjUuNTU2NiAyMDkuNyAyNS42NjI3QzIwOS4zNzIgMjUuNzY5NCAyMDkuMTAyIDI2LjAxMjYgMjA4Ljg4OCAyNi4zOTE5QzIwOC43ODEgMjYuOTY5NyAyMDguNjcxIDI3Ljc1OTcgMjA4LjU1NyAyOC43NjI1QzIwOC40NDIgMjkuNzY1MyAyMDguMzI4IDMwLjg1OTUgMjA4LjIxMyAzMi4wNDQ4QzIwOC4wOTkgMzMuMjMgMjA3Ljk4NSAzNC40NTMyIDIwNy44NyAzNS43MTQyQzIwNy43NTYgMzYuOTc1OSAyMDcuNjU3IDM4LjE1MzMgMjA3LjU3MyAzOS4yNDcyQzIwNy41NjkgMzkuMjk1OCAyMDcuNTY2IDM5LjMzOTggMjA3LjU2MiAzOS4zODc4QzIwNy40MjkgMzkuNTAwNSAyMDcuMjk5IDM5LjYxNDIgMjA3LjE2MSAzOS43MjU4QzIwNi42MzUgNDAuMTUxNCAyMDYuMDgyIDQwLjUzNDkgMjA1LjUwMyA0MC44NzY5QzIwNC45MjMgNDEuMjE5IDIwNC4zMjEgNDEuNTAwMSAyMDMuNjk2IDQxLjcyMDRDMjAzLjA3IDQxLjk0MDggMjAyLjQyOSA0Mi4wNzM4IDIwMS43NzQgNDIuMTE5MkwyMDMuMTkyIDI2Ljk4NDdDMjAzLjI4NCAyNi42NjU1IDIwMy4yMzggMjYuMzg0NyAyMDMuMDU1IDI2LjE0MTVDMjAyLjg3MiAyNS44OTgzIDIwMi42MzUgMjUuNzMxMiAyMDIuMzQ2IDI1LjY0MDFDMjAyLjA1NiAyNS41NDg4IDIwMS43NDcgMjUuNTU2NiAyMDEuNDE5IDI1LjY2MjdDMjAxLjA5MSAyNS43Njk0IDIwMC44MjEgMjYuMDEyNiAyMDAuNjA3IDI2LjM5MTlDMjAwLjUwMSAyNi45Njk3IDIwMC4zOSAyNy43NTk3IDIwMC4yNzYgMjguNzYyNUMyMDAuMTYxIDI5Ljc2NTMgMjAwLjA0NyAzMC44NTk1IDE5OS45MzMgMzIuMDQ0OEMxOTkuODE4IDMzLjIzIDE5OS43MDQgMzQuNDUzMiAxOTkuNTg5IDM1LjcxNDJDMTk5LjQ3NSAzNi45NzU5IDE5OS4zNzYgMzguMTUzMyAxOTkuMjkyIDM5LjI0NzJDMTk5LjI5IDM5LjI2OTIgMTk5LjI4OSAzOS4yODkxIDE5OS4yODcgMzkuMzExMUMxOTkuMDQ4IDM5LjQyMTkgMTk4Ljc4NiAzOS41MTkgMTk4LjUwMyAzOS42MDA2QzE5OC4yMTMgMzkuNjg0NCAxOTcuODg1IDM5LjczMzkgMTk3LjUxOSAzOS43NDg5QzE5Ny41OCAzOS40NzUxIDE5Ny42MyAzOS4xNzEyIDE5Ny42NjggMzguODM2OUMxOTcuNzA2IDM4LjUwMjkgMTk3LjczNyAzOC4xNTMzIDE5Ny43NiAzNy43ODg0QzE5Ny43ODIgMzcuNDI0MSAxOTcuNzkgMzcuMDU5MSAxOTcuNzgyIDM2LjY5NDVDMTk3Ljc3NCAzNi4zMjk2IDE5Ny43NTUgMzUuOTk1NiAxOTcuNzI1IDM1LjY5MTRDMTk3LjY0OSAzNS4wMzg1IDE5Ny41MDggMzQuNDE5MSAxOTcuMzAyIDMzLjgzMzhDMTk3LjA5NiAzMy4yNDkxIDE5Ni44MTggMzIuNzU5MyAxOTYuNDY3IDMyLjM2MzdDMTk2LjExNiAzMS45Njg3IDE5NS42NzggMzEuNzAyNyAxOTUuMTUxIDMxLjU2NjJDMTk0LjYyNiAzMS40Mjk0IDE5NC4wMTIgMzEuNDc0OCAxOTMuMzEgMzEuNzAyN0MxOTIuMjczIDMxLjU2NjIgMTkxLjMzOSAzMS42NjEzIDE5MC41MDggMzEuOTg3OEMxODkuNjc3IDMyLjMxNDkgMTg4Ljk1NiAzMi43ODk0IDE4OC4zNDYgMzMuNDEyMkMxODcuNzM2IDM0LjAzNTcgMTg3LjIzNyAzNC43Njg0IDE4Ni44NDggMzUuNjExOUMxODYuNDU5IDM2LjQ1NTEgMTg2LjIgMzcuMzIxNCAxODYuMDcgMzguMjFDMTg2LjAxNSAzOC41ODY4IDE4NS45ODggMzguOTYxOCAxODUuOTggMzkuMzM2QzE4NS43NDQgMzkuODE3NyAxODUuNDg2IDQwLjIzODggMTg1LjIwMSA0MC41OTIxQzE4NC43OTcgNDEuMDkzNSAxODQuMzc3IDQxLjUwMzggMTgzLjk0MyA0MS44MjI4QzE4My41MDggNDIuMTQyIDE4My4wNzcgNDIuMzg1MiAxODIuNjUgNDIuNTUyM0MxODIuMjIzIDQyLjcxOTggMTgxLjg0MiA0Mi44MzM3IDE4MS41MDcgNDIuODk0MUMxODEuMTEgNDIuOTcwMiAxODAuNzI5IDQyLjk3OCAxODAuMzYzIDQyLjkxN0MxNzkuOTk3IDQyLjg1NjUgMTc5LjY2MSA0Mi42ODE2IDE3OS4zNTcgNDIuMzkyN0MxNzkuMTEyIDQyLjE4MDIgMTc4LjkyNSA0MS44MzgxIDE3OC43OTYgNDEuMzY3MUMxNzguNjY2IDQwLjg5NiAxNzguNTkgNDAuMzYwOCAxNzguNTY3IDM5Ljc2MDJDMTc4LjU0NCAzOS4xNTk5IDE3OC41NjcgMzguNTMzIDE3OC42MzYgMzcuODc5OEMxNzguNzA1IDM3LjIyNjYgMTc4LjgyMiAzNi42MDcyIDE3OC45OSAzNi4wMjIyQzE3OS4xNTggMzUuNDM3MiAxNzkuMzcxIDM0LjkxMyAxNzkuNjMxIDM0LjQ0OTJDMTc5Ljg5IDMzLjk4NjIgMTgwLjE5NSAzMy42NTU0IDE4MC41NDYgMzMuNDU3OUMxODAuNzQ0IDMzLjQ4ODYgMTgwLjg2NiAzMy42MDYgMTgwLjkxMiAzMy44MTFDMTgwLjk1OCAzNC4wMTYzIDE4MC45NjkgMzQuMjU5NSAxODAuOTQ2IDM0LjU0MDVDMTgwLjkyMyAzNC44MjE5IDE4MC44ODkgMzUuMTEwNSAxODAuODQzIDM1LjQwNjZDMTgwLjc5NyAzNS43MDMgMTgwLjc3NSAzNS45NTAyIDE4MC43NzUgMzYuMTQ3NEMxODAuODUxIDM2LjU1NzcgMTgwLjk5OSAzNi44NzcgMTgxLjIyMSAzNy4xMDQ4QzE4MS40NDEgMzcuMzMyNyAxODEuNjkgMzcuNDY2IDE4MS45NjQgMzcuNTAzNkMxODIuMjM5IDM3LjU0MTcgMTgyLjUwOSAzNy40NzczIDE4Mi43NzYgMzcuMzA5OEMxODMuMDQzIDM3LjE0MyAxODMuMjYgMzYuODc3IDE4My40MjggMzYuNTEyQzE4My40NDMgMzYuNTI3NCAxODMuNDY2IDM2LjUzNDkgMTgzLjQ5NyAzNi41MzQ5TDE4My44MTcgMzMuNjQwNEMxODMuOTA5IDMzLjI0NTEgMTgzLjg0NyAzMi44OTU4IDE4My42MzQgMzIuNTkxOUMxODMuNDIgMzIuMjg4IDE4My4xMzggMzIuMTEzIDE4Mi43ODggMzIuMDY3NkMxODIuMzQ1IDMxLjQyOTQgMTgxLjc0NyAzMS4wOTE0IDE4MC45OTIgMzEuMDUzMkMxODAuMjM3IDMxLjAxNTQgMTc5LjQ2MyAzMS4yNjIzIDE3OC42NyAzMS43OTQxQzE3OC4xODIgMzIuMTQ0IDE3Ny43NTEgMzIuNjI2IDE3Ny4zNzggMzMuMjQxM0MxNzcuMDA0IDMzLjg1NyAxNzYuNjk5IDM0LjU0MDUgMTc2LjQ2MyAzNS4yOTI2QzE3Ni4yMjYgMzYuMDQ0OCAxNzYuMDU4IDM2LjgzOTEgMTc1Ljk1OSAzNy42NzQ4QzE3NS44NiAzOC41MTA0IDE3NS44NDEgMzkuMzIzNiAxNzUuOTAyIDQwLjExMzNDMTc1Ljk2MyA0MC45MDM4IDE3Ni4xMDQgNDEuNjQ4NCAxNzYuMzI1IDQyLjM0N0MxNzYuNTQ2IDQzLjA0NjIgMTc2Ljg1NSA0My42MzEyIDE3Ny4yNTIgNDQuMTAyQzE3Ny41ODcgNDQuNTEyMyAxNzcuOTY4IDQ0LjgxMjcgMTc4LjM5NSA0NS4wMDI3QzE3OC44MjIgNDUuMTkyNyAxNzkuMjY4IDQ1LjMxMDEgMTc5LjczNCA0NS4zNTU4QzE4MC4xOTkgNDUuNDAxMiAxODAuNjYgNDUuMzgyMSAxODEuMTE4IDQ1LjI5ODhDMTgxLjU3NSA0NS4yMTU1IDE4Mi4wMSA0NS4wOTc4IDE4Mi40MjEgNDQuOTQ1NEMxODIuOTU1IDQ0Ljc0ODIgMTgzLjUwNSA0NC40OTcyIDE4NC4wNjkgNDQuMTkzM0MxODQuNjMzIDQzLjg4OTcgMTg1LjE3NCA0My41MjQ4IDE4NS42OTMgNDMuMDk5MUMxODUuOTY2IDQyLjg3NTMgMTg2LjIyOCA0Mi42MzEzIDE4Ni40ODIgNDIuMzY5NkMxODYuNTk4IDQyLjY1NTMgMTg2LjcyNyA0Mi45MzE3IDE4Ni44ODIgNDMuMTkwNUMxODcuMjk0IDQzLjg3NDEgMTg3Ljg1IDQ0LjQyOSAxODguNTUyIDQ0Ljg1NDRDMTg5LjI1MyA0NS4yNzk3IDE5MC4xMTUgNDUuNDg0NCAxOTEuMTM3IDQ1LjQ2OTdDMTkyLjIzNSA0NS40NTQ0IDE5My4yNDkgNDUuMTc3NCAxOTQuMTggNDQuNjM3OEMxOTUuMTEgNDQuMDk4OCAxOTUuODcyIDQzLjMwNDIgMTk2LjQ2NyA0Mi4yNTZDMTk3LjM1OCA0Mi4yNTYgMTk4LjIzNCA0Mi4xMDk2IDE5OS4wOTYgNDEuODE5QzE5OS4wODkgNDEuOTExIDE5OS4wODEgNDIuMDA3OSAxOTkuMDc1IDQyLjA5NjZDMTk5LjAxNCA0Mi45MDE5IDE5OC45ODMgNDMuNDQ4NyAxOTguOTgzIDQzLjczNzZDMTk4Ljk2OCA0NC4yMzkgMTk4LjkzNCA0NC44NTgxIDE5OC44OCA0NS41OTQ5QzE5OC44MjcgNDYuMzMyIDE5OC43OTMgNDcuMTA2OSAxOTguNzc4IDQ3LjkxOThDMTk4Ljc2MyA0OC43MzI2IDE5OC43OTMgNDkuNTUzMiAxOTguODY5IDUwLjM4MTdDMTk4Ljk0NSA1MS4yMDk2IDE5OS4xMDUgNTEuOTYyIDE5OS4zNDkgNTIuNjM4M0MxOTkuNTkzIDUzLjMxNDEgMTk5Ljk0IDUzLjg4NzggMjAwLjM5IDU0LjM1OTFDMjAwLjg0IDU0LjgyOTkgMjAxLjQzMSA1NS4xMTEyIDIwMi4xNjMgNTUuMjAyM0MyMDIuOTQxIDU1LjMwODQgMjAzLjYxMiA1NS4xNzE3IDIwNC4xNzYgNTQuNzkyQzIwNC43NCA1NC40MTIgMjA1LjE5OCA1My44OTE4IDIwNS41NDkgNTMuMjMwOEMyMDUuODk5IDUyLjU2OTUgMjA2LjE0NyA1MS44MDYxIDIwNi4yOTIgNTAuOTQwMUMyMDYuNDM3IDUwLjA3NCAyMDYuNDc5IDQ5LjIwMzkgMjA2LjQxOCA0OC4zMzAxQzIwNi4zNTcgNDcuNDU2MiAyMDYuMTk2IDQ2LjYzMjEgMjA1LjkzNyA0NS44NTc1QzIwNS42NzggNDUuMDgyMiAyMDUuMzE5IDQ0LjQ0NCAyMDQuODYyIDQzLjk0MjNDMjA1LjEzNyA0My44NjY5IDIwNS40NjUgNDMuNzIyNiAyMDUuODQ2IDQzLjUwOTVDMjA2LjIyNyA0My4yOTY5IDIwNi42MiA0My4wNTc1IDIwNy4wMjQgNDIuNzkxNUMyMDcuMTIzIDQyLjcyNjEgMjA3LjIyMSA0Mi42NTczIDIwNy4zMiA0Mi41OTAyQzIwNy4yODMgNDMuMTI4NiAyMDcuMjY0IDQzLjUxMjYgMjA3LjI2NCA0My43Mzc2QzIwNy4yNDkgNDQuMjM5IDIwNy4yMTUgNDQuODU4MSAyMDcuMTYxIDQ1LjU5NDlDMjA3LjEwOCA0Ni4zMzIgMjA3LjA3MyA0Ny4xMDY5IDIwNy4wNTggNDcuOTE5OEMyMDcuMDQzIDQ4LjczMjYgMjA3LjA3MyA0OS41NTMyIDIwNy4xNSA1MC4zODE3QzIwNy4yMjYgNTEuMjA5NiAyMDcuMzg2IDUxLjk2MiAyMDcuNjMgNTIuNjM4M0MyMDcuODc0IDUzLjMxNDEgMjA4LjIyMSA1My44ODc4IDIwOC42NzEgNTQuMzU5MUMyMDkuMTIxIDU0LjgyOTkgMjA5LjcxMiA1NS4xMTEyIDIxMC40NDQgNTUuMjAyM0MyMTEuMjIxIDU1LjMwODQgMjExLjg5MiA1NS4xNzE3IDIxMi40NTcgNTQuNzkyQzIxMy4wMjEgNTQuNDEyIDIxMy40NzggNTMuODkxOCAyMTMuODMgNTMuMjMwOEMyMTQuMTggNTIuNTY5NSAyMTQuNDI4IDUxLjgwNjEgMjE0LjU3MyA1MC45NDAxQzIxNC43MTggNTAuMDc0IDIxNC43NTkgNDkuMjAzOSAyMTQuNjk5IDQ4LjMzMDFDMjE0LjYzNyA0Ny40NTYyIDIxNC40NzcgNDYuNjMyMSAyMTQuMjE4IDQ1Ljg1NzVDMjEzLjk1OSA0NS4wODIyIDIxMy42MDEgNDQuNDQ0IDIxMy4xNDMgNDMuOTQyM0MyMTMuNDE4IDQzLjg2NjkgMjEzLjc0NSA0My43MjI2IDIxNC4xMjcgNDMuNTA5NUMyMTQuNTA4IDQzLjI5NjkgMjE0LjkgNDMuMDU3NSAyMTUuMzA1IDQyLjc5MTVDMjE1LjUxNSA0Mi42NTMzIDIxNS43MjQgNDIuNTEwNyAyMTUuOTMyIDQyLjM2NDFDMjE2LjAxIDQzLjEwNzIgMjE2LjE3OSA0My43NTkgMjE2LjQ0OCA0NC4zMDczQzIxNi43NzYgNDQuOTc2MSAyMTcuMjIyIDQ1LjQ5MjUgMjE3Ljc4NyA0NS44NTc1QzIxOC4zNTEgNDYuMjIxOCAyMTkuMDE0IDQ2LjQyMzQgMjE5Ljc3NyA0Ni40NjEyQzIyMC41MzkgNDYuNDk4OCAyMjEuMzcgNDYuMzU4NiAyMjIuMjcxIDQ2LjAzOTNDMjIyLjk0MSA0NS43OTY1IDIyMy41MjUgNDUuNDkyNSAyMjQuMDIgNDUuMTI3OUMyMjQuNTE2IDQ0Ljc2MyAyMjQuOTYyIDQ0LjMxODUgMjI1LjM1OCA0My43OTQ2QzIyNS4zODEgNDMuNzY0MiAyMjUuNDAzIDQzLjczMTMgMjI1LjQyNSA0My43MDA2QzIyNS40OTYgNDMuOTEzNCAyMjUuNTc0IDQ0LjExNzkgMjI1LjY2NyA0NC4zMDczQzIyNS45OTUgNDQuOTc2MSAyMjYuNDQxIDQ1LjQ5MjUgMjI3LjAwNiA0NS44NTc1QzIyNy41NjkgNDYuMjIxOCAyMjguMjMzIDQ2LjQyMzQgMjI4Ljk5NiA0Ni40NjEyQzIyOS43NTggNDYuNDk4OCAyMzAuNTg5IDQ2LjM1ODYgMjMxLjQ4OSA0Ni4wMzkzQzIzMi4xNiA0NS43OTY1IDIzMi43NDQgNDUuNDkyNSAyMzMuMjM5IDQ1LjEyNzlDMjMzLjczNSA0NC43NjMgMjM0LjE4MSA0NC4zMTg1IDIzNC41NzcgNDMuNzk0NkMyMzQuOTc0IDQzLjI3IDIzNS4zMzYgNDIuNjY2IDIzNS42NjQgNDEuOTgyNEMyMzUuOTkyIDQxLjI5ODUgMjM2LjMyMyA0MC41MTY0IDIzNi42NTkgMzkuNjM0N0MyMzYuNzIgMzkuMzkxOCAyMzYuNjYzIDM5LjE3NTIgMjM2LjQ4OCAzOC45ODUyWlwiIGZp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 diff --git a/.obsidian/plugins/obsidian-minimal-settings/manifest.json b/.obsidian/plugins/obsidian-minimal-settings/manifest.json deleted file mode 100644 index 2b1795b..0000000 --- a/.obsidian/plugins/obsidian-minimal-settings/manifest.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "id": "obsidian-minimal-settings", - "name": "Minimal Theme Settings", - "version": "5.3.0", - "minAppVersion": "0.14.15", - "description": "Change the colors, fonts and features of Minimal Theme.", - "author": "@kepano", - "authorUrl": "https://www.twitter.com/kepano", - "isDesktopOnly": false -} \ No newline at end of file diff --git a/.obsidian/plugins/obsidian-minimal-settings/styles.css b/.obsidian/plugins/obsidian-minimal-settings/styles.css deleted file mode 100644 index c94e373..0000000 --- a/.obsidian/plugins/obsidian-minimal-settings/styles.css +++ /dev/null @@ -1 +0,0 @@ -/* Empty */ \ No newline at end of file diff --git a/.obsidian/themes/Discordian.css b/.obsidian/themes/Discordian.css new file mode 100644 index 0000000..eb4c2d9 --- /dev/null +++ b/.obsidian/themes/Discordian.css @@ -0,0 +1,4174 @@ +/*---------------------------------------------------------------- +DISCORDIAN THEME version 0.8.6 +----------------------------------------------------------------*/ + +:root { + --default-font: Catamaran, Helvetica Neue, Helvetica, Arial, sans-serif; + --font-editor: Catamaran SSm, Helvetica Neue, Helvetica, Arial, sans-serif; + --font-monospace: Consolas, Andale Mono, Lucida Console, Source Code Pro, iA Writer Mono S, Jetbrains Mono, Menlo, SFMono-Regular, Lucida Sans Typewriter, DejaVu Sans Mono, Bitstream Vera Sans Mono, Liberation Mono, Nimbus Mono L, Monaco, Courier New, Courier, monospace; + + /* discord palette */ + --discord-green: hsla(153, 46%, 49%, 1); + --discord-yellow: hsla(38, 96%, 54%, 1); + --discord-yellow-alt: hsla(37, 65%, 63%, 1); + --discord-yellow-light: hsla(50, 42%, 48%, 1); + --discord-yellow-bg: hsla(38, 96%, 54%, 0.1); + --discord-orange: hsla(20, 84%, 52%, 1); + --discord-orange-light: hsla(24, 90%, 61%, 1); + --discord-red: hsla(0, 85%, 61%, 1); + --discord-red-hover: hsla(0, 66%, 55%, 1); + --discord-blue: hsla(227, 58%, 65%, 1); + --discord-blue-hover: hsla(227, 44%, 59%, 1); + --discord-grey: hsla(214, 10%, 50%, 1); + --discord-grey-hover: hsla(214, 10%, 45%, 1); + --discord-grey-toggle: hsla(218, 5%, 47%, 1); + --discord-dark: hsla(216, 7%, 14%, 1); + --discord-dark-hover: hsla(216, 7%, 14%, 0.7); + + --elevation-stroke: 0 1px 0 1px hsla(240, 11%, 2%, 0.1); + --elevation-low: 0 1px 0 hsla(240, 11%, 2%, 0.2), 0 1.5px 0 hsla(240, 8%, 3%, 0.05), 0 2px 0 hsla(240, 11%, 2%, 0.05); + --elevation-medium: 0 4px 4px hsla(0, 0%, 0%, 0.16); + --elevation-high: 0 8px 16px hsla(0, 0%, 0%, 0.24); + + --readable-line-length: 45rem; + --font-size-notes: 0.875rem; + --font-size-file-explorer: 0.875rem; + --letter-spacing-notes: -0.2px; +} + +.theme-dark { + --background-primary: hsla(220, 8%, 23%, 1); + --background-primary-alt: hsla(232, 14%, 31%, 1); + --background-secondary: hsla(223, 7%, 20%, 1); + --background-secondary-alt: hsla(216, 7%, 14%, 1); + --background-tertiary: hsla(220, 7%, 17%, 1); + + --background-accent: hsla(217, 8%, 34%, 1); + + --background-code: hsla(204, 6%, 17%, 1); + --background-code-preview: hsla(204, 6%, 17%, 1); + --background-code-border: hsla(0, 0%, 16%, 1); + + --background-modifier-cover: hsla(220, 8%, 23%, 1); + --background-modifier-hover: hsla(217, 8%, 34%, 0.16); + --background-modifier-active: hsla(217, 8%, 34%, 0.24); + --background-modifier-selected: hsla(217, 8%, 34%, 0.32); + --background-modifier-accent: hsla(0, 0%, 100%, 0.06); + --background-modifier-error: var(--discord-red); + --background-modifier-error-hover: var(--discord-red-hover); + --background-modifier-form-field: hsla(0, 0%, 0%, 0.2); + --background-modifier-form-field-highlighted: hsla(0, 0%, 0%, 0.2); + --background-modifier-border: var(--background-secondary-alt); + + --text-normal: hsla(213, 3%, 82%, 1); + --text-muted: hsla(213, 4%, 57%, 1); + --text-faint: hsla(0, 0%, 61%, 1); + --text-link: hsla(197, 100%, 48%, 1); + --text-accent: hsla(265, 66%, 72%, 1); + --text-on-accent: hsla(210, 3%, 87%, 1); + --text-selection: hsla(212, 34%, 54%, 0.5); + --text-highlight-bg: hsla(212, 34%, 54%, 1); + --text-linenumber: hsla(216, 3%, 32%, 0.85); + --text-linenumber-active: hsla(0, 0%, 61%, 0.85); + + --text-strong: var(--discord-yellow-alt); + --text-em: hsla(62, 31%, 61%, 1); + --text-tag: hsla(27, 100%, 63%, 0.73); + --text-mark: hsla(37, 82%, 74%, 1); + + --markup-code: hsla(34, 89%, 61%, 1); + + --text-header: hsla(233, 45%, 69%, 1); + + --text-title-h1: hsla(243, 35%, 65%, 1); + --text-title-h2: var(--text-header); + --text-title-h3: var(--text-header); + --text-title-h4: var(--text-header); + --text-title-h5: var(--text-header); + --text-title-h6: hsla(192, 13%, 53%, 1); + + --text-a: hsla(322, 65%, 70%, 1); + --text-a-hover: hsla(327, 100%, 77%, 1); + + --interactive-accent: var(--discord-green); + --interactive-accent-hover: hsla(152, 60%, 43%, 1); + --interactive-accent-light: var(--discord-yellow-light); + + --interactive-accent-alt: hsla(220, 7%, 17%, 1); + --interactive-hover: hsla(210, 3%, 87%, 1); + --interactive-muted: hsla(217, 8%, 34%, 1); + --interactive-normal: hsla(216, 4%, 74%, 1); + --interactive-active: hsla(0, 100%, 100%, 1); + + --blockquote-border: hsla(286, 22%, 66%, 1); + --blockquote-bg: hsla(240, 11%, 2%, 0.07); + + --scrollbar-bg: transparent; + --scrollbar-thin-thumb: hsla(216, 7%, 14%, 1); + --scrollbar-thin-track: transparent; + --scrollbar-auto-thumb: hsla(216, 7%, 14%, 1); + --scrollbar-auto-track: hsla(210, 10%, 20%, 1); + --scrollbar-auto-scrollbar-color-thumb: hsla(216, 7%, 14%, 1); + --scrollbar-auto-scrollbar-color-track: hsla(223, 7%, 20%, 1); + + --cursor: default; + --opacity-translucency: 1; + + --graph-line: hsla(191, 57%, 35%, 1); + --graph-line-highlight: hsla(191, 57%, 59%, 1); + --graph-circle-outline: transparent; + --graph-circle-fill: hsla(59, 99%, 50%, 1); + --graph-circle-fill-highlight: hsla(59, 99%, 50%, 1); + --graph-circle-fill-unresolved: hsla(206, 89%, 71%, 1); + --graph-fill-tag: hsla(250, 100%, 77%, 1); + --graph-fill-attachment: hsla(314, 57%, 63%, 1); + --graph-arrow: hsla(314, 57%, 63%, 1); +} + +/* HACK for settings panel if title bar is brought back by user */ +body.theme-dark:not(.hider-frameless):not(.discordian-writer):not(.discordian-theme) .modal-container { + top: -22px !important; + height: 100vh !important; +} + +/*---------------------------------------------------------------- +HIDDEN (comment in/out to toggle things) +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Hide main title bar */ + +.titlebar { + display: none; +} + +body { + padding-top: 0 !important; +} + +body:not(.mod-windows):not(.discordian-theme) .mod-left-split .workspace-tab-header-container { + padding-left: 24px !important; +} + +body:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 30px; + transition: padding-left .15s ease; +} + +body.hider-ribbon:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 62px; + transition: padding-left .15s ease; +} + +body.theme-dark:not(.hider-frameless):not(.discordian-writer):not(.discordian-theme) .modal-container, +body.theme-dark:not(.hider-frameless) .modal-container, +body.theme-dark:not(.discordian-writer) .modal-container, +body.theme-dark:not(.discordian-theme) .modal-container { + top: 0 !important; + height: 100vh !important; +} + +/*---------------------------------------------------------------- +Hide status bar */ + +.status-bar { + display: none; +} + +/*---------------------------------------------------------------- +Hide the name of the root folder (vault) */ + +.nav-folder.mod-root > .nav-folder-title { + display: none; +} + +/*---------------------------------------------------------------- +FOUNDATION +----------------------------------------------------------------*/ + +/* font for everything outside of editor/preview panes */ +body, +.app-container { + font-size: 16px; + line-height: 22px !important; + font-family: var(--default-font); + color: var(--text-normal); + word-wrap: break-word; + text-rendering: optimizeLegibility; + vertical-align: baseline; + -webkit-font-feature-settings: "tnum"; + -moz-font-feature-settings: "tnum"; + font-feature-settings: "tnum"; + -webkit-font-variant-numeric: tabular-nums; + -moz-font-variant-numeric: tabular-nums; + font-variant-numeric: tabular-nums; + margin: 0 !important; +} + +.cm-s-obsidian .hmd-fold-html-stub, +.cm-s-obsidian .hmd-fold-code-stub, +.cm-s-obsidian.CodeMirror .HyperMD-hover > .HyperMD-hover-content code, +.cm-s-obsidian .cm-formatting-hashtag, +.cm-s-obsidian .cm-inline-code, +.cm-s-obsidian .HyperMD-codeblock, +.cm-s-obsidian .HyperMD-hr, +.cm-s-obsidian .cm-hmd-frontmatter, +.cm-s-obsidian .cm-hmd-orgmode-markup, +.cm-s-obsidian .cm-formatting-code, +.cm-s-obsidian .cm-math, +.cm-s-obsidian span.hmd-fold-math-placeholder, +.cm-s-obsidian .CodeMirror-linewidget kbd, +.cm-s-obsidian .hmd-fold-html kbd { + font-family: var(--font-monospace); + font-weight: normal; + color: var(--text-muted); + font-size: 100%; + letter-spacing: 0; +} + +button, +input[type="text"], +input[type="email"], +input[type="password"], +input[type="number"], +input[type='search'], +.splash-brand-name, +.dropdown, +.setting-hotkey, +.suggestion-hotkey { + font-family: var(--default-font) !important; + border-color: var(--background-secondary-alt) !important; + letter-spacing: -0.01rem; +} + +button { + -webkit-transition: background-color .17s ease, color .17s ease; + transition: background-color .17s ease, color .17s ease; +} + +input[type='text'], +input[type='search'], +input[type='email'], +input[type='password'], +input[type='number'] { + font-size: 0.875rem; + color: var(--text-muted); + border-radius: 4px; + background-color: var(--discord-dark) !important; +} + +input[type='text']:focus-within, +input[type='search']:focus-within, +input[type='email']:focus-within, +input[type='password']:focus-within, +input[type='number']:focus-within { + color: var(--text-normal); +} + +ul li { + margin: 4px 0; +} + +p { + margin-block-start: 1.4375rem; + margin-block-end: 1.4375rem; +} + +.markdown-preview-pusher + div > p { + margin-block-start: 0; +} + +p.mod-warning { + color: var(--discord-red); +} + +.search-result-file-match::after { + background-color: var(--background-tertiary); +} + +/* Discord-like tooltip */ +.tooltip { + font-size: 1rem; + padding: 10px; +} + +/* html tags in editor */ +.cm-tag, +.cm-attribute { /* .cm-string */ + color: var(--text-muted) !important; +} + +/* horizontal line in preview */ +.markdown-preview-view hr { + background-color: var(--text-muted); + border: none; + height: 1px; + margin: 1.4375rem 0; +} + +/* internal embedded link rendering in preview */ +.markdown-embed-title { + font-weight: 600; + color: var(--text-link); +} + +.markdown-embed { + padding-left: 8px !important; + padding-right: 4px !important; + margin-left: 8px !important; + margin-right: 4px !important; +} + +/* NO FILE OPEN page */ + +.empty-state-title { + color: var(--discord-yellow-alt) !important; +} + +.empty-state-action { + color: var(--text-muted) !important; +} + +.empty-state-action:hover { + color: var(--text-normal) !important; +} + +/*---------------------------------------------------------------- +BLOCKQUOTES */ + +.cm-s-obsidian span.cm-quote { + color: var(--interactive-accent); +} + +.cm-hmd-indent-in-quote { + padding-left: 4px; +} + +.markdown-preview-view blockquote { + color: var(--interactive-accent) !important; + border: none; + border-left: 3px solid var(--blockquote-border) !important; + border-radius: 4px !important; + margin: 1.5rem 1.5rem 1.5rem 3.5rem; + background-color: var(--blockquote-bg); + display: grid; +} + +/*---------------------------------------------------------------- +IMAGES */ + +img { + display: block; + margin: 0 auto; +} + +/*---------------------------------------------------------------- +Normal text outside of headings and code */ + +/* preview */ +.markdown-preview-view { + font-family: var(--font-editor); + color: var(--text-normal); + font-weight: 400; + font-size: var(--font-size-notes); + letter-spacing: var(--letter-spacing-notes); + line-height: 1.65 !important; + overflow-x: hidden; +} + +/* editor */ +.cm-s-obsidian { + font-family: var(--font-editor); + color: var(--text-normal); + font-weight: 400; + font-size: var(--font-size-notes); + letter-spacing: var(--letter-spacing-notes); + line-height: 1.65 !important; + + /* Editor font: make it thicker so it is like in Preview */ + -webkit-font-smoothing: subpixel-antialiased !important; +} + +/*---------------------------------------------------------------- +Bold */ + +strong { + color: var(--discord-yellow-alt); + font-weight: 600; +} + +.cm-s-obsidian .cm-strong { + color: var(--discord-yellow-alt); + font-weight: 600; +} + +/*---------------------------------------------------------------- +Italics */ + +em { + color: var(--text-em); +} + +.cm-em { + color: var(--text-em); +} + +.cm-formatting-em { + font-style: normal; +} + +.cm-em:not(.cm-formatting-em) { + margin-left: -1px; +} + +/*---------------------------------------------------------------- +Highlights */ + +.markdown-preview-view mark { + background-color: transparent !important; + -webkit-box-shadow: inset 0 -2px var(--discord-yellow-alt); + box-shadow: inset 0 -2px var(--discord-yellow-alt); + padding-bottom: 4px; +} + +.cm-s-obsidian span.cm-formatting-highlight, +.cm-s-obsidian span.cm-highlight { + background-color: unset; + -webkit-box-shadow: var(--discord-yellow-alt) 0 -2px 0 0 inset; + box-shadow: var(--discord-yellow-alt) 0 -2px 0 0 inset; + margin: 4px 0; + padding-bottom: 4px; +} + +.cm-s-obsidian span.cm-formatting-highlight { + color: var(--text-muted); +} + +mark > strong { + color: var(--discord-yellow-alt) !important; + font-weight: 500; + padding: 0 2px; +} + +/*---------------------------------------------------------------- +Popup notifications */ + +.notice { + color: var(--text-on-accent) !important; + background-color: var(--background-primary-alt) !important; +} + +/*---------------------------------------------------------------- +Dropdown */ + +.dropdown { + background-color: rgba(0, 0, 0, 0.1); + border: 1px solid rgba(32, 34, 37, 0.5) !important; + border-radius: 6px; + background-image: url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' height='20' width='20' viewBox='0 0 20 20' focusable='false' stroke-width='px' fill='%23B9BBBE' class='dropdown-svg'%3E%3Cpath d='M4.516 7.548c0.436-0.446 1.043-0.481 1.576 0l3.908 3.747 3.908-3.747c0.533-0.481 1.141-0.446 1.574 0 0.436 0.445 0.408 1.197 0 1.615-0.406 0.418-4.695 4.502-4.695 4.502-0.217 0.223-0.502 0.335-0.787 0.335s-0.57-0.112-0.789-0.335c0 0-4.287-4.084-4.695-4.502s-0.436-1.17 0-1.615z'%3E%3C/path%3E%3C/svg%3E"); + background-repeat: no-repeat, repeat; + background-position: right 0.7em top 50%, 0 0; + background-size: 1.2em auto, 100%; + -webkit-transition: background-color .17s ease, color .17s ease; + transition: background-color .17s ease, color .17s ease; + outline: 0 !important; + cursor: pointer; +} + +.dropdown:hover { + background-color: var(--background-modifier-form-field); +} + +.dropdown:focus { + background-color: var(--background-modifier-form-field-highlighted); +} + +/*---------------------------------------------------------------- +Selections */ + +.markdown-preview-view .mod-highlighted { + background-color: var(--text-selection); + color: inherit; +} + +/* flashing and selections when searching */ +.is-flashing { + background-color: var(--text-highlight-bg); + transition: all 0.7s ease-in !important; +} + +/*---------------------------------------------------------------- +WYSIWYG + +This make switching between Editor and Preview seamless +but mostly in terms of size / width / margins and visual shifts +----------------------------------------------------------------*/ + +.CodeMirror-lines { + padding: 0 0 20px 0; +} + +.CodeMirror pre.CodeMirror-line, +.CodeMirror pre.CodeMirror-line-like { + padding: 0; +} + +.cm-s-obsidian .CodeMirror-code { + padding-right: 0; +} + +.markdown-source-view, +.markdown-preview-view, +.markdown-source-view.mod-cm5 { + padding: 1.5rem 1.5rem 0 1.5rem; +} + +.CodeMirror, +.markdown-source-view.is-readable-line-width .CodeMirror, +.markdown-preview-section { + padding-left: 0; + padding-right: 0; + margin: 0 auto; +} + +/*---------------------------------------------------------------- +Editor */ + +/* to be concise between Editor and Preview we need to account for scrollbar */ +.markdown-source-view.is-readable-line-width .CodeMirror, +.CodeMirror { + max-width: 100%; +} + +.markdown-source-view.is-readable-line-width .CodeMirror { + width: calc(var(--readable-line-length) + 16px); +} + +.discordian-writer-mode .markdown-source-view.is-readable-line-width .CodeMirror { + width: calc(var(--readable-line-length) + 0px); +} + +.CodeMirror-scroll { + padding-left: 4rem; + padding-right: 3rem; + margin-right: 0; + margin-bottom: 0; +} + +.CodeMirror-sizer { + margin-left: 0 !important; + border-right: 0 !important; +} + +/*---------------------------------------------------------------- +Preview */ + +.markdown-preview-view.is-readable-line-width .markdown-preview-sizer { + max-width: 100%; +} + +.markdown-preview-section > div { + padding-left: 4rem; + padding-right: 2rem; + margin: 0 auto 0 auto; + max-width: 100%; +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section { + max-width: 100%; + width: var(--readable-line-length); +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section > div { + width: var(--readable-line-length); +} + +/*---------------------------------------------------------------- +HEADINGS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Preview */ + +.markdown-preview-view h1, +.markdown-preview-view h2, +.markdown-preview-view h3, +.markdown-preview-view h4, +.markdown-preview-view h5, +.markdown-preview-view h6 { + font-weight: 600; + margin-block-start: 1em; + margin-block-end: 1em; + line-height: 125% !important; +} + +.markdown-preview-view h1 { + font-size: 2rem; + color: var(--text-title-h1); + margin-block-start: 0; + margin-block-end: 0; + margin-top: 0; +} + +.markdown-preview-view h2 { + font-size: 1.625rem; + color: var(--text-title-h2); +} + +.markdown-preview-view h3 { + font-size: 1.375rem; + color: var(--text-title-h3); +} + +.markdown-preview-view h4 { + font-size: 1.125rem; + color: var(--text-title-h4); +} + +.markdown-preview-view h5 { + font-size: 1.125rem; + color: var(--text-title-h5); +} + +.markdown-preview-view h6 { + font-size: 1rem; + color: var(--text-title-h6); +} + +/*---------------------------------------------------------------- +Editor */ + +.cm-formatting.cm-formatting-header.cm-header { + font-weight: 400; +} + +.cm-header-1, +.cm-header-2, +.cm-header-3, +.cm-header-4, +.cm-header-5, +.cm-header-6 { + font-weight: 600; + margin-block-start: 1em; + line-height: 125% !important; +} + +.cm-header-1 { + font-size: 2rem; + color: var(--text-title-h1); + margin-block-start: 0; +} + +.cm-header-2 { + font-size: 1.625rem; + color: var(--text-title-h2); +} + +.cm-header-3 { + font-size: 1.375rem; + color: var(--text-title-h3); +} + +.cm-header-4 { + font-size: 1.125rem; + color: var(--text-title-h4); +} + +.cm-header-5 { + font-size: 1.125rem; + color: var(--text-title-h5); +} + +.cm-header-6 { + font-size: 1rem; + color: var(--text-title-h6); +} + +.cm-s-obsidian span.cm-header-1.cm-footref, +.cm-s-obsidian span.cm-header-1.cm-blockid, +.cm-s-obsidian span.cm-header-2.cm-footref, +.cm-s-obsidian span.cm-header-2.cm-blockid, +.cm-s-obsidian span.cm-header-3.cm-footref, +.cm-s-obsidian span.cm-header-3.cm-blockid { + font-size: 1rem; + vertical-align: text-top; + margin-top: -1rem; +} + +.cm-s-obsidian span.cm-header-4.cm-footref, +.cm-s-obsidian span.cm-header-4.cm-blockid, +.cm-s-obsidian span.cm-header-5.cm-footref, +.cm-s-obsidian span.cm-header-5.cm-blockid, +.cm-s-obsidian span.cm-header-6.cm-footref, +.cm-s-obsidian span.cm-header-6.cm-blockid { + font-size: 0.75rem; + vertical-align: text-top; + margin-top: -0.75rem; +} + +.cm-s-obsidian pre.HyperMD-header { + padding-bottom: 0; + padding-left: 0 !important; +} + +.vertical-tab-content h1:first-child, +.vertical-tab-content h2:first-child, +.vertical-tab-content h3:first-child { + margin-block-start: 0; +} + +/*---------------------------------------------------------------- +Links in headers should be visually the same as normal headers +This is purely for visual aesthetics but makes sense when using +Bryan Jenks (@tallguyjenks) idea of self-correcting titles +*/ + +/*---------------------------------------------------------------- +Preview */ + +.markdown-preview-view h1 a.internal-link { + color: var(--text-title-h1); +} + +.markdown-preview-view h2 a.internal-link { + color: var(--text-title-h2); +} + +.markdown-preview-view h3 a.internal-link { + color: var(--text-title-h3); +} + +.markdown-preview-view h4 a.internal-link { + color: var(--text-title-h4); +} + +.markdown-preview-view h5 a.internal-link { + color: var(--text-title-h5); +} + +/*---------------------------------------------------------------- +Editor */ + +.cm-s-obsidian span.cm-formatting-link.cm-header-1, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-1 { + color: var(--text-title-h1); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-1:hover { + color: var(--text-title-h1); +} + +.cm-s-obsidian span.cm-formatting-link.cm-header-2, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-2 { + color: var(--text-title-h2); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-2:hover { + color: var(--text-title-h2); +} + +.cm-s-obsidian span.cm-formatting-link.cm-header-3, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-3 { + color: var(--text-title-h3); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-3:hover { + color: var(--text-title-h3); +} + +.cm-s-obsidian span.cm-formatting-link.cm-header-4, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-4 { + color: var(--text-title-h4); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-4:hover { + color: var(--text-title-h4); +} + +.cm-s-obsidian span.cm-formatting-link.cm-header-5, +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-5 { + color: var(--text-title-h5); +} + +.cm-s-obsidian span.cm-hmd-internal-link.cm-header-5:hover { + color: var(--text-title-h5); +} + +/*---------------------------------------------------------------- +Inline code in headers should respect header size +*/ + +.cm-s-obsidian span.cm-inline-code.cm-header-1:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-1 { + font-size: 2rem; +} + +.cm-s-obsidian span.cm-inline-code.cm-header-2:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-2 { + font-size: 1.625rem; +} + +.cm-s-obsidian span.cm-inline-code.cm-header-3:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-3 { + font-size: 1.375rem; +} + +.cm-s-obsidian span.cm-inline-code.cm-header-4:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-4, +.cm-s-obsidian span.cm-inline-code.cm-header-5:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-5 { + font-size: 1.125rem; +} + +.cm-s-obsidian span.cm-inline-code.cm-header-6:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight), +.cm-s-obsidian span.cm-inline-code.cm-header-6 { + font-size: 1rem; +} + +.cm-s-obsidian span.cm-inline-code { + padding-bottom: 0; +} + +/*---------------------------------------------------------------- +POPOVERS +----------------------------------------------------------------*/ + +.menu, +div.popover.hover-popover, +.suggestion-container { + background-color: var(--background-secondary); + border-radius: 4px; + border: none !important; + min-width: 15rem; + font-family: var(--font-editor); + font-size: 15px !important; + -webkit-box-shadow: var(--elevation-stroke), var(--elevation-high); + box-shadow: var(--elevation-stroke), var(--elevation-high); +} + +/* Bigger popovers */ +div.popover.hover-popover { + width: 35rem; + max-height: 25rem; +} + +div.popover.hover-popover .markdown-preview-view { + font-size: 13px !important; +} + +div.popover.hover-popover .markdown-embed-content .markdown-preview-section { + padding: 1.5rem; +} + +.popover.hover-popover .markdown-embed { + height: 25rem; +} + +div.popover.hover-popover .markdown-preview-view h1 { + font-size: 1.375rem; +} + +div.popover.hover-popover .markdown-preview-view h2 { + font-size: 1.25rem; +} + +div.popover.hover-popover .markdown-preview-view h3 { + font-size: 1.125rem; +} + +div.popover.hover-popover .markdown-preview-view h4 { + font-size: 1rem; +} + +div.popover.hover-popover .markdown-preview-view h5, +div.popover.hover-popover .markdown-preview-view h6 { + font-size: 0.875rem; +} + +/*---------------------------------------------------------------- +SUGGESTIONS +----------------------------------------------------------------*/ + +.suggestion-item, +.suggestion-empty { + font-size: 15px; +} + +.suggestion .suggestion-item.is-selected { + background-color: var(--background-modifier-form-field-highlighted); + color: var(--text-on-accent); +} + +.suggestion-highlight { + color: var(--interactive-accent) !important; +} + +/*---------------------------------------------------------------- +SCROLLBARS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +theme-default thin scrollbars */ + +::-webkit-scrollbar { + width: 8px; + height: 8px; +} + +::-webkit-scrollbar-track { + border-color: var(--scrollbar-thin-track); + background-color: var(--background-secondary); + border: 2px solid var(--scrollbar-thin-track); +} + +::-webkit-scrollbar-thumb { + background-clip: padding-box; + border: 2px solid transparent; + border-radius: 4px; + background-color: var(--scrollbar-thin-thumb); + min-height: 40px; +} + +::-webkit-scrollbar-corner { + background-color: transparent; +} + +/* Clean up secondary scrollbar*/ +.CodeMirror-scroll::-webkit-scrollbar { + display: none !important; +} + +/*---------------------------------------------------------------- +scrollbars in editor & preview */ + +.mod-root { + scrollbar-width: auto; + scrollbar-color: var(--scrollbar-auto-scrollbar-color-thumb) var(--scrollbar-auto-scrollbar-color-track); +} + +.mod-root ::-webkit-scrollbar { + width: 16px !important; + height: 16px !important; +} + +.mod-root ::-webkit-scrollbar-track { + background-color: var(--scrollbar-auto-track); + border: 4px solid var(--background-primary); +} + +.mod-root ::-webkit-scrollbar-thumb, +.mod-root ::-webkit-scrollbar-track { + border: 4px solid transparent; + background-clip: padding-box; + border-radius: 8px; +} + +.mod-root ::-webkit-scrollbar-thumb { + background-color: var(--scrollbar-auto-thumb); + min-height: 40px; +} + +.mod-root ::-webkit-scrollbar-corner { + background-color: transparent; +} + +/*---------------------------------------------------------------- +graph controls scrollbars */ + +.mod-root .graph-controls::-webkit-scrollbar { + width: 8px !important; + height: 8px !important; +} + +.mod-root .graph-controls::-webkit-scrollbar-track { + border-color: var(--background-secondary-alt) !important; + background-color: var(--background-primary) !important; + border: 0 solid var(--scrollbar-thin-track) !important; + border-radius: 0 !important; +} + +.mod-root .graph-controls::-webkit-scrollbar-thumb { + background-clip: padding-box !important; + border: 2px solid transparent !important; + border-radius: 0 !important; + background-color: var(--scrollbar-thin-thumb); + min-height: 40px !important; +} + +.mod-root .graph-controls::-webkit-scrollbar-corner { + background-color: transparent !important; +} + +/*---------------------------------------------------------------- +codeblocks - scrollable content without horizontal scrollbar */ + +.markdown-preview-section pre::-webkit-scrollbar-track { + border: 0; + border-radius: 0; + background-color: var(--background-primary); +} + +.markdown-preview-section pre::-webkit-scrollbar-thumb { + background-color: var(--background-primary); /* --scrollbar-thin-thumb to reveal */ + border: 6px solid transparent; +} + +/*---------------------------------------------------------------- +tables - scrollable content without horizontal scrollbar */ + +.CodeMirror-hscrollbar::-webkit-scrollbar-track { + border: 0; + border-radius: 0; + background-color: var(--background-primary); +} + +.CodeMirror-hscrollbar::-webkit-scrollbar-thumb { + background-color: var(--background-primary); /* --scrollbar-thin-thumb to reveal */ + border: 6px solid transparent; +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section { + overflow-x: auto; +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section::-webkit-scrollbar-track { + border: 0; + border-radius: 0; + background-color: var(--background-primary); +} + +.markdown-preview-view.is-readable-line-width .markdown-preview-section::-webkit-scrollbar-thumb { + background-color: var(--background-primary); /* --scrollbar-thin-thumb to reveal */ + border: 6px solid transparent; +} + +/*---------------------------------------------------------------- +WORKSPACE +----------------------------------------------------------------*/ + +.app-container { + border-top: 1px solid var(--background-tertiary) !important; +} + +.view-content { + height: calc(100% - 32px); +} + +.titlebar-button-container { + top: 0; +} + +.nav-action-button.is-active { + background-color: var(--interactive-accent-alt); + color: var(--text-on-accent); +} + +/* straight corners */ +.workspace-split.mod-left-split .workspace-tabs .workspace-leaf, +.workspace-split.mod-right-split .workspace-tabs .workspace-leaf, +.workspace-leaf-content { + border-top-left-radius: 0 !important; + border-top-right-radius: 0 !important; +} + +/*---------------------------------------------------------------- +Collapsed Ribbons */ + +.workspace-ribbon.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +.workspace-ribbon.mod-right.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +.workspace-ribbon.mod-left.is-collapsed { + background-color: var(--background-secondary-alt) !important; +} + +/*---------------------------------------------------------------- +Tabs */ + +.workspace-tabs { + background-color: var(--background-secondary); + overflow: hidden; + padding: 0 0 1rem 0; + position: relative; +} + +.workspace-tab-header { + color: var(--text-muted) !important; + text-decoration: none !important; +} + +.workspace-tab-header:hover { + color: var(--text-normal) !important; +} + +.workspace-tags, +.tag-container { + padding: 0; +} + +/*---------------------------------------------------------------- +Resize Handlers */ + +body.is-translucent { + background-color: var(--background-primary); +} + +.workspace-leaf-resize-handle, +.is-translucent .workspace-leaf-resize-handle { + background-color: var(--background-secondary); /*--background-secondary-alt*/ + margin: 0; +} + +.workspace-leaf-resize-handle:hover, +.is-translucent .workspace-leaf-resize-handle:hover { + background-color: var(--interactive-accent-light); +} + +/*---------------------------------------------------------------- +Split Mode */ + +.workspace-split.mod-vertical > * > .workspace-leaf-resize-handle, +.workspace-split.mod-left-split > .workspace-leaf-resize-handle, +.workspace-split.mod-right-split > .workspace-leaf-resize-handle { + width: 2px !important; +} + +.workspace-split.mod-horizontal > * > .workspace-leaf-resize-handle { + height: 2px; +} + +.workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content { + padding-right: 0; +} + +.workspace-split.mod-vertical > .workspace-leaf { + padding-right: 0; +} + +.workspace-split.mod-root { + background-color: transparent !important; +} + +/* no animation for panels - feels more snappier */ +.workspace-split.mod-left-split, +.workspace-split.mod-right-split { + transition: none; +} + +.workspace-split.mod-root > .workspace-leaf:first-of-type .workspace-leaf-content .view-content { + padding-right: 0; +} + +/*---------------------------------------------------------------- +Side Dock */ + +.side-dock-ribbon-action { + color: var(--text-muted) !important; +} + +.side-dock-ribbon-action:hover { + color: var(--text-normal) !important; +} + +.side-dock-ribbon-tab.is-active { + color: var(--interactive-accent) !important; +} + +.side-dock-ribbon-tab.is-active .side-dock-ribbon-tab-inner:hover { + color: #6272a4 !important; + background-color: var(--background-secondary); +} + +.side-dock-panels-container { + font-size: 13px !important; + background-color: var(--background-secondary-alt) !important; + color: var(--background-secondary-alt); +} + +/* side dock titles at top */ +.side-dock-title { + font-size: 20px !important; + font-weight: 800 !important; +} + +.side-dock-collapsible-section-header { + font-size: 14px; +} + +/* hover actions on side dock navigation */ +.side-dock-ribbon-tab:hover, +.side-dock-ribbon-tab-inner:hover, +.side-dock-ribbon-action:hover, +.side-dock-ribbon-action.is-active:hover, +.nav-action-button:hover, +.side-dock-collapse-btn:hover { + color: var(--text-normal); +} + +/*---------------------------------------------------------------- +Navigation & File Explorer */ + +.nav-action-button { + margin-bottom: 5px; +} + +.nav-action-button svg { + width: 15px; +} + +.nav-header { + padding: 8px 20px 4px 20px; +} + +.nav-file-title, +.nav-folder-title { + cursor: var(--cursor); + align-items: baseline; + width: 100%; + vertical-align: middle; + line-height: 1.25; + border: 1px solid var(--background-secondary); +} + +.nav-file-title { + padding: 8px 10px 6px 10px; + margin-left: 10px; + margin-right: 10px; + font-family: var(--font-editor); + font-variant-numeric: tabular-nums !important; + font-size: var(--font-size-file-explorer); + border-radius: 4px; + color: var(--text-muted) !important; + background-color: var(--background-secondary); + display: inline-flex; + -webkit-font-feature-settings: "tnum" !important; + -moz-font-feature-settings: "tnum" !important; + font-feature-settings: "tnum" !important; + -webkit-font-variant-numeric: tabular-nums !important; + -moz-font-variant-numeric: tabular-nums !important; +} + +.nav-file-title:hover, +.nav-folder-title:hover { + color: var(--text-normal) !important; +} + +.nav-folder-title { + font-size: calc(var(--font-size-file-explorer) + 0.125rem); + color: var(--interactive-active) !important; + background-color: var(--background-secondary); + padding: 2px 10px 2px 22px; +} + +/*---------------------------------------------------------------- +Condense line spacing on file explorer title list. +Avoid character-level word breaks */ + +.nav-file-title-content, +.search-result-file-title { + padding-top: 0 !important; + padding-bottom: 0 !important; + line-height: normal !important; + word-break: keep-all; +} + +.nav-file-title-content, +.nav-folder-title-content { + white-space: nowrap; + text-overflow: ellipsis; + overflow: hidden; + display: block; +} + +.nav-folder-title-content { + padding: 1px 4px; +} + +.nav-file-title-content { + width: 100%; +} + +.nav-files-container { + overflow-x: hidden !important; + padding-bottom: 25px; +} + +/* smaller & bold vault title */ +.nav-folder.mod-root > .nav-folder-title { + padding-left: 6px; + font-size: 14px; + font-weight: 600; + top: 0; + text-transform: uppercase; + letter-spacing: 1px; + cursor: default; + color: var(--text-accent) !important; +} + +.nav-file { + margin-right: 10px; +} + +.nav-folder-children .nav-folder-children > .nav-file > .nav-file-title { + padding: 6px 10px 6px 10px; + margin-left: 0 !important; + margin-right: 10px; +} + +.nav-folder-children .nav-folder-children > .nav-file > .nav-file-title > .nav-file-title-content { + padding: 2px 0; +} + +/*---------------------------------------------------------------- +Files & folders: active & hover */ + +.nav-file.is-active .nav-file-tag { + color: var(--text-normal); +} + +.nav-file-title.is-active::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' height='8' width='8'%3E%3Ccircle cx='4' cy='4' r='4' stroke='white' stroke-width='0' fill='white'/%3E%3C/svg%3E"); + position: absolute; + left: -4px; +} + +.nav-folder-children .nav-folder-children > .nav-file > .nav-file-title.is-active::before { + content: none; +} + +.nav-file-title.is-active, +.nav-folder-title.is-active, +body:not(.is-grabbing) .nav-file-title:hover, +body:not(.is-grabbing) .nav-folder-title:hover { + border-radius: 4px; +} + +body:not(.is-grabbing) .nav-folder-title:hover { + color: var(--interactive-active) !important; +} + +.nav-folder.mod-root > .nav-folder-title:hover { + color: var(--text-accent) !important; +} + +.nav-file-title.is-active, +.nav-folder-title.is-active { + background-color: var(--background-primary); +} + +body:not(.is-grabbing) .nav-file-title:hover, +body:not(.is-grabbing) .nav-folder-title:hover { + background-color: var(--background-modifier-hover); +} + +body:not(.is-grabbing) .nav-file-title.is-active, +body:not(.is-grabbing) .nav-file-title.is-active:hover { + background-color: var(--background-primary); + color: var(--text-normal) !important; +} + +.nav-folder-collapse-indicator { + background-color: transparent !important; +} + +.collapse-icon svg { + height: 12px; +} + +.nav-file-tag { + background-color: var(--background-secondary-alt); + top: -1px; + margin-left: 0; +} + +.nav-file-tag + .nav-file-title-content { + margin-left: 4px; +} + +/*---------------------------------------------------------------- +Search */ + +.search-result { + margin-bottom: 0; +} + +.search-result-file-title { + color: var(--text-a) !important; + background-color: var(--background-secondary); + font-weight: 400; +} + +.search-result-file-title:hover { + background-color: var(--background-secondary); +} + +.search-result-file-matches { + font-size: 13px; + line-height: 16px; + margin-right: 5px; + border-bottom: 0; +} + +.search-result-file-match::before { + display: none; +} + +.search-result-file-match:not(:first-child) { + margin-top: 0; +} + +.search-result-file-match { + line-height: normal !important; + word-break: keep-all; + left: 0; + width: 100%; + padding-top: 4px !important; + padding-bottom: 4px !important; +} + +.search-result-file-match:hover { + background-color: var(--background-tertiary); +} + +.search-result-file-matched-text { + background-color: var(--text-selection); +} + +.search-result-collapse-indicator { + top: -5px !important; +} + +.search-result-file-match-replace-button { + color: var(--text-on-accent); + top: 3px; + right: 8px; + opacity: 0.8; + font-size: .625rem; + text-transform: uppercase; + background-color: var(--interactive-accent) !important; + height: .9375rem; + padding: 0 .275rem; + margin-top: .075em; + border-radius: .1875rem; + letter-spacing: 1px; +} + +.tree-item-self .collapse-icon { + margin-top: -1px; +} + +.tree-item-flair { + background-color: unset; +} + +.tree-item-self .tree-item-flair { + font-family: var(--font-editor); + font-size: 0.6875rem; +} + +.tree-item-self:hover .tree-item-flair { + background-color: unset; + color: var(--text-a); +} + +.backlink-pane .tree-item-inner { + font-size: 0.875rem; +} + +.backlink-pane > .tree-item-self:hover .tree-item-flair { + color: var(--text-normal); +} + +.tag-container .tree-item-self:hover .tree-item-flair { + color: var(--text-normal); +} + +.tree-item-children { + margin-left: 15px; +} + +/* search count boxes */ +.search-result-count { + font-family: var(--font-monospace); + letter-spacing: 0; +} + +.search-result-file-title .pane-list-item-ending-flair { + position: absolute; + top: 1px; + font-size: 12px; + background-color: var(--background-secondary-alt); + line-height: 12px; + border-radius: 3px; +} + +/* clean up side bar empty state (e.g. unlinked mentions) */ +.search-empty-state { + width: auto; + padding-left: 15px; + padding-right: 15px; + line-height: normal; + font-size: 0.875rem; + color: var(--discord-red-hover); +} + +/*---------------------------------------------------------------- +Header */ + +.workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header { + border-bottom: 0; + background-color: var(--background-primary); +} + +.view-header { + height: 30px; + border-top: 0; + border-bottom: 0; + background-color: var(--background-primary); +} + +.view-header::before { + content: ""; + position: absolute; + display: block; + left: 0; + right: 0; + top: 28px; + height: 1px; + -webkit-box-shadow: var(--elevation-low) !important; + box-shadow: var(--elevation-low) !important; + z-index: 1; + pointer-events: none; +} + +.view-header-title { + font-size: 13px; + line-height: 32px; + font-family: var(--font-editor) !important; +} + +.view-header-title-container { + position: relative; +} + +.workspace-leaf.mod-active .view-header { + background-color: var(--background-primary); + border-bottom: 2px solid var(--discord-yellow-light); +} + +/* fix the long-title-obscuring shadows */ +.workspace-leaf.mod-active .view-header-title-container::after, +.view-header-title-container::after { + content: ' '; + position: absolute; + top: 0; + right: 0; + height: 28px; + background: linear-gradient(to right, transparent, var(--background-primary)) !important; /* rgb(51,53,59) */ +} + +.view-header-title-container::after { + background: linear-gradient(to right, transparent, var(--background-primary)) !important; +} + +/* Change color of note title active pane */ +.workspace-leaf.mod-active .view-header-title { + color: var(--text-normal); +} + +.workspace-leaf-content .view-content, +.workspace-leaf-content[data-type='tag'] { + padding: 10px; +} + +.item-list { + overflow-x: hidden; +} + +.view-header-icon { + top: 0 !important; +} + +/*---------------------------------------------------------------- +View Actions */ + +.view-action { + top: 0; + color: var(--text-muted) !important; + text-decoration: none !important; +} + +.view-action:hover, +.view-action.is-active { + color: var(--text-normal) !important; +} + +.view-actions { + padding: 5px 10px; + margin-left: auto; +} + +.view-action.mod-close-leaf > svg { + margin-top: 1px; +} + +.view-action.mod-pin-leaf > svg { + height: 15px; +} + +/* icons at top of panes */ +.file-view-actions a { + color: var(--text-muted) !important; +} + +.file-view-actions a:hover { + color: var(--text-muted) !important; +} + +/*---------------------------------------------------------------- +Top Window Frame */ + +.titlebar { + background: var(--background-primary); +} + +.titlebar-text { + display: none; + color: var(--text-faint); + letter-spacing: inherit; +} + +.titlebar-button { + opacity: 1; + cursor: var(--cursor); +} + +.titlebar-button svg path { + fill: var(--text-muted) !important; + stroke: var(--text-muted) !important; +} + +.titlebar-button:hover svg path { + fill: var(--text-normal) !important; + stroke: var(--text-normal) !important; +} + +/*---------------------------------------------------------------- +Status Bar */ + +.status-bar { + border-top: 0; + background-color: var(--background-secondary-alt) !important; + color: var(--text-faint); + padding: 0 4em 0 0; +} + +.status-bar-item { + padding: 0 5px; + font-size: 13px; +} + +.status-bar-item-segment { + margin-right: 1rem; +} + +/*---------------------------------------------------------------- +LISTS +----------------------------------------------------------------*/ + +ul { + padding-inline-start: 2em; + list-style: none; + list-style-type: none; +} + +ul ul, +ol ul, +ol ol ul, +ol ul ul, +ul ol ul, +ul ul ul { + list-style: none; + list-style-type: none; +} + +ul > li:not(.task-list-item)::before { + content: "\2022"; + color: var(--text-faint); + font-weight: 400; + display: inline-block; + width: 1em; + margin-left: -1em; +} + +ul li p, +ol li p { + display: inline; +} + +ol { + padding-inline-start: 1rem; + margin-left: 1rem; + list-style: none; + counter-reset: counter; + position: relative; +} + +ol > li { + counter-increment: counter; + margin: 0.3rem 0 0.3rem 0; +} + +ol > li::before { + content: counter(counter) ". "; + color: var(--text-faint); + position: absolute; + text-align: right; + left: -1.25rem; + width: 2rem; +} + +.markdown-preview-section > ul.contains-task-list { + margin-block-end: 2rem; +} + +/*---------------------------------------------------------------- +TASK LISTS +----------------------------------------------------------------*/ + +input[type=checkbox] { + -webkit-appearance: none; + appearance: none; + padding: 0; + cursor: pointer; + background-color: var(--background-primary); + border: 1px solid var(--text-faint); + border-radius: 3px; +} + +input[type=checkbox]:focus, +input[type=checkbox]:hover { + outline: 0; + border-color: var(--text-faint); +} + +input[type=checkbox]:checked { + background-color: var(--discord-blue) !important; + border: 1px solid var(--discord-blue); + background-position: center; + background-size: 70%; + background-repeat: no-repeat; + background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' aria-hidden='true' focusable='false' width='1em' height='1em' style='-ms-transform: rotate(360deg); -webkit-transform: rotate(360deg); transform: rotate(360deg);' preserveAspectRatio='xMidYMid meet' viewBox='0 0 20 20'%3E%3Cpath d='M0 11l2-2l5 5L18 3l2 2L7 18z' fill='%23fff'/%3E%3C/svg%3E"); +} + +/*---------------------------------------------------------------- +Preview Mode */ + +.markdown-preview-view .task-list-item-checkbox { + top: 8px; + width: calc(var(--font-size-notes) + 0.375rem); + height: calc(var(--font-size-notes) + 0.375rem); + margin-left: -0.2rem; + margin-right: 0.5rem; + filter: none; +} + +ul.contains-task-list li > div.list-collapse-indicator { + margin-top: 0.5rem; + padding: 0; +} + +ul.contains-task-list li { + margin: 0; +} + +/*---------------------------------------------------------------- +Smart Visual Task Lists ALSO in Editor Mode ! (HACKISH) + +This works properly only with "Smart Indent List" setting enabled +as it produces checkboxes automatically when entering next line. +Best combined with "Toggle checklist status" command shortcut. + +FOR DEFAULT BEHAVIOUR PLEASE REMOVE THIS WHOLE SECTION TILL END */ + +.discordian-pretty-tasks-editor .cm-s-obsidian span.cm-formatting-list { + margin: 0; +} + +.discordian-pretty-tasks-editor .cm-s-obsidian pre.HyperMD-list-line { + padding-top: 0; +} + +.discordian-pretty-tasks-editor .cm-s-obsidian span.cm-formatting-task { + white-space: pre; + text-align: center; + color: transparent; + font-size: calc(0.7 * calc(var(--font-size-notes) + 0.125rem)); + line-height: 2rem; + background-color: var(--background-primary); + font-family: var(--default-font); + margin-left: -0.8rem; + padding-bottom: 0.1rem; +} + +.discordian-pretty-tasks-editor .cm-formatting-task { + border: 1px solid var(--text-faint); + border-radius: 3px; + padding: 0; +} + +/* HACK: makes unchecked task same size as checked one */ +.discordian-pretty-tasks-editor .cm-s-obsidian span.cm-formatting-task::after { + content: '\0020\0020\0020\0020'; + color: transparent; +} + +.discordian-pretty-tasks-editor input[type=checkbox]:checked, +.discordian-pretty-tasks-editor .cm-formatting-task.cm-property { + background-color: var(--discord-blue) !important; + border: 1px solid var(--discord-blue); +} + +.discordian-pretty-tasks-editor .cm-formatting-task.cm-property::after { + content: '\0020\0020\0020' !important; + color: transparent !important; +} + +.discordian-pretty-tasks-editor .cm-formatting-task + span { + padding-left: 0.3rem; + vertical-align: sub; +} + +.discordian-pretty-tasks-editor .cm-formatting-task ~ span { + vertical-align: sub !important; +} + +/*---------------------------------------------------------------- +Adjust nested level task lists when collapsed +Order matters here - from top level supported (7) down to first */ + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-7 { + padding-left: calc(12.25 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-6 { + padding-left: calc(10.5 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-5 { + padding-left: calc(8.75 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-4 { + padding-left: calc(7 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-3 { + padding-left: calc(5.25 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +.discordian-pretty-tasks-editor pre.HyperMD-list-line-2:not(.HyperMD-list-line-1) { + padding-left: calc(3.5 * calc(var(--font-size-notes) + 0.125rem)) !important; +} + +/*---------------------------------------------------------------- +LINKS & BRACKETS +----------------------------------------------------------------*/ + +a, +.internal-link, +.cm-hmd-internal-link, +.cm-link, +.cm-url, +.cm-formatting-link, +.cm-s-obsidian span.cm-link, +.cm-s-obsidian span.cm-hmd-internal-link { + color: var(--text-a); + text-decoration: none; +} + +a:hover, +.internal-link:hover, +.cm-hmd-internal-link:hover, +.cm-link:hover, +.cm-url:hover, +.cm-formatting-link:hover { + color: var(--text-a-hover); + text-decoration: none; +} + +.cm-s-obsidian span.cm-formatting-link { + color: var(--text-a); + padding: 0 1px; +} + +.cm-s-obsidian span.cm-link:hover, +.cm-s-obsidian span.cm-hmd-internal-link:hover { + color: var(--text-a-hover); + text-decoration: none; +} + +/* regular urls in editor */ +.cm-s-obsidian span.cm-url { + /*text-decoration: none;*/ +} + +/* preview */ +.markdown-preview-view .internal-link { + text-decoration: none; +} + +.markdown-preview-view .internal-link.is-unresolved { + opacity: 1; +} + +.external-link { + background-image: unset; + padding-right: 0; +} + +.markdown-preview-view .external-link { + color: var(--text-link); +} + +a:not(.internal-link) { + color: var(--text-link); +} + +a:not(.internal-link):hover { + color: var(--text-link); + text-decoration: underline; +} + +a:not(.internal-link).footnote-link { + color: var(--text-a); + text-decoration: none; +} + +/*---------------------------------------------------------------- +TAGS +----------------------------------------------------------------*/ + +.cm-s-obsidian .cm-formatting-hashtag { + font-family: var(--font-editor); +} + +a.tag, +span:not(.cm-header).cm-hashtag { + font-weight: 400; + unicode-bidi: -moz-plaintext; + unicode-bidi: plaintext; + color: var(--discord-blue); + background: rgba(114, 137, 218, 0.1); + position: relative; + -webkit-transition: background-color .15s ease-out, color .15s ease-out; + transition: background-color .15s ease-out, color .15s ease-out; +} + +span:not(.cm-header).cm-hashtag-begin { + border-top-left-radius: 3px; + border-bottom-left-radius: 3px; + padding-left: 4px; + padding-top: 3px; + padding-bottom: 1px; +} + +span:not(.cm-header).cm-hashtag-end { + border-top-right-radius: 3px; + border-bottom-right-radius: 3px; + padding: 3px 3px 1px 0; + margin-right: 2px; +} + +a.tag { + padding: 3px 4px 1px 4px !important; + border-radius: 3px; + margin-right: 2px; +} + +span:not(.cm-header).cm-hashtag { + text-decoration: none !important; +} + +a.tag:hover { + text-decoration: none !important; + color: var(--discord-blue); + background-color: rgba(114, 137, 218, 0.2); +} + +h1 a.tag, +h2 a.tag, +h3 a.tag, +h4 a.tag, +h5 a.tag, +h6 a.tag { + background: unset; + font-style: italic; + color: unset; + filter: invert(30%); +} + +h1 a.tag:hover, +h2 a.tag:hover, +h3 a.tag:hover, +h4 a.tag:hover, +h5 a.tag:hover, +h6 a.tag:hover { + background: unset; + color: unset; +} + +span.cm-hashtag { + text-decoration: none !important; +} + +/*---------------------------------------------------------------- +FOOTNOTES +----------------------------------------------------------------*/ + +sup { + letter-spacing: 0; + padding-left: 0.2rem; +} + +.cm-s-obsidian span.cm-footref, +.cm-s-obsidian span.cm-blockid { + vertical-align: super; + margin-top: 0; + font-size: small; +} + +.cm-s-obsidian pre.HyperMD-footnote { + padding-left: 3rem; + padding-bottom: 0.5rem; + font-size: small; +} + +.footnotes { + font-size: small; +} + +.footnote-link { + color: var(--text-a); +} + +.footnote-link:hover { + text-decoration: none; +} + +.footnote-backref { + color: var(--text-muted); + margin-left: 0.2rem; +} + +/*---------------------------------------------------------------- +TOGGLE SWITCHES +----------------------------------------------------------------*/ + +.checkbox-container { + background-color: var(--discord-grey-toggle); + border: none; + box-shadow: none; + width: 40px; + height: 24px; + -webkit-transition: all .17s; + transition: all .17s ease; +} + +.checkbox-container.is-enabled { + background-color: var(--interactive-accent); +} + +.checkbox-container::before, +.checkbox-container::after { + color: var(--discord-grey-toggle); +} + +.checkbox-container::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 20' preserveAspectRatio='xMinYMid meet'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath fill='rgba(114, 118, 125, 1)' d='M5.13231 6.72963L6.7233 5.13864L14.855 13.2704L13.264 14.8614L5.13231 6.72963Z'%3E%3C/path%3E%3Cpath fill='rgba(114, 118, 125, 1)' d='M13.2704 5.13864L14.8614 6.72963L6.72963 14.8614L5.13864 13.2704L13.2704 5.13864Z'%3E%3C/path%3E%3C/svg%3E%3C/svg%3E"); + display: block; + position: absolute; + opacity: 1; + z-index: 1; + transform: translate3d(-7px, 3px, 0); +} + +.checkbox-container.is-enabled::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 44 20' preserveAspectRatio='xMinYMid meet'%3E%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='none'%3E%3Cpath fill='rgba(67, 181, 129, 1)' d='M7.89561 14.8538L6.30462 13.2629L14.3099 5.25755L15.9009 6.84854L7.89561 14.8538Z'%3E%3C/path%3E%3Cpath fill='rgba(67, 181, 129, 1)' d='M4.08643 11.0903L5.67742 9.49929L9.4485 13.2704L7.85751 14.8614L4.08643 11.0903Z'%3E%3C/path%3E%3C/svg%3E%3C/svg%3E"); + transform: translate3d(7px, 3px, 0); +} + +.checkbox-container.is-enabled::after { + transform: translate3d(15px, 0, 0); +} + +.checkbox-container::after { + box-shadow: none !important; + width: 18px; + height: 18px; + transform: translate3d(1px, 0, 0); +} + +/*---------------------------------------------------------------- +TABLES +----------------------------------------------------------------*/ + +th { + font-weight: 800; +} + +thead { + border-top: 2px solid var(--discord-yellow-alt); +} + +table { + border-collapse: collapse; +} + +/*---------------------------------------------------------------- +Preview Mode */ + +.markdown-preview-view table { + margin: 2rem 0; +} + +.markdown-preview-view td, +.markdown-preview-view th { + border: none; +} + +.markdown-preview-view th { + font-family: var(--default-font); + font-weight: bold; +} + +.markdown-preview-view thead > tr { + border-top: 0 !important; +} + +.markdown-preview-view tr { + border-top: 1px solid var(--background-accent); +} + +.markdown-preview-view td, +.markdown-preview-view tr > th { + border-left: 1px solid var(--background-accent); +} + +.markdown-preview-view tr > td:first-of-type, +tr > th:first-of-type { + border-left: 0; +} + +/*---------------------------------------------------------------- +Editor Mode */ + +.CodeMirror pre.HyperMD-table-row { + font-family: var(--font-monospace); + font-size: 100%; + letter-spacing: 0; +} + +.CodeMirror pre.HyperMD-table-row span.cm-formatting-link { + padding: 0; +} + +.cm-s-obsidian pre.HyperMD-table-row.HyperMD-table-row-0 { + margin-top: 0.15rem; +} + +/*---------------------------------------------------------------- +CODEBLOCKS & INLINE CODE +----------------------------------------------------------------*/ + +code, +.cm-inline-code { + padding: 2px 1px; +} + +/*---------------------------------------------------------------- +editor */ + +.cm-s-obsidian span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { + color: var(--markup-code); + font-size: 100%; + background-color: var(--discord-yellow-bg); +} + +.cm-s-obsidian span.cm-inline-code { + color: var(--markup-code); + font-size: 100%; + background-color: var(--discord-yellow-bg); + border-radius: 3px; + padding-top: 4px; + padding-bottom: 1px; +} + +.cm-s-obsidian span.cm-inline-code.cm-inline-code { + margin-left: 0; +} + +span.cm-inline-code.cm-hmd-indented-code, +.cm-s-obsidian span.cm-inline-code.cm-hmd-indented-code { + background-color: unset !important; + color: var(--text-normal); + padding: 0.2rem 0; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code { + border-right-width: 0; + border-top-right-radius: 0; + border-bottom-right-radius: 0; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code + span.cm-inline-code { + border-right: none; + border-left: none; + border-radius: 0; +} + +.cm-s-obsidian span.cm-formatting-code.cm-inline-code + span.cm-inline-code + span.cm-formatting-code.cm-inline-code { + border-left-width: 0; + border-right-width: 1px; + border-radius: 0 3px 3px 0; +} + +.cm-s-obsidian pre.HyperMD-codeblock { + padding: 0 0.5rem; + color: var(--interactive-normal); + font-family: var(--font-monospace); + font-size: 100%; + white-space: pre-wrap; + background-clip: border-box; +} + +.cm-s-obsidian div.HyperMD-codeblock-bg { + background-color: var(--background-code-preview); +} + +.cm-s-obsidian pre.HyperMD-codeblock.HyperMD-codeblock-begin { + border-top-left-radius: 4px; + border-top-right-radius: 4px; + padding-top: 0.5rem; +} + +.cm-s-obsidian pre.HyperMD-codeblock.HyperMD-codeblock-end { + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; +} + +/*---------------------------------------------------------------- +preview */ + +.theme-dark :not(pre) > code[class*="language-"], +.theme-dark pre[class*="language-"] { + background: var(--background-code-preview); + text-shadow: unset !important; + padding: 6px 10px; + margin: 1.5rem 0; +} + +.markdown-preview-view pre { + background-color: var(--background-code-preview); + margin: 2rem 0; +} + +.markdown-preview-view code { + text-shadow: unset !important; + color: var(--markup-code) !important; + background-color: var(--discord-yellow-bg); + font-size: 100%; + padding-top: 4px; + padding-bottom: 1px; +} + +.markdown-preview-view pre code { + color: var(--text-normal) !important; + background-color: unset !important; + font-size: 100%; +} + +pre.frontmatter[class*="language-"] { + background-color: transparent; + text-shadow: unset !important; + color: var(--text-normal) !important; + padding: 0; + margin: 0 0 1.5rem 0; + line-height: 20px; +} + +/*---------------------------------------------------------------- +frontmatter */ + +.markdown-preview-view pre code.language-yaml, +.markdown-preview-view pre code.language-yaml span.token { + color: var(--text-muted) !important; +} + +.frontmatter-container { + background-color: var(--background-code-preview); + border: 0; + margin: 0 0 1.5rem 0; +} + +.frontmatter-container .frontmatter-section { + margin: 0; +} + +.frontmatter-container .frontmatter-container-header { + border-bottom: 0; +} + +.frontmatter-container .frontmatter-collapse-indicator { + margin-top: -1px; +} + +.frontmatter-container .frontmatter-section-label { + text-transform: lowercase; + display: inline-flex; + font-size: 0.8125rem; +} + +.frontmatter-container .frontmatter-section-label::after { + content: ':'; + display: inline-block; +} + +.frontmatter-container .tag, +.frontmatter-container .frontmatter-alias { + background-color: var(--background-code-preview); + border-radius: 3px !important; + margin: 0 4px; +} + +.frontmatter-container a.tag { + padding: 0 4px !important; +} + +.frontmatter-container .tag:hover { + border: 1px solid transparent; +} + +.frontmatter-container .frontmatter-alias { + padding: 1px 4px !important; +} + +.cm-s-obsidian .cm-hmd-frontmatter { + font-size: 0.8125rem; +} + +/*---------------------------------------------------------------- +MODALS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Settings Modal */ + +.modal.mod-settings { + width: 100vw; + max-width: 100%; +} + +.modal:not(.mod-settings) { + -webkit-box-shadow: var(--elevation-stroke), var(--elevation-high); + box-shadow: var(--elevation-stroke), var(--elevation-high); + padding: 0; + border: 0 !important; +} + +.modal:not(.mod-settings) .modal-content { + padding: 30px 50px; + margin-top: 0; +} + +.modal:not(.mod-settings) .modal-title { + font-size: 22px; + line-height: 36px; + padding: 1rem 2rem; + background-color: var(--background-secondary-alt); + border-top-left-radius: 4px; + border-top-right-radius: 4px; +} + +.modal.mod-settings, +.modal.mod-settings .vertical-tab-content-container, +.modal.mod-settings .vertical-tab-header { + height: 100vh; + max-height: 100%; +} + +.modal.mod-settings .modal-close-button { + display: flex; + -webkit-box-pack: center; + -ms-flex-pack: center; + justify-content: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + -webkit-box-flex: 0; + -ms-flex: 0 0 36px; + flex: 0 0 36px; + border-width: 2px; + border-style: solid; + border-radius: 50%; + width: 36px; + height: 36px; + padding-top: 2px; + top: 3.75rem; + right: 11vw; + content: none !important; +} + +.modal.mod-settings .modal-close-button:hover { + background-color: rgba(114, 118, 125, .3); +} + +.modal.mod-settings .modal-close-button::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' width='18' height='18' viewBox='0 0 24 24'%3E%3Cpath fill='%23dcddde' d='M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z'%3E%3C/path%3E%3C/svg%3E"); +} + +.modal.mod-settings .modal-close-button::after { + position: absolute; + content: 'ESC'; + font-weight: 600; + font-size: 13px; + text-align: right; + width: 36px; + height: 36px; + margin-top: 4.75rem; + margin-left: -1rem; + cursor: default; + pointer-events: none; +} + +.horizontal-tab-content, +.vertical-tab-content { + background-color: var(--background-primary); + padding: 3.75rem 0 5rem 2.5rem; +} + +.vertical-tabs-container { + padding: 0; +} + +.modal.mod-settings .vertical-tab-header { + padding-top: 2.5rem; + + --scrollbar-thin-thumb: transparent; + + flex: 1 0 auto; + display: grid; + grid-template-rows: min-content; + -webkit-box-flex: 1; + -webkit-box-pack: end; + justify-content: flex-end; + -webkit-box-orient: horizontal; + -webkit-box-direction: normal; + -ms-flex-direction: row; + flex-direction: row; + -ms-flex-pack: end; + -webkit-box-align: start; + -ms-flex-align: start; + align-items: flex-start; +} + +.modal.mod-settings .vertical-tab-header:hover { + --scrollbar-thin-thumb: unset; +} + +.modal.mod-settings .setting-item { + margin-right: 17vw; +} + +.modal.mod-settings .vertical-tab-content > div:not(.setting-item):not(.plugin-list-plugins):not(.loader-cube):not(.hotkey-settings-container) { + margin-right: 17vw; +} + +.modal.mod-settings .setting-editor-extra-setting-button { + margin-right: 1rem; +} + +.modal.mod-settings .vertical-tab-content-container { + background-color: var(--background-primary); + padding: 0; + flex: 1 1 50rem; +} + +.vertical-tab-header { + background-color: var(--background-secondary); +} + +.horizontal-tab-nav-item.is-active, +.vertical-tab-nav-item.is-active { + color: var(--interactive-active); + background-color: var(--background-modifier-active); +} + +.horizontal-tab-nav-item:hover, +.vertical-tab-nav-item:hover { + color: var(--interactive-hover); + background-color: var(--background-modifier-hover); +} + +.horizontal-tab-nav-item, +.vertical-tab-nav-item { + background-color: var(--background-secondary); + letter-spacing: 0; + padding: 6px 6px 6px 24px; + margin: 0 10px; + color: var(--interactive-normal); + border-radius: 3px; +} + +.setting-item { + border-top: thin solid var(--background-modifier-accent); +} + +.setting-item-control button { + padding: 5px 16px; +} + +.setting-hotkey { + min-height: unset; + padding: 0 0 0 10px; +} + +.setting-delete-hotkey { + line-height: unset; + top: 0; + right: 0; + height: unset; + border-radius: 0; + margin-left: 5px; +} + +.setting-add-hotkey-button:hover, +.setting-restore-hotkey-button:hover { + background-color: unset; +} + +.hotkey-list-container { + padding-left: 2px; + padding-right: 0; +} + +.community-theme-filters-container, +.hotkey-search-container { + padding: 0 10px 30px 0; +} + +.modal.mod-settings button { + margin: 0; +} + +/*---------------------------------------------------------------- +Document Search */ + +.document-search-container { + background-color: var(--background-primary); + padding-top: 10px; + height: 50px; +} + +.document-search-button { + background-color: var(--discord-dark) !important; + color: var(--text-muted) !important; +} + +.document-search-button:hover { + background-color: var(--discord-dark-hover) !important; + color: var(--text-normal) !important; +} + +.document-search-close-button { + color: var(--discord-dark); +} + +.document-replace-input { + margin-right: 8px; +} + +.document-replace-buttons { + margin-right: 4px; +} + +.document-search-container.mod-replace-mode { + height: 90px; +} + +/*---------------------------------------------------------------- +Modal Confirmations */ + +.modal-button-container { + margin-top: 0; + margin-bottom: 1.5rem; +} + +/*---------------------------------------------------------------- +Prompts - Discord-like */ + +.prompt { + background-color: var(--background-secondary); + border-radius: 8px; + padding: 1.25rem 1.25rem 0.75rem 1.25rem; +} + +input.prompt-input::placeholder { + color: var(--text-normal); + font-weight: 400; +} + +input.prompt-input::-webkit-input-placeholder { + color: #ffffff4d; + font-weight: 400; +} + +input.prompt-input::-ms-input-placeholder { + color: var(--text-normal); + font-weight: 400; +} + +input.prompt-input { + position: relative; + z-index: 1; + -webkit-box-flex: 0; + -ms-flex: 0 0 auto; + flex: 0 0 auto; + display: block; + padding: 0 12px; + font-size: 21px; + border-radius: 5px; + border: none; + height: 70px; + line-height: 70px; + background-color: var(--text-muted) !important; + color: var(--text-on-accent); + -webkit-box-shadow: var(--elevation-high); + box-shadow: var(--elevation-high); +} + +input.prompt-input:focus-within { + color: var(--text-on-accent); +} + +.prompt-results { + margin-right: -12px; +} + +.prompt-results .suggestion-item { + color: var(--interactive-normal); + padding: 0 10px; + line-height: 2rem; + font-weight: 500; + border-radius: 3px; + width: calc(100% - 12px); +} + +.prompt-results .suggestion-item.is-selected, +.prompt-results .suggestion-item:hover { + background-color: var(--background-modifier-selected); +} + +.prompt-results .suggestion-hotkey { + border-color: transparent; + background-color: transparent; + border-radius: 0; + padding-right: 20px; +} + +.prompt-results .suggestion-item.is-selected .suggestion-hotkey, +.prompt-results .suggestion-item:hover .suggestion-hotkey { + margin-right: -12px; +} + +.suggestion-container .prompt-instructions { + padding: 0.625rem; +} + +.prompt-instructions { + padding: 0.625rem 0.625rem 0 0.625rem; + border-top: 1px solid var(--background-modifier-accent); + opacity: 1; + color: var(--text-on-accent); + font-size: 11px; + line-height: 16px; +} + +.prompt-instruction span { + opacity: 0.6; +} + +.prompt-instruction:first-of-type::before { + content: 'tips:'; + text-transform: uppercase; + color: var(--interactive-accent); + margin-right: 0.5rem; + font-weight: 600; +} + +.prompt-instruction-command { + font-size: 11px; +} + +/*---------------------------------------------------------------- +Community plugins panel */ + +.community-plugin-details { + font-size: 0.875rem; + line-height: 1.65; +} + +.community-plugin-search { + background-color: var(--background-secondary); + padding: 20px 0 0 0; +} + +.modal-content.community-plugin { + padding: 0 0 50px 0 !important; +} + +.community-plugin-readme { + overflow-x: hidden; + padding: 40px 30px 20px 30px; +} + +.community-plugin-readme img { + margin: unset !important; +} + +.community-plugin-search .setting-item-info { + display: none; +} + +.community-plugin-search .search-input-container { + width: 70%; +} + +.flair { + padding: 0 4px; +} + +/*---------------------------------------------------------------- +Community themes panel */ + +.community-theme-filters-container { + padding: 10px 30px 30px 0; + width: fit-content !important; +} + +.community-theme { + padding: 10px 20px 20px 0; +} + +.community-theme-search-container { + display: inline-block; + margin-right: 2rem; +} + +.community-theme-list { + margin-top: 1rem; + justify-content: flex-start; +} + +.community-theme-mode-toggle-label { + bottom: 6px; +} + +.community-theme-container button { + margin-right: 8px; +} + +.community-theme a { + vertical-align: middle; +} + +.modal.mod-community-theme { + max-width: 56rem; +} + +/*---------------------------------------------------------------- +BUTTONS +----------------------------------------------------------------*/ + +button { +} + +button.mod-cta { + background-color: var(--discord-blue); + color: #fff; + font-size: 0.875rem; + font-weight: 400; +} + +button.mod-cta:hover { + background-color: var(--discord-blue-hover); +} + +button:not(.mod-cta):not(.mod-warning), +.modal button:not(.mod-cta):not(.mod-warning) { + background-color: var(--discord-grey); + color: white; +} + +button:not(.mod-cta):not(.mod-warning):hover { + background-color: var(--discord-grey-hover); +} + +button.mod-cta a { + font-family: var(--default-font); +} + +button.mod-cta a:hover { + text-decoration: none; + color: inherit; +} + +.modal.mod-settings a > button { + margin-right: 8px; +} + +.modal-close-button::before { + content: none; +} + +.modal-close-button { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' width='18' height='18' viewBox='0 0 24 24'%3E%3Cpath fill='%238D9196' d='M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z'%3E%3C/path%3E%3C/svg%3E"); +} + +.search-input-clear-button { + top: 6px; +} + +.search-input-clear-button::before { + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='%238D9196' d='M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z'%3E%3C/path%3E%3C/svg%3E"); +} + +.clickable-icon[aria-label="Delete workspace"] { + margin-top: 4px; +} + +/*---------------------------------------------------------------- +GRAPH +----------------------------------------------------------------*/ + +.theme-dark .graph-controls { + background-color: var(--background-tertiary); + border: none; +} + +.theme-dark .graph-view.color-line { + color: var(--graph-line); + opacity: 0.7; +} + +.theme-dark .graph-view.color-line-highlight { + color: var(--graph-line-highlight); +} + +.theme-dark .graph-view.color-fill { + color: var(--graph-circle-fill); + opacity: 0.9; +} + +.theme-dark .graph-view.color-fill-highlight { + color: var(--graph-circle-fill-highlight); +} + +.theme-dark .graph-view.color-circle { + color: var(--graph-circle-outline); +} + +/*---------------------------------------------------------------- +Graph filters */ + +.theme-dark .graph-view.color-fill-tag { + color: var(--graph-fill-tag); +} + +.theme-dark .graph-view.color-fill-attachment { + color: var(--graph-fill-attachment); +} + +.theme-dark .graph-view.color-fill-unresolved { + color: var(--graph-circle-fill-unresolved); + opacity: 1; +} + +.theme-dark .graph-view.color-arrow { + color: var(--graph-arrow); +} + +/*---------------------------------------------------------------- +Graph controls */ + +.graph-control-search-button { + background-color: transparent !important; + opacity: 0.7; +} + +.graph-control-search-button:hover { + opacity: 1; +} + +.mod-root .graph-controls { + top: 20px; + left: 30px; +} + +.graph-controls .setting-item { + border: 0; +} + +.graph-control-section:not(:last-child) .tree-item-children { + border-bottom: thin solid var(--background-modifier-accent); +} + +.graph-control-section:not(:last-child) .tree-item-children > .setting-item:last-child { + padding-bottom: 20px; +} + +.graph-controls .setting-item.mod-search-setting .setting-item-control .search-input-container { + width: 100%; +} + +.graph-controls .clickable-icon[aria-label="Delete group"] > svg { + margin-top: -2px; + content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' aria-hidden='true' width='16' height='16' viewBox='0 0 24 24'%3E%3Cpath fill='%238D9196' d='M18.4 4L12 10.4L5.6 4L4 5.6L10.4 12L4 18.4L5.6 20L12 13.6L18.4 20L20 18.4L13.6 12L20 5.6L18.4 4Z'%3E%3C/path%3E%3C/svg%3E") !important; +} + +.graph-controls .graph-color-button-container { + margin: 15px 0 20px 0; + text-align: center; +} + +.graph-controls .graph-color-button-container > button { + padding: 1px 6px; + font-size: 0.75rem; +} + +/*---------------------------------------------------------------- +FOLDING (credits to @mgmeyers for svg icons) +----------------------------------------------------------------*/ + +.markdown-preview-view .collapse-indicator { + position: relative; + cursor: pointer; + margin: 0; + float: none; + padding-left: 0; + display: inline-block; + line-height: inherit; + font-size: unset; + width: 0; + height: 0.5em; +} + +.markdown-preview-view .collapse-indicator > svg { + display: none; +} + +.markdown-preview-view .collapse-indicator::before { + position: absolute; + left: -2.5rem; + top: calc(-0.5em - 3px); +} + +.markdown-preview-view .heading-collapse-indicator { + margin-left: -2px; + padding: 0; +} + +.markdown-preview-view .heading-collapse-indicator::before { + left: -2rem; +} + +.markdown-preview-view .frontmatter-collapse-indicator::before { + left: -2.9rem; +} + +.markdown-preview-view .collapse-indicator::before, +.CodeMirror-foldgutter-open::after { + display: block; + width: 18px; + opacity: 0.3; + content: url('data:image/svg+xml; utf8, '); +} + +.theme-dark .markdown-preview-view .collapse-indicator::before, +.theme-dark .CodeMirror-foldgutter-open::after { + content: url('data:image/svg+xml; utf8, '); +} + +.theme-dark .markdown-preview-view .collapse-indicator::before { + margin-left: 2px; +} + +.theme-dark .markdown-preview-view ul li .collapse-indicator::before { + margin-left: calc(1rem - var(--font-size-notes) + 0.125rem); + margin-top: 2px; +} + +.theme-dark .markdown-preview-view ol li .collapse-indicator::before { + margin-left: calc(1rem - var(--font-size-notes)); + margin-top: 2px; +} + +.theme-dark .markdown-preview-view ul.contains-task-list li .collapse-indicator::before { + margin-left: 18px; + margin-top: 0; +} + +.markdown-preview-view .is-collapsed .collapse-indicator::before, +.CodeMirror-foldgutter-folded::after { + display: block; + width: 18px; + /*height: 18px;*/ + opacity: 0.3; + content: url('data:image/svg+xml; utf8, '); +} + +.theme-dark .markdown-preview-view .is-collapsed .collapse-indicator::before, +.theme-dark .CodeMirror-foldgutter-folded::after { + content: url('data:image/svg+xml; utf8, '); +} + +.CodeMirror-gutter-wrapper { + padding: 0; + width: 18px; + left: -2rem !important; + display: flex; +} + +.CodeMirror-gutter-elt { + width: unset !important; + position: static; + height: 100%; +} + +.CodeMirror-foldgutter-open, +.CodeMirror-foldgutter-folded { + color: var(--text-faint); + display: flex; + height: 100%; + align-items: center; + transition: color 100ms ease; +} + +.cm-s-obsidian .CodeMirror-gutters { + width: 18px; + left: 8px !important; + padding-right: 0; + transform: translateX(2rem); +} + +.CodeMirror-foldgutter { + width: 18px; +} + +/*---------------------------------------------------------------- +line numbers */ + +.CodeMirror-linenumbers { + margin-left: -26px; +} + +.cm-s-obsidian .CodeMirror-linenumber { + width: 18px !important; + min-width: 18px !important; + position: absolute; + padding: 0; + display: flex; + justify-content: flex-end; + font-feature-settings: normal; + font-size: 0.75rem; + font-weight: 500; + color: var(--text-linenumber); + margin-left: -1.5rem; + left: 0 !important; +} + +.cm-s-obsidian .CodeMirror-activeline-gutter > .CodeMirror-linenumber { + color: var(--text-linenumber-active); +} + +/*---------------------------------------------------------------- +EMBEDS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Seamless notes transclusions */ + +.markdown-preview-view .markdown-embed { + margin: 2rem 0 0 0 !important; + padding: 0 !important; + border-top: 0 !important; + border-bottom: 0 !important; +} + +.markdown-preview-view .markdown-embed-content { + max-height: none !important; +} + +.markdown-embed-content .markdown-preview-section { + min-height: unset !important; +} + +.markdown-embed-content .markdown-preview-section > div { + padding-left: 0; + padding-right: 0; +} + +/* Hide frontmatters in embeds */ +.markdown-preview-view .markdown-embed-content .frontmatter { + display: none; +} + +.markdown-embed-title, +.internal-embed .markdown-preview-section { + max-width: 100%; +} + +.markdown-embed-title { + display: none !important; +} + +.markdown-preview-view .markdown-embed-content > .markdown-preview-view { + max-height: none !important; +} + +.markdown-embed .markdown-preview-view { + padding: 0 !important; +} + +.file-embed-link svg, +.markdown-embed-link svg { + width: 16px; + opacity: 0; +} + +.markdown-embed:hover .file-embed-link svg, +.markdown-embed:hover .markdown-embed-link svg { + opacity: 1; +} + +/*---------------------------------------------------------------- +Audio embed */ + +audio, +.theme-dark audio { + filter: unset !important; +} + +.theme-dark audio::-webkit-media-controls-enclosure { + filter: sepia(10%) contrast(90%) invert(90%) !important; + opacity: 0.8; + border-radius: 6px; + height: 20px; +} + +audio::-webkit-media-controls-enclosure { + filter: sepia(10%) contrast(90%) invert(90%) !important; + opacity: 0.8; + border-radius: 6px; + height: 20px; +} + +.markdown-preview-view img:not([width]), +.markdown-preview-view audio, +.markdown-preview-view video { + margin: 0 auto; +} + +/*---------------------------------------------------------------- +Internal Queries */ + +.markdown-preview-view .internal-query.is-embed { + border-top: 0; + border-bottom: 0; + background-color: var(--background-code-preview); + border-radius: 4px; + cursor: default !important; +} + +.markdown-preview-view .internal-query.is-embed .internal-query-header-title::before, +.markdown-preview-view .internal-query.is-embed .internal-query-header-title::after { + content: ""; +} + +/* Seamless internal queries - no scrollbar */ +.markdown-preview-view .internal-query.is-embed .search-results-children { + max-height: none !important; + padding: 0; +} + +.internal-query .search-result-file-matches { + margin-top: 10px; + margin-bottom: 0; + padding-bottom: 0; +} + +.internal-query .search-result-file-title { + background-color: transparent; + opacity: 1; +} + +.internal-query .search-result-file-title:hover { + color: var(--text-a-hover) !important; + opacity: 1; +} + +.internal-query .tree-item-self.is-clickable:hover { + background-color: transparent; +} + +.internal-query .tree-item.search-result { + padding: 10px; +} + +.internal-query .tree-item.search-result.is-collapsed:hover { + background-color: var(--background-modifier-border); + cursor: pointer; +} + +.internal-query .search-result-file-matched-text { + padding: 2px; + border-radius: 2px; +} + +.internal-query .search-result-file-match { + opacity: 1; + padding: 6px 0 6px 10px !important; +} + +.internal-query .search-result-file-match:hover { + background-color: var(--background-modifier-cover); +} + +.internal-query .search-result-file-match::after { + background-color: transparent; +} + +/*---------------------------------------------------------------- +RELATIONSHIP LINES +----------------------------------------------------------------*/ + +body.discordian-theme.discordian-rel-preview .markdown-preview-view ul ul, +body:not(.discordian-theme) .markdown-preview-view ul ul { + position: relative; +} + +body.discordian-theme.discordian-rel-preview .markdown-preview-view ul ul::before, +body:not(.discordian-theme) .markdown-preview-view ul ul::before { + content: ""; + border-left: 1px solid var(--text-muted); + opacity: 0.2; + position: absolute; + margin-left: -0.8em; + left: 0; + top: 0; + bottom: 0; +} + +body.discordian-theme.discordian-rel-preview .markdown-preview-view ul.contains-task-list ul::before, +body:not(.discordian-theme) .markdown-preview-view ul.contains-task-list ul::before { + left: -0.2em; + top: 0.3em; + bottom: -0.3em; +} + +/*---------------------------------------------------------------- +SYNTAX HIGHLIGHTER COLORS +----------------------------------------------------------------*/ + +.theme-dark { + --syntax-default: rgb(191, 193, 194); + --syntax-red: rgb(224, 108, 117); + --syntax-green: rgb(152, 195, 121); + --syntax-yellow: rgb(209, 154, 102); + --syntax-blue: rgb(86, 156, 214); + --syntax-teal: rgb(86, 182, 194); + --syntax-purple: rgb(198, 120, 221); + --syntax-grey: rgb(112, 128, 144); +} + +.theme-dark .token.property, +.theme-dark .token.tag, +.theme-dark .token.constant, +.theme-dark .token.symbol, +.theme-dark .token.deleted { + color: var(--syntax-red); +} + +.theme-dark .token.selector, +.theme-dark .token.attr-name, +.theme-dark .token.string, +.theme-dark .token.char, +.theme-dark .token.builtin, +.theme-dark .token.inserted { + color: var(--syntax-green); +} + +.theme-dark .token.atrule, +.theme-dark .token.attr-value, +.theme-dark .token.function, +.theme-dark .token.class-name { + color: var(--syntax-yellow); +} + +.theme-dark .token.punctuation { + color: var(--text-normal); +} + +.theme-dark .token.keyword { + color: var(--syntax-blue); +} + +.theme-dark .token.operator, +.theme-dark .token.entity, +.theme-dark .token.url, +.theme-dark .language-css .token.string, +.theme-dark .style .token.string, +.theme-dark .token.variable { + color: var(--syntax-teal); +} + +.theme-dark .token.boolean, +.theme-dark .token.number, +.theme-dark .language-css .token.unit { + color: var(--syntax-purple); +} + +.theme-dark .token.comment, +.theme-dark .token.prolog, +.theme-dark .token.doctype, +.theme-dark .token.cdata { + color: var(--syntax-grey); +} + +/*---------------------------------------------------------------- +IMAGES RELATED ADD-ONS +----------------------------------------------------------------*/ + +/*---------------------------------------------------------------- +Floating images with captions by @radekkozak */ + +.markdown-preview-view .image-embed:not([src$="left"]):not([src$="right"]), +.markdown-preview-view .image-embed[src$="center"] { + clear: both; + margin: 1rem auto; + width: fit-content; +} + +.markdown-preview-view.img-captions .image-embed:not([src$="left"]):not([src$="right"])::after { + content: attr(alt); + padding: 0 1rem 0 1rem; + margin-top: 1rem; + display: block; + caption-side: bottom; + text-align: center; + font-size: 0.8125rem; +} + +.markdown-preview-view .image-embed[src$="left"] { + position: relative; + float: left; + margin-right: 2rem; + margin-bottom: 1rem; + margin-top: 1rem; + clear: both; + display: table; + width: fit-content; +} + +.markdown-preview-view.img-captions .image-embed[src$="left"]::after { + content: attr(alt); + padding: 0 1rem 0 1rem; + margin-top: 1rem; + display: table-caption; + caption-side: bottom; + text-align: center; + font-size: 0.8125rem; +} + +.markdown-preview-view .image-embed[src$="right"] { + position: relative; + float: right; + margin-top: 1rem; + margin-left: 2rem; + margin-bottom: 2rem; + clear: both; + display: table; + width: fit-content; +} + +.markdown-preview-view.img-captions .image-embed[src$="right"]::after { + content: attr(alt); + padding: 0 1rem 0 1rem; + margin-top: 1rem; + display: table-caption; + caption-side: bottom; + text-align: center; + font-size: 0.8125rem; +} + +/*---------------------------------------------------------------- +Modified masonry-like gallery (image grids) +Original credits to @kepano */ + +.img-grid .markdown-preview-section > div > p > .image-embed[alt*="."] { + padding: 0 0.75rem 0 0.75rem; +} + +.img-grid .markdown-preview-section > div > p > .image-embed[alt*="."]:last-child { + padding-right: 0; +} + +.img-grid .markdown-preview-section > div > p > .image-embed[alt*="."]:first-child { + padding-left: 0; +} + +.img-grid .markdown-preview-section > div hr { + width: 100%; +} + +/* Hotfix by @Lithou (due to Obsidian v0.11.3 changes for grouped images) + +Explanation is this: +When no alt pipe is used by the user, Obsidian will add alt text in the form of "filename.ext" by default. +This rule targets any image embeds with a period in it (BE AWARE) to make image grids possible */ + +.img-grid span.image-embed[alt*="."] { + display: table-cell; +} + +.img-grid img[alt*="."] { + max-height: 33vh; + object-fit: cover; +} + +/*---------------------------------------------------------------- +Image zooms. Credits to @kepano */ + +.view-content img { + max-width: 100%; + cursor: zoom-in; +} + +.view-content img:active { + cursor: zoom-out; + display: block; + z-index: 100; + position: fixed; + max-height: calc(100% + 1px); + max-width: calc(100% - 8rem); + height: calc(100% + 1px); + width: 100%; + object-fit: contain; + margin: -0.5px auto 0; + text-align: center; + top: 50%; + transform: translateY(-50%); + padding: 0; + left: 0; + right: 0; + bottom: 0; + background: transparent; +} + +/*---------------------------------------------------------------- +HIDER PLUGIN v1.0.5 +----------------------------------------------------------------*/ + +.hider-ribbon .workspace-split.mod-left-split .nav-files-container { + margin-left: 0; +} + +.hider-frameless:not(.hider-ribbon):not(.mod-windows) .workspace-split.mod-left-split .workspace-tab-header-container, +.discordian-writer-mode:not(.hider-ribbon):not(.mod-windows) .workspace-split.mod-left-split .workspace-tab-header-container { + padding-left: 24px; +} + +.discordian-writer-mode.hider-ribbon:not(.mod-windows) .mod-left-split .workspace-tab-header-container, +.hider-frameless.hider-ribbon:not(.mod-windows) .mod-left-split .workspace-tab-header-container, +.hider-ribbon:not(.mod-windows) .mod-left-split .workspace-tab-header-container { + padding-left: 54px; +} + +body:not(.mod-windows):not(.discordian-theme).hider-ribbon .mod-left-split .workspace-tab-header-container { + padding-left: 54px !important; +} + +.discordian-writer-mode .workspace-split.mod-left-split > .workspace-tabs { + padding-top: 0 !important; +} + +.hider-frameless .workspace-split.mod-left-split > .workspace-tabs { + padding-top: 0 !important; +} + +body.discordian-theme:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .workspace-leaf:first-of-type:last-of-type .view-header, +body.discordian-theme:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .workspace-leaf:first-of-type .view-header { + padding-left: 0 !important; +} + +.discordian-writer-mode:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.discordian-writer-mode.hider-frameless:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.discordian-writer-mode.discordian-hide-titlebar:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-frameless:not(.plugin-sliding-panes):not(.is-fullscreen):not(.mod-windows).discordian-theme .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-frameless:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 30px !important; + transition: padding-left .15s ease; +} + +.discordian-writer-mode.hider-ribbon:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-frameless.hider-ribbon:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-ribbon.discordian-hide-titlebar:not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +.hider-ribbon.discordian-theme.discordian-hide-titlebar:not(.hider-frameless):not(.is-fullscreen):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 62px !important; + transition: padding-left .15s ease; +} + +.discordian-writer-mode .titlebar, +.hider-frameless .titlebar { + border-bottom: none; +} + +/*---------------------------------------------------------------- +Force-hide titlebar regardless of settings +This is required to make settings modal like in Discord */ + +body:not(.hider-frameless):not(.discordian-writer-mode) .modal-container { + top: 0 !important; + height: 100vh !important; +} + +body.discordian-theme.discordian-writer-mode .modal-container, +body.discordian-theme.hider-frameless .modal-container, +body.discordian-theme.discordian-hide-titlebar .modal-container { + top: 0 !important; + height: 100vh !important; +} + +body.discordian-theme:not(.discordian-hide-titlebar):not(.hider-frameless):not(.discordian-writer-mode) .modal-container { + top: -22px !important; + height: 100vh !important; +} + +body.discordian-theme.is-fullscreen .modal-container { + top: 0 !important; + height: 100vh !important; +} + +/*---------------------------------------------------------------- +CALENDAR PLUGIN v1.4.11 +----------------------------------------------------------------*/ + +.workspace-leaf-content[data-type='calendar'] .view-content { + padding: 5px 0 0 0; +} + +#calendar-container { + padding: 5px 15px; + font-family: var(--font-editor); + font-size: 15px; + + --color-background-day-empty: var(--background-secondary-alt); + --color-background-day-active: var(--background-tertiary); + --color-background-day-hover: var(--background-tertiary); + --color-dot: var(--text-faint); + --color-text-title: var(--text-normal); + --color-text-heading: var(--text-muted); + --color-text-day: var(--text-normal); + --color-text-today: var(--text-accent); + --color-arrow: var(--text-faint); + --color-arrow-hover: var(--text-normal); + --interactive-hover: var(--background-secondary-alt); + --interactive-accent: var(--discord-blue-hover); + --interactive-accent-hover: var(--discord-blue-hover); +} + +#calendar-container .table { + border-collapse: separate; + table-layout: fixed; +} + +#calendar-container h3 { + font-weight: 400; + font-size: 16px; +} + +.mod-root #calendar-container { + width: var(--line-width); + max-width: var(--max-width); + margin: 0 auto; + padding: 0; +} + +#calendar-container .arrow { + color: var(--text-faint); + cursor: var(--cursor); +} + +#calendar-container tr th { + padding: 4px 0; + font-weight: 500; +} + +#calendar-container tr td { + padding: 4px 0 4px; + border-radius: 4px; + border: 2px solid transparent; + transition: none; +} + +#calendar-container .year { + color: var(--discord-green) !important; +} + +#calendar-container .day { + transition: none !important; + cursor: var(--cursor); +} + +#calendar-container .arrow:hover > svg { + color: var(--color-arrow-hover) !important; +} + +#calendar-container .reset-button:hover { + color: var(--color-text-title) !important; +} + +/*---------------------------------------------------------------- +Andy's Mode Sliding Panes v3.2.1 (death_au's plugin) +----------------------------------------------------------------*/ + +/* fill title container for better visual separation */ +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf > .workspace-leaf-content > .view-header { + background-color: var(--background-secondary); + border-right: 0 !important; + border-left: 0 !important; +} + +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header .app-container { + border-top: solid 1px var(--background-tertiary) !important; +} + +body.plugin-sliding-panes .app-container::before { + content: none; +} + +body.plugin-sliding-panes .workspace > .mod-root > .workspace-leaf > .workspace-leaf-content > .view-header { + border-left: 0; + box-shadow: none !important; +} + +body.plugin-sliding-panes .view-header::before, +body.plugin-sliding-panes .workspace-leaf.mod-active .view-header::before { + display: none; +} + +/* remove long-title-obscuring gradient in normal mode */ +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf > .workspace-leaf-content > .view-header > .view-header-title-container::before, +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf.mod-active > .workspace-leaf-content > .view-header > .view-header-title-container::before { + content: none; +} + +/* fix the long-title-obscuring gradient for andy mode */ +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf > .workspace-leaf-content > .view-header > .view-header-title-container::after, +body.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf.mod-active > .workspace-leaf-content > .view-header > .view-header-title-container::after { + content: ' '; + position: absolute; + bottom: 100px !important; + top: unset; + right: 0; + width: 26px; + height: 26px; + background: linear-gradient(to bottom, transparent, var(--background-secondary)) !important; +} + +body.plugin-sliding-panes .mod-horizontal .workspace-leaf { + box-shadow: none !important; +} + +body.plugin-sliding-panes:not(.discordian-writer) .workspace-split.mod-left-split { + border-right: 1px solid var(--background-tertiary); +} + +body.plugin-sliding-panes:not(.discordian-writer) .workspace-split.mod-right-split { + border-left: 1px solid var(--background-tertiary); +} + +body.plugin-sliding-panes:not(.plugin-sliding-panes-rotate-header) .workspace > .mod-root > .workspace-leaf.mod-active > .workspace-leaf-content > .view-header { + border-right: none; + border-bottom: 2px solid var(--discord-yellow-light); +} + +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf.mod-active > .workspace-leaf-content > .view-header { + border-right: 2px solid var(--discord-yellow-light) !important; +} + +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header .workspace > .mod-root > .workspace-leaf.mod-active:first-of-type:last-of-type > .workspace-leaf-content > .view-header { + border-right: 0 !important; +} + +body.plugin-sliding-panes .view-header::after { + content: none; +} + +body.plugin-sliding-panes.hider-frameless .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 0 !important; +} + +body.plugin-sliding-panes-rotate-header .workspace > .mod-root .view-header-title-container, +body.plugin-sliding-panes-rotate-header.plugin-sliding-panes-header-alt .workspace > .mod-root .view-header-title { + margin-top: 0; +} + +body.plugin-sliding-panes-rotate-header .workspace > .mod-root .view-header-title-container { + margin-left: 0; + padding-top: 0; +} + +body.plugin-sliding-panes-rotate-header .view-header-title-container { + position: static; +} + +body.plugin-sliding-panes-rotate-header .workspace > .mod-root .view-actions { + padding-left: 0; + padding-bottom: 20px; + margin-left: 0; + bottom: 0; +} + +body.plugin-sliding-panes.is-fullscreen.plugin-sliding-panes-rotate-header .view-header-icon { + padding-top: 8px; +} + +body.plugin-sliding-panes.hider-frameless.hider-ribbon .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +body.plugin-sliding-panes.hider-ribbon .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 0 !important; +} + +body.plugin-sliding-panes.hider-ribbon:not(.is-fullscreen):not(.hider-ribbon) .mod-left-split .workspace-tab-header-container { + padding-left: 54px !important; +} + +/* or workspace-leaf:first-of-type if only padding first header under OSX icons */ +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header:not(.is-fullscreen):not(.mod-windows).hider-frameless .mod-left-split.is-collapsed + div.mod-root > .workspace-leaf:first-of-type > .workspace-leaf-content > .view-header, +body.plugin-sliding-panes.plugin-sliding-panes-rotate-header:not(.is-fullscreen):not(.mod-windows).discordian-hide-titlebar .mod-left-split.is-collapsed + div.mod-root > .workspace-leaf:first-of-type > .workspace-leaf-content > .view-header { + padding-top: 18px; + /* transition: padding .1s ease;*/ +} + +body.discordian-hide-titlebar:not(.is-fullscreen):not(.hider-ribbon):not(.plugin-sliding-panes):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +body.hider-frameless:not(.is-fullscreen):not(.hider-ribbon):not(.plugin-sliding-panes):not(.mod-windows).discordian-theme .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header, +body.discordian-hide-titlebar:not(.is-fullscreen):not(.hider-ribbon):not(.plugin-sliding-panes-rotate-header):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 30px !important; + transition: padding .15s ease; +} + +body.plugin-sliding-panes.hider-frameless:not(.hider-ribbon):not(.plugin-sliding-panes-rotate-header):not(.is-fullscreen):not(.mod-windows) .mod-left-split.is-collapsed + div.mod-root .workspace-leaf:first-of-type .view-header { + padding-left: 30px !important; +} + +/*---------------------------------------------------------------- +ADVANCED TABLES v0.11.0 +----------------------------------------------------------------*/ + +.workspace-leaf-content[data-type="advanced-tables-toolbar"] .nav-action-button svg.widget-icon { + width: 20px; +} + +img.emoji { + display: inline-block; +} + +/*---------------------------------------------------------------- +HIDE VAULT */ + +body.discordian-hide-vault .nav-folder.mod-root > .nav-folder-title { + display: none !important; +} + +body.discordian-theme .nav-folder.mod-root > .nav-folder-title { + display: block; +} + +/*---------------------------------------------------------------- +HIDE STATUS BAR */ + +.discordian-hide-statusbar.theme-dark .status-bar { + display: none; +} + +.theme-dark:not(.hider-status):not(.discordian-hide-statusbar):not(.discordian-writer-mode) .status-bar { + display: flex; +} + +/*---------------------------------------------------------------- +HIDE TITLE BAR */ + +body.discordian-hide-titlebar .app-container { + border-top: 0; +} + +body.discordian-hide-titlebar .titlebar { + display: none !important; +} + +body.discordian-hide-titlebar { + padding-top: 0 !important; +} + +body.discordian-hide-titlebar:not(.hider-ribbon):not(.mod-windows) .workspace-split.mod-left-split .workspace-tab-header-container { + padding-left: 24px; +} + +body.discordian-hide-titlebar .workspace-leaf:first-of-type:last-of-type .view-header { + padding-left: 0; +} + +/* unhide */ + +body:not(.discordian-hide-titlebar):not(.hider-frameless):not(.discordian-writer-mode) .titlebar { + display: flex !important; +} + +body.discordian-theme:not(.discordian-hide-titlebar):not(.is-fullscreen):not(.hider-frameless):not(.discordian-writer-mode) { + padding-top: 22px !important; +} + +body.discordian-theme.is-fullscreen .workspace-split.mod-left-split .workspace-tab-header-container { + padding-left: 0; +} + +body.discordian-theme:not(.discordian-hide-titlebar):not(.hider-frameless) .workspace-split.mod-left-split .workspace-tab-header-container { + padding-left: 24px; +} + +/*---------------------------------------------------------------- +PARAGRAPH FOCUS MODE */ + +body.discordian-paragraph-focus .CodeMirror-line { + opacity: var(--paragraph-focus-fade); +} + +body.discordian-paragraph-focus .CodeMirror-activeline .CodeMirror-line { + opacity: 1 !important; +} + +/*---------------------------------------------------------------- +DISCORD ORIGINAL MARKINGS */ + +/* bold */ + +.discordian-original-markings .cm-strong, +.discordian-original-markings strong { + color: var(--text-normal); + font-weight: 600; +} + +.discordian-original-markings .cm-formatting-strong { + color: var(--text-muted); +} + +/* italics */ + +.discordian-original-markings .cm-em, +.discordian-original-markings em { + color: var(--text-normal); + margin-right: 0.1rem; +} + +.discordian-original-markings .cm-formatting-em { + color: var(--text-muted); + font-weight: 600; +} + +/* blockquote */ + +.discordian-original-markings blockquote { + background-color: unset; + color: var(--text-normal) !important; + border-left: 4px solid var(--background-accent) !important; + border-radius: 0 !important; +} + +.discordian-original-markings blockquote::before { + content: none; +} + +.discordian-original-markings .cm-s-obsidian span.cm-formatting-quote.cm-quote { + color: var(--text-muted); +} + +.discordian-original-markings .cm-s-obsidian span.cm-quote { + color: var(--text-normal); +} + +/* inline code in Editor */ + +.discordian-original-markings .markdown-preview-view code, +.discordian-original-markings .cm-s-obsidian span.cm-formatting-code.cm-inline-code, +.discordian-original-markings .cm-s-obsidian span.cm-inline-code:not(.cm-formatting):not(.cm-hmd-indented-code):not(.obsidian-search-match-highlight) { + color: var(--text-normal) !important; + background-color: var(--background-secondary); + padding: .3rem 0 0.1rem 0; + width: auto; + height: auto; + text-indent: 0; + white-space: pre-wrap; +} + +.discordian-original-markings .cm-s-obsidian span.cm-inline-code { + font-size: unset; +} + +.discordian-original-markings .cm-s-obsidian span.cm-formatting-code.cm-inline-code { + color: var(--text-muted) !important; + background-color: var(--background-secondary); + border-radius: 3px 0 0 3px; + font-weight: 600; +} + +/* inline code in Preview */ + +.discordian-original-markings .markdown-preview-view code { + border-radius: 3px; + font-size: 100%; + padding: .3rem .3rem .1rem .3rem !important; +} + +.discordian-original-markings .markdown-preview-view pre code { + font-size: 100%; +} + +/* codeblocks in Editor */ + +.discordian-original-markings .cm-s-obsidian div.HyperMD-codeblock-begin-bg { + border-top: 1px solid var(--background-secondary-alt); +} + +.discordian-original-markings .cm-s-obsidian div.HyperMD-codeblock-bg { + background-color: var(--background-secondary); + border-left: 1px solid var(--background-secondary-alt); + border-right: 1px solid var(--background-secondary-alt); +} + +.discordian-original-markings .cm-s-obsidian div.HyperMD-codeblock-end-bg { + border-bottom: 1px solid var(--background-secondary-alt); +} + +/* codeblocks in Preview */ + +.discordian-original-markings.theme-dark :not(pre) > code[class*="language-"], +.discordian-original-markings.theme-dark pre[class*="language-"] { + background-color: var(--background-secondary); + border: 1px solid var(--background-secondary-alt); +} + +/*---------------------------------------------------------------- +DARK NOTE HEADERS */ + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .view-header::before { + -webkit-box-shadow: var(--elevation-stroke) !important; + box-shadow: var(--elevation-stroke) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .view-header { + background-color: var(--background-secondary) !important; + height: 30px; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header { + background-color: var(--background-secondary) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .workspace-split.mod-root > .workspace-leaf:first-of-type:last-of-type .view-header-title-container::after { + background: linear-gradient(to right, transparent, var(--background-secondary)) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .view-header-title-container::after { + background: linear-gradient(to right, transparent, var(--background-secondary)) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .workspace-leaf.mod-active .view-header { + background-color: var(--background-secondary) !important; +} + +body.discordian-dark-enhance:not(.plugin-sliding-panes):not(.discordian-writer-mode) .workspace-leaf.mod-active .view-header-title-container::after { + background: linear-gradient(to right, transparent, var(--background-secondary)) !important; +} + +/*---------------------------------------------------------------- +FLAT ANDY MODE */ + +body.discordian-flat-andy-mode.plugin-sliding-panes .workspace > .mod-root > .workspace-leaf, +body.discordian-flat-andy-mode.plugin-sliding-panes .workspace-split.mod-vertical > .workspace-leaf { + box-shadow: var(--background-tertiary) -1px 0 !important; +} + +/*---------------------------------------------------------------- +WRITER MODE */ + +body.discordian-writer-mode .mod-left.is-collapsed ~ .mod-root .mod-active .view-header, +body.discordian-writer-mode .mod-right.is-collapsed ~ .mod-root .mod-active .view-header { + border-bottom: 0; +} + +body.discordian-writer-mode .titlebar { + display: none; +} + +body.discordian-writer-mode .workspace-ribbon.mod-right, +body.discordian-writer-mode .workspace-ribbon.mod-left { + transition: border-color 0s ease-in-out 0s, background-color 0s ease-in-out 0s; +} + +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed { + border-color: transparent; + background-color: transparent !important; + transition: border-color 0s ease-in-out 0s, background-color 0s ease-in-out 0s; +} + +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-actions, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed:hover .side-dock-settings { + opacity: 1; + /*transition:opacity 0s ease-in-out;*/ +} + +body.discordian-writer-mode .view-action.is-active { + opacity: 1; +} + +/* view actions */ + +body.discordian-writer-mode .view-actions, +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed ~ .mod-root .view-actions, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-actions, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-actions, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed .side-dock-settings { + opacity: 0; + transition: opacity 0.17s ease-in-out; +} + +.workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-actions, +body.discordian-writer-mode .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header:hover .view-actions, +.workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header:hover .view-actions, +.mod-right.is-collapsed ~ .mod-root .view-header:hover .view-actions { + opacity: 1; + transition: opacity 0.17s ease-in-out; +} + +/* scrollbar */ + +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed ~ .mod-root ::-webkit-scrollbar, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed ~ .mod-root ::-webkit-scrollbar { + width: 0 !important; +} + +/* in Preview Mode - in contrast to Editor Mode - when hiding scrollbar we need to adjust view by its width */ +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed ~ .mod-root > .markdown-preview-view, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed ~ .mod-root > .markdown-preview-view { + margin-left: -8px !important; +} + +.workspace-ribbon:not(.is-collapsed) ~ .mod-root ::-webkit-scrollbar, +body.discordian-writer-mode .workspace-ribbon:not(.is-collapsed) ~ .mod-root ::-webkit-scrollbar, +.workspace-ribbon.mod-left.is-collapsed ~ .mod-root ::-webkit-scrollbar, +.mod-right.is-collapsed ~ .mod-root ::-webkit-scrollbar { + width: 16px; + /*transition:opacity 0.17s ease-in-out;*/ +} + +/* note icon */ + +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-right.is-collapsed ~ .mod-root .view-header .view-header-icon, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header .view-header-icon { + opacity: 0; + transition: opacity 0.17s ease-in-out; +} + +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header .view-header-icon, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header:hover .view-header-icon, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header:hover .view-header-icon, +body.discordian-writer-mode:not(.plugin-sliding-panes) .mod-right.is-collapsed ~ .mod-root .view-header:hover .view-header-icon { + opacity: 1; + transition: opacity 0.17s ease-in-out; +} + +/* note title */ + +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-right.is-collapsed ~ .mod-root .view-header .view-header-title, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header .view-header-title { + opacity: 0; + transition: opacity 0.17s ease-in-out; +} + +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header-title, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header:hover .view-header-title, +body.discordian-writer-mode:not(.plugin-sliding-panes) .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header:hover .view-header-title, +body.discordian-writer-mode:not(.plugin-sliding-panes) .mod-right.is-collapsed ~ .mod-root .view-header:hover .view-header-title { + opacity: 1; + transition: opacity 0.17s ease-in-out; +} + +/* note title bottom shadow */ + +body.discordian-writer-mode .workspace-ribbon.mod-right.is-collapsed ~ .mod-root .view-header::before, +body.discordian-writer-mode .workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header::before { + box-shadow: none !important; +} + +.workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header::before, +body.discordian-writer-mode .workspace-ribbon:not(.is-collapsed) ~ .mod-root .view-header::before, +.workspace-ribbon.mod-left.is-collapsed ~ .mod-root .view-header::before, +.mod-right.is-collapsed ~ .mod-root .view-header::before { + -webkit-box-shadow: var(--elevation-low) !important; + box-shadow: var(--elevation-low) !important; +} + +/* no status bar in writer mode */ +body.discordian-writer-mode .status-bar { + display: none; +} + +/*---------------------------------------------------------------- +PLUGIN STYLES */ + +body.discordian-theme .modal.mod-settings .plugin-description { + margin-right: 17vw; + padding: 0 0 1rem 0; + color: var(--text-faint); +} + +body.discordian-theme .modal.mod-settings .plugin-description p { + margin: 0; + color: var(--text-faint); +} + +body.discordian-theme .modal.mod-settings .plugin-description h3 { + margin-block-start: 0; + margin-block-end: 1rem; + text-align: left; + color: var(--text-normal); +} + +body.discordian-theme .modal.mod-settings .plugin-description ~ h4 { + color: var(--text-header); +} + +body.discordian-theme .modal.mod-settings .plugin-description.separator { + font-size: 2rem; + text-align: center; +} + +.discordian-plugin-setting-disabled { + opacity: 0.5; + pointer-events: none; +}