You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

330 lines
40 KiB

/*
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());
});
};
// src/main.ts
__export(exports, {
default: () => DialoguePlugin
});
var import_obsidian2 = __toModule(require("obsidian"));
// src/constants/dialogueTitleMode.ts
var DialogueTitleMode;
(function(DialogueTitleMode2) {
DialogueTitleMode2["Disabled"] = "disabled";
DialogueTitleMode2["First"] = "first";
DialogueTitleMode2["All"] = "all";
})(DialogueTitleMode || (DialogueTitleMode = {}));
// src/constants/classes.ts
var CLASSES = class {
};
CLASSES.DIALOGUE_WRAPPER = "dialogue-plugin-wrapper";
CLASSES.BLOCK_WRAPPER = "dialogue-plugin-block-wrapper";
CLASSES.MESSAGE_WRAPPER_LEFT = "dialogue-plugin-message-wrapper-left";
CLASSES.MESSAGE_WRAPPER_RIGHT = "dialogue-plugin-message-wrapper-right";
CLASSES.MESSAGE = "dialogue-plugin-message";
CLASSES.MESSAGE_TITLE = "dialogue-plugin-message-title";
CLASSES.MESSAGE_CONTENT = "dialogue-plugin-message-content";
CLASSES.DELIMITER_WRAPPER = "dialogue-plugin-delimiter-wrapper";
CLASSES.DELIMITER = "dialogue-plugin-delimiter";
CLASSES.DELIMITER_DOT = "dialogue-plugin-delimiter-dot";
CLASSES.COMMENT_WRAPPER = "dialogue-plugin-comment-wrapper";
CLASSES.COMMENT = "dialogue-plugin-comment";
// src/components/message.ts
var SIDES = class {
};
SIDES.LEFT = "left";
SIDES.RIGHT = "right";
var Message = class {
constructor(content, side, dialogueSettings) {
this.content = content;
this.side = side;
this.dialogueSettings = dialogueSettings;
this.title = this.side == SIDES.LEFT ? this.dialogueSettings.leftTitle : this.dialogueSettings.rightTitle;
this.renderMessage();
}
renderMessage() {
const messageEl = this.createMessageEl();
if (this.titleShouldRender()) {
messageEl.createDiv({ cls: CLASSES.MESSAGE_TITLE, text: this.title });
}
messageEl.createDiv({ cls: CLASSES.MESSAGE_CONTENT, text: this.content });
}
createMessageEl() {
const sideClass = this.side == SIDES.LEFT ? CLASSES.MESSAGE_WRAPPER_LEFT : CLASSES.MESSAGE_WRAPPER_RIGHT;
const messageWrapperEl = this.dialogueSettings.parent.createDiv({
cls: `${CLASSES.BLOCK_WRAPPER} ${sideClass}`
});
return messageWrapperEl.createDiv({
cls: CLASSES.MESSAGE,
attr: {
style: `max-width: ${this.dialogueSettings.messageMaxWidth};`,
"data-participant-name": this.title,
"data-participant-id": this.dialogueSettings.participants.get(this.title)
}
});
}
titleShouldRender() {
if (this.title.length < 1)
return false;
switch (this.dialogueSettings.titleMode) {
case DialogueTitleMode.Disabled:
return false;
case DialogueTitleMode.All:
return true;
case DialogueTitleMode.First: {
if (this.side == SIDES.LEFT && !this.dialogueSettings.leftTitleRenderedOnce) {
this.dialogueSettings.leftTitleRenderedOnce = true;
return true;
} else if (this.side == SIDES.RIGHT && !this.dialogueSettings.rightTitleRenderedOnce) {
this.dialogueSettings.rightTitleRenderedOnce = true;
return true;
} else {
return false;
}
}
default:
return false;
}
}
};
// src/components/delimiter.ts
var Delimiter = class {
constructor(dialogueSettings) {
this.dialogueSettings = dialogueSettings;
this.renderDelimiter();
}
renderDelimiter() {
const delimiterWrapperEl = this.dialogueSettings.parent.createDiv({
cls: `${CLASSES.BLOCK_WRAPPER} ${CLASSES.DELIMITER_WRAPPER}`
});
const delimiterEl = delimiterWrapperEl.createDiv({ cls: CLASSES.DELIMITER });
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
delimiterEl.createEl("div", { cls: CLASSES.DELIMITER_DOT });
}
};
// src/components/comment.ts
var Comment = class {
constructor(content, dialogueSettings) {
this.content = content;
this.dialogueSettings = dialogueSettings;
this.renderComment();
}
renderComment() {
const commentEl = this.dialogueSettings.parent.createDiv({
cls: `${CLASSES.BLOCK_WRAPPER} ${CLASSES.COMMENT_WRAPPER}`
});
return commentEl.createDiv({
cls: CLASSES.COMMENT,
text: this.content,
attr: {
style: `max-width: ${this.dialogueSettings.commentMaxWidth};`
}
});
}
};
// src/dialogue.ts
var KEYWORDS = class {
};
KEYWORDS.LEFT = "left:";
KEYWORDS.RIGHT = "right:";
KEYWORDS.TITLE_MODE = "titleMode:";
KEYWORDS.MESSAGE_MAX_WIDTH = "messageMaxWidth:";
KEYWORDS.COMMENT_MAX_WIDTH = "commentMaxWidth:";
KEYWORDS.DELIMITER = "delimiter";
KEYWORDS.COMMENT = "#";
KEYWORDS.MESSAGE_LEFT = "<";
KEYWORDS.MESSAGE_RIGHT = ">";
var DialogueRenderer = class {
constructor(src, parent, settings) {
this.src = src;
this.dialogueWrapperEl = parent.createDiv({ cls: CLASSES.DIALOGUE_WRAPPER });
this.dialogueSettings = {
parent: this.dialogueWrapperEl,
leftTitle: settings.defaultLeftTitle,
rightTitle: settings.defaultRightTitle,
titleMode: settings.defaultTitleMode,
messageMaxWidth: settings.defaultMessageMaxWidth,
commentMaxWidth: settings.defaultCommentMaxWidth,
leftTitleRenderedOnce: false,
rightTitleRenderedOnce: false,
participants: new Map()
};
this.renderDialogue();
}
registerParticipant(participant) {
if (!this.dialogueSettings.participants.has(participant)) {
this.dialogueSettings.participants.set(participant, this.dialogueSettings.participants.size + 1);
}
}
renderDialogue() {
const lines = this.src.split(/\r?\n/).map((line) => line.trim()).filter((line) => line.length > 1);
for (const line of lines) {
if (line.startsWith(KEYWORDS.LEFT)) {
this.dialogueSettings.leftTitle = line.substr(KEYWORDS.LEFT.length).trim();
this.dialogueSettings.leftTitleRenderedOnce = false;
} else if (line.startsWith(KEYWORDS.RIGHT)) {
this.dialogueSettings.rightTitle = line.substr(KEYWORDS.RIGHT.length).trim();
this.dialogueSettings.rightTitleRenderedOnce = false;
} else if (line.startsWith(KEYWORDS.TITLE_MODE)) {
const modeName = line.substr(KEYWORDS.TITLE_MODE.length).trim().toLowerCase();
if (Object.values(DialogueTitleMode).some((mode) => mode == modeName)) {
this.dialogueSettings.titleMode = modeName;
}
} else if (line.startsWith(KEYWORDS.MESSAGE_MAX_WIDTH)) {
this.dialogueSettings.messageMaxWidth = line.substr(KEYWORDS.MESSAGE_MAX_WIDTH.length).trim();
} else if (line.startsWith(KEYWORDS.COMMENT_MAX_WIDTH)) {
this.dialogueSettings.commentMaxWidth = line.substr(KEYWORDS.COMMENT_MAX_WIDTH.length).trim();
} else if (line.startsWith(KEYWORDS.DELIMITER)) {
new Delimiter(this.dialogueSettings);
} else if (line.startsWith(KEYWORDS.COMMENT)) {
const content = line.substr(KEYWORDS.COMMENT.length);
new Comment(content, this.dialogueSettings);
} else if (line.startsWith(KEYWORDS.MESSAGE_LEFT)) {
const content = line.substr(KEYWORDS.MESSAGE_LEFT.length);
this.registerParticipant(this.dialogueSettings.leftTitle);
new Message(content, SIDES.LEFT, this.dialogueSettings);
} else if (line.startsWith(KEYWORDS.MESSAGE_RIGHT)) {
const content = line.substr(KEYWORDS.MESSAGE_RIGHT.length);
this.registerParticipant(this.dialogueSettings.rightTitle);
new Message(content, SIDES.RIGHT, this.dialogueSettings);
}
}
}
};
// src/settings.ts
var import_obsidian = __toModule(require("obsidian"));
var DEFAULT_SETTINGS = {
defaultLeftTitle: "",
defaultRightTitle: "",
defaultTitleMode: DialogueTitleMode.First,
defaultMessageMaxWidth: "60%",
defaultCommentMaxWidth: "60%"
};
var DialogueSettingTab = class extends import_obsidian.PluginSettingTab {
constructor(app, plugin) {
super(app, plugin);
this.plugin = plugin;
}
display() {
const { containerEl } = this;
containerEl.empty();
containerEl.createEl("h2", { text: "Dialogue Settings" });
const coffeeEl = containerEl.createEl("div", {
attr: {
style: "text-align: center; margin-bottom: 10px;"
}
});
const coffeeLinkEl = coffeeEl.createEl("a", { href: "https://www.buymeacoffee.com/holubj" });
coffeeLinkEl.createEl("img", {
attr: {
src: "https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png",
alt: "Buy Me A Coffee",
style: "height: 60px; width: 217px;"
}
});
new import_obsidian.Setting(containerEl).setName("Default left title").setDesc("Default value for left title in all dialogues.").addText((text) => text.setPlaceholder("Enter default left title").setValue(this.plugin.settings.defaultLeftTitle).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultLeftTitle = value;
yield this.plugin.saveSettings();
})));
new import_obsidian.Setting(containerEl).setName("Default right title").setDesc("Default value for right title in all dialogues.").addText((text) => text.setPlaceholder("Enter default right title").setValue(this.plugin.settings.defaultRightTitle).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultRightTitle = value;
yield this.plugin.saveSettings();
})));
new import_obsidian.Setting(containerEl).setName("Default title mode").setDesc("Default title mode in all dialogues.").addDropdown((cb) => {
Object.values(DialogueTitleMode).forEach((titleMode) => {
const mode = titleMode.toString();
cb.addOption(mode, mode.charAt(0).toUpperCase() + mode.slice(1));
});
cb.setValue(this.plugin.settings.defaultTitleMode).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultTitleMode = value;
yield this.plugin.saveSettings();
}));
});
new import_obsidian.Setting(containerEl).setName("Default max message width").setDesc("Default max message width in all dialogues.").addText((text) => text.setPlaceholder("Enter default max message width").setValue(this.plugin.settings.defaultMessageMaxWidth).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultMessageMaxWidth = value;
yield this.plugin.saveSettings();
})));
new import_obsidian.Setting(containerEl).setName("Default max comment width").setDesc("Default max comment width in all dialogues.").addText((text) => text.setPlaceholder("Enter default max comment width").setValue(this.plugin.settings.defaultCommentMaxWidth).onChange((value) => __async(this, null, function* () {
this.plugin.settings.defaultCommentMaxWidth = value;
yield this.plugin.saveSettings();
})));
}
};
// src/main.ts
var DialoguePlugin = class extends import_obsidian2.Plugin {
onload() {
return __async(this, null, function* () {
yield this.loadSettings();
this.registerMarkdownCodeBlockProcessor(`dialogue`, (src, el, ctx) => {
new DialogueRenderer(src, el, this.settings);
});
this.addSettingTab(new DialogueSettingTab(this.app, this));
});
}
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);
});
}
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL21haW4udHMiLCAic3JjL2NvbnN0YW50cy9kaWFsb2d1ZVRpdGxlTW9kZS50cyIsICJzcmMvY29uc3RhbnRzL2NsYXNzZXMudHMiLCAic3JjL2NvbXBvbmVudHMvbWVzc2FnZS50cyIsICJzcmMvY29tcG9uZW50cy9kZWxpbWl0ZXIudHMiLCAic3JjL2NvbXBvbmVudHMvY29tbWVudC50cyIsICJzcmMvZGlhbG9ndWUudHMiLCAic3JjL3NldHRpbmdzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICdvYnNpZGlhbic7XHJcbmltcG9ydCB7IERpYWxvZ3VlUmVuZGVyZXIgfSBmcm9tICcuL2RpYWxvZ3VlJztcclxuaW1wb3J0IHsgREVGQVVMVF9TRVRUSU5HUywgRGlhbG9ndWVQbHVnaW5TZXR0aW5ncywgRGlhbG9ndWVTZXR0aW5nVGFiIH0gZnJvbSAnLi9zZXR0aW5ncyc7XHJcblxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlhbG9ndWVQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xyXG5cclxuXHRzZXR0aW5nczogRGlhbG9ndWVQbHVnaW5TZXR0aW5ncztcclxuXHJcblx0YXN5bmMgb25sb2FkKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcclxuXHJcblx0XHR0aGlzLnJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IoXHJcbiAgICAgICAgICAgIGBkaWFsb2d1ZWAsXHJcbiAgICAgICAgICAgIChzcmMsIGVsLCBjdHgpID0+IHtcclxuXHRcdFx0XHRuZXcgRGlhbG9ndWVSZW5kZXJlcihzcmMsIGVsLCB0aGlzLnNldHRpbmdzKTtcclxuXHRcdFx0fVxyXG4gICAgICAgICk7XHJcblxyXG5cdFx0dGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBEaWFsb2d1ZVNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHR9XHJcblxyXG5cdGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xyXG5cdH1cclxuXHJcblx0YXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG5cdFx0YXdhaXQgdGhpcy5zYXZlRGF0YSh0aGlzLnNldHRpbmdzKTtcclxuXHR9XHJcblxyXG59XHJcbiIsICJleHBvcnQgZW51bSBEaWFsb2d1ZVRpdGxlTW9kZSB7XG5cdERpc2FibGVkID0gJ2Rpc2FibGVkJyxcblx0Rmlyc3QgPSAnZmlyc3QnLFxuXHRBbGwgPSAnYWxsJyxcbn1cbiIsICJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDTEFTU0VTIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgRElBTE9HVUVfV1JBUFBFUiA9ICdkaWFsb2d1ZS1wbHVnaW4td3JhcHBlcic7XG4gICAgc3RhdGljIHJlYWRvbmx5IEJMT0NLX1dSQVBQRVIgPSAnZGlhbG9ndWUtcGx1Z2luLWJsb2NrLXdyYXBwZXInO1xuICAgIHN0YXRpYyByZWFkb25seSBNRVNTQUdFX1dSQVBQRVJfTEVGVCA9ICdkaWFsb2d1ZS1wbHVnaW4tbWVzc2FnZS13cmFwcGVyLWxlZnQnO1xuICAgIHN0YXRpYyByZWFkb25seSBNRVNTQUdFX1dSQVBQRVJfUklHSFQgPSAnZGlhbG9ndWUtcGx1Z2luLW1lc3NhZ2Utd3JhcHBlci1yaWdodCc7XG4gICAgc3RhdGljIHJlYWRvbmx5IE1FU1NBR0UgPSAnZGlhbG9ndWUtcGx1Z2luLW1lc3NhZ2UnO1xuICAgIHN0YXRpYyByZWFkb25seSBNRVNTQUdFX1RJVExFID0gJ2RpYWxvZ3VlLXBsdWdpbi1tZXNzYWdlLXRpdGxlJztcbiAgICBzdGF0aWMgcmVhZG9ubHkgTUVTU0FHRV9DT05URU5UID0gJ2RpYWxvZ3VlLXBsdWdpbi1tZXNzYWdlLWNvbnRlbnQnO1xuICAgIHN0YXRpYyByZWFkb25seSBERUxJTUlURVJfV1JBUFBFUiA9ICdkaWFsb2d1ZS1wbHVnaW4tZGVsaW1pdGVyLXdyYXBwZXInO1xuICAgIHN0YXRpYyByZWFkb25seSBERUxJTUlURVIgPSAnZGlhbG9ndWUtcGx1Z2luLWRlbGltaXRlcic7XG4gICAgc3RhdGljIHJlYWRvbmx5IERFTElNSVRFUl9ET1QgPSAnZGlhbG9ndWUtcGx1Z2luLWRlbGltaXRlci1kb3QnO1xuICAgIHN0YXRpYyByZWFkb25seSBDT01NRU5UX1dSQVBQRVIgPSAnZGlhbG9ndWUtcGx1Z2luLWNvbW1lbnQtd3JhcHBlcic7XG4gICAgc3RhdGljIHJlYWRvbmx5IENPTU1FTlQgPSAnZGlhbG9ndWUtcGx1Z2luLWNvbW1lbnQnO1xufVxuIiwgImltcG9ydCB7IENMQVNTRVMgfSBmcm9tICcuLi9jb25zdGFudHMvY2xhc3Nlcyc7XG5pbXBvcnQgeyBEaWFsb2d1ZVNldHRpbmdzIH0gZnJvbSAnLi4vZGlhbG9ndWUnO1xuaW1wb3J0IHsgRGlhbG9ndWVUaXRsZU1vZGUgfSBmcm9tICcuLi9jb25zdGFudHMvZGlhbG9ndWVUaXRsZU1vZGUnO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU0lERVMge1xuICAgIHN0YXRpYyByZWFkb25seSBMRUZUID0gJ2xlZnQnO1xuICAgIHN0YXRpYyByZWFkb25seSBSSUdIVCA9ICdyaWdodCc7XG59XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VTaWRlID0gdHlwZW9mIFNJREVTLkxFRlQgfCB0eXBlb2YgU0lERVMuUklHSFQ7XG5cbmV4cG9ydCBjbGFzcyBNZXNzYWdlIHtcblxuICAgIGNvbnRlbnQ6IHN0cmluZztcblxuICAgIHNpZGU6IE1lc3NhZ2VTaWRlO1xuXG4gICAgdGl0bGU6IHN0cmluZztcblxuICAgIGRpYWxvZ3VlU2V0dGluZ3M6IERpYWxvZ3VlU2V0dGluZ3M7XG5cblx0Y29uc3RydWN0b3IoY29udGVudDogc3RyaW5nLCBzaWRlOiBNZXNzYWdlU2lkZSwgZGlhbG9ndWVTZXR0aW5nczogRGlhbG9ndWVTZXR0aW5ncykge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB0aGlzLnNpZGUgPSBzaWRlO1xuICAgICAgICB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MgPSBkaWFsb2d1ZVNldHRpbmdzO1xuXG4gICAgICAgIHRoaXMudGl0bGUgPSB0aGlzLnNpZGUgPT0gU0lERVMuTEVGVCA/IHRoaXMuZGlhbG9ndWVTZXR0aW5ncy5sZWZ0VGl0bGUgOiB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MucmlnaHRUaXRsZTtcblxuICAgICAgICB0aGlzLnJlbmRlck1lc3NhZ2UoKTtcblx0fVxuXG4gICAgcmVuZGVyTWVzc2FnZSgpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZUVsID0gdGhpcy5jcmVhdGVNZXNzYWdlRWwoKTtcblxuICAgICAgICBpZiAoIHRoaXMudGl0bGVTaG91bGRSZW5kZXIoKSApIHtcbiAgICAgICAgICAgIG1lc3NhZ2VFbC5jcmVhdGVEaXYoe2NsczogQ0xBU1NFUy5NRVNTQUdFX1RJVExFLCB0ZXh0OiB0aGlzLnRpdGxlfSk7XG4gICAgICAgIH1cblxuICAgICAgICBtZXNzYWdlRWwuY3JlYXRlRGl2KHtjbHM6IENMQVNTRVMuTUVTU0FHRV9DT05URU5ULCB0ZXh0OiB0aGlzLmNvbnRlbnR9KTtcbiAgICB9XG5cbiAgICBjcmVhdGVNZXNzYWdlRWwoKTogSFRNTERpdkVsZW1lbnRcbiAgICB7XG4gICAgICAgIGNvbnN0IHNpZGVDbGFzcyA9IHRoaXMuc2lkZSA9PSBTSURFUy5MRUZUID8gQ0xBU1NFUy5NRVNTQUdFX1dSQVBQRVJfTEVGVCA6IENMQVNTRVMuTUVTU0FHRV9XUkFQUEVSX1JJR0hUO1xuICAgICAgICBjb25zdCBtZXNzYWdlV3JhcHBlckVsID0gdGhpcy5kaWFsb2d1ZVNldHRpbmdzLnBhcmVudC5jcmVhdGVEaXYoe1xuICAgICAgICAgICAgY2xzOiBgJHtDTEFTU0VTLkJMT0NLX1dSQVBQRVJ9ICR7c2lkZUNsYXNzfWBcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2VXcmFwcGVyRWwuY3JlYXRlRGl2KHtcbiAgICAgICAgICAgIGNsczogQ0xBU1NFUy5NRVNTQUdFLFxuICAgICAgICAgICAgYXR0cjoge1xuICAgICAgICAgICAgICAgIHN0eWxlOiBgbWF4LXdpZHRoOiAke3RoaXMuZGlhbG9ndWVTZXR0aW5ncy5tZXNzYWdlTWF4V2lkdGh9O2AsXG4gICAgICAgICAgICAgICAgJ2RhdGEtcGFydGljaXBhbnQtbmFtZSc6IHRoaXMudGl0bGUsXG4gICAgICAgICAgICAgICAgJ2RhdGEtcGFydGljaXBhbnQtaWQnOiB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MucGFydGljaXBhbnRzLmdldCh0aGlzLnRpdGxlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB0aXRsZVNob3VsZFJlbmRlcigpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCB0aGlzLnRpdGxlLmxlbmd0aCA8IDEgKSByZXR1cm4gZmFsc2U7XG5cbiAgICAgICAgc3dpdGNoICggdGhpcy5kaWFsb2d1ZVNldHRpbmdzLnRpdGxlTW9kZSApIHtcbiAgICAgICAgICAgIGNhc2UgRGlhbG9ndWVUaXRsZU1vZGUuRGlzYWJsZWQ6IHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGNhc2UgRGlhbG9ndWVUaXRsZU1vZGUuQWxsOiByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIGNhc2UgRGlhbG9ndWVUaXRsZU1vZGUuRmlyc3Q6IHtcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuc2lkZSA9PSBTSURFUy5MRUZUICYmICF0aGlzLmRpYWxvZ3VlU2V0dGluZ3MubGVmdFRpdGxlUmVuZGVyZWRPbmNlICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MubGVmdFRpdGxlUmVuZGVyZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCB0aGlzLnNpZGUgPT0gU0lERVMuUklHSFQgJiYgIXRoaXMuZGlhbG9ndWVTZXR0aW5ncy5yaWdodFRpdGxlUmVuZGVyZWRPbmNlICl7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9ndWVTZXR0aW5ncy5yaWdodFRpdGxlUmVuZGVyZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDogcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENMQVNTRVMgfSBmcm9tICcuLi9jb25zdGFudHMvY2xhc3Nlcyc7XG5pbXBvcnQgeyBEaWFsb2d1ZVNldHRpbmdzIH0gZnJvbSAnLi4vZGlhbG9ndWUnO1xuXG5leHBvcnQgY2xhc3MgRGVsaW1pdGVyIHtcblxuICAgIGRpYWxvZ3VlU2V0dGluZ3M6IERpYWxvZ3VlU2V0dGluZ3M7XG5cblx0Y29uc3RydWN0b3IoZGlhbG9ndWVTZXR0aW5nczogRGlhbG9ndWVTZXR0aW5ncykge1xuICAgICAgICB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MgPSBkaWFsb2d1ZVNldHRpbmdzO1xuXG4gICAgICAgIHRoaXMucmVuZGVyRGVsaW1pdGVyKCk7XG5cdH1cblxuICAgIHJlbmRlckRlbGltaXRlcigpIHtcbiAgICAgICAgY29uc3QgZGVsaW1pdGVyV3JhcHBlckVsID0gdGhpcy5kaWFsb2d1ZVNldHRpbmdzLnBhcmVudC5jcmVhdGVEaXYoe1xuICAgICAgICAgICAgY2xzOiBgJHtDTEFTU0VTLkJMT0NLX1dSQVBQRVJ9ICR7Q0xBU1NFUy5ERUxJTUlURVJfV1JBUFBFUn1gXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGRlbGltaXRlckVsID0gZGVsaW1pdGVyV3JhcHBlckVsLmNyZWF0ZURpdih7Y2xzOiBDTEFTU0VTLkRFTElNSVRFUn0pO1xuXG4gICAgICAgIGRlbGltaXRlckVsLmNyZWF0ZUVsKCdkaXYnLCB7Y2xzOiBDTEFTU0VTLkRFTElNSVRFUl9ET1R9KTtcbiAgICAgICAgZGVsaW1pdGVyRWwuY3JlYXRlRWwoJ2RpdicsIHtjbHM6IENMQVNTRVMuREVMSU1JVEVSX0RPVH0pO1xuICAgICAgICBkZWxpbWl0ZXJFbC5jcmVhdGVFbCgnZGl2Jywge2NsczogQ0xBU1NFUy5ERUxJTUlURVJfRE9UfSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IENMQVNTRVMgfSBmcm9tICcuLi9jb25zdGFudHMvY2xhc3Nlcyc7XG5pbXBvcnQgeyBEaWFsb2d1ZVNldHRpbmdzIH0gZnJvbSAnLi4vZGlhbG9ndWUnO1xuXG5leHBvcnQgY2xhc3MgQ29tbWVudCB7XG5cbiAgICBjb250ZW50OiBzdHJpbmc7XG5cbiAgICBkaWFsb2d1ZVNldHRpbmdzOiBEaWFsb2d1ZVNldHRpbmdzO1xuXG5cdGNvbnN0cnVjdG9yKGNvbnRlbnQ6IHN0cmluZywgZGlhbG9ndWVTZXR0aW5nczogRGlhbG9ndWVTZXR0aW5ncykge1xuICAgICAgICB0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MgPSBkaWFsb2d1ZVNldHRpbmdzO1xuXG4gICAgICAgIHRoaXMucmVuZGVyQ29tbWVudCgpO1xuXHR9XG5cbiAgICByZW5kZXJDb21tZW50KCkge1xuICAgICAgICBjb25zdCBjb21tZW50RWwgPSB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MucGFyZW50LmNyZWF0ZURpdih7XG4gICAgICAgICAgICBjbHM6IGAke0NMQVNTRVMuQkxPQ0tfV1JBUFBFUn0gJHtDTEFTU0VTLkNPTU1FTlRfV1JBUFBFUn1gXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBjb21tZW50RWwuY3JlYXRlRGl2KHtcbiAgICAgICAgICAgIGNsczogQ0xBU1NFUy5DT01NRU5ULFxuICAgICAgICAgICAgdGV4dDogdGhpcy5jb250ZW50LFxuICAgICAgICAgICAgYXR0cjoge1xuICAgICAgICAgICAgICAgIHN0eWxlOiBgbWF4LXdpZHRoOiAke3RoaXMuZGlhbG9ndWVTZXR0aW5ncy5jb21tZW50TWF4V2lkdGh9O2BcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IERpYWxvZ3VlUGx1Z2luU2V0dGluZ3MgfSBmcm9tICcuL3NldHRpbmdzJztcbmltcG9ydCB7IERpYWxvZ3VlVGl0bGVNb2RlIH0gZnJvbSAnLi9jb25zdGFudHMvZGlhbG9ndWVUaXRsZU1vZGUnO1xuaW1wb3J0IHsgQ0xBU1NFUyB9IGZyb20gJy4vY29uc3RhbnRzL2NsYXNzZXMnO1xuaW1wb3J0IHsgTWVzc2FnZSwgU0lERVMgfSBmcm9tICcuL2NvbXBvbmVudHMvbWVzc2FnZSc7XG5pbXBvcnQgeyBEZWxpbWl0ZXIgfSBmcm9tICcuL2NvbXBvbmVudHMvZGVsaW1pdGVyJztcbmltcG9ydCB7IENvbW1lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvY29tbWVudCc7XG5cbmFic3RyYWN0IGNsYXNzIEtFWVdPUkRTIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgTEVGVCA9ICdsZWZ0Oic7XG4gICAgc3RhdGljIHJlYWRvbmx5IFJJR0hUID0gJ3JpZ2h0Oic7XG4gICAgc3RhdGljIHJlYWRvbmx5IFRJVExFX01PREUgPSAndGl0bGVNb2RlOic7XG4gICAgc3RhdGljIHJlYWRvbmx5IE1FU1NBR0VfTUFYX1dJRFRIID0gJ21lc3NhZ2VNYXhXaWR0aDonO1xuICAgIHN0YXRpYyByZWFkb25seSBDT01NRU5UX01BWF9XSURUSCA9ICdjb21tZW50TWF4V2lkdGg6JztcbiAgICBzdGF0aWMgcmVhZG9ubHkgREVMSU1JVEVSID0gJ2RlbGltaXRlcic7XG4gICAgc3RhdGljIHJlYWRvbmx5IENPTU1FTlQgPSAnIyc7XG4gICAgc3RhdGljIHJlYWRvbmx5IE1FU1NBR0VfTEVGVCA9ICc8JztcbiAgICBzdGF0aWMgcmVhZG9ubHkgTUVTU0FHRV9SSUdIVCA9ICc+Jztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEaWFsb2d1ZVNldHRpbmdzIHtcbiAgICBwYXJlbnQ6IEhUTUxFbGVtZW50O1xuICAgIGxlZnRUaXRsZTogc3RyaW5nO1xuICAgIHJpZ2h0VGl0bGU6IHN0cmluZztcbiAgICB0aXRsZU1vZGU6IERpYWxvZ3VlVGl0bGVNb2RlO1xuICAgIG1lc3NhZ2VNYXhXaWR0aDogc3RyaW5nO1xuICAgIGNvbW1lbnRNYXhXaWR0aDogc3RyaW5nO1xuICAgIGxlZnRUaXRsZVJlbmRlcmVkT25jZTogYm9vbGVhbjtcbiAgICByaWdodFRpdGxlUmVuZGVyZWRPbmNlOiBib29sZWFuO1xuICAgIHBhcnRpY2lwYW50czogTWFwPHN0cmluZywgbnVtYmVyPjtcbn1cblxuZXhwb3J0IGNsYXNzIERpYWxvZ3VlUmVuZGVyZXIge1xuXG4gICAgc3JjOiBzdHJpbmc7XG5cbiAgICBkaWFsb2d1ZVdyYXBwZXJFbDogSFRNTEVsZW1lbnQ7XG5cbiAgICBkaWFsb2d1ZVNldHRpbmdzOiBEaWFsb2d1ZVNldHRpbmdzO1xuXG5cdGNvbnN0cnVjdG9yKHNyYzogc3RyaW5nLCBwYXJlbnQ6IEhUTUxFbGVtZW50LCBzZXR0aW5nczogRGlhbG9ndWVQbHVnaW5TZXR0aW5ncykge1xuXHRcdHRoaXMuc3JjID0gc3JjO1xuXG4gICAgICAgIHRoaXMuZGlhbG9ndWVXcmFwcGVyRWwgPSBwYXJlbnQuY3JlYXRlRGl2KHtjbHM6IENMQVNTRVMuRElBTE9HVUVfV1JBUFBFUn0pO1xuXG4gICAgICAgIHRoaXMuZGlhbG9ndWVTZXR0aW5ncyA9IHtcbiAgICAgICAgICAgIHBhcmVudDogdGhpcy5kaWFsb2d1ZVdyYXBwZXJFbCxcbiAgICAgICAgICAgIGxlZnRUaXRsZTogc2V0dGluZ3MuZGVmYXVsdExlZnRUaXRsZSxcbiAgICAgICAgICAgIHJpZ2h0VGl0bGU6IHNldHRpbmdzLmRlZmF1bHRSaWdodFRpdGxlLFxuICAgICAgICAgICAgdGl0bGVNb2RlOiBzZXR0aW5ncy5kZWZhdWx0VGl0bGVNb2RlLFxuICAgICAgICAgICAgbWVzc2FnZU1heFdpZHRoOiBzZXR0aW5ncy5kZWZhdWx0TWVzc2FnZU1heFdpZHRoLFxuICAgICAgICAgICAgY29tbWVudE1heFdpZHRoOiBzZXR0aW5ncy5kZWZhdWx0Q29tbWVudE1heFdpZHRoLFxuICAgICAgICAgICAgbGVmdFRpdGxlUmVuZGVyZWRPbmNlOiBmYWxzZSxcbiAgICAgICAgICAgIHJpZ2h0VGl0bGVSZW5kZXJlZE9uY2U6IGZhbHNlLFxuICAgICAgICAgICAgcGFydGljaXBhbnRzOiBuZXcgTWFwPHN0cmluZywgbnVtYmVyPigpLFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5yZW5kZXJEaWFsb2d1ZSgpO1xuXHR9XG5cbiAgICByZWdpc3RlclBhcnRpY2lwYW50KHBhcnRpY2lwYW50OiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKCAhdGhpcy5kaWFsb2d1ZVNldHRpbmdzLnBhcnRpY2lwYW50cy5oYXMocGFydGljaXBhbnQpICkge1xuICAgICAgICAgICAgdGhpcy5kaWFsb2d1ZVNldHRpbmdzLnBhcnRpY2lwYW50cy5zZXQocGFydGljaXBhbnQsIHRoaXMuZGlhbG9ndWVTZXR0aW5ncy5wYXJ0aWNpcGFudHMuc2l6ZSArIDEpOyAvLyBzdGFydGluZyBmcm9tIG51bWJlciAxXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJEaWFsb2d1ZSgpIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSB0aGlzLnNyY1xuICAgICAgICAgICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRyaW0oKSlcbiAgICAgICAgICAgIC5maWx0ZXIobGluZSA9PiBsaW5lLmxlbmd0aCA+IDEpO1xuXG4gICAgICAgIGZvciAoIGNvbnN0IGxpbmUgb2YgbGluZXMgKSB7XG5cbiAgICAgICAgICAgIGlmICggbGluZS5zdGFydHNXaXRoKEtFWVdPUkRTLkxFRlQpICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9ndWVTZXR0aW5ncy5sZWZ0VGl0bGUgPSBsaW5lLnN1YnN0cihLRVlXT1JEUy5MRUZULmxlbmd0aCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9ndWVTZXR0aW5ncy5sZWZ0VGl0bGVSZW5kZXJlZE9uY2UgPSBmYWxzZTsgLy8gcmVzZXQgdGhpcyBmbGFnIHdoZW4gYSBuZXcgdGl0bGUgaXMgc2V0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICggbGluZS5zdGFydHNXaXRoKEtFWVdPUkRTLlJJR0hUKSApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MucmlnaHRUaXRsZSA9IGxpbmUuc3Vic3RyKEtFWVdPUkRTLlJJR0hULmxlbmd0aCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9ndWVTZXR0aW5ncy5yaWdodFRpdGxlUmVuZGVyZWRPbmNlID0gZmFsc2U7IC8vIHJlc2V0IHRoaXMgZmxhZyB3aGVuIGEgbmV3IHRpdGxlIGlzIHNldFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIGxpbmUuc3RhcnRzV2l0aChLRVlXT1JEUy5USVRMRV9NT0RFKSApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlTmFtZSA9IGxpbmUuc3Vic3RyKEtFWVdPUkRTLlRJVExFX01PREUubGVuZ3RoKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoIE9iamVjdC52YWx1ZXMoRGlhbG9ndWVUaXRsZU1vZGUpLnNvbWUobW9kZSA9PiBtb2RlID09IG1vZGVOYW1lKSApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaWFsb2d1ZVNldHRpbmdzLnRpdGxlTW9kZSA9IG1vZGVOYW1lIGFzIERpYWxvZ3VlVGl0bGVNb2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoS0VZV09SRFMuTUVTU0FHRV9NQVhfV0lEVEgpICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9ndWVTZXR0aW5ncy5tZXNzYWdlTWF4V2lkdGggPSBsaW5lLnN1YnN0cihLRVlXT1JEUy5NRVNTQUdFX01BWF9XSURUSC5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoS0VZV09SRFMuQ09NTUVOVF9NQVhfV0lEVEgpICkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGlhbG9ndWVTZXR0aW5ncy5jb21tZW50TWF4V2lkdGggPSBsaW5lLnN1YnN0cihLRVlXT1JEUy5DT01NRU5UX01BWF9XSURUSC5sZW5ndGgpLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKCBsaW5lLnN0YXJ0c1dpdGgoS0VZV09SRFMuREVMSU1JVEVSKSApIHtcbiAgICAgICAgICAgICAgICBuZXcgRGVsaW1pdGVyKHRoaXMuZGlhbG9ndWVTZXR0aW5ncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICggbGluZS5zdGFydHNXaXRoKEtFWVdPUkRTLkNPTU1FTlQpICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBsaW5lLnN1YnN0cihLRVlXT1JEUy5DT01NRU5ULmxlbmd0aCk7XG5cbiAgICAgICAgICAgICAgICBuZXcgQ29tbWVudChjb250ZW50LCB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIGxpbmUuc3RhcnRzV2l0aChLRVlXT1JEUy5NRVNTQUdFX0xFRlQpICkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSBsaW5lLnN1YnN0cihLRVlXT1JEUy5NRVNTQUdFX0xFRlQubGVuZ3RoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZ2lzdGVyUGFydGljaXBhbnQodGhpcy5kaWFsb2d1ZVNldHRpbmdzLmxlZnRUaXRsZSk7XG5cbiAgICAgICAgICAgICAgICBuZXcgTWVzc2FnZShjb250ZW50LCBTSURFUy5MRUZULCB0aGlzLmRpYWxvZ3VlU2V0dGluZ3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIGxpbmUuc3RhcnRzV2l0aChLRVlXT1JEUy5NRVNTQUdFX1JJR0hUKSApIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250ZW50ID0gbGluZS5zdWJzdHIoS0VZV09SRFMuTUVTU0FHRV9SSUdIVC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJQYXJ0aWNpcGFudCh0aGlzLmRpYWxvZ3VlU2V0dGluZ3MucmlnaHRUaXRsZSk7XG5cbiAgICAgICAgICAgICAgICBuZXcgTWVzc2FnZShjb250ZW50LCBTSURFUy5SSUdIVCwgdGhpcy5kaWFsb2d1ZVNldHRpbmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxufVxuIiwgImltcG9ydCB7IEFwcCwgU2V0dGluZywgUGx1Z2luU2V0dGluZ1RhYiB9IGZyb20gJ29ic2lkaWFuJztcbmltcG9ydCBEaWFsb2d1ZVBsdWdpbiBmcm9tICcuL21haW4nO1xuaW1wb3J0IHsgRGlhbG9ndWVUaXRsZU1vZGUgfSBmcm9tICcuL2NvbnN0YW50cy9kaWFsb2d1ZVRpdGxlTW9kZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGlhbG9ndWVQbHVnaW5TZXR0aW5ncyB7XG5cdGRlZmF1bHRMZWZ0VGl0bGU6IHN0cmluZztcblx0ZGVmYXVsdFJpZ2h0VGl0bGU6IHN0cmluZztcblx0ZGVmYXVsdFRpdGxlTW9kZTogRGlhbG9ndWVUaXRsZU1vZGU7XG4gICAgZGVmYXVsdE1lc3NhZ2VNYXhXaWR0aDogc3RyaW5nO1xuICAgIGRlZmF1bHRDb21tZW50TWF4V2lkdGg6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1M6IERpYWxvZ3VlUGx1Z2luU2V0dGluZ3MgPSB7XG5cdGRlZmF1bHRMZWZ0VGl0bGU6ICcnLFxuXHRkZWZhdWx0UmlnaHRUaXRsZTogJycsXG5cdGRlZmF1bHRUaXRsZU1vZGU6IERpYWxvZ3VlVGl0bGVNb2RlLkZpcnN0LFxuICAgIGRlZmF1bHRNZXNzYWdlTWF4V2lkdGg6ICc2MCUnLFxuICAgIGRlZmF1bHRDb21tZW50TWF4V2lkdGg6ICc2MCUnLFxufVxuXG5leHBvcnQgY2xhc3MgRGlhbG9ndWVTZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cblx0cGx1Z2luOiBEaWFsb2d1ZVBsdWdpbjtcblxuXHRjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBEaWFsb2d1ZVBsdWdpbikge1xuXHRcdHN1cGVyKGFwcCwgcGx1Z2luKTtcblx0XHR0aGlzLnBsdWdpbiA9IHBsdWdpbjtcblx0fVxuXG5cdGRpc3BsYXkoKTogdm9pZCB7XG5cdFx0Y29uc3Qge2NvbnRhaW5lckVsfSA9IHRoaXM7XG5cblx0XHRjb250YWluZXJFbC5lbXB0eSgpO1xuXG5cdFx0Y29udGFpbmVyRWwuY3JlYXRlRWwoJ2gyJywge3RleHQ6ICdEaWFsb2d1ZSBTZXR0aW5ncyd9KTtcblxuXHRcdGNvbnN0IGNvZmZlZUVsID0gY29udGFpbmVyRWwuY3JlYXRlRWwoJ2RpdicsIHtcblx0XHRcdGF0dHI6IHtcblx0XHRcdFx0c3R5bGU6IFwidGV4dC1hbGlnbjogY2VudGVyOyBtYXJnaW4tYm90dG9tOiAxMHB4O1wiXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0Y29uc3QgY29mZmVlTGlua0VsID0gY29mZmVlRWwuY3JlYXRlRWwoJ2EnLCB7aHJlZjogXCJodHRwczovL3d3dy5idXltZWFjb2ZmZWUuY29tL2hvbHVialwifSk7XG5cdFx0Y29mZmVlTGlua0VsLmNyZWF0ZUVsKCdpbWcnLCB7XG5cdFx0XHRhdHRyOiB7XG5cdFx0XHRcdHNyYzogXCJodHRwczovL2Nkbi5idXltZWFjb2ZmZWUuY29tL2J1dHRvbnMvdjIvZGVmYXVsdC15ZWxsb3cucG5nXCIsXG5cdFx0XHRcdGFsdDogXCJCdXkgTWUgQSBDb2ZmZWVcIixcblx0XHRcdFx0c3R5bGU6IFwiaGVpZ2h0OiA2MHB4OyB3aWR0aDogMjE3cHg7XCJcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0RlZmF1bHQgbGVmdCB0aXRsZScpXG5cdFx0XHQuc2V0RGVzYygnRGVmYXVsdCB2YWx1ZSBmb3IgbGVmdCB0aXRsZSBpbiBhbGwgZGlhbG9ndWVzLicpXG5cdFx0XHQuYWRkVGV4dCh0ZXh0ID0+XG5cdFx0XHRcdHRleHQuc2V0UGxhY2Vob2xkZXIoJ0VudGVyIGRlZmF1bHQgbGVmdCB0aXRsZScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHRMZWZ0VGl0bGUpXG5cdFx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZGVmYXVsdExlZnRUaXRsZSA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ0RlZmF1bHQgcmlnaHQgdGl0bGUnKVxuXHRcdFx0LnNldERlc2MoJ0RlZmF1bHQgdmFsdWUgZm9yIHJpZ2h0IHRpdGxlIGluIGFsbCBkaWFsb2d1ZXMuJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT5cblx0XHRcdFx0dGV4dC5zZXRQbGFjZWhvbGRlcignRW50ZXIgZGVmYXVsdCByaWdodCB0aXRsZScpXG5cdFx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHRSaWdodFRpdGxlKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHRSaWdodFRpdGxlID0gdmFsdWU7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXG5cdFx0bmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG5cdFx0XHQuc2V0TmFtZSgnRGVmYXVsdCB0aXRsZSBtb2RlJylcblx0XHRcdC5zZXREZXNjKCdEZWZhdWx0IHRpdGxlIG1vZGUgaW4gYWxsIGRpYWxvZ3Vlcy4nKVxuXHRcdFx0LmFkZERyb3Bkb3duKGNiID0+IHtcblx0XHRcdFx0T2JqZWN0LnZhbHVlcyhEaWFsb2d1ZVRpdGxlTW9kZSkuZm9yRWFjaCh0aXRsZU1vZGUgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG1vZGUgPSB0aXRsZU1vZGUudG9TdHJpbmcoKTtcblx0XHRcdFx0XHRjYi5hZGRPcHRpb24obW9kZSwgbW9kZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG1vZGUuc2xpY2UoMSkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRjYi5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0VGl0bGVNb2RlKVxuXHRcdFx0XHRcdC5vbkNoYW5nZShhc3luYyAodmFsdWUpID0+IHtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLmRlZmF1bHRUaXRsZU1vZGUgPSB2YWx1ZSBhcyBEaWFsb2d1ZVRpdGxlTW9kZTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZSgnRGVmYXVsdCBtYXggbWVzc2FnZSB3aWR0aCcpXG4gICAgICAgICAgICAuc2V0RGVzYygnRGVmYXVsdCBtYXggbWVzc2FnZSB3aWR0aCBpbiBhbGwgZGlhbG9ndWVzLicpXG4gICAgICAgICAgICAuYWRkVGV4dCh0ZXh0ID0+XG4gICAgICAgICAgICAgICAgdGV4dC5zZXRQbGFjZWhvbGRlcignRW50ZXIgZGVmYXVsdCBtYXggbWVzc2FnZSB3aWR0aCcpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0TWVzc2FnZU1heFdpZHRoKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0TWVzc2FnZU1heFdpZHRoID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXG4gICAgICAgICAgICAuc2V0TmFtZSgnRGVmYXVsdCBtYXggY29tbWVudCB3aWR0aCcpXG4gICAgICAgICAgICAuc2V0RGVzYygnRGVmYXVsdCBtYXggY29tbWVudCB3aWR0aCBpbiBhbGwgZGlhbG9ndWVzLicpXG4gICAgICAgICAgICAuYWRkVGV4dCh0ZXh0ID0+XG4gICAgICAgICAgICAgICAgdGV4dC5zZXRQbGFjZWhvbGRlcignRW50ZXIgZGVmYXVsdCBtYXggY29tbWVudCB3aWR0aCcpXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0Q29tbWVudE1heFdpZHRoKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5kZWZhdWx0Q29tbWVudE1heFdpZHRoID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcbiAgICAgICAgICAgICAgICB9KSk7XG5cdH1cbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBQXVCOzs7QUNBaEIsSUFBSztBQUFMLFVBQUssb0JBQUw7QUFDTixtQ0FBVztBQUNYLGdDQUFRO0FBQ1IsOEJBQU07QUFBQSxHQUhLOzs7QUNDTCxvQkFBdUI7QUFBQTtBQUNWLEFBRGIsUUFDYSxtQkFBbUI7QUFDbkIsQUFGYixRQUVhLGdCQUFnQjtBQUNoQixBQUhiLFFBR2EsdUJBQXVCO0FBQ3ZCLEFBSmIsUUFJYSx3QkFBd0I7QUFDeEIsQUFMYixRQUthLFVBQVU7QUFDVixBQU5iLFFBTWEsZ0JBQWdCO0FBQ2hCLEFBUGIsUUFPYSxrQkFBa0I7QUFDbEIsQUFSYixRQVFhLG9CQUFvQjtBQUNwQixBQVRiLFFBU2EsWUFBWTtBQUNaLEFBVmIsUUFVYSxnQkFBZ0I7QUFDaEIsQUFYYixRQVdhLGtCQUFrQjtBQUNsQixBQVpiLFFBWWEsVUFBVTs7O0FDVHZCLGtCQUFxQjtBQUFBO0FBQ1IsQUFEYixNQUNhLE9BQU87QUFDUCxBQUZiLE1BRWEsUUFBUTtBQUtyQixvQkFBYztBQUFBLEVBVXBCLFlBQVksU0FBaUIsTUFBbUIsa0JBQW9DO0FBQzdFLFNBQUssVUFBVTtBQUNmLFNBQUssT0FBTztBQUNaLFNBQUssbUJBQW1CO0FBRXhCLFNBQUssUUFBUSxLQUFLLFFBQVEsTUFBTSxPQUFPLEtBQUssaUJBQWlCLFlBQVksS0FBSyxpQkFBaUI7QUFFL0YsU0FBSztBQUFBO0FBQUEsRUFHVCxnQkFBZ0I7QUFDWixVQUFNLFlBQVksS0FBSztBQUV2QixRQUFLLEtBQUsscUJBQXNCO0FBQzVCLGdCQUFVLFVBQVUsRUFBQyxLQUFLLFFBQVEsZUFBZSxNQUFNLEtBQUs7QUFBQTtBQUdoRSxjQUFVLFVBQVUsRUFBQyxLQUFLLFFBQVEsaUJBQWlCLE1BQU0sS0FBSztBQUFBO0FBQUEsRUFHbEUsa0JBQ0E7QUFDSSxVQUFNLFlBQVksS0FBSyxRQUFRLE1BQU0sT0FBTyxRQUFRLHVCQUF1QixRQUFRO0FBQ25GLFVBQU0sbUJBQW1CLEtBQUssaUJBQWlCLE9BQU8sVUFBVTtBQUFBLE1BQzVELEtBQUssR0FBRyxRQUFRLGlCQUFpQjtBQUFBO0FBR3JDLFdBQU8saUJBQWlCLFVBQVU7QUFBQSxNQUM5QixLQUFLLFFBQVE7QUFBQSxNQUNiLE1BQU07QUFBQSxRQUNGLE9BQU8sY0FBYyxLQUFLLGlCQUFpQjtBQUFBLFFBQzNDLHlCQUF5QixLQUFLO0FBQUEsUUFDOUIsdUJBQXVCLEtBQUssaUJBQWlCLGFBQWEsSUFBSSxLQUFLO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLL0Usb0JBQTZCO0FBQ3pCLFFBQUssS0FBSyxNQUFNLFNBQVM7QUFBSSxhQUFPO0FBRXBDLFlBQVMsS0FBSyxpQkFBaUI7QUFBQSxXQUN0QixrQkFBa0I7QUFBVSxlQUFPO0FBQUEsV0FDbkMsa0JBQWtCO0FBQUssZUFBTztBQUFBLFdBQzlCLGtCQUFrQixPQUFPO0FBQzFCLFlBQUssS0FBSyxRQUFRLE1BQU0sUUFBUSxDQUFDLEtBQUssaUJBQWlCLHVCQUF3QjtBQUMzRSxlQUFLLGlCQUFpQix3QkFBd0I7QUFDOUMsaUJBQU87QUFBQSxtQkFFRCxLQUFLLFFBQVEsTUFBTSxTQUFTLENBQUMsS0FBSyxpQkFBaUIsd0JBQXdCO0FBQ2pGLGVBQUssaUJBQWlCLHlCQUF5QjtBQUMvQyxpQkFBTztBQUFBLGVBRU47QUFDRCxpQkFBTztBQUFBO0FBQUE7QUFBQTtBQUdOLGVBQU87QUFBQTtBQUFBO0FBQUE7OztBQzFFckIsc0JBQWdCO0FBQUEsRUFJdEIsWUFBWSxrQkFBb0M7QUFDekMsU0FBSyxtQkFBbUI7QUFFeEIsU0FBSztBQUFBO0FBQUEsRUFHVCxrQkFBa0I7QUFDZCxVQUFNLHFCQUFxQixLQUFLLGlCQUFpQixPQUFPLFVBQVU7QUFBQSxNQUM5RCxLQUFLLEdBQUcsUUFBUSxpQkFBaUIsUUFBUTtBQUFBO0FBRzdDLFVBQU0sY0FBYyxtQkFBbUIsVUFBVSxFQUFDLEtBQUssUUFBUTtBQUUvRCxnQkFBWSxTQUFTLE9BQU8sRUFBQyxLQUFLLFFBQVE7QUFDMUMsZ0JBQVksU0FBUyxPQUFPLEVBQUMsS0FBSyxRQUFRO0FBQzFDLGdCQUFZLFNBQVMsT0FBTyxFQUFDLEtBQUssUUFBUTtBQUFBO0FBQUE7OztBQ25CM0Msb0JBQWM7QUFBQSxFQU1wQixZQUFZLFNBQWlCLGtCQUFvQztBQUMxRCxTQUFLLFVBQVU7QUFDZixTQUFLLG1CQUFtQjtBQUV4QixTQUFLO0FBQUE7QUFBQSxFQUdULGdCQUFnQjtBQUNaLFVBQU0sWUFBWSxLQUFLLGlCQUFpQixPQUFPLFVBQVU7QUFBQSxNQUNyRCxLQUFLLEdBQUcsUUFBUSxpQkFBaUIsUUFBUTtBQUFBO0FBRzdDLFdBQU8sVUFBVSxVQUFVO0FBQUEsTUFDdkIsS0FBSyxRQUFRO0FBQUEsTUFDYixNQUFNLEtBQUs7QUFBQSxNQUNYLE1BQU07QUFBQSxRQUNGLE9BQU8sY0FBYyxLQUFLLGlCQUFpQjtBQUFBO0FBQUE7QUFBQTtBQUFBOzs7QUNsQjNELHFCQUF3QjtBQUFBO0FBQ0osQUFEcEIsU0FDb0IsT0FBTztBQUNQLEFBRnBCLFNBRW9CLFFBQVE7QUFDUixBQUhwQixTQUdvQixhQUFhO0FBQ2IsQUFKcEIsU0FJb0Isb0JBQW9CO0FBQ3BCLEFBTHBCLFNBS29CLG9CQUFvQjtBQUNwQixBQU5wQixTQU1vQixZQUFZO0FBQ1osQUFQcEIsU0FPb0IsVUFBVTtBQUNWLEFBUnBCLFNBUW9CLGVBQWU7QUFDZixBQVRwQixTQVNvQixnQkFBZ0I7QUFlN0IsNkJBQXVCO0FBQUEsRUFRN0IsWUFBWSxLQUFhLFFBQXFCLFVBQWtDO0FBQy9FLFNBQUssTUFBTTtBQUVMLFNBQUssb0JBQW9CLE9BQU8sVUFBVSxFQUFDLEtBQUssUUFBUTtBQUV4RCxTQUFLLG1CQUFtQjtBQUFBLE1BQ3BCLFFBQVEsS0FBSztBQUFBLE1BQ2IsV0FBVyxTQUFTO0FBQUEsTUFDcEIsWUFBWSxTQUFTO0FBQUEsTUFDckIsV0FBVyxTQUFTO0FBQUEsTUFDcEIsaUJBQWlCLFNBQVM7QUFBQSxNQUMxQixpQkFBaUIsU0FBUztBQUFBLE1BQzFCLHVCQUF1QjtBQUFBLE1BQ3ZCLHdCQUF3QjtBQUFBLE1BQ3hCLGNBQWMsSUFBSTtBQUFBO0FBR3RCLFNBQUs7QUFBQTtBQUFBLEVBR1Qsb0JBQW9CLGFBQXFCO0FBQ3JDLFFBQUssQ0FBQyxLQUFLLGlCQUFpQixhQUFhLElBQUksY0FBZTtBQUN4RCxXQUFLLGlCQUFpQixhQUFhLElBQUksYUFBYSxLQUFLLGlCQUFpQixhQUFhLE9BQU87QUFBQTtBQUFBO0FBQUEsRUFJdEcsaUJBQWlCO0FBQ2IsVUFBTSxRQUFRLEtBQUssSUFDZCxNQUFNLFNBQ04sSUFBSSxVQUFRLEtBQUssUUFDakIsT0FBTyxVQUFRLEtBQUssU0FBUztBQUVsQyxlQUFZLFFBQVEsT0FBUTtBQUV4QixVQUFLLEtBQUssV0FBVyxTQUFTLE9BQVE7QUFDbEMsYUFBSyxpQkFBaUIsWUFBWSxLQUFLLE9BQU8sU0FBUyxLQUFLLFFBQVE7QUFDcEUsYUFBSyxpQkFBaUIsd0JBQXdCO0FBQUEsaUJBRXhDLEtBQUssV0FBVyxTQUFTLFFBQVM7QUFDeEMsYUFBSyxpQkFBaUIsYUFBYSxLQUFLLE9BQU8sU0FBUyxNQUFNLFFBQVE7QUFDdEUsYUFBSyxpQkFBaUIseUJBQXlCO0FBQUEsaUJBRXpDLEtBQUssV0FBVyxTQUFTLGFBQWM7QUFDN0MsY0FBTSxXQUFXLEtBQUssT0FBTyxTQUFTLFdBQVcsUUFBUSxPQUFPO0FBQ2hFLFlBQUssT0FBTyxPQUFPLG1CQUFtQixLQUFLLFVBQVEsUUFBUSxXQUFZO0FBQ25FLGVBQUssaUJBQWlCLFlBQVk7QUFBQTtBQUFBLGlCQUdoQyxLQUFLLFdBQVcsU0FBUyxvQkFBcUI7QUFDcEQsYUFBSyxpQkFBaUIsa0JBQWtCLEtBQUssT0FBTyxTQUFTLGtCQUFrQixRQUFRO0FBQUEsaUJBRWpGLEtBQUssV0FBVyxTQUFTLG9CQUFxQjtBQUNwRCxhQUFLLGlCQUFpQixrQkFBa0IsS0FBSyxPQUFPLFNBQVMsa0JBQWtCLFFBQVE7QUFBQSxpQkFFakYsS0FBSyxXQUFXLFNBQVMsWUFBYTtBQUM1QyxZQUFJLFVBQVUsS0FBSztBQUFBLGlCQUViLEtBQUssV0FBVyxTQUFTLFVBQVc7QUFDMUMsY0FBTSxVQUFVLEtBQUssT0FBTyxTQUFTLFFBQVE7QUFFN0MsWUFBSSxRQUFRLFNBQVMsS0FBSztBQUFBLGlCQUVwQixLQUFLLFdBQVcsU0FBUyxlQUFnQjtBQUMvQyxjQUFNLFVBQVUsS0FBSyxPQUFPLFNBQVMsYUFBYTtBQUNsRCxhQUFLLG9CQUFvQixLQUFLLGlCQUFpQjtBQUUvQyxZQUFJLFFBQVEsU0FBUyxNQUFNLE1BQU0sS0FBSztBQUFBLGlCQUVoQyxLQUFLLFdBQVcsU0FBUyxnQkFBaUI7QUFDaEQsY0FBTSxVQUFVLEtBQUssT0FBTyxTQUFTLGNBQWM7QUFDbkQsYUFBSyxvQkFBb0IsS0FBSyxpQkFBaUI7QUFFL0MsWUFBSSxRQUFRLFNBQVMsTUFBTSxPQUFPLEtBQUs7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDL0d2RCxzQkFBK0M7QUFZeEMsSUFBTSxtQkFBMkM7QUFBQSxFQUN2RCxrQkFBa0I7QUFBQSxFQUNsQixtQkFBbUI7QUFBQSxFQUNuQixrQkFBa0Isa0JBQWtCO0FBQUEsRUFDakMsd0JBQXdCO0FBQUEsRUFDeEIsd0JBQXdCO0FBQUE7QUFHckIsdUNBQWlDLGlDQUFpQjtBQUFBLEVBSXhELFlBQVksS0FBVSxRQUF3QjtBQUM3QyxVQUFNLEtBQUs7QUFDWCxTQUFLLFNBQVM7QUFBQTtBQUFBLEVBR2YsVUFBZ0I7QUFDZixVQUFNLEVBQUMsZ0JBQWU7QUFFdEIsZ0JBQVk7QUFFWixnQkFBWSxTQUFTLE1BQU0sRUFBQyxNQUFNO0FBRWxDLFVBQU0sV0FBVyxZQUFZLFNBQVMsT0FBTztBQUFBLE1BQzVDLE1BQU07QUFBQSxRQUNMLE9BQU87QUFBQTtBQUFBO0FBR1QsVUFBTSxlQUFlLFNBQVMsU0FBUyxLQUFLLEVBQUMsTUFBTTtBQUNuRCxpQkFBYSxTQUFTLE9BQU87QUFBQSxNQUM1QixNQUFNO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxPQUFPO0FBQUE7QUFBQTtBQUlULFFBQUksd0JBQVEsYUFDVixRQUFRLHNCQUNSLFFBQVEsa0RBQ1IsUUFBUSxVQUNSLEtBQUssZUFBZSw0QkFDbEIsU0FBUyxLQUFLLE9BQU8sU0FBUyxrQkFDOUIsU0FBUyxDQUFPLFVBQVU7QUFDMUIsV0FBSyxPQUFPLFNBQVMsbUJBQW1CO0FBQ3hDLFlBQU0sS0FBSyxPQUFPO0FBQUE7QUFHdEIsUUFBSSx3QkFBUSxhQUNWLFFBQVEsdUJBQ1IsUUFBUSxtREFDUixRQUFRLFVBQ1IsS0FBSyxlQUFlLDZCQUNsQixTQUFTLEtBQUssT0FBTyxTQUFTLG1CQUM5QixTQUFTLENBQU8sVUFBVTtBQUMxQixXQUFLLE9BQU8sU0FBUyxvQkFBb0I7QUFDekMsWUFBTSxLQUFLLE9BQU87QUFBQTtBQUd0QixRQUFJLHdCQUFRLGFBQ1YsUUFBUSxzQkFDUixRQUFRLHdDQUNSLFlBQVksUUFBTTtBQUNsQixhQUFPLE9BQU8sbUJBQW1CLFFBQVEsZUFBYTtBQUNyRCxjQUFNLE9BQU8sVUFBVTtBQUN2QixXQUFHLFVBQVUsTUFBTSxLQUFLLE9BQU8sR0FBRyxnQkFBZ0IsS0FBSyxNQUFNO0FBQUE7QUFHOUQsU0FBRyxTQUFTLEtBQUssT0FBTyxTQUFTLGtCQUMvQixTQUFTLENBQU8sVUFBVTtBQUMxQixhQUFLLE9BQU8sU0FBUyxtQkFBbUI7QUFDeEMsY0FBTSxLQUFLLE9BQU87QUFBQTtBQUFBO0FBSWhCLFFBQUksd0JBQVEsYUFDUCxRQUFRLDZCQUNSLFFBQVEsK0NBQ1IsUUFBUSxVQUNMLEtBQUssZUFBZSxtQ0FDZixTQUFTLEtBQUssT0FBTyxTQUFTLHdCQUM5QixTQUFTLENBQU8sVUFBVTtBQUN2QixXQUFLLE9BQU8sU0FBUyx5QkFBeUI7QUFDOUMsWUFBTSxLQUFLLE9BQU87QUFBQTtBQUdsQyxRQUFJLHdCQUFRLGFBQ1AsUUFBUSw2QkFDUixRQUFRLCtDQUNSLFFBQVEsVUFDTCxLQUFLLGVBQWUsbUNBQ2YsU0FBUyxLQUFLLE9BQU8sU0FBUyx3QkFDOUIsU0FBUyxDQUFPLFVBQVU7QUFDdkIsV0FBSyxPQUFPLFNBQVMseUJBQXlCO0FBQzlDLFlBQU0sS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUFBOzs7QVB0RzFDLG1DQUE0Qyx3QkFBTztBQUFBLEVBSTVDLFNBQVM7QUFBQTtBQUNkLFlBQU0sS0FBSztBQUVYLFdBQUssbUNBQ0ssWUFDQSxDQUFDLEtBQUssSUFBSSxRQUFRO0FBQzFCLFlBQUksaUJBQWlCLEtBQUssSUFBSSxLQUFLO0FBQUE7QUFJckMsV0FBSyxjQUFjLElBQUksbUJBQW1CLEtBQUssS0FBSztBQUFBO0FBQUE7QUFBQSxFQUcvQyxlQUFlO0FBQUE7QUFDcEIsV0FBSyxXQUFXLE9BQU8sT0FBTyxJQUFJLGtCQUFrQixNQUFNLEtBQUs7QUFBQTtBQUFBO0FBQUEsRUFHMUQsZUFBZTtBQUFBO0FBQ3BCLFlBQU0sS0FBSyxTQUFTLEtBQUs7QUFBQTtBQUFBO0FBQUE7IiwKICAibmFtZXMiOiBbXQp9Cg==