mirror of
https://github.com/flyer1b/LightRead-master.git
synced 2026-07-22 09:00:26 +00:00
169 lines
19 KiB
JavaScript
169 lines
19 KiB
JavaScript
/*
|
|
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
|
|
if you want to view the source, please visit the github repository of this plugin
|
|
*/
|
|
|
|
var __defProp = Object.defineProperty;
|
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
var __export = (target, all) => {
|
|
for (var name in all)
|
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
};
|
|
var __copyProps = (to, from, except, desc) => {
|
|
if (from && typeof from === "object" || typeof from === "function") {
|
|
for (let key of __getOwnPropNames(from))
|
|
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
}
|
|
return to;
|
|
};
|
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
|
|
// main.ts
|
|
var main_exports = {};
|
|
__export(main_exports, {
|
|
default: () => SyncReadPlugin
|
|
});
|
|
module.exports = __toCommonJS(main_exports);
|
|
var import_obsidian = require("obsidian");
|
|
var DEFAULT_SETTINGS = {
|
|
email: "",
|
|
password: "",
|
|
token: "",
|
|
time: "2020-01-01 00:00:00"
|
|
};
|
|
var isWriting = false;
|
|
var SyncReadPlugin = class extends import_obsidian.Plugin {
|
|
async onload() {
|
|
await this.loadSettings();
|
|
const ribbonIconEl = this.addRibbonIcon("sync", "SyncRead", (evt) => {
|
|
writeAllArticles(this.app.vault, this);
|
|
});
|
|
this.addSettingTab(new SyncReadSettingTab(this.app, this));
|
|
}
|
|
onunload() {
|
|
}
|
|
async loadSettings() {
|
|
this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData());
|
|
}
|
|
async saveSettings() {
|
|
await this.saveData(this.settings);
|
|
}
|
|
};
|
|
var SyncReadSettingTab = class extends import_obsidian.PluginSettingTab {
|
|
constructor(app, plugin) {
|
|
super(app, plugin);
|
|
this.plugin = plugin;
|
|
}
|
|
display() {
|
|
const { containerEl } = this;
|
|
containerEl.empty();
|
|
new import_obsidian.Setting(containerEl).setName("\u7528\u6237\u540D").setDesc("\u8F93\u5165\u4F60\u5728SyncRead\u6CE8\u518C\u7684\u90AE\u7BB1").addText((text) => text.setPlaceholder("\u8BF7\u8F93\u5165\u90AE\u7BB1").setValue(this.plugin.settings.email).onChange(async (value) => {
|
|
this.plugin.settings.email = value;
|
|
await this.plugin.saveSettings();
|
|
}));
|
|
new import_obsidian.Setting(containerEl).setName("\u5BC6\u7801").setDesc("").addText((text) => text.setPlaceholder("\u8BF7\u8F93\u5165\u5BC6\u7801").setValue(this.plugin.settings.password).onChange(async (value) => {
|
|
this.plugin.settings.password = value;
|
|
await this.plugin.saveSettings();
|
|
}));
|
|
new import_obsidian.Setting(containerEl).addButton((button) => {
|
|
button.setButtonText("\u767B\u5F55").onClick(async () => {
|
|
button.disabled = true;
|
|
button.setButtonText("\u767B\u5F55\u4E2D...");
|
|
const { email, password } = this.plugin.settings;
|
|
try {
|
|
const res = await (0, import_obsidian.requestUrl)({
|
|
url: "http://43.138.149.38:5050/login/",
|
|
method: "POST",
|
|
contentType: "application/json",
|
|
body: JSON.stringify({
|
|
"username": email,
|
|
"password": password
|
|
})
|
|
});
|
|
if (res.status !== 200) {
|
|
new import_obsidian.Notice("\u767B\u5F55\u5931\u8D25");
|
|
button.disabled = false;
|
|
button.setButtonText("\u767B\u5F55");
|
|
return;
|
|
}
|
|
const data = await res.json;
|
|
this.plugin.settings.token = data.data.token;
|
|
await this.plugin.saveSettings();
|
|
new import_obsidian.Notice("\u767B\u5F55\u6210\u529F");
|
|
button.setButtonText("\u767B\u5F55\u6210\u529F");
|
|
button.disabled = false;
|
|
} catch (error) {
|
|
new import_obsidian.Notice("\u767B\u5F55\u5931\u8D25: " + error.message);
|
|
button.disabled = false;
|
|
button.setButtonText("\u767B\u5F55");
|
|
return;
|
|
}
|
|
});
|
|
});
|
|
}
|
|
};
|
|
async function fetchArticle(settings, time, page) {
|
|
try {
|
|
const res = await (0, import_obsidian.requestUrl)(
|
|
{
|
|
url: `http://43.138.149.38:5050/get_synced_articles?time=${time}&page_number=${page}&page_size=50`,
|
|
method: "GET",
|
|
headers: {
|
|
"Authorization": "Bearer " + settings.token
|
|
}
|
|
}
|
|
);
|
|
if (res.status !== 200) {
|
|
new import_obsidian.Notice("\u540C\u6B65\u5931\u8D25");
|
|
isWriting = false;
|
|
return;
|
|
}
|
|
const data = await res.json;
|
|
return data.data;
|
|
} catch (error) {
|
|
new import_obsidian.Notice("\u540C\u6B65\u5931\u8D25: " + error.message);
|
|
isWriting = false;
|
|
return;
|
|
}
|
|
}
|
|
async function writeArticle(vault, article) {
|
|
var folder = vault.getAbstractFileByPath("SyncRead\u540C\u6B65\u6587\u4EF6\u5939");
|
|
if (!folder)
|
|
folder = await vault.createFolder("SyncRead\u540C\u6B65\u6587\u4EF6\u5939");
|
|
return vault.create(folder.path + "/" + filterIllegalChars((0, import_obsidian.normalizePath)(article.title)) + ".md", article.content);
|
|
}
|
|
async function writeAllArticles(vault, plugin) {
|
|
new import_obsidian.Notice(isWriting ? "\u6B63\u5728\u540C\u6B65" : "\u5F00\u59CB\u540C\u6B65");
|
|
if (isWriting)
|
|
return;
|
|
isWriting = true;
|
|
var time = plugin.settings.time;
|
|
var page = 1;
|
|
do {
|
|
const articles = await fetchArticle(plugin.settings, time, page);
|
|
if (articles.length === 0) {
|
|
isWriting = false;
|
|
new import_obsidian.Notice("\u540C\u6B65\u5B8C\u6210");
|
|
break;
|
|
}
|
|
try {
|
|
await Promise.all(articles.map((article) => writeArticle(vault, article)));
|
|
} catch (error) {
|
|
new import_obsidian.Notice(error.message);
|
|
isWriting = false;
|
|
return;
|
|
}
|
|
plugin.settings.time = articles[articles.length - 1].created_at;
|
|
plugin.saveSettings();
|
|
page++;
|
|
} while (true);
|
|
}
|
|
function filterIllegalChars(title) {
|
|
const illegalChars = /[\\/:*?"<>|]/g;
|
|
const filteredTitle = title.replace(illegalChars, "");
|
|
return filteredTitle;
|
|
}
|
|
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsibWFpbi50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgdGltZSB9IGZyb20gJ2NvbnNvbGUnO1xuaW1wb3J0IHsgQXBwLCBOb3RpY2UsIFBsdWdpbiwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyxWYXVsdCxURmlsZSwgbm9ybWFsaXplUGF0aCwgcmVxdWVzdFVybCB9IGZyb20gJ29ic2lkaWFuJztcblxuLy8gUmVtZW1iZXIgdG8gcmVuYW1lIHRoZXNlIGNsYXNzZXMgYW5kIGludGVyZmFjZXMhXG5cbmludGVyZmFjZSBTeW5jUmVhZFBsdWdpblNldHRpbmdzIHtcblx0ZW1haWw6IHN0cmluZztcblx0cGFzc3dvcmQ6IHN0cmluZztcblx0dG9rZW46IHN0cmluZztcblx0dGltZTogc3RyaW5nO1xufVxuXG5jb25zdCBERUZBVUxUX1NFVFRJTkdTOiBTeW5jUmVhZFBsdWdpblNldHRpbmdzID0ge1xuXHRlbWFpbDogJycsXG5cdHBhc3N3b3JkOiAnJyxcblx0dG9rZW46ICcnLFxuXHR0aW1lOiAnMjAyMC0wMS0wMSAwMDowMDowMCcsXG59XG5cbnZhciBpc1dyaXRpbmcgPSBmYWxzZTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3luY1JlYWRQbHVnaW4gZXh0ZW5kcyBQbHVnaW4ge1xuXHRzZXR0aW5nczogU3luY1JlYWRQbHVnaW5TZXR0aW5ncztcblxuXHRhc3luYyBvbmxvYWQoKSB7XG5cdFx0YXdhaXQgdGhpcy5sb2FkU2V0dGluZ3MoKTtcblxuXHRcdC8vIFRoaXMgY3JlYXRlcyBhbiBpY29uIGluIHRoZSBsZWZ0IHJpYmJvbi5cblx0XHRjb25zdCByaWJib25JY29uRWwgPSB0aGlzLmFkZFJpYmJvbkljb24oJ3N5bmMnLCAnU3luY1JlYWQnLCAoZXZ0OiBNb3VzZUV2ZW50KSA9PiB7XG5cdFx0XHQvLyBDYWxsZWQgd2hlbiB0aGUgdXNlciBjbGlja3MgdGhlIGljb24uXG5cdFx0XHQvLyBuZXcgTm90aWNlKCdUaGlzIGlzIGEgbm90aWNlIScpO1xuXHRcdFx0Ly8gbmV3IE5vdGljZShgcGF0aDogJHt0aGlzLmFwcC52YXVsdC5nZXRSb290KCkucGF0aH1gKTtcblx0XHRcdC8vIGNyYWV0ZUZpbGUodGhpcy5hcHAudmF1bHQpO1xuXHRcdFx0Ly8gbmV3IE5vdGljZShgdG9rZW46ICR7dGhpcy5zZXR0aW5ncy50b2tlbn1gKTtcblx0XHQgXHR3cml0ZUFsbEFydGljbGVzKHRoaXMuYXBwLnZhdWx0LHRoaXMpO1xuXHRcdH0pO1xuXHRcdFxuXG5cdFx0Ly8gVGhpcyBhZGRzIGEgc2V0dGluZ3MgdGFiIHNvIHRoZSB1c2VyIGNhbiBjb25maWd1cmUgdmFyaW91cyBhc3BlY3RzIG9mIHRoZSBwbHVnaW5cblx0XHQvLyBpZih0aGlzLnNldHRpbmdzLnRva2VuICE9PSAnJyl7XG5cdFx0Ly8gXHR0aGlzLmFkZFNldHRpbmdUYWIobmV3IFNldHRpbmdzVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG5cdFx0Ly8gfWVsc2V7XG5cdFx0Ly8gfVxuXHRcdHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgU3luY1JlYWRTZXR0aW5nVGFiKHRoaXMuYXBwLCB0aGlzKSk7XG5cblx0fVxuXG5cdG9udW5sb2FkKCkge1xuXHR9XG5cblx0YXN5bmMgbG9hZFNldHRpbmdzKCkge1xuXHRcdHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX1NFVFRJTkdTLCBhd2FpdCB0aGlzLmxvYWREYXRhKCkpO1xuXHRcdC8vIHRoaXMuc2V0dGluZ3MudGltZSA9ICcyMDIwLTAxLTAxIDAwOjAwOjAwJztcblx0fVxuXG5cdGFzeW5jIHNhdmVTZXR0aW5ncygpIHtcblx0XHRhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuXHR9XG59XG5cblxuY2xhc3MgU3luY1JlYWRTZXR0aW5nVGFiIGV4dGVuZHMgUGx1Z2luU2V0dGluZ1RhYiB7XG5cdHBsdWdpbjogU3luY1JlYWRQbHVnaW47XG5cblx0Y29uc3RydWN0b3IoYXBwOiBBcHAsIHBsdWdpbjogU3luY1JlYWRQbHVnaW4pIHtcblx0XHRzdXBlcihhcHAsIHBsdWdpbik7XG5cdFx0dGhpcy5wbHVnaW4gPSBwbHVnaW47XG5cdFx0XG5cdH1cblxuXHRkaXNwbGF5KCk6IHZvaWQge1xuXHRcdGNvbnN0IHtjb250YWluZXJFbH0gPSB0aGlzO1xuXG5cdFx0Y29udGFpbmVyRWwuZW1wdHkoKTtcblxuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1x1NzUyOFx1NjIzN1x1NTQwRCcpXG5cdFx0XHQuc2V0RGVzYygnXHU4RjkzXHU1MTY1XHU0RjYwXHU1NzI4U3luY1JlYWRcdTZDRThcdTUxOENcdTc2ODRcdTkwQUVcdTdCQjEnKVxuXHRcdFx0LmFkZFRleHQodGV4dCA9PiB0ZXh0XG5cdFx0XHRcdC5zZXRQbGFjZWhvbGRlcignXHU4QkY3XHU4RjkzXHU1MTY1XHU5MEFFXHU3QkIxJylcblx0XHRcdFx0LnNldFZhbHVlKHRoaXMucGx1Z2luLnNldHRpbmdzLmVtYWlsKVxuXHRcdFx0XHQub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0dGhpcy5wbHVnaW4uc2V0dGluZ3MuZW1haWwgPSB2YWx1ZTtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLnBsdWdpbi5zYXZlU2V0dGluZ3MoKTtcblx0XHRcdFx0fSkpO1xuXHRcdG5ldyBTZXR0aW5nKGNvbnRhaW5lckVsKVxuXHRcdFx0LnNldE5hbWUoJ1x1NUJDNlx1NzgwMScpXG5cdFx0XHQuc2V0RGVzYygnJylcblx0XHRcdC5hZGRUZXh0KHRleHQgPT4gdGV4dFxuXHRcdFx0XHQuc2V0UGxhY2Vob2xkZXIoJ1x1OEJGN1x1OEY5M1x1NTE2NVx1NUJDNlx1NzgwMScpXG5cdFx0XHRcdC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5wYXNzd29yZClcblx0XHRcdFx0Lm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnBhc3N3b3JkID0gdmFsdWU7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdH0pKTtcblx0XHRuZXcgU2V0dGluZyhjb250YWluZXJFbClcblx0XHRcdC5hZGRCdXR0b24oYnV0dG9uID0+IHtcblx0XHRcdFx0YnV0dG9uXG5cdFx0XHRcdFx0LnNldEJ1dHRvblRleHQoJ1x1NzY3Qlx1NUY1NScpXG5cdFx0XHRcdFx0Lm9uQ2xpY2soYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdFx0YnV0dG9uLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGJ1dHRvbi5zZXRCdXR0b25UZXh0KCdcdTc2N0JcdTVGNTVcdTRFMkQuLi4nKTtcblx0XHRcdFx0XHRcdGNvbnN0IHtlbWFpbCwgcGFzc3dvcmR9ID0gdGhpcy5wbHVnaW4uc2V0dGluZ3M7XG5cdFx0XHRcdFx0XHQvLyBuZXcgTm90aWNlKGBlbWFpbDogJHtlbWFpbH1gKTtcblx0XHRcdFx0XHRcdHRyeXtcblx0XHRcdFx0XHRcdGNvbnN0IHJlcyA9IGF3YWl0IHJlcXVlc3RVcmwoe1xuXHRcdFx0XHRcdFx0XHR1cmw6J2h0dHA6Ly80My4xMzguMTQ5LjM4OjUwNTAvbG9naW4vJyxcblx0XHRcdFx0XHRcdFx0bWV0aG9kOiAnUE9TVCcsXG5cdFx0XHRcdFx0XHRcdGNvbnRlbnRUeXBlOiAnYXBwbGljYXRpb24vanNvbicsXG5cdFx0XHRcdFx0XHRcdGJvZHk6IEpTT04uc3RyaW5naWZ5KHtcblx0XHRcdFx0XHRcdFx0XHRcdCd1c2VybmFtZSc6ZW1haWwsXG5cdFx0XHRcdFx0XHRcdFx0XHQncGFzc3dvcmQnOnBhc3N3b3JkXG5cdFx0XHRcdFx0XHRcdFxuXHRcdFx0XHRcdFx0fSl9KTtcblx0XHRcdFx0XHRcdGlmIChyZXMuc3RhdHVzICE9PSAyMDApIHtcblx0XHRcdFx0XHRcdFx0bmV3IE5vdGljZSgnXHU3NjdCXHU1RjU1XHU1OTMxXHU4RDI1Jyk7XG5cdFx0XHRcdFx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRidXR0b24uc2V0QnV0dG9uVGV4dCgnXHU3NjdCXHU1RjU1Jyk7XG5cdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbjtcblx0XHRcdFx0XHRcdC8vIG5ldyBOb3RpY2UoYHJlczogJHtKU09OLnN0cmluZ2lmeShkYXRhKX1gKTtcblx0XHRcdFx0XHRcdHRoaXMucGx1Z2luLnNldHRpbmdzLnRva2VuID0gZGF0YS5kYXRhLnRva2VuO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKCdcdTc2N0JcdTVGNTVcdTYyMTBcdTUyOUYnKTtcblx0XHRcdFx0XHRcdGJ1dHRvbi5zZXRCdXR0b25UZXh0KCdcdTc2N0JcdTVGNTVcdTYyMTBcdTUyOUYnKTtcblx0XHRcdFx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdH1jYXRjaChlcnJvcil7XG5cdFx0XHRcdFx0XHRuZXcgTm90aWNlKCdcdTc2N0JcdTVGNTVcdTU5MzFcdThEMjU6ICcgKyBlcnJvci5tZXNzYWdlKTtcblx0XHRcdFx0XHRcdGJ1dHRvbi5kaXNhYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnV0dG9uLnNldEJ1dHRvblRleHQoJ1x1NzY3Qlx1NUY1NScpO1xuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pXG5cdH1cbn1cblxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaEFydGljbGUoc2V0dGluZ3M6IFN5bmNSZWFkUGx1Z2luU2V0dGluZ3MsdGltZTogc3RyaW5nLHBhZ2U6IG51bWJlcil7XG5cblx0dHJ5IHtcblxuXHRcblx0Y29uc3QgcmVzID0gYXdhaXQgcmVxdWVzdFVybChcblx0XHR7XG5cdFx0XHR1cmw6YGh0dHA6Ly80My4xMzguMTQ5LjM4OjUwNTAvZ2V0X3N5bmNlZF9hcnRpY2xlcz90aW1lPSR7dGltZX0mcGFnZV9udW1iZXI9JHtwYWdlfSZwYWdlX3NpemU9NTBgLCBcblx0XHRcdG1ldGhvZDogJ0dFVCcsXG5cdFx0XHRoZWFkZXJzOiB7XG5cdFx0XHRcdCdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgc2V0dGluZ3MudG9rZW5cblx0XHRcdH0sXG5cdFx0fVxuXHRcdCk7XG5cdC8vIG5ldyBOb3RpY2UoYHRva2VuOiAke3NldHRpbmdzLnRva2VufWApO1xuXHRpZiAocmVzLnN0YXR1cyAhPT0gMjAwKSB7XG5cdFx0bmV3IE5vdGljZSgnXHU1NDBDXHU2QjY1XHU1OTMxXHU4RDI1Jyk7XG5cdFx0aXNXcml0aW5nID0gZmFsc2U7XG5cdFx0cmV0dXJuO1xuXHR9XG5cdGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbjtcblx0Ly8gbmV3IE5vdGljZShgcmVzOiAke2RhdGEuZGF0YS5sZW5ndGh9YCk7XG5cdHJldHVybiBkYXRhLmRhdGE7XG59IGNhdGNoIChlcnJvcikge1xuXHRuZXcgTm90aWNlKCdcdTU0MENcdTZCNjVcdTU5MzFcdThEMjU6ICcgKyBlcnJvci5tZXNzYWdlKTtcblx0aXNXcml0aW5nID0gZmFsc2U7XG5cdHJldHVybjtcbn1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVBcnRpY2xlKHZhdWx0OiBWYXVsdCwgYXJ0aWNsZTogeyB0aXRsZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcgfSk6IFByb21pc2U8VEZpbGU+IHtcblx0dmFyIGZvbGRlciA9IHZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aCgnU3luY1JlYWRcdTU0MENcdTZCNjVcdTY1ODdcdTRFRjZcdTU5MzknKTtcblx0aWYoIWZvbGRlcikgZm9sZGVyID0gYXdhaXQgdmF1bHQuY3JlYXRlRm9sZGVyKCdTeW5jUmVhZFx1NTQwQ1x1NkI2NVx1NjU4N1x1NEVGNlx1NTkzOScpO1xuXHRyZXR1cm4gdmF1bHQuY3JlYXRlKGZvbGRlci5wYXRoKycvJytmaWx0ZXJJbGxlZ2FsQ2hhcnMobm9ybWFsaXplUGF0aChhcnRpY2xlLnRpdGxlKSkgKyBcIi5tZFwiLCBhcnRpY2xlLmNvbnRlbnQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUFsbEFydGljbGVzKHZhdWx0OiBWYXVsdCxwbHVnaW46IFN5bmNSZWFkUGx1Z2luKXtcblxuXHRuZXcgTm90aWNlKGlzV3JpdGluZyA/ICdcdTZCNjNcdTU3MjhcdTU0MENcdTZCNjUnIDogJ1x1NUYwMFx1NTlDQlx1NTQwQ1x1NkI2NScpO1xuXHRpZihpc1dyaXRpbmcpIHJldHVybjtcblx0XHRpc1dyaXRpbmcgPSB0cnVlO1xuXHR2YXIgdGltZSA9IHBsdWdpbi5zZXR0aW5ncy50aW1lO1xuXHR2YXIgcGFnZSA9IDE7XG5cdC8vIG5ldyBOb3RpY2UoYHRpbWU6ICR7dGltZX1gKTtcblx0ZG97XG5cdFx0XG5cdFx0Y29uc3QgYXJ0aWNsZXMgPSBhd2FpdCBmZXRjaEFydGljbGUocGx1Z2luLnNldHRpbmdzLHRpbWUscGFnZSk7XG5cdFx0aWYgKGFydGljbGVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0aXNXcml0aW5nID0gZmFsc2U7XG5cdFx0XHRuZXcgTm90aWNlKCdcdTU0MENcdTZCNjVcdTVCOENcdTYyMTAnKTtcblx0XHRcdGJyZWFrO1x0XG5cdFx0fVxuXHRcdHRyeXtcblx0XHRcdGF3YWl0IFByb21pc2UuYWxsKGFydGljbGVzLm1hcCgoYXJ0aWNsZTogeyB0aXRsZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmc7IH0pID0+IHdyaXRlQXJ0aWNsZSh2YXVsdCwgYXJ0aWNsZSkpKTtcblx0XHR9Y2F0Y2goZXJyb3Ipe1xuXHRcdFx0bmV3IE5vdGljZShlcnJvci5tZXNzYWdlKTtcblx0XHRcdGlzV3JpdGluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHQvLyBuZXcgTm90aWNlKGBwYWdlOiAke3BhZ2V9YCk7XG5cdFx0cGx1Z2luLnNldHRpbmdzLnRpbWUgPSBhcnRpY2xlc1thcnRpY2xlcy5sZW5ndGgtMV0uY3JlYXRlZF9hdDtcblx0XHRwbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG5cdFx0cGFnZSsrO1xuXHRcdC8vIG5ldyBOb3RpY2UoYHBhZ2U6ICR7cGFnZX1gKTtcblx0fXdoaWxlKHRydWUpO1xuXG59XG5cbmZ1bmN0aW9uIGZpbHRlcklsbGVnYWxDaGFycyh0aXRsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBcdTVCOUFcdTRFNDlcdTk3NUVcdTZDRDVcdTVCNTdcdTdCMjZcbiAgICBjb25zdCBpbGxlZ2FsQ2hhcnMgPSAvW1xcXFwvOio/XCI8PnxdL2c7XG4gICAgLy8gXHU0RjdGXHU3NTI4XHU2QjYzXHU1MjE5XHU4ODY4XHU4RkJFXHU1RjBGXHU2NkZGXHU2MzYyXHU5NzVFXHU2Q0Q1XHU1QjU3XHU3QjI2XG4gICAgY29uc3QgZmlsdGVyZWRUaXRsZSA9IHRpdGxlLnJlcGxhY2UoaWxsZWdhbENoYXJzLCBcIlwiKTtcbiAgICByZXR1cm4gZmlsdGVyZWRUaXRsZTtcbn0iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0Esc0JBQXNHO0FBV3RHLElBQU0sbUJBQTJDO0FBQUEsRUFDaEQsT0FBTztBQUFBLEVBQ1AsVUFBVTtBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUNQO0FBRUEsSUFBSSxZQUFZO0FBRWhCLElBQXFCLGlCQUFyQixjQUE0Qyx1QkFBTztBQUFBLEVBR2xELE1BQU0sU0FBUztBQUNkLFVBQU0sS0FBSyxhQUFhO0FBR3hCLFVBQU0sZUFBZSxLQUFLLGNBQWMsUUFBUSxZQUFZLENBQUMsUUFBb0I7QUFNL0UsdUJBQWlCLEtBQUssSUFBSSxPQUFNLElBQUk7QUFBQSxJQUN0QyxDQUFDO0FBUUQsU0FBSyxjQUFjLElBQUksbUJBQW1CLEtBQUssS0FBSyxJQUFJLENBQUM7QUFBQSxFQUUxRDtBQUFBLEVBRUEsV0FBVztBQUFBLEVBQ1g7QUFBQSxFQUVBLE1BQU0sZUFB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
|