obsidian-integration-testing 9.2.2 → 10.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +45 -45
- package/dist/lib/cjs/appium-dependencies.cjs +5 -5
- package/dist/lib/cjs/appium-dependencies.d.cts +4 -2
- package/dist/lib/cjs/appium-session-config.cjs +1 -1
- package/dist/lib/cjs/asar-fallback-detection.cjs +4 -4
- package/dist/lib/cjs/asar-fallback-detection.d.cts +15 -7
- package/dist/lib/cjs/avd-list.cjs +1 -1
- package/dist/lib/cjs/avd-list.d.cts +6 -2
- package/dist/lib/cjs/cli.cjs +4 -4
- package/dist/lib/cjs/compatibility-options.cjs +13 -13
- package/dist/lib/cjs/compatibility-options.d.cts +24 -12
- package/dist/lib/cjs/connect-to-cdp.cjs +4 -4
- package/dist/lib/cjs/connect-to-cdp.d.cts +6 -6
- package/dist/lib/cjs/context-id.cjs +5 -5
- package/dist/lib/cjs/context-id.d.cts +1 -1
- package/dist/lib/cjs/context-provider.cjs +5 -5
- package/dist/lib/cjs/context-provider.d.cts +4 -4
- package/dist/lib/cjs/demo-vault-populate.cjs +5 -5
- package/dist/lib/cjs/demo-vault-populate.d.cts +4 -4
- package/dist/lib/cjs/demo-vault-tree.cjs +4 -4
- package/dist/lib/cjs/demo-vault-tree.d.cts +3 -3
- package/dist/lib/cjs/device-readiness.cjs +3 -3
- package/dist/lib/cjs/device-readiness.d.cts +7 -3
- package/dist/lib/cjs/ecmascript-version.cjs +1 -1
- package/dist/lib/cjs/electron-compatibility.cjs +4 -4
- package/dist/lib/cjs/electron-compatibility.d.cts +33 -17
- package/dist/lib/cjs/emulator-arguments.cjs +36 -0
- package/dist/lib/{esm/emulator-args.d.mts → cjs/emulator-arguments.d.cts} +6 -4
- package/dist/lib/cjs/enable-plugin.cjs +29 -29
- package/dist/lib/cjs/enable-plugin.d.cts +6 -6
- package/dist/lib/cjs/eval-in-obsidian.cjs +9 -9
- package/dist/lib/cjs/eval-in-obsidian.d.cts +23 -23
- package/dist/lib/cjs/exec.cjs +49 -53
- package/dist/lib/cjs/exec.d.cts +9 -9
- package/dist/lib/cjs/function-expression.cjs +8 -8
- package/dist/lib/cjs/function-expression.d.cts +4 -4
- package/dist/lib/cjs/generate-function-call.cjs +6 -6
- package/dist/lib/cjs/generate-function-call.d.cts +15 -9
- package/dist/lib/cjs/global-setup-core.cjs +43 -43
- package/dist/lib/cjs/global-setup-core.d.cts +19 -9
- package/dist/lib/cjs/incompatible-installer-version-error.cjs +10 -4
- package/dist/lib/cjs/incompatible-installer-version-error.d.cts +18 -6
- package/dist/lib/cjs/index.cjs +10 -10
- package/dist/lib/cjs/index.d.cts +8 -8
- package/dist/lib/cjs/installer-asset.cjs +4 -4
- package/dist/lib/cjs/installer-asset.d.cts +21 -7
- package/dist/lib/cjs/installer-compatibility.cjs +4 -4
- package/dist/lib/cjs/installer-compatibility.d.cts +36 -18
- package/dist/lib/cjs/jest/global-setup-no-plugin.cjs +3 -3
- package/dist/lib/cjs/jest/global-setup-no-plugin.d.cts +1 -1
- package/dist/lib/cjs/jest/global-setup.cjs +11 -11
- package/dist/lib/cjs/jest/global-setup.d.cts +12 -8
- package/dist/lib/cjs/jest/global-teardown-no-plugin.cjs +2 -3
- package/dist/lib/cjs/jest/global-teardown-no-plugin.d.cts +1 -2
- package/dist/lib/cjs/jest/global-teardown.cjs +2 -3
- package/dist/lib/cjs/jest/global-teardown.d.cts +1 -2
- package/dist/lib/cjs/jest/setup.cjs +2 -2
- package/dist/lib/cjs/jest/setup.d.cts +1 -1
- package/dist/lib/cjs/json-with-functions.cjs +7 -7
- package/dist/lib/cjs/leftover-cleanup.cjs +14 -14
- package/dist/lib/cjs/leftover-cleanup.d.cts +42 -20
- package/dist/lib/cjs/library.cjs +2 -2
- package/dist/lib/cjs/namespace-bootstrap.cjs +46 -40
- package/dist/lib/cjs/native-dialog-monitor.cjs +15 -13
- package/dist/lib/cjs/normalize-optional-properties.cjs +3 -3
- package/dist/lib/cjs/normalize-optional-properties.d.cts +2 -2
- package/dist/lib/cjs/obsidian-config.cjs +30 -31
- package/dist/lib/cjs/obsidian-config.d.cts +8 -8
- package/dist/lib/cjs/obsidian-executable.cjs +2 -2
- package/dist/lib/cjs/obsidian-installer.cjs +37 -37
- package/dist/lib/cjs/obsidian-installer.d.cts +7 -3
- package/dist/lib/cjs/obsidian-instance.cjs +3 -3
- package/dist/lib/cjs/obsidian-instance.d.cts +18 -8
- package/dist/lib/cjs/obsidian-metadata.cjs +1 -1
- package/dist/lib/cjs/obsidian-metadata.d.cts +36 -12
- package/dist/lib/cjs/obsidian-namespace.cjs +1 -1
- package/dist/lib/cjs/obsidian-namespace.d.cts +25 -11
- package/dist/lib/cjs/obsidian-version-switch.cjs +9 -9
- package/dist/lib/cjs/obsidian-version-switch.d.cts +14 -10
- package/dist/lib/cjs/obsidian-version.cjs +3 -3
- package/dist/lib/cjs/obsidian-version.d.cts +15 -5
- package/dist/lib/cjs/owned-vault-seed.cjs +1 -1
- package/dist/lib/cjs/owned-vault-seed.d.cts +24 -8
- package/dist/lib/cjs/parent-liveness.cjs +4 -4
- package/dist/lib/cjs/parent-liveness.d.cts +7 -3
- package/dist/lib/cjs/poll-in-obsidian.cjs +5 -5
- package/dist/lib/cjs/poll-in-obsidian.d.cts +12 -12
- package/dist/lib/cjs/poll-until.cjs +1 -1
- package/dist/lib/cjs/poll-until.d.cts +21 -7
- package/dist/lib/cjs/process-exit-message.cjs +1 -1
- package/dist/lib/cjs/process-exit-message.d.cts +21 -7
- package/dist/lib/cjs/renderer-boot-detection.cjs +9 -9
- package/dist/lib/cjs/renderer-boot-detection.d.cts +31 -27
- package/dist/lib/cjs/renderer-failed-to-initialize-error.cjs +1 -1
- package/dist/lib/cjs/renderer-failed-to-initialize-error.d.cts +1 -1
- package/dist/lib/cjs/setup-lock.cjs +26 -26
- package/dist/lib/cjs/setup-lock.d.cts +6 -2
- package/dist/lib/cjs/silent-asar-fallback-error.cjs +7 -3
- package/dist/lib/cjs/silent-asar-fallback-error.d.cts +12 -4
- package/dist/lib/cjs/spawn-options.cjs +1 -1
- package/dist/lib/cjs/spawn-options.d.cts +3 -1
- package/dist/lib/cjs/strict-proxy.cjs +25 -25
- package/dist/lib/cjs/strict-proxy.d.cts +3 -3
- package/dist/lib/cjs/temporary-vault.cjs +166 -0
- package/dist/lib/cjs/{temp-vault.d.cts → temporary-vault.d.cts} +3 -3
- package/dist/lib/cjs/transport-appium.cjs +7 -7
- package/dist/lib/cjs/transport-appium.d.cts +7 -3
- package/dist/lib/cjs/transport-desktop-cdp.cjs +57 -57
- package/dist/lib/cjs/transport-desktop-cdp.d.cts +29 -17
- package/dist/lib/cjs/transport-factory.cjs +62 -63
- package/dist/lib/cjs/type-guards.cjs +3 -3
- package/dist/lib/cjs/type-guards.d.cts +2 -2
- package/dist/lib/cjs/vault-path-match.cjs +9 -9
- package/dist/lib/cjs/vault-path-match.d.cts +11 -11
- package/dist/lib/cjs/version-matrix.cjs +1 -1
- package/dist/lib/cjs/version-matrix.d.cts +51 -17
- package/dist/lib/cjs/visibility.cjs +7 -7
- package/dist/lib/cjs/visibility.d.cts +5 -5
- package/dist/lib/cjs/vitest/global-setup-no-plugin.cjs +3 -3
- package/dist/lib/cjs/vitest/global-setup-no-plugin.d.cts +2 -2
- package/dist/lib/cjs/vitest/global-setup.cjs +9 -9
- package/dist/lib/cjs/vitest/global-setup.d.cts +4 -4
- package/dist/lib/cjs/vitest/setup.cjs +2 -2
- package/dist/lib/cjs/vitest/typings.d.cts +2 -2
- package/dist/lib/esm/appium-dependencies.d.mts +4 -2
- package/dist/lib/esm/appium-dependencies.mjs +4 -4
- package/dist/lib/esm/appium-session-config.mjs +1 -1
- package/dist/lib/esm/asar-fallback-detection.d.mts +15 -7
- package/dist/lib/esm/asar-fallback-detection.mjs +3 -3
- package/dist/lib/esm/avd-list.d.mts +6 -2
- package/dist/lib/esm/avd-list.mjs +1 -1
- package/dist/lib/esm/cli.mjs +4 -4
- package/dist/lib/esm/compatibility-options.d.mts +24 -12
- package/dist/lib/esm/compatibility-options.mjs +10 -10
- package/dist/lib/esm/connect-to-cdp.d.mts +6 -6
- package/dist/lib/esm/connect-to-cdp.mjs +6 -6
- package/dist/lib/esm/context-id.d.mts +1 -1
- package/dist/lib/esm/context-id.mjs +5 -5
- package/dist/lib/esm/context-provider.d.mts +4 -4
- package/dist/lib/esm/context-provider.mjs +5 -5
- package/dist/lib/esm/demo-vault-populate.d.mts +4 -4
- package/dist/lib/esm/demo-vault-populate.mjs +5 -5
- package/dist/lib/esm/demo-vault-tree.d.mts +3 -3
- package/dist/lib/esm/demo-vault-tree.mjs +4 -4
- package/dist/lib/esm/device-readiness.d.mts +7 -3
- package/dist/lib/esm/device-readiness.mjs +3 -3
- package/dist/lib/esm/ecmascript-version.mjs +1 -1
- package/dist/lib/esm/electron-compatibility.d.mts +33 -17
- package/dist/lib/esm/electron-compatibility.mjs +3 -3
- package/dist/lib/{cjs/emulator-args.d.cts → esm/emulator-arguments.d.mts} +6 -4
- package/dist/lib/esm/emulator-arguments.mjs +12 -0
- package/dist/lib/esm/enable-plugin.d.mts +6 -6
- package/dist/lib/esm/enable-plugin.mjs +29 -29
- package/dist/lib/esm/eval-in-obsidian.d.mts +23 -23
- package/dist/lib/esm/eval-in-obsidian.mjs +9 -9
- package/dist/lib/esm/exec.d.mts +9 -9
- package/dist/lib/esm/exec.mjs +49 -53
- package/dist/lib/esm/function-expression.d.mts +4 -4
- package/dist/lib/esm/function-expression.mjs +8 -8
- package/dist/lib/esm/generate-function-call.d.mts +15 -9
- package/dist/lib/esm/generate-function-call.mjs +6 -6
- package/dist/lib/esm/global-setup-core.d.mts +19 -9
- package/dist/lib/esm/global-setup-core.mjs +45 -45
- package/dist/lib/esm/incompatible-installer-version-error.d.mts +18 -6
- package/dist/lib/esm/incompatible-installer-version-error.mjs +10 -4
- package/dist/lib/esm/index.d.mts +8 -8
- package/dist/lib/esm/index.mjs +9 -9
- package/dist/lib/esm/installer-asset.d.mts +21 -7
- package/dist/lib/esm/installer-asset.mjs +4 -4
- package/dist/lib/esm/installer-compatibility.d.mts +36 -18
- package/dist/lib/esm/installer-compatibility.mjs +3 -3
- package/dist/lib/esm/jest/global-setup-no-plugin.d.mts +1 -1
- package/dist/lib/esm/jest/global-setup-no-plugin.mjs +3 -3
- package/dist/lib/esm/jest/global-setup.d.mts +12 -8
- package/dist/lib/esm/jest/global-setup.mjs +10 -10
- package/dist/lib/esm/jest/global-teardown-no-plugin.d.mts +1 -2
- package/dist/lib/esm/jest/global-teardown-no-plugin.mjs +2 -3
- package/dist/lib/esm/jest/global-teardown.d.mts +1 -2
- package/dist/lib/esm/jest/global-teardown.mjs +2 -3
- package/dist/lib/esm/jest/setup.d.mts +1 -1
- package/dist/lib/esm/jest/setup.mjs +2 -2
- package/dist/lib/esm/json-with-functions.mjs +7 -7
- package/dist/lib/esm/leftover-cleanup.d.mts +42 -20
- package/dist/lib/esm/leftover-cleanup.mjs +12 -12
- package/dist/lib/esm/library.mjs +2 -2
- package/dist/lib/esm/namespace-bootstrap.mjs +46 -40
- package/dist/lib/esm/native-dialog-monitor.mjs +15 -13
- package/dist/lib/esm/normalize-optional-properties.d.mts +2 -2
- package/dist/lib/esm/normalize-optional-properties.mjs +3 -3
- package/dist/lib/esm/obsidian-config.d.mts +8 -8
- package/dist/lib/esm/obsidian-config.mjs +27 -28
- package/dist/lib/esm/obsidian-executable.mjs +2 -2
- package/dist/lib/esm/obsidian-installer.d.mts +7 -3
- package/dist/lib/esm/obsidian-installer.mjs +36 -36
- package/dist/lib/esm/obsidian-instance.d.mts +18 -8
- package/dist/lib/esm/obsidian-instance.mjs +3 -3
- package/dist/lib/esm/obsidian-metadata.d.mts +36 -12
- package/dist/lib/esm/obsidian-metadata.mjs +1 -1
- package/dist/lib/esm/obsidian-namespace.d.mts +25 -11
- package/dist/lib/esm/obsidian-version-switch.d.mts +14 -10
- package/dist/lib/esm/obsidian-version-switch.mjs +9 -9
- package/dist/lib/esm/obsidian-version.d.mts +15 -5
- package/dist/lib/esm/obsidian-version.mjs +3 -3
- package/dist/lib/esm/owned-vault-seed.d.mts +24 -8
- package/dist/lib/esm/owned-vault-seed.mjs +1 -1
- package/dist/lib/esm/parent-liveness.d.mts +7 -3
- package/dist/lib/esm/parent-liveness.mjs +3 -3
- package/dist/lib/esm/poll-in-obsidian.d.mts +12 -12
- package/dist/lib/esm/poll-in-obsidian.mjs +5 -5
- package/dist/lib/esm/poll-until.d.mts +21 -7
- package/dist/lib/esm/poll-until.mjs +1 -1
- package/dist/lib/esm/process-exit-message.d.mts +21 -7
- package/dist/lib/esm/process-exit-message.mjs +1 -1
- package/dist/lib/esm/renderer-boot-detection.d.mts +31 -27
- package/dist/lib/esm/renderer-boot-detection.mjs +7 -7
- package/dist/lib/esm/renderer-failed-to-initialize-error.d.mts +1 -1
- package/dist/lib/esm/renderer-failed-to-initialize-error.mjs +1 -1
- package/dist/lib/esm/setup-lock.d.mts +6 -2
- package/dist/lib/esm/setup-lock.mjs +26 -26
- package/dist/lib/esm/silent-asar-fallback-error.d.mts +12 -4
- package/dist/lib/esm/silent-asar-fallback-error.mjs +7 -3
- package/dist/lib/esm/spawn-options.d.mts +3 -1
- package/dist/lib/esm/spawn-options.mjs +1 -1
- package/dist/lib/esm/strict-proxy.d.mts +3 -3
- package/dist/lib/esm/strict-proxy.mjs +25 -25
- package/dist/lib/esm/{temp-vault.d.mts → temporary-vault.d.mts} +3 -3
- package/dist/lib/esm/temporary-vault.mjs +157 -0
- package/dist/lib/esm/transport-appium.d.mts +7 -3
- package/dist/lib/esm/transport-appium.mjs +7 -7
- package/dist/lib/esm/transport-desktop-cdp.d.mts +29 -17
- package/dist/lib/esm/transport-desktop-cdp.mjs +67 -67
- package/dist/lib/esm/transport-factory.mjs +71 -72
- package/dist/lib/esm/type-guards.d.mts +2 -2
- package/dist/lib/esm/type-guards.mjs +3 -3
- package/dist/lib/esm/vault-path-match.d.mts +11 -11
- package/dist/lib/esm/vault-path-match.mjs +7 -7
- package/dist/lib/esm/version-matrix.d.mts +51 -17
- package/dist/lib/esm/version-matrix.mjs +1 -1
- package/dist/lib/esm/visibility.d.mts +5 -5
- package/dist/lib/esm/visibility.mjs +5 -5
- package/dist/lib/esm/vitest/global-setup-no-plugin.d.mts +2 -2
- package/dist/lib/esm/vitest/global-setup-no-plugin.mjs +3 -3
- package/dist/lib/esm/vitest/global-setup.d.mts +4 -4
- package/dist/lib/esm/vitest/global-setup.mjs +8 -8
- package/dist/lib/esm/vitest/setup.mjs +2 -2
- package/dist/lib/esm/vitest/typings.d.mts +2 -2
- package/dist/obsidian-integration-testing-10.0.0.tgz +0 -0
- package/package.json +15 -13
- package/dist/lib/cjs/emulator-args.cjs +0 -36
- package/dist/lib/cjs/temp-vault.cjs +0 -166
- package/dist/lib/esm/emulator-args.mjs +0 -12
- package/dist/lib/esm/temp-vault.mjs +0 -157
- package/dist/obsidian-integration-testing-9.2.2.tgz +0 -0
|
@@ -28,24 +28,42 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
29
29
|
var obsidian_config_exports = {};
|
|
30
30
|
__export(obsidian_config_exports, {
|
|
31
|
-
|
|
31
|
+
didRemoveVaultFromConfig: () => didRemoveVaultFromConfig,
|
|
32
|
+
getObsidianConfigDirectory: () => getObsidianConfigDirectory,
|
|
32
33
|
getVaultId: () => getVaultId,
|
|
33
|
-
isVaultRegistered: () => isVaultRegistered
|
|
34
|
-
removeVaultFromConfig: () => removeVaultFromConfig
|
|
34
|
+
isVaultRegistered: () => isVaultRegistered
|
|
35
35
|
});
|
|
36
36
|
module.exports = __toCommonJS(obsidian_config_exports);
|
|
37
37
|
var import_node_fs = require("node:fs");
|
|
38
38
|
var import_node_os = require("node:os");
|
|
39
39
|
var import_node_path = require("node:path");
|
|
40
40
|
var import_node_process = __toESM(require("node:process"), 1);
|
|
41
|
-
function
|
|
41
|
+
function didRemoveVaultFromConfig(vaultPath) {
|
|
42
|
+
const config = readObsidianJson();
|
|
43
|
+
if (!config) {
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
const normalizedTarget = normalizePath(vaultPath);
|
|
47
|
+
let wasFound = false;
|
|
48
|
+
for (const [id, entry] of Object.entries(config.vaults)) {
|
|
49
|
+
if (normalizePath(entry.path) === normalizedTarget) {
|
|
50
|
+
delete config.vaults[id];
|
|
51
|
+
wasFound = true;
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (wasFound) {
|
|
56
|
+
writeObsidianJson(config);
|
|
57
|
+
}
|
|
58
|
+
return wasFound;
|
|
59
|
+
}
|
|
60
|
+
function getObsidianConfigDirectory() {
|
|
42
61
|
if (import_node_process.default.platform === "win32") {
|
|
43
62
|
const appData = import_node_process.default.env["APPDATA"];
|
|
44
63
|
if (appData) {
|
|
45
64
|
return (0, import_node_path.join)(appData, "obsidian");
|
|
46
65
|
}
|
|
47
|
-
}
|
|
48
|
-
if (import_node_process.default.platform === "darwin") {
|
|
66
|
+
} else if (import_node_process.default.platform === "darwin") {
|
|
49
67
|
return (0, import_node_path.join)((0, import_node_os.homedir)(), "Library", "Application Support", "obsidian");
|
|
50
68
|
}
|
|
51
69
|
return (0, import_node_path.join)(import_node_process.default.env["XDG_CONFIG_HOME"] ?? (0, import_node_path.join)((0, import_node_os.homedir)(), ".config"), "obsidian");
|
|
@@ -66,31 +84,12 @@ function getVaultId(vaultPath) {
|
|
|
66
84
|
function isVaultRegistered(vaultPath) {
|
|
67
85
|
return getVaultId(vaultPath) !== void 0;
|
|
68
86
|
}
|
|
69
|
-
function removeVaultFromConfig(vaultPath) {
|
|
70
|
-
const config = readObsidianJson();
|
|
71
|
-
if (!config) {
|
|
72
|
-
return false;
|
|
73
|
-
}
|
|
74
|
-
const normalizedTarget = normalizePath(vaultPath);
|
|
75
|
-
let wasFound = false;
|
|
76
|
-
for (const [id, entry] of Object.entries(config.vaults)) {
|
|
77
|
-
if (normalizePath(entry.path) === normalizedTarget) {
|
|
78
|
-
delete config.vaults[id];
|
|
79
|
-
wasFound = true;
|
|
80
|
-
break;
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
if (wasFound) {
|
|
84
|
-
writeObsidianJson(config);
|
|
85
|
-
}
|
|
86
|
-
return wasFound;
|
|
87
|
-
}
|
|
88
87
|
function normalizePath(vaultPath) {
|
|
89
88
|
const resolved = (0, import_node_path.resolve)(vaultPath);
|
|
90
89
|
return import_node_process.default.platform === "win32" ? resolved.toLowerCase() : resolved;
|
|
91
90
|
}
|
|
92
91
|
function readObsidianJson() {
|
|
93
|
-
const configPath = (0, import_node_path.join)(
|
|
92
|
+
const configPath = (0, import_node_path.join)(getObsidianConfigDirectory(), "obsidian.json");
|
|
94
93
|
try {
|
|
95
94
|
const content = (0, import_node_fs.readFileSync)(configPath, "utf-8");
|
|
96
95
|
return JSON.parse(content);
|
|
@@ -99,14 +98,14 @@ function readObsidianJson() {
|
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
100
|
function writeObsidianJson(config) {
|
|
102
|
-
const configPath = (0, import_node_path.join)(
|
|
101
|
+
const configPath = (0, import_node_path.join)(getObsidianConfigDirectory(), "obsidian.json");
|
|
103
102
|
(0, import_node_fs.writeFileSync)(configPath, JSON.stringify(config));
|
|
104
103
|
}
|
|
105
104
|
// Annotate the CommonJS export names for ESM import in node:
|
|
106
105
|
0 && (module.exports = {
|
|
107
|
-
|
|
106
|
+
didRemoveVaultFromConfig,
|
|
107
|
+
getObsidianConfigDirectory,
|
|
108
108
|
getVaultId,
|
|
109
|
-
isVaultRegistered
|
|
110
|
-
removeVaultFromConfig
|
|
109
|
+
isVaultRegistered
|
|
111
110
|
});
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFJlYWRzIGFuZCBxdWVyaWVzIHRoZSB1c2VyJ3MgT2JzaWRpYW4gbG9jYWwgY29uZmlndXJhdGlvbiAoYG9ic2lkaWFuLmpzb25gKS5cbiAqXG4gKiBVc2VkIGJ5IHRoZSBDRFAgdHJhbnNwb3J0J3MgKiphdHRhY2gqKiBtb2RlICh0YXJnZXRpbmcgYW4gYWxyZWFkeS1ydW5uaW5nLFxuICogdXNlci1zY29wZSBPYnNpZGlhbikuIEhhcm5lc3Mtb3duZWQgaXNvbGF0ZWQgaW5zdGFuY2VzIHdyaXRlIHRoZWlyIG93blxuICogYG9ic2lkaWFuLmpzb25gIGRpcmVjdGx5IGludG8gYSB0ZW1wb3JhcnkgdXNlci1kYXRhIGRpciBhbmQgZG8gbm90IHVzZSB0aGVzZVxuICogaGVscGVycy5cbiAqL1xuXG5pbXBvcnQge1xuICByZWFkRmlsZVN5bmMsXG4gIHdyaXRlRmlsZVN5bmNcbn0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBob21lZGlyIH0gZnJvbSAnbm9kZTpvcyc7XG5pbXBvcnQge1xuICBqb2luLFxuICByZXNvbHZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG4vKipcbiAqIFRoZSB0b3AtbGV2ZWwgc3RydWN0dXJlIG9mIE9ic2lkaWFuJ3MgYG9ic2lkaWFuLmpzb25gIGNvbmZpZyBmaWxlLlxuICovXG5pbnRlcmZhY2UgT2JzaWRpYW5Kc29uIHtcbiAgLyoqXG4gICAqIE1hcCBvZiB2YXVsdCBJRHMgdG8gdmF1bHQgZW50cmllcy5cbiAgICovXG4gIHZhdWx0czogUmVjb3JkPHN0cmluZywgT2JzaWRpYW5WYXVsdEVudHJ5Pjtcbn1cblxuLyoqXG4gKiBBIHNpbmdsZSB2YXVsdCBlbnRyeSBpbiBgb2JzaWRpYW4uanNvbmAuXG4gKi9cbmludGVyZmFjZSBPYnNpZGlhblZhdWx0RW50cnkge1xuICAvKipcbiAgICogVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIHZhdWx0IGZvbGRlci5cbiAgICovXG4gIHBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogVGltZXN0YW1wIG9mIHRoZSBsYXN0IGFjY2Vzcy5cbiAgICovXG4gIHRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhIHZhdWx0IGVudHJ5IGZyb20gT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgY29uZmlnIGZpbGUuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHZhdWx0IHdhcyBmb3VuZCBhbmQgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWRSZW1vdmVWYXVsdEZyb21Db25maWcodmF1bHRQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgY29uZmlnID0gcmVhZE9ic2lkaWFuSnNvbigpO1xuICBpZiAoIWNvbmZpZykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemVQYXRoKHZhdWx0UGF0aCk7XG4gIGxldCB3YXNGb3VuZCA9IGZhbHNlO1xuXG4gIGZvciAoY29uc3QgW2lkLCBlbnRyeV0gb2YgT2JqZWN0LmVudHJpZXMoY29uZmlnLnZhdWx0cykpIHtcbiAgICBpZiAobm9ybWFsaXplUGF0aChlbnRyeS5wYXRoKSA9PT0gbm9ybWFsaXplZFRhcmdldCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZSAtLSBSZW1vdmluZyBhIHZhdWx0IGVudHJ5IGJ5IGl0cyBkeW5hbWljIGtleS5cbiAgICAgIGRlbGV0ZSBjb25maWcudmF1bHRzW2lkXTtcbiAgICAgIHdhc0ZvdW5kID0gdHJ1ZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmICh3YXNGb3VuZCkge1xuICAgIHdyaXRlT2JzaWRpYW5Kc29uKGNvbmZpZyk7XG4gIH1cblxuICByZXR1cm4gd2FzRm91bmQ7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgcGF0aCB0byB0aGUgKip1c2VyJ3MqKiBPYnNpZGlhbiBjb25maWcgKHVzZXItZGF0YSlcbiAqIGRpcmVjdG9yeSBcdTIwMTQgYCVBUFBEQVRBJVxcb2JzaWRpYW5gIG9uIFdpbmRvd3MsIGB+L0xpYnJhcnkvQXBwbGljYXRpb24gU3VwcG9ydC9vYnNpZGlhbmBcbiAqIG9uIG1hY09TLCBgJFhER19DT05GSUdfSE9NRS9vYnNpZGlhbmAgKG9yIGB+Ly5jb25maWcvb2JzaWRpYW5gKSBvbiBMaW51eC5cbiAqXG4gKiBUaGlzIGlzIHRoZSB1c2VyLXNjb3BlIGRpcmVjdG9yeTsgaGFybmVzcy1vd25lZCBpc29sYXRlZCBpbnN0YW5jZXMgdXNlIHRoZWlyXG4gKiBvd24gdGVtcG9yYXJ5IHVzZXItZGF0YSBkaXIgaW5zdGVhZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgYG9ic2lkaWFuL2AgY29uZmlnIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE9ic2lkaWFuQ29uZmlnRGlyZWN0b3J5KCk6IHN0cmluZyB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgY29uc3QgYXBwRGF0YSA9IHByb2Nlc3MuZW52WydBUFBEQVRBJ107XG4gICAgaWYgKGFwcERhdGEpIHtcbiAgICAgIHJldHVybiBqb2luKGFwcERhdGEsICdvYnNpZGlhbicpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBqb2luKGhvbWVkaXIoKSwgJ0xpYnJhcnknLCAnQXBwbGljYXRpb24gU3VwcG9ydCcsICdvYnNpZGlhbicpO1xuICB9XG5cbiAgcmV0dXJuIGpvaW4ocHJvY2Vzcy5lbnZbJ1hER19DT05GSUdfSE9NRSddID8/IGpvaW4oaG9tZWRpcigpLCAnLmNvbmZpZycpLCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBoZXggdmF1bHQgSUQgZm9yIGEgZ2l2ZW4gdmF1bHQgcGF0aCBmcm9tIE9ic2lkaWFuJ3MgcmVnaXN0cnkuXG4gKlxuICogQHBhcmFtIHZhdWx0UGF0aCAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSB2YXVsdCBmb2xkZXIuXG4gKiBAcmV0dXJucyBUaGUgdmF1bHQgSUQsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSB2YXVsdCBpcyBub3QgcmVnaXN0ZXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFZhdWx0SWQodmF1bHRQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBjb25maWcgPSByZWFkT2JzaWRpYW5Kc29uKCk7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IG5vcm1hbGl6ZWRUYXJnZXQgPSBub3JtYWxpemVQYXRoKHZhdWx0UGF0aCk7XG5cbiAgZm9yIChjb25zdCBbaWQsIGVudHJ5XSBvZiBPYmplY3QuZW50cmllcyhjb25maWcudmF1bHRzKSkge1xuICAgIGlmIChub3JtYWxpemVQYXRoKGVudHJ5LnBhdGgpID09PSBub3JtYWxpemVkVGFyZ2V0KSB7XG4gICAgICByZXR1cm4gaWQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHZhdWx0IHBhdGggaXMgcmVnaXN0ZXJlZCBpbiBPYnNpZGlhbidzIHZhdWx0IHJlZ2lzdHJ5LlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgdmF1bHQgZm9sZGVyLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSB2YXVsdCBpcyByZWdpc3RlcmVkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmF1bHRSZWdpc3RlcmVkKHZhdWx0UGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBnZXRWYXVsdElkKHZhdWx0UGF0aCkgIT09IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgdmF1bHQgcGF0aCBmb3IgY29tcGFyaXNvbi5cbiAqIE9uIFdpbmRvd3MsIHBhdGhzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIGFuZCBzZXBhcmF0b3JzIG1heSB2YXJ5LlxuICpcbiAqIEBwYXJhbSB2YXVsdFBhdGggLSBUaGUgcGF0aCB0byBub3JtYWxpemUuXG4gKiBAcmV0dXJucyBUaGUgbm9ybWFsaXplZCBwYXRoLlxuICovXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHZhdWx0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHZhdWx0UGF0aCk7XG4gIHJldHVybiBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gcmVzb2x2ZWQudG9Mb3dlckNhc2UoKSA6IHJlc29sdmVkO1xufVxuXG4vKipcbiAqIFJlYWRzIGFuZCBwYXJzZXMgT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgY29uZmlnIGZpbGUuXG4gKlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBjb25maWcsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgY2FuJ3QgYmUgcGFyc2VkLlxuICovXG5mdW5jdGlvbiByZWFkT2JzaWRpYW5Kc29uKCk6IE9ic2lkaWFuSnNvbiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBqb2luKGdldE9ic2lkaWFuQ29uZmlnRGlyZWN0b3J5KCksICdvYnNpZGlhbi5qc29uJyk7XG4gIHRyeSB7XG4gICAgY29uc3QgY29udGVudCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShjb250ZW50KSBhcyBPYnNpZGlhbkpzb247XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgdGhlIGdpdmVuIGNvbmZpZyBvYmplY3QgdG8gT2JzaWRpYW4ncyBgb2JzaWRpYW4uanNvbmAgZmlsZS5cbiAqXG4gKiBAcGFyYW0gY29uZmlnIC0gVGhlIGNvbmZpZyB0byB3cml0ZS5cbiAqL1xuZnVuY3Rpb24gd3JpdGVPYnNpZGlhbkpzb24oY29uZmlnOiBPYnNpZGlhbkpzb24pOiB2b2lkIHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IGpvaW4oZ2V0T2JzaWRpYW5Db25maWdEaXJlY3RvcnkoKSwgJ29ic2lkaWFuLmpzb24nKTtcbiAgd3JpdGVGaWxlU3luYyhjb25maWdQYXRoLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBV0EscUJBR087QUFDUCxxQkFBd0I7QUFDeEIsdUJBR087QUFDUCwwQkFBb0I7QUFpQ2IsU0FBUyx5QkFBeUIsV0FBNEI7QUFDbkUsUUFBTSxTQUFTLGlCQUFpQjtBQUNoQyxNQUFJLENBQUMsUUFBUTtBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxtQkFBbUIsY0FBYyxTQUFTO0FBQ2hELE1BQUksV0FBVztBQUVmLGFBQVcsQ0FBQyxJQUFJLEtBQUssS0FBSyxPQUFPLFFBQVEsT0FBTyxNQUFNLEdBQUc7QUFDdkQsUUFBSSxjQUFjLE1BQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUVsRCxhQUFPLE9BQU8sT0FBTyxFQUFFO0FBQ3ZCLGlCQUFXO0FBQ1g7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUVBLE1BQUksVUFBVTtBQUNaLHNCQUFrQixNQUFNO0FBQUEsRUFDMUI7QUFFQSxTQUFPO0FBQ1Q7QUFZTyxTQUFTLDZCQUFxQztBQUNuRCxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNoQyxVQUFNLFVBQVUsb0JBQUFBLFFBQVEsSUFBSSxTQUFTO0FBQ3JDLFFBQUksU0FBUztBQUNYLGlCQUFPLHVCQUFLLFNBQVMsVUFBVTtBQUFBLElBQ2pDO0FBQUEsRUFDRixXQUFXLG9CQUFBQSxRQUFRLGFBQWEsVUFBVTtBQUN4QyxlQUFPLDJCQUFLLHdCQUFRLEdBQUcsV0FBVyx1QkFBdUIsVUFBVTtBQUFBLEVBQ3JFO0FBRUEsYUFBTyx1QkFBSyxvQkFBQUEsUUFBUSxJQUFJLGlCQUFpQixTQUFLLDJCQUFLLHdCQUFRLEdBQUcsU0FBUyxHQUFHLFVBQVU7QUFDdEY7QUFRTyxTQUFTLFdBQVcsV0FBdUM7QUFDaEUsUUFBTSxTQUFTLGlCQUFpQjtBQUNoQyxNQUFJLENBQUMsUUFBUTtBQUNYLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxtQkFBbUIsY0FBYyxTQUFTO0FBRWhELGFBQVcsQ0FBQyxJQUFJLEtBQUssS0FBSyxPQUFPLFFBQVEsT0FBTyxNQUFNLEdBQUc7QUFDdkQsUUFBSSxjQUFjLE1BQU0sSUFBSSxNQUFNLGtCQUFrQjtBQUNsRCxhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFFQSxTQUFPO0FBQ1Q7QUFRTyxTQUFTLGtCQUFrQixXQUE0QjtBQUM1RCxTQUFPLFdBQVcsU0FBUyxNQUFNO0FBQ25DO0FBU0EsU0FBUyxjQUFjLFdBQTJCO0FBQ2hELFFBQU0sZUFBVywwQkFBUSxTQUFTO0FBQ2xDLFNBQU8sb0JBQUFBLFFBQVEsYUFBYSxVQUFVLFNBQVMsWUFBWSxJQUFJO0FBQ2pFO0FBT0EsU0FBUyxtQkFBNkM7QUFDcEQsUUFBTSxpQkFBYSx1QkFBSywyQkFBMkIsR0FBRyxlQUFlO0FBQ3JFLE1BQUk7QUFDRixVQUFNLGNBQVUsNkJBQWEsWUFBWSxPQUFPO0FBQ2hELFdBQU8sS0FBSyxNQUFNLE9BQU87QUFBQSxFQUMzQixRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFDRjtBQU9BLFNBQVMsa0JBQWtCLFFBQTRCO0FBQ3JELFFBQU0saUJBQWEsdUJBQUssMkJBQTJCLEdBQUcsZUFBZTtBQUNyRSxvQ0FBYyxZQUFZLEtBQUssVUFBVSxNQUFNLENBQUM7QUFDbEQ7IiwKICAibmFtZXMiOiBbInByb2Nlc3MiXQp9Cg==
|
|
@@ -8,6 +8,13 @@
|
|
|
8
8
|
* `obsidian.json` directly into a temporary user-data dir and do not use these
|
|
9
9
|
* helpers.
|
|
10
10
|
*/
|
|
11
|
+
/**
|
|
12
|
+
* Removes a vault entry from Obsidian's `obsidian.json` config file.
|
|
13
|
+
*
|
|
14
|
+
* @param vaultPath - The absolute path to the vault folder.
|
|
15
|
+
* @returns `true` if the vault was found and removed, `false` otherwise.
|
|
16
|
+
*/
|
|
17
|
+
export declare function didRemoveVaultFromConfig(vaultPath: string): boolean;
|
|
11
18
|
/**
|
|
12
19
|
* Returns the platform-specific path to the **user's** Obsidian config (user-data)
|
|
13
20
|
* directory — `%APPDATA%\obsidian` on Windows, `~/Library/Application Support/obsidian`
|
|
@@ -18,7 +25,7 @@
|
|
|
18
25
|
*
|
|
19
26
|
* @returns The absolute path to the `obsidian/` config directory.
|
|
20
27
|
*/
|
|
21
|
-
export declare function
|
|
28
|
+
export declare function getObsidianConfigDirectory(): string;
|
|
22
29
|
/**
|
|
23
30
|
* Returns the hex vault ID for a given vault path from Obsidian's registry.
|
|
24
31
|
*
|
|
@@ -33,10 +40,3 @@ export declare function getVaultId(vaultPath: string): string | undefined;
|
|
|
33
40
|
* @returns `true` if the vault is registered, `false` otherwise.
|
|
34
41
|
*/
|
|
35
42
|
export declare function isVaultRegistered(vaultPath: string): boolean;
|
|
36
|
-
/**
|
|
37
|
-
* Removes a vault entry from Obsidian's `obsidian.json` config file.
|
|
38
|
-
*
|
|
39
|
-
* @param vaultPath - The absolute path to the vault folder.
|
|
40
|
-
* @returns `true` if the vault was found and removed, `false` otherwise.
|
|
41
|
-
*/
|
|
42
|
-
export declare function removeVaultFromConfig(vaultPath: string): boolean;
|
|
@@ -82,7 +82,7 @@ async function resolveOnWindows() {
|
|
|
82
82
|
return fromPath;
|
|
83
83
|
}
|
|
84
84
|
const localAppData = import_node_process.default.env["LOCALAPPDATA"] ?? "";
|
|
85
|
-
const installerPath = `${localAppData}
|
|
85
|
+
const installerPath = String.raw`${localAppData}\Programs\Obsidian\Obsidian.exe`;
|
|
86
86
|
if ((0, import_node_fs.existsSync)(installerPath)) {
|
|
87
87
|
return installerPath;
|
|
88
88
|
}
|
|
@@ -94,4 +94,4 @@ async function resolveOnWindows() {
|
|
|
94
94
|
0 && (module.exports = {
|
|
95
95
|
resolveObsidianExecutable
|
|
96
96
|
});
|
|
97
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWV4ZWN1dGFibGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaW5zdGFsbGVkIE9ic2lkaWFuIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqXG4gKiBVc2VkIGJ5IGRlc2t0b3AgdHJhbnNwb3J0cyAoYENMSWAsIGBDRFBgKSB0byBhdXRvLWxhdW5jaCBPYnNpZGlhbiB3aGVuIGl0IGlzXG4gKiBub3QgYWxyZWFkeSBydW5uaW5nLiBTdXBwb3J0cyBpbnN0YWxsZXItYmFzZWQgaW5zdGFsbHMgKGUuZy5cbiAqIGAlTE9DQUxBUFBEQVRBJVxcUHJvZ3JhbXNcXE9ic2lkaWFuXFxPYnNpZGlhbi5leGVgIG9uIFdpbmRvd3MsXG4gKiBgL0FwcGxpY2F0aW9ucy9PYnNpZGlhbi5hcHBgIG9uIG1hY09TKSBhbmQgYFBBVEhgLWJhc2VkIGluc3RhbGxzIChlLmcuXG4gKiBgc2Nvb3BgIHNoaW1zIG9uIFdpbmRvd3MsIHBhY2thZ2UgbWFuYWdlciBpbnN0YWxscyBvbiBMaW51eCkuXG4gKlxuICogVGhlIHBhdGggaXMgdmVyaWZpZWQgdG8gZXhpc3Qgb24gZGlzayBiZWZvcmUgYmVpbmcgcmV0dXJuZWQuIElmIE9ic2lkaWFuXG4gKiBjYW5ub3QgYmUgbG9jYXRlZCwgYSBkZXNjcmlwdGl2ZSBgRXJyb3JgIGlzIHRocm93biBzbyB0aGUgY2FsbGVyIGNhbiBzdXJmYWNlXG4gKiBhbiBhY3Rpb25hYmxlIG1lc3NhZ2UgaW5zdGVhZCBvZiBzcGF3bmluZyBhIG5vbi1leGlzdGVudCBiaW5hcnkgKHdoaWNoIG9uXG4gKiBXaW5kb3dzIGNhdXNlcyBgc3RhcnRgIHRvIHNob3cgYSBgU2hlbGxFeGVjdXRlYCBkaWFsb2cgYm94IHJhdGhlciB0aGFuXG4gKiBmYWlsaW5nIHdpdGggYW4gZXhpdCBjb2RlKS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLmNqcyc7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgT2JzaWRpYW4gY2Fubm90IGJlIGxvY2F0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlT2JzaWRpYW5FeGVjdXRhYmxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlc29sdmVPbldpbmRvd3MoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiByZXNvbHZlT25NYWNPcygpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHJlc29sdmVPbkxpbnV4KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRJblBhdGgobG9va3VwQ29tbWFuZDogc3RyaW5nLCBleGVjdXRhYmxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IG91dHB1dDogc3RyaW5nO1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoYCR7bG9va3VwQ29tbWFuZH0gJHtleGVjdXRhYmxlTmFtZX1gLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGVzID0gb3V0cHV0XG4gICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA+IDAgJiYgZXhpc3RzU3luYyhsaW5lKSk7XG5cbiAgLypcbiAgICogUHJlZmVyIGEgcmVhbCBleGVjdXRhYmxlIG92ZXIgYSBsYXVuY2hlciBzaGltLiBgc2Nvb3BgIGluc3RhbGxzIGNyZWF0ZSBhXG4gICAqIGA8bmFtZT4uZXhlYCBzaGltIGluIGBzY29vcFxcc2hpbXNcXGAgdGhhdCBmb3J3YXJkcyB0byB0aGUgYC5jb21gIGNvbnNvbGVcbiAgICogYmluYXJ5OyBsYXVuY2hpbmcgaXQgcnVucyB0aGUgQ0xJICh3aGljaCBleGl0cyBpbW1lZGlhdGVseSkgaW5zdGVhZCBvZiB0aGVcbiAgICogR1VJLCBzbyBhdXRvLWxhdW5jaCB3b3VsZCBuZXZlciBzdGFydCBPYnNpZGlhbi4gYHdoZXJlLmV4ZWAgbGlzdHMgdGhlIHNoaW1cbiAgICogYmVmb3JlIHRoZSBhY3R1YWwgYHNjb29wXFxhcHBzXFw8YXBwPlxcY3VycmVudFxcPG5hbWU+LmV4ZWAsIHNvIHNraXAgYW55IHNoaW0uXG4gICAqL1xuICBjb25zdCBub25TaGltID0gY2FuZGlkYXRlcy5maW5kKChjYW5kaWRhdGUpID0+ICFpc1NoaW0oY2FuZGlkYXRlKSk7XG4gIHJldHVybiBub25TaGltID8/IGNhbmRpZGF0ZXNbMF07XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGV4ZWN1dGFibGUgcGF0aCBpcyBhIGBzY29vcGAgc2hpbSByYXRoZXIgdGhhbiB0aGUgcmVhbFxuICogYmluYXJ5LiBTY29vcCBzaGltcyBoYXZlIGEgc2libGluZyBgPG5hbWU+LnNoaW1gIGZpbGUgZGVzY3JpYmluZyB0aGUgZm9yd2FyZFxuICogdGFyZ2V0OyB0aGUgcmVhbCBleGVjdXRhYmxlIGhhcyBubyBzdWNoIGNvbXBhbmlvbi5cbiAqXG4gKiBAcGFyYW0gZXhlY3V0YWJsZVBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGF0aCBpcyBhIHNjb29wIHNoaW0uXG4gKi9cbmZ1bmN0aW9uIGlzU2hpbShleGVjdXRhYmxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNoaW1NYXJrZXJQYXRoID0gZXhlY3V0YWJsZVBhdGgucmVwbGFjZSgvXFwuW14uXFxcXC9dKyQvLCAnLnNoaW0nKTtcbiAgcmV0dXJuIHNoaW1NYXJrZXJQYXRoICE9PSBleGVjdXRhYmxlUGF0aCAmJiBleGlzdHNTeW5jKHNoaW1NYXJrZXJQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU9uTGludXgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnJvbVBhdGggPSBhd2FpdCBmaW5kSW5QYXRoKCd3aGljaCcsICdvYnNpZGlhbicpO1xuICBpZiAoZnJvbVBhdGgpIHtcbiAgICByZXR1cm4gZnJvbVBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ1VuYWJsZSB0byBsb2NhdGUgT2JzaWRpYW4gZXhlY3V0YWJsZS4gSW5zdGFsbCBPYnNpZGlhbiBhbmQgZW5zdXJlIGBvYnNpZGlhbmAgaXMgb24gUEFUSC4nXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVPbk1hY09zKCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0YW5kYXJkUGF0aCA9ICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbic7XG4gIGlmIChleGlzdHNTeW5jKHN0YW5kYXJkUGF0aCkpIHtcbiAgICByZXR1cm4gc3RhbmRhcmRQYXRoO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBVbmFibGUgdG8gbG9jYXRlIE9ic2lkaWFuIGV4ZWN1dGFibGUgYXQgXFxgJHtzdGFuZGFyZFBhdGh9XFxgLiBJbnN0YWxsIE9ic2lkaWFuIGZyb20gaHR0cHM6Ly9vYnNpZGlhbi5tZC9kb3dubG9hZC5gXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPbldpbmRvd3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnJvbVBhdGggPSBhd2FpdCBmaW5kSW5QYXRoKCd3aGVyZS5leGUnLCAnT2JzaWRpYW4uZXhlJyk7XG4gIGlmIChmcm9tUGF0aCkge1xuICAgIHJldHVybiBmcm9tUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWV4ZWN1dGFibGUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZXNvbHZlcyB0aGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgaW5zdGFsbGVkIE9ic2lkaWFuIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqXG4gKiBVc2VkIGJ5IGRlc2t0b3AgdHJhbnNwb3J0cyAoYENMSWAsIGBDRFBgKSB0byBhdXRvLWxhdW5jaCBPYnNpZGlhbiB3aGVuIGl0IGlzXG4gKiBub3QgYWxyZWFkeSBydW5uaW5nLiBTdXBwb3J0cyBpbnN0YWxsZXItYmFzZWQgaW5zdGFsbHMgKGUuZy5cbiAqIGAlTE9DQUxBUFBEQVRBJVxcUHJvZ3JhbXNcXE9ic2lkaWFuXFxPYnNpZGlhbi5leGVgIG9uIFdpbmRvd3MsXG4gKiBgL0FwcGxpY2F0aW9ucy9PYnNpZGlhbi5hcHBgIG9uIG1hY09TKSBhbmQgYFBBVEhgLWJhc2VkIGluc3RhbGxzIChlLmcuXG4gKiBgc2Nvb3BgIHNoaW1zIG9uIFdpbmRvd3MsIHBhY2thZ2UgbWFuYWdlciBpbnN0YWxscyBvbiBMaW51eCkuXG4gKlxuICogVGhlIHBhdGggaXMgdmVyaWZpZWQgdG8gZXhpc3Qgb24gZGlzayBiZWZvcmUgYmVpbmcgcmV0dXJuZWQuIElmIE9ic2lkaWFuXG4gKiBjYW5ub3QgYmUgbG9jYXRlZCwgYSBkZXNjcmlwdGl2ZSBgRXJyb3JgIGlzIHRocm93biBzbyB0aGUgY2FsbGVyIGNhbiBzdXJmYWNlXG4gKiBhbiBhY3Rpb25hYmxlIG1lc3NhZ2UgaW5zdGVhZCBvZiBzcGF3bmluZyBhIG5vbi1leGlzdGVudCBiaW5hcnkgKHdoaWNoIG9uXG4gKiBXaW5kb3dzIGNhdXNlcyBgc3RhcnRgIHRvIHNob3cgYSBgU2hlbGxFeGVjdXRlYCBkaWFsb2cgYm94IHJhdGhlciB0aGFuXG4gKiBmYWlsaW5nIHdpdGggYW4gZXhpdCBjb2RlKS5cbiAqL1xuXG4vKiB2OCBpZ25vcmUgc3RhcnQgLS0gSW50ZWdyYXRpb24tdGltZSBjb2RlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQgeyBleGlzdHNTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi9leGVjLmNqcyc7XG5cbi8qKlxuICogUmVzb2x2ZXMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUgb24gdGhlIGhvc3QgbWFjaGluZS5cbiAqXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZS5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgT2JzaWRpYW4gY2Fubm90IGJlIGxvY2F0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlT2JzaWRpYW5FeGVjdXRhYmxlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGF3YWl0IHJlc29sdmVPbldpbmRvd3MoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiByZXNvbHZlT25NYWNPcygpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHJlc29sdmVPbkxpbnV4KCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRJblBhdGgobG9va3VwQ29tbWFuZDogc3RyaW5nLCBleGVjdXRhYmxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgbGV0IG91dHB1dDogc3RyaW5nO1xuICB0cnkge1xuICAgIG91dHB1dCA9IGF3YWl0IGV4ZWMoYCR7bG9va3VwQ29tbWFuZH0gJHtleGVjdXRhYmxlTmFtZX1gLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBjYW5kaWRhdGVzID0gb3V0cHV0XG4gICAgLnNwbGl0KC9cXHI/XFxuLylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnRyaW0oKSlcbiAgICAuZmlsdGVyKChsaW5lKSA9PiBsaW5lLmxlbmd0aCA+IDAgJiYgZXhpc3RzU3luYyhsaW5lKSk7XG5cbiAgLypcbiAgICogUHJlZmVyIGEgcmVhbCBleGVjdXRhYmxlIG92ZXIgYSBsYXVuY2hlciBzaGltLiBgc2Nvb3BgIGluc3RhbGxzIGNyZWF0ZSBhXG4gICAqIGA8bmFtZT4uZXhlYCBzaGltIGluIGBzY29vcFxcc2hpbXNcXGAgdGhhdCBmb3J3YXJkcyB0byB0aGUgYC5jb21gIGNvbnNvbGVcbiAgICogYmluYXJ5OyBsYXVuY2hpbmcgaXQgcnVucyB0aGUgQ0xJICh3aGljaCBleGl0cyBpbW1lZGlhdGVseSkgaW5zdGVhZCBvZiB0aGVcbiAgICogR1VJLCBzbyBhdXRvLWxhdW5jaCB3b3VsZCBuZXZlciBzdGFydCBPYnNpZGlhbi4gYHdoZXJlLmV4ZWAgbGlzdHMgdGhlIHNoaW1cbiAgICogYmVmb3JlIHRoZSBhY3R1YWwgYHNjb29wXFxhcHBzXFw8YXBwPlxcY3VycmVudFxcPG5hbWU+LmV4ZWAsIHNvIHNraXAgYW55IHNoaW0uXG4gICAqL1xuICBjb25zdCBub25TaGltID0gY2FuZGlkYXRlcy5maW5kKChjYW5kaWRhdGUpID0+ICFpc1NoaW0oY2FuZGlkYXRlKSk7XG4gIHJldHVybiBub25TaGltID8/IGNhbmRpZGF0ZXNbMF07XG59XG5cbi8qKlxuICogRGV0ZWN0cyB3aGV0aGVyIGFuIGV4ZWN1dGFibGUgcGF0aCBpcyBhIGBzY29vcGAgc2hpbSByYXRoZXIgdGhhbiB0aGUgcmVhbFxuICogYmluYXJ5LiBTY29vcCBzaGltcyBoYXZlIGEgc2libGluZyBgPG5hbWU+LnNoaW1gIGZpbGUgZGVzY3JpYmluZyB0aGUgZm9yd2FyZFxuICogdGFyZ2V0OyB0aGUgcmVhbCBleGVjdXRhYmxlIGhhcyBubyBzdWNoIGNvbXBhbmlvbi5cbiAqXG4gKiBAcGFyYW0gZXhlY3V0YWJsZVBhdGggLSBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgcGF0aCBpcyBhIHNjb29wIHNoaW0uXG4gKi9cbmZ1bmN0aW9uIGlzU2hpbShleGVjdXRhYmxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNoaW1NYXJrZXJQYXRoID0gZXhlY3V0YWJsZVBhdGgucmVwbGFjZSgvXFwuW14uXFxcXC9dKyQvLCAnLnNoaW0nKTtcbiAgcmV0dXJuIHNoaW1NYXJrZXJQYXRoICE9PSBleGVjdXRhYmxlUGF0aCAmJiBleGlzdHNTeW5jKHNoaW1NYXJrZXJQYXRoKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU9uTGludXgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnJvbVBhdGggPSBhd2FpdCBmaW5kSW5QYXRoKCd3aGljaCcsICdvYnNpZGlhbicpO1xuICBpZiAoZnJvbVBhdGgpIHtcbiAgICByZXR1cm4gZnJvbVBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ1VuYWJsZSB0byBsb2NhdGUgT2JzaWRpYW4gZXhlY3V0YWJsZS4gSW5zdGFsbCBPYnNpZGlhbiBhbmQgZW5zdXJlIGBvYnNpZGlhbmAgaXMgb24gUEFUSC4nXG4gICk7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVPbk1hY09zKCk6IHN0cmluZyB7XG4gIGNvbnN0IHN0YW5kYXJkUGF0aCA9ICcvQXBwbGljYXRpb25zL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbic7XG4gIGlmIChleGlzdHNTeW5jKHN0YW5kYXJkUGF0aCkpIHtcbiAgICByZXR1cm4gc3RhbmRhcmRQYXRoO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBVbmFibGUgdG8gbG9jYXRlIE9ic2lkaWFuIGV4ZWN1dGFibGUgYXQgXFxgJHtzdGFuZGFyZFBhdGh9XFxgLiBJbnN0YWxsIE9ic2lkaWFuIGZyb20gaHR0cHM6Ly9vYnNpZGlhbi5tZC9kb3dubG9hZC5gXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPbldpbmRvd3MoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnJvbVBhdGggPSBhd2FpdCBmaW5kSW5QYXRoKCd3aGVyZS5leGUnLCAnT2JzaWRpYW4uZXhlJyk7XG4gIGlmIChmcm9tUGF0aCkge1xuICAgIHJldHVybiBmcm9tUGF0aDtcbiAgfVxuXG4gIGNvbnN0IGxvY2FsQXBwRGF0YSA9IHByb2Nlc3MuZW52WydMT0NBTEFQUERBVEEnXSA/PyAnJztcbiAgY29uc3QgaW5zdGFsbGVyUGF0aCA9IFN0cmluZy5yYXdgJHtsb2NhbEFwcERhdGF9XFxQcm9ncmFtc1xcT2JzaWRpYW5cXE9ic2lkaWFuLmV4ZWA7XG4gIGlmIChleGlzdHNTeW5jKGluc3RhbGxlclBhdGgpKSB7XG4gICAgcmV0dXJuIGluc3RhbGxlclBhdGg7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYFVuYWJsZSB0byBsb2NhdGUgT2JzaWRpYW4gZXhlY3V0YWJsZS4gSW5zdGFsbCBPYnNpZGlhbiAoZS5nLiBmcm9tIGh0dHBzOi8vb2JzaWRpYW4ubWQvZG93bmxvYWQgb3IgdmlhIFxcYHNjb29wIGluc3RhbGwgb2JzaWRpYW5cXGApIGFuZCBlbnN1cmUgaXQgaXMgb24gUEFUSCBvciBpbnN0YWxsZWQgdG8gXFxgJHtpbnN0YWxsZXJQYXRofVxcYC5gXG4gICk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQW9CQSxxQkFBMkI7QUFDM0IsMEJBQW9CO0FBRXBCLGtCQUFxQjtBQVFyQixlQUFzQiw0QkFBNkM7QUFDakUsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFNBQVM7QUFDaEMsV0FBTyxNQUFNLGlCQUFpQjtBQUFBLEVBQ2hDO0FBRUEsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFVBQVU7QUFDakMsV0FBTyxlQUFlO0FBQUEsRUFDeEI7QUFFQSxTQUFPLE1BQU0sZUFBZTtBQUM5QjtBQUVBLGVBQWUsV0FBVyxlQUF1QixnQkFBcUQ7QUFDcEcsTUFBSTtBQUNKLE1BQUk7QUFDRixhQUFTLFVBQU0sa0JBQUssR0FBRyxhQUFhLElBQUksY0FBYyxJQUFJLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFBQSxFQUM3RSxRQUFRO0FBQ04sV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGFBQWEsT0FDaEIsTUFBTSxPQUFPLEVBQ2IsSUFBSSxDQUFDLFNBQVMsS0FBSyxLQUFLLENBQUMsRUFDekIsT0FBTyxDQUFDLFNBQVMsS0FBSyxTQUFTLFNBQUssMkJBQVcsSUFBSSxDQUFDO0FBU3ZELFFBQU0sVUFBVSxXQUFXLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxTQUFTLENBQUM7QUFDakUsU0FBTyxXQUFXLFdBQVcsQ0FBQztBQUNoQztBQVVBLFNBQVMsT0FBTyxnQkFBaUM7QUFDL0MsUUFBTSxpQkFBaUIsZUFBZSxRQUFRLGVBQWUsT0FBTztBQUNwRSxTQUFPLG1CQUFtQixzQkFBa0IsMkJBQVcsY0FBYztBQUN2RTtBQUVBLGVBQWUsaUJBQWtDO0FBQy9DLFFBQU0sV0FBVyxNQUFNLFdBQVcsU0FBUyxVQUFVO0FBQ3JELE1BQUksVUFBVTtBQUNaLFdBQU87QUFBQSxFQUNUO0FBRUEsUUFBTSxJQUFJO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsaUJBQXlCO0FBQ2hDLFFBQU0sZUFBZTtBQUNyQixVQUFJLDJCQUFXLFlBQVksR0FBRztBQUM1QixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sSUFBSTtBQUFBLElBQ1IsNkNBQTZDLFlBQVk7QUFBQSxFQUMzRDtBQUNGO0FBRUEsZUFBZSxtQkFBb0M7QUFDakQsUUFBTSxXQUFXLE1BQU0sV0FBVyxhQUFhLGNBQWM7QUFDN0QsTUFBSSxVQUFVO0FBQ1osV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLGVBQWUsb0JBQUFBLFFBQVEsSUFBSSxjQUFjLEtBQUs7QUFDcEQsUUFBTSxnQkFBZ0IsT0FBTyxNQUFNLFlBQVk7QUFDL0MsVUFBSSwyQkFBVyxhQUFhLEdBQUc7QUFDN0IsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLElBQUk7QUFBQSxJQUNSLGdMQUFnTCxhQUFhO0FBQUEsRUFDL0w7QUFDRjsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|
|
@@ -30,7 +30,7 @@ var obsidian_installer_exports = {};
|
|
|
30
30
|
__export(obsidian_installer_exports, {
|
|
31
31
|
detectInstalledShellVersion: () => detectInstalledShellVersion,
|
|
32
32
|
ensureShellCached: () => ensureShellCached,
|
|
33
|
-
|
|
33
|
+
getCachedShellDirectory: () => getCachedShellDirectory
|
|
34
34
|
});
|
|
35
35
|
module.exports = __toCommonJS(obsidian_installer_exports);
|
|
36
36
|
var import_node_child_process = require("node:child_process");
|
|
@@ -57,16 +57,16 @@ function detectInstalledShellVersion(exePath) {
|
|
|
57
57
|
return detectVersionFromPath(exePath);
|
|
58
58
|
}
|
|
59
59
|
async function ensureShellCached(version) {
|
|
60
|
-
const
|
|
61
|
-
const exePath = getCachedShellExePath(
|
|
60
|
+
const shellDirectory = getCachedShellDirectory(version);
|
|
61
|
+
const exePath = getCachedShellExePath(shellDirectory);
|
|
62
62
|
if ((0, import_node_fs.existsSync)(exePath)) {
|
|
63
63
|
(0, import_log.log)(`[installer] Using cached shell for ${version}.`);
|
|
64
64
|
return exePath;
|
|
65
65
|
}
|
|
66
|
-
(0, import_node_fs.mkdirSync)(
|
|
66
|
+
(0, import_node_fs.mkdirSync)(shellDirectory, { recursive: true });
|
|
67
67
|
const assetUrls = await resolveInstallerAssetUrls(version);
|
|
68
|
-
const assetPath = await downloadInstallerAsset(assetUrls,
|
|
69
|
-
extractShell(assetPath,
|
|
68
|
+
const assetPath = await downloadInstallerAsset(assetUrls, shellDirectory, version);
|
|
69
|
+
extractShell(assetPath, shellDirectory);
|
|
70
70
|
(0, import_node_fs.rmSync)(assetPath, { force: true });
|
|
71
71
|
if (!(0, import_node_fs.existsSync)(exePath)) {
|
|
72
72
|
throw new Error(`Extracted Obsidian shell ${version} but executable not found at ${exePath}.`);
|
|
@@ -74,7 +74,7 @@ async function ensureShellCached(version) {
|
|
|
74
74
|
(0, import_log.log)(`[installer] Extracted shell ${version} -> ${exePath}`);
|
|
75
75
|
return exePath;
|
|
76
76
|
}
|
|
77
|
-
function
|
|
77
|
+
function getCachedShellDirectory(version) {
|
|
78
78
|
return (0, import_node_path.join)(SHELL_CACHE_DIR, version);
|
|
79
79
|
}
|
|
80
80
|
function assertCommandAvailable(command, hint) {
|
|
@@ -86,8 +86,8 @@ function assertCommandAvailable(command, hint) {
|
|
|
86
86
|
}
|
|
87
87
|
function detectMacBundleVersion(exePath) {
|
|
88
88
|
try {
|
|
89
|
-
const
|
|
90
|
-
const plist = (0, import_node_fs.readFileSync)((0, import_node_path.join)(
|
|
89
|
+
const contentsDirectory = (0, import_node_path.dirname)((0, import_node_path.dirname)(exePath));
|
|
90
|
+
const plist = (0, import_node_fs.readFileSync)((0, import_node_path.join)(contentsDirectory, "Info.plist"), "utf-8");
|
|
91
91
|
const match = MAC_PLIST_VERSION_PATTERN.exec(plist);
|
|
92
92
|
return match?.groups?.["version"];
|
|
93
93
|
} catch {
|
|
@@ -111,18 +111,18 @@ function detectWindowsFileVersion(exePath) {
|
|
|
111
111
|
return void 0;
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
|
-
async function downloadAsset(url,
|
|
114
|
+
async function downloadAsset(url, destination) {
|
|
115
115
|
(0, import_log.log)(`[installer] Downloading installer from ${url} ...`);
|
|
116
116
|
const response = await fetch(url, { headers: { "User-Agent": DOWNLOAD_USER_AGENT } });
|
|
117
117
|
if (!response.ok) {
|
|
118
118
|
throw new Error(`HTTP ${String(response.status)}`);
|
|
119
119
|
}
|
|
120
|
-
(0, import_node_fs.writeFileSync)(
|
|
120
|
+
(0, import_node_fs.writeFileSync)(destination, Buffer.from(await response.arrayBuffer()));
|
|
121
121
|
}
|
|
122
|
-
async function downloadInstallerAsset(urls,
|
|
122
|
+
async function downloadInstallerAsset(urls, shellDirectory, version) {
|
|
123
123
|
const errors = [];
|
|
124
124
|
for (const url of urls) {
|
|
125
|
-
const assetPath = (0, import_node_path.join)(
|
|
125
|
+
const assetPath = (0, import_node_path.join)(shellDirectory, (0, import_node_path.basename)(url));
|
|
126
126
|
try {
|
|
127
127
|
await downloadAsset(url, assetPath);
|
|
128
128
|
return assetPath;
|
|
@@ -134,38 +134,38 @@ async function downloadInstallerAsset(urls, shellDir, version) {
|
|
|
134
134
|
`Failed to download Obsidian installer ${version}. Attempts: ${errors.join("; ")}. Catalyst/beta versions have no public installer \u2014 pin an asar version on a public/installed shell instead.`
|
|
135
135
|
);
|
|
136
136
|
}
|
|
137
|
-
function extractLinuxShell(assetPath,
|
|
138
|
-
run("tar", ["xzf", assetPath, "-C",
|
|
137
|
+
function extractLinuxShell(assetPath, shellDirectory) {
|
|
138
|
+
run("tar", ["xzf", assetPath, "-C", shellDirectory, "--strip-components=1"]);
|
|
139
139
|
}
|
|
140
|
-
function extractMacShell(assetPath,
|
|
141
|
-
const mountPoint = (0, import_node_path.join)(
|
|
140
|
+
function extractMacShell(assetPath, shellDirectory) {
|
|
141
|
+
const mountPoint = (0, import_node_path.join)(shellDirectory, "__mnt");
|
|
142
142
|
(0, import_node_fs.mkdirSync)(mountPoint, { recursive: true });
|
|
143
143
|
run("hdiutil", ["attach", "-nobrowse", "-mountpoint", mountPoint, assetPath]);
|
|
144
144
|
try {
|
|
145
|
-
run("cp", ["-R", (0, import_node_path.join)(mountPoint, "Obsidian.app"),
|
|
145
|
+
run("cp", ["-R", (0, import_node_path.join)(mountPoint, "Obsidian.app"), shellDirectory]);
|
|
146
146
|
} finally {
|
|
147
147
|
run("hdiutil", ["detach", mountPoint]);
|
|
148
148
|
}
|
|
149
149
|
(0, import_node_fs.rmSync)(mountPoint, { force: true, recursive: true });
|
|
150
150
|
}
|
|
151
|
-
function extractShell(assetPath,
|
|
151
|
+
function extractShell(assetPath, shellDirectory) {
|
|
152
152
|
if (import_node_process.default.platform === "win32") {
|
|
153
|
-
extractWindowsShell(assetPath,
|
|
153
|
+
extractWindowsShell(assetPath, shellDirectory);
|
|
154
154
|
return;
|
|
155
155
|
}
|
|
156
156
|
if (import_node_process.default.platform === "darwin") {
|
|
157
|
-
extractMacShell(assetPath,
|
|
157
|
+
extractMacShell(assetPath, shellDirectory);
|
|
158
158
|
return;
|
|
159
159
|
}
|
|
160
|
-
extractLinuxShell(assetPath,
|
|
160
|
+
extractLinuxShell(assetPath, shellDirectory);
|
|
161
161
|
}
|
|
162
|
-
function extractWindowsShell(assetPath,
|
|
162
|
+
function extractWindowsShell(assetPath, shellDirectory) {
|
|
163
163
|
assertCommandAvailable("7z", "Install 7-Zip (e.g. `scoop install 7zip`) to extract a pinned Obsidian installer.");
|
|
164
|
-
const
|
|
165
|
-
run("7z", ["x", "-y", `-o${
|
|
166
|
-
const innerArchive = (0, import_node_path.join)(
|
|
167
|
-
run("7z", ["x", "-y", `-o${
|
|
168
|
-
(0, import_node_fs.rmSync)(
|
|
164
|
+
const nsisExtractDirectory = (0, import_node_path.join)(shellDirectory, "__nsis");
|
|
165
|
+
run("7z", ["x", "-y", `-o${nsisExtractDirectory}`, assetPath]);
|
|
166
|
+
const innerArchive = (0, import_node_path.join)(nsisExtractDirectory, "$PLUGINSDIR", "app-64.7z");
|
|
167
|
+
run("7z", ["x", "-y", `-o${shellDirectory}`, innerArchive]);
|
|
168
|
+
(0, import_node_fs.rmSync)(nsisExtractDirectory, { force: true, recursive: true });
|
|
169
169
|
}
|
|
170
170
|
async function fetchReleaseAssetNames(version) {
|
|
171
171
|
try {
|
|
@@ -186,14 +186,14 @@ async function fetchReleaseAssetNames(version) {
|
|
|
186
186
|
return void 0;
|
|
187
187
|
}
|
|
188
188
|
}
|
|
189
|
-
function getCachedShellExePath(
|
|
189
|
+
function getCachedShellExePath(shellDirectory) {
|
|
190
190
|
if (import_node_process.default.platform === "win32") {
|
|
191
|
-
return (0, import_node_path.join)(
|
|
191
|
+
return (0, import_node_path.join)(shellDirectory, "Obsidian.exe");
|
|
192
192
|
}
|
|
193
193
|
if (import_node_process.default.platform === "darwin") {
|
|
194
|
-
return (0, import_node_path.join)(
|
|
194
|
+
return (0, import_node_path.join)(shellDirectory, "Obsidian.app", "Contents", "MacOS", "Obsidian");
|
|
195
195
|
}
|
|
196
|
-
return (0, import_node_path.join)(
|
|
196
|
+
return (0, import_node_path.join)(shellDirectory, "obsidian");
|
|
197
197
|
}
|
|
198
198
|
async function resolveInstallerAssetUrls(version) {
|
|
199
199
|
const bakedUrl = (0, import_installer_asset.selectInstallerDownloadUrl)({ downloads: (0, import_obsidian_metadata.getVersionMetadata)(version)?.downloads, platform: import_node_process.default.platform });
|
|
@@ -210,16 +210,16 @@ async function resolveInstallerAssetUrls(version) {
|
|
|
210
210
|
}
|
|
211
211
|
return (0, import_installer_asset.buildInstallerAssetNameCandidates)({ platform: import_node_process.default.platform, version }).map((name) => `${RELEASE_DOWNLOAD_BASE_URL}/v${version}/${name}`);
|
|
212
212
|
}
|
|
213
|
-
function run(command,
|
|
214
|
-
const result = (0, import_node_child_process.spawnSync)(command,
|
|
213
|
+
function run(command, commandArguments) {
|
|
214
|
+
const result = (0, import_node_child_process.spawnSync)(command, commandArguments, { stdio: "ignore" });
|
|
215
215
|
if (result.status !== 0) {
|
|
216
|
-
throw new Error(`Command failed: ${command} ${
|
|
216
|
+
throw new Error(`Command failed: ${command} ${commandArguments.map((argument) => (0, import_node_path.basename)(argument)).join(" ")} (exit ${String(result.status)})`);
|
|
217
217
|
}
|
|
218
218
|
}
|
|
219
219
|
// Annotate the CommonJS export names for ESM import in node:
|
|
220
220
|
0 && (module.exports = {
|
|
221
221
|
detectInstalledShellVersion,
|
|
222
222
|
ensureShellCached,
|
|
223
|
-
|
|
223
|
+
getCachedShellDirectory
|
|
224
224
|
});
|
|
225
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqIEJhc2UgVVJMIGZvciBgb2JzaWRpYW4tcmVsZWFzZXNgIHJlbGVhc2UgYXNzZXRzIChgLi4uL2Rvd25sb2FkL3Y8dmVyPi88YXNzZXQ+YCkuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqIEdpdEh1YiBSRVNUIGVuZHBvaW50IGxpc3RpbmcgYSByZWxlYXNlJ3MgYXNzZXRzIGJ5IHRhZyAoYC4uLi9yZWxlYXNlcy90YWdzL3Y8dmVyPmApLiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKiBUaGUgc3Vic2V0IG9mIHRoZSBHaXRIdWIgcmVsZWFzZSBBUEkgcmVzcG9uc2UgdGhpcyBtb2R1bGUgcmVhZHMuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKiBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuICovXG4gIHJlYWRvbmx5IGFzc2V0czogcmVhZG9ubHkgR2l0SHViUmVsZWFzZUFzc2V0W107XG59XG5cbi8qKiBUaGUgc3Vic2V0IG9mIGEgR2l0SHViIHJlbGVhc2UncyBhc3NldCBvYmplY3QgdGhpcyBtb2R1bGUgcmVhZHMuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZUFzc2V0IHtcbiAgLyoqIFRoZSBhc3NldCBmaWxlIG5hbWUsIGUuZy4gYE9ic2lkaWFuLjAuMTQuNS5leGVgLiAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbmNvbnN0IENBQ0hFX1JPT1QgPSBqb2luKHRtcGRpcigpLCAnb2JzaWRpYW4taW50ZWdyYXRpb24tdGVzdGluZycpO1xuY29uc3QgU0hFTExfQ0FDSEVfRElSID0gam9pbihDQUNIRV9ST09ULCAnc2hlbGwtY2FjaGUnKTtcbmNvbnN0IE1BQ19QTElTVF9WRVJTSU9OX1BBVFRFUk4gPSAvPGtleT5DRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZzxcXC9rZXk+XFxzKjxzdHJpbmc+KD88dmVyc2lvbj5bXjxdKyk8XFwvc3RyaW5nPi87XG5cbi8qKlxuICogQSByZXNvbHZlZCBPYnNpZGlhbiBzaGVsbCBleGVjdXRhYmxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlc29sdmVkU2hlbGwge1xuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSB0byBsYXVuY2guICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKiogVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLiAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogRGV0ZWN0cyB0aGUgdmVyc2lvbiBvZiBhbiBpbnN0YWxsZWQgT2JzaWRpYW4gc2hlbGwgZnJvbSBpdHMgZXhlY3V0YWJsZS5cbiAqXG4gKiAtIFdpbmRvd3M6IHRoZSBleGVjdXRhYmxlJ3MgUEUgYEZpbGVWZXJzaW9uYC5cbiAqIC0gbWFjT1M6IGBDRkJ1bmRsZVNob3J0VmVyc2lvblN0cmluZ2AgZnJvbSB0aGUgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqIC0gTGludXg6IGJlc3QtZWZmb3J0IHBhcnNlIGZyb20gdGhlIGV4ZWN1dGFibGUgcGF0aCAob2Z0ZW4gYHVuZGVmaW5lZGApLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgIGlmIGl0IGNhbm5vdCBiZSBkZXRlcm1pbmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0SW5zdGFsbGVkU2hlbGxWZXJzaW9uKGV4ZVBhdGg6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgcmV0dXJuIGRldGVjdFdpbmRvd3NGaWxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnZGFyd2luJykge1xuICAgIHJldHVybiBkZXRlY3RNYWNCdW5kbGVWZXJzaW9uKGV4ZVBhdGgpO1xuICB9XG5cbiAgcmV0dXJuIGRldGVjdFZlcnNpb25Gcm9tUGF0aChleGVQYXRoKTtcbn1cblxuLyoqXG4gKiBFbnN1cmVzIGEgcG9ydGFibGUgT2JzaWRpYW4gc2hlbGwgZm9yIHRoZSBnaXZlbiB2ZXJzaW9uIGlzIGV4dHJhY3RlZCBpbnRvIHRoZVxuICogY2FjaGUsIGRvd25sb2FkaW5nIGFuZCBleHRyYWN0aW5nIGl0cyBHaXRIdWIgcmVsZWFzZSBhc3NldCBpZiBuZWNlc3NhcnkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIHB1YmxpYyBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgY2FjaGVkIHNoZWxsIGV4ZWN1dGFibGUuXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSBhc3NldCBjYW5ub3QgYmUgZG93bmxvYWRlZCBvciBleHRyYWN0ZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVTaGVsbENhY2hlZCh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBzaGVsbERpciA9IGdldENhY2hlZFNoZWxsRGlyKHZlcnNpb24pO1xuICBjb25zdCBleGVQYXRoID0gZ2V0Q2FjaGVkU2hlbGxFeGVQYXRoKHNoZWxsRGlyKTtcbiAgaWYgKGV4aXN0c1N5bmMoZXhlUGF0aCkpIHtcbiAgICBsb2coYFtpbnN0YWxsZXJdIFVzaW5nIGNhY2hlZCBzaGVsbCBmb3IgJHt2ZXJzaW9ufS5gKTtcbiAgICByZXR1cm4gZXhlUGF0aDtcbiAgfVxuXG4gIG1rZGlyU3luYyhzaGVsbERpciwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IGFzc2V0VXJscyA9IGF3YWl0IHJlc29sdmVJbnN0YWxsZXJBc3NldFVybHModmVyc2lvbik7XG4gIGNvbnN0IGFzc2V0UGF0aCA9IGF3YWl0IGRvd25sb2FkSW5zdGFsbGVyQXNzZXQoYXNzZXRVcmxzLCBzaGVsbERpciwgdmVyc2lvbik7XG4gIGV4dHJhY3RTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgcm1TeW5jKGFzc2V0UGF0aCwgeyBmb3JjZTogdHJ1ZSB9KTtcblxuICBpZiAoIWV4aXN0c1N5bmMoZXhlUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4dHJhY3RlZCBPYnNpZGlhbiBzaGVsbCAke3ZlcnNpb259IGJ1dCBleGVjdXRhYmxlIG5vdCBmb3VuZCBhdCAke2V4ZVBhdGh9LmApO1xuICB9XG4gIGxvZyhgW2luc3RhbGxlcl0gRXh0cmFjdGVkIHNoZWxsICR7dmVyc2lvbn0gLT4gJHtleGVQYXRofWApO1xuICByZXR1cm4gZXhlUGF0aDtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBjYWNoZSBkaXJlY3RvcnkgYSB2ZXJzaW9uJ3MgZXh0cmFjdGVkIHNoZWxsIGxpdmVzIGluICh0aGVcbiAqIGRpcmVjdG9yeSBtYXkgbm90IHlldCBleGlzdCkuXG4gKlxuICogQHBhcmFtIHZlcnNpb24gLSBBIGNvbmNyZXRlIHB1YmxpYyBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBUaGUgYWJzb2x1dGUgc2hlbGwgY2FjaGUgZGlyZWN0b3J5IGZvciB0aGUgdmVyc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRGlyKHZlcnNpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBqb2luKFNIRUxMX0NBQ0hFX0RJUiwgdmVyc2lvbik7XG59XG5cbi8qKlxuICogVGhyb3dzIGEgZGVzY3JpcHRpdmUgZXJyb3IgaWYgYSByZXF1aXJlZCBjb21tYW5kIGlzIG5vdCBvbiBgUEFUSGAuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZCBuYW1lLlxuICogQHBhcmFtIGhpbnQgLSBBY3Rpb25hYmxlIGd1aWRhbmNlIGFwcGVuZGVkIHRvIHRoZSBlcnJvci5cbiAqL1xuZnVuY3Rpb24gYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcsIGhpbnQ6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBwcm9iZSA9IHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicgPyAnd2hlcmUuZXhlJyA6ICd3aGljaCc7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhwcm9iZSwgW2NvbW1hbmRdLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFJlcXVpcmVkIGNvbW1hbmQgXCIke2NvbW1hbmR9XCIgd2FzIG5vdCBmb3VuZCBvbiBQQVRILiAke2hpbnR9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZWFkcyBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gYSBtYWNPUyBhcHAgYnVuZGxlJ3MgYEluZm8ucGxpc3RgLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gUGF0aCB0byBgLi4uL09ic2lkaWFuLmFwcC9Db250ZW50cy9NYWNPUy9PYnNpZGlhbmAuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IGNvbnRlbnRzRGlyID0gZGlybmFtZShkaXJuYW1lKGV4ZVBhdGgpKTtcbiAgICBjb25zdCBwbGlzdCA9IHJlYWRGaWxlU3luYyhqb2luKGNvbnRlbnRzRGlyLCAnSW5mby5wbGlzdCcpLCAndXRmLTgnKTtcbiAgICBjb25zdCBtYXRjaCA9IE1BQ19QTElTVF9WRVJTSU9OX1BBVFRFUk4uZXhlYyhwbGlzdCk7XG4gICAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogQmVzdC1lZmZvcnQgcGFyc2Ugb2YgYW4gYHgueS56YCB2ZXJzaW9uIGVtYmVkZGVkIGluIGEgcGF0aC5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgcGF0aCBvciBzdHJpbmcgdG8gc2Nhbi5cbiAqIEByZXR1cm5zIFRoZSBmaXJzdCBgeC55LnpgIG1hdGNoLCBvciBgdW5kZWZpbmVkYC5cbiAqL1xuZnVuY3Rpb24gZGV0ZWN0VmVyc2lvbkZyb21QYXRoKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBtYXRjaCA9IC8oPzx2ZXJzaW9uPlxcZCtcXC5cXGQrXFwuXFxkKykvLmV4ZWModmFsdWUpO1xuICByZXR1cm4gbWF0Y2g/Lmdyb3Vwcz8uWyd2ZXJzaW9uJ107XG59XG5cbi8qKlxuICogUmVhZHMgdGhlIFBFIGBGaWxlVmVyc2lvbmAgb2YgYSBXaW5kb3dzIGV4ZWN1dGFibGUgdmlhIFBvd2VyU2hlbGwuXG4gKlxuICogQHBhcmFtIGV4ZVBhdGggLSBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBleGVjdXRhYmxlLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFdpbmRvd3NGaWxlVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNGaWxlU3luYyhcbiAgICAgICdwb3dlcnNoZWxsJyxcbiAgICAgIFsnLU5vUHJvZmlsZScsICctQ29tbWFuZCcsIGAoR2V0LUl0ZW0gLUxpdGVyYWxQYXRoICR7SlNPTi5zdHJpbmdpZnkoZXhlUGF0aCl9KS5WZXJzaW9uSW5mby5GaWxlVmVyc2lvbmBdLFxuICAgICAgeyBlbmNvZGluZzogJ3V0Zi04JyB9XG4gICAgKTtcbiAgICBjb25zdCB2ZXJzaW9uID0gb3V0cHV0LnRyaW0oKTtcbiAgICByZXR1cm4gdmVyc2lvbi5sZW5ndGggPiAwID8gdmVyc2lvbiA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIERvd25sb2FkcyBhIHNpbmdsZSByZWxlYXNlIGFzc2V0IGZvciBhIHZlcnNpb24gdG8gYSBkZXN0aW5hdGlvbiBmaWxlLlxuICpcbiAqIEBwYXJhbSB1cmwgLSBUaGUgYXNzZXQgZG93bmxvYWQgVVJMLlxuICogQHBhcmFtIGRlc3QgLSBEZXN0aW5hdGlvbiBmaWxlIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIHRoZSByZXF1ZXN0IGZhaWxzLlxuICovXG5hc3luYyBmdW5jdGlvbiBkb3dubG9hZEFzc2V0KHVybDogc3RyaW5nLCBkZXN0OiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3QsIEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpKTtcbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgdGhlIGZpcnN0IHJlYWNoYWJsZSBpbnN0YWxsZXIgYXNzZXQgZnJvbSBhbiBvcmRlcmVkIGxpc3Qgb2ZcbiAqIGNhbmRpZGF0ZSBVUkxzLCByZXR1cm5pbmcgdGhlIHBhdGggaXQgd2FzIHNhdmVkIHRvLlxuICpcbiAqIEBwYXJhbSB1cmxzIC0gQ2FuZGlkYXRlIGFzc2V0IFVSTHMsIGluIHByaW9yaXR5IG9yZGVyLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIGRlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHJlbGVhc2UgdmVyc2lvbiAoZm9yIGVycm9yIG1lc3NhZ2VzKS5cbiAqIEByZXR1cm5zIFRoZSBkb3dubG9hZGVkIGFzc2V0J3MgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBjYW4gYmUgZG93bmxvYWRlZC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gZG93bmxvYWRJbnN0YWxsZXJBc3NldCh1cmxzOiBzdHJpbmdbXSwgc2hlbGxEaXI6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZXJyb3JzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHVybCBvZiB1cmxzKSB7XG4gICAgY29uc3QgYXNzZXRQYXRoID0gam9pbihzaGVsbERpciwgYmFzZW5hbWUodXJsKSk7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRvd25sb2FkQXNzZXQodXJsLCBhc3NldFBhdGgpO1xuICAgICAgcmV0dXJuIGFzc2V0UGF0aDtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JzLnB1c2goYCR7dXJsfTogJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9YCk7XG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgIGBGYWlsZWQgdG8gZG93bmxvYWQgT2JzaWRpYW4gaW5zdGFsbGVyICR7dmVyc2lvbn0uIEF0dGVtcHRzOiAke2Vycm9ycy5qb2luKCc7ICcpfS4gYFxuICAgICAgKyAnQ2F0YWx5c3QvYmV0YSB2ZXJzaW9ucyBoYXZlIG5vIHB1YmxpYyBpbnN0YWxsZXIgXHUyMDE0IHBpbiBhbiBhc2FyIHZlcnNpb24gb24gYSBwdWJsaWMvaW5zdGFsbGVkIHNoZWxsIGluc3RlYWQuJ1xuICApO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgTGludXggYC50YXIuZ3pgIHBvcnRhYmxlIGJ1aWxkLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAudGFyLmd6YC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdExpbnV4U2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyOiBzdHJpbmcpOiB2b2lkIHtcbiAgcnVuKCd0YXInLCBbJ3h6ZicsIGFzc2V0UGF0aCwgJy1DJywgc2hlbGxEaXIsICctLXN0cmlwLWNvbXBvbmVudHM9MSddKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIG1hY09TIGAuZG1nYCBieSBtb3VudGluZyBpdCBhbmQgY29weWluZyB0aGUgYXBwIGJ1bmRsZS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmRtZ2AuXG4gKiBAcGFyYW0gc2hlbGxEaXIgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RNYWNTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCBtb3VudFBvaW50ID0gam9pbihzaGVsbERpciwgJ19fbW50Jyk7XG4gIG1rZGlyU3luYyhtb3VudFBvaW50LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgcnVuKCdoZGl1dGlsJywgWydhdHRhY2gnLCAnLW5vYnJvd3NlJywgJy1tb3VudHBvaW50JywgbW91bnRQb2ludCwgYXNzZXRQYXRoXSk7XG4gIHRyeSB7XG4gICAgcnVuKCdjcCcsIFsnLVInLCBqb2luKG1vdW50UG9pbnQsICdPYnNpZGlhbi5hcHAnKSwgc2hlbGxEaXJdKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBydW4oJ2hkaXV0aWwnLCBbJ2RldGFjaCcsIG1vdW50UG9pbnRdKTtcbiAgfVxuICBybVN5bmMobW91bnRQb2ludCwgeyBmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlIH0pO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgZG93bmxvYWRlZCBpbnN0YWxsZXIgYXNzZXQgaW50byBhIHNoZWxsIGRpcmVjdG9yeSwgcGVyIHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBUaGUgZG93bmxvYWRlZCBhc3NldCBwYXRoLlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIGRlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcjogc3RyaW5nKTogdm9pZCB7XG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgZXh0cmFjdFdpbmRvd3NTaGVsbChhc3NldFBhdGgsIHNoZWxsRGlyKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZXh0cmFjdExpbnV4U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcik7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBXaW5kb3dzIE5TSVMgaW5zdGFsbGVyJ3MgaW5uZXIgYXBwIHBheWxvYWQgdmlhIDctWmlwLlxuICpcbiAqIFRoZSBOU0lTIGluc3RhbGxlciBgLmV4ZWAgY29udGFpbnMgYCRQTFVHSU5TRElSL2FwcC02NC43emAsIHdoaWNoIGhvbGRzIHRoZVxuICogcG9ydGFibGUgYXBwIChtaXJyb3JzIGhvdyB0aGUgc2Nvb3AgbWFuaWZlc3QgaW5zdGFsbHMgT2JzaWRpYW4pLlxuICpcbiAqIEBwYXJhbSBhc3NldFBhdGggLSBQYXRoIHRvIHRoZSBkb3dubG9hZGVkIGAuZXhlYC5cbiAqIEBwYXJhbSBzaGVsbERpciAtIERlc3RpbmF0aW9uIHNoZWxsIGRpcmVjdG9yeS5cbiAqL1xuZnVuY3Rpb24gZXh0cmFjdFdpbmRvd3NTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXI6IHN0cmluZyk6IHZvaWQge1xuICBhc3NlcnRDb21tYW5kQXZhaWxhYmxlKCc3eicsICdJbnN0YWxsIDctWmlwIChlLmcuIGBzY29vcCBpbnN0YWxsIDd6aXBgKSB0byBleHRyYWN0IGEgcGlubmVkIE9ic2lkaWFuIGluc3RhbGxlci4nKTtcbiAgY29uc3QgbnNpc0V4dHJhY3REaXIgPSBqb2luKHNoZWxsRGlyLCAnX19uc2lzJyk7XG4gIHJ1bignN3onLCBbJ3gnLCAnLXknLCBgLW8ke25zaXNFeHRyYWN0RGlyfWAsIGFzc2V0UGF0aF0pO1xuICBjb25zdCBpbm5lckFyY2hpdmUgPSBqb2luKG5zaXNFeHRyYWN0RGlyLCAnJFBMVUdJTlNESVInLCAnYXBwLTY0Ljd6Jyk7XG4gIHJ1bignN3onLCBbJ3gnLCAnLXknLCBgLW8ke3NoZWxsRGlyfWAsIGlubmVyQXJjaGl2ZV0pO1xuICBybVN5bmMobnNpc0V4dHJhY3REaXIsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgcmVsZWFzZSdzIGFzc2V0IG5hbWVzIGZyb20gdGhlIEdpdEh1YiBBUEkuXG4gKlxuICogUmVhZHMgYSBgR0lUSFVCX1RPS0VOYCAob3IgYEdIX1RPS0VOYCkgZnJvbSB0aGUgZW52aXJvbm1lbnQgYW5kIHNlbmRzIGl0IGFzIGFcbiAqIGJlYXJlciB0b2tlbiB3aGVuIHByZXNlbnQsIHRvIGxpZnQgdGhlIGFub255bW91cyByYXRlIGxpbWl0IHRoYXQgb3RoZXJ3aXNlXG4gKiByZXR1cm5zIEhUVFAgNDAzIG9uIHNoYXJlZCBDSSBydW5uZXIgSVBzLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIHJlbGVhc2UgdmVyc2lvbiAodGFnIGB2PHZlcnNpb24+YCkuXG4gKiBAcmV0dXJucyBUaGUgYXNzZXQgbmFtZXMsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBBUEkgaXMgdW5hdmFpbGFibGUuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZldGNoUmVsZWFzZUFzc2V0TmFtZXModmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXSB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycyh7ICdBY2NlcHQnOiAnYXBwbGljYXRpb24vdm5kLmdpdGh1Yitqc29uJywgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0pO1xuICAgIC8vIFNlbmQgYSBiZWFyZXIgdG9rZW4gd2hlbiBvbmUgaXMgYXZhaWxhYmxlIChlLmcuIEdJVEhVQl9UT0tFTiBvbiBDSSkuXG4gICAgLy8gV2l0aG91dCBpdCB0aGUgYXNzZXQtbGlzdCBBUEkgaXMgbGltaXRlZCB0byB0aGUgYW5vbnltb3VzIHF1b3RhLlxuICAgIC8vIFRoYXQgcXVvdGEgcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcyBhbmQgZm9yY2VzIHRoZSBmYWxsYmFjay5cbiAgICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52WydHSVRIVUJfVE9LRU4nXSA/PyBwcm9jZXNzLmVudlsnR0hfVE9LRU4nXTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgYEJlYXJlciAke3Rva2VufWApO1xuICAgIH1cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke1JFTEVBU0VfQVBJX1RBR19VUkx9L3Yke3ZlcnNpb259YCwgeyBoZWFkZXJzIH0pO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gcmV0dXJuZWQgSFRUUCAke1N0cmluZyhyZXNwb25zZS5zdGF0dXMpfTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IHJlbGVhc2UgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgR2l0SHViUmVsZWFzZTtcbiAgICByZXR1cm4gcmVsZWFzZS5hc3NldHMubWFwKChhc3NldCkgPT4gYXNzZXQubmFtZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBSZWxlYXNlIEFQSSBmb3IgJHt2ZXJzaW9ufSB1bmF2YWlsYWJsZSAoJHtlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcil9KTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZXhwZWN0ZWQgY2FjaGVkIHNoZWxsIGV4ZWN1dGFibGUgcGF0aCBmb3IgdGhlIGN1cnJlbnQgcGxhdGZvcm0uXG4gKlxuICogQHBhcmFtIHNoZWxsRGlyIC0gVGhlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgYSB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGV4ZWN1dGFibGUgcGF0aC5cbiAqL1xuZnVuY3Rpb24gZ2V0Q2FjaGVkU2hlbGxFeGVQYXRoKHNoZWxsRGlyOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBqb2luKHNoZWxsRGlyLCAnT2JzaWRpYW4uZXhlJyk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpciwgJ09ic2lkaWFuLmFwcCcsICdDb250ZW50cycsICdNYWNPUycsICdPYnNpZGlhbicpO1xuICB9XG5cbiAgcmV0dXJuIGpvaW4oc2hlbGxEaXIsICdvYnNpZGlhbicpO1xufVxuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBvcmRlcmVkIGluc3RhbGxlciBhc3NldCBkb3dubG9hZCBVUkxzIHRvIHRyeSBmb3IgYSB2ZXJzaW9uLlxuICpcbiAqIFRoZSB2ZXJzaW9uJ3MgZXhhY3QgaW5zdGFsbGVyIFVSTCBiYWtlZCBpbnRvIHRoZSBgbWV0YWRhdGEuanNvbmAgY2F0YWxvZ1xuICogKGZyb20gdXBzdHJlYW0gYG9ic2lkaWFuLXZlcnNpb25zLmpzb25gKSBpcyB1c2VkIGRpcmVjdGx5IHdoZW4gcHJlc2VudCxcbiAqIGF2b2lkaW5nIGFueSBuZXR3b3JrIGxvb2t1cC4gT3RoZXJ3aXNlIHRoZSByZWxlYXNlJ3MgcmVhbCBhc3NldCBsaXN0IGlzXG4gKiBxdWVyaWVkIHNvIHRoZSBwbGF0Zm9ybS1jb3JyZWN0IGFzc2V0IGlzIHBpY2tlZCByZWdhcmRsZXNzIG9mIHRoZSBoaXN0b3JpY2FsXG4gKiBkb3QtdnMtaHlwaGVuIG5hbWluZzsgaWYgdGhhdCBjYWxsIHRvbyBpcyB1bmF2YWlsYWJsZSBpdCBmYWxscyBiYWNrIHRvIHRyeWluZ1xuICogYm90aCB0ZW1wbGF0ZWQgc2VwYXJhdG9yIGZvcm1zLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gVGhlIGNvbmNyZXRlIGB4LnkuemAgdmVyc2lvbi5cbiAqIEByZXR1cm5zIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUluc3RhbGxlckFzc2V0VXJscyh2ZXJzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGJha2VkVXJsID0gc2VsZWN0SW5zdGFsbGVyRG93bmxvYWRVcmwoeyBkb3dubG9hZHM6IGdldFZlcnNpb25NZXRhZGF0YSh2ZXJzaW9uKT8uZG93bmxvYWRzLCBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSB9KTtcbiAgaWYgKGJha2VkVXJsICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gW2Jha2VkVXJsXTtcbiAgfVxuXG4gIGNvbnN0IGFzc2V0TmFtZXMgPSBhd2FpdCBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb24pO1xuICBpZiAoYXNzZXROYW1lcykge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lKHsgYXNzZXROYW1lcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSk7XG4gICAgaWYgKHNlbGVjdGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBbYCR7UkVMRUFTRV9ET1dOTE9BRF9CQVNFX1VSTH0vdiR7dmVyc2lvbn0vJHtzZWxlY3RlZH1gXTtcbiAgICB9XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBObyBpbnN0YWxsZXIgYXNzZXQgbWF0Y2hlZCBmb3IgJHt2ZXJzaW9ufTsgZmFsbGluZyBiYWNrIHRvIHRlbXBsYXRlZCBhc3NldCBuYW1lcy5gKTtcbiAgfVxuXG4gIHJldHVybiBidWlsZEluc3RhbGxlckFzc2V0TmFtZUNhbmRpZGF0ZXMoeyBwbGF0Zm9ybTogcHJvY2Vzcy5wbGF0Zm9ybSwgdmVyc2lvbiB9KVxuICAgIC5tYXAoKG5hbWUpID0+IGAke1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7bmFtZX1gKTtcbn1cblxuLyoqXG4gKiBSdW5zIGEgY29tbWFuZCBzeW5jaHJvbm91c2x5LCB0aHJvd2luZyBvbiBhIG5vbi16ZXJvIGV4aXQuXG4gKlxuICogQHBhcmFtIGNvbW1hbmQgLSBUaGUgY29tbWFuZC5cbiAqIEBwYXJhbSBhcmdzIC0gVGhlIGFyZ3VtZW50cy5cbiAqL1xuZnVuY3Rpb24gcnVuKGNvbW1hbmQ6IHN0cmluZywgYXJnczogc3RyaW5nW10pOiB2b2lkIHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmQsIGFyZ3MsIHsgc3RkaW86ICdpZ25vcmUnIH0pO1xuICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZH0gJHthcmdzLm1hcCgoYXJnKSA9PiBiYXNlbmFtZShhcmcpKS5qb2luKCcgJyl9IChleGl0ICR7U3RyaW5nKHJlc3VsdC5zdGF0dXMpfSlgKTtcbiAgfVxufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBbUJBLGdDQUdPO0FBQ1AscUJBTU87QUFDUCxxQkFBdUI7QUFDdkIsdUJBSU87QUFDUCwwQkFBb0I7QUFFcEIsNkJBSU87QUFDUCxpQkFBb0I7QUFDcEIsK0JBQW1DO0FBS25DLE1BQU0sc0JBQXNCO0FBRzVCLE1BQU0sNEJBQTRCO0FBR2xDLE1BQU0sc0JBQXNCO0FBYzVCLE1BQU0saUJBQWEsMkJBQUssdUJBQU8sR0FBRyw4QkFBOEI7QUFDaEUsTUFBTSxzQkFBa0IsdUJBQUssWUFBWSxhQUFhO0FBQ3RELE1BQU0sNEJBQTRCO0FBdUIzQixTQUFTLDRCQUE0QixTQUFxQztBQUMvRSxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsU0FBUztBQUNoQyxXQUFPLHlCQUF5QixPQUFPO0FBQUEsRUFDekM7QUFFQSxNQUFJLG9CQUFBQSxRQUFRLGFBQWEsVUFBVTtBQUNqQyxXQUFPLHVCQUF1QixPQUFPO0FBQUEsRUFDdkM7QUFFQSxTQUFPLHNCQUFzQixPQUFPO0FBQ3RDO0FBVUEsZUFBc0Isa0JBQWtCLFNBQWtDO0FBQ3hFLFFBQU0sV0FBVyxrQkFBa0IsT0FBTztBQUMxQyxRQUFNLFVBQVUsc0JBQXNCLFFBQVE7QUFDOUMsVUFBSSwyQkFBVyxPQUFPLEdBQUc7QUFDdkIsd0JBQUksc0NBQXNDLE9BQU8sR0FBRztBQUNwRCxXQUFPO0FBQUEsRUFDVDtBQUVB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
|
|
225
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbGxlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEludGVncmF0aW9uLXRpbWUgaGVscGVycyBmb3IgcmVzb2x2aW5nIHRoZSBPYnNpZGlhbiAqKnNoZWxsKiogKHRoZSBFbGVjdHJvblxuICogcnVudGltZSAvIGluc3RhbGxlciBidWlsZCkgdG8gbGF1bmNoLlxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGhhcm5lc3MgdXNlcyB0aGUgaW5zdGFsbGVkIHNoZWxsLiBXaGVuIGEgc3BlY2lmaWMgaW5zdGFsbGVyXG4gKiB2ZXJzaW9uIGlzIHJlcXVlc3RlZCwgaXQgZG93bmxvYWRzIHRoYXQgdmVyc2lvbidzIEdpdEh1YiByZWxlYXNlIGFzc2V0IGFuZFxuICogZXh0cmFjdHMgYSBwb3J0YWJsZSBzaGVsbCBpbnRvIGEgY2FjaGUsIHJldHVybmluZyB0aGUgZXhlY3V0YWJsZSB0byBsYXVuY2guXG4gKlxuICogR2l0SHViIHJlbGVhc2UgYXNzZXRzIGV4aXN0IGZvciAqKnB1YmxpYyoqIHJlbGVhc2VzIG9ubHk7IGNhdGFseXN0IChiZXRhKVxuICogYnVpbGRzIHB1Ymxpc2ggb25seSB0aGUgYXNhciwgc28gaW5zdGFsbGVyLXBpbm5pbmcgc3VwcG9ydHMgcHVibGljIHZlcnNpb25zLlxuICogVGhlIGV4dHJhY3RlZCBzaGVsbCdzIGJ1bmRsZWQgYHJlc291cmNlcy9vYnNpZGlhbi5hc2FyYCBpcyB0aGF0IHZlcnNpb24sIHNvXG4gKiBwaW5uaW5nIHRoZSBpbnN0YWxsZXIgaXMgaG93IHlvdSBydW4gYSB2ZXJzaW9uICoqb2xkZXIqKiB0aGFuIHRoZSBpbnN0YWxsZWRcbiAqIHNoZWxsIChhc2FyLXN3YXAgaXMgdXBncmFkZS1vbmx5IFx1MjAxNCBzZWUgYG9ic2lkaWFuLXZlcnNpb24tc3dpdGNoLnRzYCkuXG4gKi9cblxuLyogdjggaWdub3JlIHN0YXJ0IC0tIEludGVncmF0aW9uLXRpbWUgZG93bmxvYWQvZXh0cmFjdGlvbiBnbHVlIGNvdmVyZWQgYnkgaW50ZWdyYXRpb24gdGVzdHMsIG5vdCB1bml0IHRlc3RzLiAqL1xuXG5pbXBvcnQge1xuICBleGVjRmlsZVN5bmMsXG4gIHNwYXduU3luY1xufSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHtcbiAgZXhpc3RzU3luYyxcbiAgbWtkaXJTeW5jLFxuICByZWFkRmlsZVN5bmMsXG4gIHJtU3luYyxcbiAgd3JpdGVGaWxlU3luY1xufSBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHtcbiAgYmFzZW5hbWUsXG4gIGRpcm5hbWUsXG4gIGpvaW5cbn0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGJ1aWxkSW5zdGFsbGVyQXNzZXROYW1lQ2FuZGlkYXRlcyxcbiAgc2VsZWN0SW5zdGFsbGVyQXNzZXROYW1lLFxuICBzZWxlY3RJbnN0YWxsZXJEb3dubG9hZFVybFxufSBmcm9tICcuL2luc3RhbGxlci1hc3NldC5janMnO1xuaW1wb3J0IHsgbG9nIH0gZnJvbSAnLi9sb2cuY2pzJztcbmltcG9ydCB7IGdldFZlcnNpb25NZXRhZGF0YSB9IGZyb20gJy4vb2JzaWRpYW4tbWV0YWRhdGEuY2pzJztcblxuLyoqXG4gKiBCcm93c2VyIFVzZXItQWdlbnQgZm9yIGRvd25sb2FkaW5nIHJlbGVhc2UgYXNzZXRzIChDbG91ZGZsYXJlLWdhdGVkKS5cbiAqL1xuY29uc3QgRE9XTkxPQURfVVNFUl9BR0VOVCA9ICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvODYuMC40MjQwLjE4MyBTYWZhcmkvNTM3LjM2JztcblxuLyoqXG5CYXNlIFVSTCBmb3IgYG9ic2lkaWFuLXJlbGVhc2VzYCByZWxlYXNlIGFzc2V0cyAoYC4uLi9kb3dubG9hZC92PHZlcj4vPGFzc2V0PmApLlxuICovXG5jb25zdCBSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9vYnNpZGlhbm1kL29ic2lkaWFuLXJlbGVhc2VzL3JlbGVhc2VzL2Rvd25sb2FkJztcblxuLyoqXG5HaXRIdWIgUkVTVCBlbmRwb2ludCBsaXN0aW5nIGEgcmVsZWFzZSdzIGFzc2V0cyBieSB0YWcgKGAuLi4vcmVsZWFzZXMvdGFncy92PHZlcj5gKS5cbiAqL1xuY29uc3QgUkVMRUFTRV9BUElfVEFHX1VSTCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL29ic2lkaWFubWQvb2JzaWRpYW4tcmVsZWFzZXMvcmVsZWFzZXMvdGFncyc7XG5cbi8qKlxuVGhlIHN1YnNldCBvZiB0aGUgR2l0SHViIHJlbGVhc2UgQVBJIHJlc3BvbnNlIHRoaXMgbW9kdWxlIHJlYWRzLlxuICovXG5pbnRlcmZhY2UgR2l0SHViUmVsZWFzZSB7XG4gIC8qKlxuICBUaGUgcmVsZWFzZSdzIGRvd25sb2FkYWJsZSBhc3NldHMuXG4gICAqL1xuICByZWFkb25seSBhc3NldHM6IHJlYWRvbmx5IEdpdEh1YlJlbGVhc2VBc3NldFtdO1xufVxuXG4vKipcblRoZSBzdWJzZXQgb2YgYSBHaXRIdWIgcmVsZWFzZSdzIGFzc2V0IG9iamVjdCB0aGlzIG1vZHVsZSByZWFkcy5cbiAqL1xuaW50ZXJmYWNlIEdpdEh1YlJlbGVhc2VBc3NldCB7XG4gIC8qKlxuICBUaGUgYXNzZXQgZmlsZSBuYW1lLCBlLmcuIGBPYnNpZGlhbi4wLjE0LjUuZXhlYC5cbiAgICovXG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbn1cblxuY29uc3QgQ0FDSEVfUk9PVCA9IGpvaW4odG1wZGlyKCksICdvYnNpZGlhbi1pbnRlZ3JhdGlvbi10ZXN0aW5nJyk7XG5jb25zdCBTSEVMTF9DQUNIRV9ESVIgPSBqb2luKENBQ0hFX1JPT1QsICdzaGVsbC1jYWNoZScpO1xuY29uc3QgTUFDX1BMSVNUX1ZFUlNJT05fUEFUVEVSTiA9IC88a2V5PkNGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nPFxcL2tleT5cXHMqPHN0cmluZz4oPzx2ZXJzaW9uPltePF0rKTxcXC9zdHJpbmc+LztcblxuLyoqXG4gKiBBIHJlc29sdmVkIE9ic2lkaWFuIHNoZWxsIGV4ZWN1dGFibGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb2x2ZWRTaGVsbCB7XG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBPYnNpZGlhbiBleGVjdXRhYmxlIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgVGhlIHNoZWxsJ3MgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAgaWYgaXQgY291bGQgbm90IGJlIGRldGVjdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIERldGVjdHMgdGhlIHZlcnNpb24gb2YgYW4gaW5zdGFsbGVkIE9ic2lkaWFuIHNoZWxsIGZyb20gaXRzIGV4ZWN1dGFibGUuXG4gKlxuICogLSBXaW5kb3dzOiB0aGUgZXhlY3V0YWJsZSdzIFBFIGBGaWxlVmVyc2lvbmAuXG4gKiAtIG1hY09TOiBgQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmdgIGZyb20gdGhlIGFwcCBidW5kbGUncyBgSW5mby5wbGlzdGAuXG4gKiAtIExpbnV4OiBiZXN0LWVmZm9ydCBwYXJzZSBmcm9tIHRoZSBleGVjdXRhYmxlIHBhdGggKG9mdGVuIGB1bmRlZmluZWRgKS5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIEFic29sdXRlIHBhdGggdG8gdGhlIE9ic2lkaWFuIGV4ZWN1dGFibGUuXG4gKiBAcmV0dXJucyBUaGUgYHgueS56YCB2ZXJzaW9uLCBvciBgdW5kZWZpbmVkYCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdEluc3RhbGxlZFNoZWxsVmVyc2lvbihleGVQYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIHJldHVybiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aCk7XG4gIH1cblxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ2RhcndpbicpIHtcbiAgICByZXR1cm4gZGV0ZWN0TWFjQnVuZGxlVmVyc2lvbihleGVQYXRoKTtcbiAgfVxuXG4gIHJldHVybiBkZXRlY3RWZXJzaW9uRnJvbVBhdGgoZXhlUGF0aCk7XG59XG5cbi8qKlxuICogRW5zdXJlcyBhIHBvcnRhYmxlIE9ic2lkaWFuIHNoZWxsIGZvciB0aGUgZ2l2ZW4gdmVyc2lvbiBpcyBleHRyYWN0ZWQgaW50byB0aGVcbiAqIGNhY2hlLCBkb3dubG9hZGluZyBhbmQgZXh0cmFjdGluZyBpdHMgR2l0SHViIHJlbGVhc2UgYXNzZXQgaWYgbmVjZXNzYXJ5LlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlLlxuICogQHRocm93cyBFcnJvciBpZiB0aGUgYXNzZXQgY2Fubm90IGJlIGRvd25sb2FkZWQgb3IgZXh0cmFjdGVkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlU2hlbGxDYWNoZWQodmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3Qgc2hlbGxEaXJlY3RvcnkgPSBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uKTtcbiAgY29uc3QgZXhlUGF0aCA9IGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeSk7XG4gIGlmIChleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgbG9nKGBbaW5zdGFsbGVyXSBVc2luZyBjYWNoZWQgc2hlbGwgZm9yICR7dmVyc2lvbn0uYCk7XG4gICAgcmV0dXJuIGV4ZVBhdGg7XG4gIH1cblxuICBta2RpclN5bmMoc2hlbGxEaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBjb25zdCBhc3NldFVybHMgPSBhd2FpdCByZXNvbHZlSW5zdGFsbGVyQXNzZXRVcmxzKHZlcnNpb24pO1xuICBjb25zdCBhc3NldFBhdGggPSBhd2FpdCBkb3dubG9hZEluc3RhbGxlckFzc2V0KGFzc2V0VXJscywgc2hlbGxEaXJlY3RvcnksIHZlcnNpb24pO1xuICBleHRyYWN0U2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gIHJtU3luYyhhc3NldFBhdGgsIHsgZm9yY2U6IHRydWUgfSk7XG5cbiAgaWYgKCFleGlzdHNTeW5jKGV4ZVBhdGgpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHRyYWN0ZWQgT2JzaWRpYW4gc2hlbGwgJHt2ZXJzaW9ufSBidXQgZXhlY3V0YWJsZSBub3QgZm91bmQgYXQgJHtleGVQYXRofS5gKTtcbiAgfVxuICBsb2coYFtpbnN0YWxsZXJdIEV4dHJhY3RlZCBzaGVsbCAke3ZlcnNpb259IC0+ICR7ZXhlUGF0aH1gKTtcbiAgcmV0dXJuIGV4ZVBhdGg7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY2FjaGUgZGlyZWN0b3J5IGEgdmVyc2lvbidzIGV4dHJhY3RlZCBzaGVsbCBsaXZlcyBpbiAodGhlXG4gKiBkaXJlY3RvcnkgbWF5IG5vdCB5ZXQgZXhpc3QpLlxuICpcbiAqIEBwYXJhbSB2ZXJzaW9uIC0gQSBjb25jcmV0ZSBwdWJsaWMgYHgueS56YCB2ZXJzaW9uLlxuICogQHJldHVybnMgVGhlIGFic29sdXRlIHNoZWxsIGNhY2hlIGRpcmVjdG9yeSBmb3IgdGhlIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRDYWNoZWRTaGVsbERpcmVjdG9yeSh2ZXJzaW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gam9pbihTSEVMTF9DQUNIRV9ESVIsIHZlcnNpb24pO1xufVxuXG4vKipcbiAqIFRocm93cyBhIGRlc2NyaXB0aXZlIGVycm9yIGlmIGEgcmVxdWlyZWQgY29tbWFuZCBpcyBub3Qgb24gYFBBVEhgLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQgbmFtZS5cbiAqIEBwYXJhbSBoaW50IC0gQWN0aW9uYWJsZSBndWlkYW5jZSBhcHBlbmRlZCB0byB0aGUgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIGFzc2VydENvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nLCBoaW50OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgcHJvYmUgPSBwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInID8gJ3doZXJlLmV4ZScgOiAnd2hpY2gnO1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMocHJvYmUsIFtjb21tYW5kXSwgeyBzdGRpbzogJ2lnbm9yZScgfSk7XG4gIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBSZXF1aXJlZCBjb21tYW5kIFwiJHtjb21tYW5kfVwiIHdhcyBub3QgZm91bmQgb24gUEFUSC4gJHtoaW50fWApO1xuICB9XG59XG5cbi8qKlxuICogUmVhZHMgYENGQnVuZGxlU2hvcnRWZXJzaW9uU3RyaW5nYCBmcm9tIGEgbWFjT1MgYXBwIGJ1bmRsZSdzIGBJbmZvLnBsaXN0YC5cbiAqXG4gKiBAcGFyYW0gZXhlUGF0aCAtIFBhdGggdG8gYC4uLi9PYnNpZGlhbi5hcHAvQ29udGVudHMvTWFjT1MvT2JzaWRpYW5gLlxuICogQHJldHVybnMgVGhlIGB4LnkuemAgdmVyc2lvbiwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdE1hY0J1bmRsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjb250ZW50c0RpcmVjdG9yeSA9IGRpcm5hbWUoZGlybmFtZShleGVQYXRoKSk7XG4gICAgY29uc3QgcGxpc3QgPSByZWFkRmlsZVN5bmMoam9pbihjb250ZW50c0RpcmVjdG9yeSwgJ0luZm8ucGxpc3QnKSwgJ3V0Zi04Jyk7XG4gICAgY29uc3QgbWF0Y2ggPSBNQUNfUExJU1RfVkVSU0lPTl9QQVRURVJOLmV4ZWMocGxpc3QpO1xuICAgIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3ZlcnNpb24nXTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEJlc3QtZWZmb3J0IHBhcnNlIG9mIGFuIGB4LnkuemAgdmVyc2lvbiBlbWJlZGRlZCBpbiBhIHBhdGguXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIHBhdGggb3Igc3RyaW5nIHRvIHNjYW4uXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgYHgueS56YCBtYXRjaCwgb3IgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGRldGVjdFZlcnNpb25Gcm9tUGF0aCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbWF0Y2ggPSAvKD88dmVyc2lvbj5cXGQrXFwuXFxkK1xcLlxcZCspLy5leGVjKHZhbHVlKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/LlsndmVyc2lvbiddO1xufVxuXG4vKipcbiAqIFJlYWRzIHRoZSBQRSBgRmlsZVZlcnNpb25gIG9mIGEgV2luZG93cyBleGVjdXRhYmxlIHZpYSBQb3dlclNoZWxsLlxuICpcbiAqIEBwYXJhbSBleGVQYXRoIC0gQWJzb2x1dGUgcGF0aCB0byB0aGUgZXhlY3V0YWJsZS5cbiAqIEByZXR1cm5zIFRoZSBgeC55LnpgIHZlcnNpb24sIG9yIGB1bmRlZmluZWRgLlxuICovXG5mdW5jdGlvbiBkZXRlY3RXaW5kb3dzRmlsZVZlcnNpb24oZXhlUGF0aDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjRmlsZVN5bmMoXG4gICAgICAncG93ZXJzaGVsbCcsXG4gICAgICBbJy1Ob1Byb2ZpbGUnLCAnLUNvbW1hbmQnLCBgKEdldC1JdGVtIC1MaXRlcmFsUGF0aCAke0pTT04uc3RyaW5naWZ5KGV4ZVBhdGgpfSkuVmVyc2lvbkluZm8uRmlsZVZlcnNpb25gXSxcbiAgICAgIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfVxuICAgICk7XG4gICAgY29uc3QgdmVyc2lvbiA9IG91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIHZlcnNpb24ubGVuZ3RoID4gMCA/IHZlcnNpb24gOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZHMgYSBzaW5nbGUgcmVsZWFzZSBhc3NldCBmb3IgYSB2ZXJzaW9uIHRvIGEgZGVzdGluYXRpb24gZmlsZS5cbiAqXG4gKiBAcGFyYW0gdXJsIC0gVGhlIGFzc2V0IGRvd25sb2FkIFVSTC5cbiAqIEBwYXJhbSBkZXN0aW5hdGlvbiAtIERlc3RpbmF0aW9uIGZpbGUgcGF0aC5cbiAqIEB0aHJvd3MgRXJyb3IgaWYgdGhlIHJlcXVlc3QgZmFpbHMuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkQXNzZXQodXJsOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgbG9nKGBbaW5zdGFsbGVyXSBEb3dubG9hZGluZyBpbnN0YWxsZXIgZnJvbSAke3VybH0gLi4uYCk7XG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsLCB7IGhlYWRlcnM6IHsgJ1VzZXItQWdlbnQnOiBET1dOTE9BRF9VU0VSX0FHRU5UIH0gfSk7XG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX1gKTtcbiAgfVxuICB3cml0ZUZpbGVTeW5jKGRlc3RpbmF0aW9uLCBCdWZmZXIuZnJvbShhd2FpdCByZXNwb25zZS5hcnJheUJ1ZmZlcigpKSk7XG59XG5cbi8qKlxuICogRG93bmxvYWRzIHRoZSBmaXJzdCByZWFjaGFibGUgaW5zdGFsbGVyIGFzc2V0IGZyb20gYW4gb3JkZXJlZCBsaXN0IG9mXG4gKiBjYW5kaWRhdGUgVVJMcywgcmV0dXJuaW5nIHRoZSBwYXRoIGl0IHdhcyBzYXZlZCB0by5cbiAqXG4gKiBAcGFyYW0gdXJscyAtIENhbmRpZGF0ZSBhc3NldCBVUkxzLCBpbiBwcmlvcml0eSBvcmRlci5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKGZvciBlcnJvciBtZXNzYWdlcykuXG4gKiBAcmV0dXJucyBUaGUgZG93bmxvYWRlZCBhc3NldCdzIHBhdGguXG4gKiBAdGhyb3dzIEVycm9yIGlmIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgY2FuIGJlIGRvd25sb2FkZWQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkSW5zdGFsbGVyQXNzZXQodXJsczogc3RyaW5nW10sIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcsIHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGVycm9yczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB1cmwgb2YgdXJscykge1xuICAgIGNvbnN0IGFzc2V0UGF0aCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksIGJhc2VuYW1lKHVybCkpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkb3dubG9hZEFzc2V0KHVybCwgYXNzZXRQYXRoKTtcbiAgICAgIHJldHVybiBhc3NldFBhdGg7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9ycy5wdXNoKGAke3VybH06ICR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgRmFpbGVkIHRvIGRvd25sb2FkIE9ic2lkaWFuIGluc3RhbGxlciAke3ZlcnNpb259LiBBdHRlbXB0czogJHtlcnJvcnMuam9pbignOyAnKX0uIGBcbiAgICAgICsgJ0NhdGFseXN0L2JldGEgdmVyc2lvbnMgaGF2ZSBubyBwdWJsaWMgaW5zdGFsbGVyIFx1MjAxNCBwaW4gYW4gYXNhciB2ZXJzaW9uIG9uIGEgcHVibGljL2luc3RhbGxlZCBzaGVsbCBpbnN0ZWFkLidcbiAgKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIExpbnV4IGAudGFyLmd6YCBwb3J0YWJsZSBidWlsZC5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLnRhci5nemAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aDogc3RyaW5nLCBzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogdm9pZCB7XG4gIHJ1bigndGFyJywgWyd4emYnLCBhc3NldFBhdGgsICctQycsIHNoZWxsRGlyZWN0b3J5LCAnLS1zdHJpcC1jb21wb25lbnRzPTEnXSk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSBtYWNPUyBgLmRtZ2AgYnkgbW91bnRpbmcgaXQgYW5kIGNvcHlpbmcgdGhlIGFwcCBidW5kbGUuXG4gKlxuICogQHBhcmFtIGFzc2V0UGF0aCAtIFBhdGggdG8gdGhlIGRvd25sb2FkZWQgYC5kbWdgLlxuICogQHBhcmFtIHNoZWxsRGlyZWN0b3J5IC0gRGVzdGluYXRpb24gc2hlbGwgZGlyZWN0b3J5LlxuICovXG5mdW5jdGlvbiBleHRyYWN0TWFjU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgY29uc3QgbW91bnRQb2ludCA9IGpvaW4oc2hlbGxEaXJlY3RvcnksICdfX21udCcpO1xuICBta2RpclN5bmMobW91bnRQb2ludCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIHJ1bignaGRpdXRpbCcsIFsnYXR0YWNoJywgJy1ub2Jyb3dzZScsICctbW91bnRwb2ludCcsIG1vdW50UG9pbnQsIGFzc2V0UGF0aF0pO1xuICB0cnkge1xuICAgIHJ1bignY3AnLCBbJy1SJywgam9pbihtb3VudFBvaW50LCAnT2JzaWRpYW4uYXBwJyksIHNoZWxsRGlyZWN0b3J5XSk7XG4gIH0gZmluYWxseSB7XG4gICAgcnVuKCdoZGl1dGlsJywgWydkZXRhY2gnLCBtb3VudFBvaW50XSk7XG4gIH1cbiAgcm1TeW5jKG1vdW50UG9pbnQsIHsgZm9yY2U6IHRydWUsIHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBhIGRvd25sb2FkZWQgaW5zdGFsbGVyIGFzc2V0IGludG8gYSBzaGVsbCBkaXJlY3RvcnksIHBlciBwbGF0Zm9ybS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gVGhlIGRvd25sb2FkZWQgYXNzZXQgcGF0aC5cbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBkZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RTaGVsbChhc3NldFBhdGg6IHN0cmluZywgc2hlbGxEaXJlY3Rvcnk6IHN0cmluZyk6IHZvaWQge1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoLCBzaGVsbERpcmVjdG9yeSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgZXh0cmFjdE1hY1NoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGV4dHJhY3RMaW51eFNoZWxsKGFzc2V0UGF0aCwgc2hlbGxEaXJlY3RvcnkpO1xufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgV2luZG93cyBOU0lTIGluc3RhbGxlcidzIGlubmVyIGFwcCBwYXlsb2FkIHZpYSA3LVppcC5cbiAqXG4gKiBUaGUgTlNJUyBpbnN0YWxsZXIgYC5leGVgIGNvbnRhaW5zIGAkUExVR0lOU0RJUi9hcHAtNjQuN3pgLCB3aGljaCBob2xkcyB0aGVcbiAqIHBvcnRhYmxlIGFwcCAobWlycm9ycyBob3cgdGhlIHNjb29wIG1hbmlmZXN0IGluc3RhbGxzIE9ic2lkaWFuKS5cbiAqXG4gKiBAcGFyYW0gYXNzZXRQYXRoIC0gUGF0aCB0byB0aGUgZG93bmxvYWRlZCBgLmV4ZWAuXG4gKiBAcGFyYW0gc2hlbGxEaXJlY3RvcnkgLSBEZXN0aW5hdGlvbiBzaGVsbCBkaXJlY3RvcnkuXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RXaW5kb3dzU2hlbGwoYXNzZXRQYXRoOiBzdHJpbmcsIHNoZWxsRGlyZWN0b3J5OiBzdHJpbmcpOiB2b2lkIHtcbiAgYXNzZXJ0Q29tbWFuZEF2YWlsYWJsZSgnN3onLCAnSW5zdGFsbCA3LVppcCAoZS5nLiBgc2Nvb3AgaW5zdGFsbCA3emlwYCkgdG8gZXh0cmFjdCBhIHBpbm5lZCBPYnNpZGlhbiBpbnN0YWxsZXIuJyk7XG4gIGNvbnN0IG5zaXNFeHRyYWN0RGlyZWN0b3J5ID0gam9pbihzaGVsbERpcmVjdG9yeSwgJ19fbnNpcycpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtuc2lzRXh0cmFjdERpcmVjdG9yeX1gLCBhc3NldFBhdGhdKTtcbiAgY29uc3QgaW5uZXJBcmNoaXZlID0gam9pbihuc2lzRXh0cmFjdERpcmVjdG9yeSwgJyRQTFVHSU5TRElSJywgJ2FwcC02NC43eicpO1xuICBydW4oJzd6JywgWyd4JywgJy15JywgYC1vJHtzaGVsbERpcmVjdG9yeX1gLCBpbm5lckFyY2hpdmVdKTtcbiAgcm1TeW5jKG5zaXNFeHRyYWN0RGlyZWN0b3J5LCB7IGZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWUgfSk7XG59XG5cbi8qKlxuICogRmV0Y2hlcyBhIHJlbGVhc2UncyBhc3NldCBuYW1lcyBmcm9tIHRoZSBHaXRIdWIgQVBJLlxuICpcbiAqIFJlYWRzIGEgYEdJVEhVQl9UT0tFTmAgKG9yIGBHSF9UT0tFTmApIGZyb20gdGhlIGVudmlyb25tZW50IGFuZCBzZW5kcyBpdCBhcyBhXG4gKiBiZWFyZXIgdG9rZW4gd2hlbiBwcmVzZW50LCB0byBsaWZ0IHRoZSBhbm9ueW1vdXMgcmF0ZSBsaW1pdCB0aGF0IG90aGVyd2lzZVxuICogcmV0dXJucyBIVFRQIDQwMyBvbiBzaGFyZWQgQ0kgcnVubmVyIElQcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSByZWxlYXNlIHZlcnNpb24gKHRhZyBgdjx2ZXJzaW9uPmApLlxuICogQHJldHVybnMgVGhlIGFzc2V0IG5hbWVzLCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgQVBJIGlzIHVuYXZhaWxhYmxlLlxuICovXG5hc3luYyBmdW5jdGlvbiBmZXRjaFJlbGVhc2VBc3NldE5hbWVzKHZlcnNpb246IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10gfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoeyAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL3ZuZC5naXRodWIranNvbicsICdVc2VyLUFnZW50JzogRE9XTkxPQURfVVNFUl9BR0VOVCB9KTtcbiAgICAvLyBTZW5kIGEgYmVhcmVyIHRva2VuIHdoZW4gb25lIGlzIGF2YWlsYWJsZSAoZS5nLiBHSVRIVUJfVE9LRU4gb24gQ0kpLlxuICAgIC8vIFdpdGhvdXQgaXQgdGhlIGFzc2V0LWxpc3QgQVBJIGlzIGxpbWl0ZWQgdG8gdGhlIGFub255bW91cyBxdW90YS5cbiAgICAvLyBUaGF0IHF1b3RhIHJldHVybnMgSFRUUCA0MDMgb24gc2hhcmVkIENJIHJ1bm5lciBJUHMgYW5kIGZvcmNlcyB0aGUgZmFsbGJhY2suXG4gICAgY29uc3QgdG9rZW4gPSBwcm9jZXNzLmVudlsnR0lUSFVCX1RPS0VOJ10gPz8gcHJvY2Vzcy5lbnZbJ0dIX1RPS0VOJ107XG4gICAgaWYgKHRva2VuKSB7XG4gICAgICBoZWFkZXJzLnNldCgnQXV0aG9yaXphdGlvbicsIGBCZWFyZXIgJHt0b2tlbn1gKTtcbiAgICB9XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtSRUxFQVNFX0FQSV9UQUdfVVJMfS92JHt2ZXJzaW9ufWAsIHsgaGVhZGVycyB9KTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICBsb2coYFtpbnN0YWxsZXJdIFJlbGVhc2UgQVBJIGZvciAke3ZlcnNpb259IHJldHVybmVkIEhUVFAgJHtTdHJpbmcocmVzcG9uc2Uuc3RhdHVzKX07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCByZWxlYXNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIEdpdEh1YlJlbGVhc2U7XG4gICAgcmV0dXJuIHJlbGVhc2UuYXNzZXRzLm1hcCgoYXNzZXQpID0+IGFzc2V0Lm5hbWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxvZyhgW2luc3RhbGxlcl0gUmVsZWFzZSBBUEkgZm9yICR7dmVyc2lvbn0gdW5hdmFpbGFibGUgKCR7ZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yLm1lc3NhZ2UgOiBTdHJpbmcoZXJyb3IpfSk7IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGV4cGVjdGVkIGNhY2hlZCBzaGVsbCBleGVjdXRhYmxlIHBhdGggZm9yIHRoZSBjdXJyZW50IHBsYXRmb3JtLlxuICpcbiAqIEBwYXJhbSBzaGVsbERpcmVjdG9yeSAtIFRoZSBzaGVsbCBjYWNoZSBkaXJlY3RvcnkgZm9yIGEgdmVyc2lvbi5cbiAqIEByZXR1cm5zIFRoZSBleGVjdXRhYmxlIHBhdGguXG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlZFNoZWxsRXhlUGF0aChzaGVsbERpcmVjdG9yeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcbiAgICByZXR1cm4gam9pbihzaGVsbERpcmVjdG9yeSwgJ09ic2lkaWFuLmV4ZScpO1xuICB9XG5cbiAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICdkYXJ3aW4nKSB7XG4gICAgcmV0dXJuIGpvaW4oc2hlbGxEaXJlY3RvcnksICdPYnNpZGlhbi5hcHAnLCAnQ29udGVudHMnLCAnTWFjT1MnLCAnT2JzaWRpYW4nKTtcbiAgfVxuXG4gIHJldHVybiBqb2luKHNoZWxsRGlyZWN0b3J5LCAnb2JzaWRpYW4nKTtcbn1cblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgb3JkZXJlZCBpbnN0YWxsZXIgYXNzZXQgZG93bmxvYWQgVVJMcyB0byB0cnkgZm9yIGEgdmVyc2lvbi5cbiAqXG4gKiBUaGUgdmVyc2lvbidzIGV4YWN0IGluc3RhbGxlciBVUkwgYmFrZWQgaW50byB0aGUgYG1ldGFkYXRhLmpzb25gIGNhdGFsb2dcbiAqIChmcm9tIHVwc3RyZWFtIGBvYnNpZGlhbi12ZXJzaW9ucy5qc29uYCkgaXMgdXNlZCBkaXJlY3RseSB3aGVuIHByZXNlbnQsXG4gKiBhdm9pZGluZyBhbnkgbmV0d29yayBsb29rdXAuIE90aGVyd2lzZSB0aGUgcmVsZWFzZSdzIHJlYWwgYXNzZXQgbGlzdCBpc1xuICogcXVlcmllZCBzbyB0aGUgcGxhdGZvcm0tY29ycmVjdCBhc3NldCBpcyBwaWNrZWQgcmVnYXJkbGVzcyBvZiB0aGUgaGlzdG9yaWNhbFxuICogZG90LXZzLWh5cGhlbiBuYW1pbmc7IGlmIHRoYXQgY2FsbCB0b28gaXMgdW5hdmFpbGFibGUgaXQgZmFsbHMgYmFjayB0byB0cnlpbmdcbiAqIGJvdGggdGVtcGxhdGVkIHNlcGFyYXRvciBmb3Jtcy5cbiAqXG4gKiBAcGFyYW0gdmVyc2lvbiAtIFRoZSBjb25jcmV0ZSBgeC55LnpgIHZlcnNpb24uXG4gKiBAcmV0dXJucyBDYW5kaWRhdGUgYXNzZXQgVVJMcywgaW4gcHJpb3JpdHkgb3JkZXIuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVJbnN0YWxsZXJBc3NldFVybHModmVyc2lvbjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBiYWtlZFVybCA9IHNlbGVjdEluc3RhbGxlckRvd25sb2FkVXJsKHsgZG93bmxvYWRzOiBnZXRWZXJzaW9uTWV0YWRhdGEodmVyc2lvbik/LmRvd25sb2FkcywgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0gfSk7XG4gIGlmIChiYWtlZFVybCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFtiYWtlZFVybF07XG4gIH1cblxuICBjb25zdCBhc3NldE5hbWVzID0gYXdhaXQgZmV0Y2hSZWxlYXNlQXNzZXROYW1lcyh2ZXJzaW9uKTtcbiAgaWYgKGFzc2V0TmFtZXMpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHNlbGVjdEluc3RhbGxlckFzc2V0TmFtZSh7IGFzc2V0TmFtZXMsIHBsYXRmb3JtOiBwcm9jZXNzLnBsYXRmb3JtLCB2ZXJzaW9uIH0pO1xuICAgIGlmIChzZWxlY3RlZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gW2Ake1JFTEVBU0VfRE9XTkxPQURfQkFTRV9VUkx9L3Yke3ZlcnNpb259LyR7c2VsZWN0ZWR9YF07XG4gICAgfVxuICAgIGxvZyhgW2luc3RhbGxlcl0gTm8gaW5zdGFsbGVyIGFzc2V0IG1hdGNoZWQgZm9yICR7dmVyc2lvbn07IGZhbGxpbmcgYmFjayB0byB0ZW1wbGF0ZWQgYXNzZXQgbmFtZXMuYCk7XG4gIH1cblxuICByZXR1cm4gYnVpbGRJbnN0YWxsZXJBc3NldE5hbWVDYW5kaWRhdGVzKHsgcGxhdGZvcm06IHByb2Nlc3MucGxhdGZvcm0sIHZlcnNpb24gfSlcbiAgICAubWFwKChuYW1lKSA9PiBgJHtSRUxFQVNFX0RPV05MT0FEX0JBU0VfVVJMfS92JHt2ZXJzaW9ufS8ke25hbWV9YCk7XG59XG5cbi8qKlxuICogUnVucyBhIGNvbW1hbmQgc3luY2hyb25vdXNseSwgdGhyb3dpbmcgb24gYSBub24temVybyBleGl0LlxuICpcbiAqIEBwYXJhbSBjb21tYW5kIC0gVGhlIGNvbW1hbmQuXG4gKiBAcGFyYW0gY29tbWFuZEFyZ3VtZW50cyAtIFRoZSBhcmd1bWVudHMuXG4gKi9cbmZ1bmN0aW9uIHJ1bihjb21tYW5kOiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kLCBjb21tYW5kQXJndW1lbnRzLCB7IHN0ZGlvOiAnaWdub3JlJyB9KTtcbiAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmR9ICR7Y29tbWFuZEFyZ3VtZW50cy5tYXAoKGFyZ3VtZW50KSA9PiBiYXNlbmFtZShhcmd1bWVudCkpLmpvaW4oJyAnKX0gKGV4aXQgJHtTdHJpbmcocmVzdWx0LnN0YXR1cyl9KWApO1xuICB9XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFtQkEsZ0NBR087QUFDUCxxQkFNTztBQUNQLHFCQUF1QjtBQUN2Qix1QkFJTztBQUNQLDBCQUFvQjtBQUVwQiw2QkFJTztBQUNQLGlCQUFvQjtBQUNwQiwrQkFBbUM7QUFLbkMsTUFBTSxzQkFBc0I7QUFLNUIsTUFBTSw0QkFBNEI7QUFLbEMsTUFBTSxzQkFBc0I7QUFzQjVCLE1BQU0saUJBQWEsMkJBQUssdUJBQU8sR0FBRyw4QkFBOEI7QUFDaEUsTUFBTSxzQkFBa0IsdUJBQUssWUFBWSxhQUFhO0FBQ3RELE1BQU0sNEJBQTRCO0FBMkIz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LFVBQVUsT0FBTyxLQUFLLENBQUMsMkNBQTJDO0FBQzVKLFdBQU87QUFBQSxFQUNUO0FBQ0Y7QUFRQSxTQUFTLHNCQUFzQixnQkFBZ0M7QUFDN0QsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFNBQVM7QUFDaEMsZUFBTyx1QkFBSyxnQkFBZ0IsY0FBYztBQUFBLEVBQzVDO0FBRUEsTUFBSSxvQkFBQUEsUUFBUSxhQUFhLFVBQVU7QUFDakMsZUFBTyx1QkFBSyxnQkFBZ0IsZ0JBQWdCLFlBQVksU0FBUyxVQUFVO0FBQUEsRUFDN0U7QUFFQSxhQUFPLHVCQUFLLGdCQUFnQixVQUFVO0FBQ3hDO0FBZUEsZUFBZSwwQkFBMEIsU0FBb0M7QUFDM0UsUUFBTSxlQUFXLG1EQUEyQixFQUFFLGVBQVcsNkNBQW1CLE9BQU8sR0FBRyxXQUFXLFVBQVUsb0JBQUFBLFFBQVEsU0FBUyxDQUFDO0FBQzdILE1BQUksYUFBYSxRQUFXO0FBQzFCLFdBQU8sQ0FBQyxRQUFRO0FBQUEsRUFDbEI7QUFFQSxRQUFNLGFBQWEsTUFBTSx1QkFBdUIsT0FBTztBQUN2RCxNQUFJLFlBQVk7QUFDZCxVQUFNLGVBQVcsaURBQXlCLEVBQUUsWUFBWSxVQUFVLG9CQUFBQSxRQUFRLFVBQVUsUUFBUSxDQUFDO0FBQzdGLFFBQUksYUFBYSxRQUFXO0FBQzFCLGFBQU8sQ0FBQyxHQUFHLHlCQUF5QixLQUFLLE9BQU8sSUFBSSxRQUFRLEVBQUU7QUFBQSxJQUNoRTtBQUNBLHdCQUFJLDhDQUE4QyxPQUFPLDBDQUEwQztBQUFBLEVBQ3JHO0FBRUEsYUFBTywwREFBa0MsRUFBRSxVQUFVLG9CQUFBQSxRQUFRLFVBQVUsUUFBUSxDQUFDLEVBQzdFLElBQUksQ0FBQyxTQUFTLEdBQUcseUJBQXlCLEtBQUssT0FBTyxJQUFJLElBQUksRUFBRTtBQUNyRTtBQVFBLFNBQVMsSUFBSSxTQUFpQixrQkFBa0M7QUFDOUQsUUFBTSxhQUFTLHFDQUFVLFNBQVMsa0JBQWtCLEVBQUUsT0FBTyxTQUFTLENBQUM7QUFDdkUsTUFBSSxPQUFPLFdBQVcsR0FBRztBQUN2QixVQUFNLElBQUksTUFBTSxtQkFBbUIsT0FBTyxJQUFJLGlCQUFpQixJQUFJLENBQUMsaUJBQWEsMkJBQVMsUUFBUSxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsVUFBVSxPQUFPLE9BQU8sTUFBTSxDQUFDLEdBQUc7QUFBQSxFQUNsSjtBQUNGOyIsCiAgIm5hbWVzIjogWyJwcm9jZXNzIl0KfQo=
|
|
@@ -18,9 +18,13 @@
|
|
|
18
18
|
* A resolved Obsidian shell executable.
|
|
19
19
|
*/
|
|
20
20
|
export interface ResolvedShell {
|
|
21
|
-
/**
|
|
21
|
+
/**
|
|
22
|
+
Absolute path to the Obsidian executable to launch.
|
|
23
|
+
*/
|
|
22
24
|
readonly exePath: string;
|
|
23
|
-
/**
|
|
25
|
+
/**
|
|
26
|
+
The shell's version, or `undefined` if it could not be detected.
|
|
27
|
+
*/
|
|
24
28
|
readonly version: string | undefined;
|
|
25
29
|
}
|
|
26
30
|
/**
|
|
@@ -50,4 +54,4 @@ export declare function ensureShellCached(version: string): Promise<string>;
|
|
|
50
54
|
* @param version - A concrete public `x.y.z` version.
|
|
51
55
|
* @returns The absolute shell cache directory for the version.
|
|
52
56
|
*/
|
|
53
|
-
export declare function
|
|
57
|
+
export declare function getCachedShellDirectory(version: string): string;
|
|
@@ -35,10 +35,10 @@ async function launchOwnedObsidianInstance(params) {
|
|
|
35
35
|
const port = await pickFreePort();
|
|
36
36
|
const cdpUrl = `http://${cdpHost}:${String(port)}`;
|
|
37
37
|
const livenessServer = await (0, import_parent_liveness.startParentLivenessServer)();
|
|
38
|
-
(0, import_log.log)(`[obsidian-instance] Launching owned Obsidian: userData=${params.
|
|
38
|
+
(0, import_log.log)(`[obsidian-instance] Launching owned Obsidian: userData=${params.userDataDirectory}, cdpPort=${String(port)}`);
|
|
39
39
|
const child = (0, import_node_child_process.spawn)(
|
|
40
40
|
params.exePath,
|
|
41
|
-
[`--user-data-dir=${params.
|
|
41
|
+
[`--user-data-dir=${params.userDataDirectory}`, `--remote-debugging-port=${String(port)}`, ...params.extraArguments ?? []],
|
|
42
42
|
{ detached: true, stdio: "ignore" }
|
|
43
43
|
);
|
|
44
44
|
child.unref();
|
|
@@ -100,4 +100,4 @@ async function waitForCdpReady(cdpUrl) {
|
|
|
100
100
|
launchOwnedObsidianInstance,
|
|
101
101
|
pickFreePort
|
|
102
102
|
});
|
|
103
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbmNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGF1bmNoZXMgYW5kIG1hbmFnZXMgYSBoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBPYnNpZGlhbiBkZXNrdG9wIGluc3RhbmNlLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBydW5zIGFnYWluc3QgYSBkZWRpY2F0ZWQgYC0tdXNlci1kYXRhLWRpcmAgKHNvIGl0IG5ldmVyIHRvdWNoZXNcbiAqIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnLCByZWdpc3RyeSwgb3IgcnVubmluZyB3aW5kb3cpIGFuZCBleHBvc2VzIENEUCBvbiBhXG4gKiBkZWRpY2F0ZWQgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YC4gQmVjYXVzZSBFbGVjdHJvbidzIHNpbmdsZS1pbnN0YW5jZSBsb2NrXG4gKiBpcyBrZXllZCB0byB0aGUgdXNlci1kYXRhIGRpciwgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCB0aGVcbiAqIHVzZXIncyBvd24gT2JzaWRpYW4uIENvbmZpcm1lZCBieSB0aGUgUGhhc2UgMCBzcGlrZSAoc2VlIHRoZSBwcm9qZWN0IHBsYW4pLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHByb2Nlc3MgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG5pbXBvcnQgeyBraWxsUHJvY2Vzc1RyZWUgfSBmcm9tICcuL2tpbGwtcHJvY2Vzcy10cmVlLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgc3RhcnRQYXJlbnRMaXZlbmVzc1NlcnZlciB9IGZyb20gJy4vcGFyZW50LWxpdmVuZXNzLmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIENEUCBob3N0IHRvIGJpbmQvcG9sbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMjcuMC4wLjEnYFxuICAgKi9cbiAgcmVhZG9ubHkgY2RwSG9zdD86IHN0cmluZztcblxuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSAoc2hlbGwpIHRvIGxhdW5jaC4gKi9cbiAgcmVhZG9ubHkgZXhlUGF0aDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFeHRyYSBjb21tYW5kLWxpbmUgYXJncyBhcHBlbmRlZCBhZnRlciBgLS11c2VyLWRhdGEtZGlyYCBhbmRcbiAgICogYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YCBcdTIwMTQgdXNlZCB0byBwYXNzIHRoZSBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIHdoZW5cbiAgICogdGhlIGluc3RhbmNlIGlzIGxhdW5jaGVkIGhpZGRlbiAob2ZmLXNjcmVlbikuIEVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBleHRyYUFyZ3M/OiByZWFkb25seSBzdHJpbmdbXTtcblxuICAvKiogQWJzb2x1dGUgcGF0aCB0byB0aGUgaXNvbGF0ZWQgdXNlci1kYXRhIGRpciB0byBwYXNzIHZpYSBgLS11c2VyLWRhdGEtZGlyYC4gKi9cbiAgcmVhZG9ubHkgdXNlckRhdGFEaXI6IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIHJ1bm5pbmcsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgT3duZWRPYnNpZGlhbkluc3RhbmNlIHtcbiAgLyoqIEJhc2UgQ0RQIFVSTCwgZS5nLiBgaHR0cDovLzEyNy4wLjAuMTo1MTg4OGAuICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKiBLaWxscyB0aGUgaW5zdGFuY2UgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLiAqL1xuICBraWxsKCk6IHZvaWQ7XG5cbiAgLyoqXG4gICAqIExvb3BiYWNrIHBvcnQgdGhlIGluc3RhbmNlJ3MgcmVuZGVyZXIgY29ubmVjdHMgYmFjayB0byBzbyBpdCBkZXN0cm95c1xuICAgKiBpdHNlbGYgaWYgdGhpcyBoYXJuZXNzIHByb2Nlc3MgZGllcyB3aXRob3V0IGNsZWFuaW5nIHVwLiBTZWVcbiAgICogYHBhcmVudC1saXZlbmVzcy50c2AgZm9yIHdoeSB0aGUgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCBhbG9uZSBpcyBub3RcbiAgICogZW5vdWdoLlxuICAgKi9cbiAgcmVhZG9ubHkgcGFyZW50TGl2ZW5lc3NQb3J0OiBudW1iZXI7XG5cbiAgLyoqIFRoZSBDRFAgcmVtb3RlLWRlYnVnZ2luZyBwb3J0IHRoZSBpbnN0YW5jZSB3YXMgbGF1bmNoZWQgd2l0aC4gKi9cbiAgcmVhZG9ubHkgcG9ydDogbnVtYmVyO1xufVxuXG5jb25zdCBERUZBVUxUX0NEUF9IT1NUID0gJzEyNy4wLjAuMSc7XG5jb25zdCBDRFBfUkVBRFlfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMgPSAxMDAwO1xuY29uc3QgQ0RQX1JFQURZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTID0gNjAwMDA7XG5cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYW4gaXNvbGF0ZWQsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYW5kIHdhaXRzIHVudGlsIGl0cyBDRFBcbiAqIGVuZHBvaW50IGlzIHNlcnZpbmcgcGFnZSB0YXJnZXRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBMYXVuY2ggcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBydW5uaW5nIG93bmVkIGluc3RhbmNlLlxuICogQHRocm93cyBFcnJvciBpZiBDRFAgZG9lcyBub3QgYmVjb21lIHJlYWNoYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hPd25lZE9ic2lkaWFuSW5zdGFuY2UoXG4gIHBhcmFtczogTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zXG4pOiBQcm9taXNlPE93bmVkT2JzaWRpYW5JbnN0YW5jZT4ge1xuICBjb25zdCBjZHBIb3N0ID0gcGFyYW1zLmNkcEhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVDtcbiAgY29uc3QgcG9ydCA9IGF3YWl0IHBpY2tGcmVlUG9ydCgpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7Y2RwSG9zdH06JHtTdHJpbmcocG9ydCl9YDtcblxuICAvLyBMaXN0ZW4gQkVGT1JFIHNwYXduaW5nLCBzbyB0aGUgcmVuZGVyZXIgd2F0Y2hkb2cgY2FuIG5ldmVyIHJhY2UgdGhlIHNlcnZlclxuICAvLyBJbnRvIGEgZmFpbGVkIGNvbm5lY3QgKHdoaWNoIGl0IHRyZWF0cyBhcyBcIm5vIHdhdGNoZG9nXCIsIGxlYXZpbmcgdGhlIGluc3RhbmNlIGFsaXZlKS5cbiAgY29uc3QgbGl2ZW5lc3NTZXJ2ZXIgPSBhd2FpdCBzdGFydFBhcmVudExpdmVuZXNzU2VydmVyKCk7XG5cbiAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIExhdW5jaGluZyBvd25lZCBPYnNpZGlhbjogdXNlckRhdGE9JHtwYXJhbXMudXNlckRhdGFEaXJ9LCBjZHBQb3J0PSR7U3RyaW5nKHBvcnQpfWApO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgIHBhcmFtcy5leGVQYXRoLFxuICAgIFtgLS11c2VyLWRhdGEtZGlyPSR7cGFyYW1zLnVzZXJEYXRhRGlyfWAsIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydD0ke1N0cmluZyhwb3J0KX1gLCAuLi4ocGFyYW1zLmV4dHJhQXJncyA/PyBbXSldLFxuICAgIHsgZGV0YWNoZWQ6IHRydWUsIHN0ZGlvOiAnaWdub3JlJyB9XG4gICk7XG4gIGNoaWxkLnVucmVmKCk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCB3YWl0Rm9yQ2RwUmVhZHkoY2RwVXJsKTtcbiAgICBsb2coYFtvYnNpZGlhbi1pbnN0YW5jZV0gT3duZWQgT2JzaWRpYW4gaXMgc2VydmluZyBDRFAgYXQgJHtjZHBVcmx9LmApO1xuICAgIHJldHVybiB7IGNkcFVybCwga2lsbCwgcGFyZW50TGl2ZW5lc3NQb3J0OiBsaXZlbmVzc1NlcnZlci5wb3J0LCBwb3J0IH07XG4gIH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG4gICAga2lsbCgpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG5cbiAgZnVuY3Rpb24ga2lsbCgpOiB2b2lkIHtcbiAgICBsaXZlbmVzc1NlcnZlci5jbG9zZSgpO1xuICAgIGtpbGxQcm9jZXNzVHJlZShjaGlsZCk7XG4gIH1cbn1cblxuLyoqXG4gKiBQaWNrcyBhIGZyZWUgVENQIHBvcnQgYnkgYmluZGluZyB0byBwb3J0IGAwYCBhbmQgcmVhZGluZyB0aGUgYXNzaWduZWQgcG9ydC5cbiAqXG4gKiBUaGVyZSBpcyBhIHNtYWxsIHRpbWUtb2YtY2hlY2svdGltZS1vZi11c2Ugd2luZG93IGJldHdlZW4gcmVsZWFzaW5nIHRoZSBwb3J0XG4gKiBoZXJlIGFuZCBPYnNpZGlhbiBiaW5kaW5nIGl0OyBpbiBwcmFjdGljZSBpdCBpcyBuZWdsaWdpYmxlIGZvciB0ZXN0IHJ1bnMuXG4gKlxuICogQHJldHVybnMgQSBmcmVlIFRDUCBwb3J0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gcGlja0ZyZWVQb3J0KCk6IFByb21pc2U8bnVtYmVyPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgc2VydmVyID0gY3JlYXRlU2VydmVyKCk7XG4gICAgc2VydmVyLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICBzZXJ2ZXIubGlzdGVuKDAsIERFRkFVTFRfQ0RQX0hPU1QsICgpID0+IHtcbiAgICAgIGNvbnN0IGFkZHJlc3MgPSBzZXJ2ZXIuYWRkcmVzcygpO1xuICAgICAgaWYgKGFkZHJlc3MgPT09IG51bGwgfHwgdHlwZW9mIGFkZHJlc3MgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHNlcnZlci5jbG9zZSgpO1xuICAgICAgICByZWplY3QobmV3IEVycm9yKCdGYWlsZWQgdG8gZGV0ZXJtaW5lIGEgZnJlZSBwb3J0LicpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgeyBwb3J0IH0gPSBhZGRyZXNzO1xuICAgICAgc2VydmVyLmNsb3NlKCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZShwb3J0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIGFmdGVyIHRoZSBnaXZlbiBkZWxheS5cbiAqXG4gKiBAcGFyYW0gbXMgLSBUaGUgZGVsYXkgaW4gbWlsbGlzZWNvbmRzLlxuICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGRlbGF5LlxuICovXG5mdW5jdGlvbiBkZWxheShtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIHNldFRpbWVvdXQocmVzb2x2ZSwgbXMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBQb2xscyB0aGUgQ0RQIGAvanNvbmAgZW5kcG9pbnQgdW50aWwgYXQgbGVhc3Qgb25lIHBhZ2UgdGFyZ2V0IGFwcGVhcnMuXG4gKlxuICogQHBhcmFtIGNkcFVybCAtIFRoZSBiYXNlIENEUCBVUkwuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JDZHBSZWFkeShjZHBVcmw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBkZWFkbGluZSA9IERhdGUubm93KCkgKyBDRFBfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFM7XG4gIHdoaWxlIChEYXRlLm5vdygpIDwgZGVhZGxpbmUpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHtjZHBVcmx9L2pzb25gKTtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgQ2RwVGFyZ2V0W107XG4gICAgICBpZiAodGFyZ2V0cy5zb21lKCh0YXJnZXQpID0+IHRhcmdldC50eXBlID09PSAncGFnZScpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEVuZHBvaW50IG5vdCB1cCB5ZXQgXHUyMDE0IGtlZXAgcG9sbGluZy5cbiAgICB9XG4gICAgYXdhaXQgZGVsYXkoQ0RQX1JFQURZX1BPTExfSU5URVJWQUxfSU5fTUlMTElTRUNPTkRTKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgYE93bmVkIE9ic2lkaWFuIGluc3RhbmNlIGRpZCBub3QgZXhwb3NlIENEUCBhdCAke2NkcFVybH0gd2l0aGluICR7U3RyaW5nKENEUF9SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUyl9bXMuYFxuICApO1xufVxuXG4vKiB2OCBpZ25vcmUgc3RvcCAqL1xuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBY0EsZ0NBQXNCO0FBQ3RCLHNCQUE2QjtBQUU3QiwrQkFBZ0M7QUFDaEMsaUJBQW9CO0FBQ3BCLDZCQUEwQztBQWlEMUMsTUFBTSxtQkFBbUI7QUFDekIsTUFBTSwwQ0FBMEM7QUFDaEQsTUFBTSxvQ0FBb0M7QUFjMUMsZUFBc0IsNEJBQ3BCLFFBQ2dDO0FBQ2hDLFFBQU0sVUFBVSxPQUFPLFdBQVc7QUFDbEMsUUFBTSxPQUFPLE1BQU0sYUFBYTtBQUNoQyxRQUFNLFNBQVMsVUFBVSxPQUFPLElBQUksT0FBTyxJQUFJLENBQUM7QUFJaEQsUUFBTSxpQkFBaUIsVUFBTSxrREFBMEI7QUFFdkQsc0JBQUksMERBQTBELE9BQU8sV0FBVyxhQUFhLE9BQU8sSUFBSSxDQUFDLEVBQUU7QUFDM0csUUFBTSxZQUFRO0FBQUEsSUFDWixPQUFPO0FBQUEsSUFDUCxDQUFDLG1CQUFtQixPQUFPLFdBQVcsSUFBSSwyQkFBMkIsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFJLE9BQU8sYUFBYSxDQUFDLENBQUU7QUFBQSxJQUNoSCxFQUFFLFVBQVUsTUFBTSxPQUFPLFNBQVM7QUFBQSxFQUNwQztBQUNBLFFBQU0sTUFBTTtBQUVaLE1BQUk7QUFDRixVQUFNLGdCQUFnQixNQUFNO0FBQzVCLHdCQUFJLHdEQUF3RCxNQUFNLEdBQUc7QUFDckUsV0FBTyxFQUFFLFFBQVEsTUFBTSxvQkFBb0IsZUFBZSxNQUFNLEtBQUs7QUFBQSxFQUN2RSxTQUFTLE9BQWdCO0FBQ3ZCLFNBQUs7QUFDTCxVQUFNO0FBQUEsRUFDUjtBQUVBLFdBQVMsT0FBYTtBQUNwQixtQkFBZSxNQUFNO0FBQ3JCLGtEQUFnQixLQUFLO0FBQUEsRUFDdkI7QUFDRjtBQVVPLFNBQVMsZUFBZ0M7QUFDOUMsU0FBTyxJQUFJLFFBQVEsQ0FBQyxTQUFTLFdBQVc7QUFDdEMsVUFBTSxhQUFTLDhCQUFhO0FBQzVCLFdBQU8sS0FBSyxTQUFTLE1BQU07QUFDM0IsV0FBTyxPQUFPLEdBQUcsa0JBQWtCLE1BQU07QUFDdkMsWUFBTSxVQUFVLE9BQU8sUUFBUTtBQUMvQixVQUFJLFlBQVksUUFBUSxPQUFPLFlBQVksVUFBVTtBQUNuRCxlQUFPLE1BQU07QUFDYixlQUFPLElBQUksTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRDtBQUFBLE1BQ0Y7QUFDQSxZQUFNLEVBQUUsS0FBSyxJQUFJO0FBQ2pCLGFBQU8sTUFBTSxNQUFNO0FBQ2pCLGdCQUFRLElBQUk7QUFBQSxNQUNkLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQVFBLFNBQVMsTUFBTSxJQUEyQjtBQUN4QyxTQUFPLElBQUksUUFBUSxDQUFDLFlBQVk7QUFDOUIsZUFBVyxTQUFTLEVBQUU7QUFBQSxFQUN4QixDQUFDO0FBQ0g7QUFPQSxlQUFlLGdCQUFnQixRQUErQjtBQUM1RCxRQUFNLFdBQVcsS0FBSyxJQUFJLElBQUk7QUFDOUIsU0FBTyxLQUFLLElBQUksSUFBSSxVQUFVO0FBQzVCLFFBQUk7QUFDRixZQUFNLFdBQVcsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPO0FBQzdDLFlBQU0sVUFBVSxNQUFNLFNBQVMsS0FBSztBQUNwQyxVQUFJLFFBQVEsS0FBSyxDQUFDLFdBQVcsT0FBTyxTQUFTLE1BQU0sR0FBRztBQUNwRDtBQUFBLE1BQ0Y7QUFBQSxJQUNGLFFBQVE7QUFBQSxJQUVSO0FBQ0EsVUFBTSxNQUFNLHVDQUF1QztBQUFBLEVBQ3JEO0FBQ0EsUUFBTSxJQUFJO0FBQUEsSUFDUixpREFBaUQsTUFBTSxXQUFXLE9BQU8saUNBQWlDLENBQUM7QUFBQSxFQUM3RztBQUNGOyIsCiAgIm5hbWVzIjogW10KfQo=
|
|
103
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL29ic2lkaWFuLWluc3RhbmNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBmaWxlXG4gKlxuICogTGF1bmNoZXMgYW5kIG1hbmFnZXMgYSBoYXJuZXNzLW93bmVkLCBpc29sYXRlZCBPYnNpZGlhbiBkZXNrdG9wIGluc3RhbmNlLlxuICpcbiAqIFRoZSBpbnN0YW5jZSBydW5zIGFnYWluc3QgYSBkZWRpY2F0ZWQgYC0tdXNlci1kYXRhLWRpcmAgKHNvIGl0IG5ldmVyIHRvdWNoZXNcbiAqIHRoZSB1c2VyJ3MgT2JzaWRpYW4gY29uZmlnLCByZWdpc3RyeSwgb3IgcnVubmluZyB3aW5kb3cpIGFuZCBleHBvc2VzIENEUCBvbiBhXG4gKiBkZWRpY2F0ZWQgYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YC4gQmVjYXVzZSBFbGVjdHJvbidzIHNpbmdsZS1pbnN0YW5jZSBsb2NrXG4gKiBpcyBrZXllZCB0byB0aGUgdXNlci1kYXRhIGRpciwgdGhlIG93bmVkIGluc3RhbmNlIHJ1bnMgaW4gcGFyYWxsZWwgd2l0aCB0aGVcbiAqIHVzZXIncyBvd24gT2JzaWRpYW4uIENvbmZpcm1lZCBieSB0aGUgUGhhc2UgMCBzcGlrZSAoc2VlIHRoZSBwcm9qZWN0IHBsYW4pLlxuICovXG5cbi8qIHY4IGlnbm9yZSBzdGFydCAtLSBJbnRlZ3JhdGlvbi10aW1lIHByb2Nlc3MgbWFuYWdlbWVudCBjb3ZlcmVkIGJ5IGludGVncmF0aW9uIHRlc3RzLCBub3QgdW5pdCB0ZXN0cy4gKi9cblxuaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlU2VydmVyIH0gZnJvbSAnbm9kZTpuZXQnO1xuXG5pbXBvcnQgeyBraWxsUHJvY2Vzc1RyZWUgfSBmcm9tICcuL2tpbGwtcHJvY2Vzcy10cmVlLmNqcyc7XG5pbXBvcnQgeyBsb2cgfSBmcm9tICcuL2xvZy5janMnO1xuaW1wb3J0IHsgc3RhcnRQYXJlbnRMaXZlbmVzc1NlcnZlciB9IGZyb20gJy4vcGFyZW50LWxpdmVuZXNzLmNqcyc7XG5cbi8qKlxuICogUGFyYW1ldGVycyBmb3Ige0BsaW5rIGxhdW5jaE93bmVkT2JzaWRpYW5JbnN0YW5jZX0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zIHtcbiAgLyoqXG4gICAqIENEUCBob3N0IHRvIGJpbmQvcG9sbC5cbiAgICpcbiAgICogQGRlZmF1bHQgYCcxMjcuMC4wLjEnYFxuICAgKi9cbiAgcmVhZG9ubHkgY2RwSG9zdD86IHN0cmluZztcblxuICAvKipcbiAgQWJzb2x1dGUgcGF0aCB0byB0aGUgT2JzaWRpYW4gZXhlY3V0YWJsZSAoc2hlbGwpIHRvIGxhdW5jaC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZVBhdGg6IHN0cmluZztcblxuICAvKipcbiAgICogRXh0cmEgY29tbWFuZC1saW5lIGFyZ3VtZW50cyBhcHBlbmRlZCBhZnRlciBgLS11c2VyLWRhdGEtZGlyYCBhbmRcbiAgICogYC0tcmVtb3RlLWRlYnVnZ2luZy1wb3J0YCBcdTIwMTQgdXNlZCB0byBwYXNzIHRoZSBrZWVwLWFsaXZlIENocm9taXVtIGZsYWdzIHdoZW5cbiAgICogdGhlIGluc3RhbmNlIGlzIGxhdW5jaGVkIGhpZGRlbiAob2ZmLXNjcmVlbikuIEVtcHR5IGJ5IGRlZmF1bHQuXG4gICAqL1xuICByZWFkb25seSBleHRyYUFyZ3VtZW50cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICBBYnNvbHV0ZSBwYXRoIHRvIHRoZSBpc29sYXRlZCB1c2VyLWRhdGEgZGlyIHRvIHBhc3MgdmlhIGAtLXVzZXItZGF0YS1kaXJgLlxuICAgKi9cblxuICByZWFkb25seSB1c2VyRGF0YURpcmVjdG9yeTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcnVubmluZywgaGFybmVzcy1vd25lZCBPYnNpZGlhbiBpbnN0YW5jZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBPd25lZE9ic2lkaWFuSW5zdGFuY2Uge1xuICAvKipcbiAgQmFzZSBDRFAgVVJMLCBlLmcuIGBodHRwOi8vMTI3LjAuMC4xOjUxODg4YC5cbiAgICovXG4gIHJlYWRvbmx5IGNkcFVybDogc3RyaW5nO1xuXG4gIC8qKlxuICBLaWxscyB0aGUgaW5zdGFuY2UgYW5kIGl0cyBlbnRpcmUgcHJvY2VzcyB0cmVlLlxuICAgKi9cbiAga2lsbCgpOiB2b2lkO1xuXG4gIC8qKlxuICAgKiBMb29wYmFjayBwb3J0IHRoZSBpbnN0YW5jZSdzIHJlbmRlcmVyIGNvbm5lY3RzIGJhY2sgdG8gc28gaXQgZGVzdHJveXNcbiAgICogaXRzZWxmIGlmIHRoaXMgaGFybmVzcyBwcm9jZXNzIGRpZXMgd2l0aG91dCBjbGVhbmluZyB1cC4gU2VlXG4gICAqIGBwYXJlbnQtbGl2ZW5lc3MudHNgIGZvciB3aHkgdGhlIHBhcmVudC9jaGlsZCByZWxhdGlvbnNoaXAgYWxvbmUgaXMgbm90XG4gICAqIGVub3VnaC5cbiAgICovXG4gIHJlYWRvbmx5IHBhcmVudExpdmVuZXNzUG9ydDogbnVtYmVyO1xuXG4gIC8qKlxuICBUaGUgQ0RQIHJlbW90ZS1kZWJ1Z2dpbmcgcG9ydCB0aGUgaW5zdGFuY2Ugd2FzIGxhdW5jaGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBwb3J0OiBudW1iZXI7XG59XG5cbmNvbnN0IERFRkFVTFRfQ0RQX0hPU1QgPSAnMTI3LjAuMC4xJztcbmNvbnN0IENEUF9SRUFEWV9QT0xMX0lOVEVSVkFMX0lOX01JTExJU0VDT05EUyA9IDEwMDA7XG5jb25zdCBDRFBfUkVBRFlfVElNRU9VVF9JTl9NSUxMSVNFQ09ORFMgPSA2MF8wMDA7XG5cbmludGVyZmFjZSBDZHBUYXJnZXQge1xuICB0eXBlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogTGF1bmNoZXMgYW4gaXNvbGF0ZWQsIGhhcm5lc3Mtb3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgYW5kIHdhaXRzIHVudGlsIGl0cyBDRFBcbiAqIGVuZHBvaW50IGlzIHNlcnZpbmcgcGFnZSB0YXJnZXRzLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBMYXVuY2ggcGFyYW1ldGVycy5cbiAqIEByZXR1cm5zIFRoZSBydW5uaW5nIG93bmVkIGluc3RhbmNlLlxuICogQHRocm93cyBFcnJvciBpZiBDRFAgZG9lcyBub3QgYmVjb21lIHJlYWNoYWJsZSB3aXRoaW4gdGhlIHRpbWVvdXQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXVuY2hPd25lZE9ic2lkaWFuSW5zdGFuY2UoXG4gIHBhcmFtczogTGF1bmNoT3duZWRPYnNpZGlhbkluc3RhbmNlUGFyYW1zXG4pOiBQcm9taXNlPE93bmVkT2JzaWRpYW5JbnN0YW5jZT4ge1xuICBjb25zdCBjZHBIb3N0ID0gcGFyYW1zLmNkcEhvc3QgPz8gREVGQVVMVF9DRFBfSE9TVDtcbiAgY29uc3QgcG9ydCA9IGF3YWl0IHBpY2tGcmVlUG9ydCgpO1xuICBjb25zdCBjZHBVcmwgPSBgaHR0cDovLyR7Y2RwSG9zdH06JHtTdHJpbmcocG9ydCl9YDtcblxuICAvLyBMaXN0ZW4gQkVGT1JFIHNwYXduaW5nLCBzbyB0aGUgcmVuZGVyZXIgd2F0Y2hkb2cgY2FuIG5ldmVyIHJhY2UgdGhlIHNlcnZlclxuICAvLyBJbnRvIGEgZmFpbGVkIGNvbm5lY3QgKHdoaWNoIGl0IHRyZWF0cyBhcyBcIm5vIHdhdGNoZG9nXCIsIGxlYXZpbmcgdGhlIGluc3RhbmNlIGFsaXZlKS5cbiAgY29uc3QgbGl2ZW5lc3NTZXJ2ZXIgPSBhd2FpdCBzdGFydFBhcmVudExpdmVuZXNzU2VydmVyKCk7XG5cbiAgbG9nKGBbb2JzaWRpYW4taW5zdGFuY2VdIExhdW5jaGluZyBvd25lZCBPYnNpZGlhbjogdXNlckRhdGE9JHtwYXJhbXMudXNlckRhdGFEaXJlY3Rvcnl9LCBjZHBQb3J0PSR7U3RyaW5nKHBvcnQpfWApO1xuICBjb25zdCBjaGlsZCA9IHNwYXduKFxuICAgIHBhcmFtcy5leGVQYXRoLFxuICAgIFtgLS11c2VyLWRhdGEtZGlyPSR7cGFyYW1zLnVzZXJEYXRhRGlyZWN0b3J5fWAsIGAtLXJlbW90ZS1kZWJ1Z2dpbmctcG9ydD0ke1N0cmluZyhwb3J0KX1gLCAuLi4ocGFyYW1zLmV4dHJhQXJndW1lbnRzID8/IFtdKV0sXG4gICAgeyBkZXRhY2hlZDogdHJ1ZSwgc3RkaW86ICdpZ25vcmUnIH1cbiAgKTtcbiAgY2hpbGQudW5yZWYoKTtcblxuICB0cnkge1xuICAgIGF3YWl0IHdhaXRGb3JDZHBSZWFkeShjZHBVcmwpO1xuICAgIGxvZyhgW29ic2lkaWFuLWluc3RhbmNlXSBPd25lZCBPYnNpZGlhbiBpcyBzZXJ2aW5nIENEUCBhdCAke2NkcFVybH0uYCk7XG4gICAgcmV0dXJuIHsgY2RwVXJsLCBraWxsLCBwYXJlbnRMaXZlbmVzc1BvcnQ6IGxpdmVuZXNzU2VydmVyLnBvcnQsIHBvcnQgfTtcbiAgfSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcbiAgICBraWxsKCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBmdW5jdGlvbiBraWxsKCk6IHZvaWQge1xuICAgIGxpdmVuZXNzU2VydmVyLmNsb3NlKCk7XG4gICAga2lsbFByb2Nlc3NUcmVlKGNoaWxkKTtcbiAgfVxufVxuXG4vKipcbiAqIFBpY2tzIGEgZnJlZSBUQ1AgcG9ydCBieSBiaW5kaW5nIHRvIHBvcnQgYDBgIGFuZCByZWFkaW5nIHRoZSBhc3NpZ25lZCBwb3J0LlxuICpcbiAqIFRoZXJlIGlzIGEgc21hbGwgdGltZS1vZi1jaGVjay90aW1lLW9mLXVzZSB3aW5kb3cgYmV0d2VlbiByZWxlYXNpbmcgdGhlIHBvcnRcbiAqIGhlcmUgYW5kIE9ic2lkaWFuIGJpbmRpbmcgaXQ7IGluIHByYWN0aWNlIGl0IGlzIG5lZ2xpZ2libGUgZm9yIHRlc3QgcnVucy5cbiAqXG4gKiBAcmV0dXJucyBBIGZyZWUgVENQIHBvcnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwaWNrRnJlZVBvcnQoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCBzZXJ2ZXIgPSBjcmVhdGVTZXJ2ZXIoKTtcbiAgICBzZXJ2ZXIub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHNlcnZlci5saXN0ZW4oMCwgREVGQVVMVF9DRFBfSE9TVCwgKCkgPT4ge1xuICAgICAgY29uc3QgYWRkcmVzcyA9IHNlcnZlci5hZGRyZXNzKCk7XG4gICAgICBpZiAoYWRkcmVzcyA9PT0gbnVsbCB8fCB0eXBlb2YgYWRkcmVzcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgc2VydmVyLmNsb3NlKCk7XG4gICAgICAgIHJlamVjdChuZXcgRXJyb3IoJ0ZhaWxlZCB0byBkZXRlcm1pbmUgYSBmcmVlIHBvcnQuJykpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB7IHBvcnQgfSA9IGFkZHJlc3M7XG4gICAgICBzZXJ2ZXIuY2xvc2UoKCkgPT4ge1xuICAgICAgICByZXNvbHZlKHBvcnQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgYWZ0ZXIgdGhlIGdpdmVuIGRlbGF5LlxuICpcbiAqIEBwYXJhbSBtcyAtIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMuXG4gKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyBhZnRlciB0aGUgZGVsYXkuXG4gKi9cbmZ1bmN0aW9uIGRlbGF5KG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcyk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBvbGxzIHRoZSBDRFAgYC9qc29uYCBlbmRwb2ludCB1bnRpbCBhdCBsZWFzdCBvbmUgcGFnZSB0YXJnZXQgYXBwZWFycy5cbiAqXG4gKiBAcGFyYW0gY2RwVXJsIC0gVGhlIGJhc2UgQ0RQIFVSTC5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gd2FpdEZvckNkcFJlYWR5KGNkcFVybDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGRlYWRsaW5lID0gRGF0ZS5ub3coKSArIENEUF9SRUFEWV9USU1FT1VUX0lOX01JTExJU0VDT05EUztcbiAgd2hpbGUgKERhdGUubm93KCkgPCBkZWFkbGluZSkge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke2NkcFVybH0vanNvbmApO1xuICAgICAgY29uc3QgdGFyZ2V0cyA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBDZHBUYXJnZXRbXTtcbiAgICAgIGlmICh0YXJnZXRzLnNvbWUoKHRhcmdldCkgPT4gdGFyZ2V0LnR5cGUgPT09ICdwYWdlJykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gRW5kcG9pbnQgbm90IHVwIHlldCBcdTIwMTQga2VlcCBwb2xsaW5nLlxuICAgIH1cbiAgICBhd2FpdCBkZWxheShDRFBfUkVBRFlfUE9MTF9JTlRFUlZBTF9JTl9NSUxMSVNFQ09ORFMpO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBgT3duZWQgT2JzaWRpYW4gaW5zdGFuY2UgZGlkIG5vdCBleHBvc2UgQ0RQIGF0ICR7Y2RwVXJsfSB3aXRoaW4gJHtTdHJpbmcoQ0RQX1JFQURZX1RJTUVPVVRfSU5fTUlMTElTRUNPTkRTKX1tcy5gXG4gICk7XG59XG5cbi8qIHY4IGlnbm9yZSBzdG9wICovXG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFjQSxnQ0FBc0I7QUFDdEIsc0JBQTZCO0FBRTdCLCtCQUFnQztBQUNoQyxpQkFBb0I7QUFDcEIsNkJBQTBDO0FBNEQxQyxNQUFNLG1CQUFtQjtBQUN6QixNQUFNLDBDQUEwQztBQUNoRCxNQUFNLG9DQUFvQztBQWMxQyxlQUFzQiw0QkFDcEIsUUFDZ0M7QUFDaEMsUUFBTSxVQUFVLE9BQU8sV0FBVztBQUNsQyxRQUFNLE9BQU8sTUFBTSxhQUFhO0FBQ2hDLFFBQU0sU0FBUyxVQUFVLE9BQU8sSUFBSSxPQUFPLElBQUksQ0FBQztBQUloRCxRQUFNLGlCQUFpQixVQUFNLGtEQUEwQjtBQUV2RCxzQkFBSSwwREFBMEQsT0FBTyxpQkFBaUIsYUFBYSxPQUFPLElBQUksQ0FBQyxFQUFFO0FBQ2pILFFBQU0sWUFBUTtBQUFBLElBQ1osT0FBTztBQUFBLElBQ1AsQ0FBQyxtQkFBbUIsT0FBTyxpQkFBaUIsSUFBSSwyQkFBMkIsT0FBTyxJQUFJLENBQUMsSUFBSSxHQUFJLE9BQU8sa0JBQWtCLENBQUMsQ0FBRTtBQUFBLElBQzNILEVBQUUsVUFBVSxNQUFNLE9BQU8sU0FBUztBQUFBLEVBQ3BDO0FBQ0EsUUFBTSxNQUFNO0FBRVosTUFBSTtBQUNGLFVBQU0sZ0JBQWdCLE1BQU07QUFDNUIsd0JBQUksd0RBQXdELE1BQU0sR0FBRztBQUNyRSxXQUFPLEVBQUUsUUFBUSxNQUFNLG9CQUFvQixlQUFlLE1BQU0sS0FBSztBQUFBLEVBQ3ZFLFNBQVMsT0FBZ0I7QUFDdkIsU0FBSztBQUNMLFVBQU07QUFBQSxFQUNSO0FBRUEsV0FBUyxPQUFhO0FBQ3BCLG1CQUFlLE1BQU07QUFDckIsa0RBQWdCLEtBQUs7QUFBQSxFQUN2QjtBQUNGO0FBVU8sU0FBUyxlQUFnQztBQUM5QyxTQUFPLElBQUksUUFBUSxDQUFDLFNBQVMsV0FBVztBQUN0QyxVQUFNLGFBQVMsOEJBQWE7QUFDNUIsV0FBTyxLQUFLLFNBQVMsTUFBTTtBQUMzQixXQUFPLE9BQU8sR0FBRyxrQkFBa0IsTUFBTTtBQUN2QyxZQUFNLFVBQVUsT0FBTyxRQUFRO0FBQy9CLFVBQUksWUFBWSxRQUFRLE9BQU8sWUFBWSxVQUFVO0FBQ25ELGVBQU8sTUFBTTtBQUNiLGVBQU8sSUFBSSxNQUFNLGtDQUFrQyxDQUFDO0FBQ3BEO0FBQUEsTUFDRjtBQUNBLFlBQU0sRUFBRSxLQUFLLElBQUk7QUFDakIsYUFBTyxNQUFNLE1BQU07QUFDakIsZ0JBQVEsSUFBSTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0gsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBUUEsU0FBUyxNQUFNLElBQTJCO0FBQ3hDLFNBQU8sSUFBSSxRQUFRLENBQUMsWUFBWTtBQUM5QixlQUFXLFNBQVMsRUFBRTtBQUFBLEVBQ3hCLENBQUM7QUFDSDtBQU9BLGVBQWUsZ0JBQWdCLFFBQStCO0FBQzVELFFBQU0sV0FBVyxLQUFLLElBQUksSUFBSTtBQUM5QixTQUFPLEtBQUssSUFBSSxJQUFJLFVBQVU7QUFDNUIsUUFBSTtBQUNGLFlBQU0sV0FBVyxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU87QUFDN0MsWUFBTSxVQUFVLE1BQU0sU0FBUyxLQUFLO0FBQ3BDLFVBQUksUUFBUSxLQUFLLENBQUMsV0FBVyxPQUFPLFNBQVMsTUFBTSxHQUFHO0FBQ3BEO0FBQUEsTUFDRjtBQUFBLElBQ0YsUUFBUTtBQUFBLElBRVI7QUFDQSxVQUFNLE1BQU0sdUNBQXVDO0FBQUEsRUFDckQ7QUFDQSxRQUFNLElBQUk7QUFBQSxJQUNSLGlEQUFpRCxNQUFNLFdBQVcsT0FBTyxpQ0FBaUMsQ0FBQztBQUFBLEVBQzdHO0FBQ0Y7IiwKICAibmFtZXMiOiBbXQp9Cg==
|