wxt 0.8.4 → 0.8.6
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 +3 -2
- package/dist/browser.js +3 -4
- package/dist/chunk-FNTE2L27.js +7 -0
- package/dist/chunk-VFZ5667B.js +2410 -0
- package/dist/chunk-YUG22S6W.js +38 -0
- package/dist/cli.cjs +3941 -3775
- package/dist/cli.d.cts +2 -0
- package/dist/client.d.ts +5 -171
- package/dist/client.js +128 -131
- package/dist/execa-WKZHVHC5.js +2043 -0
- package/dist/external-9107db91.d.ts +176 -0
- package/dist/external-cb0967d6.d.ts +572 -0
- package/dist/index.cjs +2727 -2355
- package/dist/index.d.cts +36 -583
- package/dist/index.d.ts +36 -583
- package/dist/index.js +330 -4484
- package/dist/sandbox.d.ts +2 -23
- package/dist/sandbox.js +1 -2
- package/dist/testing.cjs +161 -35
- package/dist/testing.d.cts +7 -273
- package/dist/testing.d.ts +7 -273
- package/dist/testing.js +12 -676
- package/dist/{virtual-modules → virtual}/background-entrypoint.js +6 -7
- package/dist/{virtual-modules → virtual}/content-script-entrypoint.js +4 -5
- package/dist/virtual/mock-browser.js +152 -0
- package/dist/{virtual-modules → virtual}/reload-html.js +2 -3
- package/dist/{virtual-modules → virtual}/unlisted-script-entrypoint.js +2 -3
- package/package.json +6 -5
- package/dist/index.cjs.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/virtual-modules/background-entrypoint.js.map +0 -1
- package/dist/virtual-modules/content-script-entrypoint.js.map +0 -1
- package/dist/virtual-modules/fake-browser.cjs +0 -31
- package/dist/virtual-modules/fake-browser.js +0 -8
- package/dist/virtual-modules/reload-html.js.map +0 -1
- package/dist/virtual-modules/unlisted-script-entrypoint.js.map +0 -1
package/dist/sandbox.d.ts
CHANGED
|
@@ -1,26 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Main function executed when the unlisted script is ran.
|
|
5
|
-
*/
|
|
6
|
-
main(): void | Promise<void>;
|
|
7
|
-
}
|
|
8
|
-
interface ExcludableEntrypoint {
|
|
9
|
-
/**
|
|
10
|
-
* List of target browsers to include this entrypoint in. Defaults to being included in all
|
|
11
|
-
* builds. Cannot be used with `exclude`. You must choose one of the two options.
|
|
12
|
-
*
|
|
13
|
-
* @default undefined
|
|
14
|
-
*/
|
|
15
|
-
include?: TargetBrowser[];
|
|
16
|
-
/**
|
|
17
|
-
* List of target browsers to exclude this entrypoint from. Cannot be used with `include`. You
|
|
18
|
-
* must choose one of the two options.
|
|
19
|
-
*
|
|
20
|
-
* @default undefined
|
|
21
|
-
*/
|
|
22
|
-
exclude?: TargetBrowser[];
|
|
23
|
-
}
|
|
1
|
+
import { U as UnlistedScriptDefinition } from './external-9107db91.js';
|
|
2
|
+
import 'webextension-polyfill';
|
|
24
3
|
|
|
25
4
|
declare function defineUnlistedScript(main: () => void): UnlistedScriptDefinition;
|
|
26
5
|
declare function defineUnlistedScript(definition: UnlistedScriptDefinition): UnlistedScriptDefinition;
|
package/dist/sandbox.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// src/
|
|
1
|
+
// src/sandbox/define-unlisted-script.ts
|
|
2
2
|
function defineUnlistedScript(arg) {
|
|
3
3
|
if (typeof arg === "function")
|
|
4
4
|
return { main: arg };
|
|
@@ -7,4 +7,3 @@ function defineUnlistedScript(arg) {
|
|
|
7
7
|
export {
|
|
8
8
|
defineUnlistedScript
|
|
9
9
|
};
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2NsaWVudC9zYW5kYm94L2RlZmluZVVubGlzdGVkU2NyaXB0LnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBVbmxpc3RlZFNjcmlwdERlZmluaXRpb24gfSBmcm9tICcuLi8uLi9jb3JlL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVubGlzdGVkU2NyaXB0KFxuICBtYWluOiAoKSA9PiB2b2lkLFxuKTogVW5saXN0ZWRTY3JpcHREZWZpbml0aW9uO1xuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZVVubGlzdGVkU2NyaXB0KFxuICBkZWZpbml0aW9uOiBVbmxpc3RlZFNjcmlwdERlZmluaXRpb24sXG4pOiBVbmxpc3RlZFNjcmlwdERlZmluaXRpb247XG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lVW5saXN0ZWRTY3JpcHQoXG4gIGFyZzogKCgpID0+IHZvaWQpIHwgVW5saXN0ZWRTY3JpcHREZWZpbml0aW9uLFxuKTogVW5saXN0ZWRTY3JpcHREZWZpbml0aW9uIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicpIHJldHVybiB7IG1haW46IGFyZyB9O1xuICByZXR1cm4gYXJnO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQVFPLFNBQVMscUJBQ2QsS0FDMEI7QUFDMUIsTUFBSSxPQUFPLFFBQVE7QUFBWSxXQUFPLEVBQUUsTUFBTSxJQUFJO0FBQ2xELFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFtdCn0K
|
package/dist/testing.cjs
CHANGED
|
@@ -44,8 +44,8 @@ var import_node_path2 = __toESM(require("path"), 1);
|
|
|
44
44
|
// src/core/utils/paths.ts
|
|
45
45
|
var import_node_path = __toESM(require("path"), 1);
|
|
46
46
|
var vite = __toESM(require("vite"), 1);
|
|
47
|
-
function normalizePath2(
|
|
48
|
-
return vite.normalizePath(
|
|
47
|
+
function normalizePath2(path7) {
|
|
48
|
+
return vite.normalizePath(path7);
|
|
49
49
|
}
|
|
50
50
|
var CSS_EXTENSIONS = ["css", "scss", "sass", "less", "styl", "stylus"];
|
|
51
51
|
var CSS_EXTENSIONS_PATTERN = `+(${CSS_EXTENSIONS.join("|")})`;
|
|
@@ -65,7 +65,7 @@ function devHtmlPrerender(config) {
|
|
|
65
65
|
const htmlReloadId = "@wxt/reload-html";
|
|
66
66
|
const resolvedHtmlReloadId = (0, import_path.resolve)(
|
|
67
67
|
config.root,
|
|
68
|
-
"node_modules/wxt/dist/virtual
|
|
68
|
+
"node_modules/wxt/dist/virtual/reload-html.js"
|
|
69
69
|
);
|
|
70
70
|
const virtualReactRefreshId = "@wxt/virtual-react-refresh";
|
|
71
71
|
const resolvedVirtualReactRefreshId = "\0" + virtualReactRefreshId;
|
|
@@ -198,7 +198,7 @@ function devServerGlobals(internalConfig) {
|
|
|
198
198
|
// src/core/utils/network.ts
|
|
199
199
|
var import_node_dns = __toESM(require("dns"), 1);
|
|
200
200
|
|
|
201
|
-
// src/core/utils/
|
|
201
|
+
// src/core/utils/time.ts
|
|
202
202
|
function withTimeout(promise, duration) {
|
|
203
203
|
return new Promise((res, rej) => {
|
|
204
204
|
const timeout = setTimeout(() => {
|
|
@@ -271,7 +271,7 @@ var import_fs_extra = __toESM(require("fs-extra"), 1);
|
|
|
271
271
|
// src/core/vite-plugins/unimport.ts
|
|
272
272
|
var import_unimport = require("unimport");
|
|
273
273
|
|
|
274
|
-
// src/core/utils/
|
|
274
|
+
// src/core/utils/unimport.ts
|
|
275
275
|
var import_vite = require("vite");
|
|
276
276
|
function getUnimportOptions(config) {
|
|
277
277
|
if (config.imports === false)
|
|
@@ -346,7 +346,7 @@ function virtualEntrypoint(type, config) {
|
|
|
346
346
|
const template = await import_fs_extra2.default.readFile(
|
|
347
347
|
(0, import_path3.resolve)(
|
|
348
348
|
config.root,
|
|
349
|
-
`node_modules/wxt/dist/virtual
|
|
349
|
+
`node_modules/wxt/dist/virtual/${type}-entrypoint.js`
|
|
350
350
|
),
|
|
351
351
|
"utf-8"
|
|
352
352
|
);
|
|
@@ -481,7 +481,7 @@ function webextensionPolyfillAlias(config) {
|
|
|
481
481
|
alias: {
|
|
482
482
|
"webextension-polyfill": import_node_path4.default.resolve(
|
|
483
483
|
config.root,
|
|
484
|
-
"node_modules/wxt/dist/virtual
|
|
484
|
+
"node_modules/wxt/dist/virtual/mock-browser"
|
|
485
485
|
)
|
|
486
486
|
}
|
|
487
487
|
}
|
|
@@ -490,17 +490,32 @@ function webextensionPolyfillAlias(config) {
|
|
|
490
490
|
};
|
|
491
491
|
}
|
|
492
492
|
|
|
493
|
-
// src/core/
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
493
|
+
// src/core/vite-plugins/webextensionPolyfillInlineDeps.ts
|
|
494
|
+
function webextensionPolyfillInlineDeps() {
|
|
495
|
+
return {
|
|
496
|
+
name: "wxt:testing-inline-deps",
|
|
497
|
+
config() {
|
|
498
|
+
const wxtModules = ["wxt/browser", "wxt/client"];
|
|
499
|
+
return {
|
|
500
|
+
test: {
|
|
501
|
+
server: {
|
|
502
|
+
deps: {
|
|
503
|
+
inline: [...wxtModules]
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
};
|
|
508
|
+
}
|
|
509
|
+
};
|
|
510
|
+
}
|
|
497
511
|
|
|
498
|
-
// src/core/utils/
|
|
499
|
-
var
|
|
500
|
-
var import_path4 = require("path");
|
|
512
|
+
// src/core/utils/building/build-entrypoints.ts
|
|
513
|
+
var vite2 = __toESM(require("vite"), 1);
|
|
501
514
|
|
|
502
515
|
// src/core/utils/fs.ts
|
|
503
516
|
var import_fs_extra3 = __toESM(require("fs-extra"), 1);
|
|
517
|
+
var import_fast_glob = __toESM(require("fast-glob"), 1);
|
|
518
|
+
var import_node_path5 = __toESM(require("path"), 1);
|
|
504
519
|
async function writeFileIfDifferent(file, newContents) {
|
|
505
520
|
const existingContents = await import_fs_extra3.default.readFile(file, "utf-8").catch(() => void 0);
|
|
506
521
|
if (existingContents !== newContents) {
|
|
@@ -508,19 +523,83 @@ async function writeFileIfDifferent(file, newContents) {
|
|
|
508
523
|
}
|
|
509
524
|
}
|
|
510
525
|
|
|
511
|
-
// src/core/utils/
|
|
526
|
+
// src/core/utils/building/build-entrypoints.ts
|
|
527
|
+
var import_fs_extra4 = __toESM(require("fs-extra"), 1);
|
|
528
|
+
var import_picocolors = __toESM(require("picocolors"), 1);
|
|
529
|
+
|
|
530
|
+
// src/core/utils/building/find-entrypoints.ts
|
|
531
|
+
var import_fs_extra5 = __toESM(require("fs-extra"), 1);
|
|
532
|
+
var import_minimatch = require("minimatch");
|
|
533
|
+
var import_linkedom2 = require("linkedom");
|
|
534
|
+
var import_json5 = __toESM(require("json5"), 1);
|
|
535
|
+
var import_fast_glob2 = __toESM(require("fast-glob"), 1);
|
|
536
|
+
var PATH_GLOB_TO_TYPE_MAP = {
|
|
537
|
+
"sandbox.html": "sandbox",
|
|
538
|
+
"sandbox/index.html": "sandbox",
|
|
539
|
+
"*.sandbox.html": "sandbox",
|
|
540
|
+
"*.sandbox/index.html": "sandbox",
|
|
541
|
+
"bookmarks.html": "bookmarks",
|
|
542
|
+
"bookmarks/index.html": "bookmarks",
|
|
543
|
+
"history.html": "history",
|
|
544
|
+
"history/index.html": "history",
|
|
545
|
+
"newtab.html": "newtab",
|
|
546
|
+
"newtab/index.html": "newtab",
|
|
547
|
+
"sidepanel.html": "sidepanel",
|
|
548
|
+
"sidepanel/index.html": "sidepanel",
|
|
549
|
+
"*.sidepanel.html": "sidepanel",
|
|
550
|
+
"*.sidepanel/index.html": "sidepanel",
|
|
551
|
+
"devtools.html": "devtools",
|
|
552
|
+
"devtools/index.html": "devtools",
|
|
553
|
+
"background.[jt]s": "background",
|
|
554
|
+
"background/index.[jt]s": "background",
|
|
555
|
+
[VIRTUAL_NOOP_BACKGROUND_MODULE_ID]: "background",
|
|
556
|
+
"content.[jt]s?(x)": "content-script",
|
|
557
|
+
"content/index.[jt]s?(x)": "content-script",
|
|
558
|
+
"*.content.[jt]s?(x)": "content-script",
|
|
559
|
+
"*.content/index.[jt]s?(x)": "content-script",
|
|
560
|
+
[`content.${CSS_EXTENSIONS_PATTERN}`]: "content-script-style",
|
|
561
|
+
[`*.content.${CSS_EXTENSIONS_PATTERN}`]: "content-script-style",
|
|
562
|
+
[`content/index.${CSS_EXTENSIONS_PATTERN}`]: "content-script-style",
|
|
563
|
+
[`*.content/index.${CSS_EXTENSIONS_PATTERN}`]: "content-script-style",
|
|
564
|
+
"popup.html": "popup",
|
|
565
|
+
"popup/index.html": "popup",
|
|
566
|
+
"options.html": "options",
|
|
567
|
+
"options/index.html": "options",
|
|
568
|
+
"*.html": "unlisted-page",
|
|
569
|
+
"*/index.html": "unlisted-page",
|
|
570
|
+
"*.[jt]s": "unlisted-script",
|
|
571
|
+
"*/index.ts": "unlisted-script",
|
|
572
|
+
[`*.${CSS_EXTENSIONS_PATTERN}`]: "unlisted-style",
|
|
573
|
+
[`*/index.${CSS_EXTENSIONS_PATTERN}`]: "unlisted-style",
|
|
574
|
+
// Don't warn about any files in subdirectories, like CSS or JS entrypoints for HTML files or tests
|
|
575
|
+
"*/**": "ignored"
|
|
576
|
+
};
|
|
577
|
+
|
|
578
|
+
// src/core/utils/building/generate-wxt-dir.ts
|
|
579
|
+
var import_unimport3 = require("unimport");
|
|
580
|
+
var import_fs_extra6 = __toESM(require("fs-extra"), 1);
|
|
581
|
+
var import_node_path6 = __toESM(require("path"), 1);
|
|
582
|
+
|
|
583
|
+
// src/core/utils/building/get-internal-config.ts
|
|
584
|
+
var import_c12 = require("c12");
|
|
585
|
+
var import_node_path7 = __toESM(require("path"), 1);
|
|
586
|
+
var vite3 = __toESM(require("vite"), 1);
|
|
587
|
+
|
|
588
|
+
// src/core/utils/cache.ts
|
|
589
|
+
var import_fs_extra7 = __toESM(require("fs-extra"), 1);
|
|
590
|
+
var import_path4 = require("path");
|
|
512
591
|
function createFsCache(wxtDir) {
|
|
513
592
|
const getPath = (key) => (0, import_path4.resolve)(wxtDir, "cache", encodeURIComponent(key));
|
|
514
593
|
return {
|
|
515
594
|
async set(key, value) {
|
|
516
|
-
const
|
|
517
|
-
await (0,
|
|
518
|
-
await writeFileIfDifferent(
|
|
595
|
+
const path7 = getPath(key);
|
|
596
|
+
await (0, import_fs_extra7.ensureDir)((0, import_path4.dirname)(path7));
|
|
597
|
+
await writeFileIfDifferent(path7, value);
|
|
519
598
|
},
|
|
520
599
|
async get(key) {
|
|
521
|
-
const
|
|
600
|
+
const path7 = getPath(key);
|
|
522
601
|
try {
|
|
523
|
-
return await
|
|
602
|
+
return await import_fs_extra7.default.readFile(path7, "utf-8");
|
|
524
603
|
} catch {
|
|
525
604
|
return void 0;
|
|
526
605
|
}
|
|
@@ -528,7 +607,7 @@ function createFsCache(wxtDir) {
|
|
|
528
607
|
};
|
|
529
608
|
}
|
|
530
609
|
|
|
531
|
-
// src/core/utils/
|
|
610
|
+
// src/core/utils/building/get-internal-config.ts
|
|
532
611
|
var import_consola = __toESM(require("consola"), 1);
|
|
533
612
|
async function getInternalConfig(inlineConfig, command) {
|
|
534
613
|
let userConfig = {};
|
|
@@ -551,19 +630,19 @@ async function getInternalConfig(inlineConfig, command) {
|
|
|
551
630
|
const manifestVersion = mergedConfig.manifestVersion ?? (browser === "firefox" || browser === "safari" ? 2 : 3);
|
|
552
631
|
const mode = mergedConfig.mode ?? (command === "build" ? "production" : "development");
|
|
553
632
|
const env = { browser, command, manifestVersion, mode };
|
|
554
|
-
const root =
|
|
633
|
+
const root = import_node_path7.default.resolve(
|
|
555
634
|
inlineConfig.root ?? userConfig.root ?? process.cwd()
|
|
556
635
|
);
|
|
557
|
-
const wxtDir =
|
|
558
|
-
const srcDir =
|
|
559
|
-
const entrypointsDir =
|
|
636
|
+
const wxtDir = import_node_path7.default.resolve(root, ".wxt");
|
|
637
|
+
const srcDir = import_node_path7.default.resolve(root, mergedConfig.srcDir ?? root);
|
|
638
|
+
const entrypointsDir = import_node_path7.default.resolve(
|
|
560
639
|
srcDir,
|
|
561
640
|
mergedConfig.entrypointsDir ?? "entrypoints"
|
|
562
641
|
);
|
|
563
|
-
const publicDir =
|
|
564
|
-
const typesDir =
|
|
565
|
-
const outBaseDir =
|
|
566
|
-
const outDir =
|
|
642
|
+
const publicDir = import_node_path7.default.resolve(srcDir, mergedConfig.publicDir ?? "public");
|
|
643
|
+
const typesDir = import_node_path7.default.resolve(wxtDir, "types");
|
|
644
|
+
const outBaseDir = import_node_path7.default.resolve(root, ".output");
|
|
645
|
+
const outDir = import_node_path7.default.resolve(outBaseDir, `${browser}-mv${manifestVersion}`);
|
|
567
646
|
const runnerConfig = await (0, import_c12.loadConfig)({
|
|
568
647
|
name: "web-ext",
|
|
569
648
|
cwd: root,
|
|
@@ -618,7 +697,7 @@ function mergeInlineConfig(inlineConfig, userConfig) {
|
|
|
618
697
|
} else if (userConfig.imports == null && inlineConfig.imports == null) {
|
|
619
698
|
imports = void 0;
|
|
620
699
|
} else {
|
|
621
|
-
imports =
|
|
700
|
+
imports = vite3.mergeConfig(
|
|
622
701
|
userConfig.imports ?? {},
|
|
623
702
|
inlineConfig.imports ?? {}
|
|
624
703
|
);
|
|
@@ -626,18 +705,18 @@ function mergeInlineConfig(inlineConfig, userConfig) {
|
|
|
626
705
|
const manifest = async (env) => {
|
|
627
706
|
const user = await resolveManifestConfig(env, userConfig.manifest);
|
|
628
707
|
const inline = await resolveManifestConfig(env, inlineConfig.manifest);
|
|
629
|
-
return
|
|
708
|
+
return vite3.mergeConfig(user, inline);
|
|
630
709
|
};
|
|
631
710
|
const viteConfig = async (env) => {
|
|
632
711
|
const user = await userConfig.vite?.(env);
|
|
633
712
|
const inline = await inlineConfig.vite?.(env);
|
|
634
|
-
return
|
|
713
|
+
return vite3.mergeConfig(user ?? {}, inline ?? {});
|
|
635
714
|
};
|
|
636
|
-
const runner =
|
|
715
|
+
const runner = vite3.mergeConfig(
|
|
637
716
|
userConfig.runner ?? {},
|
|
638
717
|
inlineConfig.runner ?? {}
|
|
639
718
|
);
|
|
640
|
-
const zip =
|
|
719
|
+
const zip = vite3.mergeConfig(
|
|
641
720
|
userConfig.zip ?? {},
|
|
642
721
|
inlineConfig.zip ?? {}
|
|
643
722
|
);
|
|
@@ -715,10 +794,58 @@ async function resolveInternalViteConfig(env, mergedConfig, finalConfig) {
|
|
|
715
794
|
return internalVite;
|
|
716
795
|
}
|
|
717
796
|
|
|
797
|
+
// src/core/utils/building/import-entrypoint.ts
|
|
798
|
+
var import_jiti = __toESM(require("jiti"), 1);
|
|
799
|
+
var import_unimport5 = require("unimport");
|
|
800
|
+
var import_fs_extra8 = __toESM(require("fs-extra"), 1);
|
|
801
|
+
var import_esbuild = require("esbuild");
|
|
802
|
+
|
|
803
|
+
// src/core/utils/building/internal-build.ts
|
|
804
|
+
var import_picocolors4 = __toESM(require("picocolors"), 1);
|
|
805
|
+
var vite5 = __toESM(require("vite"), 1);
|
|
806
|
+
var import_fs_extra12 = __toESM(require("fs-extra"), 1);
|
|
807
|
+
|
|
808
|
+
// src/core/utils/log/printFileList.ts
|
|
809
|
+
var import_node_path8 = __toESM(require("path"), 1);
|
|
810
|
+
var import_picocolors2 = __toESM(require("picocolors"), 1);
|
|
811
|
+
var import_fs_extra9 = __toESM(require("fs-extra"), 1);
|
|
812
|
+
var import_filesize = require("filesize");
|
|
813
|
+
var DEFAULT_COLOR = import_picocolors2.default.blue;
|
|
814
|
+
var CHUNK_COLORS = {
|
|
815
|
+
".js.map": import_picocolors2.default.gray,
|
|
816
|
+
".cjs.map": import_picocolors2.default.gray,
|
|
817
|
+
".mjs.map": import_picocolors2.default.gray,
|
|
818
|
+
".html": import_picocolors2.default.green,
|
|
819
|
+
".css": import_picocolors2.default.magenta,
|
|
820
|
+
".js": import_picocolors2.default.cyan,
|
|
821
|
+
".cjs": import_picocolors2.default.cyan,
|
|
822
|
+
".mjs": import_picocolors2.default.cyan,
|
|
823
|
+
".zip": import_picocolors2.default.yellow
|
|
824
|
+
};
|
|
825
|
+
|
|
826
|
+
// src/core/utils/log/printHeader.ts
|
|
827
|
+
var import_picocolors3 = __toESM(require("picocolors"), 1);
|
|
828
|
+
var import_consola2 = require("consola");
|
|
829
|
+
|
|
830
|
+
// src/core/utils/building/internal-build.ts
|
|
831
|
+
var import_fast_glob3 = __toESM(require("fast-glob"), 1);
|
|
832
|
+
|
|
833
|
+
// src/core/utils/manifest.ts
|
|
834
|
+
var import_fs_extra11 = __toESM(require("fs-extra"), 1);
|
|
835
|
+
|
|
836
|
+
// src/core/utils/package.ts
|
|
837
|
+
var import_node_path9 = require("path");
|
|
838
|
+
var import_fs_extra10 = __toESM(require("fs-extra"), 1);
|
|
839
|
+
|
|
840
|
+
// src/core/utils/manifest.ts
|
|
841
|
+
var import_immer = require("immer");
|
|
842
|
+
var vite4 = __toESM(require("vite"), 1);
|
|
843
|
+
|
|
718
844
|
// src/testing/wxt-vitest-plugin.ts
|
|
719
845
|
function WxtVitest(inlineConfig) {
|
|
720
846
|
return getInternalConfig(inlineConfig ?? {}, "serve").then((config) => [
|
|
721
847
|
webextensionPolyfillAlias(config),
|
|
848
|
+
webextensionPolyfillInlineDeps(),
|
|
722
849
|
unimport(config),
|
|
723
850
|
globals(config),
|
|
724
851
|
download(config),
|
|
@@ -730,4 +857,3 @@ function WxtVitest(inlineConfig) {
|
|
|
730
857
|
WxtVitest,
|
|
731
858
|
fakeBrowser
|
|
732
859
|
});
|
|
733
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL3Rlc3RpbmcvaW5kZXgudHMiLCAiLi4vc3JjL3Rlc3RpbmcvZmFrZS1icm93c2VyLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2VudHJ5cG9pbnRzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL3BhdGhzLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9kZXZIdG1sUHJlcmVuZGVyLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9kZXZTZXJ2ZXJHbG9iYWxzLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL25ldHdvcmsudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvcHJvbWlzZXMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL2Rvd25sb2FkLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9tdWx0aXBhZ2VNb3ZlLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy91bmltcG9ydC50cyIsICIuLi9zcmMvY29yZS91dGlscy9hdXRvLWltcG9ydHMudHMiLCAiLi4vc3JjL2NvcmUvdml0ZS1wbHVnaW5zL3ZpcnR1YWxFbnRyeXBvaW50LnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy90c2NvbmZpZ1BhdGhzLnRzIiwgIi4uL3NyYy9jb3JlL3ZpdGUtcGx1Z2lucy9ub29wQmFja2dyb3VuZC50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvYnVuZGxlQW5hbHlzaXMudHMiLCAiLi4vc3JjL2NvcmUvdXRpbHMvZ2xvYmFscy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvZ2xvYmFscy50cyIsICIuLi9zcmMvY29yZS92aXRlLXBsdWdpbnMvd2ViZXh0ZW5zaW9uUG9seWZpbGxBbGlhcy50cyIsICIuLi9zcmMvY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZy50cyIsICIuLi9zcmMvY29yZS91dGlscy9jcmVhdGVGc0NhY2hlLnRzIiwgIi4uL3NyYy9jb3JlL3V0aWxzL2ZzLnRzIiwgIi4uL3NyYy90ZXN0aW5nL3d4dC12aXRlc3QtcGx1Z2luLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEBtb2R1bGUgd3h0L3Rlc3RpbmdcbiAqL1xuZXhwb3J0ICogZnJvbSAnLi9mYWtlLWJyb3dzZXInO1xuZXhwb3J0ICogZnJvbSAnLi93eHQtdml0ZXN0LXBsdWdpbic7XG4iLCAiZXhwb3J0IHsgZmFrZUJyb3dzZXIsIHR5cGUgRmFrZUJyb3dzZXIgfSBmcm9tICdAd2ViZXh0LWNvcmUvZmFrZS1icm93c2VyJztcbiIsICJpbXBvcnQgeyBFbnRyeXBvaW50LCBQZXJCcm93c2VyT3B0aW9uLCBUYXJnZXRCcm93c2VyIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHBhdGgsIHsgcmVsYXRpdmUsIHJlc29sdmUgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4vcGF0aHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludE5hbWUoXG4gIGVudHJ5cG9pbnRzRGlyOiBzdHJpbmcsXG4gIGlucHV0UGF0aDogc3RyaW5nLFxuICAvLyB0eXBlOiBFbnRyeXBvaW50Wyd0eXBlJ10sXG4pOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSBwYXRoLnJlbGF0aXZlKGVudHJ5cG9pbnRzRGlyLCBpbnB1dFBhdGgpO1xuICAvLyBHcmFiIHRoZSBzdHJpbmcgdXAgdG8gdGhlIGZpcnN0IC4gb3IgLyBvciBcXFxcXG4gIGNvbnN0IG5hbWUgPSByZWxhdGl2ZVBhdGguc3BsaXQoL1tcXC5cXC9cXFxcXS8sIDIpWzBdO1xuXG4gIHJldHVybiBuYW1lO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludE91dHB1dEZpbGUoXG4gIGVudHJ5cG9pbnQ6IEVudHJ5cG9pbnQsXG4gIGV4dDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIHJlc29sdmUoZW50cnlwb2ludC5vdXRwdXREaXIsIGAke2VudHJ5cG9pbnQubmFtZX0ke2V4dH1gKTtcbn1cblxuLyoqXG4gKiBSZXR1cm4ncyB0aGUgZW50cnlwb2ludCdzIG91dHB1dCBwYXRoIHJlbGF0aXZlIHRvIHRoZSBvdXRwdXQgZGlyZWN0b3J5LiBVc2VkIGZvciBwYXRocyBpbiB0aGVcbiAqIG1hbmlmZXN0IGFuZCByb2xsdXAncyBidW5kbGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgZW50cnlwb2ludDogRW50cnlwb2ludCxcbiAgb3V0RGlyOiBzdHJpbmcsXG4gIGV4dDogc3RyaW5nLFxuKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZVBhdGgoXG4gICAgcmVsYXRpdmUob3V0RGlyLCBnZXRFbnRyeXBvaW50T3V0cHV0RmlsZShlbnRyeXBvaW50LCBleHQpKSxcbiAgKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhbiBlbnRyeXBvaW50IG9wdGlvbiwgcmVzb2x2ZSBpdCdzIHZhbHVlIGJhc2VkIG9uIGEgdGFyZ2V0IGJyb3dzZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUGVyQnJvd3Nlck9wdGlvbjxUPihcbiAgb3B0aW9uOiBQZXJCcm93c2VyT3B0aW9uPFQ+LFxuICBicm93c2VyOiBUYXJnZXRCcm93c2VyLFxuKTogVCB7XG4gIGlmICh0eXBlb2Ygb3B0aW9uID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShvcHRpb24pKVxuICAgIHJldHVybiAob3B0aW9uIGFzIGFueSlbYnJvd3Nlcl07XG4gIHJldHVybiBvcHRpb247XG59XG4iLCAiaW1wb3J0IG5vZGVQYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIENvbnZlcnRzIHN5c3RlbSBwYXRocyB0byBub3JtYWxpemVkIGJ1bmRsZXIgcGF0aC4gT24gd2luZG93cyBhbmQgdW5peCwgdGhpcyByZXR1cm5zIHBhdGhzIHdpdGggL1xuICogaW5zdGVhZCBvZiBcXC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZpdGUubm9ybWFsaXplUGF0aChwYXRoKTtcbn1cblxuLyoqXG4gKiBHaXZlbiBhIG5vcm1hbGl6ZWQgcGF0aCwgY29udmVydCBpdCB0byB0aGUgc3lzdGVtIHBhdGggc3R5bGUuIE9uIFdpbmRvd3MsIHN3aXRjaCB0byBcXCwgb3RoZXJ3aXNlIHVzZSAvLlxuICovXG5leHBvcnQgZnVuY3Rpb24gdW5ub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBub2RlUGF0aC5ub3JtYWxpemUocGF0aCk7XG59XG5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OUyA9IFsnY3NzJywgJ3Njc3MnLCAnc2FzcycsICdsZXNzJywgJ3N0eWwnLCAnc3R5bHVzJ107XG5cbi8vIC5tb2R1bGUuY3NzIGZpbGVzIGFyZSBub3Qgc3VwcG9ydGVkIGJlY2F1c2UgdGhlc2UgYXJlIGdsb2JhbCBDU1MgZmlsZXMsIHNvIHVzaW5nIENTUyBtb2R1bGVzIGRvZXNuJ3QgbWFrZSBzZW5zZS5cbmV4cG9ydCBjb25zdCBDU1NfRVhURU5TSU9OU19QQVRURVJOID0gYCsoJHtDU1NfRVhURU5TSU9OUy5qb2luKCd8Jyl9KWA7XG4iLCAiaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0RW50cnlwb2ludE5hbWUgfSBmcm9tICcuLi91dGlscy9lbnRyeXBvaW50cyc7XG5pbXBvcnQgeyBwYXJzZUhUTUwgfSBmcm9tICdsaW5rZWRvbSc7XG5pbXBvcnQgeyBkaXJuYW1lLCBpc0Fic29sdXRlLCByZWxhdGl2ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuXG4vLyBDYWNoZSB0aGUgcHJlYW1ibGUgc2NyaXB0IGZvciBhbGwgZGV2SHRtbFByZXJlbmRlciBwbHVnaW5zLCBub3QganVzdCBvbmVcbmxldCByZWFjdFJlZnJlc2hQcmVhbWJsZSA9ICcnO1xuXG4vKipcbiAqIFByZS1yZW5kZXJzIHRoZSBIVE1MIGVudHJ5cG9pbnRzIHdoZW4gYnVpbGRpbmcgdGhlIGV4dGVuc2lvbiB0byBjb25uZWN0IHRvIHRoZSBkZXYgc2VydmVyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2SHRtbFByZXJlbmRlcihjb25maWc6IEludGVybmFsQ29uZmlnKTogdml0ZS5QbHVnaW5PcHRpb24ge1xuICBjb25zdCBodG1sUmVsb2FkSWQgPSAnQHd4dC9yZWxvYWQtaHRtbCc7XG4gIGNvbnN0IHJlc29sdmVkSHRtbFJlbG9hZElkID0gcmVzb2x2ZShcbiAgICBjb25maWcucm9vdCxcbiAgICAnbm9kZV9tb2R1bGVzL3d4dC9kaXN0L3ZpcnR1YWwtbW9kdWxlcy9yZWxvYWQtaHRtbC5qcycsXG4gICk7XG4gIGNvbnN0IHZpcnR1YWxSZWFjdFJlZnJlc2hJZCA9ICdAd3h0L3ZpcnR1YWwtcmVhY3QtcmVmcmVzaCc7XG4gIGNvbnN0IHJlc29sdmVkVmlydHVhbFJlYWN0UmVmcmVzaElkID0gJ1xcMCcgKyB2aXJ0dWFsUmVhY3RSZWZyZXNoSWQ7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBhcHBseTogJ2J1aWxkJyxcbiAgICAgIG5hbWU6ICd3eHQ6ZGV2LWh0bWwtcHJlcmVuZGVyJyxcbiAgICAgIGNvbmZpZygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNvbHZlOiB7XG4gICAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgICBbaHRtbFJlbG9hZElkXTogcmVzb2x2ZWRIdG1sUmVsb2FkSWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICAgLy8gQ29udmVydCBzY3JpcHRzIGxpa2Ugc3JjPVwiLi9tYWluLnRzeFwiIC0+IHNyYz1cImh0dHA6Ly9sb2NhbGhvc3Q6MzAwMC9lbnRyeXBvaW50cy9wb3B1cC9tYWluLnRzeFwiXG4gICAgICAvLyBiZWZvcmUgdGhlIHBhdGhzIGFyZSByZXBsYWNlZCB3aXRoIHRoZWlyIGJ1bmRsZWQgcGF0aFxuICAgICAgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICAgIGNvbnN0IHNlcnZlciA9IGNvbmZpZy5zZXJ2ZXI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBjb25maWcuY29tbWFuZCAhPT0gJ3NlcnZlJyB8fFxuICAgICAgICAgIHNlcnZlciA9PSBudWxsIHx8XG4gICAgICAgICAgIWlkLmVuZHNXaXRoKCcuaHRtbCcpXG4gICAgICAgIClcbiAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgY29uc3QgeyBkb2N1bWVudCB9ID0gcGFyc2VIVE1MKGNvZGUpO1xuXG4gICAgICAgIGNvbnN0IHBvaW50VG9EZXZTZXJ2ZXIgPSAoXG4gICAgICAgICAgcXVlcnlTZWxlY3Rvcjogc3RyaW5nLFxuICAgICAgICAgIGF0dHI6IHN0cmluZyxcbiAgICAgICAgKTogdm9pZCA9PiB7XG4gICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChxdWVyeVNlbGVjdG9yKS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzcmMgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyKTtcbiAgICAgICAgICAgIGlmICghc3JjKSByZXR1cm47XG5cbiAgICAgICAgICAgIGlmIChpc0Fic29sdXRlKHNyYykpIHtcbiAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgc2VydmVyLm9yaWdpbiArIHNyYyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNyYy5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgICAgICAgY29uc3QgYWJzID0gcmVzb2x2ZShkaXJuYW1lKGlkKSwgc3JjKTtcbiAgICAgICAgICAgICAgY29uc3QgcGF0aG5hbWUgPSByZWxhdGl2ZShjb25maWcucm9vdCwgYWJzKTtcbiAgICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0ciwgYCR7c2VydmVyLm9yaWdpbn0vJHtwYXRobmFtZX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgcG9pbnRUb0RldlNlcnZlcignc2NyaXB0W3R5cGU9bW9kdWxlXScsICdzcmMnKTtcbiAgICAgICAgcG9pbnRUb0RldlNlcnZlcignbGlua1tyZWw9c3R5bGVzaGVldF0nLCAnaHJlZicpO1xuXG4gICAgICAgIC8vIEFkZCBhIHNjcmlwdCB0byBhZGQgcGFnZSByZWxvYWRpbmdcbiAgICAgICAgY29uc3QgcmVsb2FkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgICAgcmVsb2FkZXIuc3JjID0gaHRtbFJlbG9hZElkO1xuICAgICAgICByZWxvYWRlci50eXBlID0gJ21vZHVsZSc7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQocmVsb2FkZXIpO1xuXG4gICAgICAgIGNvbnN0IG5ld0h0bWwgPSBkb2N1bWVudC50b1N0cmluZygpO1xuICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCd0cmFuc2Zvcm0gJyArIGlkKTtcbiAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygnT2xkIEhUTUw6XFxuJyArIGNvZGUpO1xuICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdOZXcgSFRNTDpcXG4nICsgbmV3SHRtbCk7XG4gICAgICAgIHJldHVybiBuZXdIdG1sO1xuICAgICAgfSxcblxuICAgICAgLy8gUGFzcyB0aGUgSFRNTCB0aHJvdWdoIHRoZSBkZXYgc2VydmVyIHRvIGFkZCBkZXYtbW9kZSBzcGVjaWZpYyBjb2RlXG4gICAgICBhc3luYyB0cmFuc2Zvcm1JbmRleEh0bWwoaHRtbCwgY3R4KSB7XG4gICAgICAgIGNvbnN0IHNlcnZlciA9IGNvbmZpZy5zZXJ2ZXI7XG4gICAgICAgIGlmIChjb25maWcuY29tbWFuZCAhPT0gJ3NlcnZlJyB8fCBzZXJ2ZXIgPT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IG9yaWdpbmFsVXJsID0gYCR7c2VydmVyLm9yaWdpbn0ke2N0eC5wYXRofWA7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBnZXRFbnRyeXBvaW50TmFtZShjb25maWcuZW50cnlwb2ludHNEaXIsIGN0eC5maWxlbmFtZSk7XG4gICAgICAgIGNvbnN0IHVybCA9IGAke3NlcnZlci5vcmlnaW59LyR7bmFtZX0uaHRtbGA7XG4gICAgICAgIGNvbnN0IHNlcnZlckh0bWwgPSBhd2FpdCBzZXJ2ZXIudHJhbnNmb3JtSW5kZXhIdG1sKFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICBodG1sLFxuICAgICAgICAgIG9yaWdpbmFsVXJsLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB7IGRvY3VtZW50IH0gPSBwYXJzZUhUTUwoc2VydmVySHRtbCk7XG5cbiAgICAgICAgLy8gUmVhY3QgcGFnZXMgaW5jbHVkZSBhIHByZWFtYmxlIGFzIGFuIHVuc2FmZS1pbmxpbmUgdHlwZT1cIm1vZHVsZVwiIHNjcmlwdCB0byBlbmFibGUgZmFzdCByZWZyZXNoLCBhcyBzaG93biBoZXJlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd3h0LWRldi93eHQvaXNzdWVzLzE1NyNpc3N1ZWNvbW1lbnQtMTc1NjQ5NzYxNlxuICAgICAgICAvLyBTaW5jZSB1bnNhZmUtaW5saW5lIHNjcmlwdHMgYXJlIGJsb2NrZWQgYnkgTVYzIENTUHMsIHdlIG5lZWQgdG8gdmlydHVhbGl6ZSBpdC5cbiAgICAgICAgY29uc3QgcmVhY3RSZWZyZXNoU2NyaXB0ID0gQXJyYXkuZnJvbShcbiAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdzY3JpcHRbdHlwZT1tb2R1bGVdJyksXG4gICAgICAgICkuZmluZCgoc2NyaXB0KSA9PiBzY3JpcHQuaW5uZXJIVE1MLmluY2x1ZGVzKCdAcmVhY3QtcmVmcmVzaCcpKTtcbiAgICAgICAgaWYgKHJlYWN0UmVmcmVzaFNjcmlwdCkge1xuICAgICAgICAgIC8vIFNhdmUgcHJlYW1ibGUgdG8gc2VydmUgZnJvbSBzZXJ2ZXJcbiAgICAgICAgICByZWFjdFJlZnJlc2hQcmVhbWJsZSA9IHJlYWN0UmVmcmVzaFNjcmlwdC5pbm5lckhUTUw7XG5cbiAgICAgICAgICAvLyBSZXBsYWNlIHVuc2FmZSBpbmxpbmUgc2NyaXB0XG4gICAgICAgICAgY29uc3QgdmlydHVhbFNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuICAgICAgICAgIHZpcnR1YWxTY3JpcHQudHlwZSA9ICdtb2R1bGUnO1xuICAgICAgICAgIHZpcnR1YWxTY3JpcHQuc3JjID0gYCR7c2VydmVyLm9yaWdpbn0vJHt2aXJ0dWFsUmVhY3RSZWZyZXNoSWR9YDtcbiAgICAgICAgICByZWFjdFJlZnJlc2hTY3JpcHQucmVwbGFjZVdpdGgodmlydHVhbFNjcmlwdCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDaGFuZ2UgL0B2aXRlL2NsaWVudCAtPiBodHRwOi8vbG9jYWxob3N0OjMwMDAvQHZpdGUvY2xpZW50XG4gICAgICAgIGNvbnN0IHZpdGVDbGllbnRTY3JpcHQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxTY3JpcHRFbGVtZW50PihcbiAgICAgICAgICBcInNjcmlwdFtzcmM9Jy9Adml0ZS9jbGllbnQnXVwiLFxuICAgICAgICApO1xuICAgICAgICBpZiAodml0ZUNsaWVudFNjcmlwdCkge1xuICAgICAgICAgIHZpdGVDbGllbnRTY3JpcHQuc3JjID0gYCR7c2VydmVyLm9yaWdpbn0ke3ZpdGVDbGllbnRTY3JpcHQuc3JjfWA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdIdG1sID0gZG9jdW1lbnQudG9TdHJpbmcoKTtcbiAgICAgICAgY29uZmlnLmxvZ2dlci5kZWJ1ZygndHJhbnNmb3JtSW5kZXhIdG1sICcgKyBjdHguZmlsZW5hbWUpO1xuICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKCdPbGQgSFRNTDpcXG4nICsgaHRtbCk7XG4gICAgICAgIGNvbmZpZy5sb2dnZXIuZGVidWcoJ05ldyBIVE1MOlxcbicgKyBuZXdIdG1sKTtcbiAgICAgICAgcmV0dXJuIG5ld0h0bWw7XG4gICAgICB9LFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogJ3d4dDp2aXJ0dWFsaXplLXJlYWN0LXJlZnJlc2gnLFxuICAgICAgYXBwbHk6ICdzZXJ2ZScsXG4gICAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgICAgaWYgKGlkID09PSBgLyR7dmlydHVhbFJlYWN0UmVmcmVzaElkfWApIHtcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZWRWaXJ0dWFsUmVhY3RSZWZyZXNoSWQ7XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWdub3JlIGNodW5rIGNvbnRlbnRzIHdoZW4gcHJlLXJlbmRlcmluZ1xuICAgICAgICBpZiAoaWQuc3RhcnRzV2l0aCgnL2NodW5rcy8nKSkge1xuICAgICAgICAgIHJldHVybiAnXFwwbm9vcCc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBsb2FkKGlkKSB7XG4gICAgICAgIGlmIChpZCA9PT0gcmVzb2x2ZWRWaXJ0dWFsUmVhY3RSZWZyZXNoSWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVhY3RSZWZyZXNoUHJlYW1ibGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlkID09PSAnXFwwbm9vcCcpIHtcbiAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSxcbiAgXTtcbn1cbiIsICJpbXBvcnQgeyBQbHVnaW4gfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG4vKipcbiAqIERlZmluZXMgZ2xvYmFsIGNvbnN0YW50cyBhYm91dCB0aGUgZGV2IHNlcnZlci4gSGVscHMgc2NyaXB0cyBjb25uZWN0IHRvIHRoZSBzZXJ2ZXIncyB3ZWIgc29ja2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV2U2VydmVyR2xvYmFscyhpbnRlcm5hbENvbmZpZzogSW50ZXJuYWxDb25maWcpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6ZGV2LXNlcnZlci1nbG9iYWxzJyxcbiAgICBjb25maWcoKSB7XG4gICAgICBpZiAoaW50ZXJuYWxDb25maWcuc2VydmVyID09IG51bGwgfHwgaW50ZXJuYWxDb25maWcuY29tbWFuZCA9PSAnYnVpbGQnKVxuICAgICAgICByZXR1cm47XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGRlZmluZToge1xuICAgICAgICAgIF9fREVWX1NFUlZFUl9QUk9UT0NPTF9fOiBKU09OLnN0cmluZ2lmeSgnd3M6JyksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX0hPU1ROQU1FX186IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgaW50ZXJuYWxDb25maWcuc2VydmVyLmhvc3RuYW1lLFxuICAgICAgICAgICksXG4gICAgICAgICAgX19ERVZfU0VSVkVSX1BPUlRfXzogSlNPTi5zdHJpbmdpZnkoaW50ZXJuYWxDb25maWcuc2VydmVyLnBvcnQpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCBkbnMgZnJvbSAnbm9kZTpkbnMnO1xuaW1wb3J0IHsgd2l0aFRpbWVvdXQgfSBmcm9tICcuL3Byb21pc2VzJztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5mdW5jdGlvbiBpc09mZmxpbmUoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGlzT2ZmbGluZSA9IG5ldyBQcm9taXNlPGJvb2xlYW4+KChyZXMpID0+IHtcbiAgICBkbnMucmVzb2x2ZSgnZ29vZ2xlLmNvbScsIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIgPT0gbnVsbCkge1xuICAgICAgICByZXMoZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzKHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbiAgcmV0dXJuIHdpdGhUaW1lb3V0KGlzT2ZmbGluZSwgMWUzKS5jYXRjaCgoKSA9PiB0cnVlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzT25saW5lKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBvZmZsaW5lID0gYXdhaXQgaXNPZmZsaW5lKCk7XG4gIHJldHVybiAhb2ZmbGluZTtcbn1cblxuLyoqXG4gKiBGZXRjaGVzIGEgVVJMIHdpdGggYSBzaW1wbGUgR0VUIHJlcXVlc3QuIEdyYWJzIGl0IGZyb20gY2FjaGUgaWYgaXQgZG9lc24ndCBleGlzdCwgb3IgdGhyb3dzIGFuXG4gKiBlcnJvciBpZiBpdCBjYW4ndCBiZSByZXNvbHZlZCB2aWEgdGhlIG5ldHdvcmsgb3IgY2FjaGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaENhY2hlZChcbiAgdXJsOiBzdHJpbmcsXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBsZXQgY29udGVudDogc3RyaW5nID0gJyc7XG5cbiAgaWYgKGF3YWl0IGlzT25saW5lKCkpIHtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGlmIChyZXMuc3RhdHVzIDwgMzAwKSB7XG4gICAgICBjb250ZW50ID0gYXdhaXQgcmVzLnRleHQoKTtcbiAgICAgIGF3YWl0IGNvbmZpZy5mc0NhY2hlLnNldCh1cmwsIGNvbnRlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICBgRmFpbGVkIHRvIGRvd25sb2FkIFwiJHt1cmx9XCIsIGZhbGxpbmcgYmFjayB0byBjYWNoZS4uLmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGVudCkgY29udGVudCA9IChhd2FpdCBjb25maWcuZnNDYWNoZS5nZXQodXJsKSkgPz8gJyc7XG4gIGlmICghY29udGVudClcbiAgICB0aHJvdyBFcnJvcihcbiAgICAgIGBPZmZsaW5lIGFuZCBcIiR7dXJsfVwiIGhhcyBub3QgYmVlbiBjYWNoZWQuIFRyeSBhZ2FpbiB3aGVuIG9ubGluZS5gLFxuICAgICk7XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG4iLCAiLyoqXG4gKiBBZGQgYSB0aW1lb3V0IHRvIGEgcHJvbWlzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdpdGhUaW1lb3V0PFQ+KFxuICBwcm9taXNlOiBQcm9taXNlPFQ+LFxuICBkdXJhdGlvbjogbnVtYmVyLFxuKTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzLCByZWopID0+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICByZWooYFByb21pc2UgdGltZWQgb3V0IGFmdGVyICR7ZHVyYXRpb259bXNgKTtcbiAgICB9LCBkdXJhdGlvbik7XG4gICAgcHJvbWlzZVxuICAgICAgLnRoZW4ocmVzKVxuICAgICAgLmNhdGNoKHJlailcbiAgICAgIC5maW5hbGx5KCgpID0+IGNsZWFyVGltZW91dCh0aW1lb3V0KSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIERvbid0IHVzZSBpbiBwcm9kdWN0aW9uLCBqdXN0IGZvciB0ZXN0aW5nIGFuZCBzbG93aW5nIHRoaW5ncyBkb3duLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xlZXAobXM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlcykgPT4gc2V0VGltZW91dChyZXMsIG1zKSk7XG59XG4iLCAiaW1wb3J0IHsgUGx1Z2luIH0gZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGZldGNoQ2FjaGVkIH0gZnJvbSAnLi4vdXRpbHMvbmV0d29yayc7XG5cbi8qKlxuICogRG93bmxvYWRzIGFueSBVUkwgaW1wb3J0cywgbGlrZSBHb29nbGUgQW5hbHl0aWNzLCBpbnRvIHZpcnR1YWwgbW9kdWxlcyBzbyB0aGV5IGFyZSBidW5kbGVkIHdpdGhcbiAqIHRoZSBleHRlbnNpb24gaW5zdGVhZCBvZiBkZXBlbmRpbmcgb24gcmVtb3RlIGNvZGUgYXQgcnVudGltZS5cbiAqXG4gKiBAZXhhbXBsZVxuICogaW1wb3J0IFwidXJsOmh0dHBzOi8vZ29vZ2xlLXRhZ21hbmFnZXIuY29tL2d0YWc/aWQ9WFlaXCI7XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb3dubG9hZChjb25maWc6IEludGVybmFsQ29uZmlnKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmRvd25sb2FkJyxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIGlmIChpZC5zdGFydHNXaXRoKCd1cmw6JykpIHJldHVybiAnXFwwJyArIGlkO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKCdcXDB1cmw6JykpIHJldHVybjtcblxuICAgICAgLy8gTG9hZCBmaWxlIGZyb20gbmV0d29yayBvciBjYWNoZVxuICAgICAgY29uc3QgdXJsID0gaWQucmVwbGFjZSgnXFwwdXJsOicsICcnKTtcbiAgICAgIHJldHVybiBhd2FpdCBmZXRjaENhY2hlZCh1cmwsIGNvbmZpZyk7XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgKiBhcyB2aXRlIGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBleHRuYW1lLCByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldEVudHJ5cG9pbnRCdW5kbGVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZW50cnlwb2ludHMnO1xuaW1wb3J0IGZzLCB7IGVuc3VyZURpciB9IGZyb20gJ2ZzLWV4dHJhJztcbmltcG9ydCB7IG5vcm1hbGl6ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRocyc7XG5cbi8qKlxuICogRW5zdXJlcyB0aGUgSFRNTCBmaWxlcyBvdXRwdXQgYnkgYSBtdWx0aXBhZ2UgYnVpbGQgYXJlIGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uLiBUaGlzIGRvZXMgdHdvXG4gKiB0aGluZ3M6XG4gKlxuICogMS4gTW92ZXMgdGhlIEhNVEwgZmlsZXMgdG8gdGhlaXIgZmluYWwgbG9jYXRpb24gYXQgYDxvdXREaXI+LzxlbnRyeXBvaW50Lm5hbWU+Lmh0bWxgLlxuICogMi4gVXBkYXRlcyB0aGUgYnVuZGxlIHNvIGl0IHN1bW1hcml6ZXMgdGhlIGZpbGVzIGNvcnJlY3RseSBpbiB0aGUgcmV0dXJuZWQgYnVpbGQgb3V0cHV0LlxuICpcbiAqIEFzc2V0cyAoSlMgYW5kIENTUykgYXJlIG91dHB1dCB0byB0aGUgYDxvdXREaXI+L2Fzc2V0c2AgZGlyZWN0b3J5LCBhbmQgZG9uJ3QgbmVlZCB0byBiZSBtb2RpZmllZC5cbiAqIEhUTUwgZmlsZXMgYWNjZXNzIHRoZW0gdmlhIGFic29sdXRlIFVSTHMsIHNvIHdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIGFueSBpbXBvcnQgcGF0aHMgaW4gdGhlIEhUTUxcbiAqIGZpbGVzIGVpdGhlci5cbiAqXG4gKiBUSElTIFBMVUdJTiBTSE9VTEQgT05MWSBCRSBBUFBMSUVEIFRPIE1VTFRJUEFHRSBCVUlMRFMuIEl0IHNob3VsZCBub3QgYmUgYWRkZWQgdG8gZXZlcnkgYnVpbGQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtdWx0aXBhZ2VNb3ZlKFxuICBlbnRyeXBvaW50czogRW50cnlwb2ludFtdLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6bXVsdGlwYWdlLW1vdmUnLFxuICAgIGFzeW5jIHdyaXRlQnVuZGxlKF8sIGJ1bmRsZSkge1xuICAgICAgZm9yIChjb25zdCBvbGRCdW5kbGVQYXRoIGluIGJ1bmRsZSkge1xuICAgICAgICAvLyBvbGRCdW5kbGVQYXRoID0gJ2VudHJ5cG9pbnRzL3BvcHVwLmh0bWwnIG9yICdlbnRyeXBvaW50cy9vcHRpb25zL2luZGV4Lmh0bWwnXG5cbiAgICAgICAgLy8gRmluZCBhIG1hdGNoaW5nIGVudHJ5cG9pbnQgLSBvbGRCdW5kbGVQYXRoIGlzIHRoZSBzYW1lIGFzIGVuZCBlbmQgb2YgdGhlIGlucHV0IHBhdGguXG4gICAgICAgIGNvbnN0IGVudHJ5cG9pbnQgPSBlbnRyeXBvaW50cy5maW5kKFxuICAgICAgICAgIChlbnRyeSkgPT4gISFub3JtYWxpemVQYXRoKGVudHJ5LmlucHV0UGF0aCkuZW5kc1dpdGgob2xkQnVuZGxlUGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChlbnRyeXBvaW50ID09IG51bGwpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgYE5vIGVudHJ5cG9pbnQgZm91bmQgZm9yICR7b2xkQnVuZGxlUGF0aH0sIGxlYXZpbmcgaW4gY2h1bmtzIGRpcmVjdG9yeWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEdldCB0aGUgbmV3IGJ1bmRsZSBwYXRoXG4gICAgICAgIGNvbnN0IG5ld0J1bmRsZVBhdGggPSBnZXRFbnRyeXBvaW50QnVuZGxlUGF0aChcbiAgICAgICAgICBlbnRyeXBvaW50LFxuICAgICAgICAgIGNvbmZpZy5vdXREaXIsXG4gICAgICAgICAgZXh0bmFtZShvbGRCdW5kbGVQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKG5ld0J1bmRsZVBhdGggPT09IG9sZEJ1bmRsZVBhdGgpIHtcbiAgICAgICAgICBjb25maWcubG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICAgJ0hUTUwgZmlsZSBpcyBhbHJlYWR5IGluIHRoZSBjb3JyZWN0IGxvY2F0aW9uJyxcbiAgICAgICAgICAgIG9sZEJ1bmRsZVBhdGgsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE1vdmUgZmlsZSBhbmQgdXBkYXRlIGJ1bmRsZVxuICAgICAgICAvLyBEbyB0aGlzIGluc2lkZSBhIG11dGV4IGxvY2sgc28gaXQgb25seSBydW5zIG9uZSBhdCBhIHRpbWUgZm9yIGNvbmN1cnJlbnQgbXVsdGlwYWdlIGJ1aWxkc1xuICAgICAgICBjb25zdCBvbGRBYnNQYXRoID0gcmVzb2x2ZShjb25maWcub3V0RGlyLCBvbGRCdW5kbGVQYXRoKTtcbiAgICAgICAgY29uc3QgbmV3QWJzUGF0aCA9IHJlc29sdmUoY29uZmlnLm91dERpciwgbmV3QnVuZGxlUGF0aCk7XG4gICAgICAgIGF3YWl0IGVuc3VyZURpcihkaXJuYW1lKG5ld0Fic1BhdGgpKTtcbiAgICAgICAgYXdhaXQgZnMubW92ZShvbGRBYnNQYXRoLCBuZXdBYnNQYXRoLCB7IG92ZXJ3cml0ZTogdHJ1ZSB9KTtcblxuICAgICAgICBjb25zdCByZW5hbWVkQ2h1bmsgPSB7XG4gICAgICAgICAgLi4uYnVuZGxlW29sZEJ1bmRsZVBhdGhdLFxuICAgICAgICAgIGZpbGVOYW1lOiBuZXdCdW5kbGVQYXRoLFxuICAgICAgICB9O1xuICAgICAgICBkZWxldGUgYnVuZGxlW29sZEJ1bmRsZVBhdGhdO1xuICAgICAgICBidW5kbGVbbmV3QnVuZGxlUGF0aF0gPSByZW5hbWVkQ2h1bms7XG4gICAgICB9XG4gICAgfSxcbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBjcmVhdGVVbmltcG9ydCB9IGZyb20gJ3VuaW1wb3J0JztcbmltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZ2V0VW5pbXBvcnRPcHRpb25zIH0gZnJvbSAnLi4vdXRpbHMvYXV0by1pbXBvcnRzJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBleHRuYW1lIH0gZnJvbSAncGF0aCc7XG5cbmNvbnN0IEVOQUJMRURfRVhURU5TSU9OUzogUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IHVuZGVmaW5lZD4gPSB7XG4gICcuanMnOiB0cnVlLFxuICAnLmpzeCc6IHRydWUsXG4gICcudHMnOiB0cnVlLFxuICAnLnRzeCc6IHRydWUsXG4gICcudnVlJzogdHJ1ZSxcbiAgJy5zdmVsdGUnOiB0cnVlLFxufTtcblxuLyoqXG4gKiBJbmplY3QgYW55IGdsb2JhbCBpbXBvcnRzIGRlZmluZWQgYnkgdW5pbXBvcnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaW1wb3J0KGNvbmZpZzogSW50ZXJuYWxDb25maWcpOiB2aXRlLlBsdWdpbk9wdGlvbiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBnZXRVbmltcG9ydE9wdGlvbnMoY29uZmlnKTtcbiAgaWYgKG9wdGlvbnMgPT09IGZhbHNlKSByZXR1cm4gW107XG5cbiAgY29uc3QgdW5pbXBvcnQgPSBjcmVhdGVVbmltcG9ydChvcHRpb25zKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6dW5pbXBvcnQnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIGF3YWl0IHVuaW1wb3J0LnNjYW5JbXBvcnRzRnJvbURpcih1bmRlZmluZWQsIHsgY3dkOiBjb25maWcuc3JjRGlyIH0pO1xuICAgIH0sXG4gICAgYXN5bmMgdHJhbnNmb3JtKGNvZGUsIGlkKSB7XG4gICAgICBjb25zdCBleHQgPSBleHRuYW1lKGlkKTtcbiAgICAgIGlmIChFTkFCTEVEX0VYVEVOU0lPTlNbZXh0XSkgcmV0dXJuIHVuaW1wb3J0LmluamVjdEltcG9ydHMoY29kZSwgaWQpO1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgVW5pbXBvcnRPcHRpb25zIH0gZnJvbSAndW5pbXBvcnQnO1xuaW1wb3J0IHsgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBtZXJnZUNvbmZpZyB9IGZyb20gJ3ZpdGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VW5pbXBvcnRPcHRpb25zKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGFydGlhbDxVbmltcG9ydE9wdGlvbnMgfCBmYWxzZT4ge1xuICBpZiAoY29uZmlnLmltcG9ydHMgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG5cbiAgY29uc3QgZGVmYXVsdE9wdGlvbnM6IFBhcnRpYWw8VW5pbXBvcnRPcHRpb25zPiA9IHtcbiAgICBkZWJ1Z0xvZzogY29uZmlnLmxvZ2dlci5kZWJ1ZyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICB7IG5hbWU6ICdkZWZpbmVDb25maWcnLCBmcm9tOiAnd3h0JyB9LFxuICAgICAgeyBuYW1lOiAnZmFrZUJyb3dzZXInLCBmcm9tOiAnd3h0L3Rlc3RpbmcnIH0sXG4gICAgXSxcbiAgICBwcmVzZXRzOiBbXG4gICAgICB7IHBhY2thZ2U6ICd3eHQvY2xpZW50JyB9LFxuICAgICAgeyBwYWNrYWdlOiAnd3h0L2Jyb3dzZXInIH0sXG4gICAgICB7IHBhY2thZ2U6ICd3eHQvc2FuZGJveCcgfSxcbiAgICBdLFxuICAgIHdhcm46IGNvbmZpZy5sb2dnZXIud2FybixcbiAgICBkaXJzOiBbJ2NvbXBvbmVudHMnLCAnY29tcG9zYWJsZXMnLCAnaG9va3MnLCAndXRpbHMnXSxcbiAgfTtcblxuICByZXR1cm4gbWVyZ2VDb25maWcoXG4gICAgZGVmYXVsdE9wdGlvbnMsXG4gICAgY29uZmlnLmltcG9ydHMsXG4gICkgYXMgUGFydGlhbDxVbmltcG9ydE9wdGlvbnM+O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuaW1wb3J0IHsgRW50cnlwb2ludCwgSW50ZXJuYWxDb25maWcgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgZnMgZnJvbSAnZnMtZXh0cmEnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgbm9ybWFsaXplUGF0aCB9IGZyb20gJy4uL3V0aWxzL3BhdGhzJztcblxuLyoqXG4gKiBXcmFwcyBhIHVzZXIncyBlbnRyeXBvaW50IHdpdGggYSB2aXR1YWwgdmVyc2lvbiB3aXRoIGFkZGl0aW9uYWwgbG9naWMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2aXJ0dWFsRW50cnlwb2ludChcbiAgdHlwZTogRW50cnlwb2ludFsndHlwZSddLFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogUGx1Z2luIHtcbiAgY29uc3QgdmlydHVhbElkID0gYHZpcnR1YWw6d3h0LSR7dHlwZX0/YDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsSWQgPSBgXFwwJHt2aXJ0dWFsSWR9YDtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IGB3eHQ6dmlydHVhbC1lbnRyeXBvaW50YCxcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIC8vIElkIGRvZXNuJ3Qgc3RhcnQgd2l0aCBwcmVmaXgsIGl0IGxvb2tzIGxpa2UgdGhpczpcbiAgICAgIC8vIC9wYXRoL3RvL3Byb2plY3QvdmlydHVhbDpiYWNrZ3JvdW5kPy9wYXRoL3RvL3Byb2plY3QvZW50cnlwb2ludHMvYmFja2dyb3VuZC50c1xuICAgICAgY29uc3QgaW5kZXggPSBpZC5pbmRleE9mKHZpcnR1YWxJZCk7XG4gICAgICBpZiAoaW5kZXggPT09IC0xKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IGlucHV0UGF0aCA9IG5vcm1hbGl6ZVBhdGgoaWQuc3Vic3RyaW5nKGluZGV4ICsgdmlydHVhbElkLmxlbmd0aCkpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkVmlydHVhbElkICsgaW5wdXRQYXRoO1xuICAgIH0sXG4gICAgYXN5bmMgbG9hZChpZCkge1xuICAgICAgaWYgKCFpZC5zdGFydHNXaXRoKHJlc29sdmVkVmlydHVhbElkKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBpbnB1dFBhdGggPSBpZC5yZXBsYWNlKHJlc29sdmVkVmlydHVhbElkLCAnJyk7XG4gICAgICBjb25zdCB0ZW1wbGF0ZSA9IGF3YWl0IGZzLnJlYWRGaWxlKFxuICAgICAgICByZXNvbHZlKFxuICAgICAgICAgIGNvbmZpZy5yb290LFxuICAgICAgICAgIGBub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzLyR7dHlwZX0tZW50cnlwb2ludC5qc2AsXG4gICAgICAgICksXG4gICAgICAgICd1dGYtOCcsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UoYHZpcnR1YWw6dXNlci0ke3R5cGV9YCwgaW5wdXRQYXRoKTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0ICogYXMgdml0ZSBmcm9tICd2aXRlJztcblxuZXhwb3J0IGZ1bmN0aW9uIHRzY29uZmlnUGF0aHMoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IHZpdGUuUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0OmFsaWFzZXMnLFxuICAgIGFzeW5jIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgJ0BAJzogY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAnfn4nOiBjb25maWcucm9vdCxcbiAgICAgICAgICAgICdAJzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICAgICd+JzogY29uZmlnLnNyY0RpcixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9LFxuICB9O1xufVxuIiwgImltcG9ydCB7IFBsdWdpbiB9IGZyb20gJ3ZpdGUnO1xuXG4vKipcbiAqIEluIGRldiBtb2RlLCBpZiB0aGVyZSdzIG5vdCBhIGJhY2tncm91bmQgc2NyaXB0IGxpc3RlZCwgd2UgbmVlZCB0byBhZGQgb25lLlxuICpcbiAqIFRoaXMgZGVmaW5lJ3MgYSB2aXJ0dWFsIG1vZHVsZSB0aGF0IGlzIGJhc2ljYWxseSBqdXN0IGEgbm9vcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vb3BCYWNrZ3JvdW5kKCk6IFBsdWdpbiB7XG4gIGNvbnN0IHZpcnR1YWxNb2R1bGVJZCA9IFZJUlRVQUxfTk9PUF9CQUNLR1JPVU5EX01PRFVMRV9JRDtcbiAgY29uc3QgcmVzb2x2ZWRWaXJ0dWFsTW9kdWxlSWQgPSAnXFwwJyArIHZpcnR1YWxNb2R1bGVJZDtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0Om5vb3AtYmFja2dyb3VuZCcsXG4gICAgcmVzb2x2ZUlkKGlkKSB7XG4gICAgICBpZiAoaWQgPT09IHZpcnR1YWxNb2R1bGVJZCkgcmV0dXJuIHJlc29sdmVkVmlydHVhbE1vZHVsZUlkO1xuICAgIH0sXG4gICAgbG9hZChpZCkge1xuICAgICAgaWYgKGlkID09PSByZXNvbHZlZFZpcnR1YWxNb2R1bGVJZCkge1xuICAgICAgICByZXR1cm4gYGltcG9ydCB7IGRlZmluZUJhY2tncm91bmQgfSBmcm9tICd3eHQvY2xpZW50JztcXG5leHBvcnQgZGVmYXVsdCBkZWZpbmVCYWNrZ3JvdW5kKCgpID0+IHZvaWQgMClgO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBjb25zdCBWSVJUVUFMX05PT1BfQkFDS0dST1VORF9NT0RVTEVfSUQgPSAndmlydHVhbDp1c2VyLWJhY2tncm91bmQnO1xuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyB2aXN1YWxpemVyIH0gZnJvbSAncm9sbHVwLXBsdWdpbi12aXN1YWxpemVyJztcblxubGV0IGluY3JlbWVudCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBidW5kbGVBbmFseXNpcygpOiB2aXRlLlBsdWdpbiB7XG4gIHJldHVybiB2aXN1YWxpemVyKHtcbiAgICBlbWl0RmlsZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogJ3Jhdy1kYXRhJyxcbiAgICBmaWxlbmFtZTogYHN0YXRzLSR7aW5jcmVtZW50Kyt9Lmpzb25gLFxuICB9KSBhcyB2aXRlLlBsdWdpbjtcbn1cbiIsICJpbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbHMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pOiBBcnJheTx7IG5hbWU6IHN0cmluZzsgdmFsdWU6IGFueTsgdHlwZTogc3RyaW5nIH0+IHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiBzdXJyb3VuZEluVW5kZXJzY29yZSgnTUFOSUZFU1RfVkVSU0lPTicpLFxuICAgICAgdmFsdWU6IGNvbmZpZy5tYW5pZmVzdFZlcnNpb24sXG4gICAgICB0eXBlOiBgMiB8IDNgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogc3Vycm91bmRJblVuZGVyc2NvcmUoJ0JST1dTRVInKSxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlcixcbiAgICAgIHR5cGU6IGBzdHJpbmdgLFxuICAgIH0sXG4gICAge1xuICAgICAgbmFtZTogc3Vycm91bmRJblVuZGVyc2NvcmUoJ0lTX0NIUk9NRScpLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnY2hyb21lJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHN1cnJvdW5kSW5VbmRlcnNjb3JlKCdJU19GSVJFRk9YJyksXG4gICAgICB2YWx1ZTogY29uZmlnLmJyb3dzZXIgPT09ICdmaXJlZm94JyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHN1cnJvdW5kSW5VbmRlcnNjb3JlKCdJU19TQUZBUkknKSxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ3NhZmFyaScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBzdXJyb3VuZEluVW5kZXJzY29yZSgnSVNfRURHRScpLFxuICAgICAgdmFsdWU6IGNvbmZpZy5icm93c2VyID09PSAnZWRnZScsXG4gICAgICB0eXBlOiBgYm9vbGVhbmAsXG4gICAgfSxcbiAgICB7XG4gICAgICBuYW1lOiBzdXJyb3VuZEluVW5kZXJzY29yZSgnSVNfT1BFUkEnKSxcbiAgICAgIHZhbHVlOiBjb25maWcuYnJvd3NlciA9PT0gJ29wZXJhJyxcbiAgICAgIHR5cGU6IGBib29sZWFuYCxcbiAgICB9LFxuICAgIHtcbiAgICAgIG5hbWU6IHN1cnJvdW5kSW5VbmRlcnNjb3JlKCdDT01NQU5EJyksXG4gICAgICB2YWx1ZTogY29uZmlnLmNvbW1hbmQsXG4gICAgICB0eXBlOiBgXCJidWlsZFwiIHwgXCJzZXJ2ZVwiYCxcbiAgICB9LFxuICBdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW50cnlwb2ludEdsb2JhbHMoXG4gIGNvbmZpZzogSW50ZXJuYWxDb25maWcsXG4gIGVudHJ5cG9pbnROYW1lOiBzdHJpbmcsXG4pIHtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICBuYW1lOiBzdXJyb3VuZEluVW5kZXJzY29yZSgnRU5UUllQT0lOVCcpLFxuICAgICAgdmFsdWU6IGVudHJ5cG9pbnROYW1lLFxuICAgICAgdHlwZTogYHN0cmluZ2AsXG4gICAgfSxcbiAgXTtcbn1cblxuLyoqXG4gKiBEb24ndCBoYXJkY29kZSB0aGUgY29tcGxldGUgbmFtZSBzbyB0aGF0IHRoZSBzdHJpbmcgbGl0dGVyYWxzIGluIHRoaXMgZmlsZSBhcmVuJ3QgcmVwbGFjZWQgZHVyaW5nXG4gKiB0ZXN0cyAod2hpY2ggY2F1c2VzIHN5bnRheCBlcnJvcnMpLCBvbmx5IGR1cmluZyBidWlsZHMuXG4gKi9cbmZ1bmN0aW9uIHN1cnJvdW5kSW5VbmRlcnNjb3JlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgX18ke25hbWV9X19gO1xufVxuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEdsb2JhbHMgfSBmcm9tICcuLi91dGlscy9nbG9iYWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdsb2JhbHMoY29uZmlnOiBJbnRlcm5hbENvbmZpZyk6IHZpdGUuUGx1Z2luT3B0aW9uIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnd3h0Omdsb2JhbHMnLFxuICAgIGNvbmZpZygpIHtcbiAgICAgIGNvbnN0IGRlZmluZTogdml0ZS5JbmxpbmVDb25maWdbJ2RlZmluZSddID0ge307XG4gICAgICBmb3IgKGNvbnN0IGdsb2JhbCBvZiBnZXRHbG9iYWxzKGNvbmZpZykpIHtcbiAgICAgICAgZGVmaW5lW2dsb2JhbC5uYW1lXSA9IEpTT04uc3RyaW5naWZ5KGdsb2JhbC52YWx1ZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWZpbmUsXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBJbnRlcm5hbENvbmZpZyB9IGZyb20gJy4uL3R5cGVzJztcblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFsaWFzIHRvIHJlZGlyZWN0IFwid2ViZXh0ZW5zaW9uLXBvbHlmaWxsXCIgaW1wb3J0cyB0byBXWFQncyBgZmFrZUJyb3dzZXJgLlxuICpcbiAqIFRoaXMgc2hvdWxkIG9ubHkgYmUgdXNlZCBkdXJpbmcgdGVzdHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3ZWJleHRlbnNpb25Qb2x5ZmlsbEFsaWFzKFxuICBjb25maWc6IEludGVybmFsQ29uZmlnLFxuKTogdml0ZS5QbHVnaW5PcHRpb24ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6ICd3eHQ6d2ViZXh0ZW5zaW9uLXBvbHlmaWxsLXRlc3QtYWxpYXMnLFxuICAgIGNvbmZpZygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHJlc29sdmU6IHtcbiAgICAgICAgICBhbGlhczoge1xuICAgICAgICAgICAgJ3dlYmV4dGVuc2lvbi1wb2x5ZmlsbCc6IHBhdGgucmVzb2x2ZShcbiAgICAgICAgICAgICAgY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAgICdub2RlX21vZHVsZXMvd3h0L2Rpc3QvdmlydHVhbC1tb2R1bGVzL2Zha2UtYnJvd3NlcicsXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IHsgbG9hZENvbmZpZyB9IGZyb20gJ2MxMic7XG5pbXBvcnQge1xuICBJbmxpbmVDb25maWcsXG4gIEludGVybmFsQ29uZmlnLFxuICBVc2VyQ29uZmlnLFxuICBDb25maWdFbnYsXG4gIFVzZXJNYW5pZmVzdEZuLFxuICBVc2VyTWFuaWZlc3QsXG4gIFd4dFZpdGVDb25maWcsXG4gIEV4dGVuc2lvblJ1bm5lckNvbmZpZyxcbn0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQgeyBjcmVhdGVGc0NhY2hlIH0gZnJvbSAnLi9jcmVhdGVGc0NhY2hlJztcbmltcG9ydCBjb25zb2xhLCB7IExvZ0xldmVscyB9IGZyb20gJ2NvbnNvbGEnO1xuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tICcuLi92aXRlLXBsdWdpbnMnO1xuXG4vKipcbiAqIEdpdmVuIGFuIGlubGluZSBjb25maWcsIGRpc2NvdmVyIHRoZSBjb25maWcgZmlsZSBpZiBuZWNlc3NhcnksIG1lcmdlIHRoZSByZXN1bHRzLCByZXNvbHZlIGFueVxuICogcmVsYXRpdmUgcGF0aHMsIGFuZCBhcHBseSBhbnkgZGVmYXVsdHMuXG4gKlxuICogSW5saW5lIGNvbmZpZyBhbHdheXMgaGFzIHByaW9yaXR5IG92ZXIgdXNlciBjb25maWcuIENsaSBmbGFncyBhcmUgcGFzc2VkIGFzIGlubGluZSBjb25maWcgaWYgc2V0LlxuICogSWYgdW5zZXQsIHVuZGVmaW5lZCBpcyBwYXNzZWQgaW4sIGxldHRpbmcgdGhpcyBmdW5jdGlvbiBkZWNpZGUgZGVmYXVsdCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRJbnRlcm5hbENvbmZpZyhcbiAgaW5saW5lQ29uZmlnOiBJbmxpbmVDb25maWcsXG4gIGNvbW1hbmQ6ICdidWlsZCcgfCAnc2VydmUnLFxuKTogUHJvbWlzZTxJbnRlcm5hbENvbmZpZz4ge1xuICAvLyBMb2FkIHVzZXIgY29uZmlnXG5cbiAgbGV0IHVzZXJDb25maWc6IFVzZXJDb25maWcgPSB7fTtcbiAgbGV0IHVzZXJDb25maWdNZXRhZGF0YTogSW50ZXJuYWxDb25maWdbJ3VzZXJDb25maWdNZXRhZGF0YSddIHwgdW5kZWZpbmVkO1xuICBpZiAoaW5saW5lQ29uZmlnLmNvbmZpZ0ZpbGUgIT09IGZhbHNlKSB7XG4gICAgY29uc3QgeyBjb25maWc6IGxvYWRlZENvbmZpZywgLi4ubWV0YWRhdGEgfSA9IGF3YWl0IGxvYWRDb25maWc8VXNlckNvbmZpZz4oe1xuICAgICAgbmFtZTogJ3d4dCcsXG4gICAgICBjd2Q6IGlubGluZUNvbmZpZy5yb290ID8/IHByb2Nlc3MuY3dkKCksXG4gICAgICByY0ZpbGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHVzZXJDb25maWcgPSBsb2FkZWRDb25maWcgPz8ge307XG4gICAgdXNlckNvbmZpZ01ldGFkYXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICAvLyBNZXJnZSBpdCBpbnRvIHRoZSBpbmxpbmUgY29uZmlnXG5cbiAgY29uc3QgbWVyZ2VkQ29uZmlnID0gbWVyZ2VJbmxpbmVDb25maWcoaW5saW5lQ29uZmlnLCB1c2VyQ29uZmlnKTtcblxuICAvLyBBcHBseSBkZWZhdWx0cyB0byBtYWtlIGludGVybmFsIGNvbmZpZy5cblxuICBjb25zdCBkZWJ1ZyA9IG1lcmdlZENvbmZpZy5kZWJ1ZyA/PyBmYWxzZTtcbiAgY29uc3QgbG9nZ2VyID0gbWVyZ2VkQ29uZmlnLmxvZ2dlciA/PyBjb25zb2xhO1xuICBpZiAoZGVidWcpIGxvZ2dlci5sZXZlbCA9IExvZ0xldmVscy5kZWJ1ZztcblxuICBjb25zdCBicm93c2VyID0gbWVyZ2VkQ29uZmlnLmJyb3dzZXIgPz8gJ2Nocm9tZSc7XG4gIGNvbnN0IG1hbmlmZXN0VmVyc2lvbiA9XG4gICAgbWVyZ2VkQ29uZmlnLm1hbmlmZXN0VmVyc2lvbiA/P1xuICAgIChicm93c2VyID09PSAnZmlyZWZveCcgfHwgYnJvd3NlciA9PT0gJ3NhZmFyaScgPyAyIDogMyk7XG4gIGNvbnN0IG1vZGUgPVxuICAgIG1lcmdlZENvbmZpZy5tb2RlID8/IChjb21tYW5kID09PSAnYnVpbGQnID8gJ3Byb2R1Y3Rpb24nIDogJ2RldmVsb3BtZW50Jyk7XG4gIGNvbnN0IGVudjogQ29uZmlnRW52ID0geyBicm93c2VyLCBjb21tYW5kLCBtYW5pZmVzdFZlcnNpb24sIG1vZGUgfTtcblxuICBjb25zdCByb290ID0gcGF0aC5yZXNvbHZlKFxuICAgIGlubGluZUNvbmZpZy5yb290ID8/IHVzZXJDb25maWcucm9vdCA/PyBwcm9jZXNzLmN3ZCgpLFxuICApO1xuICBjb25zdCB3eHREaXIgPSBwYXRoLnJlc29sdmUocm9vdCwgJy53eHQnKTtcbiAgY29uc3Qgc3JjRGlyID0gcGF0aC5yZXNvbHZlKHJvb3QsIG1lcmdlZENvbmZpZy5zcmNEaXIgPz8gcm9vdCk7XG4gIGNvbnN0IGVudHJ5cG9pbnRzRGlyID0gcGF0aC5yZXNvbHZlKFxuICAgIHNyY0RpcixcbiAgICBtZXJnZWRDb25maWcuZW50cnlwb2ludHNEaXIgPz8gJ2VudHJ5cG9pbnRzJyxcbiAgKTtcbiAgY29uc3QgcHVibGljRGlyID0gcGF0aC5yZXNvbHZlKHNyY0RpciwgbWVyZ2VkQ29uZmlnLnB1YmxpY0RpciA/PyAncHVibGljJyk7XG4gIGNvbnN0IHR5cGVzRGlyID0gcGF0aC5yZXNvbHZlKHd4dERpciwgJ3R5cGVzJyk7XG4gIGNvbnN0IG91dEJhc2VEaXIgPSBwYXRoLnJlc29sdmUocm9vdCwgJy5vdXRwdXQnKTtcbiAgY29uc3Qgb3V0RGlyID0gcGF0aC5yZXNvbHZlKG91dEJhc2VEaXIsIGAke2Jyb3dzZXJ9LW12JHttYW5pZmVzdFZlcnNpb259YCk7XG5cbiAgY29uc3QgcnVubmVyQ29uZmlnID0gYXdhaXQgbG9hZENvbmZpZzxFeHRlbnNpb25SdW5uZXJDb25maWc+KHtcbiAgICBuYW1lOiAnd2ViLWV4dCcsXG4gICAgY3dkOiByb290LFxuICAgIGdsb2JhbFJjOiB0cnVlLFxuICAgIHJjRmlsZTogJy53ZWJleHRyYycsXG4gICAgb3ZlcnJpZGVzOiBpbmxpbmVDb25maWcucnVubmVyLFxuICAgIGRlZmF1bHRzOiB1c2VyQ29uZmlnLnJ1bm5lcixcbiAgfSk7XG5cbiAgY29uc3QgZmluYWxDb25maWc6IEludGVybmFsQ29uZmlnID0ge1xuICAgIGJyb3dzZXIsXG4gICAgY29tbWFuZCxcbiAgICBkZWJ1ZyxcbiAgICBlbnRyeXBvaW50c0RpcixcbiAgICBlbnYsXG4gICAgZnNDYWNoZTogY3JlYXRlRnNDYWNoZSh3eHREaXIpLFxuICAgIGltcG9ydHM6IG1lcmdlZENvbmZpZy5pbXBvcnRzID8/IHt9LFxuICAgIGxvZ2dlcixcbiAgICBtYW5pZmVzdDogYXdhaXQgcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKGVudiwgbWVyZ2VkQ29uZmlnLm1hbmlmZXN0KSxcbiAgICBtYW5pZmVzdFZlcnNpb24sXG4gICAgbW9kZSxcbiAgICBvdXRCYXNlRGlyLFxuICAgIG91dERpcixcbiAgICBwdWJsaWNEaXIsXG4gICAgcm9vdCxcbiAgICBydW5uZXJDb25maWcsXG4gICAgc3JjRGlyLFxuICAgIHR5cGVzRGlyLFxuICAgIHZpdGU6ICgpID0+ICh7fSksIC8vIFJlYWwgdmFsdWUgYWRkZWQgYWZ0ZXIgdGhpcyBvYmplY3QgaXMgaW5pdGlhbGl6ZWQuXG4gICAgd3h0RGlyLFxuICAgIHppcDogcmVzb2x2ZUludGVybmFsWmlwQ29uZmlnKHJvb3QsIG1lcmdlZENvbmZpZyksXG4gICAgdHJhbnNmb3JtTWFuaWZlc3QobWFuaWZlc3QpIHtcbiAgICAgIHVzZXJDb25maWcudHJhbnNmb3JtTWFuaWZlc3Q/LihtYW5pZmVzdCk7XG4gICAgICBpbmxpbmVDb25maWcudHJhbnNmb3JtTWFuaWZlc3Q/LihtYW5pZmVzdCk7XG4gICAgfSxcbiAgICBhbmFseXNpczoge1xuICAgICAgZW5hYmxlZDogbWVyZ2VkQ29uZmlnLmFuYWx5c2lzPy5lbmFibGVkID8/IGZhbHNlLFxuICAgICAgdGVtcGxhdGU6IG1lcmdlZENvbmZpZy5hbmFseXNpcz8udGVtcGxhdGUgPz8gJ3RyZWVtYXAnLFxuICAgIH0sXG4gICAgdXNlckNvbmZpZ01ldGFkYXRhOiB1c2VyQ29uZmlnTWV0YWRhdGEgPz8ge30sXG4gIH07XG5cbiAgZmluYWxDb25maWcudml0ZSA9IChlbnYpID0+XG4gICAgcmVzb2x2ZUludGVybmFsVml0ZUNvbmZpZyhlbnYsIG1lcmdlZENvbmZpZywgZmluYWxDb25maWcpO1xuXG4gIHJldHVybiBmaW5hbENvbmZpZztcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZU1hbmlmZXN0Q29uZmlnKFxuICBlbnY6IENvbmZpZ0VudixcbiAgbWFuaWZlc3Q6IFVzZXJNYW5pZmVzdCB8IFByb21pc2U8VXNlck1hbmlmZXN0PiB8IFVzZXJNYW5pZmVzdEZuIHwgdW5kZWZpbmVkLFxuKTogUHJvbWlzZTxVc2VyTWFuaWZlc3Q+IHtcbiAgcmV0dXJuIGF3YWl0ICh0eXBlb2YgbWFuaWZlc3QgPT09ICdmdW5jdGlvbidcbiAgICA/IG1hbmlmZXN0KGVudilcbiAgICA6IG1hbmlmZXN0ID8/IHt9KTtcbn1cblxuLyoqXG4gKiBNZXJnZSB0aGUgaW5saW5lIGNvbmZpZyBhbmQgdXNlciBjb25maWcuIElubGluZSBjb25maWcgaXMgZ2l2ZW4gcHJpb3JpdHkuIERlZmF1bHRzIGFyZSBub3QgYXBwbGllZCBoZXJlLlxuICovXG5mdW5jdGlvbiBtZXJnZUlubGluZUNvbmZpZyhcbiAgaW5saW5lQ29uZmlnOiBJbmxpbmVDb25maWcsXG4gIHVzZXJDb25maWc6IFVzZXJDb25maWcsXG4pOiBJbmxpbmVDb25maWcge1xuICBsZXQgaW1wb3J0czogSW5saW5lQ29uZmlnWydpbXBvcnRzJ107XG4gIGlmIChpbmxpbmVDb25maWcuaW1wb3J0cyA9PT0gZmFsc2UgfHwgdXNlckNvbmZpZy5pbXBvcnRzID09PSBmYWxzZSkge1xuICAgIGltcG9ydHMgPSBmYWxzZTtcbiAgfSBlbHNlIGlmICh1c2VyQ29uZmlnLmltcG9ydHMgPT0gbnVsbCAmJiBpbmxpbmVDb25maWcuaW1wb3J0cyA9PSBudWxsKSB7XG4gICAgaW1wb3J0cyA9IHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICBpbXBvcnRzID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICAgIHVzZXJDb25maWcuaW1wb3J0cyA/PyB7fSxcbiAgICAgIGlubGluZUNvbmZpZy5pbXBvcnRzID8/IHt9LFxuICAgICk7XG4gIH1cbiAgY29uc3QgbWFuaWZlc3Q6IFVzZXJNYW5pZmVzdEZuID0gYXN5bmMgKGVudikgPT4ge1xuICAgIGNvbnN0IHVzZXIgPSBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCB1c2VyQ29uZmlnLm1hbmlmZXN0KTtcbiAgICBjb25zdCBpbmxpbmUgPSBhd2FpdCByZXNvbHZlTWFuaWZlc3RDb25maWcoZW52LCBpbmxpbmVDb25maWcubWFuaWZlc3QpO1xuICAgIHJldHVybiB2aXRlLm1lcmdlQ29uZmlnKHVzZXIsIGlubGluZSk7XG4gIH07XG4gIGNvbnN0IHZpdGVDb25maWcgPSBhc3luYyAoZW52OiBDb25maWdFbnYpOiBQcm9taXNlPFd4dFZpdGVDb25maWc+ID0+IHtcbiAgICBjb25zdCB1c2VyID0gYXdhaXQgdXNlckNvbmZpZy52aXRlPy4oZW52KTtcbiAgICBjb25zdCBpbmxpbmUgPSBhd2FpdCBpbmxpbmVDb25maWcudml0ZT8uKGVudik7XG4gICAgcmV0dXJuIHZpdGUubWVyZ2VDb25maWcodXNlciA/PyB7fSwgaW5saW5lID8/IHt9KTtcbiAgfTtcbiAgY29uc3QgcnVubmVyOiBJbmxpbmVDb25maWdbJ3J1bm5lciddID0gdml0ZS5tZXJnZUNvbmZpZyhcbiAgICB1c2VyQ29uZmlnLnJ1bm5lciA/PyB7fSxcbiAgICBpbmxpbmVDb25maWcucnVubmVyID8/IHt9LFxuICApO1xuICBjb25zdCB6aXA6IElubGluZUNvbmZpZ1snemlwJ10gPSB2aXRlLm1lcmdlQ29uZmlnKFxuICAgIHVzZXJDb25maWcuemlwID8/IHt9LFxuICAgIGlubGluZUNvbmZpZy56aXAgPz8ge30sXG4gICk7XG5cbiAgcmV0dXJuIHtcbiAgICByb290OiBpbmxpbmVDb25maWcucm9vdCA/PyB1c2VyQ29uZmlnLnJvb3QsXG4gICAgYnJvd3NlcjogaW5saW5lQ29uZmlnLmJyb3dzZXIgPz8gdXNlckNvbmZpZy5icm93c2VyLFxuICAgIG1hbmlmZXN0VmVyc2lvbjogaW5saW5lQ29uZmlnLm1hbmlmZXN0VmVyc2lvbiA/PyB1c2VyQ29uZmlnLm1hbmlmZXN0VmVyc2lvbixcbiAgICBjb25maWdGaWxlOiBpbmxpbmVDb25maWcuY29uZmlnRmlsZSxcbiAgICBkZWJ1ZzogaW5saW5lQ29uZmlnLmRlYnVnID8/IHVzZXJDb25maWcuZGVidWcsXG4gICAgZW50cnlwb2ludHNEaXI6IGlubGluZUNvbmZpZy5lbnRyeXBvaW50c0RpciA/PyB1c2VyQ29uZmlnLmVudHJ5cG9pbnRzRGlyLFxuICAgIGltcG9ydHMsXG4gICAgbG9nZ2VyOiBpbmxpbmVDb25maWcubG9nZ2VyID8/IHVzZXJDb25maWcubG9nZ2VyLFxuICAgIG1hbmlmZXN0LFxuICAgIG1vZGU6IGlubGluZUNvbmZpZy5tb2RlID8/IHVzZXJDb25maWcubW9kZSxcbiAgICBwdWJsaWNEaXI6IGlubGluZUNvbmZpZy5wdWJsaWNEaXIgPz8gdXNlckNvbmZpZy5wdWJsaWNEaXIsXG4gICAgcnVubmVyLFxuICAgIHNyY0RpcjogaW5saW5lQ29uZmlnLnNyY0RpciA/PyB1c2VyQ29uZmlnLnNyY0RpcixcbiAgICB2aXRlOiB2aXRlQ29uZmlnLFxuICAgIHppcCxcbiAgICBhbmFseXNpczoge1xuICAgICAgZW5hYmxlZDogaW5saW5lQ29uZmlnLmFuYWx5c2lzPy5lbmFibGVkID8/IHVzZXJDb25maWcuYW5hbHlzaXM/LmVuYWJsZWQsXG4gICAgICB0ZW1wbGF0ZTpcbiAgICAgICAgaW5saW5lQ29uZmlnLmFuYWx5c2lzPy50ZW1wbGF0ZSA/PyB1c2VyQ29uZmlnLmFuYWx5c2lzPy50ZW1wbGF0ZSxcbiAgICB9LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlSW50ZXJuYWxaaXBDb25maWcoXG4gIHJvb3Q6IHN0cmluZyxcbiAgbWVyZ2VkQ29uZmlnOiBJbmxpbmVDb25maWcsXG4pOiBJbnRlcm5hbENvbmZpZ1snemlwJ10ge1xuICByZXR1cm4ge1xuICAgIHNvdXJjZXNUZW1wbGF0ZTogJ3t7bmFtZX19LXt7dmVyc2lvbn19LXNvdXJjZXMuemlwJyxcbiAgICBhcnRpZmFjdFRlbXBsYXRlOiAne3tuYW1lfX0te3t2ZXJzaW9ufX0te3ticm93c2VyfX0uemlwJyxcbiAgICBzb3VyY2VzUm9vdDogcm9vdCxcbiAgICAuLi5tZXJnZWRDb25maWcuemlwLFxuICAgIGlnbm9yZWRTb3VyY2VzOiBbXG4gICAgICAnKiovbm9kZV9tb2R1bGVzJyxcbiAgICAgIC8vIFdYVCBmaWxlc1xuICAgICAgJyoqL3dlYi1leHQuY29uZmlnLnRzJyxcbiAgICAgIC8vIEhpZGRlbiBmaWxlc1xuICAgICAgJyoqLy4qJyxcbiAgICAgIC8vIFRlc3RzXG4gICAgICAnKiovX190ZXN0c19fLyoqJyxcbiAgICAgICcqKi8qLisodGVzdHxzcGVjKS4/KGN8bSkrKGp8dClzPyh4KScsXG4gICAgICAvLyBGcm9tIHVzZXJcbiAgICAgIC4uLihtZXJnZWRDb25maWcuemlwPy5pZ25vcmVkU291cmNlcyA/PyBbXSksXG4gICAgXSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZUludGVybmFsVml0ZUNvbmZpZyhcbiAgZW52OiBDb25maWdFbnYsXG4gIG1lcmdlZENvbmZpZzogSW5saW5lQ29uZmlnLFxuICBmaW5hbENvbmZpZzogSW50ZXJuYWxDb25maWcsXG4pIHtcbiAgY29uc3QgaW50ZXJuYWxWaXRlOiB2aXRlLklubGluZUNvbmZpZyA9XG4gICAgKGF3YWl0IG1lcmdlZENvbmZpZy52aXRlPy4oZW52KSkgPz8ge307XG5cbiAgaW50ZXJuYWxWaXRlLnJvb3QgPSBmaW5hbENvbmZpZy5yb290O1xuICBpbnRlcm5hbFZpdGUuY29uZmlnRmlsZSA9IGZhbHNlO1xuICBpbnRlcm5hbFZpdGUubG9nTGV2ZWwgPSAnd2Fybic7XG4gIGludGVybmFsVml0ZS5tb2RlID0gZW52Lm1vZGU7XG5cbiAgaW50ZXJuYWxWaXRlLmJ1aWxkID8/PSB7fTtcbiAgaW50ZXJuYWxWaXRlLmJ1aWxkLm91dERpciA9IGZpbmFsQ29uZmlnLm91dERpcjtcbiAgaW50ZXJuYWxWaXRlLmJ1aWxkLmVtcHR5T3V0RGlyID0gZmFsc2U7XG5cbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMgPz89IFtdO1xuICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuZG93bmxvYWQoZmluYWxDb25maWcpKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLmRldkh0bWxQcmVyZW5kZXIoZmluYWxDb25maWcpKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLnVuaW1wb3J0KGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2goXG4gICAgcGx1Z2lucy52aXJ0dWFsRW50cnlwb2ludCgnYmFja2dyb3VuZCcsIGZpbmFsQ29uZmlnKSxcbiAgKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChcbiAgICBwbHVnaW5zLnZpcnR1YWxFbnRyeXBvaW50KCdjb250ZW50LXNjcmlwdCcsIGZpbmFsQ29uZmlnKSxcbiAgKTtcbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChcbiAgICBwbHVnaW5zLnZpcnR1YWxFbnRyeXBvaW50KCd1bmxpc3RlZC1zY3JpcHQnLCBmaW5hbENvbmZpZyksXG4gICk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5kZXZTZXJ2ZXJHbG9iYWxzKGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy50c2NvbmZpZ1BhdGhzKGZpbmFsQ29uZmlnKSk7XG4gIGludGVybmFsVml0ZS5wbHVnaW5zLnB1c2gocGx1Z2lucy5ub29wQmFja2dyb3VuZCgpKTtcbiAgaWYgKGZpbmFsQ29uZmlnLmFuYWx5c2lzLmVuYWJsZWQpIHtcbiAgICBpbnRlcm5hbFZpdGUucGx1Z2lucy5wdXNoKHBsdWdpbnMuYnVuZGxlQW5hbHlzaXMoKSk7XG4gIH1cbiAgaW50ZXJuYWxWaXRlLnBsdWdpbnMucHVzaChwbHVnaW5zLmdsb2JhbHMoZmluYWxDb25maWcpKTtcblxuICByZXR1cm4gaW50ZXJuYWxWaXRlO1xufVxuIiwgImltcG9ydCBmcywgeyBlbnN1cmVEaXIgfSBmcm9tICdmcy1leHRyYSc7XG5pbXBvcnQgeyBGc0NhY2hlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgd3JpdGVGaWxlSWZEaWZmZXJlbnQgfSBmcm9tICcuL2ZzJztcblxuLyoqXG4gKiBBIGJhc2ljIGZpbGUgc3lzdGVtIGNhY2hlIHN0b3JlZCBhdCBgPHNyY0Rpcj4vLnd4dC9jYWNoZS88a2V5PmAuIEp1c3QgY2FjaGVzIGEgc3RyaW5nIGluIGFcbiAqIGZpbGUgZm9yIHRoZSBnaXZlbiBrZXkuXG4gKlxuICogQHBhcmFtIHNyY0RpciBBYnNvbHV0ZSBwYXRoIHRvIHNvdXJjZSBkaXJlY3RvcnkuIFNlZSBgSW50ZXJuYWxDb25maWcuc3JjRGlyYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnNDYWNoZSh3eHREaXI6IHN0cmluZyk6IEZzQ2FjaGUge1xuICBjb25zdCBnZXRQYXRoID0gKGtleTogc3RyaW5nKSA9PlxuICAgIHJlc29sdmUod3h0RGlyLCAnY2FjaGUnLCBlbmNvZGVVUklDb21wb25lbnQoa2V5KSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhc3luYyBzZXQoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgIGNvbnN0IHBhdGggPSBnZXRQYXRoKGtleSk7XG4gICAgICBhd2FpdCBlbnN1cmVEaXIoZGlybmFtZShwYXRoKSk7XG4gICAgICBhd2FpdCB3cml0ZUZpbGVJZkRpZmZlcmVudChwYXRoLCB2YWx1ZSk7XG4gICAgfSxcbiAgICBhc3luYyBnZXQoa2V5OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICAgICAgY29uc3QgcGF0aCA9IGdldFBhdGgoa2V5KTtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLCAndXRmLTgnKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iLCAiaW1wb3J0IGZzIGZyb20gJ2ZzLWV4dHJhJztcblxuLyoqXG4gKiBPbmx5IHdyaXRlIHRoZSBjb250ZW50cyB0byBhIGZpbGUgaWYgaXQgcmVzdWx0cyBpbiBhIGNoYW5nZS4gVGhpcyBwcmV2ZW50cyB1bm5lY2Vzc2FyeSBmaWxlXG4gKiB3YXRjaGVycyBmcm9tIGJlaW5nIHRyaWdnZXJlZCwgbGlrZSBXWFQncyBkZXYgc2VydmVyIG9yIHRoZSBUUyBsYW5ndWFnZSBzZXJ2ZXIgaW4gZWRpdG9ycy5cbiAqXG4gKiBAcGFyYW0gZmlsZSBUaGUgZmlsZSB0byB3cml0ZSB0by5cbiAqIEBwYXJhbSBuZXdDb250ZW50cyBUaGUgbmV3IHRleHQgY29udGVudCB0byB3cml0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZUlmRGlmZmVyZW50KFxuICBmaWxlOiBzdHJpbmcsXG4gIG5ld0NvbnRlbnRzOiBzdHJpbmcsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgZXhpc3RpbmdDb250ZW50cyA9IGF3YWl0IGZzXG4gICAgLnJlYWRGaWxlKGZpbGUsICd1dGYtOCcpXG4gICAgLmNhdGNoKCgpID0+IHVuZGVmaW5lZCk7XG5cbiAgaWYgKGV4aXN0aW5nQ29udGVudHMgIT09IG5ld0NvbnRlbnRzKSB7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGUsIG5ld0NvbnRlbnRzKTtcbiAgfVxufVxuIiwgImltcG9ydCAqIGFzIHZpdGUgZnJvbSAndml0ZSc7XG5pbXBvcnQge1xuICB1bmltcG9ydCxcbiAgZG93bmxvYWQsXG4gIHRzY29uZmlnUGF0aHMsXG4gIGdsb2JhbHMsXG4gIHdlYmV4dGVuc2lvblBvbHlmaWxsQWxpYXMsXG59IGZyb20gJy4uL2NvcmUvdml0ZS1wbHVnaW5zJztcbmltcG9ydCB7IGdldEludGVybmFsQ29uZmlnIH0gZnJvbSAnLi4vY29yZS91dGlscy9nZXRJbnRlcm5hbENvbmZpZyc7XG5pbXBvcnQgeyBJbmxpbmVDb25maWcgfSBmcm9tICcuLi9jb3JlL3R5cGVzJztcblxuLyoqXG4gKiBWaXRlIHBsdWdpbiB0aGF0IGNvbmZpZ3VyZXMgVml0ZXN0IHdpdGggZXZlcnl0aGluZyByZXF1aXJlZCB0byB0ZXN0IGEgV1hUIGV4dGVuc2lvbiwgYmFzZWQgb24gdGhlIGA8cm9vdD4vd3h0LmNvbmZpZy50c2BcbiAqXG4gKiBgYGB0c1xuICogLy8gdml0ZXN0LmNvbmZpZy50c1xuICogaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSAndml0ZXN0L2NvbmZpZyc7XG4gKiBpbXBvcnQgeyBBdXRvSW1wb3J0IH0gZnJvbSAnd3h0L3Rlc3RpbmcnO1xuICpcbiAqIGV4cG9ydCBkZWZhdWx0IGRlZmluZUNvbmZpZyh7XG4gKiAgIHBsdWdpbnM6IFtBdXRvSW1wb3J0KCldLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gaW5saW5lQ29uZmlnIEN1c3RvbWl6ZSBXWFQncyBjb25maWcgZm9yIHRlc3RpbmcuIEFueSBjb25maWcgc3BlY2lmaWVkIGhlcmUgb3ZlcnJpZGVzIHRoZSBjb25maWcgZnJvbSB5b3VyIGB3eHQuY29uZmlnLnRzYCBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gV3h0Vml0ZXN0KGlubGluZUNvbmZpZz86IElubGluZUNvbmZpZyk6IHZpdGUuUGx1Z2luT3B0aW9uIHtcbiAgcmV0dXJuIGdldEludGVybmFsQ29uZmlnKGlubGluZUNvbmZpZyA/PyB7fSwgJ3NlcnZlJykudGhlbigoY29uZmlnKSA9PiBbXG4gICAgd2ViZXh0ZW5zaW9uUG9seWZpbGxBbGlhcyhjb25maWcpLFxuICAgIHVuaW1wb3J0KGNvbmZpZyksXG4gICAgZ2xvYmFscyhjb25maWcpLFxuICAgIGRvd25sb2FkKGNvbmZpZyksXG4gICAgdHNjb25maWdQYXRocyhjb25maWcpLFxuICBdKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7O0FDQUEsMEJBQThDOzs7QUNDOUMsSUFBQUEsb0JBQXdDOzs7QUNEeEMsdUJBQXFCO0FBQ3JCLFdBQXNCO0FBTWYsU0FBU0MsZUFBY0MsT0FBc0I7QUFDbEQsU0FBWSxtQkFBY0EsS0FBSTtBQUNoQztBQVNPLElBQU0saUJBQWlCLENBQUMsT0FBTyxRQUFRLFFBQVEsUUFBUSxRQUFRLFFBQVE7QUFHdkUsSUFBTSx5QkFBeUIsS0FBSyxlQUFlLEtBQUssR0FBRyxDQUFDOzs7QURqQjVELFNBQVMsa0JBQ2QsZ0JBQ0EsV0FFUTtBQUNSLFFBQU0sZUFBZSxrQkFBQUMsUUFBSyxTQUFTLGdCQUFnQixTQUFTO0FBRTVELFFBQU0sT0FBTyxhQUFhLE1BQU0sWUFBWSxDQUFDLEVBQUUsQ0FBQztBQUVoRCxTQUFPO0FBQ1Q7OztBRVhBLHNCQUEwQjtBQUMxQixrQkFBdUQ7QUFHdkQsSUFBSSx1QkFBdUI7QUFLcEIsU0FBUyxpQkFBaUIsUUFBMkM7QUFDMUUsUUFBTSxlQUFlO0FBQ3JCLFFBQU0sMkJBQXVCO0FBQUEsSUFDM0IsT0FBTztBQUFBLElBQ1A7QUFBQSxFQUNGO0FBQ0EsUUFBTSx3QkFBd0I7QUFDOUIsUUFBTSxnQ0FBZ0MsT0FBTztBQUU3QyxTQUFPO0FBQUEsSUFDTDtBQUFB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QixtQkFBbUIsV0FBVztBQUFBLEVBQzFEO0FBQ0EsZUFBYSxRQUFRLEtBQWEsaUJBQWlCLFdBQVcsQ0FBQztBQUMvRCxlQUFhLFFBQVEsS0FBYSxjQUFjLFdBQVcsQ0FBQztBQUM1RCxlQUFhLFFBQVEsS0FBYSxlQUFlLENBQUM7QUFDbEQsTUFBSSxZQUFZLFNBQVMsU0FBUztBQUNoQyxpQkFBYSxRQUFRLEtBQWEsZUFBZSxDQUFDO0FBQUEsRUFDcEQ7QUFDQSxlQUFhLFFBQVEsS0FBYSxRQUFRLFdBQVcsQ0FBQztBQUV0RCxTQUFPO0FBQ1Q7OztBR3JPTyxTQUFTLFVBQVUsY0FBZ0Q7QUFDeEUsU0FBTyxrQkFBa0IsZ0JBQWdCLENBQUMsR0FBRyxPQUFPLEVBQUUsS0FBSyxDQUFDLFdBQVc7QUFBQSxJQUNyRSwwQkFBMEIsTUFBTTtBQUFBLElBQ2hDLFNBQVMsTUFBTTtBQUFBLElBQ2YsUUFBUSxNQUFNO0FBQUEsSUFDZCxTQUFTLE1BQU07QUFBQSxJQUNmLGNBQWMsTUFBTTtBQUFBLEVBQ3RCLENBQUM7QUFDSDsiLAogICJuYW1lcyI6IFsiaW1wb3J0X25vZGVfcGF0aCIsICJub3JtYWxpemVQYXRoIiwgInBhdGgiLCAicGF0aCIsICJpc09mZmxpbmUiLCAiZG5zIiwgImltcG9ydF9ub2RlX3BhdGgiLCAiaW1wb3J0X3BhdGgiLCAidW5pbXBvcnQiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImltcG9ydF9wYXRoIiwgIm5vcm1hbGl6ZVBhdGgiLCAiZnMiLCAiaW1wb3J0X25vZGVfcGF0aCIsICJwYXRoIiwgImltcG9ydF9ub2RlX3BhdGgiLCAidml0ZSIsICJpbXBvcnRfZnNfZXh0cmEiLCAiaW1wb3J0X3BhdGgiLCAiaW1wb3J0X2ZzX2V4dHJhIiwgImZzIiwgInBhdGgiLCAiZnMiLCAiY29uc29sYSIsICJwYXRoIiwgImVudiJdCn0K
|