obsidian-dev-utils
Version:
This is the collection of useful functions that you can use for your Obsidian plugin development
161 lines (158 loc) • 16.1 kB
JavaScript
/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
(function initCjs(){const globalThisRecord=globalThis;globalThisRecord["__name"]??=name;const originalRequire=require;if(originalRequire&&!originalRequire.__isPatched){require=Object.assign(id=>requirePatched(id),originalRequire,{__isPatched:true})}const newFuncs={__extractDefault:__name(()=>extractDefault,"__extractDefault"),process:__name(()=>{const browserProcess={browser:true,cwd:__name(()=>"/","cwd"),env:{},platform:"android"};return browserProcess},"process")};for(const key of Object.keys(newFuncs)){globalThisRecord[key]??=newFuncs[key]?.()}function name(obj){return obj}__name(name,"name");function extractDefault(module){return module&&module.__esModule&&"default"in module?module.default:module}__name(extractDefault,"extractDefault");function requirePatched(id){const module=originalRequire?.(id);if(module){return extractDefault(module)}if(id==="process"||id==="node:process"){console.error(`Module not found: ${id}. Fake process object is returned instead.`);return globalThis.process}console.error(`Module not found: ${id}. Empty object is returned instead.`);return{}}__name(requirePatched,"requirePatched")})();
;
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);
var CliUtils_exports = {};
__export(CliUtils_exports, {
CliTaskResult: () => CliTaskResult,
toCommandLine: () => toCommandLine,
wrapCliTask: () => wrapCliTask
});
module.exports = __toCommonJS(CliUtils_exports);
var import_Debug = require('../Debug.cjs');
var import_Error = require('../Error.cjs');
var import_Function = require('../Function.cjs');
var import_String = require('../String.cjs');
var import_NodeModules = require('./NodeModules.cjs');
class CliTaskResult {
/**
* Chains multiple tasks together, executing them sequentially until one fails.
*
* @param tasks - An array of task functions that return a {@link CliTaskResult} or `void`.
* @returns A {@link Promise} that resolves with the first failed {@link CliTaskResult} or a success result.
*/
static async chain(tasks) {
for (const task of tasks) {
const result = await wrapResult(task);
if (!result.isSuccessful()) {
return result;
}
}
return CliTaskResult.Success();
}
/**
* Creates a {@link CliTaskResult} that does not exit the process.
*
* @returns A {@link CliTaskResult} that does not exit the process.
*/
static DoNotExit() {
return new DoNotExitTaskResult();
}
/**
* Represents a failure result of a CLI task.
*
* @returns The failure result.
*/
static Failure() {
return this.Success(false);
}
/**
* Creates a {@link CliTaskResult} based on an exit code.
*
* @param exitCode - The exit code to represent.
* @returns A {@link CliTaskResult} representing the exit code.
*/
static FromExitCode(exitCode) {
return new ExitCodeTaskResult(exitCode);
}
/**
* Creates a CliTaskResult representing a successful task result.
*
* @param isSuccess - A boolean indicating whether the task was successful. Default is true.
* @returns A CliTaskResult object representing a successful task result.
*/
static Success(isSuccess = true) {
return new SuccessTaskResult(isSuccess);
}
}
class DoNotExitTaskResult extends CliTaskResult {
/**
* Does not exit the process.
*/
exit() {
(0, import_Function.noop)();
}
isSuccessful() {
return true;
}
}
class ExitCodeTaskResult extends CliTaskResult {
constructor(exitCode) {
super();
this.exitCode = exitCode;
}
/**
* Exits the process with the specified exit code.
*/
exit() {
import_NodeModules.process.exit(this.exitCode);
}
isSuccessful() {
return this.exitCode === 0;
}
}
class SuccessTaskResult extends CliTaskResult {
constructor(_isSuccessful) {
super();
this._isSuccessful = _isSuccessful;
}
/**
* Exits the process based on the success of the task.
*/
exit() {
import_NodeModules.process.exit(this._isSuccessful ? 0 : 1);
}
isSuccessful() {
return this._isSuccessful;
}
}
function toCommandLine(args) {
return args.map((arg) => {
if (/[\s"\n]/.test(arg)) {
let escapedArg = arg;
escapedArg = (0, import_String.replaceAll)(escapedArg, /"/g, '\\"');
escapedArg = (0, import_String.replaceAll)(escapedArg, /\n/g, "\\n");
return `"${escapedArg}"`;
}
return arg;
}).join(" ");
}
async function wrapCliTask(taskFn) {
(0, import_Debug.enableLibraryDebuggers)();
const result = await wrapResult(taskFn);
result.exit();
}
async function wrapResult(taskFn) {
try {
return await taskFn() ?? CliTaskResult.Success();
} catch (error) {
(0, import_Error.printError)(new Error("An error occurred during task execution", { cause: error }));
return CliTaskResult.Failure();
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
CliTaskResult,
toCommandLine,
wrapCliTask
});
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL1NjcmlwdFV0aWxzL0NsaVV0aWxzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBwYWNrYWdlRG9jdW1lbnRhdGlvblxuICpcbiAqIENvbnRhaW5zIHV0aWxpdHkgY2xhc3NlcyBhbmQgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyB0YXNrIHJlc3VsdHMsIGluY2x1ZGluZ1xuICogc3VjY2VzcywgZXhpdCBjb2RlcywgYW5kIGNoYWluaW5nIG11bHRpcGxlIHRhc2tzLlxuICovXG5cbmltcG9ydCB0eXBlIHsgUHJvbWlzYWJsZSB9IGZyb20gJ3R5cGUtZmVzdCc7XG5cbmltcG9ydCB0eXBlIHsgTWF5YmVSZXR1cm4gfSBmcm9tICcuLi9UeXBlLnRzJztcblxuaW1wb3J0IHsgZW5hYmxlTGlicmFyeURlYnVnZ2VycyB9IGZyb20gJy4uL0RlYnVnLnRzJztcbmltcG9ydCB7IHByaW50RXJyb3IgfSBmcm9tICcuLi9FcnJvci50cyc7XG5pbXBvcnQgeyBub29wIH0gZnJvbSAnLi4vRnVuY3Rpb24udHMnO1xuaW1wb3J0IHsgcmVwbGFjZUFsbCB9IGZyb20gJy4uL1N0cmluZy50cyc7XG5pbXBvcnQgeyBwcm9jZXNzIH0gZnJvbSAnLi9Ob2RlTW9kdWxlcy50cyc7XG5cbi8qKlxuICogQWJzdHJhY3QgY2xhc3MgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgb2YgYSB0YXNrLiBJbmNsdWRlcyBtZXRob2RzIGZvciBoYW5kbGluZyBzdWNjZXNzLFxuICogZXhpdCBjb2RlcywgYW5kIGNoYWluaW5nIHRhc2tzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2xpVGFza1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBDaGFpbnMgbXVsdGlwbGUgdGFza3MgdG9nZXRoZXIsIGV4ZWN1dGluZyB0aGVtIHNlcXVlbnRpYWxseSB1bnRpbCBvbmUgZmFpbHMuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrcyAtIEFuIGFycmF5IG9mIHRhc2sgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IG9yIGB2b2lkYC5cbiAgICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBmaXJzdCBmYWlsZWQge0BsaW5rIENsaVRhc2tSZXN1bHR9IG9yIGEgc3VjY2VzcyByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIGNoYWluKHRhc2tzOiAoKCkgPT4gUHJvbWlzYWJsZTxNYXliZVJldHVybjxDbGlUYXNrUmVzdWx0Pj4pW10pOiBQcm9taXNlPENsaVRhc2tSZXN1bHQ+IHtcbiAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGFza3MpIHtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdyYXBSZXN1bHQodGFzayk7XG4gICAgICBpZiAoIXJlc3VsdC5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBDbGlUYXNrUmVzdWx0LlN1Y2Nlc3MoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IHRoYXQgZG9lcyBub3QgZXhpdCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQHJldHVybnMgQSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0gdGhhdCBkb2VzIG5vdCBleGl0IHRoZSBwcm9jZXNzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBEb05vdEV4aXQoKTogQ2xpVGFza1Jlc3VsdCB7XG4gICAgcmV0dXJuIG5ldyBEb05vdEV4aXRUYXNrUmVzdWx0KCk7XG4gIH1cblxuICAvKipcbiAgICogUmVwcmVzZW50cyBhIGZhaWx1cmUgcmVzdWx0IG9mIGEgQ0xJIHRhc2suXG4gICAqXG4gICAqIEByZXR1cm5zIFRoZSBmYWlsdXJlIHJlc3VsdC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgRmFpbHVyZSgpOiBDbGlUYXNrUmVzdWx0IHtcbiAgICByZXR1cm4gdGhpcy5TdWNjZXNzKGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IGJhc2VkIG9uIGFuIGV4aXQgY29kZS5cbiAgICpcbiAgICogQHBhcmFtIGV4aXRDb2RlIC0gVGhlIGV4aXQgY29kZSB0byByZXByZXNlbnQuXG4gICAqIEByZXR1cm5zIEEge0BsaW5rIENsaVRhc2tSZXN1bHR9IHJlcHJlc2VudGluZyB0aGUgZXhpdCBjb2RlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBGcm9tRXhpdENvZGUoZXhpdENvZGU6IG51bWJlcik6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiBuZXcgRXhpdENvZGVUYXNrUmVzdWx0KGV4aXRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgQ2xpVGFza1Jlc3VsdCByZXByZXNlbnRpbmcgYSBzdWNjZXNzZnVsIHRhc2sgcmVzdWx0LlxuICAgKlxuICAgKiBAcGFyYW0gaXNTdWNjZXNzIC0gQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdGFzayB3YXMgc3VjY2Vzc2Z1bC4gRGVmYXVsdCBpcyB0cnVlLlxuICAgKiBAcmV0dXJucyBBIENsaVRhc2tSZXN1bHQgb2JqZWN0IHJlcHJlc2VudGluZyBhIHN1Y2Nlc3NmdWwgdGFzayByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIFN1Y2Nlc3MoaXNTdWNjZXNzID0gdHJ1ZSk6IENsaVRhc2tSZXN1bHQge1xuICAgIHJldHVybiBuZXcgU3VjY2Vzc1Rhc2tSZXN1bHQoaXNTdWNjZXNzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGl0cyB0aGUgcHJvY2VzcyBiYXNlZCBvbiB0aGUgdGFzayByZXN1bHQuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgZXhpdCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIHRoZSB0YXNrIHdhcyBzdWNjZXNzZnVsLlxuICAgKlxuICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHRhc2sgd2FzIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSBgZmFsc2VgLlxuICAgKi9cbiAgcHJvdGVjdGVkIGFic3RyYWN0IGlzU3VjY2Vzc2Z1bCgpOiBib29sZWFuO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSB0YXNrIHJlc3VsdCB0aGF0IGRvZXMgbm90IGV4aXQgdGhlIHByb2Nlc3MuXG4gKi9cbmNsYXNzIERvTm90RXhpdFRhc2tSZXN1bHQgZXh0ZW5kcyBDbGlUYXNrUmVzdWx0IHtcbiAgLyoqXG4gICAqIERvZXMgbm90IGV4aXQgdGhlIHByb2Nlc3MuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZXhpdCgpOiB2b2lkIHtcbiAgICBub29wKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaXNTdWNjZXNzZnVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHRhc2sgcmVzdWx0IGJhc2VkIG9uIGFuIGV4aXQgY29kZS5cbiAqL1xuY2xhc3MgRXhpdENvZGVUYXNrUmVzdWx0IGV4dGVuZHMgQ2xpVGFza1Jlc3VsdCB7XG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXIpIHtcbiAgICBzdXBlcigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4aXRzIHRoZSBwcm9jZXNzIHdpdGggdGhlIHNwZWNpZmllZCBleGl0IGNvZGUuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZXhpdCgpOiB2b2lkIHtcbiAgICBwcm9jZXNzLmV4aXQodGhpcy5leGl0Q29kZSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgaXNTdWNjZXNzZnVsKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4aXRDb2RlID09PSAwO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHRhc2sgcmVzdWx0IGJhc2VkIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZS5cbiAqL1xuY2xhc3MgU3VjY2Vzc1Rhc2tSZXN1bHQgZXh0ZW5kcyBDbGlUYXNrUmVzdWx0IHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX2lzU3VjY2Vzc2Z1bDogYm9vbGVhbikge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICAvKipcbiAgICogRXhpdHMgdGhlIHByb2Nlc3MgYmFzZWQgb24gdGhlIHN1Y2Nlc3Mgb2YgdGhlIHRhc2suXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZXhpdCgpOiB2b2lkIHtcbiAgICBwcm9jZXNzLmV4aXQodGhpcy5faXNTdWNjZXNzZnVsID8gMCA6IDEpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIGlzU3VjY2Vzc2Z1bCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdWNjZXNzZnVsO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydHMgYW4gYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBpbnRvIGEgc2luZ2xlIGNvbW1hbmQtbGluZSBzdHJpbmcuXG4gKiBIYW5kbGVzIGVzY2FwaW5nIG9mIHNwZWNpYWwgY2hhcmFjdGVycyBzdWNoIGFzIHNwYWNlcywgcXVvdGVzLCBhbmQgbmV3bGluZXMuXG4gKlxuICogQHBhcmFtIGFyZ3MgLSBUaGUgYXJyYXkgb2YgY29tbWFuZC1saW5lIGFyZ3VtZW50cyB0byBjb252ZXJ0LlxuICogQHJldHVybnMgQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjb21tYW5kLWxpbmUgaW52b2NhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQ29tbWFuZExpbmUoYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gYXJnc1xuICAgIC5tYXAoKGFyZykgPT4ge1xuICAgICAgaWYgKC9bXFxzXCJcXG5dLy50ZXN0KGFyZykpIHtcbiAgICAgICAgbGV0IGVzY2FwZWRBcmcgPSBhcmc7XG4gICAgICAgIGVzY2FwZWRBcmcgPSByZXBsYWNlQWxsKGVzY2FwZWRBcmcsIC9cIi9nLCAnXFxcXFwiJyk7XG4gICAgICAgIGVzY2FwZWRBcmcgPSByZXBsYWNlQWxsKGVzY2FwZWRBcmcsIC9cXG4vZywgJ1xcXFxuJyk7XG4gICAgICAgIHJldHVybiBgXCIke2VzY2FwZWRBcmd9XCJgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFyZztcbiAgICB9KVxuICAgIC5qb2luKCcgJyk7XG59XG5cbi8qKlxuICogV3JhcHMgYSBDTEkgdGFzayBmdW5jdGlvbiB0byBlbnN1cmUgaXQgcnVucyBzYWZlbHkgYW5kIGhhbmRsZXMgaXRzIHtAbGluayBDbGlUYXNrUmVzdWx0fS5cbiAqXG4gKiBAcGFyYW0gdGFza0ZuIC0gVGhlIHRhc2sgZnVuY3Rpb24gdG8gZXhlY3V0ZSwgd2hpY2ggbWF5IHJldHVybiBhIHtAbGluayBDbGlUYXNrUmVzdWx0fSBvciBgdm9pZGAuXG4gKiBAcmV0dXJucyBBIHtAbGluayBQcm9taXNlfSB0aGF0IHJlc29sdmVzIHdoZW4gdGhlIHRhc2sgaXMgY29tcGxldGVkIGFuZCBleGl0cyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzdGF0dXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3cmFwQ2xpVGFzayh0YXNrRm46ICgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KTogUHJvbWlzZTx2b2lkPiB7XG4gIGVuYWJsZUxpYnJhcnlEZWJ1Z2dlcnMoKTtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd3JhcFJlc3VsdCh0YXNrRm4pO1xuICByZXN1bHQuZXhpdCgpO1xufVxuXG4vKipcbiAqIFNhZmVseSBleGVjdXRlcyBhIHRhc2sgZnVuY3Rpb24gYW5kIHJldHVybnMgYSB7QGxpbmsgQ2xpVGFza1Jlc3VsdH0uIElmIHRoZSB0YXNrIGZ1bmN0aW9uIHRocm93cyBhbiBlcnJvcixcbiAqIHRoZSBlcnJvciBpcyBjYXVnaHQsIGFuZCBhIGZhaWx1cmUge0BsaW5rIENsaVRhc2tSZXN1bHR9IGlzIHJldHVybmVkLlxuICpcbiAqIEBwYXJhbSB0YXNrRm4gLSBUaGUgdGFzayBmdW5jdGlvbiB0byBleGVjdXRlLlxuICogQHJldHVybnMgQSB7QGxpbmsgUHJvbWlzZX0gdGhhdCByZXNvbHZlcyB3aXRoIGEge0BsaW5rIENsaVRhc2tSZXN1bHR9IHJlcHJlc2VudGluZyB0aGUgb3V0Y29tZSBvZiB0aGUgdGFzay5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd3JhcFJlc3VsdCh0YXNrRm46ICgpID0+IFByb21pc2FibGU8TWF5YmVSZXR1cm48Q2xpVGFza1Jlc3VsdD4+KTogUHJvbWlzZTxDbGlUYXNrUmVzdWx0PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCB0YXNrRm4oKSkgYXMgQ2xpVGFza1Jlc3VsdCB8IHVuZGVmaW5lZCA/PyBDbGlUYXNrUmVzdWx0LlN1Y2Nlc3MoKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwcmludEVycm9yKG5ldyBFcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHRhc2sgZXhlY3V0aW9uJywgeyBjYXVzZTogZXJyb3IgfSkpO1xuICAgIHJldHVybiBDbGlUYXNrUmVzdWx0LkZhaWx1cmUoKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0EsbUJBQXVDO0FBQ3ZDLG1CQUEyQjtBQUMzQixzQkFBcUI7QUFDckIsb0JBQTJCO0FBQzNCLHlCQUF3QjtBQU1qQixNQUFlLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9sQyxhQUFvQixNQUFNLE9BQWlGO0FBQ3pHLGVBQVcsUUFBUSxPQUFPO0FBQ3hCLFlBQU0sU0FBUyxNQUFNLFdBQVcsSUFBSTtBQUNwQyxVQUFJLENBQUMsT0FBTyxhQUFhLEdBQUc7QUFDMUIsZUFBTztBQUFBLE1BQ1Q7QUFBQSxJQUNGO0FBRUEsV0FBTyxjQUFjLFFBQVE7QUFBQSxFQUMvQjtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQU9BLE9BQWMsWUFBMkI7QUFDdkMsV0FBTyxJQUFJLG9CQUFvQjtBQUFBLEVBQ2pDO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBT0EsT0FBYyxVQUF5QjtBQUNyQyxXQUFPLEtBQUssUUFBUSxLQUFLO0FBQUEsRUFDM0I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQVFBLE9BQWMsYUFBYSxVQUFpQztBQUMxRCxXQUFPLElBQUksbUJBQW1CLFFBQVE7QUFBQSxFQUN4QztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBUUEsT0FBYyxRQUFRLFlBQVksTUFBcUI7QUFDckQsV0FBTyxJQUFJLGtCQUFrQixTQUFTO0FBQUEsRUFDeEM7QUFhRjtBQUtBLE1BQU0sNEJBQTRCLGNBQWM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUk5QixPQUFhO0FBQzNCLDhCQUFLO0FBQUEsRUFDUDtBQUFBLEVBRW1CLGVBQXdCO0FBQ3pDLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFLQSxNQUFNLDJCQUEyQixjQUFjO0FBQUEsRUFDdEMsWUFBNkIsVUFBa0I7QUFDcEQsVUFBTTtBQUQ0QjtBQUFBLEVBRXBDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLZ0IsT0FBYTtBQUMzQiwrQkFBUSxLQUFLLEtBQUssUUFBUTtBQUFBLEVBQzVCO0FBQUEsRUFFbUIsZUFBd0I7QUFDekMsV0FBTyxLQUFLLGFBQWE7QUFBQSxFQUMzQjtBQUNGO0FBS0EsTUFBTSwwQkFBMEIsY0FBYztBQUFBLEVBQ3JDLFlBQTZCLGVBQXdCO0FBQzFELFVBQU07QUFENEI7QUFBQSxFQUVwQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS2dCLE9BQWE7QUFDM0IsK0JBQVEsS0FBSyxLQUFLLGdCQUFnQixJQUFJLENBQUM7QUFBQSxFQUN6QztBQUFBLEVBRW1CLGVBQXdCO0FBQ3pDLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFDRjtBQVNPLFNBQVMsY0FBYyxNQUF3QjtBQUNwRCxTQUFPLEtBQ0osSUFBSSxDQUFDLFFBQVE7QUFDWixRQUFJLFVBQVUsS0FBSyxHQUFHLEdBQUc7QUFDdkIsVUFBSSxhQUFhO0FBQ2pCLHVCQUFhLDBCQUFXLFlBQVksTUFBTSxLQUFLO0FBQy9DLHVCQUFhLDBCQUFXLFlBQVksT0FBTyxLQUFLO0FBQ2hELGFBQU8sSUFBSSxVQUFVO0FBQUEsSUFDdkI7QUFDQSxXQUFPO0FBQUEsRUFDVCxDQUFDLEVBQ0EsS0FBSyxHQUFHO0FBQ2I7QUFRQSxlQUFzQixZQUFZLFFBQXFFO0FBQ3JHLDJDQUF1QjtBQUN2QixRQUFNLFNBQVMsTUFBTSxXQUFXLE1BQU07QUFDdEMsU0FBTyxLQUFLO0FBQ2Q7QUFTQSxlQUFlLFdBQVcsUUFBOEU7QUFDdEcsTUFBSTtBQUNGLFdBQVEsTUFBTSxPQUFPLEtBQW1DLGNBQWMsUUFBUTtBQUFBLEVBQ2hGLFNBQVMsT0FBTztBQUNkLGlDQUFXLElBQUksTUFBTSwyQ0FBMkMsRUFBRSxPQUFPLE1BQU0sQ0FBQyxDQUFDO0FBQ2pGLFdBQU8sY0FBYyxRQUFRO0FBQUEsRUFDL0I7QUFDRjsiLAogICJuYW1lcyI6IFtdCn0K