@dbx-tools/core 0.9.153 → 0.9.157
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/index.ts +12 -6
- package/lib/index.d.ts +12 -6
- package/lib/index.js +13 -6
- package/lib/src/bin.js +3 -4
- package/lib/src/brand-files.d.ts +1 -101
- package/lib/src/brand-files.js +4 -14
- package/lib/src/bundle.js +10 -10
- package/lib/src/config-utils.d.ts +0 -5
- package/lib/src/config-utils.js +34 -49
- package/lib/src/dependency-resolver.js +12 -12
- package/lib/src/exec.js +4 -4
- package/lib/src/file-lock.js +12 -18
- package/lib/src/process-lock.js +8 -9
- package/lib/src/project-utils.d.ts +3 -3
- package/lib/src/project-utils.js +14 -14
- package/package.json +3 -91
- package/src/bin.ts +2 -3
- package/src/brand-files.ts +3 -18
- package/src/bundle.ts +9 -12
- package/src/config-utils.ts +50 -62
- package/src/dependency-resolver.ts +11 -11
- package/src/exec.ts +3 -3
- package/src/file-lock.ts +20 -17
- package/src/process-lock.ts +7 -8
- package/src/project-utils.ts +25 -19
package/index.ts
CHANGED
|
@@ -3,24 +3,30 @@
|
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
|
|
5
5
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
6
|
-
export const PACKAGE_VERSION = "0.9.
|
|
6
|
+
export const PACKAGE_VERSION = "0.9.157";
|
|
7
7
|
export * as bin from "./src/bin.ts";
|
|
8
8
|
export * as brandFiles from "./src/brand-files.ts";
|
|
9
9
|
export * as bundle from "./src/bundle.ts";
|
|
10
10
|
export * as configUtils from "./src/config-utils.ts";
|
|
11
11
|
export * as dependencyResolver from "./src/dependency-resolver.ts";
|
|
12
12
|
export * as exec from "./src/exec.ts";
|
|
13
|
-
export * as file from "./src/file.ts";
|
|
14
13
|
export * as fileLock from "./src/file-lock.ts";
|
|
14
|
+
export * as file from "./src/file.ts";
|
|
15
15
|
export * as processLock from "./src/process-lock.ts";
|
|
16
16
|
export * as projectUtils from "./src/project-utils.ts";
|
|
17
|
+
export { parseVersion, isVersionAtLeast, ensure } from "./src/bin.ts";
|
|
17
18
|
export type { BinContext, BinSelectionContext, BinSelector, BinVersionOutput, BinVersionParser, BinOptions, BinPackageOptions, BinUrlResolveContext, BinSource, BinUrl } from "./src/bin.ts";
|
|
18
|
-
export {
|
|
19
|
-
export
|
|
20
|
-
export {
|
|
19
|
+
export { findBrandContextFile, loadBrandContextFile, loadBrandContext, resolveBrandAssetPath } from "./src/brand-files.ts";
|
|
20
|
+
export { appResources } from "./src/bundle.ts";
|
|
21
|
+
export { ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema, flattenBundleEnv, flattenAppEnv, getBundlePath, environmentKeys, text, resolveValue, string, boolean, positiveNumber, positiveInt, port, list, bundleFile, appFile } from "./src/config-utils.ts";
|
|
21
22
|
export type { ConfigMapValue, ConfigData, ConfigSource, ConfigOptions, ConfigFile } from "./src/config-utils.ts";
|
|
23
|
+
export { missingDependencies, resolveVersion, resolveDependencies } from "./src/dependency-resolver.ts";
|
|
22
24
|
export type { DependencyResolverOptions, DependencyInfo, ResolvedNpmVersion, NpmSpecifierInput, ResolvedNpmDependencies, MissingDependencyInfo } from "./src/dependency-resolver.ts";
|
|
23
|
-
export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.ts";
|
|
25
|
+
export { COMMAND_NOT_FOUND_EXIT_CODE, onParentTerminationSignal, spawn, spawnSync, shlex } from "./src/exec.ts";
|
|
24
26
|
export type { ExecStdio, LineHandler, LineOutputOptions, StdioOption, ExecResult, ChildProcessResult, ChildProcessTerminationOptions, ExecOptions, SyncExecStdio, SyncExecOptions, SpawnArgs } from "./src/exec.ts";
|
|
27
|
+
export { withFileLock, acquireFileLock } from "./src/file-lock.ts";
|
|
25
28
|
export type { FileLockBackend, FileLockAcquisition, FileLockOptions, FileLockLease } from "./src/file-lock.ts";
|
|
29
|
+
export { statSync, cachedRecord } from "./src/file.ts";
|
|
30
|
+
export { withProcessLock, processLockWorkerOptions, attachProcessLock, processLockAttached } from "./src/process-lock.ts";
|
|
31
|
+
export { resolveWorkingDirectory, root, parseGitRemote, resolveProjectRoots, parseProjectGhRemote, resolveProjectGhAccount, repositoryUrl, npmRegistry } from "./src/project-utils.ts";
|
|
26
32
|
export type { ProjectContext, ProjectGhRemote, ProjectGhAccount, ResolveProjectGhAccountOptions, NpmRegistryOptions } from "./src/project-utils.ts";
|
package/lib/index.d.ts
CHANGED
|
@@ -1,22 +1,28 @@
|
|
|
1
1
|
export declare const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
2
|
-
export declare const PACKAGE_VERSION = "0.9.
|
|
2
|
+
export declare const PACKAGE_VERSION = "0.9.157";
|
|
3
3
|
export * as bin from "./src/bin.ts";
|
|
4
4
|
export * as brandFiles from "./src/brand-files.ts";
|
|
5
5
|
export * as bundle from "./src/bundle.ts";
|
|
6
6
|
export * as configUtils from "./src/config-utils.ts";
|
|
7
7
|
export * as dependencyResolver from "./src/dependency-resolver.ts";
|
|
8
8
|
export * as exec from "./src/exec.ts";
|
|
9
|
-
export * as file from "./src/file.ts";
|
|
10
9
|
export * as fileLock from "./src/file-lock.ts";
|
|
10
|
+
export * as file from "./src/file.ts";
|
|
11
11
|
export * as processLock from "./src/process-lock.ts";
|
|
12
12
|
export * as projectUtils from "./src/project-utils.ts";
|
|
13
|
+
export { parseVersion, isVersionAtLeast, ensure } from "./src/bin.ts";
|
|
13
14
|
export type { BinContext, BinSelectionContext, BinSelector, BinVersionOutput, BinVersionParser, BinOptions, BinPackageOptions, BinUrlResolveContext, BinSource, BinUrl } from "./src/bin.ts";
|
|
14
|
-
export {
|
|
15
|
-
export
|
|
16
|
-
export {
|
|
15
|
+
export { findBrandContextFile, loadBrandContextFile, loadBrandContext, resolveBrandAssetPath } from "./src/brand-files.ts";
|
|
16
|
+
export { appResources } from "./src/bundle.ts";
|
|
17
|
+
export { ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema, flattenBundleEnv, flattenAppEnv, getBundlePath, environmentKeys, text, resolveValue, string, boolean, positiveNumber, positiveInt, port, list, bundleFile, appFile } from "./src/config-utils.ts";
|
|
17
18
|
export type { ConfigMapValue, ConfigData, ConfigSource, ConfigOptions, ConfigFile } from "./src/config-utils.ts";
|
|
19
|
+
export { missingDependencies, resolveVersion, resolveDependencies } from "./src/dependency-resolver.ts";
|
|
18
20
|
export type { DependencyResolverOptions, DependencyInfo, ResolvedNpmVersion, NpmSpecifierInput, ResolvedNpmDependencies, MissingDependencyInfo } from "./src/dependency-resolver.ts";
|
|
19
|
-
export { COMMAND_NOT_FOUND_EXIT_CODE } from "./src/exec.ts";
|
|
21
|
+
export { COMMAND_NOT_FOUND_EXIT_CODE, onParentTerminationSignal, spawn, spawnSync, shlex } from "./src/exec.ts";
|
|
20
22
|
export type { ExecStdio, LineHandler, LineOutputOptions, StdioOption, ExecResult, ChildProcessResult, ChildProcessTerminationOptions, ExecOptions, SyncExecStdio, SyncExecOptions, SpawnArgs } from "./src/exec.ts";
|
|
23
|
+
export { withFileLock, acquireFileLock } from "./src/file-lock.ts";
|
|
21
24
|
export type { FileLockBackend, FileLockAcquisition, FileLockOptions, FileLockLease } from "./src/file-lock.ts";
|
|
25
|
+
export { statSync, cachedRecord } from "./src/file.ts";
|
|
26
|
+
export { withProcessLock, processLockWorkerOptions, attachProcessLock, processLockAttached } from "./src/process-lock.ts";
|
|
27
|
+
export { resolveWorkingDirectory, root, parseGitRemote, resolveProjectRoots, parseProjectGhRemote, resolveProjectGhAccount, repositoryUrl, npmRegistry } from "./src/project-utils.ts";
|
|
22
28
|
export type { ProjectContext, ProjectGhRemote, ProjectGhAccount, ResolveProjectGhAccountOptions, NpmRegistryOptions } from "./src/project-utils.ts";
|
package/lib/index.js
CHANGED
|
@@ -2,18 +2,25 @@
|
|
|
2
2
|
// Regenerated from the exporting modules in ./src.
|
|
3
3
|
// Hand edits are overwritten on the next watch; this file is read-only.
|
|
4
4
|
export const PACKAGE_IDENTIFIER = "@dbx-tools/core";
|
|
5
|
-
export const PACKAGE_VERSION = "0.9.
|
|
5
|
+
export const PACKAGE_VERSION = "0.9.157";
|
|
6
6
|
export * as bin from "./src/bin.js";
|
|
7
7
|
export * as brandFiles from "./src/brand-files.js";
|
|
8
8
|
export * as bundle from "./src/bundle.js";
|
|
9
9
|
export * as configUtils from "./src/config-utils.js";
|
|
10
10
|
export * as dependencyResolver from "./src/dependency-resolver.js";
|
|
11
11
|
export * as exec from "./src/exec.js";
|
|
12
|
-
export * as file from "./src/file.js";
|
|
13
12
|
export * as fileLock from "./src/file-lock.js";
|
|
13
|
+
export * as file from "./src/file.js";
|
|
14
14
|
export * as processLock from "./src/process-lock.js";
|
|
15
15
|
export * as projectUtils from "./src/project-utils.js";
|
|
16
|
-
export {
|
|
17
|
-
export {
|
|
18
|
-
export {
|
|
19
|
-
|
|
16
|
+
export { parseVersion, isVersionAtLeast, ensure } from "./src/bin.js";
|
|
17
|
+
export { findBrandContextFile, loadBrandContextFile, loadBrandContext, resolveBrandAssetPath } from "./src/brand-files.js";
|
|
18
|
+
export { appResources } from "./src/bundle.js";
|
|
19
|
+
export { ENV_ONLY, valueSchema, bundleResourceSchema, bundleEnvEntrySchema, bundleAppSchema, appEnvEntrySchema, appSchema, flattenBundleEnv, flattenAppEnv, getBundlePath, environmentKeys, text, resolveValue, string, boolean, positiveNumber, positiveInt, port, list, bundleFile, appFile } from "./src/config-utils.js";
|
|
20
|
+
export { missingDependencies, resolveVersion, resolveDependencies } from "./src/dependency-resolver.js";
|
|
21
|
+
export { COMMAND_NOT_FOUND_EXIT_CODE, onParentTerminationSignal, spawn, spawnSync, shlex } from "./src/exec.js";
|
|
22
|
+
export { withFileLock, acquireFileLock } from "./src/file-lock.js";
|
|
23
|
+
export { statSync, cachedRecord } from "./src/file.js";
|
|
24
|
+
export { withProcessLock, processLockWorkerOptions, attachProcessLock, processLockAttached } from "./src/process-lock.js";
|
|
25
|
+
export { resolveWorkingDirectory, root, parseGitRemote, resolveProjectRoots, parseProjectGhRemote, resolveProjectGhAccount, repositoryUrl, npmRegistry } from "./src/project-utils.js";
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxpQkFBaUIsQ0FBQztBQUNwRCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxHQUFHLE1BQU0sY0FBYyxDQUFDO0FBQ3BDLE9BQU8sS0FBSyxVQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssV0FBVyxNQUFNLHVCQUF1QixDQUFDO0FBQ3JELE9BQU8sS0FBSyxrQkFBa0IsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssUUFBUSxNQUFNLG9CQUFvQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxJQUFJLE1BQU0sZUFBZSxDQUFDO0FBQ3RDLE9BQU8sS0FBSyxXQUFXLE1BQU0sdUJBQXVCLENBQUM7QUFDckQsT0FBTyxLQUFLLFlBQVksTUFBTSx3QkFBd0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsYUFBYSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUU3VCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFFeEcsT0FBTyxFQUFFLDJCQUEyQixFQUFFLHlCQUF5QixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWhILE9BQU8sRUFBRSxZQUFZLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFbkUsT0FBTyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkQsT0FBTyxFQUFFLGVBQWUsRUFBRSx3QkFBd0IsRUFBRSxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFILE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxJQUFJLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLHVCQUF1QixFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEdFTkVSQVRFRCBieSBwcm9qZW4gd2F0Y2ggLSBETyBOT1QgRURJVC5cbi8vIFJlZ2VuZXJhdGVkIGZyb20gdGhlIGV4cG9ydGluZyBtb2R1bGVzIGluIC4vc3JjLlxuLy8gSGFuZCBlZGl0cyBhcmUgb3ZlcndyaXR0ZW4gb24gdGhlIG5leHQgd2F0Y2g7IHRoaXMgZmlsZSBpcyByZWFkLW9ubHkuXG5cbmV4cG9ydCBjb25zdCBQQUNLQUdFX0lERU5USUZJRVIgPSBcIkBkYngtdG9vbHMvY29yZVwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjE1N1wiO1xuZXhwb3J0ICogYXMgYmluIGZyb20gXCIuL3NyYy9iaW4udHNcIjtcbmV4cG9ydCAqIGFzIGJyYW5kRmlsZXMgZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgKiBhcyBidW5kbGUgZnJvbSBcIi4vc3JjL2J1bmRsZS50c1wiO1xuZXhwb3J0ICogYXMgY29uZmlnVXRpbHMgZnJvbSBcIi4vc3JjL2NvbmZpZy11dGlscy50c1wiO1xuZXhwb3J0ICogYXMgZGVwZW5kZW5jeVJlc29sdmVyIGZyb20gXCIuL3NyYy9kZXBlbmRlbmN5LXJlc29sdmVyLnRzXCI7XG5leHBvcnQgKiBhcyBleGVjIGZyb20gXCIuL3NyYy9leGVjLnRzXCI7XG5leHBvcnQgKiBhcyBmaWxlTG9jayBmcm9tIFwiLi9zcmMvZmlsZS1sb2NrLnRzXCI7XG5leHBvcnQgKiBhcyBmaWxlIGZyb20gXCIuL3NyYy9maWxlLnRzXCI7XG5leHBvcnQgKiBhcyBwcm9jZXNzTG9jayBmcm9tIFwiLi9zcmMvcHJvY2Vzcy1sb2NrLnRzXCI7XG5leHBvcnQgKiBhcyBwcm9qZWN0VXRpbHMgZnJvbSBcIi4vc3JjL3Byb2plY3QtdXRpbHMudHNcIjtcbmV4cG9ydCB7IHBhcnNlVmVyc2lvbiwgaXNWZXJzaW9uQXRMZWFzdCwgZW5zdXJlIH0gZnJvbSBcIi4vc3JjL2Jpbi50c1wiO1xuZXhwb3J0IHR5cGUgeyBCaW5Db250ZXh0LCBCaW5TZWxlY3Rpb25Db250ZXh0LCBCaW5TZWxlY3RvciwgQmluVmVyc2lvbk91dHB1dCwgQmluVmVyc2lvblBhcnNlciwgQmluT3B0aW9ucywgQmluUGFja2FnZU9wdGlvbnMsIEJpblVybFJlc29sdmVDb250ZXh0LCBCaW5Tb3VyY2UsIEJpblVybCB9IGZyb20gXCIuL3NyYy9iaW4udHNcIjtcbmV4cG9ydCB7IGZpbmRCcmFuZENvbnRleHRGaWxlLCBsb2FkQnJhbmRDb250ZXh0RmlsZSwgbG9hZEJyYW5kQ29udGV4dCwgcmVzb2x2ZUJyYW5kQXNzZXRQYXRoIH0gZnJvbSBcIi4vc3JjL2JyYW5kLWZpbGVzLnRzXCI7XG5leHBvcnQgeyBhcHBSZXNvdXJjZXMgfSBmcm9tIFwiLi9zcmMvYnVuZGxlLnRzXCI7XG5leHBvcnQgeyBFTlZfT05MWSwgdmFsdWVTY2hlbWEsIGJ1bmRsZVJlc291cmNlU2NoZW1hLCBidW5kbGVFbnZFbnRyeVNjaGVtYSwgYnVuZGxlQXBwU2NoZW1hLCBhcHBFbnZFbnRyeVNjaGVtYSwgYXBwU2NoZW1hLCBmbGF0dGVuQnVuZGxlRW52LCBmbGF0dGVuQXBwRW52LCBnZXRCdW5kbGVQYXRoLCBlbnZpcm9ubWVudEtleXMsIHRleHQsIHJlc29sdmVWYWx1ZSwgc3RyaW5nLCBib29sZWFuLCBwb3NpdGl2ZU51bWJlciwgcG9zaXRpdmVJbnQsIHBvcnQsIGxpc3QsIGJ1bmRsZUZpbGUsIGFwcEZpbGUgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgdHlwZSB7IENvbmZpZ01hcFZhbHVlLCBDb25maWdEYXRhLCBDb25maWdTb3VyY2UsIENvbmZpZ09wdGlvbnMsIENvbmZpZ0ZpbGUgfSBmcm9tIFwiLi9zcmMvY29uZmlnLXV0aWxzLnRzXCI7XG5leHBvcnQgeyBtaXNzaW5nRGVwZW5kZW5jaWVzLCByZXNvbHZlVmVyc2lvbiwgcmVzb2x2ZURlcGVuZGVuY2llcyB9IGZyb20gXCIuL3NyYy9kZXBlbmRlbmN5LXJlc29sdmVyLnRzXCI7XG5leHBvcnQgdHlwZSB7IERlcGVuZGVuY3lSZXNvbHZlck9wdGlvbnMsIERlcGVuZGVuY3lJbmZvLCBSZXNvbHZlZE5wbVZlcnNpb24sIE5wbVNwZWNpZmllcklucHV0LCBSZXNvbHZlZE5wbURlcGVuZGVuY2llcywgTWlzc2luZ0RlcGVuZGVuY3lJbmZvIH0gZnJvbSBcIi4vc3JjL2RlcGVuZGVuY3ktcmVzb2x2ZXIudHNcIjtcbmV4cG9ydCB7IENPTU1BTkRfTk9UX0ZPVU5EX0VYSVRfQ09ERSwgb25QYXJlbnRUZXJtaW5hdGlvblNpZ25hbCwgc3Bhd24sIHNwYXduU3luYywgc2hsZXggfSBmcm9tIFwiLi9zcmMvZXhlYy50c1wiO1xuZXhwb3J0IHR5cGUgeyBFeGVjU3RkaW8sIExpbmVIYW5kbGVyLCBMaW5lT3V0cHV0T3B0aW9ucywgU3RkaW9PcHRpb24sIEV4ZWNSZXN1bHQsIENoaWxkUHJvY2Vzc1Jlc3VsdCwgQ2hpbGRQcm9jZXNzVGVybWluYXRpb25PcHRpb25zLCBFeGVjT3B0aW9ucywgU3luY0V4ZWNTdGRpbywgU3luY0V4ZWNPcHRpb25zLCBTcGF3bkFyZ3MgfSBmcm9tIFwiLi9zcmMvZXhlYy50c1wiO1xuZXhwb3J0IHsgd2l0aEZpbGVMb2NrLCBhY3F1aXJlRmlsZUxvY2sgfSBmcm9tIFwiLi9zcmMvZmlsZS1sb2NrLnRzXCI7XG5leHBvcnQgdHlwZSB7IEZpbGVMb2NrQmFja2VuZCwgRmlsZUxvY2tBY3F1aXNpdGlvbiwgRmlsZUxvY2tPcHRpb25zLCBGaWxlTG9ja0xlYXNlIH0gZnJvbSBcIi4vc3JjL2ZpbGUtbG9jay50c1wiO1xuZXhwb3J0IHsgc3RhdFN5bmMsIGNhY2hlZFJlY29yZCB9IGZyb20gXCIuL3NyYy9maWxlLnRzXCI7XG5leHBvcnQgeyB3aXRoUHJvY2Vzc0xvY2ssIHByb2Nlc3NMb2NrV29ya2VyT3B0aW9ucywgYXR0YWNoUHJvY2Vzc0xvY2ssIHByb2Nlc3NMb2NrQXR0YWNoZWQgfSBmcm9tIFwiLi9zcmMvcHJvY2Vzcy1sb2NrLnRzXCI7XG5leHBvcnQgeyByZXNvbHZlV29ya2luZ0RpcmVjdG9yeSwgcm9vdCwgcGFyc2VHaXRSZW1vdGUsIHJlc29sdmVQcm9qZWN0Um9vdHMsIHBhcnNlUHJvamVjdEdoUmVtb3RlLCByZXNvbHZlUHJvamVjdEdoQWNjb3VudCwgcmVwb3NpdG9yeVVybCwgbnBtUmVnaXN0cnkgfSBmcm9tIFwiLi9zcmMvcHJvamVjdC11dGlscy50c1wiO1xuZXhwb3J0IHR5cGUgeyBQcm9qZWN0Q29udGV4dCwgUHJvamVjdEdoUmVtb3RlLCBQcm9qZWN0R2hBY2NvdW50LCBSZXNvbHZlUHJvamVjdEdoQWNjb3VudE9wdGlvbnMsIE5wbVJlZ2lzdHJ5T3B0aW9ucyB9IGZyb20gXCIuL3NyYy9wcm9qZWN0LXV0aWxzLnRzXCI7XG4iXX0=
|
package/lib/src/bin.js
CHANGED
|
@@ -10,8 +10,7 @@ import { homedir, tmpdir } from "node:os";
|
|
|
10
10
|
import { basename, dirname, isAbsolute, join, resolve, sep } from "node:path";
|
|
11
11
|
import { fileURLToPath } from "node:url";
|
|
12
12
|
import { promisify } from "node:util";
|
|
13
|
-
import
|
|
14
|
-
import * as log from "@dbx-tools/shared-core/log";
|
|
13
|
+
import { toError, log } from "@dbx-tools/shared-core";
|
|
15
14
|
import extractZip from "extract-zip";
|
|
16
15
|
import { coerce, gte } from "semver";
|
|
17
16
|
import { x as extractTar } from "tar";
|
|
@@ -149,7 +148,7 @@ async function isValidBin(path, options) {
|
|
|
149
148
|
catch (cause) {
|
|
150
149
|
logger.debug("binary version command failed", {
|
|
151
150
|
path,
|
|
152
|
-
error:
|
|
151
|
+
error: toError(cause),
|
|
153
152
|
});
|
|
154
153
|
return false;
|
|
155
154
|
}
|
|
@@ -428,4 +427,4 @@ export async function ensure(name, url, options = {}) {
|
|
|
428
427
|
}
|
|
429
428
|
});
|
|
430
429
|
}
|
|
431
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxLQUFLLEVBQ0wsRUFBRSxFQUNGLFFBQVEsRUFDUixLQUFLLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEVBQ04sRUFBRSxFQUNGLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sS0FBSyxVQUFVLE1BQU0sb0NBQW9DLENBQUM7QUFDakUsT0FBTyxLQUFLLEdBQUcsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRCxPQUFPLFVBQVUsTUFBTSxhQUFhLENBQUM7QUFDckMsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQWUsTUFBTSxRQUFRLENBQUM7QUFDbEQsT0FBTyxFQUFFLENBQUMsSUFBSSxVQUFVLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFFdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTlDLE1BQU0sYUFBYSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxQyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsTUFBTSxDQUFD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QUFXLENBQUMsSUFBSTthQUNyQixDQUFDLENBQUM7WUFDSCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLE1BQU07Z0JBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnN0YWxsIGFuZCByZXVzZSBleGVjdXRhYmxlIGJpbmFyaWVzIHVuZGVyIGEgcGVyLXRvb2wgaG9tZSBkaXJlY3RvcnkuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2gsIHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7XG4gIGNobW9kLFxuICBjcCxcbiAgY29weUZpbGUsXG4gIG1rZGlyLFxuICBta2R0ZW1wLFxuICByZWFkZGlyLFxuICByZW5hbWUsXG4gIHJtLFxuICBzdGF0LFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBob21lZGlyLCB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGlzQWJzb2x1dGUsIGpvaW4sIHJlc29sdmUsIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJub2RlOnV0aWxcIjtcblxuaW1wb3J0ICogYXMgZXJyb3JVdGlscyBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZS9lcnJvci11dGlsc1wiO1xuaW1wb3J0ICogYXMgbG9nIGZyb20gXCJAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlL2xvZ1wiO1xuaW1wb3J0IGV4dHJhY3RaaXAgZnJvbSBcImV4dHJhY3QtemlwXCI7XG5pbXBvcnQgeyBjb2VyY2UsIGd0ZSwgdHlwZSBTZW1WZXIgfSBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgeyB4IGFzIGV4dHJhY3RUYXIgfSBmcm9tIFwidGFyXCI7XG5cbmltcG9ydCB7IHdpdGhGaWxlTG9jayB9IGZyb20gXCIuL2ZpbGUtbG9jay50c1wiO1xuXG5jb25zdCBleGVjRmlsZUFzeW5jID0gcHJvbWlzaWZ5KGV4ZWNGaWxlKTtcbmNvbnN0IGxvZ2dlciA9IGxvZy5sb2dnZXIoXCJjb3JlOmJpblwiKTtcblxuaW50ZXJmYWNlIFBhcnNlZFZlcnNpb24ge1xuICByYXc6IHN0cmluZztcbiAgcGFydHM6IG51bWJlcltdO1xufVxuXG5pbnRlcmZhY2UgQmluQWNjZXNzQ29udGV4dCB7XG4gIGZpbGU6IGJvb2xlYW47XG4gIGV4ZWN1dGFibGU6IGJvb2xlYW47XG59XG5cbi8qKiBTdGFibGUgcGF0aHMgZm9yIGFuIGluc3RhbGxlZCBiaW5hcnkuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpbkNvbnRleHQge1xuICByb290OiBzdHJpbmc7XG4gIGJpbkRpcjogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbi8qKiBUZW1wb3JhcnkgZG93bmxvYWQgYW5kIGV4dHJhY3Rpb24gcGF0aHMgc3VwcGxpZWQgdG8gYSBjdXN0b20gc2VsZWN0b3IuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblNlbGVjdGlvbkNvbnRleHQge1xuICBkZXN0aW5hdGlvbjogQmluQ29udGV4dDtcbiAgZG93bmxvYWRQYXRoOiBzdHJpbmc7XG4gIHNvdXJjZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFNlbGVjdCB0aGUgZXhlY3V0YWJsZSBmcm9tIGEgZG93bmxvYWQgb3IgdW5wYWNrZWQgYXJjaGl2ZS4gQSBzZWxlY3RvciBtYXlcbiAqIGFsc28gcHJlcGFyZSB0aGUgZmlsZSwgc3VjaCBhcyBhcHBseWluZyBpdHMgZXhlY3V0YWJsZSBtb2RlLlxuICovXG5leHBvcnQgdHlwZSBCaW5TZWxlY3RvciA9IChjb250ZXh0OiBCaW5TZWxlY3Rpb25Db250ZXh0KSA9PiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz47XG5cbi8qKiBDYXB0dXJlZCBvdXRwdXQgcGFzc2VkIHRvIGEgY3VzdG9tIGJpbmFyeSB2ZXJzaW9uIHBhcnNlci4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluVmVyc2lvbk91dHB1dCB7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbn1cblxuLyoqIEV4dHJhY3QgYSB2ZXJzaW9uIHN0cmluZyBmcm9tIGEgc3VjY2Vzc2Z1bCB2ZXJzaW9uLWNvbW1hbmQgcmVzdWx0LiAqL1xuZXhwb3J0IHR5cGUgQmluVmVyc2lvblBhcnNlciA9IChvdXRwdXQ6IEJpblZlcnNpb25PdXRwdXQpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuLyoqIE9wdGlvbnMgZm9yIHtAbGluayBlbnN1cmV9LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5PcHRpb25zIHtcbiAgYXV0b1VucGFja2FnZT86IGJvb2xlYW47XG4gIC8qKiBQcmVzZXJ2ZSBhbiB1bnBhY2tlZCBtdWx0aS1maWxlIHBhY2thZ2Ugcm9vdGVkIGF0IHtAbGluayBCaW5Db250ZXh0LnJvb3R9LiAqL1xuICBwYWNrYWdlPzogQmluUGFja2FnZU9wdGlvbnM7XG4gIHNlbGVjdG9yPzogQmluU2VsZWN0b3I7XG4gIGhvbWVEaXI/OiBzdHJpbmc7XG4gIC8qKiBFeGFjdCBpbnN0YWxsYXRpb24gcGF0aHMuIE9taXNzaW9uIGtlZXBzIGAkSE9NRS8uPG5hbWU+L2Jpbi88bmFtZT5gLiAqL1xuICBkZXN0aW5hdGlvbj86IEJpbkNvbnRleHQ7XG4gIC8qKiBNaW5pbXVtIGFjY2VwdGVkIG51bWVyaWMgdmVyc2lvbiwgd2l0aCBvbmUgdG8gdGhyZWUgY29tcG9uZW50cy4gKi9cbiAgbWluVmVyc2lvbj86IHN0cmluZztcbiAgLyoqIEFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYmluYXJ5IGZvciB2ZXJzaW9uIGRldGVjdGlvbi4gRGVmYXVsdHMgdG8gYC0tdmVyc2lvbmAuICovXG4gIHZlcnNpb25Bcmd1bWVudD86IHN0cmluZztcbiAgLyoqIFZlcnNpb24gb3V0cHV0IHBhcnNlci4gRGVmYXVsdHMgdG8ge0BsaW5rIHBhcnNlVmVyc2lvbn0uICovXG4gIHZlcnNpb25QYXJzZXI/OiBCaW5WZXJzaW9uUGFyc2VyO1xuICAvKiogU2tpcCBgLS12ZXJzaW9uYCBhbmQgdHJlYXQgYW4gZXhlY3V0YWJsZSBmaWxlIGFzIGFjY2VwdGFibGUuICovXG4gIHNraXBWZXJzaW9uQ2hlY2s/OiBib29sZWFuO1xuICAvKiogUmVpbnN0YWxsIGV2ZW4gd2hlbiB0aGUgZGVzdGluYXRpb24gYWxyZWFkeSBwYXNzZXMgdmFsaWRhdGlvbi4gKi9cbiAgZm9yY2U/OiBib29sZWFuO1xufVxuXG4vKiogTXVsdGktZmlsZSBhcmNoaXZlIGxheW91dCByZXRhaW5lZCBiZXNpZGUgaXRzIGV4ZWN1dGFibGUgZW50cnlwb2ludC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluUGFja2FnZU9wdGlvbnMge1xuICAvKiogRXhlY3V0YWJsZSBwYXRoIHJlbGF0aXZlIHRvIHRoZSB1bnBhY2tlZCBwYWNrYWdlIHJvb3QuICovXG4gIGVudHJ5cG9pbnQ6IHN0cmluZztcbiAgLyoqIENvbXBhbmlvbiBmaWxlcyBvciBkaXJlY3RvcmllcyByZXF1aXJlZCBiZWZvcmUgYW4gaW5zdGFsbGF0aW9uIGNhbiBiZSByZXVzZWQuICovXG4gIHJlcXVpcmVkUGF0aHM/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuLyoqIFRlbXBvcmFyeSBkaXJlY3RvcnkgY3JlYXRlZCBmb3Igb25lIGBlbnN1cmVgIGF0dGVtcHQgYWZ0ZXIgdGhlIGluc3RhbGwgbG9jay4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluVXJsUmVzb2x2ZUNvbnRleHQge1xuICByZWFkb25seSB0ZW1wRGlyOiBzdHJpbmc7XG59XG5cbi8qKiBEb3dubG9hZCBzb3VyY2UgcmVzb2x2ZWQgb25seSB3aGVuIHRoZSBleGVjdXRhYmxlIGlzIG5vdCBhbHJlYWR5IGluc3RhbGxlZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluU291cmNlIHtcbiAgdXJsOiBzdHJpbmc7XG4gIHNoYTI1Nj86IHN0cmluZztcbn1cblxuLyoqIEEgZG93bmxvYWQgc291cmNlIHJlc29sdmVkIG9ubHkgd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuICovXG5leHBvcnQgdHlwZSBCaW5VcmwgPVxuICB8IHN0cmluZ1xuICB8IEJpblNvdXJjZVxuICB8ICgoY29udGV4dDogQmluVXJsUmVzb2x2ZUNvbnRleHQpID0+IHN0cmluZyB8IEJpblNvdXJjZSB8IFByb21pc2U8c3RyaW5nIHwgQmluU291cmNlPik7XG5cbmZ1bmN0aW9uIGNvbnRleHQobmFtZTogc3RyaW5nLCBob21lRGlyOiBzdHJpbmcsIGRlc3RpbmF0aW9uPzogQmluQ29udGV4dCk6IEJpbkNvbnRleHQge1xuICBpZiAoIW5hbWUgfHwgYmFzZW5hbWUobmFtZSkgIT09IG5hbWUgfHwgbmFtZSA9PT0gXCIuXCIgfHwgbmFtZSA9PT0gXCIuLlwiKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBiaW5hcnkgbmFtZTogJHtuYW1lfWApO1xuICB9XG4gIGlmIChkZXN0aW5hdGlvbikgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICBjb25zdCByb290ID0gam9pbihob21lRGlyLCBgLiR7bmFtZX1gKTtcbiAgY29uc3QgYmluRGlyID0gam9pbihyb290LCBcImJpblwiKTtcbiAgcmV0dXJuIHsgcm9vdCwgYmluRGlyLCBwYXRoOiBqb2luKGJpbkRpciwgbmFtZSkgfTtcbn1cblxuZnVuY3Rpb24gcGFja2FnZVBhdGgocm9vdDogc3RyaW5nLCBwYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXBhdGggfHwgaXNBYnNvbHV0ZShwYXRoKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IHBhY2thZ2UgcGF0aDogJHtwYXRofWApO1xuICB9XG4gIGNvbnN0IHBhY2thZ2VSb290ID0gcmVzb2x2ZShyb290KTtcbiAgY29uc3QgcmVzb2x2ZWQgPSByZXNvbHZlKHBhY2thZ2VSb290LCBwYXRoKTtcbiAgaWYgKHJlc29sdmVkID09PSBwYWNrYWdlUm9vdCB8fCAhcmVzb2x2ZWQuc3RhcnRzV2l0aChgJHtwYWNrYWdlUm9vdH0ke3NlcH1gKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGJpbmFyeSBwYWNrYWdlIHBhdGggZXNjYXBlcyBpdHMgcm9vdDogJHtwYXRofWApO1xuICB9XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZnVuY3Rpb24gcGFja2FnZURlc3RpbmF0aW9uKGRlc3RpbmF0aW9uOiBCaW5Db250ZXh0LCBvcHRpb25zOiBCaW5PcHRpb25zKTogdm9pZCB7XG4gIGlmICghb3B0aW9ucy5wYWNrYWdlKSByZXR1cm47XG4gIGNvbnN0IGVudHJ5cG9pbnQgPSBwYWNrYWdlUGF0aChkZXN0aW5hdGlvbi5yb290LCBvcHRpb25zLnBhY2thZ2UuZW50cnlwb2ludCk7XG4gIGlmIChyZXNvbHZlKGRlc3RpbmF0aW9uLnBhdGgpICE9PSBlbnRyeXBvaW50KSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImJpbmFyeSBwYWNrYWdlIGRlc3RpbmF0aW9uIHBhdGggbXVzdCBtYXRjaCBpdHMgZW50cnlwb2ludFwiKTtcbiAgfVxuICBmb3IgKGNvbnN0IHBhdGggb2Ygb3B0aW9ucy5wYWNrYWdlLnJlcXVpcmVkUGF0aHMgPz8gW10pIHtcbiAgICBwYWNrYWdlUGF0aChkZXN0aW5hdGlvbi5yb290LCBwYXRoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBkaXNwbGF5VXJsKHJhdzogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJhdyk7XG4gICAgaWYgKHVybC5wcm90b2NvbCA9PT0gXCJkYXRhOlwiKSByZXR1cm4gXCJkYXRhOlwiO1xuICAgIHVybC51c2VybmFtZSA9IFwiXCI7XG4gICAgdXJsLnBhc3N3b3JkID0gXCJcIjtcbiAgICB1cmwuc2VhcmNoID0gXCJcIjtcbiAgICB1cmwuaGFzaCA9IFwiXCI7XG4gICAgcmV0dXJuIHVybC50b1N0cmluZygpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gcmF3O1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGFjY2Vzc0NvbnRleHQocGF0aDogc3RyaW5nKTogUHJvbWlzZTxCaW5BY2Nlc3NDb250ZXh0PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZW50cnkgPSBhd2FpdCBzdGF0KHBhdGgpO1xuICAgIGNvbnN0IGZpbGUgPSBlbnRyeS5pc0ZpbGUoKTtcbiAgICByZXR1cm4ge1xuICAgICAgZmlsZSxcbiAgICAgIGV4ZWN1dGFibGU6IGZpbGUgJiYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiB8fCAoZW50cnkubW9kZSAmIDBvMTExKSAhPT0gMCksXG4gICAgfTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHsgZmlsZTogZmFsc2UsIGV4ZWN1dGFibGU6IGZhbHNlIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGV0ZWN0ZWRWZXJzaW9ucyhvdXRwdXQ6IHN0cmluZyk6IFBhcnNlZFZlcnNpb25bXSB7XG4gIGNvbnN0IHZlcnNpb25zOiBQYXJzZWRWZXJzaW9uW10gPSBbXTtcbiAgY29uc3QgcGF0dGVybiA9IC9cXGJ2PyhcXGQrKD86XFwuXFxkKyl7MCwyfSkoPzpbLSsuX10/W2Etel1bMC05YS16LitfLV0qKT8vZ2k7XG4gIGZvciAoY29uc3QgbWF0Y2ggb2Ygb3V0cHV0Lm1hdGNoQWxsKHBhdHRlcm4pKSB7XG4gICAgY29uc3QgcmF3ID0gbWF0Y2hbMF0ucmVwbGFjZSgvXnYvaSwgXCJcIik7XG4gICAgY29uc3QgcGFydHMgPSBtYXRjaFsxXT8uc3BsaXQoXCIuXCIpLm1hcChOdW1iZXIpO1xuICAgIGlmIChwYXJ0cz8uZXZlcnkoTnVtYmVyLmlzRmluaXRlKSkgdmVyc2lvbnMucHVzaCh7IHJhdywgcGFydHMgfSk7XG4gIH1cbiAgcmV0dXJuIHZlcnNpb25zLnNvcnQoKGEsIGIpID0+IHtcbiAgICBpZiAoYS5wYXJ0cy5sZW5ndGggIT09IGIucGFydHMubGVuZ3RoKSByZXR1cm4gYi5wYXJ0cy5sZW5ndGggLSBhLnBhcnRzLmxlbmd0aDtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYS5wYXJ0cy5sZW5ndGg7IGluZGV4ICs9IDEpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKGIucGFydHNbaW5kZXhdID8/IDApIC0gKGEucGFydHNbaW5kZXhdID8/IDApO1xuICAgICAgaWYgKG9yZGVyICE9PSAwKSByZXR1cm4gb3JkZXI7XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9KTtcbn1cblxuLyoqXG4gKiBQYXJzZSB0aGUgZGVlcGVzdCwgaGlnaGVzdCB2ZXJzaW9uIGZyb20gc3Rkb3V0LCBmYWxsaW5nIGJhY2sgdG8gc3RkZXJyIG9ubHlcbiAqIHdoZW4gc3Rkb3V0IGNvbnRhaW5zIG5vIHZlcnNpb24uIFN1cHBvcnRzIG9uZSB0byB0aHJlZSBudW1lcmljIGNvbXBvbmVudHNcbiAqIGFuZCBjb21tb24gc3VmZml4ZXMgc3VjaCBhcyBgcmMxYCwgYC5wb3N0MWAsIGFuZCBgLWRldi4yYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVmVyc2lvbih7IHN0ZG91dCwgc3RkZXJyIH06IEJpblZlcnNpb25PdXRwdXQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gZGV0ZWN0ZWRWZXJzaW9ucyhzdGRvdXQpLmF0KDApPy5yYXcgPz8gZGV0ZWN0ZWRWZXJzaW9ucyhzdGRlcnIpLmF0KDApPy5yYXc7XG59XG5cbmZ1bmN0aW9uIG1pbmltdW1TZW1WZXIodmVyc2lvbjogc3RyaW5nKTogU2VtVmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCEvXlxccyp2P1xcZCsoPzpcXC5cXGQrKXswLDJ9XFxzKiQvaS50ZXN0KHZlcnNpb24pKSByZXR1cm4gdW5kZWZpbmVkO1xuICByZXR1cm4gY29lcmNlKHZlcnNpb24sIHsgbG9vc2U6IHRydWUgfSkgPz8gdW5kZWZpbmVkO1xufVxuXG4vKiogQ29tcGFyZSBhIGRldGVjdGVkIHRvb2wgdmVyc2lvbiBhZ2FpbnN0IGEgb25lLXRvLXRocmVlLWNvbXBvbmVudCBtaW5pbXVtLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVmVyc2lvbkF0TGVhc3QodmVyc2lvbjogc3RyaW5nLCBtaW5WZXJzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgbWluaW11bSA9IG1pbmltdW1TZW1WZXIobWluVmVyc2lvbik7XG4gIGlmICghbWluaW11bSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgbWluaW11bSBiaW5hcnkgdmVyc2lvbjogJHttaW5WZXJzaW9ufWApO1xuICB9XG4gIGNvbnN0IGFjdHVhbCA9IGNvZXJjZSh2ZXJzaW9uLCB7IGxvb3NlOiB0cnVlIH0pO1xuICBpZiAoIWFjdHVhbCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gZ3RlKGFjdHVhbCwgbWluaW11bSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzVmFsaWRCaW4ocGF0aDogc3RyaW5nLCBvcHRpb25zOiBCaW5PcHRpb25zKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGxvZ2dlci5kZWJ1ZyhcImNoZWNraW5nIGJpbmFyeVwiLCB7XG4gICAgcGF0aCxcbiAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgdmVyc2lvbkFyZ3VtZW50OiBvcHRpb25zLnZlcnNpb25Bcmd1bWVudCA/PyBcIi0tdmVyc2lvblwiLFxuICB9KTtcbiAgY29uc3QgYWNjZXNzID0gYXdhaXQgYWNjZXNzQ29udGV4dChwYXRoKTtcbiAgaWYgKCFhY2Nlc3MuZmlsZSB8fCAhYWNjZXNzLmV4ZWN1dGFibGUpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgYWNjZXNzIGNoZWNrIGZhaWxlZFwiLCB7IHBhdGgsIC4uLmFjY2VzcyB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKG9wdGlvbnMuc2tpcFZlcnNpb25DaGVjaykge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNoZWNrIHNraXBwZWRcIiwgeyBwYXRoIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCBzdGRvdXQ6IHN0cmluZztcbiAgbGV0IHN0ZGVycjogc3RyaW5nO1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWNGaWxlQXN5bmMocGF0aCwgW29wdGlvbnMudmVyc2lvbkFyZ3VtZW50ID8/IFwiLS12ZXJzaW9uXCJdLCB7XG4gICAgICBlbmNvZGluZzogXCJ1dGY4XCIsXG4gICAgfSk7XG4gICAgc3Rkb3V0ID0gcmVzdWx0LnN0ZG91dDtcbiAgICBzdGRlcnIgPSByZXN1bHQuc3RkZXJyO1xuICB9IGNhdGNoIChjYXVzZSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcImJpbmFyeSB2ZXJzaW9uIGNvbW1hbmQgZmFpbGVkXCIsIHtcbiAgICAgIHBhdGgsXG4gICAgICBlcnJvcjogZXJyb3JVdGlscy50b0Vycm9yKGNhdXNlKSxcbiAgICB9KTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgdmVyc2lvbiA9IChvcHRpb25zLnZlcnNpb25QYXJzZXIgPz8gcGFyc2VWZXJzaW9uKSh7XG4gICAgc3Rkb3V0LFxuICAgIHN0ZGVycixcbiAgfSk7XG4gIGNvbnN0IHZhbGlkID1cbiAgICB2ZXJzaW9uICE9PSB1bmRlZmluZWQgJiZcbiAgICAob3B0aW9ucy5taW5WZXJzaW9uID09PSB1bmRlZmluZWQgfHwgaXNWZXJzaW9uQXRMZWFzdCh2ZXJzaW9uLCBvcHRpb25zLm1pblZlcnNpb24pKTtcbiAgbG9nZ2VyLmRlYnVnKFwiYmluYXJ5IHZlcnNpb24gY2hlY2tlZFwiLCB7XG4gICAgcGF0aCxcbiAgICB2ZXJzaW9uLFxuICAgIG1pblZlcnNpb246IG9wdGlvbnMubWluVmVyc2lvbixcbiAgICB2YWxpZCxcbiAgfSk7XG4gIHJldHVybiB2YWxpZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGF0aEV4aXN0cyhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBzdGF0KHBhdGgpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNWYWxpZEluc3RhbGwoZGVzdGluYXRpb246IEJpbkNvbnRleHQsIG9wdGlvbnM6IEJpbk9wdGlvbnMpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgaWYgKCEoYXdhaXQgaXNWYWxpZEJpbihkZXN0aW5hdGlvbi5wYXRoLCBvcHRpb25zKSkpIHJldHVybiBmYWxzZTtcbiAgaWYgKCFvcHRpb25zLnBhY2thZ2UpIHJldHVybiB0cnVlO1xuICBjb25zdCByZXF1aXJlZCA9IFtvcHRpb25zLnBhY2thZ2UuZW50cnlwb2ludCwgLi4uKG9wdGlvbnMucGFja2FnZS5yZXF1aXJlZFBhdGhzID8/IFtdKV07XG4gIGNvbnN0IGF2YWlsYWJsZSA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgIHJlcXVpcmVkLm1hcCgocGF0aCkgPT4gcGF0aEV4aXN0cyhwYWNrYWdlUGF0aChkZXN0aW5hdGlvbi5yb290LCBwYXRoKSkpLFxuICApO1xuICByZXR1cm4gYXZhaWxhYmxlLmV2ZXJ5KEJvb2xlYW4pO1xufVxuXG5mdW5jdGlvbiBkb3dubG9hZE5hbWUodXJsOiBzdHJpbmcsIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgY2FuZGlkYXRlID0gYmFzZW5hbWUoZGVjb2RlVVJJQ29tcG9uZW50KG5ldyBVUkwodXJsKS5wYXRobmFtZSkpO1xuICAgIHJldHVybiBjYW5kaWRhdGUgJiYgQnVmZmVyLmJ5dGVMZW5ndGgoY2FuZGlkYXRlKSA8PSAyMDAgPyBjYW5kaWRhdGUgOiBuYW1lO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gbmFtZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB1bnBhY2soYXJjaGl2ZTogc3RyaW5nLCBkZXN0aW5hdGlvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGZpbGVuYW1lID0gYXJjaGl2ZS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoZmlsZW5hbWUuZW5kc1dpdGgoXCIuemlwXCIpKSB7XG4gICAgYXdhaXQgZXh0cmFjdFppcChhcmNoaXZlLCB7IGRpcjogZGVzdGluYXRpb24gfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChmaWxlbmFtZS5lbmRzV2l0aChcIi50YXJcIikgfHwgZmlsZW5hbWUuZW5kc1dpdGgoXCIudGFyLmd6XCIpIHx8IGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRnelwiKSkge1xuICAgIGF3YWl0IGV4dHJhY3RUYXIoeyBmaWxlOiBhcmNoaXZlLCBjd2Q6IGRlc3RpbmF0aW9uIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYHVuc3VwcG9ydGVkIGJpbmFyeSBhcmNoaXZlOiAke2Jhc2VuYW1lKGFyY2hpdmUpfWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBmaWxlc1VuZGVyKHJvb3Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIocm9vdCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICBjb25zdCBmaWxlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgY29uc3QgcGF0aCA9IGpvaW4ocm9vdCwgZW50cnkubmFtZSk7XG4gICAgaWYgKGVudHJ5LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGZpbGVzLnB1c2goLi4uKGF3YWl0IGZpbGVzVW5kZXIocGF0aCkpKTtcbiAgICB9IGVsc2UgaWYgKGVudHJ5LmlzRmlsZSgpKSB7XG4gICAgICBmaWxlcy5wdXNoKHBhdGgpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZmlsZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdFNpbmdsZUZpbGUoc291cmNlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGZpbGVzVW5kZXIoc291cmNlKTtcbiAgY29uc3Qgc2VsZWN0ZWQgPSBmaWxlcy5hdCgwKTtcbiAgaWYgKGZpbGVzLmxlbmd0aCAhPT0gMSB8fCAhc2VsZWN0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBhcmNoaXZlIG11c3QgY29udGFpbiBvbmUgZmlsZSwgZm91bmQgJHtmaWxlcy5sZW5ndGh9YCk7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdGVkO1xufVxuXG5mdW5jdGlvbiBmaWxlVXJsUGF0aCh1cmw6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gbmV3IFVSTCh1cmwpO1xuICAgIGlmIChwYXJzZWQucHJvdG9jb2wgIT09IFwiZmlsZTpcIikgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gZmlsZVVSTFRvUGF0aChwYXJzZWQpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbmludGVyZmFjZSBTZWxlY3RlZEJpbiB7XG4gIHBhdGg6IHN0cmluZztcbiAgcGFja2FnZVJvb3Q/OiBzdHJpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNlbGVjdGVkQmluKFxuICBkZXN0aW5hdGlvbjogQmluQ29udGV4dCxcbiAgc291cmNlOiBCaW5Tb3VyY2UsXG4gIHRlbXA6IHN0cmluZyxcbiAgb3B0aW9uczogQmluT3B0aW9ucyxcbik6IFByb21pc2U8U2VsZWN0ZWRCaW4+IHtcbiAgY29uc3QgeyB1cmwgfSA9IHNvdXJjZTtcbiAgY29uc3QgbG9jYWxQYXRoID0gZmlsZVVybFBhdGgodXJsKTtcbiAgbGV0IGRvd25sb2FkUGF0aDogc3RyaW5nO1xuICBpZiAobG9jYWxQYXRoKSB7XG4gICAgY29uc3QgYWNjZXNzID0gYXdhaXQgYWNjZXNzQ29udGV4dChsb2NhbFBhdGgpO1xuICAgIGlmICghYWNjZXNzLmZpbGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGZpbGUgVVJMIGRvZXMgbm90IGV4aXN0OiAke2Rpc3BsYXlVcmwodXJsKX1gKTtcbiAgICB9XG4gICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgbG9jYWwgYmluYXJ5XCIsIHsgZnJvbTogZGlzcGxheVVybCh1cmwpLCBwYXRoOiBsb2NhbFBhdGggfSk7XG4gICAgZG93bmxvYWRQYXRoID0gbG9jYWxQYXRoO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG5hbWUgPSBkb3dubG9hZE5hbWUodXJsLCBiYXNlbmFtZShkZXN0aW5hdGlvbi5wYXRoKSk7XG4gICAgZG93bmxvYWRQYXRoID0gam9pbih0ZW1wLCBuYW1lKTtcbiAgICBjb25zdCBkb3dubG9hZCA9IHtcbiAgICAgIGZyb206IGRpc3BsYXlVcmwodXJsKSxcbiAgICAgIHRvOiBkb3dubG9hZFBhdGgsXG4gICAgfTtcbiAgICBpZiAoZG93bmxvYWQuZnJvbSA9PT0gXCJkYXRhOlwiKSBsb2dnZXIuZGVidWcoXCJkb3dubG9hZGluZyBiaW5hcnlcIiwgZG93bmxvYWQpO1xuICAgIGVsc2UgbG9nZ2VyLmluZm8oXCJkb3dubG9hZGluZyBiaW5hcnlcIiwgZG93bmxvYWQpO1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICBpZiAoIXJlc3BvbnNlLm9rKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBkb3dubG9hZCBmYWlsZWQgKCR7cmVzcG9uc2Uuc3RhdHVzfSlgKTtcbiAgICB9XG4gICAgY29uc3QgZG93bmxvYWRlZCA9IEJ1ZmZlci5mcm9tKGF3YWl0IHJlc3BvbnNlLmFycmF5QnVmZmVyKCkpO1xuICAgIGlmIChzb3VyY2Uuc2hhMjU2KSB7XG4gICAgICBpZiAoIS9eWzAtOWEtZl17NjR9JC9pLnRlc3Qoc291cmNlLnNoYTI1NikpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBcImJpbmFyeSBkb3dubG9hZCBTSEEtMjU2IGRpZ2VzdCBtdXN0IGNvbnRhaW4gNjQgaGV4YWRlY2ltYWwgY2hhcmFjdGVyc1wiLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgY29uc3QgYWN0dWFsID0gY3JlYXRlSGFzaChcInNoYTI1NlwiKS51cGRhdGUoZG93bmxvYWRlZCkuZGlnZXN0KFwiaGV4XCIpO1xuICAgICAgaWYgKGFjdHVhbC50b0xvd2VyQ2FzZSgpICE9PSBzb3VyY2Uuc2hhMjU2LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaW5hcnkgZG93bmxvYWQgZGlnZXN0IG1pc21hdGNoOiAke2Rpc3BsYXlVcmwodXJsKX1gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXdhaXQgd3JpdGVGaWxlKGRvd25sb2FkUGF0aCwgZG93bmxvYWRlZCwgeyBtb2RlOiAwbzc1NSB9KTtcbiAgfVxuXG4gIGxldCBzZWxlY3RlZFNvdXJjZSA9IGRvd25sb2FkUGF0aDtcbiAgbGV0IHVucGFja2VkID0gZmFsc2U7XG4gIGlmIChvcHRpb25zLnBhY2thZ2UgfHwgKG9wdGlvbnMuYXV0b1VucGFja2FnZSAmJiAhbG9jYWxQYXRoKSkge1xuICAgIHNlbGVjdGVkU291cmNlID0gam9pbih0ZW1wLCBgdW5wYWNrZWQtJHtyYW5kb21VVUlEKCl9YCk7XG4gICAgYXdhaXQgbWtkaXIoc2VsZWN0ZWRTb3VyY2UpO1xuICAgIGxvZ2dlci5pbmZvKFwidW5wYWNraW5nIGJpbmFyeSBhcmNoaXZlXCIsIHtcbiAgICAgIGFyY2hpdmU6IGRvd25sb2FkUGF0aCxcbiAgICAgIHRvOiBzZWxlY3RlZFNvdXJjZSxcbiAgICB9KTtcbiAgICBhd2FpdCB1bnBhY2soZG93bmxvYWRQYXRoLCBzZWxlY3RlZFNvdXJjZSk7XG4gICAgdW5wYWNrZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2VsZWN0b3IpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IG9wdGlvbnMuc2VsZWN0b3Ioe1xuICAgICAgZGVzdGluYXRpb24sXG4gICAgICBkb3dubG9hZFBhdGgsXG4gICAgICBzb3VyY2U6IHNlbGVjdGVkU291cmNlLFxuICAgIH0pO1xuICAgIGxvZ2dlci5kZWJ1ZyhcInNlbGVjdGVkIGJpbmFyeVwiLCB7IHBhdGg6IHNlbGVjdGVkIH0pO1xuICAgIHJldHVybiB7IHBhdGg6IHNlbGVjdGVkLCAuLi4ob3B0aW9ucy5wYWNrYWdlID8geyBwYWNrYWdlUm9vdDogc2VsZWN0ZWRTb3VyY2UgfSA6IHt9KSB9O1xuICB9XG4gIGlmIChvcHRpb25zLnBhY2thZ2UpIHtcbiAgICBjb25zdCBzZWxlY3RlZCA9IHBhY2thZ2VQYXRoKHNlbGVjdGVkU291cmNlLCBvcHRpb25zLnBhY2thZ2UuZW50cnlwb2ludCk7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgYmluYXJ5IHBhY2thZ2UgZW50cnlwb2ludFwiLCB7IHBhdGg6IHNlbGVjdGVkIH0pO1xuICAgIHJldHVybiB7IHBhdGg6IHNlbGVjdGVkLCBwYWNrYWdlUm9vdDogc2VsZWN0ZWRTb3VyY2UgfTtcbiAgfVxuICBjb25zdCBzZWxlY3RlZCA9IHVucGFja2VkID8gYXdhaXQgc2VsZWN0U2luZ2xlRmlsZShzZWxlY3RlZFNvdXJjZSkgOiBzZWxlY3RlZFNvdXJjZTtcbiAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgYmluYXJ5XCIsIHsgcGF0aDogc2VsZWN0ZWQgfSk7XG4gIHJldHVybiB7IHBhdGg6IHNlbGVjdGVkIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQYWNrYWdlKFxuICBzb3VyY2U6IHN0cmluZyxcbiAgZGVzdGluYXRpb246IEJpbkNvbnRleHQsXG4gIG9wdGlvbnM6IEJpbk9wdGlvbnMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFvcHRpb25zLnBhY2thZ2UpIHRocm93IG5ldyBFcnJvcihcImJpbmFyeSBwYWNrYWdlIG9wdGlvbnMgYXJlIHJlcXVpcmVkXCIpO1xuICBjb25zdCBwYXJlbnQgPSBkaXJuYW1lKGRlc3RpbmF0aW9uLnJvb3QpO1xuICBjb25zdCBuYW1lID0gYmFzZW5hbWUoZGVzdGluYXRpb24ucm9vdCk7XG4gIGNvbnN0IHN0YWdlZFJvb3QgPSBqb2luKHBhcmVudCwgYC4ke25hbWV9LXN0YWdlZC0ke3JhbmRvbVVVSUQoKX1gKTtcbiAgY29uc3QgYmFja3VwUm9vdCA9IGpvaW4ocGFyZW50LCBgLiR7bmFtZX0tYmFja3VwLSR7cmFuZG9tVVVJRCgpfWApO1xuICBhd2FpdCBta2RpcihwYXJlbnQsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICBsb2dnZXIuaW5mbyhcInN0YWdpbmcgYmluYXJ5IHBhY2thZ2VcIiwge1xuICAgIGZyb206IHNvdXJjZSxcbiAgICB0bzogZGVzdGluYXRpb24ucm9vdCxcbiAgfSk7XG4gIGF3YWl0IGNwKHNvdXJjZSwgc3RhZ2VkUm9vdCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGNvbnN0IHN0YWdlZFBhdGggPSBwYWNrYWdlUGF0aChzdGFnZWRSb290LCBvcHRpb25zLnBhY2thZ2UuZW50cnlwb2ludCk7XG4gIGF3YWl0IGNobW9kKHN0YWdlZFBhdGgsIDBvNzU1KTtcbiAgY29uc3Qgc3RhZ2VkOiBCaW5Db250ZXh0ID0ge1xuICAgIHJvb3Q6IHN0YWdlZFJvb3QsXG4gICAgYmluRGlyOiBkaXJuYW1lKHN0YWdlZFBhdGgpLFxuICAgIHBhdGg6IHN0YWdlZFBhdGgsXG4gIH07XG4gIGlmICghKGF3YWl0IGlzVmFsaWRJbnN0YWxsKHN0YWdlZCwgb3B0aW9ucykpKSB7XG4gICAgYXdhaXQgcm0oc3RhZ2VkUm9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIHRocm93IG5ldyBFcnJvcihgc2VsZWN0ZWQgYmluYXJ5IHBhY2thZ2UgaXMgaW52YWxpZDogJHtzb3VyY2V9YCk7XG4gIH1cblxuICBsZXQgYmFja2VkVXAgPSBmYWxzZTtcbiAgdHJ5IHtcbiAgICBpZiAoYXdhaXQgcGF0aEV4aXN0cyhkZXN0aW5hdGlvbi5yb290KSkge1xuICAgICAgYXdhaXQgcmVuYW1lKGRlc3RpbmF0aW9uLnJvb3QsIGJhY2t1cFJvb3QpO1xuICAgICAgYmFja2VkVXAgPSB0cnVlO1xuICAgIH1cbiAgICBhd2FpdCByZW5hbWUoc3RhZ2VkUm9vdCwgZGVzdGluYXRpb24ucm9vdCk7XG4gICAgaWYgKCEoYXdhaXQgaXNWYWxpZEluc3RhbGwoZGVzdGluYXRpb24sIG9wdGlvbnMpKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBpbnN0YWxsZWQgYmluYXJ5IHBhY2thZ2UgaXMgaW52YWxpZCBhZnRlciByZW5hbWU6ICR7ZGVzdGluYXRpb24ucm9vdH1gKTtcbiAgICB9XG4gICAgaWYgKGJhY2tlZFVwKSBhd2FpdCBybShiYWNrdXBSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgYXdhaXQgcm0oZGVzdGluYXRpb24ucm9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIGlmIChiYWNrZWRVcCkgYXdhaXQgcmVuYW1lKGJhY2t1cFJvb3QsIGRlc3RpbmF0aW9uLnJvb3QpO1xuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJtKHN0YWdlZFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybiBhbiBleGlzdGluZyBleGVjdXRhYmxlIG9yIGluc3RhbGwgaXQgYXRvbWljYWxseSB1bmRlclxuICogYCRIT01FLy48bmFtZT4vYmluLzxuYW1lPmAuIE11bHRpLWZpbGUgcGFja2FnZSBtb2RlIGF0b21pY2FsbHkgcHJlc2VydmVzIHRoZVxuICogdW5wYWNrZWQgcGFja2FnZSBhdCBhbiBleHBsaWNpdCBkZXN0aW5hdGlvbiByb290LiBJbnN0YWxsYXRpb24gdXNlcyBhXG4gKiBjaGVjay1sb2NrLWNoZWNrLWxvYWQgc2VxdWVuY2Ugc28gY29uY3VycmVudCBjYWxsZXJzIHJlc29sdmUgYW5kIGRvd25sb2FkXG4gKiBvbmx5IG9uY2UuIENhbmRpZGF0ZXMgYW5kIGZpbmFsIGRlc3RpbmF0aW9ucyBtdXN0IHBhc3MgdGhlIHNhbWUgY2hlY2tzLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlKFxuICBuYW1lOiBzdHJpbmcsXG4gIHVybDogQmluVXJsLFxuICBvcHRpb25zOiBCaW5PcHRpb25zID0ge30sXG4pOiBQcm9taXNlPEJpbkNvbnRleHQ+IHtcbiAgaWYgKG9wdGlvbnMubWluVmVyc2lvbiAmJiAhbWluaW11bVNlbVZlcihvcHRpb25zLm1pblZlcnNpb24pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBtaW5pbXVtIGJpbmFyeSB2ZXJzaW9uOiAke29wdGlvbnMubWluVmVyc2lvbn1gKTtcbiAgfVxuICBjb25zdCBkZXN0aW5hdGlvbiA9IGNvbnRleHQobmFtZSwgb3B0aW9ucy5ob21lRGlyID8/IGhvbWVkaXIoKSwgb3B0aW9ucy5kZXN0aW5hdGlvbik7XG4gIHBhY2thZ2VEZXN0aW5hdGlvbihkZXN0aW5hdGlvbiwgb3B0aW9ucyk7XG4gIGlmICghb3B0aW9ucy5mb3JjZSAmJiAoYXdhaXQgaXNWYWxpZEluc3RhbGwoZGVzdGluYXRpb24sIG9wdGlvbnMpKSkge1xuICAgIGxvZ2dlci5kZWJ1ZyhcInVzaW5nIGluc3RhbGxlZCBiaW5hcnlcIiwgeyBuYW1lLCBwYXRoOiBkZXN0aW5hdGlvbi5wYXRoIH0pO1xuICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgfVxuXG4gIGxvZ2dlci5kZWJ1ZyhcIndhaXRpbmcgZm9yIGJpbmFyeSBpbnN0YWxsIGxvY2tcIiwgeyBuYW1lLCBwYXRoOiBkZXN0aW5hdGlvbi5wYXRoIH0pO1xuICByZXR1cm4gd2l0aEZpbGVMb2NrKFtcImJpbi5lbnN1cmVcIiwgZGVzdGluYXRpb24ucGF0aF0sIGFzeW5jICgpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMuZm9yY2UgJiYgKGF3YWl0IGlzVmFsaWRJbnN0YWxsKGRlc3RpbmF0aW9uLCBvcHRpb25zKSkpIHtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInVzaW5nIGJpbmFyeSBpbnN0YWxsZWQgYnkgYW5vdGhlciBjYWxsZXJcIiwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBwYXRoOiBkZXN0aW5hdGlvbi5wYXRoLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZGVzdGluYXRpb247XG4gICAgfVxuXG4gICAgbG9nZ2VyLmRlYnVnKFwiaW5zdGFsbGluZyBiaW5hcnlcIiwge1xuICAgICAgbmFtZSxcbiAgICAgIHRvOiBkZXN0aW5hdGlvbi5wYXRoLFxuICAgICAgbWluVmVyc2lvbjogb3B0aW9ucy5taW5WZXJzaW9uLFxuICAgIH0pO1xuICAgIGNvbnN0IHRlbXAgPSBhd2FpdCBta2R0ZW1wKGpvaW4odG1wZGlyKCksIGAke25hbWV9LWApKTtcbiAgICBsZXQgc3RhZ2VkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc29sdmVkID0gdHlwZW9mIHVybCA9PT0gXCJmdW5jdGlvblwiID8gYXdhaXQgdXJsKHsgdGVtcERpcjogdGVtcCB9KSA6IHVybDtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHR5cGVvZiByZXNvbHZlZCA9PT0gXCJzdHJpbmdcIiA/IHsgdXJsOiByZXNvbHZlZCB9IDogcmVzb2x2ZWQ7XG4gICAgICBjb25zdCBmcm9tID0gZGlzcGxheVVybChzb3VyY2UudXJsKTtcbiAgICAgIGxvZ2dlci5kZWJ1ZyhcInJlc29sdmVkIGJpbmFyeSBzb3VyY2VcIiwgeyBuYW1lLCBmcm9tIH0pO1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBhd2FpdCBzZWxlY3RlZEJpbihkZXN0aW5hdGlvbiwgc291cmNlLCB0ZW1wLCBvcHRpb25zKTtcbiAgICAgIGF3YWl0IGNobW9kKHNlbGVjdGVkLnBhdGgsIDBvNzU1KTtcbiAgICAgIGlmICghKGF3YWl0IGlzVmFsaWRCaW4oc2VsZWN0ZWQucGF0aCwgb3B0aW9ucykpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgc2VsZWN0ZWQgYmluYXJ5IGhhcyBubyBhY2NlcHRhYmxlIHZlcnNpb246ICR7c2VsZWN0ZWQucGF0aH1gKTtcbiAgICAgIH1cbiAgICAgIGlmIChvcHRpb25zLnBhY2thZ2UpIHtcbiAgICAgICAgaWYgKCFzZWxlY3RlZC5wYWNrYWdlUm9vdCkgdGhyb3cgbmV3IEVycm9yKFwiYmluYXJ5IHBhY2thZ2Ugcm9vdCB3YXMgbm90IHNlbGVjdGVkXCIpO1xuICAgICAgICBhd2FpdCBpbnN0YWxsUGFja2FnZShzZWxlY3RlZC5wYWNrYWdlUm9vdCwgZGVzdGluYXRpb24sIG9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgbWtkaXIoZGVzdGluYXRpb24uYmluRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICAgICAgc3RhZ2VkID0gam9pbihkZXN0aW5hdGlvbi5iaW5EaXIsIGAuJHtuYW1lfS0ke3JhbmRvbVVVSUQoKX1gKTtcbiAgICAgICAgYXdhaXQgY29weUZpbGUoc2VsZWN0ZWQucGF0aCwgc3RhZ2VkKTtcbiAgICAgICAgYXdhaXQgY2htb2Qoc3RhZ2VkLCAwbzc1NSk7XG4gICAgICAgIGF3YWl0IHJlbmFtZShzdGFnZWQsIGRlc3RpbmF0aW9uLnBhdGgpO1xuICAgICAgICBzdGFnZWQgPSB1bmRlZmluZWQ7XG4gICAgICAgIGlmICghKGF3YWl0IGlzVmFsaWRJbnN0YWxsKGRlc3RpbmF0aW9uLCBvcHRpb25zKSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGluc3RhbGxlZCBiaW5hcnkgaXMgaW52YWxpZCBhZnRlciByZW5hbWU6ICR7ZGVzdGluYXRpb24ucGF0aH1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbG9nZ2VyLmluZm8oXCJpbnN0YWxsZWQgYmluYXJ5XCIsIHtcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZnJvbSxcbiAgICAgICAgdG86IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHN0YWdlZCkgYXdhaXQgcm0oc3RhZ2VkLCB7IGZvcmNlOiB0cnVlIH0pO1xuICAgICAgYXdhaXQgcm0odGVtcCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iXX0=
|
|
430
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2Jpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3JELE9BQU8sRUFDTCxLQUFLLEVBQ0wsRUFBRSxFQUNGLFFBQVEsRUFDUixLQUFLLEVBQ0wsT0FBTyxFQUNQLE9BQU8sRUFDUCxNQUFNLEVBQ04sRUFBRSxFQUNGLElBQUksRUFDSixTQUFTLEdBQ1YsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDOUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxVQUFVLE1BQU0sYUFBYSxDQUFDO0FBQ3JDLE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFlLE1BQU0sUUFBUSxDQUFDO0FBQ2xELE9BQU8sRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXRDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUU5QyxNQUFNLGFBQWEsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDMUMsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztBQXVGdEMs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SCxPQUFPLFdBQVcsQ0FBQztRQUNyQixDQUFDO2dCQUFTLENBQUM7WUFDVCxJQUFJLE1BQU07Z0JBQUUsTUFBTSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBJbnN0YWxsIGFuZCByZXVzZSBleGVjdXRhYmxlIGJpbmFyaWVzIHVuZGVyIGEgcGVyLXRvb2wgaG9tZSBkaXJlY3RvcnkuXG4gKlxuICogQG1vZHVsZVxuICovXG5pbXBvcnQgeyBleGVjRmlsZSB9IGZyb20gXCJub2RlOmNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNyZWF0ZUhhc2gsIHJhbmRvbVVVSUQgfSBmcm9tIFwibm9kZTpjcnlwdG9cIjtcbmltcG9ydCB7XG4gIGNobW9kLFxuICBjcCxcbiAgY29weUZpbGUsXG4gIG1rZGlyLFxuICBta2R0ZW1wLFxuICByZWFkZGlyLFxuICByZW5hbWUsXG4gIHJtLFxuICBzdGF0LFxuICB3cml0ZUZpbGUsXG59IGZyb20gXCJub2RlOmZzL3Byb21pc2VzXCI7XG5pbXBvcnQgeyBob21lZGlyLCB0bXBkaXIgfSBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGRpcm5hbWUsIGlzQWJzb2x1dGUsIGpvaW4sIHJlc29sdmUsIHNlcCB9IGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tIFwibm9kZTp1cmxcIjtcbmltcG9ydCB7IHByb21pc2lmeSB9IGZyb20gXCJub2RlOnV0aWxcIjtcblxuaW1wb3J0IHsgdG9FcnJvciwgbG9nIH0gZnJvbSBcIkBkYngtdG9vbHMvc2hhcmVkLWNvcmVcIjtcbmltcG9ydCBleHRyYWN0WmlwIGZyb20gXCJleHRyYWN0LXppcFwiO1xuaW1wb3J0IHsgY29lcmNlLCBndGUsIHR5cGUgU2VtVmVyIH0gZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0IHsgeCBhcyBleHRyYWN0VGFyIH0gZnJvbSBcInRhclwiO1xuXG5pbXBvcnQgeyB3aXRoRmlsZUxvY2sgfSBmcm9tIFwiLi9maWxlLWxvY2sudHNcIjtcblxuY29uc3QgZXhlY0ZpbGVBc3luYyA9IHByb21pc2lmeShleGVjRmlsZSk7XG5jb25zdCBsb2dnZXIgPSBsb2cubG9nZ2VyKFwiY29yZTpiaW5cIik7XG5cbmludGVyZmFjZSBQYXJzZWRWZXJzaW9uIHtcbiAgcmF3OiBzdHJpbmc7XG4gIHBhcnRzOiBudW1iZXJbXTtcbn1cblxuaW50ZXJmYWNlIEJpbkFjY2Vzc0NvbnRleHQge1xuICBmaWxlOiBib29sZWFuO1xuICBleGVjdXRhYmxlOiBib29sZWFuO1xufVxuXG4vKiogU3RhYmxlIHBhdGhzIGZvciBhbiBpbnN0YWxsZWQgYmluYXJ5LiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5Db250ZXh0IHtcbiAgcm9vdDogc3RyaW5nO1xuICBiaW5EaXI6IHN0cmluZztcbiAgcGF0aDogc3RyaW5nO1xufVxuXG4vKiogVGVtcG9yYXJ5IGRvd25sb2FkIGFuZCBleHRyYWN0aW9uIHBhdGhzIHN1cHBsaWVkIHRvIGEgY3VzdG9tIHNlbGVjdG9yLiAqL1xuZXhwb3J0IGludGVyZmFjZSBCaW5TZWxlY3Rpb25Db250ZXh0IHtcbiAgZGVzdGluYXRpb246IEJpbkNvbnRleHQ7XG4gIGRvd25sb2FkUGF0aDogc3RyaW5nO1xuICBzb3VyY2U6IHN0cmluZztcbn1cblxuLyoqXG4gKiBTZWxlY3QgdGhlIGV4ZWN1dGFibGUgZnJvbSBhIGRvd25sb2FkIG9yIHVucGFja2VkIGFyY2hpdmUuIEEgc2VsZWN0b3IgbWF5XG4gKiBhbHNvIHByZXBhcmUgdGhlIGZpbGUsIHN1Y2ggYXMgYXBwbHlpbmcgaXRzIGV4ZWN1dGFibGUgbW9kZS5cbiAqL1xuZXhwb3J0IHR5cGUgQmluU2VsZWN0b3IgPSAoY29udGV4dDogQmluU2VsZWN0aW9uQ29udGV4dCkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xuXG4vKiogQ2FwdHVyZWQgb3V0cHV0IHBhc3NlZCB0byBhIGN1c3RvbSBiaW5hcnkgdmVyc2lvbiBwYXJzZXIuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblZlcnNpb25PdXRwdXQge1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG5cbi8qKiBFeHRyYWN0IGEgdmVyc2lvbiBzdHJpbmcgZnJvbSBhIHN1Y2Nlc3NmdWwgdmVyc2lvbi1jb21tYW5kIHJlc3VsdC4gKi9cbmV4cG9ydCB0eXBlIEJpblZlcnNpb25QYXJzZXIgPSAob3V0cHV0OiBCaW5WZXJzaW9uT3V0cHV0KSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbi8qKiBPcHRpb25zIGZvciB7QGxpbmsgZW5zdXJlfS4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQmluT3B0aW9ucyB7XG4gIGF1dG9VbnBhY2thZ2U/OiBib29sZWFuO1xuICAvKiogUHJlc2VydmUgYW4gdW5wYWNrZWQgbXVsdGktZmlsZSBwYWNrYWdlIHJvb3RlZCBhdCB7QGxpbmsgQmluQ29udGV4dC5yb290fS4gKi9cbiAgcGFja2FnZT86IEJpblBhY2thZ2VPcHRpb25zO1xuICBzZWxlY3Rvcj86IEJpblNlbGVjdG9yO1xuICBob21lRGlyPzogc3RyaW5nO1xuICAvKiogRXhhY3QgaW5zdGFsbGF0aW9uIHBhdGhzLiBPbWlzc2lvbiBrZWVwcyBgJEhPTUUvLjxuYW1lPi9iaW4vPG5hbWU+YC4gKi9cbiAgZGVzdGluYXRpb24/OiBCaW5Db250ZXh0O1xuICAvKiogTWluaW11bSBhY2NlcHRlZCBudW1lcmljIHZlcnNpb24sIHdpdGggb25lIHRvIHRocmVlIGNvbXBvbmVudHMuICovXG4gIG1pblZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBBcmd1bWVudCBwYXNzZWQgdG8gdGhlIGJpbmFyeSBmb3IgdmVyc2lvbiBkZXRlY3Rpb24uIERlZmF1bHRzIHRvIGAtLXZlcnNpb25gLiAqL1xuICB2ZXJzaW9uQXJndW1lbnQ/OiBzdHJpbmc7XG4gIC8qKiBWZXJzaW9uIG91dHB1dCBwYXJzZXIuIERlZmF1bHRzIHRvIHtAbGluayBwYXJzZVZlcnNpb259LiAqL1xuICB2ZXJzaW9uUGFyc2VyPzogQmluVmVyc2lvblBhcnNlcjtcbiAgLyoqIFNraXAgYC0tdmVyc2lvbmAgYW5kIHRyZWF0IGFuIGV4ZWN1dGFibGUgZmlsZSBhcyBhY2NlcHRhYmxlLiAqL1xuICBza2lwVmVyc2lvbkNoZWNrPzogYm9vbGVhbjtcbiAgLyoqIFJlaW5zdGFsbCBldmVuIHdoZW4gdGhlIGRlc3RpbmF0aW9uIGFscmVhZHkgcGFzc2VzIHZhbGlkYXRpb24uICovXG4gIGZvcmNlPzogYm9vbGVhbjtcbn1cblxuLyoqIE11bHRpLWZpbGUgYXJjaGl2ZSBsYXlvdXQgcmV0YWluZWQgYmVzaWRlIGl0cyBleGVjdXRhYmxlIGVudHJ5cG9pbnQuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblBhY2thZ2VPcHRpb25zIHtcbiAgLyoqIEV4ZWN1dGFibGUgcGF0aCByZWxhdGl2ZSB0byB0aGUgdW5wYWNrZWQgcGFja2FnZSByb290LiAqL1xuICBlbnRyeXBvaW50OiBzdHJpbmc7XG4gIC8qKiBDb21wYW5pb24gZmlsZXMgb3IgZGlyZWN0b3JpZXMgcmVxdWlyZWQgYmVmb3JlIGFuIGluc3RhbGxhdGlvbiBjYW4gYmUgcmV1c2VkLiAqL1xuICByZXF1aXJlZFBhdGhzPzogcmVhZG9ubHkgc3RyaW5nW107XG59XG5cbi8qKiBUZW1wb3JhcnkgZGlyZWN0b3J5IGNyZWF0ZWQgZm9yIG9uZSBgZW5zdXJlYCBhdHRlbXB0IGFmdGVyIHRoZSBpbnN0YWxsIGxvY2suICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblVybFJlc29sdmVDb250ZXh0IHtcbiAgcmVhZG9ubHkgdGVtcERpcjogc3RyaW5nO1xufVxuXG4vKiogRG93bmxvYWQgc291cmNlIHJlc29sdmVkIG9ubHkgd2hlbiB0aGUgZXhlY3V0YWJsZSBpcyBub3QgYWxyZWFkeSBpbnN0YWxsZWQuICovXG5leHBvcnQgaW50ZXJmYWNlIEJpblNvdXJjZSB7XG4gIHVybDogc3RyaW5nO1xuICBzaGEyNTY/OiBzdHJpbmc7XG59XG5cbi8qKiBBIGRvd25sb2FkIHNvdXJjZSByZXNvbHZlZCBvbmx5IHdoZW4gdGhlIGV4ZWN1dGFibGUgaXMgbm90IGFscmVhZHkgaW5zdGFsbGVkLiAqL1xuZXhwb3J0IHR5cGUgQmluVXJsID1cbiAgfCBzdHJpbmdcbiAgfCBCaW5Tb3VyY2VcbiAgfCAoKGNvbnRleHQ6IEJpblVybFJlc29sdmVDb250ZXh0KSA9PiBzdHJpbmcgfCBCaW5Tb3VyY2UgfCBQcm9taXNlPHN0cmluZyB8IEJpblNvdXJjZT4pO1xuXG5mdW5jdGlvbiBjb250ZXh0KG5hbWU6IHN0cmluZywgaG9tZURpcjogc3RyaW5nLCBkZXN0aW5hdGlvbj86IEJpbkNvbnRleHQpOiBCaW5Db250ZXh0IHtcbiAgaWYgKCFuYW1lIHx8IGJhc2VuYW1lKG5hbWUpICE9PSBuYW1lIHx8IG5hbWUgPT09IFwiLlwiIHx8IG5hbWUgPT09IFwiLi5cIikge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGludmFsaWQgYmluYXJ5IG5hbWU6ICR7bmFtZX1gKTtcbiAgfVxuICBpZiAoZGVzdGluYXRpb24pIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgY29uc3Qgcm9vdCA9IGpvaW4oaG9tZURpciwgYC4ke25hbWV9YCk7XG4gIGNvbnN0IGJpbkRpciA9IGpvaW4ocm9vdCwgXCJiaW5cIik7XG4gIHJldHVybiB7IHJvb3QsIGJpbkRpciwgcGF0aDogam9pbihiaW5EaXIsIG5hbWUpIH07XG59XG5cbmZ1bmN0aW9uIHBhY2thZ2VQYXRoKHJvb3Q6IHN0cmluZywgcGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKCFwYXRoIHx8IGlzQWJzb2x1dGUocGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIGJpbmFyeSBwYWNrYWdlIHBhdGg6ICR7cGF0aH1gKTtcbiAgfVxuICBjb25zdCBwYWNrYWdlUm9vdCA9IHJlc29sdmUocm9vdCk7XG4gIGNvbnN0IHJlc29sdmVkID0gcmVzb2x2ZShwYWNrYWdlUm9vdCwgcGF0aCk7XG4gIGlmIChyZXNvbHZlZCA9PT0gcGFja2FnZVJvb3QgfHwgIXJlc29sdmVkLnN0YXJ0c1dpdGgoYCR7cGFja2FnZVJvb3R9JHtzZXB9YCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBiaW5hcnkgcGFja2FnZSBwYXRoIGVzY2FwZXMgaXRzIHJvb3Q6ICR7cGF0aH1gKTtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWQ7XG59XG5cbmZ1bmN0aW9uIHBhY2thZ2VEZXN0aW5hdGlvbihkZXN0aW5hdGlvbjogQmluQ29udGV4dCwgb3B0aW9uczogQmluT3B0aW9ucyk6IHZvaWQge1xuICBpZiAoIW9wdGlvbnMucGFja2FnZSkgcmV0dXJuO1xuICBjb25zdCBlbnRyeXBvaW50ID0gcGFja2FnZVBhdGgoZGVzdGluYXRpb24ucm9vdCwgb3B0aW9ucy5wYWNrYWdlLmVudHJ5cG9pbnQpO1xuICBpZiAocmVzb2x2ZShkZXN0aW5hdGlvbi5wYXRoKSAhPT0gZW50cnlwb2ludCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJiaW5hcnkgcGFja2FnZSBkZXN0aW5hdGlvbiBwYXRoIG11c3QgbWF0Y2ggaXRzIGVudHJ5cG9pbnRcIik7XG4gIH1cbiAgZm9yIChjb25zdCBwYXRoIG9mIG9wdGlvbnMucGFja2FnZS5yZXF1aXJlZFBhdGhzID8/IFtdKSB7XG4gICAgcGFja2FnZVBhdGgoZGVzdGluYXRpb24ucm9vdCwgcGF0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGlzcGxheVVybChyYXc6IHN0cmluZyk6IHN0cmluZyB7XG4gIHRyeSB7XG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChyYXcpO1xuICAgIGlmICh1cmwucHJvdG9jb2wgPT09IFwiZGF0YTpcIikgcmV0dXJuIFwiZGF0YTpcIjtcbiAgICB1cmwudXNlcm5hbWUgPSBcIlwiO1xuICAgIHVybC5wYXNzd29yZCA9IFwiXCI7XG4gICAgdXJsLnNlYXJjaCA9IFwiXCI7XG4gICAgdXJsLmhhc2ggPSBcIlwiO1xuICAgIHJldHVybiB1cmwudG9TdHJpbmcoKTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHJhdztcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhY2Nlc3NDb250ZXh0KHBhdGg6IHN0cmluZyk6IFByb21pc2U8QmluQWNjZXNzQ29udGV4dD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGVudHJ5ID0gYXdhaXQgc3RhdChwYXRoKTtcbiAgICBjb25zdCBmaWxlID0gZW50cnkuaXNGaWxlKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGZpbGUsXG4gICAgICBleGVjdXRhYmxlOiBmaWxlICYmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIgfHwgKGVudHJ5Lm1vZGUgJiAwbzExMSkgIT09IDApLFxuICAgIH07XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB7IGZpbGU6IGZhbHNlLCBleGVjdXRhYmxlOiBmYWxzZSB9O1xuICB9XG59XG5cbmZ1bmN0aW9uIGRldGVjdGVkVmVyc2lvbnMob3V0cHV0OiBzdHJpbmcpOiBQYXJzZWRWZXJzaW9uW10ge1xuICBjb25zdCB2ZXJzaW9uczogUGFyc2VkVmVyc2lvbltdID0gW107XG4gIGNvbnN0IHBhdHRlcm4gPSAvXFxidj8oXFxkKyg/OlxcLlxcZCspezAsMn0pKD86Wy0rLl9dP1thLXpdWzAtOWEtei4rXy1dKik/L2dpO1xuICBmb3IgKGNvbnN0IG1hdGNoIG9mIG91dHB1dC5tYXRjaEFsbChwYXR0ZXJuKSkge1xuICAgIGNvbnN0IHJhdyA9IG1hdGNoWzBdLnJlcGxhY2UoL152L2ksIFwiXCIpO1xuICAgIGNvbnN0IHBhcnRzID0gbWF0Y2hbMV0/LnNwbGl0KFwiLlwiKS5tYXAoTnVtYmVyKTtcbiAgICBpZiAocGFydHM/LmV2ZXJ5KE51bWJlci5pc0Zpbml0ZSkpIHZlcnNpb25zLnB1c2goeyByYXcsIHBhcnRzIH0pO1xuICB9XG4gIHJldHVybiB2ZXJzaW9ucy5zb3J0KChhLCBiKSA9PiB7XG4gICAgaWYgKGEucGFydHMubGVuZ3RoICE9PSBiLnBhcnRzLmxlbmd0aCkgcmV0dXJuIGIucGFydHMubGVuZ3RoIC0gYS5wYXJ0cy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGEucGFydHMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBvcmRlciA9IChiLnBhcnRzW2luZGV4XSA/PyAwKSAtIChhLnBhcnRzW2luZGV4XSA/PyAwKTtcbiAgICAgIGlmIChvcmRlciAhPT0gMCkgcmV0dXJuIG9yZGVyO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFyc2UgdGhlIGRlZXBlc3QsIGhpZ2hlc3QgdmVyc2lvbiBmcm9tIHN0ZG91dCwgZmFsbGluZyBiYWNrIHRvIHN0ZGVyciBvbmx5XG4gKiB3aGVuIHN0ZG91dCBjb250YWlucyBubyB2ZXJzaW9uLiBTdXBwb3J0cyBvbmUgdG8gdGhyZWUgbnVtZXJpYyBjb21wb25lbnRzXG4gKiBhbmQgY29tbW9uIHN1ZmZpeGVzIHN1Y2ggYXMgYHJjMWAsIGAucG9zdDFgLCBhbmQgYC1kZXYuMmAuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVZlcnNpb24oeyBzdGRvdXQsIHN0ZGVyciB9OiBCaW5WZXJzaW9uT3V0cHV0KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGRldGVjdGVkVmVyc2lvbnMoc3Rkb3V0KS5hdCgwKT8ucmF3ID8/IGRldGVjdGVkVmVyc2lvbnMoc3RkZXJyKS5hdCgwKT8ucmF3O1xufVxuXG5mdW5jdGlvbiBtaW5pbXVtU2VtVmVyKHZlcnNpb246IHN0cmluZyk6IFNlbVZlciB8IHVuZGVmaW5lZCB7XG4gIGlmICghL15cXHMqdj9cXGQrKD86XFwuXFxkKyl7MCwyfVxccyokL2kudGVzdCh2ZXJzaW9uKSkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgcmV0dXJuIGNvZXJjZSh2ZXJzaW9uLCB7IGxvb3NlOiB0cnVlIH0pID8/IHVuZGVmaW5lZDtcbn1cblxuLyoqIENvbXBhcmUgYSBkZXRlY3RlZCB0b29sIHZlcnNpb24gYWdhaW5zdCBhIG9uZS10by10aHJlZS1jb21wb25lbnQgbWluaW11bS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1ZlcnNpb25BdExlYXN0KHZlcnNpb246IHN0cmluZywgbWluVmVyc2lvbjogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG1pbmltdW0gPSBtaW5pbXVtU2VtVmVyKG1pblZlcnNpb24pO1xuICBpZiAoIW1pbmltdW0pIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIG1pbmltdW0gYmluYXJ5IHZlcnNpb246ICR7bWluVmVyc2lvbn1gKTtcbiAgfVxuICBjb25zdCBhY3R1YWwgPSBjb2VyY2UodmVyc2lvbiwgeyBsb29zZTogdHJ1ZSB9KTtcbiAgaWYgKCFhY3R1YWwpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGd0ZShhY3R1YWwsIG1pbmltdW0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc1ZhbGlkQmluKHBhdGg6IHN0cmluZywgb3B0aW9uczogQmluT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBsb2dnZXIuZGVidWcoXCJjaGVja2luZyBiaW5hcnlcIiwge1xuICAgIHBhdGgsXG4gICAgbWluVmVyc2lvbjogb3B0aW9ucy5taW5WZXJzaW9uLFxuICAgIHZlcnNpb25Bcmd1bWVudDogb3B0aW9ucy52ZXJzaW9uQXJndW1lbnQgPz8gXCItLXZlcnNpb25cIixcbiAgfSk7XG4gIGNvbnN0IGFjY2VzcyA9IGF3YWl0IGFjY2Vzc0NvbnRleHQocGF0aCk7XG4gIGlmICghYWNjZXNzLmZpbGUgfHwgIWFjY2Vzcy5leGVjdXRhYmxlKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwiYmluYXJ5IGFjY2VzcyBjaGVjayBmYWlsZWRcIiwgeyBwYXRoLCAuLi5hY2Nlc3MgfSk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmIChvcHRpb25zLnNraXBWZXJzaW9uQ2hlY2spIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjaGVjayBza2lwcGVkXCIsIHsgcGF0aCB9KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBsZXQgc3Rkb3V0OiBzdHJpbmc7XG4gIGxldCBzdGRlcnI6IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBleGVjRmlsZUFzeW5jKHBhdGgsIFtvcHRpb25zLnZlcnNpb25Bcmd1bWVudCA/PyBcIi0tdmVyc2lvblwiXSwge1xuICAgICAgZW5jb2Rpbmc6IFwidXRmOFwiLFxuICAgIH0pO1xuICAgIHN0ZG91dCA9IHJlc3VsdC5zdGRvdXQ7XG4gICAgc3RkZXJyID0gcmVzdWx0LnN0ZGVycjtcbiAgfSBjYXRjaCAoY2F1c2UpIHtcbiAgICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjb21tYW5kIGZhaWxlZFwiLCB7XG4gICAgICBwYXRoLFxuICAgICAgZXJyb3I6IHRvRXJyb3IoY2F1c2UpLFxuICAgIH0pO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCB2ZXJzaW9uID0gKG9wdGlvbnMudmVyc2lvblBhcnNlciA/PyBwYXJzZVZlcnNpb24pKHtcbiAgICBzdGRvdXQsXG4gICAgc3RkZXJyLFxuICB9KTtcbiAgY29uc3QgdmFsaWQgPVxuICAgIHZlcnNpb24gIT09IHVuZGVmaW5lZCAmJlxuICAgIChvcHRpb25zLm1pblZlcnNpb24gPT09IHVuZGVmaW5lZCB8fCBpc1ZlcnNpb25BdExlYXN0KHZlcnNpb24sIG9wdGlvbnMubWluVmVyc2lvbikpO1xuICBsb2dnZXIuZGVidWcoXCJiaW5hcnkgdmVyc2lvbiBjaGVja2VkXCIsIHtcbiAgICBwYXRoLFxuICAgIHZlcnNpb24sXG4gICAgbWluVmVyc2lvbjogb3B0aW9ucy5taW5WZXJzaW9uLFxuICAgIHZhbGlkLFxuICB9KTtcbiAgcmV0dXJuIHZhbGlkO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYXRoRXhpc3RzKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGF3YWl0IHN0YXQocGF0aCk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBpc1ZhbGlkSW5zdGFsbChkZXN0aW5hdGlvbjogQmluQ29udGV4dCwgb3B0aW9uczogQmluT3B0aW9ucyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBpZiAoIShhd2FpdCBpc1ZhbGlkQmluKGRlc3RpbmF0aW9uLnBhdGgsIG9wdGlvbnMpKSkgcmV0dXJuIGZhbHNlO1xuICBpZiAoIW9wdGlvbnMucGFja2FnZSkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IHJlcXVpcmVkID0gW29wdGlvbnMucGFja2FnZS5lbnRyeXBvaW50LCAuLi4ob3B0aW9ucy5wYWNrYWdlLnJlcXVpcmVkUGF0aHMgPz8gW10pXTtcbiAgY29uc3QgYXZhaWxhYmxlID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgcmVxdWlyZWQubWFwKChwYXRoKSA9PiBwYXRoRXhpc3RzKHBhY2thZ2VQYXRoKGRlc3RpbmF0aW9uLnJvb3QsIHBhdGgpKSksXG4gICk7XG4gIHJldHVybiBhdmFpbGFibGUuZXZlcnkoQm9vbGVhbik7XG59XG5cbmZ1bmN0aW9uIGRvd25sb2FkTmFtZSh1cmw6IHN0cmluZywgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBjYW5kaWRhdGUgPSBiYXNlbmFtZShkZWNvZGVVUklDb21wb25lbnQobmV3IFVSTCh1cmwpLnBhdGhuYW1lKSk7XG4gICAgcmV0dXJuIGNhbmRpZGF0ZSAmJiBCdWZmZXIuYnl0ZUxlbmd0aChjYW5kaWRhdGUpIDw9IDIwMCA/IGNhbmRpZGF0ZSA6IG5hbWU7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVucGFjayhhcmNoaXZlOiBzdHJpbmcsIGRlc3RpbmF0aW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZmlsZW5hbWUgPSBhcmNoaXZlLnRvTG93ZXJDYXNlKCk7XG4gIGlmIChmaWxlbmFtZS5lbmRzV2l0aChcIi56aXBcIikpIHtcbiAgICBhd2FpdCBleHRyYWN0WmlwKGFyY2hpdmUsIHsgZGlyOiBkZXN0aW5hdGlvbiB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGZpbGVuYW1lLmVuZHNXaXRoKFwiLnRhclwiKSB8fCBmaWxlbmFtZS5lbmRzV2l0aChcIi50YXIuZ3pcIikgfHwgZmlsZW5hbWUuZW5kc1dpdGgoXCIudGd6XCIpKSB7XG4gICAgYXdhaXQgZXh0cmFjdFRhcih7IGZpbGU6IGFyY2hpdmUsIGN3ZDogZGVzdGluYXRpb24gfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgYmluYXJ5IGFyY2hpdmU6ICR7YmFzZW5hbWUoYXJjaGl2ZSl9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbGVzVW5kZXIocm9vdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihyb290LCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG4gIGNvbnN0IGZpbGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBwYXRoID0gam9pbihyb290LCBlbnRyeS5uYW1lKTtcbiAgICBpZiAoZW50cnkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgZmlsZXMucHVzaCguLi4oYXdhaXQgZmlsZXNVbmRlcihwYXRoKSkpO1xuICAgIH0gZWxzZSBpZiAoZW50cnkuaXNGaWxlKCkpIHtcbiAgICAgIGZpbGVzLnB1c2gocGF0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWxlcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0U2luZ2xlRmlsZShzb3VyY2U6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZmlsZXNVbmRlcihzb3VyY2UpO1xuICBjb25zdCBzZWxlY3RlZCA9IGZpbGVzLmF0KDApO1xuICBpZiAoZmlsZXMubGVuZ3RoICE9PSAxIHx8ICFzZWxlY3RlZCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGFyY2hpdmUgbXVzdCBjb250YWluIG9uZSBmaWxlLCBmb3VuZCAke2ZpbGVzLmxlbmd0aH1gKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0ZWQ7XG59XG5cbmZ1bmN0aW9uIGZpbGVVcmxQYXRoKHVybDogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKHVybCk7XG4gICAgaWYgKHBhcnNlZC5wcm90b2NvbCAhPT0gXCJmaWxlOlwiKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBmaWxlVVJMVG9QYXRoKHBhcnNlZCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFNlbGVjdGVkQmluIHtcbiAgcGF0aDogc3RyaW5nO1xuICBwYWNrYWdlUm9vdD86IHN0cmluZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gc2VsZWN0ZWRCaW4oXG4gIGRlc3RpbmF0aW9uOiBCaW5Db250ZXh0LFxuICBzb3VyY2U6IEJpblNvdXJjZSxcbiAgdGVtcDogc3RyaW5nLFxuICBvcHRpb25zOiBCaW5PcHRpb25zLFxuKTogUHJvbWlzZTxTZWxlY3RlZEJpbj4ge1xuICBjb25zdCB7IHVybCB9ID0gc291cmNlO1xuICBjb25zdCBsb2NhbFBhdGggPSBmaWxlVXJsUGF0aCh1cmwpO1xuICBsZXQgZG93bmxvYWRQYXRoOiBzdHJpbmc7XG4gIGlmIChsb2NhbFBhdGgpIHtcbiAgICBjb25zdCBhY2Nlc3MgPSBhd2FpdCBhY2Nlc3NDb250ZXh0KGxvY2FsUGF0aCk7XG4gICAgaWYgKCFhY2Nlc3MuZmlsZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBiaW5hcnkgZmlsZSBVUkwgZG9lcyBub3QgZXhpc3Q6ICR7ZGlzcGxheVVybCh1cmwpfWApO1xuICAgIH1cbiAgICBsb2dnZXIuZGVidWcoXCJ1c2luZyBsb2NhbCBiaW5hcnlcIiwgeyBmcm9tOiBkaXNwbGF5VXJsKHVybCksIHBhdGg6IGxvY2FsUGF0aCB9KTtcbiAgICBkb3dubG9hZFBhdGggPSBsb2NhbFBhdGg7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbmFtZSA9IGRvd25sb2FkTmFtZSh1cmwsIGJhc2VuYW1lKGRlc3RpbmF0aW9uLnBhdGgpKTtcbiAgICBkb3dubG9hZFBhdGggPSBqb2luKHRlbXAsIG5hbWUpO1xuICAgIGNvbnN0IGRvd25sb2FkID0ge1xuICAgICAgZnJvbTogZGlzcGxheVVybCh1cmwpLFxuICAgICAgdG86IGRvd25sb2FkUGF0aCxcbiAgICB9O1xuICAgIGlmIChkb3dubG9hZC5mcm9tID09PSBcImRhdGE6XCIpIGxvZ2dlci5kZWJ1ZyhcImRvd25sb2FkaW5nIGJpbmFyeVwiLCBkb3dubG9hZCk7XG4gICAgZWxzZSBsb2dnZXIuaW5mbyhcImRvd25sb2FkaW5nIGJpbmFyeVwiLCBkb3dubG9hZCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgYmluYXJ5IGRvd25sb2FkIGZhaWxlZCAoJHtyZXNwb25zZS5zdGF0dXN9KWApO1xuICAgIH1cbiAgICBjb25zdCBkb3dubG9hZGVkID0gQnVmZmVyLmZyb20oYXdhaXQgcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XG4gICAgaWYgKHNvdXJjZS5zaGEyNTYpIHtcbiAgICAgIGlmICghL15bMC05YS1mXXs2NH0kL2kudGVzdChzb3VyY2Uuc2hhMjU2KSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiYmluYXJ5IGRvd25sb2FkIFNIQS0yNTYgZGlnZXN0IG11c3QgY29udGFpbiA2NCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXJzXCIsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBjb25zdCBhY3R1YWwgPSBjcmVhdGVIYXNoKFwic2hhMjU2XCIpLnVwZGF0ZShkb3dubG9hZGVkKS5kaWdlc3QoXCJoZXhcIik7XG4gICAgICBpZiAoYWN0dWFsLnRvTG93ZXJDYXNlKCkgIT09IHNvdXJjZS5zaGEyNTYudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGJpbmFyeSBkb3dubG9hZCBkaWdlc3QgbWlzbWF0Y2g6ICR7ZGlzcGxheVVybCh1cmwpfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBhd2FpdCB3cml0ZUZpbGUoZG93bmxvYWRQYXRoLCBkb3dubG9hZGVkLCB7IG1vZGU6IDBvNzU1IH0pO1xuICB9XG5cbiAgbGV0IHNlbGVjdGVkU291cmNlID0gZG93bmxvYWRQYXRoO1xuICBsZXQgdW5wYWNrZWQgPSBmYWxzZTtcbiAgaWYgKG9wdGlvbnMucGFja2FnZSB8fCAob3B0aW9ucy5hdXRvVW5wYWNrYWdlICYmICFsb2NhbFBhdGgpKSB7XG4gICAgc2VsZWN0ZWRTb3VyY2UgPSBqb2luKHRlbXAsIGB1bnBhY2tlZC0ke3JhbmRvbVVVSUQoKX1gKTtcbiAgICBhd2FpdCBta2RpcihzZWxlY3RlZFNvdXJjZSk7XG4gICAgbG9nZ2VyLmluZm8oXCJ1bnBhY2tpbmcgYmluYXJ5IGFyY2hpdmVcIiwge1xuICAgICAgYXJjaGl2ZTogZG93bmxvYWRQYXRoLFxuICAgICAgdG86IHNlbGVjdGVkU291cmNlLFxuICAgIH0pO1xuICAgIGF3YWl0IHVucGFjayhkb3dubG9hZFBhdGgsIHNlbGVjdGVkU291cmNlKTtcbiAgICB1bnBhY2tlZCA9IHRydWU7XG4gIH1cblxuICBpZiAob3B0aW9ucy5zZWxlY3Rvcikge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gYXdhaXQgb3B0aW9ucy5zZWxlY3Rvcih7XG4gICAgICBkZXN0aW5hdGlvbixcbiAgICAgIGRvd25sb2FkUGF0aCxcbiAgICAgIHNvdXJjZTogc2VsZWN0ZWRTb3VyY2UsXG4gICAgfSk7XG4gICAgbG9nZ2VyLmRlYnVnKFwic2VsZWN0ZWQgYmluYXJ5XCIsIHsgcGF0aDogc2VsZWN0ZWQgfSk7XG4gICAgcmV0dXJuIHsgcGF0aDogc2VsZWN0ZWQsIC4uLihvcHRpb25zLnBhY2thZ2UgPyB7IHBhY2thZ2VSb290OiBzZWxlY3RlZFNvdXJjZSB9IDoge30pIH07XG4gIH1cbiAgaWYgKG9wdGlvbnMucGFja2FnZSkge1xuICAgIGNvbnN0IHNlbGVjdGVkID0gcGFja2FnZVBhdGgoc2VsZWN0ZWRTb3VyY2UsIG9wdGlvbnMucGFja2FnZS5lbnRyeXBvaW50KTtcbiAgICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBiaW5hcnkgcGFja2FnZSBlbnRyeXBvaW50XCIsIHsgcGF0aDogc2VsZWN0ZWQgfSk7XG4gICAgcmV0dXJuIHsgcGF0aDogc2VsZWN0ZWQsIHBhY2thZ2VSb290OiBzZWxlY3RlZFNvdXJjZSB9O1xuICB9XG4gIGNvbnN0IHNlbGVjdGVkID0gdW5wYWNrZWQgPyBhd2FpdCBzZWxlY3RTaW5nbGVGaWxlKHNlbGVjdGVkU291cmNlKSA6IHNlbGVjdGVkU291cmNlO1xuICBsb2dnZXIuZGVidWcoXCJzZWxlY3RlZCBiaW5hcnlcIiwgeyBwYXRoOiBzZWxlY3RlZCB9KTtcbiAgcmV0dXJuIHsgcGF0aDogc2VsZWN0ZWQgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaW5zdGFsbFBhY2thZ2UoXG4gIHNvdXJjZTogc3RyaW5nLFxuICBkZXN0aW5hdGlvbjogQmluQ29udGV4dCxcbiAgb3B0aW9uczogQmluT3B0aW9ucyxcbik6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIW9wdGlvbnMucGFja2FnZSkgdGhyb3cgbmV3IEVycm9yKFwiYmluYXJ5IHBhY2thZ2Ugb3B0aW9ucyBhcmUgcmVxdWlyZWRcIik7XG4gIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUoZGVzdGluYXRpb24ucm9vdCk7XG4gIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShkZXN0aW5hdGlvbi5yb290KTtcbiAgY29uc3Qgc3RhZ2VkUm9vdCA9IGpvaW4ocGFyZW50LCBgLiR7bmFtZX0tc3RhZ2VkLSR7cmFuZG9tVVVJRCgpfWApO1xuICBjb25zdCBiYWNrdXBSb290ID0gam9pbihwYXJlbnQsIGAuJHtuYW1lfS1iYWNrdXAtJHtyYW5kb21VVUlEKCl9YCk7XG4gIGF3YWl0IG1rZGlyKHBhcmVudCwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gIGxvZ2dlci5pbmZvKFwic3RhZ2luZyBiaW5hcnkgcGFja2FnZVwiLCB7XG4gICAgZnJvbTogc291cmNlLFxuICAgIHRvOiBkZXN0aW5hdGlvbi5yb290LFxuICB9KTtcbiAgYXdhaXQgY3Aoc291cmNlLCBzdGFnZWRSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgY29uc3Qgc3RhZ2VkUGF0aCA9IHBhY2thZ2VQYXRoKHN0YWdlZFJvb3QsIG9wdGlvbnMucGFja2FnZS5lbnRyeXBvaW50KTtcbiAgYXdhaXQgY2htb2Qoc3RhZ2VkUGF0aCwgMG83NTUpO1xuICBjb25zdCBzdGFnZWQ6IEJpbkNvbnRleHQgPSB7XG4gICAgcm9vdDogc3RhZ2VkUm9vdCxcbiAgICBiaW5EaXI6IGRpcm5hbWUoc3RhZ2VkUGF0aCksXG4gICAgcGF0aDogc3RhZ2VkUGF0aCxcbiAgfTtcbiAgaWYgKCEoYXdhaXQgaXNWYWxpZEluc3RhbGwoc3RhZ2VkLCBvcHRpb25zKSkpIHtcbiAgICBhd2FpdCBybShzdGFnZWRSb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBzZWxlY3RlZCBiaW5hcnkgcGFja2FnZSBpcyBpbnZhbGlkOiAke3NvdXJjZX1gKTtcbiAgfVxuXG4gIGxldCBiYWNrZWRVcCA9IGZhbHNlO1xuICB0cnkge1xuICAgIGlmIChhd2FpdCBwYXRoRXhpc3RzKGRlc3RpbmF0aW9uLnJvb3QpKSB7XG4gICAgICBhd2FpdCByZW5hbWUoZGVzdGluYXRpb24ucm9vdCwgYmFja3VwUm9vdCk7XG4gICAgICBiYWNrZWRVcCA9IHRydWU7XG4gICAgfVxuICAgIGF3YWl0IHJlbmFtZShzdGFnZWRSb290LCBkZXN0aW5hdGlvbi5yb290KTtcbiAgICBpZiAoIShhd2FpdCBpc1ZhbGlkSW5zdGFsbChkZXN0aW5hdGlvbiwgb3B0aW9ucykpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYGluc3RhbGxlZCBiaW5hcnkgcGFja2FnZSBpcyBpbnZhbGlkIGFmdGVyIHJlbmFtZTogJHtkZXN0aW5hdGlvbi5yb290fWApO1xuICAgIH1cbiAgICBpZiAoYmFja2VkVXApIGF3YWl0IHJtKGJhY2t1cFJvb3QsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBhd2FpdCBybShkZXN0aW5hdGlvbi5yb290LCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgaWYgKGJhY2tlZFVwKSBhd2FpdCByZW5hbWUoYmFja3VwUm9vdCwgZGVzdGluYXRpb24ucm9vdCk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgcm0oc3RhZ2VkUm9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJuIGFuIGV4aXN0aW5nIGV4ZWN1dGFibGUgb3IgaW5zdGFsbCBpdCBhdG9taWNhbGx5IHVuZGVyXG4gKiBgJEhPTUUvLjxuYW1lPi9iaW4vPG5hbWU+YC4gTXVsdGktZmlsZSBwYWNrYWdlIG1vZGUgYXRvbWljYWxseSBwcmVzZXJ2ZXMgdGhlXG4gKiB1bnBhY2tlZCBwYWNrYWdlIGF0IGFuIGV4cGxpY2l0IGRlc3RpbmF0aW9uIHJvb3QuIEluc3RhbGxhdGlvbiB1c2VzIGFcbiAqIGNoZWNrLWxvY2stY2hlY2stbG9hZCBzZXF1ZW5jZSBzbyBjb25jdXJyZW50IGNhbGxlcnMgcmVzb2x2ZSBhbmQgZG93bmxvYWRcbiAqIG9ubHkgb25jZS4gQ2FuZGlkYXRlcyBhbmQgZmluYWwgZGVzdGluYXRpb25zIG11c3QgcGFzcyB0aGUgc2FtZSBjaGVja3MuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmUoXG4gIG5hbWU6IHN0cmluZyxcbiAgdXJsOiBCaW5VcmwsXG4gIG9wdGlvbnM6IEJpbk9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8QmluQ29udGV4dD4ge1xuICBpZiAob3B0aW9ucy5taW5WZXJzaW9uICYmICFtaW5pbXVtU2VtVmVyKG9wdGlvbnMubWluVmVyc2lvbikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBpbnZhbGlkIG1pbmltdW0gYmluYXJ5IHZlcnNpb246ICR7b3B0aW9ucy5taW5WZXJzaW9ufWApO1xuICB9XG4gIGNvbnN0IGRlc3RpbmF0aW9uID0gY29udGV4dChuYW1lLCBvcHRpb25zLmhvbWVEaXIgPz8gaG9tZWRpcigpLCBvcHRpb25zLmRlc3RpbmF0aW9uKTtcbiAgcGFja2FnZURlc3RpbmF0aW9uKGRlc3RpbmF0aW9uLCBvcHRpb25zKTtcbiAgaWYgKCFvcHRpb25zLmZvcmNlICYmIChhd2FpdCBpc1ZhbGlkSW5zdGFsbChkZXN0aW5hdGlvbiwgb3B0aW9ucykpKSB7XG4gICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgaW5zdGFsbGVkIGJpbmFyeVwiLCB7IG5hbWUsIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGggfSk7XG4gICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICB9XG5cbiAgbG9nZ2VyLmRlYnVnKFwid2FpdGluZyBmb3IgYmluYXJ5IGluc3RhbGwgbG9ja1wiLCB7IG5hbWUsIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGggfSk7XG4gIHJldHVybiB3aXRoRmlsZUxvY2soW1wiYmluLmVuc3VyZVwiLCBkZXN0aW5hdGlvbi5wYXRoXSwgYXN5bmMgKCkgPT4ge1xuICAgIGlmICghb3B0aW9ucy5mb3JjZSAmJiAoYXdhaXQgaXNWYWxpZEluc3RhbGwoZGVzdGluYXRpb24sIG9wdGlvbnMpKSkge1xuICAgICAgbG9nZ2VyLmRlYnVnKFwidXNpbmcgYmluYXJ5IGluc3RhbGxlZCBieSBhbm90aGVyIGNhbGxlclwiLCB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIHBhdGg6IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBkZXN0aW5hdGlvbjtcbiAgICB9XG5cbiAgICBsb2dnZXIuZGVidWcoXCJpbnN0YWxsaW5nIGJpbmFyeVwiLCB7XG4gICAgICBuYW1lLFxuICAgICAgdG86IGRlc3RpbmF0aW9uLnBhdGgsXG4gICAgICBtaW5WZXJzaW9uOiBvcHRpb25zLm1pblZlcnNpb24sXG4gICAgfSk7XG4gICAgY29uc3QgdGVtcCA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgYCR7bmFtZX0tYCkpO1xuICAgIGxldCBzdGFnZWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzb2x2ZWQgPSB0eXBlb2YgdXJsID09PSBcImZ1bmN0aW9uXCIgPyBhd2FpdCB1cmwoeyB0ZW1wRGlyOiB0ZW1wIH0pIDogdXJsO1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZW9mIHJlc29sdmVkID09PSBcInN0cmluZ1wiID8geyB1cmw6IHJlc29sdmVkIH0gOiByZXNvbHZlZDtcbiAgICAgIGNvbnN0IGZyb20gPSBkaXNwbGF5VXJsKHNvdXJjZS51cmwpO1xuICAgICAgbG9nZ2VyLmRlYnVnKFwicmVzb2x2ZWQgYmluYXJ5IHNvdXJjZVwiLCB7IG5hbWUsIGZyb20gfSk7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGF3YWl0IHNlbGVjdGVkQmluKGRlc3RpbmF0aW9uLCBzb3VyY2UsIHRlbXAsIG9wdGlvbnMpO1xuICAgICAgYXdhaXQgY2htb2Qoc2VsZWN0ZWQucGF0aCwgMG83NTUpO1xuICAgICAgaWYgKCEoYXdhaXQgaXNWYWxpZEJpbihzZWxlY3RlZC5wYXRoLCBvcHRpb25zKSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBzZWxlY3RlZCBiaW5hcnkgaGFzIG5vIGFjY2VwdGFibGUgdmVyc2lvbjogJHtzZWxlY3RlZC5wYXRofWApO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMucGFja2FnZSkge1xuICAgICAgICBpZiAoIXNlbGVjdGVkLnBhY2thZ2VSb290KSB0aHJvdyBuZXcgRXJyb3IoXCJiaW5hcnkgcGFja2FnZSByb290IHdhcyBub3Qgc2VsZWN0ZWRcIik7XG4gICAgICAgIGF3YWl0IGluc3RhbGxQYWNrYWdlKHNlbGVjdGVkLnBhY2thZ2VSb290LCBkZXN0aW5hdGlvbiwgb3B0aW9ucyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhd2FpdCBta2RpcihkZXN0aW5hdGlvbi5iaW5EaXIsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgICAgICBzdGFnZWQgPSBqb2luKGRlc3RpbmF0aW9uLmJpbkRpciwgYC4ke25hbWV9LSR7cmFuZG9tVVVJRCgpfWApO1xuICAgICAgICBhd2FpdCBjb3B5RmlsZShzZWxlY3RlZC5wYXRoLCBzdGFnZWQpO1xuICAgICAgICBhd2FpdCBjaG1vZChzdGFnZWQsIDBvNzU1KTtcbiAgICAgICAgYXdhaXQgcmVuYW1lKHN0YWdlZCwgZGVzdGluYXRpb24ucGF0aCk7XG4gICAgICAgIHN0YWdlZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKCEoYXdhaXQgaXNWYWxpZEluc3RhbGwoZGVzdGluYXRpb24sIG9wdGlvbnMpKSkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgaW5zdGFsbGVkIGJpbmFyeSBpcyBpbnZhbGlkIGFmdGVyIHJlbmFtZTogJHtkZXN0aW5hdGlvbi5wYXRofWApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBsb2dnZXIuaW5mbyhcImluc3RhbGxlZCBiaW5hcnlcIiwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBmcm9tLFxuICAgICAgICB0bzogZGVzdGluYXRpb24ucGF0aCxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGRlc3RpbmF0aW9uO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoc3RhZ2VkKSBhd2FpdCBybShzdGFnZWQsIHsgZm9yY2U6IHRydWUgfSk7XG4gICAgICBhd2FpdCBybSh0ZW1wLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9KTtcbn1cbiJdfQ==
|
package/lib/src/brand-files.d.ts
CHANGED
|
@@ -1,104 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/** Validated brand context consumed by dbx-tools presentation packages. */
|
|
3
|
-
export type BrandContext = brandUtils.BrandContext;
|
|
4
|
-
/** Partial or untrusted input accepted by the brand context parser. */
|
|
5
|
-
export type BrandContextInput = brandUtils.BrandContextInput;
|
|
6
|
-
/** Zod schema for a complete validated brand context. */
|
|
7
|
-
export declare const BrandContextSchema: import("zod").ZodObject<{
|
|
8
|
-
schemaVersion: import("zod").ZodDefault<import("zod").ZodLiteral<"1">>;
|
|
9
|
-
name: import("zod").ZodDefault<import("zod").ZodString>;
|
|
10
|
-
shortName: import("zod").ZodDefault<import("zod").ZodString>;
|
|
11
|
-
tagline: import("zod").ZodOptional<import("zod").ZodString>;
|
|
12
|
-
description: import("zod").ZodDefault<import("zod").ZodString>;
|
|
13
|
-
assets: import("zod").ZodDefault<import("zod").ZodObject<{
|
|
14
|
-
icon: import("zod").ZodDefault<import("zod").ZodObject<{
|
|
15
|
-
light: import("zod").ZodString;
|
|
16
|
-
dark: import("zod").ZodOptional<import("zod").ZodString>;
|
|
17
|
-
}, import("zod/v4/core").$strict>>;
|
|
18
|
-
logo: import("zod").ZodDefault<import("zod").ZodObject<{
|
|
19
|
-
light: import("zod").ZodString;
|
|
20
|
-
dark: import("zod").ZodOptional<import("zod").ZodString>;
|
|
21
|
-
}, import("zod/v4/core").$strict>>;
|
|
22
|
-
favicon: import("zod").ZodDefault<import("zod").ZodString>;
|
|
23
|
-
}, import("zod/v4/core").$strict>>;
|
|
24
|
-
colors: import("zod").ZodPrefault<import("zod").ZodObject<{
|
|
25
|
-
primary: import("zod").ZodDefault<import("zod").ZodString>;
|
|
26
|
-
primaryHover: import("zod").ZodDefault<import("zod").ZodString>;
|
|
27
|
-
accent: import("zod").ZodDefault<import("zod").ZodString>;
|
|
28
|
-
foreground: import("zod").ZodDefault<import("zod").ZodString>;
|
|
29
|
-
background: import("zod").ZodDefault<import("zod").ZodString>;
|
|
30
|
-
surface: import("zod").ZodDefault<import("zod").ZodString>;
|
|
31
|
-
muted: import("zod").ZodDefault<import("zod").ZodString>;
|
|
32
|
-
border: import("zod").ZodDefault<import("zod").ZodString>;
|
|
33
|
-
}, import("zod/v4/core").$strict>>;
|
|
34
|
-
typography: import("zod").ZodPrefault<import("zod").ZodObject<{
|
|
35
|
-
sans: import("zod").ZodDefault<import("zod").ZodString>;
|
|
36
|
-
mono: import("zod").ZodDefault<import("zod").ZodString>;
|
|
37
|
-
}, import("zod/v4/core").$strict>>;
|
|
38
|
-
voice: import("zod").ZodPrefault<import("zod").ZodObject<{
|
|
39
|
-
audience: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
40
|
-
tone: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
41
|
-
principles: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
42
|
-
avoid: import("zod").ZodDefault<import("zod").ZodArray<import("zod").ZodString>>;
|
|
43
|
-
}, import("zod/v4/core").$strict>>;
|
|
44
|
-
links: import("zod").ZodPrefault<import("zod").ZodObject<{
|
|
45
|
-
website: import("zod").ZodDefault<import("zod").ZodString>;
|
|
46
|
-
repository: import("zod").ZodOptional<import("zod").ZodString>;
|
|
47
|
-
documentation: import("zod").ZodDefault<import("zod").ZodString>;
|
|
48
|
-
}, import("zod/v4/core").$strict>>;
|
|
49
|
-
extensions: import("zod").ZodDefault<import("zod").ZodRecord<import("zod").ZodString, import("zod").ZodUnknown>>;
|
|
50
|
-
}, import("zod/v4/core").$strict>;
|
|
51
|
-
/** Built-in dbx-tools brand used when no project brand file exists. */
|
|
52
|
-
export declare const defaultBrandContext: {
|
|
53
|
-
schemaVersion: "1";
|
|
54
|
-
name: string;
|
|
55
|
-
shortName: string;
|
|
56
|
-
description: string;
|
|
57
|
-
assets: {
|
|
58
|
-
icon: {
|
|
59
|
-
light: string;
|
|
60
|
-
dark?: string | undefined;
|
|
61
|
-
};
|
|
62
|
-
logo: {
|
|
63
|
-
light: string;
|
|
64
|
-
dark?: string | undefined;
|
|
65
|
-
};
|
|
66
|
-
favicon: string;
|
|
67
|
-
};
|
|
68
|
-
colors: {
|
|
69
|
-
primary: string;
|
|
70
|
-
primaryHover: string;
|
|
71
|
-
accent: string;
|
|
72
|
-
foreground: string;
|
|
73
|
-
background: string;
|
|
74
|
-
surface: string;
|
|
75
|
-
muted: string;
|
|
76
|
-
border: string;
|
|
77
|
-
};
|
|
78
|
-
typography: {
|
|
79
|
-
sans: string;
|
|
80
|
-
mono: string;
|
|
81
|
-
};
|
|
82
|
-
voice: {
|
|
83
|
-
audience: string[];
|
|
84
|
-
tone: string[];
|
|
85
|
-
principles: string[];
|
|
86
|
-
avoid: string[];
|
|
87
|
-
};
|
|
88
|
-
links: {
|
|
89
|
-
website: string;
|
|
90
|
-
documentation: string;
|
|
91
|
-
repository?: string | undefined;
|
|
92
|
-
};
|
|
93
|
-
extensions: Record<string, unknown>;
|
|
94
|
-
tagline?: string | undefined;
|
|
95
|
-
};
|
|
96
|
-
/** Validate and normalize brand context input. */
|
|
97
|
-
export declare const parseBrandContext: typeof brandUtils.parseBrandContext;
|
|
98
|
-
/** JSON Schema representation of {@link BrandContextSchema}. */
|
|
99
|
-
export declare const brandContextJsonSchema: typeof brandUtils.brandContextJsonSchema;
|
|
100
|
-
/** Format a brand context as instructions for a text or design model. */
|
|
101
|
-
export declare const brandContextPrompt: typeof brandUtils.brandContextPrompt;
|
|
1
|
+
import { type BrandContext } from "@dbx-tools/shared-core";
|
|
102
2
|
/** Find a conventional YAML or JSON brand file from known project roots. */
|
|
103
3
|
export declare function findBrandContextFile(cwd?: string): string | undefined;
|
|
104
4
|
/** Read and validate one `.yaml`, `.yml`, or `.json` brand context file. */
|
package/lib/src/brand-files.js
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { readFile } from "node:fs/promises";
|
|
12
12
|
import { dirname, extname, isAbsolute, resolve } from "node:path";
|
|
13
|
-
import {
|
|
13
|
+
import { defaultBrandContext, parseBrandContext } from "@dbx-tools/shared-core";
|
|
14
14
|
import { statSync } from "./file.js";
|
|
15
15
|
import { resolveProjectRoots } from "./project-utils.js";
|
|
16
16
|
const BRAND_CONTEXT_FILES = [
|
|
@@ -21,16 +21,6 @@ const BRAND_CONTEXT_FILES = [
|
|
|
21
21
|
"brand.yml",
|
|
22
22
|
"brand.json",
|
|
23
23
|
];
|
|
24
|
-
/** Zod schema for a complete validated brand context. */
|
|
25
|
-
export const BrandContextSchema = brandUtils.BrandContextSchema;
|
|
26
|
-
/** Built-in dbx-tools brand used when no project brand file exists. */
|
|
27
|
-
export const defaultBrandContext = brandUtils.defaultBrandContext;
|
|
28
|
-
/** Validate and normalize brand context input. */
|
|
29
|
-
export const parseBrandContext = brandUtils.parseBrandContext;
|
|
30
|
-
/** JSON Schema representation of {@link BrandContextSchema}. */
|
|
31
|
-
export const brandContextJsonSchema = brandUtils.brandContextJsonSchema;
|
|
32
|
-
/** Format a brand context as instructions for a text or design model. */
|
|
33
|
-
export const brandContextPrompt = brandUtils.brandContextPrompt;
|
|
34
24
|
/** Find a conventional YAML or JSON brand file from known project roots. */
|
|
35
25
|
export function findBrandContextFile(cwd = process.cwd()) {
|
|
36
26
|
for (const root of resolveProjectRoots(cwd)) {
|
|
@@ -57,7 +47,7 @@ export async function loadBrandContextFile(path) {
|
|
|
57
47
|
else {
|
|
58
48
|
throw new Error(`Unsupported brand context format: ${extension || "no extension"}`);
|
|
59
49
|
}
|
|
60
|
-
return
|
|
50
|
+
return parseBrandContext(input);
|
|
61
51
|
}
|
|
62
52
|
/**
|
|
63
53
|
* Discover and load a brand context. Missing files resolve to dbx tools defaults;
|
|
@@ -65,7 +55,7 @@ export async function loadBrandContextFile(path) {
|
|
|
65
55
|
*/
|
|
66
56
|
export async function loadBrandContext(cwd = process.cwd()) {
|
|
67
57
|
const path = findBrandContextFile(cwd);
|
|
68
|
-
return path ? loadBrandContextFile(path) :
|
|
58
|
+
return path ? loadBrandContextFile(path) : defaultBrandContext;
|
|
69
59
|
}
|
|
70
60
|
/** Resolve a relative asset reference against the brand file that declared it. */
|
|
71
61
|
export function resolveBrandAssetPath(brandFile, asset) {
|
|
@@ -77,4 +67,4 @@ export function resolveBrandAssetPath(brandFile, asset) {
|
|
|
77
67
|
}
|
|
78
68
|
return resolve(dirname(brandFile), asset);
|
|
79
69
|
}
|
|
80
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmQtZmlsZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnJhbmQtZmlsZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7OztHQVNHO0FBQ0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGlCQUFpQixFQUFxQixNQUFNLHdCQUF3QixDQUFDO0FBQ25HLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFekQsTUFBTSxtQkFBbUIsR0FBRztJQUMxQixxQkFBcUI7SUFDckIsb0JBQW9CO0lBQ3BCLHFCQUFxQjtJQUNyQixZQUFZO0lBQ1osV0FBVztJQUNYLFlBQVk7Q0FDSixDQUFDO0FBRVgsNEVBQTRFO0FBQzVFLE1BQU0sVUFBVSxvQkFBb0IsQ0FBQyxNQUFjLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDOUQsS0FBSyxNQUFNLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQzVDLEtBQUssTUFBTSxTQUFTLElBQUksbUJBQW1CLEVBQUUsQ0FBQztZQUM1QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU0sRUFBRTtnQkFBRSxPQUFPLElBQUksQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCw0RUFBNEU7QUFDNUUsTUFBTSxDQUFDLEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxJQUFZO0lBQ3JELE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztJQUM1QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUMsSUFBSSxLQUFjLENBQUM7SUFFbkIsSUFBSSxTQUFTLEtBQUssT0FBTyxFQUFFLENBQUM7UUFDMUIsS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFZLENBQUM7SUFDeEMsQ0FBQztTQUFNLElBQUksU0FBUyxLQUFLLE9BQU8sSUFBSSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDekQsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3ZDLEtBQUssR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFZLENBQUM7SUFDbkMsQ0FBQztTQUFNLENBQUM7UUFDTixNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxTQUFTLElBQUksY0FBYyxFQUFFLENBQUMsQ0FBQztJQUN0RixDQUFDO0lBRUQsT0FBTyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxNQUFjLE9BQU8sQ0FBQyxHQUFHLEVBQUU7SUFDaEUsTUFBTSxJQUFJLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdkMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQztBQUNqRSxDQUFDO0FBRUQsa0ZBQWtGO0FBQ2xGLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxTQUFpQixFQUFFLEtBQWE7SUFDcEUsSUFDRSxVQUFVLENBQUMsS0FBSyxDQUFDO1FBQ2pCLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDO1FBQ3JCLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDO1FBQ3RCLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFDakMsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUNELE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBOb2RlLW9ubHkgZGlzY292ZXJ5IGFuZCBmaWxlIGxvYWRpbmcgZm9yIHRoZSBzaGFyZWQgYnJhbmQgY29udGV4dC5cbiAqXG4gKiBUaGlzIG1vZHVsZSBvd25zIHJlcG9zaXRvcnktd2lkZSBicmFuZCBmaWxlIGRpc2NvdmVyeSwgWUFNTC9KU09OIGxvYWRpbmcsXG4gKiB2YWxpZGF0aW9uLCBkZWZhdWx0aW5nLCBhbmQgcmVsYXRpdmUgYXNzZXQgcmVzb2x1dGlvbi4gUmV1c2UgaXQgaW5zdGVhZCBvZlxuICogdGVhY2hpbmcgZWFjaCBDTEkgb3IgZG9jcyBnZW5lcmF0b3IgaG93IHRvIGxvY2F0ZSBhbmQgcGFyc2UgYnJhbmQgZmlsZXMuIFRoZVxuICogYnJvd3Nlci1zYWZlIGNvbnRyYWN0IGl0c2VsZiByZW1haW5zIG93bmVkIGJ5IGBAZGJ4LXRvb2xzL3NoYXJlZC1jb3JlYC5cbiAqXG4gKiBAbW9kdWxlXG4gKi9cbmltcG9ydCB7IHJlYWRGaWxlIH0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGV4dG5hbWUsIGlzQWJzb2x1dGUsIHJlc29sdmUgfSBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgeyBkZWZhdWx0QnJhbmRDb250ZXh0LCBwYXJzZUJyYW5kQ29udGV4dCwgdHlwZSBCcmFuZENvbnRleHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtY29yZVwiO1xuaW1wb3J0IHsgc3RhdFN5bmMgfSBmcm9tIFwiLi9maWxlLnRzXCI7XG5pbXBvcnQgeyByZXNvbHZlUHJvamVjdFJvb3RzIH0gZnJvbSBcIi4vcHJvamVjdC11dGlscy50c1wiO1xuXG5jb25zdCBCUkFORF9DT05URVhUX0ZJTEVTID0gW1xuICBcImJyYW5kaW5nL2JyYW5kLnlhbWxcIixcbiAgXCJicmFuZGluZy9icmFuZC55bWxcIixcbiAgXCJicmFuZGluZy9icmFuZC5qc29uXCIsXG4gIFwiYnJhbmQueWFtbFwiLFxuICBcImJyYW5kLnltbFwiLFxuICBcImJyYW5kLmpzb25cIixcbl0gYXMgY29uc3Q7XG5cbi8qKiBGaW5kIGEgY29udmVudGlvbmFsIFlBTUwgb3IgSlNPTiBicmFuZCBmaWxlIGZyb20ga25vd24gcHJvamVjdCByb290cy4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaW5kQnJhbmRDb250ZXh0RmlsZShjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCkpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBmb3IgKGNvbnN0IHJvb3Qgb2YgcmVzb2x2ZVByb2plY3RSb290cyhjd2QpKSB7XG4gICAgZm9yIChjb25zdCBjYW5kaWRhdGUgb2YgQlJBTkRfQ09OVEVYVF9GSUxFUykge1xuICAgICAgY29uc3QgcGF0aCA9IHJlc29sdmUocm9vdCwgY2FuZGlkYXRlKTtcbiAgICAgIGlmIChzdGF0U3luYyhwYXRoKT8uaXNGaWxlKCkpIHJldHVybiBwYXRoO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogUmVhZCBhbmQgdmFsaWRhdGUgb25lIGAueWFtbGAsIGAueW1sYCwgb3IgYC5qc29uYCBicmFuZCBjb250ZXh0IGZpbGUuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEJyYW5kQ29udGV4dEZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxCcmFuZENvbnRleHQ+IHtcbiAgY29uc3Qgc291cmNlID0gYXdhaXQgcmVhZEZpbGUocGF0aCwgXCJ1dGY4XCIpO1xuICBjb25zdCBleHRlbnNpb24gPSBleHRuYW1lKHBhdGgpLnRvTG93ZXJDYXNlKCk7XG4gIGxldCBpbnB1dDogdW5rbm93bjtcblxuICBpZiAoZXh0ZW5zaW9uID09PSBcIi5qc29uXCIpIHtcbiAgICBpbnB1dCA9IEpTT04ucGFyc2Uoc291cmNlKSBhcyB1bmtub3duO1xuICB9IGVsc2UgaWYgKGV4dGVuc2lvbiA9PT0gXCIueWFtbFwiIHx8IGV4dGVuc2lvbiA9PT0gXCIueW1sXCIpIHtcbiAgICBjb25zdCB7IHBhcnNlIH0gPSBhd2FpdCBpbXBvcnQoXCJ5YW1sXCIpO1xuICAgIGlucHV0ID0gcGFyc2Uoc291cmNlKSBhcyB1bmtub3duO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgYnJhbmQgY29udGV4dCBmb3JtYXQ6ICR7ZXh0ZW5zaW9uIHx8IFwibm8gZXh0ZW5zaW9uXCJ9YCk7XG4gIH1cblxuICByZXR1cm4gcGFyc2VCcmFuZENvbnRleHQoaW5wdXQpO1xufVxuXG4vKipcbiAqIERpc2NvdmVyIGFuZCBsb2FkIGEgYnJhbmQgY29udGV4dC4gTWlzc2luZyBmaWxlcyByZXNvbHZlIHRvIGRieCB0b29scyBkZWZhdWx0cztcbiAqIG1hbGZvcm1lZCBmaWxlcyBmYWlsIHdpdGggdGhlaXIgcGFyc2VyIG9yIFpvZCB2YWxpZGF0aW9uIGVycm9yLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEJyYW5kQ29udGV4dChjd2Q6IHN0cmluZyA9IHByb2Nlc3MuY3dkKCkpOiBQcm9taXNlPEJyYW5kQ29udGV4dD4ge1xuICBjb25zdCBwYXRoID0gZmluZEJyYW5kQ29udGV4dEZpbGUoY3dkKTtcbiAgcmV0dXJuIHBhdGggPyBsb2FkQnJhbmRDb250ZXh0RmlsZShwYXRoKSA6IGRlZmF1bHRCcmFuZENvbnRleHQ7XG59XG5cbi8qKiBSZXNvbHZlIGEgcmVsYXRpdmUgYXNzZXQgcmVmZXJlbmNlIGFnYWluc3QgdGhlIGJyYW5kIGZpbGUgdGhhdCBkZWNsYXJlZCBpdC4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnJhbmRBc3NldFBhdGgoYnJhbmRGaWxlOiBzdHJpbmcsIGFzc2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoXG4gICAgaXNBYnNvbHV0ZShhc3NldCkgfHxcbiAgICBhc3NldC5zdGFydHNXaXRoKFwiQFwiKSB8fFxuICAgIGFzc2V0LnN0YXJ0c1dpdGgoXCIvL1wiKSB8fFxuICAgIC9eW2Etel1bYS16XFxkKy4tXSo6L2kudGVzdChhc3NldClcbiAgKSB7XG4gICAgcmV0dXJuIGFzc2V0O1xuICB9XG4gIHJldHVybiByZXNvbHZlKGRpcm5hbWUoYnJhbmRGaWxlKSwgYXNzZXQpO1xufVxuIl19
|