@decohere/flux 0.0.1-dev.75 → 0.0.1-dev.77
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/commonjs/src/flux.command.js +3 -1
- package/commonjs/src/flux.module.js +6 -2
- package/commonjs/src/hot-reload-server.js +31 -169
- package/commonjs/src/index.js +5 -1
- package/commonjs/src/run.action.js +71 -0
- package/commonjs/src/run.command.js +67 -0
- package/commonjs/src/source-module-loader.js +216 -0
- package/es6/src/flux.command.js +3 -1
- package/es6/src/flux.module.js +6 -2
- package/es6/src/hot-reload-server.js +32 -129
- package/es6/src/index.js +2 -1
- package/es6/src/run.action.js +58 -0
- package/es6/src/run.command.js +57 -0
- package/es6/src/source-module-loader.js +160 -0
- package/package.json +6 -6
- package/types/src/flux.module.d.ts +2 -0
- package/types/src/hot-reload-server.d.ts +2 -14
- package/types/src/index.d.ts +3 -0
- package/types/src/run.action.d.ts +17 -0
- package/types/src/run.command.d.ts +11 -0
- package/types/src/source-module-loader.d.ts +49 -0
|
@@ -9,6 +9,7 @@ Object.defineProperty(exports, "FluxCommand", {
|
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
11
|
const _cli = require("@decohere/nexus/cli");
|
|
12
|
+
const _runcommand = require("./run.command.js");
|
|
12
13
|
const _servecommand = require("./serve.command.js");
|
|
13
14
|
class FluxCommand extends _cli.DecohereCommand {
|
|
14
15
|
constructor(commands, handler){
|
|
@@ -16,6 +17,7 @@ class FluxCommand extends _cli.DecohereCommand {
|
|
|
16
17
|
this.exitOverride();
|
|
17
18
|
this.registerSubcommand({
|
|
18
19
|
serve: _servecommand.ServeCommand,
|
|
20
|
+
run: _runcommand.RunCommand,
|
|
19
21
|
...commands
|
|
20
22
|
}, handler);
|
|
21
23
|
}
|
|
@@ -24,4 +26,4 @@ class FluxCommand extends _cli.DecohereCommand {
|
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2ZsdXguY29tbWFuZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHtcblx0dHlwZSBDb21tYW5kSGFuZGxlcixcblx0dHlwZSBDb21tYW5kUmVzcG9uc2UsXG5cdHR5cGUgQ29tbWFuZFR5cGUsXG5cdERlY29oZXJlQ29tbWFuZCxcbn0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jbGlcIjtcbmltcG9ydCB7IFJ1bkNvbW1hbmQgfSBmcm9tIFwiLi9ydW4uY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgU2VydmVDb21tYW5kIH0gZnJvbSBcIi4vc2VydmUuY29tbWFuZC5qc1wiO1xuXG5leHBvcnQgY2xhc3MgRmx1eENvbW1hbmQgZXh0ZW5kcyBEZWNvaGVyZUNvbW1hbmQge1xuXHRwdWJsaWMgY29uc3RydWN0b3IoY29tbWFuZHM6IFJlY29yZDxzdHJpbmcsIENvbW1hbmRUeXBlPiwgaGFuZGxlcjogQ29tbWFuZEhhbmRsZXIpIHtcblx0XHRzdXBlcihGbHV4Q29tbWFuZCk7XG5cdFx0dGhpcy5leGl0T3ZlcnJpZGUoKTtcblx0XHR0aGlzLnJlZ2lzdGVyU3ViY29tbWFuZCh7IHNlcnZlOiBTZXJ2ZUNvbW1hbmQsIHJ1bjogUnVuQ29tbWFuZCwgLi4uY29tbWFuZHMgfSwgaGFuZGxlcik7XG5cdH1cblxuXHRwdWJsaWMgcnVuKF9hY3Rpb25zOiBBY3Rpb25zLCBfb3B0aW9uczogbmV2ZXIpOiBQcm9taXNlPENvbW1hbmRSZXNwb25zZT4ge1xuXHRcdHJldHVybiB0aGlzLmhlbHAoKTtcblx0fVxufVxuIl0sIm5hbWVzIjpbIkZsdXhDb21tYW5kIiwiRGVjb2hlcmVDb21tYW5kIiwiY29tbWFuZHMiLCJoYW5kbGVyIiwiZXhpdE92ZXJyaWRlIiwicmVnaXN0ZXJTdWJjb21tYW5kIiwic2VydmUiLCJTZXJ2ZUNvbW1hbmQiLCJydW4iLCJSdW5Db21tYW5kIiwiX2FjdGlvbnMiLCJfb3B0aW9ucyIsImhlbHAiXSwibWFwcGluZ3MiOiI7Ozs7K0JBVWFBOzs7ZUFBQUE7OztxQkFKTjs0QkFDb0I7OEJBQ0U7QUFFdEIsTUFBTUEsb0JBQW9CQyxvQkFBZTtJQUMvQyxZQUFtQkMsUUFBcUMsRUFBRUMsT0FBdUIsQ0FBRTtRQUNsRixLQUFLLENBQUNIO1FBQ04sSUFBSSxDQUFDSSxZQUFZO1FBQ2pCLElBQUksQ0FBQ0Msa0JBQWtCLENBQUM7WUFBRUMsT0FBT0MsMEJBQVk7WUFBRUMsS0FBS0Msc0JBQVU7WUFBRSxHQUFHUCxRQUFRO1FBQUMsR0FBR0M7SUFDaEY7SUFFT0ssSUFBSUUsUUFBaUIsRUFBRUMsUUFBZSxFQUE0QjtRQUN4RSxPQUFPLElBQUksQ0FBQ0MsSUFBSTtJQUNqQjtBQUNEIn0=
|
|
@@ -13,14 +13,18 @@ const _cli = require("@decohere/nexus/cli");
|
|
|
13
13
|
const _deferredscriptrunner = require("./deferred-script-runner.js");
|
|
14
14
|
const _fluxcommand = require("./flux.command.js");
|
|
15
15
|
const _hotreloadserver = require("./hot-reload-server.js");
|
|
16
|
+
const _runaction = require("./run.action.js");
|
|
16
17
|
const _serveaction = require("./serve.action.js");
|
|
18
|
+
const _sourcemoduleloader = require("./source-module-loader.js");
|
|
17
19
|
class FluxModule extends _cli.ModuleManifest {
|
|
18
20
|
id = "flux";
|
|
19
21
|
command = _fluxcommand.FluxCommand;
|
|
20
22
|
actions = {
|
|
21
|
-
serve: _serveaction.ServeAction
|
|
23
|
+
serve: _serveaction.ServeAction,
|
|
24
|
+
run: _runaction.RunAction
|
|
22
25
|
};
|
|
23
26
|
registerServices(builder) {
|
|
27
|
+
builder.registerSingleton(_sourcemoduleloader.SourceModuleLoader);
|
|
24
28
|
builder.registerSingleton(_hotreloadserver.HotReloadServer);
|
|
25
29
|
builder.registerSingleton(_deferredscriptrunner.DeferredScriptRunner);
|
|
26
30
|
}
|
|
@@ -31,4 +35,4 @@ class FluxModule extends _cli.ModuleManifest {
|
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
37
|
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2ZsdXgubW9kdWxlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdvcmtzcGFjZUZhY3RvcnkgfSBmcm9tIFwiQGRlY29oZXJlL21lc2hcIjtcbmltcG9ydCB0eXBlIHsgV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHsgTW9kdWxlTWFuaWZlc3QgfSBmcm9tIFwiQGRlY29oZXJlL25leHVzL2NsaVwiO1xuaW1wb3J0IHR5cGUgeyBDb250YWluZXJCdWlsZGVyIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9jb21wb3NpdGlvblwiO1xuaW1wb3J0IHsgRGVmZXJyZWRTY3JpcHRSdW5uZXIgfSBmcm9tIFwiLi9kZWZlcnJlZC1zY3JpcHQtcnVubmVyLmpzXCI7XG5pbXBvcnQgeyBGbHV4Q29tbWFuZCB9IGZyb20gXCIuL2ZsdXguY29tbWFuZC5qc1wiO1xuaW1wb3J0IHsgSG90UmVsb2FkU2VydmVyIH0gZnJvbSBcIi4vaG90LXJlbG9hZC1zZXJ2ZXIuanNcIjtcbmltcG9ydCB7IFJ1bkFjdGlvbiB9IGZyb20gXCIuL3J1bi5hY3Rpb24uanNcIjtcbmltcG9ydCB7IFNlcnZlQWN0aW9uIH0gZnJvbSBcIi4vc2VydmUuYWN0aW9uLmpzXCI7XG5pbXBvcnQgeyBTb3VyY2VNb2R1bGVMb2FkZXIgfSBmcm9tIFwiLi9zb3VyY2UtbW9kdWxlLWxvYWRlci5qc1wiO1xuXG5leHBvcnQgY2xhc3MgRmx1eE1vZHVsZSBleHRlbmRzIE1vZHVsZU1hbmlmZXN0IHtcblx0cHVibGljIHJlYWRvbmx5IGlkID0gXCJmbHV4XCI7XG5cdHB1YmxpYyByZWFkb25seSBjb21tYW5kID0gRmx1eENvbW1hbmQ7XG5cdHB1YmxpYyByZWFkb25seSBhY3Rpb25zID0ge1xuXHRcdHNlcnZlOiBTZXJ2ZUFjdGlvbixcblx0XHRydW46IFJ1bkFjdGlvbixcblx0fTtcblxuXHRwdWJsaWMgcmVnaXN0ZXJTZXJ2aWNlcyhidWlsZGVyOiBDb250YWluZXJCdWlsZGVyKSB7XG5cdFx0YnVpbGRlci5yZWdpc3RlclNpbmdsZXRvbihTb3VyY2VNb2R1bGVMb2FkZXIpO1xuXHRcdGJ1aWxkZXIucmVnaXN0ZXJTaW5nbGV0b24oSG90UmVsb2FkU2VydmVyKTtcblx0XHRidWlsZGVyLnJlZ2lzdGVyU2luZ2xldG9uKERlZmVycmVkU2NyaXB0UnVubmVyKTtcblx0fVxuXG5cdHB1YmxpYyBvdmVycmlkZSBjcmVhdGVXb3Jrc3BhY2Uob3B0aW9uczogV29ya3NwYWNlRmFjdG9yeU9wdGlvbnMpIHtcblx0XHRyZXR1cm4gV29ya3NwYWNlRmFjdG9yeS5jcmVhdGUoeyBjb25maWdGaWxlOiBvcHRpb25zLmNvbmZpZ0ZpbGUgfSk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJGbHV4TW9kdWxlIiwiTW9kdWxlTWFuaWZlc3QiLCJpZCIsImNvbW1hbmQiLCJGbHV4Q29tbWFuZCIsImFjdGlvbnMiLCJzZXJ2ZSIsIlNlcnZlQWN0aW9uIiwicnVuIiwiUnVuQWN0aW9uIiwicmVnaXN0ZXJTZXJ2aWNlcyIsImJ1aWxkZXIiLCJyZWdpc3RlclNpbmdsZXRvbiIsIlNvdXJjZU1vZHVsZUxvYWRlciIsIkhvdFJlbG9hZFNlcnZlciIsIkRlZmVycmVkU2NyaXB0UnVubmVyIiwiY3JlYXRlV29ya3NwYWNlIiwib3B0aW9ucyIsIldvcmtzcGFjZUZhY3RvcnkiLCJjcmVhdGUiLCJjb25maWdGaWxlIl0sIm1hcHBpbmdzIjoiOzs7OytCQVdhQTs7O2VBQUFBOzs7c0JBWG9CO3FCQUVGO3NDQUVNOzZCQUNUO2lDQUNJOzJCQUNOOzZCQUNFO29DQUNPO0FBRTVCLE1BQU1BLG1CQUFtQkMsbUJBQWM7SUFDN0JDLEtBQUssT0FBTztJQUNaQyxVQUFVQyx3QkFBVyxDQUFDO0lBQ3RCQyxVQUFVO1FBQ3pCQyxPQUFPQyx3QkFBVztRQUNsQkMsS0FBS0Msb0JBQVM7SUFDZixFQUFFO0lBRUtDLGlCQUFpQkMsT0FBeUIsRUFBRTtRQUNsREEsUUFBUUMsaUJBQWlCLENBQUNDLHNDQUFrQjtRQUM1Q0YsUUFBUUMsaUJBQWlCLENBQUNFLGdDQUFlO1FBQ3pDSCxRQUFRQyxpQkFBaUIsQ0FBQ0csMENBQW9CO0lBQy9DO0lBRWdCQyxnQkFBZ0JDLE9BQWdDLEVBQUU7UUFDakUsT0FBT0Msc0JBQWdCLENBQUNDLE1BQU0sQ0FBQztZQUFFQyxZQUFZSCxRQUFRRyxVQUFVO1FBQUM7SUFDakU7QUFDRCJ9
|
|
@@ -20,60 +20,16 @@ _export(exports, {
|
|
|
20
20
|
}
|
|
21
21
|
});
|
|
22
22
|
const _nodeevents = require("node:events");
|
|
23
|
-
const _nodemodule = require("node:module");
|
|
24
23
|
const _nodepath = /*#__PURE__*/ _interop_require_default(require("node:path"));
|
|
25
|
-
const _forge = require("@decohere/forge");
|
|
26
|
-
const _mesh = require("@decohere/mesh");
|
|
27
24
|
const _io = require("@decohere/nexus/io");
|
|
28
25
|
const _system = require("@decohere/nexus/system");
|
|
29
26
|
const _scribe = require("@decohere/scribe");
|
|
30
|
-
const
|
|
27
|
+
const _sourcemoduleloader = require("./source-module-loader.js");
|
|
31
28
|
function _interop_require_default(obj) {
|
|
32
29
|
return obj && obj.__esModule ? obj : {
|
|
33
30
|
default: obj
|
|
34
31
|
};
|
|
35
32
|
}
|
|
36
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
37
|
-
if (typeof WeakMap !== "function") return null;
|
|
38
|
-
var cacheBabelInterop = new WeakMap();
|
|
39
|
-
var cacheNodeInterop = new WeakMap();
|
|
40
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
41
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
42
|
-
})(nodeInterop);
|
|
43
|
-
}
|
|
44
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
45
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
46
|
-
return obj;
|
|
47
|
-
}
|
|
48
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
49
|
-
return {
|
|
50
|
-
default: obj
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
54
|
-
if (cache && cache.has(obj)) {
|
|
55
|
-
return cache.get(obj);
|
|
56
|
-
}
|
|
57
|
-
var newObj = {
|
|
58
|
-
__proto__: null
|
|
59
|
-
};
|
|
60
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
61
|
-
for(var key in obj){
|
|
62
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
63
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
64
|
-
if (desc && (desc.get || desc.set)) {
|
|
65
|
-
Object.defineProperty(newObj, key, desc);
|
|
66
|
-
} else {
|
|
67
|
-
newObj[key] = obj[key];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
newObj.default = obj;
|
|
72
|
-
if (cache) {
|
|
73
|
-
cache.set(obj, newObj);
|
|
74
|
-
}
|
|
75
|
-
return newObj;
|
|
76
|
-
}
|
|
77
33
|
const currentFilePath = _io.io.fileUrlToPath(require("url").pathToFileURL(__filename).toString());
|
|
78
34
|
const VERSION_URL_PARAM = "version";
|
|
79
35
|
const DEFAULT_REBOOT_DEBOUNCE_MS = 250;
|
|
@@ -88,20 +44,13 @@ function resolveRebootDebounceMs(value) {
|
|
|
88
44
|
class HotReloadServer extends _nodeevents.EventEmitter {
|
|
89
45
|
// ── State ────────────────────────────────────────────────────────────────
|
|
90
46
|
logger = _scribe.scribe.logger(HotReloadServer.name);
|
|
47
|
+
loader = new _sourcemoduleloader.SourceModuleLoader();
|
|
91
48
|
disposed = false;
|
|
92
|
-
hooksRegistered = false;
|
|
93
49
|
/** Absolute entry paths currently served (one or more Flux apps). */ entries = new Map();
|
|
94
50
|
pendingEntryReboots = new Set();
|
|
95
|
-
workspace;
|
|
96
|
-
buildConfig = "debug";
|
|
97
51
|
watchSubscription;
|
|
98
|
-
/** Map from absolute .ts source file path to project info */ fileInfoMap = new Map();
|
|
99
52
|
moduleCache = new Map();
|
|
100
53
|
dependencies = new Map();
|
|
101
|
-
transpileCache = new Map();
|
|
102
|
-
transpiler = new _forge.SwcTranspiler();
|
|
103
|
-
aliasPaths = {};
|
|
104
|
-
aliasBaseUrl = _nodepath.default.resolve(".");
|
|
105
54
|
rebootTail = Promise.resolve();
|
|
106
55
|
rebootDebounceGen = 0;
|
|
107
56
|
rebootInFlight = false;
|
|
@@ -113,7 +62,6 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
113
62
|
this.disposed = false;
|
|
114
63
|
this.dependencies.clear();
|
|
115
64
|
this.moduleCache.clear();
|
|
116
|
-
this.transpileCache.clear();
|
|
117
65
|
this.entries.clear();
|
|
118
66
|
this.pendingEntryReboots.clear();
|
|
119
67
|
this.rebootTail = Promise.resolve();
|
|
@@ -122,8 +70,13 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
122
70
|
this.rebootQueued = false;
|
|
123
71
|
this.bindScheduleReboot(resolveRebootDebounceMs(options.rebootDebounceMs));
|
|
124
72
|
const { buildConfig } = options;
|
|
125
|
-
this.
|
|
126
|
-
|
|
73
|
+
await this.loader.configure({
|
|
74
|
+
buildConfig,
|
|
75
|
+
workspace: options.workspace,
|
|
76
|
+
versionFileUrl: (fileUrl)=>this.getCachedOrNew(fileUrl),
|
|
77
|
+
onResolved: this.onPostResolve
|
|
78
|
+
});
|
|
79
|
+
const workspace = this.requireWorkspace();
|
|
127
80
|
const selected = this.resolveProjects(buildConfig, options);
|
|
128
81
|
for (const project of selected){
|
|
129
82
|
const entryPath = _nodepath.default.resolve(project.getSourceEntryPath());
|
|
@@ -131,12 +84,10 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
131
84
|
path: entryPath
|
|
132
85
|
});
|
|
133
86
|
}
|
|
134
|
-
this.
|
|
135
|
-
this.aliasPaths = await this.buildAliasPaths();
|
|
136
|
-
this.registerHooks();
|
|
87
|
+
this.loader.registerHooks();
|
|
137
88
|
this.invalidateAllSourceFiles();
|
|
138
|
-
await
|
|
139
|
-
this.watchSubscription =
|
|
89
|
+
await workspace.watch(buildConfig);
|
|
90
|
+
this.watchSubscription = workspace.projectFileChanged$.subscribe(this.onFileChange);
|
|
140
91
|
for (const entry of this.entries.values()){
|
|
141
92
|
this.logger.trace(`Serving ${entry.path}`);
|
|
142
93
|
}
|
|
@@ -150,11 +101,11 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
150
101
|
this.disposed = true;
|
|
151
102
|
this.rebootDebounceGen += 1;
|
|
152
103
|
this.watchSubscription?.unsubscribe();
|
|
153
|
-
this.workspace?.[Symbol.dispose]();
|
|
154
104
|
await this.rebootTail;
|
|
155
105
|
await this.disposeEntries([
|
|
156
106
|
...this.entries.keys()
|
|
157
107
|
]);
|
|
108
|
+
this.loader.dispose();
|
|
158
109
|
}
|
|
159
110
|
async [Symbol.asyncDispose]() {
|
|
160
111
|
await this.dispose();
|
|
@@ -167,8 +118,8 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
167
118
|
const state = this.entries.get(entryPath);
|
|
168
119
|
if (state == null) return;
|
|
169
120
|
try {
|
|
170
|
-
const
|
|
171
|
-
state.module =
|
|
121
|
+
const mod = await this.loader.importEntry(entryPath);
|
|
122
|
+
state.module = mod?.default;
|
|
172
123
|
} catch (error) {
|
|
173
124
|
state.module = undefined;
|
|
174
125
|
this.logger.error("There was an error booting the entry point. Your application may not function as expected", error);
|
|
@@ -239,14 +190,15 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
239
190
|
}
|
|
240
191
|
}
|
|
241
192
|
// ── Setup ────────────────────────────────────────────────────────────────
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
}
|
|
193
|
+
requireWorkspace() {
|
|
194
|
+
const workspace = this.loader.getWorkspace();
|
|
195
|
+
if (workspace == null) {
|
|
196
|
+
throw new Error("SourceModuleLoader has no workspace after configure");
|
|
197
|
+
}
|
|
198
|
+
return workspace;
|
|
247
199
|
}
|
|
248
200
|
resolveProjects(buildConfig, options) {
|
|
249
|
-
const projects = this.
|
|
201
|
+
const projects = this.loader.getWorkspace()?.getProjects(buildConfig) ?? [];
|
|
250
202
|
const names = options.projects != null && options.projects.length > 0 ? options.projects : options.project != null ? [
|
|
251
203
|
options.project
|
|
252
204
|
] : undefined;
|
|
@@ -269,57 +221,6 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
269
221
|
}
|
|
270
222
|
return selected;
|
|
271
223
|
}
|
|
272
|
-
async buildFileInfoMap(buildConfig) {
|
|
273
|
-
const projects = this.workspace?.getProjects(buildConfig) ?? [];
|
|
274
|
-
const entries = await Promise.all(projects.map(async (project)=>{
|
|
275
|
-
const files = await project.getAllFiles();
|
|
276
|
-
return files.map((file)=>[
|
|
277
|
-
file.fullPath,
|
|
278
|
-
{
|
|
279
|
-
project
|
|
280
|
-
}
|
|
281
|
-
]);
|
|
282
|
-
}));
|
|
283
|
-
return new Map(entries.flat());
|
|
284
|
-
}
|
|
285
|
-
registerHooks() {
|
|
286
|
-
if (this.hooksRegistered) return;
|
|
287
|
-
this.hooksRegistered = true;
|
|
288
|
-
(0, _nodemodule.registerHooks)({
|
|
289
|
-
resolve: (specifier, context, next)=>{
|
|
290
|
-
if (this.disposed) return next(specifier, context);
|
|
291
|
-
const parentUrl = context.parentURL ?? "";
|
|
292
|
-
const rewritten = (0, _rewriteservespecifier.rewriteServeSpecifier)({
|
|
293
|
-
specifier,
|
|
294
|
-
parentUrl,
|
|
295
|
-
isWatchedTs: (filePath)=>this.fileInfoMap.has(filePath),
|
|
296
|
-
resolveBare: (bare)=>_mesh.packageAliases.resolvePath(bare, this.aliasPaths, this.aliasBaseUrl),
|
|
297
|
-
versionFileUrl: (fileUrl)=>this.getCachedOrNew(fileUrl)
|
|
298
|
-
}) ?? specifier;
|
|
299
|
-
const result = next(rewritten, context);
|
|
300
|
-
this.onPostResolve(result, parentUrl);
|
|
301
|
-
return result;
|
|
302
|
-
},
|
|
303
|
-
load: (url, context, next)=>{
|
|
304
|
-
if (this.disposed) return next(url, context);
|
|
305
|
-
const result = this.loadTs(url);
|
|
306
|
-
if (result != null) return {
|
|
307
|
-
format: "module",
|
|
308
|
-
source: result.source,
|
|
309
|
-
shortCircuit: true
|
|
310
|
-
};
|
|
311
|
-
return next(url, context);
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
}
|
|
315
|
-
// ── Module hooks ─────────────────────────────────────────────────────────
|
|
316
|
-
async buildAliasPaths() {
|
|
317
|
-
const workspace = this.workspace;
|
|
318
|
-
if (workspace == null) return {};
|
|
319
|
-
const packageAliases = workspace.getPackageAliases(this.buildConfig);
|
|
320
|
-
this.aliasBaseUrl = packageAliases.baseUrl;
|
|
321
|
-
return packageAliases.paths;
|
|
322
|
-
}
|
|
323
224
|
/**
|
|
324
225
|
* Post-next dependency tracker: records which source files import which
|
|
325
226
|
* other source files so that reloadIfAffected can traverse the graph.
|
|
@@ -340,60 +241,25 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
340
241
|
} catch {
|
|
341
242
|
parentPath = "";
|
|
342
243
|
}
|
|
343
|
-
const isSource = this.
|
|
344
|
-
const parentIsSource = this.
|
|
244
|
+
const isSource = this.loader.hasSourceFile(filePath);
|
|
245
|
+
const parentIsSource = this.loader.hasSourceFile(parentPath);
|
|
345
246
|
if (isSource || parentIsSource) {
|
|
346
247
|
this.trackDependency(filePath, parentPath);
|
|
347
248
|
}
|
|
348
249
|
};
|
|
349
|
-
loadTs = (url)=>{
|
|
350
|
-
if (!url.startsWith("file:")) return null;
|
|
351
|
-
const cleanPath = new URL(url).pathname;
|
|
352
|
-
const fileInfo = this.fileInfoMap.get(cleanPath);
|
|
353
|
-
if (fileInfo == null) return null;
|
|
354
|
-
const cached = this.transpileCache.get(cleanPath);
|
|
355
|
-
if (cached != null) return {
|
|
356
|
-
source: cached
|
|
357
|
-
};
|
|
358
|
-
const { project } = fileInfo;
|
|
359
|
-
const tsConfig = project.getTsConfigSync();
|
|
360
|
-
const userConfig = project.getSwcConfigSync();
|
|
361
|
-
const file = new _io.FileEx({
|
|
362
|
-
fullPath: cleanPath
|
|
363
|
-
});
|
|
364
|
-
const response = this.transpiler.transformFileSync(file, _forge.BuildTargets.es6, {
|
|
365
|
-
tsConfig,
|
|
366
|
-
aliasPaths: true,
|
|
367
|
-
userConfig,
|
|
368
|
-
workspace: this.workspace,
|
|
369
|
-
projects: this.workspace?.getProjects(this.buildConfig)
|
|
370
|
-
});
|
|
371
|
-
if (response.outcome !== "success") {
|
|
372
|
-
this.logger.error(`Failed to transpile ${cleanPath}`, response);
|
|
373
|
-
// Do not fall through to next(): Vitest/Node loaders can deadlock on a
|
|
374
|
-
// versioned .ts URL. Fail the import so bootEntry can catch and continue.
|
|
375
|
-
throw new Error(`Failed to transpile ${cleanPath}`);
|
|
376
|
-
}
|
|
377
|
-
this.transpileCache.set(cleanPath, response.code);
|
|
378
|
-
return {
|
|
379
|
-
source: response.code
|
|
380
|
-
};
|
|
381
|
-
};
|
|
382
250
|
// ── File watching ────────────────────────────────────────────────────────
|
|
383
251
|
onFileChange = (evt)=>{
|
|
384
252
|
const { file, eventName, project } = evt;
|
|
385
253
|
const fullPath = file.fullPath;
|
|
386
254
|
this.logger.trace(`File ${eventName}: ${fullPath}`);
|
|
387
255
|
if (eventName === _io.io.WatchEvents.unlink) {
|
|
388
|
-
this.
|
|
256
|
+
this.loader.invalidateTranspile(fullPath);
|
|
389
257
|
this.moduleCache.set(fullPath, null);
|
|
390
258
|
return;
|
|
391
259
|
}
|
|
392
260
|
if (eventName === _io.io.WatchEvents.add) {
|
|
393
261
|
if (project.isSourceFile(file)) {
|
|
394
|
-
this.
|
|
395
|
-
project
|
|
396
|
-
});
|
|
262
|
+
this.loader.setSourceFile(fullPath, project);
|
|
397
263
|
this.moduleCache.set(fullPath, null);
|
|
398
264
|
this.reloadIfAffected(fullPath);
|
|
399
265
|
}
|
|
@@ -401,10 +267,7 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
401
267
|
}
|
|
402
268
|
// change
|
|
403
269
|
if (!project.isSourceFile(file)) return;
|
|
404
|
-
this.
|
|
405
|
-
this.transpiler.invalidateContentCache(new _io.FileEx({
|
|
406
|
-
fullPath
|
|
407
|
-
}));
|
|
270
|
+
this.loader.invalidateTranspile(fullPath);
|
|
408
271
|
this.reloadIfAffected(fullPath);
|
|
409
272
|
};
|
|
410
273
|
reloadIfAffected(fullPath) {
|
|
@@ -440,7 +303,7 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
440
303
|
}
|
|
441
304
|
let subDeps = [];
|
|
442
305
|
for (const dep of moduleDeps){
|
|
443
|
-
if (!this.
|
|
306
|
+
if (!this.loader.hasSourceFile(dep)) continue;
|
|
444
307
|
const subs = this.getDependencyGraph(dep, [
|
|
445
308
|
moduleId,
|
|
446
309
|
...parentModules
|
|
@@ -484,7 +347,7 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
484
347
|
invalidateModule(...modules) {
|
|
485
348
|
for (const module of modules){
|
|
486
349
|
this.moduleCache.set(module, null);
|
|
487
|
-
this.
|
|
350
|
+
this.loader.invalidateTranspile(module);
|
|
488
351
|
// Prune stale outgoing edges: remove this module as a parent from all dependency lists
|
|
489
352
|
for (const [key, parents] of this.dependencies){
|
|
490
353
|
const filtered = parents.filter((p)=>p !== module);
|
|
@@ -497,14 +360,13 @@ class HotReloadServer extends _nodeevents.EventEmitter {
|
|
|
497
360
|
}
|
|
498
361
|
}
|
|
499
362
|
invalidateAllSourceFiles() {
|
|
500
|
-
for (const filePath of this.
|
|
363
|
+
for (const filePath of this.loader.sourceFilePaths()){
|
|
501
364
|
this.moduleCache.set(filePath, null);
|
|
502
365
|
}
|
|
503
366
|
}
|
|
504
|
-
// ── Utilities ────────────────────────────────────────────────────────────
|
|
505
367
|
isSelf(filePath) {
|
|
506
368
|
return currentFilePath === _nodepath.default.resolve(filePath);
|
|
507
369
|
}
|
|
508
370
|
}
|
|
509
371
|
|
|
510
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2hvdC1yZWxvYWQtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHR5cGUge1xuXHRMb2FkRm5PdXRwdXQsXG5cdExvYWRIb29rQ29udGV4dCxcblx0UmVzb2x2ZUZuT3V0cHV0LFxuXHRSZXNvbHZlSG9va0NvbnRleHQsXG59IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHsgcmVnaXN0ZXJIb29rcyB9IGZyb20gXCJub2RlOm1vZHVsZVwiO1xuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHsgQnVpbGRUYXJnZXRzLCBTd2NUcmFuc3BpbGVyLCBXb3Jrc3BhY2VEZWZhdWx0cyB9IGZyb20gXCJAZGVjb2hlcmUvZm9yZ2VcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCwgUHJvamVjdEZpbGVFdmVudCwgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBwYWNrYWdlQWxpYXNlcywgV29ya3NwYWNlRmFjdG9yeSB9IGZyb20gXCJAZGVjb2hlcmUvbWVzaFwiO1xuaW1wb3J0IHsgRmlsZUV4LCBpbyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyLCBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgcmV3cml0ZVNlcnZlU3BlY2lmaWVyIH0gZnJvbSBcIi4vcmV3cml0ZS1zZXJ2ZS1zcGVjaWZpZXIuanNcIjtcblxudHlwZSBMb2FkRGVsZWdhdGUgPSAodXJsOiBzdHJpbmcpID0+IHsgc291cmNlOiBzdHJpbmcgfSB8IG51bGw7XG5cbmNvbnN0IGN1cnJlbnRGaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcbmNvbnN0IFZFUlNJT05fVVJMX1BBUkFNID0gXCJ2ZXJzaW9uXCI7XG4vKiogRGVmYXVsdCBxdWlldCB3aW5kb3cgYmVmb3JlIGEgZmlsZS1jaGFuZ2UgcmVib290LiAqL1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TID0gMjUwO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVJlYm9vdERlYm91bmNlTXModmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB7XG5cdGNvbnN0IGRlbGF5ID0gdmFsdWUgPz8gREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVM7XG5cdGlmICghTnVtYmVyLmlzRmluaXRlKGRlbGF5KSB8fCBkZWxheSA8IDApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYHJlYm9vdERlYm91bmNlTXMgbXVzdCBiZSBhIG5vbi1uZWdhdGl2ZSBudW1iZXIsIGdvdCAke1N0cmluZyh2YWx1ZSl9YCk7XG5cdH1cblx0cmV0dXJuIGRlbGF5O1xufVxuXG4vKiogUHJvY2Vzcy13aWRlOiBOb2RlJ3MgRVNNIGNhY2hlIGlzIHByb2Nlc3MtZ2xvYmFsLCBpbmNsdWRpbmcgYWNyb3NzIEhvdFJlbG9hZFNlcnZlciBpbnN0YW5jZXMuICovXG5sZXQgbW9kdWxlVmVyc2lvblNlcSA9IDA7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90UmVsb2FkU2VydmVyRXZlbnRzIHtcblx0c3RhcnQ6IFtdO1xuXHRyZWJvb3Q6IFtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhvdFJlbG9hZFNlcnZlck9wdGlvbnMge1xuXHQvKiogQnVpbGQgY29uZmlndXJhdGlvbiBuYW1lLiAqL1xuXHRidWlsZENvbmZpZzogc3RyaW5nO1xuXHQvKiogTmFtZSBvZiB0aGUgcHJvamVjdCB0byBzZXJ2ZS4gRGVmYXVsdHMgdG8gdGhlIGZpcnN0IHByb2plY3QgaW4gdGhlIHdvcmtzcGFjZS4gKi9cblx0cHJvamVjdD86IHN0cmluZztcblx0LyoqXG5cdCAqIE11bHRpcGxlIEZsdXggYXBwIHBhY2thZ2UgbmFtZXMgdG8gYm9vdCBpbiBvbmUgcHJvY2VzcyAoZGlyZWN0b3J5IHNsaWNlKS5cblx0ICogV2hlbiBzZXQsIHRha2VzIHByZWNlZGVuY2Ugb3ZlciB7QGxpbmsgcHJvamVjdH0uXG5cdCAqL1xuXHRwcm9qZWN0cz86IHJlYWRvbmx5IHN0cmluZ1tdO1xuXHQvKipcblx0ICogUHJlLWJ1aWx0IFdvcmtzcGFjZSBpbnN0YW5jZSB0byB1c2UgaW5zdGVhZCBvZiBydW5uaW5nIFdvcmtzcGFjZUZhY3RvcnkuXG5cdCAqIFVzZWZ1bCBpbiB0ZXN0cyB0byBieXBhc3MgZmlsZXN5c3RlbS1iYXNlZCB3b3Jrc3BhY2UgZGlzY292ZXJ5LlxuXHQgKi9cblx0d29ya3NwYWNlPzogV29ya3NwYWNlO1xuXHQvKipcblx0ICogUXVpZXQgd2luZG93IGluIG1pbGxpc2Vjb25kcyBhZnRlciB0aGUgbGFzdCBhZmZlY3Rpbmcgc2F2ZSBiZWZvcmUgYSByZWJvb3QuXG5cdCAqIERlZmF1bHRzIHRvIHtAbGluayBERUZBVUxUX1JFQk9PVF9ERUJPVU5DRV9NU30uIFJhaXNlIHRoaXMgZm9yIGFnZW50IHNhdmUgdHJhaW5zLlxuXHQgKi9cblx0cmVib290RGVib3VuY2VNcz86IG51bWJlcjtcbn1cblxudHlwZSBGaWxlSW5mbyA9IHsgcHJvamVjdDogUHJvamVjdCB9O1xudHlwZSBFbnRyeVN0YXRlID0geyBwYXRoOiBzdHJpbmc7IG1vZHVsZT86IEFzeW5jRGlzcG9zYWJsZSB9O1xuXG5leHBvcnQgY2xhc3MgSG90UmVsb2FkU2VydmVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyPEhvdFJlbG9hZFNlcnZlckV2ZW50cz4ge1xuXHQvLyDilIDilIAgU3RhdGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cdHByaXZhdGUgcmVhZG9ubHkgbG9nZ2VyOiBMb2dnZXIgPSBzY3JpYmUubG9nZ2VyKEhvdFJlbG9hZFNlcnZlci5uYW1lKTtcblx0cHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuXHRwcml2YXRlIGhvb2tzUmVnaXN0ZXJlZCA9IGZhbHNlO1xuXHQvKiogQWJzb2x1dGUgZW50cnkgcGF0aHMgY3VycmVudGx5IHNlcnZlZCAob25lIG9yIG1vcmUgRmx1eCBhcHBzKS4gKi9cblx0cHJpdmF0ZSBlbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIEVudHJ5U3RhdGU+KCk7XG5cdHByaXZhdGUgcGVuZGluZ0VudHJ5UmVib290cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRwcml2YXRlIHdvcmtzcGFjZT86IFdvcmtzcGFjZTtcblx0cHJpdmF0ZSBidWlsZENvbmZpZyA9IFwiZGVidWdcIjtcblx0cHJpdmF0ZSB3YXRjaFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcblx0LyoqIE1hcCBmcm9tIGFic29sdXRlIC50cyBzb3VyY2UgZmlsZSBwYXRoIHRvIHByb2plY3QgaW5mbyAqL1xuXHRwcml2YXRlIGZpbGVJbmZvTWFwID0gbmV3IE1hcDxzdHJpbmcsIEZpbGVJbmZvPigpO1xuXHRwcml2YXRlIG1vZHVsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KCk7XG5cdHByaXZhdGUgZGVwZW5kZW5jaWVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuXHRwcml2YXRlIHRyYW5zcGlsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcblx0cHJpdmF0ZSB0cmFuc3BpbGVyID0gbmV3IFN3Y1RyYW5zcGlsZXIoKTtcblx0cHJpdmF0ZSBhbGlhc1BhdGhzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fTtcblx0cHJpdmF0ZSBhbGlhc0Jhc2VVcmwgPSBwYXRoLnJlc29sdmUoXCIuXCIpO1xuXHRwcml2YXRlIHJlYm9vdFRhaWw6IFByb21pc2U8dm9pZD4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0cHJpdmF0ZSByZWJvb3REZWJvdW5jZUdlbiA9IDA7XG5cdHByaXZhdGUgcmVib290SW5GbGlnaHQgPSBmYWxzZTtcblx0cHJpdmF0ZSByZWJvb3RGb2xsb3dVcCA9IGZhbHNlO1xuXHRwcml2YXRlIHJlYm9vdFF1ZXVlZCA9IGZhbHNlO1xuXHRwcml2YXRlIHNjaGVkdWxlUmVib290OiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cblx0Ly8g4pSA4pSAIFB1YmxpYyBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHVibGljIGFzeW5jIHN0YXJ0KG9wdGlvbnM6IEhvdFJlbG9hZFNlcnZlck9wdGlvbnMpIHtcblx0XHR0aGlzLmRpc3Bvc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTtcblx0XHR0aGlzLm1vZHVsZUNhY2hlLmNsZWFyKCk7XG5cdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5jbGVhcigpO1xuXHRcdHRoaXMuZW50cmllcy5jbGVhcigpO1xuXHRcdHRoaXMucGVuZGluZ0VudHJ5UmVib290cy5jbGVhcigpO1xuXHRcdHRoaXMucmVib290VGFpbCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdHRoaXMucmVib290SW5GbGlnaHQgPSBmYWxzZTtcblx0XHR0aGlzLnJlYm9vdEZvbGxvd1VwID0gZmFsc2U7XG5cdFx0dGhpcy5yZWJvb3RRdWV1ZWQgPSBmYWxzZTtcblx0XHR0aGlzLmJpbmRTY2hlZHVsZVJlYm9vdChyZXNvbHZlUmVib290RGVib3VuY2VNcyhvcHRpb25zLnJlYm9vdERlYm91bmNlTXMpKTtcblxuXHRcdGNvbnN0IHsgYnVpbGRDb25maWcgfSA9IG9wdGlvbnM7XG5cdFx0dGhpcy5idWlsZENvbmZpZyA9IGJ1aWxkQ29uZmlnO1xuXHRcdHRoaXMud29ya3NwYWNlID0gYXdhaXQgdGhpcy5yZXNvbHZlV29ya3NwYWNlKG9wdGlvbnMpO1xuXHRcdGNvbnN0IHNlbGVjdGVkID0gdGhpcy5yZXNvbHZlUHJvamVjdHMoYnVpbGRDb25maWcsIG9wdGlvbnMpO1xuXHRcdGZvciAoY29uc3QgcHJvamVjdCBvZiBzZWxlY3RlZCkge1xuXHRcdFx0Y29uc3QgZW50cnlQYXRoID0gcGF0aC5yZXNvbHZlKHByb2plY3QuZ2V0U291cmNlRW50cnlQYXRoKCkpO1xuXHRcdFx0dGhpcy5lbnRyaWVzLnNldChlbnRyeVBhdGgsIHsgcGF0aDogZW50cnlQYXRoIH0pO1xuXHRcdH1cblxuXHRcdHRoaXMuZmlsZUluZm9NYXAgPSBhd2FpdCB0aGlzLmJ1aWxkRmlsZUluZm9NYXAoYnVpbGRDb25maWcpO1xuXHRcdHRoaXMuYWxpYXNQYXRocyA9IGF3YWl0IHRoaXMuYnVpbGRBbGlhc1BhdGhzKCk7XG5cblx0XHR0aGlzLnJlZ2lzdGVySG9va3MoKTtcblx0XHR0aGlzLmludmFsaWRhdGVBbGxTb3VyY2VGaWxlcygpO1xuXG5cdFx0YXdhaXQgdGhpcy53b3Jrc3BhY2Uud2F0Y2goYnVpbGRDb25maWcpO1xuXHRcdHRoaXMud2F0Y2hTdWJzY3JpcHRpb24gPSB0aGlzLndvcmtzcGFjZS5wcm9qZWN0RmlsZUNoYW5nZWQkLnN1YnNjcmliZSh0aGlzLm9uRmlsZUNoYW5nZSk7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcy52YWx1ZXMoKSkge1xuXHRcdFx0dGhpcy5sb2dnZXIudHJhY2UoYFNlcnZpbmcgJHtlbnRyeS5wYXRofWApO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmJvb3RFbnRyaWVzKFsuLi50aGlzLmVudHJpZXMua2V5cygpXSk7XG5cdFx0dGhpcy5lbWl0KFwic3RhcnRcIik7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZGlzcG9zZSgpIHtcblx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuXHRcdHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMucmVib290RGVib3VuY2VHZW4gKz0gMTtcblx0XHR0aGlzLndhdGNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXHRcdHRoaXMud29ya3NwYWNlPy5bU3ltYm9sLmRpc3Bvc2VdKCk7XG5cdFx0YXdhaXQgdGhpcy5yZWJvb3RUYWlsO1xuXHRcdGF3YWl0IHRoaXMuZGlzcG9zZUVudHJpZXMoWy4uLnRoaXMuZW50cmllcy5rZXlzKCldKTtcblx0fVxuXG5cdHB1YmxpYyBhc3luYyBbU3ltYm9sLmFzeW5jRGlzcG9zZV0oKSB7XG5cdFx0YXdhaXQgdGhpcy5kaXNwb3NlKCk7XG5cdH1cblxuXHQvLyDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgYXN5bmMgYm9vdEVudHJpZXMoZW50cnlQYXRoczogcmVhZG9ubHkgc3RyaW5nW10pIHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbChlbnRyeVBhdGhzLm1hcCgoZW50cnlQYXRoKSA9PiB0aGlzLmJvb3RFbnRyeShlbnRyeVBhdGgpKSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGJvb3RFbnRyeShlbnRyeVBhdGg6IHN0cmluZykge1xuXHRcdGNvbnN0IHN0YXRlID0gdGhpcy5lbnRyaWVzLmdldChlbnRyeVBhdGgpO1xuXHRcdGlmIChzdGF0ZSA9PSBudWxsKSByZXR1cm47XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHVybCA9IHRoaXMudmVyc2lvbk1vZHVsZShpby5wYXRoVG9GaWxlVXJsKGVudHJ5UGF0aCkpO1xuXHRcdFx0c3RhdGUubW9kdWxlID0gKGF3YWl0IGltcG9ydCh1cmwpKT8uZGVmYXVsdDtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0c3RhdGUubW9kdWxlID0gdW5kZWZpbmVkO1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoXG5cdFx0XHRcdFwiVGhlcmUgd2FzIGFuIGVycm9yIGJvb3RpbmcgdGhlIGVudHJ5IHBvaW50LiBZb3VyIGFwcGxpY2F0aW9uIG1heSBub3QgZnVuY3Rpb24gYXMgZXhwZWN0ZWRcIixcblx0XHRcdFx0ZXJyb3IsXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYmluZFNjaGVkdWxlUmVib290KGRlbGF5TXM6IG51bWJlcikge1xuXHRcdGNvbnN0IGdlbiA9ICsrdGhpcy5yZWJvb3REZWJvdW5jZUdlbjtcblx0XHR0aGlzLnNjaGVkdWxlUmVib290ID0gZGVib3VuY2UoYXN5bmMgKCkgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZGlzcG9zZWQgfHwgZ2VuICE9PSB0aGlzLnJlYm9vdERlYm91bmNlR2VuKSByZXR1cm47XG5cdFx0XHR0aGlzLnJlcXVlc3RSZWJvb3QoKTtcblx0XHR9LCBkZWxheU1zKTtcblx0fVxuXG5cdHByaXZhdGUgcmVxdWVzdFJlYm9vdCgpIHtcblx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuXHRcdGlmICh0aGlzLnJlYm9vdEluRmxpZ2h0KSB7XG5cdFx0XHR0aGlzLnJlYm9vdEZvbGxvd1VwID0gdHJ1ZTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aWYgKHRoaXMucmVib290UXVldWVkKSByZXR1cm47XG5cdFx0dGhpcy5yZWJvb3RRdWV1ZWQgPSB0cnVlO1xuXHRcdHRoaXMucmVib290VGFpbCA9IHRoaXMucmVib290VGFpbC50aGVuKFxuXHRcdFx0KCkgPT4gdGhpcy5ydW5SZWJvb3QoKSxcblx0XHRcdCgpID0+IHRoaXMucnVuUmVib290KCksXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgcnVuUmVib290KCkge1xuXHRcdHRoaXMucmVib290UXVldWVkID0gZmFsc2U7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHR0aGlzLnJlYm9vdEluRmxpZ2h0ID0gdHJ1ZTtcblx0XHR0cnkge1xuXHRcdFx0ZG8ge1xuXHRcdFx0XHR0aGlzLnJlYm9vdEZvbGxvd1VwID0gZmFsc2U7XG5cdFx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG5cdFx0XHRcdGNvbnN0IHRvUmVib290ID1cblx0XHRcdFx0XHR0aGlzLnBlbmRpbmdFbnRyeVJlYm9vdHMuc2l6ZSA+IDBcblx0XHRcdFx0XHRcdD8gWy4uLnRoaXMucGVuZGluZ0VudHJ5UmVib290c11cblx0XHRcdFx0XHRcdDogWy4uLnRoaXMuZW50cmllcy5rZXlzKCldO1xuXHRcdFx0XHR0aGlzLnBlbmRpbmdFbnRyeVJlYm9vdHMuY2xlYXIoKTtcblx0XHRcdFx0dGhpcy5sb2dnZXIudHJhY2UoYFJlYm9vdGluZyAke3RvUmVib290Lmxlbmd0aH0gZW50cnkgbW9kdWxlKHMpYCk7XG5cdFx0XHRcdGF3YWl0IHRoaXMuZGlzcG9zZUVudHJpZXModG9SZWJvb3QpO1xuXHRcdFx0XHRhd2FpdCB0aGlzLmJvb3RFbnRyaWVzKHRvUmVib290KTtcblx0XHRcdFx0dGhpcy5lbWl0KFwicmVib290XCIpO1xuXHRcdFx0fSB3aGlsZSAodGhpcy5yZWJvb3RGb2xsb3dVcCAmJiAhdGhpcy5kaXNwb3NlZCk7XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdGNvbnN0IG5lZWRzRm9sbG93VXAgPSB0aGlzLnJlYm9vdEZvbGxvd1VwICYmICF0aGlzLmRpc3Bvc2VkO1xuXHRcdFx0dGhpcy5yZWJvb3RGb2xsb3dVcCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5yZWJvb3RJbkZsaWdodCA9IGZhbHNlO1xuXHRcdFx0aWYgKG5lZWRzRm9sbG93VXApIHRoaXMucmVxdWVzdFJlYm9vdCgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgZGlzcG9zZUVudHJpZXMoZW50cnlQYXRoczogcmVhZG9ubHkgc3RyaW5nW10pIHtcblx0XHRhd2FpdCBQcm9taXNlLmFsbChlbnRyeVBhdGhzLm1hcCgoZW50cnlQYXRoKSA9PiB0aGlzLmRpc3Bvc2VFbnRyeShlbnRyeVBhdGgpKSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3Bvc2VFbnRyeShlbnRyeVBhdGg/OiBzdHJpbmcpIHtcblx0XHRjb25zdCBwYXRocyA9IGVudHJ5UGF0aCAhPSBudWxsID8gW2VudHJ5UGF0aF0gOiBbLi4udGhpcy5lbnRyaWVzLmtleXMoKV07XG5cdFx0Zm9yIChjb25zdCBwIG9mIHBhdGhzKSB7XG5cdFx0XHRjb25zdCBzdGF0ZSA9IHRoaXMuZW50cmllcy5nZXQocCk7XG5cdFx0XHRpZiAoc3RhdGUgPT0gbnVsbCkgY29udGludWU7XG5cdFx0XHRjb25zdCBlbnRyeSA9IHN0YXRlLm1vZHVsZTtcblx0XHRcdHN0YXRlLm1vZHVsZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGF3YWl0IGVudHJ5Py5bU3ltYm9sLmFzeW5jRGlzcG9zZV0oKTtcblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFwiRW50cnkgYXN5bmNEaXNwb3NlIGZhaWxlZFwiLCBlcnJvcik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8g4pSA4pSAIFNldHVwIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgYXN5bmMgcmVzb2x2ZVdvcmtzcGFjZShvcHRpb25zOiBIb3RSZWxvYWRTZXJ2ZXJPcHRpb25zKTogUHJvbWlzZTxXb3Jrc3BhY2U+IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0b3B0aW9ucy53b3Jrc3BhY2UgPz9cblx0XHRcdFdvcmtzcGFjZUZhY3RvcnkuY3JlYXRlKHsgLi4uV29ya3NwYWNlRGVmYXVsdHMsIHJvb3REaXI6IHByb2Nlc3MuY3dkKCkgfSlcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSByZXNvbHZlUHJvamVjdHMoYnVpbGRDb25maWc6IHN0cmluZywgb3B0aW9uczogSG90UmVsb2FkU2VydmVyT3B0aW9ucyk6IFByb2plY3RbXSB7XG5cdFx0Y29uc3QgcHJvamVjdHMgPSB0aGlzLndvcmtzcGFjZT8uZ2V0UHJvamVjdHMoYnVpbGRDb25maWcpID8/IFtdO1xuXHRcdGNvbnN0IG5hbWVzID1cblx0XHRcdG9wdGlvbnMucHJvamVjdHMgIT0gbnVsbCAmJiBvcHRpb25zLnByb2plY3RzLmxlbmd0aCA+IDBcblx0XHRcdFx0PyBvcHRpb25zLnByb2plY3RzXG5cdFx0XHRcdDogb3B0aW9ucy5wcm9qZWN0ICE9IG51bGxcblx0XHRcdFx0XHQ/IFtvcHRpb25zLnByb2plY3RdXG5cdFx0XHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHRpZiAobmFtZXMgPT0gbnVsbCkge1xuXHRcdFx0Y29uc3QgZmlyc3QgPSBwcm9qZWN0cy5hdCgwKTtcblx0XHRcdGlmIChmaXJzdCA9PSBudWxsKSB7XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTm8gcHJvamVjdHMgZm91bmQgZm9yIGNvbmZpZ3VyYXRpb246ICR7YnVpbGRDb25maWd9YCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gW2ZpcnN0XTtcblx0XHR9XG5cblx0XHRjb25zdCBzZWxlY3RlZDogUHJvamVjdFtdID0gW107XG5cdFx0Zm9yIChjb25zdCBuYW1lIG9mIG5hbWVzKSB7XG5cdFx0XHRjb25zdCBmb3VuZCA9IHByb2plY3RzLmZpbmQoKHApID0+IHAubmFtZSA9PT0gbmFtZSk7XG5cdFx0XHRpZiAoZm91bmQgPT0gbnVsbCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYFByb2plY3QgXCIke25hbWV9XCIgbm90IGZvdW5kIGluIHdvcmtzcGFjZWApO1xuXHRcdFx0fVxuXHRcdFx0c2VsZWN0ZWQucHVzaChmb3VuZCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYnVpbGRGaWxlSW5mb01hcChidWlsZENvbmZpZzogc3RyaW5nKTogUHJvbWlzZTxNYXA8c3RyaW5nLCBGaWxlSW5mbz4+IHtcblx0XHRjb25zdCBwcm9qZWN0cyA9IHRoaXMud29ya3NwYWNlPy5nZXRQcm9qZWN0cyhidWlsZENvbmZpZykgPz8gW107XG5cdFx0Y29uc3QgZW50cmllcyA9IGF3YWl0IFByb21pc2UuYWxsKFxuXHRcdFx0cHJvamVjdHMubWFwKGFzeW5jIChwcm9qZWN0KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGZpbGVzID0gYXdhaXQgcHJvamVjdC5nZXRBbGxGaWxlcygpO1xuXHRcdFx0XHRyZXR1cm4gZmlsZXMubWFwKChmaWxlKTogW3N0cmluZywgRmlsZUluZm9dID0+IFtmaWxlLmZ1bGxQYXRoLCB7IHByb2plY3QgfV0pO1xuXHRcdFx0fSksXG5cdFx0KTtcblx0XHRyZXR1cm4gbmV3IE1hcChlbnRyaWVzLmZsYXQoKSk7XG5cdH1cblxuXHRwcml2YXRlIHJlZ2lzdGVySG9va3MoKSB7XG5cdFx0aWYgKHRoaXMuaG9va3NSZWdpc3RlcmVkKSByZXR1cm47XG5cdFx0dGhpcy5ob29rc1JlZ2lzdGVyZWQgPSB0cnVlO1xuXHRcdHJlZ2lzdGVySG9va3Moe1xuXHRcdFx0cmVzb2x2ZTogKFxuXHRcdFx0XHRzcGVjaWZpZXI6IHN0cmluZyxcblx0XHRcdFx0Y29udGV4dDogUmVzb2x2ZUhvb2tDb250ZXh0LFxuXHRcdFx0XHRuZXh0OiAoc3BlY2lmaWVyOiBzdHJpbmcsIGNvbnRleHQ/OiBQYXJ0aWFsPFJlc29sdmVIb29rQ29udGV4dD4pID0+IFJlc29sdmVGbk91dHB1dCxcblx0XHRcdCkgPT4ge1xuXHRcdFx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuIG5leHQoc3BlY2lmaWVyLCBjb250ZXh0KTtcblx0XHRcdFx0Y29uc3QgcGFyZW50VXJsID0gY29udGV4dC5wYXJlbnRVUkwgPz8gXCJcIjtcblx0XHRcdFx0Y29uc3QgcmV3cml0dGVuID1cblx0XHRcdFx0XHRyZXdyaXRlU2VydmVTcGVjaWZpZXIoe1xuXHRcdFx0XHRcdFx0c3BlY2lmaWVyLFxuXHRcdFx0XHRcdFx0cGFyZW50VXJsLFxuXHRcdFx0XHRcdFx0aXNXYXRjaGVkVHM6IChmaWxlUGF0aCkgPT4gdGhpcy5maWxlSW5mb01hcC5oYXMoZmlsZVBhdGgpLFxuXHRcdFx0XHRcdFx0cmVzb2x2ZUJhcmU6IChiYXJlKSA9PlxuXHRcdFx0XHRcdFx0XHRwYWNrYWdlQWxpYXNlcy5yZXNvbHZlUGF0aChiYXJlLCB0aGlzLmFsaWFzUGF0aHMsIHRoaXMuYWxpYXNCYXNlVXJsKSxcblx0XHRcdFx0XHRcdHZlcnNpb25GaWxlVXJsOiAoZmlsZVVybCkgPT4gdGhpcy5nZXRDYWNoZWRPck5ldyhmaWxlVXJsKSxcblx0XHRcdFx0XHR9KSA/PyBzcGVjaWZpZXI7XG5cdFx0XHRcdGNvbnN0IHJlc3VsdCA9IG5leHQocmV3cml0dGVuLCBjb250ZXh0KSBhcyBSZXNvbHZlRm5PdXRwdXQ7XG5cdFx0XHRcdHRoaXMub25Qb3N0UmVzb2x2ZShyZXN1bHQsIHBhcmVudFVybCk7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9LFxuXHRcdFx0bG9hZDogKFxuXHRcdFx0XHR1cmw6IHN0cmluZyxcblx0XHRcdFx0Y29udGV4dDogTG9hZEhvb2tDb250ZXh0LFxuXHRcdFx0XHRuZXh0OiAodXJsOiBzdHJpbmcsIGNvbnRleHQ/OiBQYXJ0aWFsPExvYWRIb29rQ29udGV4dD4pID0+IExvYWRGbk91dHB1dCxcblx0XHRcdCk6IExvYWRGbk91dHB1dCA9PiB7XG5cdFx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm4gbmV4dCh1cmwsIGNvbnRleHQpO1xuXHRcdFx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmxvYWRUcyh1cmwpO1xuXHRcdFx0XHRpZiAocmVzdWx0ICE9IG51bGwpXG5cdFx0XHRcdFx0cmV0dXJuIHsgZm9ybWF0OiBcIm1vZHVsZVwiLCBzb3VyY2U6IHJlc3VsdC5zb3VyY2UsIHNob3J0Q2lyY3VpdDogdHJ1ZSB9O1xuXHRcdFx0XHRyZXR1cm4gbmV4dCh1cmwsIGNvbnRleHQpO1xuXHRcdFx0fSxcblx0XHR9KTtcblx0fVxuXG5cdC8vIOKUgOKUgCBNb2R1bGUgaG9va3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBhc3luYyBidWlsZEFsaWFzUGF0aHMoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4+IHtcblx0XHRjb25zdCB3b3Jrc3BhY2UgPSB0aGlzLndvcmtzcGFjZTtcblx0XHRpZiAod29ya3NwYWNlID09IG51bGwpIHJldHVybiB7fTtcblxuXHRcdGNvbnN0IHBhY2thZ2VBbGlhc2VzID0gd29ya3NwYWNlLmdldFBhY2thZ2VBbGlhc2VzKHRoaXMuYnVpbGRDb25maWcpO1xuXHRcdHRoaXMuYWxpYXNCYXNlVXJsID0gcGFja2FnZUFsaWFzZXMuYmFzZVVybDtcblx0XHRyZXR1cm4gcGFja2FnZUFsaWFzZXMucGF0aHM7XG5cdH1cblxuXHQvKipcblx0ICogUG9zdC1uZXh0IGRlcGVuZGVuY3kgdHJhY2tlcjogcmVjb3JkcyB3aGljaCBzb3VyY2UgZmlsZXMgaW1wb3J0IHdoaWNoXG5cdCAqIG90aGVyIHNvdXJjZSBmaWxlcyBzbyB0aGF0IHJlbG9hZElmQWZmZWN0ZWQgY2FuIHRyYXZlcnNlIHRoZSBncmFwaC5cblx0ICovXG5cdHByaXZhdGUgb25Qb3N0UmVzb2x2ZSA9IChyZXN1bHQ6IFJlc29sdmVGbk91dHB1dCwgcGFyZW50VXJsOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCB7IHVybCB9ID0gcmVzdWx0O1xuXHRcdGNvbnN0IHBhcmVudFVybENsZWFuID0gcGFyZW50VXJsLnNwbGl0KFwiP1wiKVswXTtcblxuXHRcdGxldCBmaWxlUGF0aDogc3RyaW5nO1xuXHRcdGxldCBwYXJlbnRQYXRoOiBzdHJpbmc7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuXHRcdFx0dXJsT2JqLnNlYXJjaCA9IFwiXCI7XG5cdFx0XHRmaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgodXJsT2JqLnRvU3RyaW5nKCkpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRwYXJlbnRQYXRoID0gaW8uZmlsZVVybFRvUGF0aChwYXJlbnRVcmxDbGVhbik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRwYXJlbnRQYXRoID0gXCJcIjtcblx0XHR9XG5cblx0XHRjb25zdCBpc1NvdXJjZSA9IHRoaXMuZmlsZUluZm9NYXAuaGFzKGZpbGVQYXRoKTtcblx0XHRjb25zdCBwYXJlbnRJc1NvdXJjZSA9IHRoaXMuZmlsZUluZm9NYXAuaGFzKHBhcmVudFBhdGgpO1xuXG5cdFx0aWYgKGlzU291cmNlIHx8IHBhcmVudElzU291cmNlKSB7XG5cdFx0XHR0aGlzLnRyYWNrRGVwZW5kZW5jeShmaWxlUGF0aCwgcGFyZW50UGF0aCk7XG5cdFx0fVxuXHR9O1xuXG5cdHByaXZhdGUgbG9hZFRzOiBMb2FkRGVsZWdhdGUgPSAodXJsOiBzdHJpbmcpID0+IHtcblx0XHRpZiAoIXVybC5zdGFydHNXaXRoKFwiZmlsZTpcIikpIHJldHVybiBudWxsO1xuXG5cdFx0Y29uc3QgY2xlYW5QYXRoID0gbmV3IFVSTCh1cmwpLnBhdGhuYW1lO1xuXHRcdGNvbnN0IGZpbGVJbmZvID0gdGhpcy5maWxlSW5mb01hcC5nZXQoY2xlYW5QYXRoKTtcblx0XHRpZiAoZmlsZUluZm8gPT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cblx0XHRjb25zdCBjYWNoZWQgPSB0aGlzLnRyYW5zcGlsZUNhY2hlLmdldChjbGVhblBhdGgpO1xuXHRcdGlmIChjYWNoZWQgIT0gbnVsbCkgcmV0dXJuIHsgc291cmNlOiBjYWNoZWQgfTtcblxuXHRcdGNvbnN0IHsgcHJvamVjdCB9ID0gZmlsZUluZm87XG5cdFx0Y29uc3QgdHNDb25maWcgPSBwcm9qZWN0LmdldFRzQ29uZmlnU3luYygpO1xuXHRcdGNvbnN0IHVzZXJDb25maWcgPSBwcm9qZWN0LmdldFN3Y0NvbmZpZ1N5bmMoKTtcblxuXHRcdGNvbnN0IGZpbGUgPSBuZXcgRmlsZUV4KHsgZnVsbFBhdGg6IGNsZWFuUGF0aCB9KTtcblx0XHRjb25zdCByZXNwb25zZSA9IHRoaXMudHJhbnNwaWxlci50cmFuc2Zvcm1GaWxlU3luYyhmaWxlLCBCdWlsZFRhcmdldHMuZXM2LCB7XG5cdFx0XHR0c0NvbmZpZyxcblx0XHRcdGFsaWFzUGF0aHM6IHRydWUsXG5cdFx0XHR1c2VyQ29uZmlnLFxuXHRcdFx0d29ya3NwYWNlOiB0aGlzLndvcmtzcGFjZSxcblx0XHRcdHByb2plY3RzOiB0aGlzLndvcmtzcGFjZT8uZ2V0UHJvamVjdHModGhpcy5idWlsZENvbmZpZyksXG5cdFx0fSk7XG5cblx0XHRpZiAocmVzcG9uc2Uub3V0Y29tZSAhPT0gXCJzdWNjZXNzXCIpIHtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKGBGYWlsZWQgdG8gdHJhbnNwaWxlICR7Y2xlYW5QYXRofWAsIHJlc3BvbnNlKTtcblx0XHRcdC8vIERvIG5vdCBmYWxsIHRocm91Z2ggdG8gbmV4dCgpOiBWaXRlc3QvTm9kZSBsb2FkZXJzIGNhbiBkZWFkbG9jayBvbiBhXG5cdFx0XHQvLyB2ZXJzaW9uZWQgLnRzIFVSTC4gRmFpbCB0aGUgaW1wb3J0IHNvIGJvb3RFbnRyeSBjYW4gY2F0Y2ggYW5kIGNvbnRpbnVlLlxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gdHJhbnNwaWxlICR7Y2xlYW5QYXRofWApO1xuXHRcdH1cblxuXHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuc2V0KGNsZWFuUGF0aCwgcmVzcG9uc2UuY29kZSk7XG5cdFx0cmV0dXJuIHsgc291cmNlOiByZXNwb25zZS5jb2RlIH07XG5cdH07XG5cblx0Ly8g4pSA4pSAIEZpbGUgd2F0Y2hpbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBvbkZpbGVDaGFuZ2UgPSAoZXZ0OiBQcm9qZWN0RmlsZUV2ZW50KSA9PiB7XG5cdFx0Y29uc3QgeyBmaWxlLCBldmVudE5hbWUsIHByb2plY3QgfSA9IGV2dDtcblx0XHRjb25zdCBmdWxsUGF0aCA9IGZpbGUuZnVsbFBhdGg7XG5cblx0XHR0aGlzLmxvZ2dlci50cmFjZShgRmlsZSAke2V2ZW50TmFtZX06ICR7ZnVsbFBhdGh9YCk7XG5cblx0XHRpZiAoZXZlbnROYW1lID09PSBpby5XYXRjaEV2ZW50cy51bmxpbmspIHtcblx0XHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuZGVsZXRlKGZ1bGxQYXRoKTtcblx0XHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZ1bGxQYXRoLCBudWxsKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoZXZlbnROYW1lID09PSBpby5XYXRjaEV2ZW50cy5hZGQpIHtcblx0XHRcdGlmIChwcm9qZWN0LmlzU291cmNlRmlsZShmaWxlKSkge1xuXHRcdFx0XHR0aGlzLmZpbGVJbmZvTWFwLnNldChmdWxsUGF0aCwgeyBwcm9qZWN0IH0pO1xuXHRcdFx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChmdWxsUGF0aCwgbnVsbCk7XG5cdFx0XHRcdHRoaXMucmVsb2FkSWZBZmZlY3RlZChmdWxsUGF0aCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gY2hhbmdlXG5cdFx0aWYgKCFwcm9qZWN0LmlzU291cmNlRmlsZShmaWxlKSkgcmV0dXJuO1xuXHRcdHRoaXMudHJhbnNwaWxlQ2FjaGUuZGVsZXRlKGZ1bGxQYXRoKTtcblx0XHR0aGlzLnRyYW5zcGlsZXIuaW52YWxpZGF0ZUNvbnRlbnRDYWNoZShuZXcgRmlsZUV4KHsgZnVsbFBhdGggfSkpO1xuXHRcdHRoaXMucmVsb2FkSWZBZmZlY3RlZChmdWxsUGF0aCk7XG5cdH07XG5cblx0cHJpdmF0ZSByZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5nZXREZXBlbmRlbmN5R3JhcGgoZnVsbFBhdGgpO1xuXHRcdGNvbnN0IG1vZHVsZXMgPSBbLi4ubmV3IFNldChbLi4uZGVwcywgZnVsbFBhdGhdKV07XG5cdFx0Y29uc3QgYWZmZWN0ZWRFbnRyaWVzID0gWy4uLnRoaXMuZW50cmllcy5rZXlzKCldLmZpbHRlcigoZW50cnlQYXRoKSA9PlxuXHRcdFx0bW9kdWxlcy5pbmNsdWRlcyhlbnRyeVBhdGgpLFxuXHRcdCk7XG5cblx0XHRpZiAoYWZmZWN0ZWRFbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0dGhpcy5sb2dnZXIudHJhY2UoYENoYW5nZSBpbiAke2Z1bGxQYXRofSBkb2VzIG5vdCBhZmZlY3QgZW50cnkg4oCUIHNraXBwaW5nIHJlbG9hZGApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHRoaXMubG9nZ2VyLnRyYWNlKFxuXHRcdFx0YENoYW5nZSBpbiAke2Z1bGxQYXRofSBhZmZlY3RzICR7bW9kdWxlcy5sZW5ndGh9IG1vZHVsZShzKSDigJQgc2NoZWR1bGluZyByZWxvYWRgLFxuXHRcdCk7XG5cdFx0dGhpcy5pbnZhbGlkYXRlTW9kdWxlKC4uLm1vZHVsZXMpO1xuXHRcdGZvciAoY29uc3QgZW50cnlQYXRoIG9mIGFmZmVjdGVkRW50cmllcykge1xuXHRcdFx0dGhpcy5wZW5kaW5nRW50cnlSZWJvb3RzLmFkZChlbnRyeVBhdGgpO1xuXHRcdH1cblx0XHR0aGlzLnNjaGVkdWxlUmVib290KCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvLyDilIDilIAgRGVwZW5kZW5jeSBncmFwaCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGdldERlcGVuZGVuY3lHcmFwaChtb2R1bGVJZDogc3RyaW5nLCBwYXJlbnRNb2R1bGVzOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nW10ge1xuXHRcdGlmICh0aGlzLmlzU2VsZihtb2R1bGVJZCkpIHJldHVybiBbXTtcblxuXHRcdGNvbnN0IG1vZHVsZURlcHMgPSB0aGlzLmRlcGVuZGVuY2llcy5nZXQobW9kdWxlSWQpID8/IFtdO1xuXHRcdGlmIChwYXJlbnRNb2R1bGVzLmluY2x1ZGVzKG1vZHVsZUlkKSkge1xuXHRcdFx0dGhpcy5sb2dnZXIuZXJyb3IoYENpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZDogJHttb2R1bGVJZH1gKTtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRsZXQgc3ViRGVwczogc3RyaW5nW10gPSBbXTtcblx0XHRmb3IgKGNvbnN0IGRlcCBvZiBtb2R1bGVEZXBzKSB7XG5cdFx0XHRpZiAoIXRoaXMuZmlsZUluZm9NYXAuaGFzKGRlcCkpIGNvbnRpbnVlO1xuXHRcdFx0Y29uc3Qgc3VicyA9IHRoaXMuZ2V0RGVwZW5kZW5jeUdyYXBoKGRlcCwgW21vZHVsZUlkLCAuLi5wYXJlbnRNb2R1bGVzXSk7XG5cdFx0XHRzdWJEZXBzID0gWy4uLnN1YkRlcHMsIC4uLnN1YnNdO1xuXHRcdH1cblxuXHRcdHJldHVybiBbLi4ubmV3IFNldChbLi4ubW9kdWxlRGVwcywgLi4uc3ViRGVwc10pXTtcblx0fVxuXG5cdHByaXZhdGUgdHJhY2tEZXBlbmRlbmN5KGZpbGVQYXRoOiBzdHJpbmcsIHBhcmVudFBhdGg6IHN0cmluZykge1xuXHRcdGlmICghcGFyZW50UGF0aCkgcmV0dXJuO1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLmRlcGVuZGVuY2llcy5nZXQoZmlsZVBhdGgpID8/IFtdO1xuXHRcdGNvbnN0IHVwZGF0ZWREZXBzID0gbmV3IFNldChbLi4uZGVwcywgcGFyZW50UGF0aF0pO1xuXHRcdHRoaXMuZGVwZW5kZW5jaWVzLnNldChmaWxlUGF0aCwgWy4uLnVwZGF0ZWREZXBzXSk7XG5cdH1cblxuXHQvLyDilIDilIAgTW9kdWxlIGNhY2hlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgZ2V0Q2FjaGVkT3JOZXcobW9kdWxlVXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCBmaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgobW9kdWxlVXJsKTtcblx0XHRjb25zdCBjYWNoZWQgPSB0aGlzLm1vZHVsZUNhY2hlLmdldChmaWxlUGF0aCk7XG5cdFx0Y29uc3QgdmVyc2lvbmVkID0gY2FjaGVkID8/IHRoaXMudmVyc2lvbk1vZHVsZShtb2R1bGVVcmwpO1xuXHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZpbGVQYXRoLCB2ZXJzaW9uZWQpO1xuXHRcdHJldHVybiB2ZXJzaW9uZWQ7XG5cdH1cblxuXHRwcml2YXRlIHZlcnNpb25Nb2R1bGUobW9kdWxlVXJsOiBzdHJpbmcpIHtcblx0XHRjb25zdCB2ZXJzaW9uZWRVcmwgPSBuZXcgVVJMKG1vZHVsZVVybCk7XG5cdFx0dmVyc2lvbmVkVXJsLnNlYXJjaFBhcmFtcy5zZXQoVkVSU0lPTl9VUkxfUEFSQU0sIFN0cmluZygrK21vZHVsZVZlcnNpb25TZXEpKTtcblx0XHRyZXR1cm4gdmVyc2lvbmVkVXJsLnRvU3RyaW5nKCk7XG5cdH1cblxuXHRwcml2YXRlIGludmFsaWRhdGVNb2R1bGUoLi4ubW9kdWxlczogc3RyaW5nW10pIHtcblx0XHRmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG5cdFx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChtb2R1bGUsIG51bGwpO1xuXHRcdFx0dGhpcy50cmFuc3BpbGVDYWNoZS5kZWxldGUobW9kdWxlKTtcblx0XHRcdC8vIFBydW5lIHN0YWxlIG91dGdvaW5nIGVkZ2VzOiByZW1vdmUgdGhpcyBtb2R1bGUgYXMgYSBwYXJlbnQgZnJvbSBhbGwgZGVwZW5kZW5jeSBsaXN0c1xuXHRcdFx0Zm9yIChjb25zdCBba2V5LCBwYXJlbnRzXSBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJlZCA9IHBhcmVudHMuZmlsdGVyKChwKSA9PiBwICE9PSBtb2R1bGUpO1xuXHRcdFx0XHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuZGVsZXRlKGtleSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuc2V0KGtleSwgZmlsdGVyZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlQWxsU291cmNlRmlsZXMoKSB7XG5cdFx0Zm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmZpbGVJbmZvTWFwLmtleXMoKSkge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQoZmlsZVBhdGgsIG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdC8vIOKUgOKUgCBVdGlsaXRpZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBpc1NlbGYoZmlsZVBhdGg6IHN0cmluZykge1xuXHRcdHJldHVybiBjdXJyZW50RmlsZVBhdGggPT09IHBhdGgucmVzb2x2ZShmaWxlUGF0aCk7XG5cdH1cbn1cbiJdLCJuYW1lcyI6WyJERUZBVUxUX1JFQk9PVF9ERUJPVU5DRV9NUyIsIkhvdFJlbG9hZFNlcnZlciIsInJlc29sdmVSZWJvb3REZWJvdW5jZU1zIiwiY3VycmVudEZpbGVQYXRoIiwiaW8iLCJmaWxlVXJsVG9QYXRoIiwiVkVSU0lPTl9VUkxfUEFSQU0iLCJ2YWx1ZSIsImRlbGF5IiwiTnVtYmVyIiwiaXNGaW5pdGUiLCJFcnJvciIsIlN0cmluZyIsIm1vZHVsZVZlcnNpb25TZXEiLCJFdmVudEVtaXR0ZXIiLCJsb2dnZXIiLCJzY3JpYmUiLCJuYW1lIiwiZGlzcG9zZWQiLCJob29rc1JlZ2lzdGVyZWQiLCJlbnRyaWVzIiwiTWFwIiwicGVuZGluZ0VudHJ5UmVib290cyIsIlNldCIsIndvcmtzcGFjZSIsImJ1aWxkQ29uZmlnIiwid2F0Y2hTdWJzY3JpcHRpb24iLCJmaWxlSW5mb01hcCIsIm1vZHVsZUNhY2hlIiwiZGVwZW5kZW5jaWVzIiwidHJhbnNwaWxlQ2FjaGUiLCJ0cmFuc3BpbGVyIiwiU3djVHJhbnNwaWxlciIsImFsaWFzUGF0aHMiLCJhbGlhc0Jhc2VVcmwiLCJwYXRoIiwicmVzb2x2ZSIsInJlYm9vdFRhaWwiLCJQcm9taXNlIiwicmVib290RGVib3VuY2VHZW4iLCJyZWJvb3RJbkZsaWdodCIsInJlYm9vdEZvbGxvd1VwIiwicmVib290UXVldWVkIiwic2NoZWR1bGVSZWJvb3QiLCJzdGFydCIsIm9wdGlvbnMiLCJjbGVhciIsImJpbmRTY2hlZHVsZVJlYm9vdCIsInJlYm9vdERlYm91bmNlTXMiLCJyZXNvbHZlV29ya3NwYWNlIiwic2VsZWN0ZWQiLCJyZXNvbHZlUHJvamVjdHMiLCJwcm9qZWN0IiwiZW50cnlQYXRoIiwiZ2V0U291cmNlRW50cnlQYXRoIiwic2V0IiwiYnVpbGRGaWxlSW5mb01hcCIsImJ1aWxkQWxpYXNQYXRocyIsInJlZ2lzdGVySG9va3MiLCJpbnZhbGlkYXRlQWxsU291cmNlRmlsZXMiLCJ3YXRjaCIsInByb2plY3RGaWxlQ2hhbmdlZCQiLCJzdWJzY3JpYmUiLCJvbkZpbGVDaGFuZ2UiLCJlbnRyeSIsInZhbHVlcyIsInRyYWNlIiwiYm9vdEVudHJpZXMiLCJrZXlzIiwiZW1pdCIsImRpc3Bvc2UiLCJ1bnN1YnNjcmliZSIsIlN5bWJvbCIsImRpc3Bvc2VFbnRyaWVzIiwiYXN5bmNEaXNwb3NlIiwiZW50cnlQYXRocyIsImFsbCIsIm1hcCIsImJvb3RFbnRyeSIsInN0YXRlIiwiZ2V0IiwidXJsIiwidmVyc2lvbk1vZHVsZSIsInBhdGhUb0ZpbGVVcmwiLCJtb2R1bGUiLCJkZWZhdWx0IiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJkZWxheU1zIiwiZ2VuIiwiZGVib3VuY2UiLCJyZXF1ZXN0UmVib290IiwidGhlbiIsInJ1blJlYm9vdCIsInRvUmVib290Iiwic2l6ZSIsImxlbmd0aCIsIm5lZWRzRm9sbG93VXAiLCJkaXNwb3NlRW50cnkiLCJwYXRocyIsInAiLCJXb3Jrc3BhY2VGYWN0b3J5IiwiY3JlYXRlIiwiV29ya3NwYWNlRGVmYXVsdHMiLCJyb290RGlyIiwicHJvY2VzcyIsImN3ZCIsInByb2plY3RzIiwiZ2V0UHJvamVjdHMiLCJuYW1lcyIsImZpcnN0IiwiYXQiLCJmb3VuZCIsImZpbmQiLCJwdXNoIiwiZmlsZXMiLCJnZXRBbGxGaWxlcyIsImZpbGUiLCJmdWxsUGF0aCIsImZsYXQiLCJzcGVjaWZpZXIiLCJjb250ZXh0IiwibmV4dCIsInBhcmVudFVybCIsInBhcmVudFVSTCIsInJld3JpdHRlbiIsInJld3JpdGVTZXJ2ZVNwZWNpZmllciIsImlzV2F0Y2hlZFRzIiwiZmlsZVBhdGgiLCJoYXMiLCJyZXNvbHZlQmFyZSIsImJhcmUiLCJwYWNrYWdlQWxpYXNlcyIsInJlc29sdmVQYXRoIiwidmVyc2lvbkZpbGVVcmwiLCJmaWxlVXJsIiwiZ2V0Q2FjaGVkT3JOZXciLCJyZXN1bHQiLCJvblBvc3RSZXNvbHZlIiwibG9hZCIsImxvYWRUcyIsImZvcm1hdCIsInNvdXJjZSIsInNob3J0Q2lyY3VpdCIsImdldFBhY2thZ2VBbGlhc2VzIiwiYmFzZVVybCIsInBhcmVudFVybENsZWFuIiwic3BsaXQiLCJwYXJlbnRQYXRoIiwidXJsT2JqIiwiVVJMIiwic2VhcmNoIiwidG9TdHJpbmciLCJpc1NvdXJjZSIsInBhcmVudElzU291cmNlIiwidHJhY2tEZXBlbmRlbmN5Iiwic3RhcnRzV2l0aCIsImNsZWFuUGF0aCIsInBhdGhuYW1lIiwiZmlsZUluZm8iLCJjYWNoZWQiLCJ0c0NvbmZpZyIsImdldFRzQ29uZmlnU3luYyIsInVzZXJDb25maWciLCJnZXRTd2NDb25maWdTeW5jIiwiRmlsZUV4IiwicmVzcG9uc2UiLCJ0cmFuc2Zvcm1GaWxlU3luYyIsIkJ1aWxkVGFyZ2V0cyIsImVzNiIsIm91dGNvbWUiLCJjb2RlIiwiZXZ0IiwiZXZlbnROYW1lIiwiV2F0Y2hFdmVudHMiLCJ1bmxpbmsiLCJkZWxldGUiLCJhZGQiLCJpc1NvdXJjZUZpbGUiLCJyZWxvYWRJZkFmZmVjdGVkIiwiaW52YWxpZGF0ZUNvbnRlbnRDYWNoZSIsImRlcHMiLCJnZXREZXBlbmRlbmN5R3JhcGgiLCJtb2R1bGVzIiwiYWZmZWN0ZWRFbnRyaWVzIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJpbnZhbGlkYXRlTW9kdWxlIiwibW9kdWxlSWQiLCJwYXJlbnRNb2R1bGVzIiwiaXNTZWxmIiwibW9kdWxlRGVwcyIsInN1YkRlcHMiLCJkZXAiLCJzdWJzIiwidXBkYXRlZERlcHMiLCJtb2R1bGVVcmwiLCJ2ZXJzaW9uZWQiLCJ2ZXJzaW9uZWRVcmwiLCJzZWFyY2hQYXJhbXMiLCJrZXkiLCJwYXJlbnRzIiwiZmlsdGVyZWQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBdUJhQTtlQUFBQTs7UUEyQ0FDO2VBQUFBOztRQXpDR0M7ZUFBQUE7Ozs0QkF6QmE7NEJBT0M7aUVBQ2I7dUJBQzhDO3NCQUVkO29CQUN0Qjt3QkFDRjt3QkFDVzt1Q0FFRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFJdEMsTUFBTUMsa0JBQWtCQyxNQUFFLENBQUNDLGFBQWEsQ0FBQztBQUN6QyxNQUFNQyxvQkFBb0I7QUFFbkIsTUFBTU4sNkJBQTZCO0FBRW5DLFNBQVNFLHdCQUF3QkssS0FBeUI7SUFDaEUsTUFBTUMsUUFBUUQsU0FBU1A7SUFDdkIsSUFBSSxDQUFDUyxPQUFPQyxRQUFRLENBQUNGLFVBQVVBLFFBQVEsR0FBRztRQUN6QyxNQUFNLElBQUlHLE1BQU0sQ0FBQyxvREFBb0QsRUFBRUMsT0FBT0wsUUFBUTtJQUN2RjtJQUNBLE9BQU9DO0FBQ1I7QUFFQSxrR0FBa0csR0FDbEcsSUFBSUssbUJBQW1CO0FBZ0NoQixNQUFNWix3QkFBd0JhLHdCQUFZO0lBQ2hELDRFQUE0RTtJQUMzREMsU0FBaUJDLGNBQU0sQ0FBQ0QsTUFBTSxDQUFDZCxnQkFBZ0JnQixJQUFJLEVBQUU7SUFD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
|
|
372
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2hvdC1yZWxvYWQtc2VydmVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciB9IGZyb20gXCJub2RlOmV2ZW50c1wiO1xuaW1wb3J0IHR5cGUgeyBSZXNvbHZlRm5PdXRwdXQgfSBmcm9tIFwibm9kZTptb2R1bGVcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVjdCwgUHJvamVjdEZpbGVFdmVudCwgV29ya3NwYWNlIH0gZnJvbSBcIkBkZWNvaGVyZS9tZXNoXCI7XG5pbXBvcnQgeyBpbyB9IGZyb20gXCJAZGVjb2hlcmUvbmV4dXMvaW9cIjtcbmltcG9ydCB7IGRlYm91bmNlIH0gZnJvbSBcIkBkZWNvaGVyZS9uZXh1cy9zeXN0ZW1cIjtcbmltcG9ydCB7IHR5cGUgTG9nZ2VyLCBzY3JpYmUgfSBmcm9tIFwiQGRlY29oZXJlL3NjcmliZVwiO1xuaW1wb3J0IHR5cGUgeyBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xuaW1wb3J0IHsgU291cmNlTW9kdWxlTG9hZGVyIH0gZnJvbSBcIi4vc291cmNlLW1vZHVsZS1sb2FkZXIuanNcIjtcblxuY29uc3QgY3VycmVudEZpbGVQYXRoID0gaW8uZmlsZVVybFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgVkVSU0lPTl9VUkxfUEFSQU0gPSBcInZlcnNpb25cIjtcbi8qKiBEZWZhdWx0IHF1aWV0IHdpbmRvdyBiZWZvcmUgYSBmaWxlLWNoYW5nZSByZWJvb3QuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMgPSAyNTA7XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlUmVib290RGVib3VuY2VNcyh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcblx0Y29uc3QgZGVsYXkgPSB2YWx1ZSA/PyBERUZBVUxUX1JFQk9PVF9ERUJPVU5DRV9NUztcblx0aWYgKCFOdW1iZXIuaXNGaW5pdGUoZGVsYXkpIHx8IGRlbGF5IDwgMCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgcmVib290RGVib3VuY2VNcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlciwgZ290ICR7U3RyaW5nKHZhbHVlKX1gKTtcblx0fVxuXHRyZXR1cm4gZGVsYXk7XG59XG5cbi8qKiBQcm9jZXNzLXdpZGU6IE5vZGUncyBFU00gY2FjaGUgaXMgcHJvY2Vzcy1nbG9iYWwsIGluY2x1ZGluZyBhY3Jvc3MgSG90UmVsb2FkU2VydmVyIGluc3RhbmNlcy4gKi9cbmxldCBtb2R1bGVWZXJzaW9uU2VxID0gMDtcblxuZXhwb3J0IGludGVyZmFjZSBIb3RSZWxvYWRTZXJ2ZXJFdmVudHMge1xuXHRzdGFydDogW107XG5cdHJlYm9vdDogW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSG90UmVsb2FkU2VydmVyT3B0aW9ucyB7XG5cdC8qKiBCdWlsZCBjb25maWd1cmF0aW9uIG5hbWUuICovXG5cdGJ1aWxkQ29uZmlnOiBzdHJpbmc7XG5cdC8qKiBOYW1lIG9mIHRoZSBwcm9qZWN0IHRvIHNlcnZlLiBEZWZhdWx0cyB0byB0aGUgZmlyc3QgcHJvamVjdCBpbiB0aGUgd29ya3NwYWNlLiAqL1xuXHRwcm9qZWN0Pzogc3RyaW5nO1xuXHQvKipcblx0ICogTXVsdGlwbGUgRmx1eCBhcHAgcGFja2FnZSBuYW1lcyB0byBib290IGluIG9uZSBwcm9jZXNzIChkaXJlY3Rvcnkgc2xpY2UpLlxuXHQgKiBXaGVuIHNldCwgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHtAbGluayBwcm9qZWN0fS5cblx0ICovXG5cdHByb2plY3RzPzogcmVhZG9ubHkgc3RyaW5nW107XG5cdC8qKlxuXHQgKiBQcmUtYnVpbHQgV29ya3NwYWNlIGluc3RhbmNlIHRvIHVzZSBpbnN0ZWFkIG9mIHJ1bm5pbmcgV29ya3NwYWNlRmFjdG9yeS5cblx0ICogVXNlZnVsIGluIHRlc3RzIHRvIGJ5cGFzcyBmaWxlc3lzdGVtLWJhc2VkIHdvcmtzcGFjZSBkaXNjb3ZlcnkuXG5cdCAqL1xuXHR3b3Jrc3BhY2U/OiBXb3Jrc3BhY2U7XG5cdC8qKlxuXHQgKiBRdWlldCB3aW5kb3cgaW4gbWlsbGlzZWNvbmRzIGFmdGVyIHRoZSBsYXN0IGFmZmVjdGluZyBzYXZlIGJlZm9yZSBhIHJlYm9vdC5cblx0ICogRGVmYXVsdHMgdG8ge0BsaW5rIERFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TfS4gUmFpc2UgdGhpcyBmb3IgYWdlbnQgc2F2ZSB0cmFpbnMuXG5cdCAqL1xuXHRyZWJvb3REZWJvdW5jZU1zPzogbnVtYmVyO1xufVxuXG50eXBlIEVudHJ5U3RhdGUgPSB7IHBhdGg6IHN0cmluZzsgbW9kdWxlPzogQXN5bmNEaXNwb3NhYmxlIH07XG5cbmV4cG9ydCBjbGFzcyBIb3RSZWxvYWRTZXJ2ZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXI8SG90UmVsb2FkU2VydmVyRXZlbnRzPiB7XG5cdC8vIOKUgOKUgCBTdGF0ZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblx0cHJpdmF0ZSByZWFkb25seSBsb2dnZXI6IExvZ2dlciA9IHNjcmliZS5sb2dnZXIoSG90UmVsb2FkU2VydmVyLm5hbWUpO1xuXHRwcml2YXRlIHJlYWRvbmx5IGxvYWRlciA9IG5ldyBTb3VyY2VNb2R1bGVMb2FkZXIoKTtcblx0cHJpdmF0ZSBkaXNwb3NlZCA9IGZhbHNlO1xuXHQvKiogQWJzb2x1dGUgZW50cnkgcGF0aHMgY3VycmVudGx5IHNlcnZlZCAob25lIG9yIG1vcmUgRmx1eCBhcHBzKS4gKi9cblx0cHJpdmF0ZSBlbnRyaWVzID0gbmV3IE1hcDxzdHJpbmcsIEVudHJ5U3RhdGU+KCk7XG5cdHByaXZhdGUgcGVuZGluZ0VudHJ5UmVib290cyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXHRwcml2YXRlIHdhdGNoU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uO1xuXHRwcml2YXRlIG1vZHVsZUNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KCk7XG5cdHByaXZhdGUgZGVwZW5kZW5jaWVzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZ1tdPigpO1xuXHRwcml2YXRlIHJlYm9vdFRhaWw6IFByb21pc2U8dm9pZD4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0cHJpdmF0ZSByZWJvb3REZWJvdW5jZUdlbiA9IDA7XG5cdHByaXZhdGUgcmVib290SW5GbGlnaHQgPSBmYWxzZTtcblx0cHJpdmF0ZSByZWJvb3RGb2xsb3dVcCA9IGZhbHNlO1xuXHRwcml2YXRlIHJlYm9vdFF1ZXVlZCA9IGZhbHNlO1xuXHRwcml2YXRlIHNjaGVkdWxlUmVib290OiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cblx0Ly8g4pSA4pSAIFB1YmxpYyBBUEkg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHVibGljIGFzeW5jIHN0YXJ0KG9wdGlvbnM6IEhvdFJlbG9hZFNlcnZlck9wdGlvbnMpIHtcblx0XHR0aGlzLmRpc3Bvc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5kZXBlbmRlbmNpZXMuY2xlYXIoKTtcblx0XHR0aGlzLm1vZHVsZUNhY2hlLmNsZWFyKCk7XG5cdFx0dGhpcy5lbnRyaWVzLmNsZWFyKCk7XG5cdFx0dGhpcy5wZW5kaW5nRW50cnlSZWJvb3RzLmNsZWFyKCk7XG5cdFx0dGhpcy5yZWJvb3RUYWlsID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0dGhpcy5yZWJvb3RJbkZsaWdodCA9IGZhbHNlO1xuXHRcdHRoaXMucmVib290Rm9sbG93VXAgPSBmYWxzZTtcblx0XHR0aGlzLnJlYm9vdFF1ZXVlZCA9IGZhbHNlO1xuXHRcdHRoaXMuYmluZFNjaGVkdWxlUmVib290KHJlc29sdmVSZWJvb3REZWJvdW5jZU1zKG9wdGlvbnMucmVib290RGVib3VuY2VNcykpO1xuXG5cdFx0Y29uc3QgeyBidWlsZENvbmZpZyB9ID0gb3B0aW9ucztcblxuXHRcdGF3YWl0IHRoaXMubG9hZGVyLmNvbmZpZ3VyZSh7XG5cdFx0XHRidWlsZENvbmZpZyxcblx0XHRcdHdvcmtzcGFjZTogb3B0aW9ucy53b3Jrc3BhY2UsXG5cdFx0XHR2ZXJzaW9uRmlsZVVybDogKGZpbGVVcmwpID0+IHRoaXMuZ2V0Q2FjaGVkT3JOZXcoZmlsZVVybCksXG5cdFx0XHRvblJlc29sdmVkOiB0aGlzLm9uUG9zdFJlc29sdmUsXG5cdFx0fSk7XG5cblx0XHRjb25zdCB3b3Jrc3BhY2UgPSB0aGlzLnJlcXVpcmVXb3Jrc3BhY2UoKTtcblx0XHRjb25zdCBzZWxlY3RlZCA9IHRoaXMucmVzb2x2ZVByb2plY3RzKGJ1aWxkQ29uZmlnLCBvcHRpb25zKTtcblx0XHRmb3IgKGNvbnN0IHByb2plY3Qgb2Ygc2VsZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGVudHJ5UGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0LmdldFNvdXJjZUVudHJ5UGF0aCgpKTtcblx0XHRcdHRoaXMuZW50cmllcy5zZXQoZW50cnlQYXRoLCB7IHBhdGg6IGVudHJ5UGF0aCB9KTtcblx0XHR9XG5cblx0XHR0aGlzLmxvYWRlci5yZWdpc3Rlckhvb2tzKCk7XG5cdFx0dGhpcy5pbnZhbGlkYXRlQWxsU291cmNlRmlsZXMoKTtcblxuXHRcdGF3YWl0IHdvcmtzcGFjZS53YXRjaChidWlsZENvbmZpZyk7XG5cdFx0dGhpcy53YXRjaFN1YnNjcmlwdGlvbiA9IHdvcmtzcGFjZS5wcm9qZWN0RmlsZUNoYW5nZWQkLnN1YnNjcmliZSh0aGlzLm9uRmlsZUNoYW5nZSk7XG5cblx0XHRmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllcy52YWx1ZXMoKSkge1xuXHRcdFx0dGhpcy5sb2dnZXIudHJhY2UoYFNlcnZpbmcgJHtlbnRyeS5wYXRofWApO1xuXHRcdH1cblx0XHRhd2FpdCB0aGlzLmJvb3RFbnRyaWVzKFsuLi50aGlzLmVudHJpZXMua2V5cygpXSk7XG5cdFx0dGhpcy5lbWl0KFwic3RhcnRcIik7XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgZGlzcG9zZSgpIHtcblx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuXHRcdHRoaXMuZGlzcG9zZWQgPSB0cnVlO1xuXHRcdHRoaXMucmVib290RGVib3VuY2VHZW4gKz0gMTtcblx0XHR0aGlzLndhdGNoU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuXHRcdGF3YWl0IHRoaXMucmVib290VGFpbDtcblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VFbnRyaWVzKFsuLi50aGlzLmVudHJpZXMua2V5cygpXSk7XG5cdFx0dGhpcy5sb2FkZXIuZGlzcG9zZSgpO1xuXHR9XG5cblx0cHVibGljIGFzeW5jIFtTeW1ib2wuYXN5bmNEaXNwb3NlXSgpIHtcblx0XHRhd2FpdCB0aGlzLmRpc3Bvc2UoKTtcblx0fVxuXG5cdC8vIOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cblx0cHJpdmF0ZSBhc3luYyBib290RW50cmllcyhlbnRyeVBhdGhzOiByZWFkb25seSBzdHJpbmdbXSkge1xuXHRcdGF3YWl0IFByb21pc2UuYWxsKGVudHJ5UGF0aHMubWFwKChlbnRyeVBhdGgpID0+IHRoaXMuYm9vdEVudHJ5KGVudHJ5UGF0aCkpKTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgYm9vdEVudHJ5KGVudHJ5UGF0aDogc3RyaW5nKSB7XG5cdFx0Y29uc3Qgc3RhdGUgPSB0aGlzLmVudHJpZXMuZ2V0KGVudHJ5UGF0aCk7XG5cdFx0aWYgKHN0YXRlID09IG51bGwpIHJldHVybjtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgbW9kID0gKGF3YWl0IHRoaXMubG9hZGVyLmltcG9ydEVudHJ5KGVudHJ5UGF0aCkpIGFzIHtcblx0XHRcdFx0ZGVmYXVsdD86IEFzeW5jRGlzcG9zYWJsZTtcblx0XHRcdH07XG5cdFx0XHRzdGF0ZS5tb2R1bGUgPSBtb2Q/LmRlZmF1bHQ7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHN0YXRlLm1vZHVsZSA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMubG9nZ2VyLmVycm9yKFxuXHRcdFx0XHRcIlRoZXJlIHdhcyBhbiBlcnJvciBib290aW5nIHRoZSBlbnRyeSBwb2ludC4gWW91ciBhcHBsaWNhdGlvbiBtYXkgbm90IGZ1bmN0aW9uIGFzIGV4cGVjdGVkXCIsXG5cdFx0XHRcdGVycm9yLFxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGJpbmRTY2hlZHVsZVJlYm9vdChkZWxheU1zOiBudW1iZXIpIHtcblx0XHRjb25zdCBnZW4gPSArK3RoaXMucmVib290RGVib3VuY2VHZW47XG5cdFx0dGhpcy5zY2hlZHVsZVJlYm9vdCA9IGRlYm91bmNlKGFzeW5jICgpID0+IHtcblx0XHRcdGlmICh0aGlzLmRpc3Bvc2VkIHx8IGdlbiAhPT0gdGhpcy5yZWJvb3REZWJvdW5jZUdlbikgcmV0dXJuO1xuXHRcdFx0dGhpcy5yZXF1ZXN0UmVib290KCk7XG5cdFx0fSwgZGVsYXlNcyk7XG5cdH1cblxuXHRwcml2YXRlIHJlcXVlc3RSZWJvb3QoKSB7XG5cdFx0aWYgKHRoaXMuZGlzcG9zZWQpIHJldHVybjtcblx0XHRpZiAodGhpcy5yZWJvb3RJbkZsaWdodCkge1xuXHRcdFx0dGhpcy5yZWJvb3RGb2xsb3dVcCA9IHRydWU7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGlmICh0aGlzLnJlYm9vdFF1ZXVlZCkgcmV0dXJuO1xuXHRcdHRoaXMucmVib290UXVldWVkID0gdHJ1ZTtcblx0XHR0aGlzLnJlYm9vdFRhaWwgPSB0aGlzLnJlYm9vdFRhaWwudGhlbihcblx0XHRcdCgpID0+IHRoaXMucnVuUmVib290KCksXG5cdFx0XHQoKSA9PiB0aGlzLnJ1blJlYm9vdCgpLFxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIHJ1blJlYm9vdCgpIHtcblx0XHR0aGlzLnJlYm9vdFF1ZXVlZCA9IGZhbHNlO1xuXHRcdGlmICh0aGlzLmRpc3Bvc2VkKSByZXR1cm47XG5cdFx0dGhpcy5yZWJvb3RJbkZsaWdodCA9IHRydWU7XG5cdFx0dHJ5IHtcblx0XHRcdGRvIHtcblx0XHRcdFx0dGhpcy5yZWJvb3RGb2xsb3dVcCA9IGZhbHNlO1xuXHRcdFx0XHRpZiAodGhpcy5kaXNwb3NlZCkgcmV0dXJuO1xuXHRcdFx0XHRjb25zdCB0b1JlYm9vdCA9XG5cdFx0XHRcdFx0dGhpcy5wZW5kaW5nRW50cnlSZWJvb3RzLnNpemUgPiAwXG5cdFx0XHRcdFx0XHQ/IFsuLi50aGlzLnBlbmRpbmdFbnRyeVJlYm9vdHNdXG5cdFx0XHRcdFx0XHQ6IFsuLi50aGlzLmVudHJpZXMua2V5cygpXTtcblx0XHRcdFx0dGhpcy5wZW5kaW5nRW50cnlSZWJvb3RzLmNsZWFyKCk7XG5cdFx0XHRcdHRoaXMubG9nZ2VyLnRyYWNlKGBSZWJvb3RpbmcgJHt0b1JlYm9vdC5sZW5ndGh9IGVudHJ5IG1vZHVsZShzKWApO1xuXHRcdFx0XHRhd2FpdCB0aGlzLmRpc3Bvc2VFbnRyaWVzKHRvUmVib290KTtcblx0XHRcdFx0YXdhaXQgdGhpcy5ib290RW50cmllcyh0b1JlYm9vdCk7XG5cdFx0XHRcdHRoaXMuZW1pdChcInJlYm9vdFwiKTtcblx0XHRcdH0gd2hpbGUgKHRoaXMucmVib290Rm9sbG93VXAgJiYgIXRoaXMuZGlzcG9zZWQpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHRjb25zdCBuZWVkc0ZvbGxvd1VwID0gdGhpcy5yZWJvb3RGb2xsb3dVcCAmJiAhdGhpcy5kaXNwb3NlZDtcblx0XHRcdHRoaXMucmVib290Rm9sbG93VXAgPSBmYWxzZTtcblx0XHRcdHRoaXMucmVib290SW5GbGlnaHQgPSBmYWxzZTtcblx0XHRcdGlmIChuZWVkc0ZvbGxvd1VwKSB0aGlzLnJlcXVlc3RSZWJvb3QoKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGRpc3Bvc2VFbnRyaWVzKGVudHJ5UGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdKSB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoZW50cnlQYXRocy5tYXAoKGVudHJ5UGF0aCkgPT4gdGhpcy5kaXNwb3NlRW50cnkoZW50cnlQYXRoKSkpO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBkaXNwb3NlRW50cnkoZW50cnlQYXRoPzogc3RyaW5nKSB7XG5cdFx0Y29uc3QgcGF0aHMgPSBlbnRyeVBhdGggIT0gbnVsbCA/IFtlbnRyeVBhdGhdIDogWy4uLnRoaXMuZW50cmllcy5rZXlzKCldO1xuXHRcdGZvciAoY29uc3QgcCBvZiBwYXRocykge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSB0aGlzLmVudHJpZXMuZ2V0KHApO1xuXHRcdFx0aWYgKHN0YXRlID09IG51bGwpIGNvbnRpbnVlO1xuXHRcdFx0Y29uc3QgZW50cnkgPSBzdGF0ZS5tb2R1bGU7XG5cdFx0XHRzdGF0ZS5tb2R1bGUgPSB1bmRlZmluZWQ7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRhd2FpdCBlbnRyeT8uW1N5bWJvbC5hc3luY0Rpc3Bvc2VdKCk7XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihcIkVudHJ5IGFzeW5jRGlzcG9zZSBmYWlsZWRcIiwgZXJyb3IpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIOKUgOKUgCBTZXR1cCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIHJlcXVpcmVXb3Jrc3BhY2UoKTogV29ya3NwYWNlIHtcblx0XHRjb25zdCB3b3Jrc3BhY2UgPSB0aGlzLmxvYWRlci5nZXRXb3Jrc3BhY2UoKTtcblx0XHRpZiAod29ya3NwYWNlID09IG51bGwpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIlNvdXJjZU1vZHVsZUxvYWRlciBoYXMgbm8gd29ya3NwYWNlIGFmdGVyIGNvbmZpZ3VyZVwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHdvcmtzcGFjZTtcblx0fVxuXG5cdHByaXZhdGUgcmVzb2x2ZVByb2plY3RzKGJ1aWxkQ29uZmlnOiBzdHJpbmcsIG9wdGlvbnM6IEhvdFJlbG9hZFNlcnZlck9wdGlvbnMpOiBQcm9qZWN0W10ge1xuXHRcdGNvbnN0IHByb2plY3RzID0gdGhpcy5sb2FkZXIuZ2V0V29ya3NwYWNlKCk/LmdldFByb2plY3RzKGJ1aWxkQ29uZmlnKSA/PyBbXTtcblx0XHRjb25zdCBuYW1lcyA9XG5cdFx0XHRvcHRpb25zLnByb2plY3RzICE9IG51bGwgJiYgb3B0aW9ucy5wcm9qZWN0cy5sZW5ndGggPiAwXG5cdFx0XHRcdD8gb3B0aW9ucy5wcm9qZWN0c1xuXHRcdFx0XHQ6IG9wdGlvbnMucHJvamVjdCAhPSBudWxsXG5cdFx0XHRcdFx0PyBbb3B0aW9ucy5wcm9qZWN0XVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKG5hbWVzID09IG51bGwpIHtcblx0XHRcdGNvbnN0IGZpcnN0ID0gcHJvamVjdHMuYXQoMCk7XG5cdFx0XHRpZiAoZmlyc3QgPT0gbnVsbCkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vIHByb2plY3RzIGZvdW5kIGZvciBjb25maWd1cmF0aW9uOiAke2J1aWxkQ29uZmlnfWApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtmaXJzdF07XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2VsZWN0ZWQ6IFByb2plY3RbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgbmFtZSBvZiBuYW1lcykge1xuXHRcdFx0Y29uc3QgZm91bmQgPSBwcm9qZWN0cy5maW5kKChwKSA9PiBwLm5hbWUgPT09IG5hbWUpO1xuXHRcdFx0aWYgKGZvdW5kID09IG51bGwpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBQcm9qZWN0IFwiJHtuYW1lfVwiIG5vdCBmb3VuZCBpbiB3b3Jrc3BhY2VgKTtcblx0XHRcdH1cblx0XHRcdHNlbGVjdGVkLnB1c2goZm91bmQpO1xuXHRcdH1cblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHQvKipcblx0ICogUG9zdC1uZXh0IGRlcGVuZGVuY3kgdHJhY2tlcjogcmVjb3JkcyB3aGljaCBzb3VyY2UgZmlsZXMgaW1wb3J0IHdoaWNoXG5cdCAqIG90aGVyIHNvdXJjZSBmaWxlcyBzbyB0aGF0IHJlbG9hZElmQWZmZWN0ZWQgY2FuIHRyYXZlcnNlIHRoZSBncmFwaC5cblx0ICovXG5cdHByaXZhdGUgb25Qb3N0UmVzb2x2ZSA9IChyZXN1bHQ6IFJlc29sdmVGbk91dHB1dCwgcGFyZW50VXJsOiBzdHJpbmcpID0+IHtcblx0XHRjb25zdCB7IHVybCB9ID0gcmVzdWx0O1xuXHRcdGNvbnN0IHBhcmVudFVybENsZWFuID0gcGFyZW50VXJsLnNwbGl0KFwiP1wiKVswXTtcblxuXHRcdGxldCBmaWxlUGF0aDogc3RyaW5nO1xuXHRcdGxldCBwYXJlbnRQYXRoOiBzdHJpbmc7XG5cblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgdXJsT2JqID0gbmV3IFVSTCh1cmwpO1xuXHRcdFx0dXJsT2JqLnNlYXJjaCA9IFwiXCI7XG5cdFx0XHRmaWxlUGF0aCA9IGlvLmZpbGVVcmxUb1BhdGgodXJsT2JqLnRvU3RyaW5nKCkpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHRyeSB7XG5cdFx0XHRwYXJlbnRQYXRoID0gaW8uZmlsZVVybFRvUGF0aChwYXJlbnRVcmxDbGVhbik7XG5cdFx0fSBjYXRjaCB7XG5cdFx0XHRwYXJlbnRQYXRoID0gXCJcIjtcblx0XHR9XG5cblx0XHRjb25zdCBpc1NvdXJjZSA9IHRoaXMubG9hZGVyLmhhc1NvdXJjZUZpbGUoZmlsZVBhdGgpO1xuXHRcdGNvbnN0IHBhcmVudElzU291cmNlID0gdGhpcy5sb2FkZXIuaGFzU291cmNlRmlsZShwYXJlbnRQYXRoKTtcblxuXHRcdGlmIChpc1NvdXJjZSB8fCBwYXJlbnRJc1NvdXJjZSkge1xuXHRcdFx0dGhpcy50cmFja0RlcGVuZGVuY3koZmlsZVBhdGgsIHBhcmVudFBhdGgpO1xuXHRcdH1cblx0fTtcblxuXHQvLyDilIDilIAgRmlsZSB3YXRjaGluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIG9uRmlsZUNoYW5nZSA9IChldnQ6IFByb2plY3RGaWxlRXZlbnQpID0+IHtcblx0XHRjb25zdCB7IGZpbGUsIGV2ZW50TmFtZSwgcHJvamVjdCB9ID0gZXZ0O1xuXHRcdGNvbnN0IGZ1bGxQYXRoID0gZmlsZS5mdWxsUGF0aDtcblxuXHRcdHRoaXMubG9nZ2VyLnRyYWNlKGBGaWxlICR7ZXZlbnROYW1lfTogJHtmdWxsUGF0aH1gKTtcblxuXHRcdGlmIChldmVudE5hbWUgPT09IGlvLldhdGNoRXZlbnRzLnVubGluaykge1xuXHRcdFx0dGhpcy5sb2FkZXIuaW52YWxpZGF0ZVRyYW5zcGlsZShmdWxsUGF0aCk7XG5cdFx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChmdWxsUGF0aCwgbnVsbCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKGV2ZW50TmFtZSA9PT0gaW8uV2F0Y2hFdmVudHMuYWRkKSB7XG5cdFx0XHRpZiAocHJvamVjdC5pc1NvdXJjZUZpbGUoZmlsZSkpIHtcblx0XHRcdFx0dGhpcy5sb2FkZXIuc2V0U291cmNlRmlsZShmdWxsUGF0aCwgcHJvamVjdCk7XG5cdFx0XHRcdHRoaXMubW9kdWxlQ2FjaGUuc2V0KGZ1bGxQYXRoLCBudWxsKTtcblx0XHRcdFx0dGhpcy5yZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBjaGFuZ2Vcblx0XHRpZiAoIXByb2plY3QuaXNTb3VyY2VGaWxlKGZpbGUpKSByZXR1cm47XG5cdFx0dGhpcy5sb2FkZXIuaW52YWxpZGF0ZVRyYW5zcGlsZShmdWxsUGF0aCk7XG5cdFx0dGhpcy5yZWxvYWRJZkFmZmVjdGVkKGZ1bGxQYXRoKTtcblx0fTtcblxuXHRwcml2YXRlIHJlbG9hZElmQWZmZWN0ZWQoZnVsbFBhdGg6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGRlcHMgPSB0aGlzLmdldERlcGVuZGVuY3lHcmFwaChmdWxsUGF0aCk7XG5cdFx0Y29uc3QgbW9kdWxlcyA9IFsuLi5uZXcgU2V0KFsuLi5kZXBzLCBmdWxsUGF0aF0pXTtcblx0XHRjb25zdCBhZmZlY3RlZEVudHJpZXMgPSBbLi4udGhpcy5lbnRyaWVzLmtleXMoKV0uZmlsdGVyKChlbnRyeVBhdGgpID0+XG5cdFx0XHRtb2R1bGVzLmluY2x1ZGVzKGVudHJ5UGF0aCksXG5cdFx0KTtcblxuXHRcdGlmIChhZmZlY3RlZEVudHJpZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci50cmFjZShgQ2hhbmdlIGluICR7ZnVsbFBhdGh9IGRvZXMgbm90IGFmZmVjdCBlbnRyeSDigJQgc2tpcHBpbmcgcmVsb2FkYCk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0dGhpcy5sb2dnZXIudHJhY2UoXG5cdFx0XHRgQ2hhbmdlIGluICR7ZnVsbFBhdGh9IGFmZmVjdHMgJHttb2R1bGVzLmxlbmd0aH0gbW9kdWxlKHMpIOKAlCBzY2hlZHVsaW5nIHJlbG9hZGAsXG5cdFx0KTtcblx0XHR0aGlzLmludmFsaWRhdGVNb2R1bGUoLi4ubW9kdWxlcyk7XG5cdFx0Zm9yIChjb25zdCBlbnRyeVBhdGggb2YgYWZmZWN0ZWRFbnRyaWVzKSB7XG5cdFx0XHR0aGlzLnBlbmRpbmdFbnRyeVJlYm9vdHMuYWRkKGVudHJ5UGF0aCk7XG5cdFx0fVxuXHRcdHRoaXMuc2NoZWR1bGVSZWJvb3QoKTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIOKUgOKUgCBEZXBlbmRlbmN5IGdyYXBoIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG5cdHByaXZhdGUgZ2V0RGVwZW5kZW5jeUdyYXBoKG1vZHVsZUlkOiBzdHJpbmcsIHBhcmVudE1vZHVsZXM6IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XG5cdFx0aWYgKHRoaXMuaXNTZWxmKG1vZHVsZUlkKSkgcmV0dXJuIFtdO1xuXG5cdFx0Y29uc3QgbW9kdWxlRGVwcyA9IHRoaXMuZGVwZW5kZW5jaWVzLmdldChtb2R1bGVJZCkgPz8gW107XG5cdFx0aWYgKHBhcmVudE1vZHVsZXMuaW5jbHVkZXMobW9kdWxlSWQpKSB7XG5cdFx0XHR0aGlzLmxvZ2dlci5lcnJvcihgQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkOiAke21vZHVsZUlkfWApO1xuXHRcdFx0cmV0dXJuIFtdO1xuXHRcdH1cblxuXHRcdGxldCBzdWJEZXBzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdGZvciAoY29uc3QgZGVwIG9mIG1vZHVsZURlcHMpIHtcblx0XHRcdGlmICghdGhpcy5sb2FkZXIuaGFzU291cmNlRmlsZShkZXApKSBjb250aW51ZTtcblx0XHRcdGNvbnN0IHN1YnMgPSB0aGlzLmdldERlcGVuZGVuY3lHcmFwaChkZXAsIFttb2R1bGVJZCwgLi4ucGFyZW50TW9kdWxlc10pO1xuXHRcdFx0c3ViRGVwcyA9IFsuLi5zdWJEZXBzLCAuLi5zdWJzXTtcblx0XHR9XG5cblx0XHRyZXR1cm4gWy4uLm5ldyBTZXQoWy4uLm1vZHVsZURlcHMsIC4uLnN1YkRlcHNdKV07XG5cdH1cblxuXHRwcml2YXRlIHRyYWNrRGVwZW5kZW5jeShmaWxlUGF0aDogc3RyaW5nLCBwYXJlbnRQYXRoOiBzdHJpbmcpIHtcblx0XHRpZiAoIXBhcmVudFBhdGgpIHJldHVybjtcblx0XHRjb25zdCBkZXBzID0gdGhpcy5kZXBlbmRlbmNpZXMuZ2V0KGZpbGVQYXRoKSA/PyBbXTtcblx0XHRjb25zdCB1cGRhdGVkRGVwcyA9IG5ldyBTZXQoWy4uLmRlcHMsIHBhcmVudFBhdGhdKTtcblx0XHR0aGlzLmRlcGVuZGVuY2llcy5zZXQoZmlsZVBhdGgsIFsuLi51cGRhdGVkRGVwc10pO1xuXHR9XG5cblx0Ly8g4pSA4pSAIE1vZHVsZSBjYWNoZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuXHRwcml2YXRlIGdldENhY2hlZE9yTmV3KG1vZHVsZVVybDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgZmlsZVBhdGggPSBpby5maWxlVXJsVG9QYXRoKG1vZHVsZVVybCk7XG5cdFx0Y29uc3QgY2FjaGVkID0gdGhpcy5tb2R1bGVDYWNoZS5nZXQoZmlsZVBhdGgpO1xuXHRcdGNvbnN0IHZlcnNpb25lZCA9IGNhY2hlZCA/PyB0aGlzLnZlcnNpb25Nb2R1bGUobW9kdWxlVXJsKTtcblx0XHR0aGlzLm1vZHVsZUNhY2hlLnNldChmaWxlUGF0aCwgdmVyc2lvbmVkKTtcblx0XHRyZXR1cm4gdmVyc2lvbmVkO1xuXHR9XG5cblx0cHJpdmF0ZSB2ZXJzaW9uTW9kdWxlKG1vZHVsZVVybDogc3RyaW5nKSB7XG5cdFx0Y29uc3QgdmVyc2lvbmVkVXJsID0gbmV3IFVSTChtb2R1bGVVcmwpO1xuXHRcdHZlcnNpb25lZFVybC5zZWFyY2hQYXJhbXMuc2V0KFZFUlNJT05fVVJMX1BBUkFNLCBTdHJpbmcoKyttb2R1bGVWZXJzaW9uU2VxKSk7XG5cdFx0cmV0dXJuIHZlcnNpb25lZFVybC50b1N0cmluZygpO1xuXHR9XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlTW9kdWxlKC4uLm1vZHVsZXM6IHN0cmluZ1tdKSB7XG5cdFx0Zm9yIChjb25zdCBtb2R1bGUgb2YgbW9kdWxlcykge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQobW9kdWxlLCBudWxsKTtcblx0XHRcdHRoaXMubG9hZGVyLmludmFsaWRhdGVUcmFuc3BpbGUobW9kdWxlKTtcblx0XHRcdC8vIFBydW5lIHN0YWxlIG91dGdvaW5nIGVkZ2VzOiByZW1vdmUgdGhpcyBtb2R1bGUgYXMgYSBwYXJlbnQgZnJvbSBhbGwgZGVwZW5kZW5jeSBsaXN0c1xuXHRcdFx0Zm9yIChjb25zdCBba2V5LCBwYXJlbnRzXSBvZiB0aGlzLmRlcGVuZGVuY2llcykge1xuXHRcdFx0XHRjb25zdCBmaWx0ZXJlZCA9IHBhcmVudHMuZmlsdGVyKChwKSA9PiBwICE9PSBtb2R1bGUpO1xuXHRcdFx0XHRpZiAoZmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuZGVsZXRlKGtleSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5kZXBlbmRlbmNpZXMuc2V0KGtleSwgZmlsdGVyZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBpbnZhbGlkYXRlQWxsU291cmNlRmlsZXMoKSB7XG5cdFx0Zm9yIChjb25zdCBmaWxlUGF0aCBvZiB0aGlzLmxvYWRlci5zb3VyY2VGaWxlUGF0aHMoKSkge1xuXHRcdFx0dGhpcy5tb2R1bGVDYWNoZS5zZXQoZmlsZVBhdGgsIG51bGwpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgaXNTZWxmKGZpbGVQYXRoOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gY3VycmVudEZpbGVQYXRoID09PSBwYXRoLnJlc29sdmUoZmlsZVBhdGgpO1xuXHR9XG59XG4iXSwibmFtZXMiOlsiREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMiLCJIb3RSZWxvYWRTZXJ2ZXIiLCJyZXNvbHZlUmVib290RGVib3VuY2VNcyIsImN1cnJlbnRGaWxlUGF0aCIsImlvIiwiZmlsZVVybFRvUGF0aCIsIlZFUlNJT05fVVJMX1BBUkFNIiwidmFsdWUiLCJkZWxheSIsIk51bWJlciIsImlzRmluaXRlIiwiRXJyb3IiLCJTdHJpbmciLCJtb2R1bGVWZXJzaW9uU2VxIiwiRXZlbnRFbWl0dGVyIiwibG9nZ2VyIiwic2NyaWJlIiwibmFtZSIsImxvYWRlciIsIlNvdXJjZU1vZHVsZUxvYWRlciIsImRpc3Bvc2VkIiwiZW50cmllcyIsIk1hcCIsInBlbmRpbmdFbnRyeVJlYm9vdHMiLCJTZXQiLCJ3YXRjaFN1YnNjcmlwdGlvbiIsIm1vZHVsZUNhY2hlIiwiZGVwZW5kZW5jaWVzIiwicmVib290VGFpbCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVib290RGVib3VuY2VHZW4iLCJyZWJvb3RJbkZsaWdodCIsInJlYm9vdEZvbGxvd1VwIiwicmVib290UXVldWVkIiwic2NoZWR1bGVSZWJvb3QiLCJzdGFydCIsIm9wdGlvbnMiLCJjbGVhciIsImJpbmRTY2hlZHVsZVJlYm9vdCIsInJlYm9vdERlYm91bmNlTXMiLCJidWlsZENvbmZpZyIsImNvbmZpZ3VyZSIsIndvcmtzcGFjZSIsInZlcnNpb25GaWxlVXJsIiwiZmlsZVVybCIsImdldENhY2hlZE9yTmV3Iiwib25SZXNvbHZlZCIsIm9uUG9zdFJlc29sdmUiLCJyZXF1aXJlV29ya3NwYWNlIiwic2VsZWN0ZWQiLCJyZXNvbHZlUHJvamVjdHMiLCJwcm9qZWN0IiwiZW50cnlQYXRoIiwicGF0aCIsImdldFNvdXJjZUVudHJ5UGF0aCIsInNldCIsInJlZ2lzdGVySG9va3MiLCJpbnZhbGlkYXRlQWxsU291cmNlRmlsZXMiLCJ3YXRjaCIsInByb2plY3RGaWxlQ2hhbmdlZCQiLCJzdWJzY3JpYmUiLCJvbkZpbGVDaGFuZ2UiLCJlbnRyeSIsInZhbHVlcyIsInRyYWNlIiwiYm9vdEVudHJpZXMiLCJrZXlzIiwiZW1pdCIsImRpc3Bvc2UiLCJ1bnN1YnNjcmliZSIsImRpc3Bvc2VFbnRyaWVzIiwiU3ltYm9sIiwiYXN5bmNEaXNwb3NlIiwiZW50cnlQYXRocyIsImFsbCIsIm1hcCIsImJvb3RFbnRyeSIsInN0YXRlIiwiZ2V0IiwibW9kIiwiaW1wb3J0RW50cnkiLCJtb2R1bGUiLCJkZWZhdWx0IiwiZXJyb3IiLCJ1bmRlZmluZWQiLCJkZWxheU1zIiwiZ2VuIiwiZGVib3VuY2UiLCJyZXF1ZXN0UmVib290IiwidGhlbiIsInJ1blJlYm9vdCIsInRvUmVib290Iiwic2l6ZSIsImxlbmd0aCIsIm5lZWRzRm9sbG93VXAiLCJkaXNwb3NlRW50cnkiLCJwYXRocyIsInAiLCJnZXRXb3Jrc3BhY2UiLCJwcm9qZWN0cyIsImdldFByb2plY3RzIiwibmFtZXMiLCJmaXJzdCIsImF0IiwiZm91bmQiLCJmaW5kIiwicHVzaCIsInJlc3VsdCIsInBhcmVudFVybCIsInVybCIsInBhcmVudFVybENsZWFuIiwic3BsaXQiLCJmaWxlUGF0aCIsInBhcmVudFBhdGgiLCJ1cmxPYmoiLCJVUkwiLCJzZWFyY2giLCJ0b1N0cmluZyIsImlzU291cmNlIiwiaGFzU291cmNlRmlsZSIsInBhcmVudElzU291cmNlIiwidHJhY2tEZXBlbmRlbmN5IiwiZXZ0IiwiZmlsZSIsImV2ZW50TmFtZSIsImZ1bGxQYXRoIiwiV2F0Y2hFdmVudHMiLCJ1bmxpbmsiLCJpbnZhbGlkYXRlVHJhbnNwaWxlIiwiYWRkIiwiaXNTb3VyY2VGaWxlIiwic2V0U291cmNlRmlsZSIsInJlbG9hZElmQWZmZWN0ZWQiLCJkZXBzIiwiZ2V0RGVwZW5kZW5jeUdyYXBoIiwibW9kdWxlcyIsImFmZmVjdGVkRW50cmllcyIsImZpbHRlciIsImluY2x1ZGVzIiwiaW52YWxpZGF0ZU1vZHVsZSIsIm1vZHVsZUlkIiwicGFyZW50TW9kdWxlcyIsImlzU2VsZiIsIm1vZHVsZURlcHMiLCJzdWJEZXBzIiwiZGVwIiwic3VicyIsInVwZGF0ZWREZXBzIiwibW9kdWxlVXJsIiwiY2FjaGVkIiwidmVyc2lvbmVkIiwidmVyc2lvbk1vZHVsZSIsInZlcnNpb25lZFVybCIsInNlYXJjaFBhcmFtcyIsImtleSIsInBhcmVudHMiLCJmaWx0ZXJlZCIsImRlbGV0ZSIsInNvdXJjZUZpbGVQYXRocyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFhYUE7ZUFBQUE7O1FBMENBQztlQUFBQTs7UUF4Q0dDO2VBQUFBOzs7NEJBZmE7aUVBRVo7b0JBRUU7d0JBQ007d0JBQ1c7b0NBRUQ7Ozs7OztBQUVuQyxNQUFNQyxrQkFBa0JDLE1BQUUsQ0FBQ0MsYUFBYSxDQUFDO0FBQ3pDLE1BQU1DLG9CQUFvQjtBQUVuQixNQUFNTiw2QkFBNkI7QUFFbkMsU0FBU0Usd0JBQXdCSyxLQUF5QjtJQUNoRSxNQUFNQyxRQUFRRCxTQUFTUDtJQUN2QixJQUFJLENBQUNTLE9BQU9DLFFBQVEsQ0FBQ0YsVUFBVUEsUUFBUSxHQUFHO1FBQ3pDLE1B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
|
package/commonjs/src/index.js
CHANGED
|
@@ -21,6 +21,9 @@ _export(exports, {
|
|
|
21
21
|
get HotReloadServer () {
|
|
22
22
|
return _hotreloadserver.HotReloadServer;
|
|
23
23
|
},
|
|
24
|
+
get SourceModuleLoader () {
|
|
25
|
+
return _sourcemoduleloader.SourceModuleLoader;
|
|
26
|
+
},
|
|
24
27
|
get classifySliceProject () {
|
|
25
28
|
return _sliceserve.classifySliceProject;
|
|
26
29
|
},
|
|
@@ -44,5 +47,6 @@ const _deferredscriptrunner = require("./deferred-script-runner.js");
|
|
|
44
47
|
const _fluxmodule = require("./flux.module.js");
|
|
45
48
|
const _hotreloadserver = require("./hot-reload-server.js");
|
|
46
49
|
const _sliceserve = require("./slice-serve.js");
|
|
50
|
+
const _sourcemoduleloader = require("./source-module-loader.js");
|
|
47
51
|
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2ZsdXgvc3JjL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IERlZmVycmVkU2NyaXB0UnVubmVyIH0gZnJvbSBcIi4vZGVmZXJyZWQtc2NyaXB0LXJ1bm5lci5qc1wiO1xuZXhwb3J0IHsgRmx1eE1vZHVsZSB9IGZyb20gXCIuL2ZsdXgubW9kdWxlLmpzXCI7XG5leHBvcnQgdHlwZSB7IEhvdFJlbG9hZFNlcnZlck9wdGlvbnMgfSBmcm9tIFwiLi9ob3QtcmVsb2FkLXNlcnZlci5qc1wiO1xuZXhwb3J0IHsgREVGQVVMVF9SRUJPT1RfREVCT1VOQ0VfTVMsIEhvdFJlbG9hZFNlcnZlciB9IGZyb20gXCIuL2hvdC1yZWxvYWQtc2VydmVyLmpzXCI7XG5leHBvcnQgdHlwZSB7IFJ1bk9wdGlvbnMgfSBmcm9tIFwiLi9ydW4uYWN0aW9uLmpzXCI7XG5leHBvcnQgdHlwZSB7IFNlcnZlT3B0aW9ucyB9IGZyb20gXCIuL3NlcnZlLmFjdGlvbi5qc1wiO1xuZXhwb3J0IHtcblx0dHlwZSBDbGFzc2lmaWVkU2xpY2UsXG5cdGNsYXNzaWZ5U2xpY2VQcm9qZWN0LFxuXHRjbGFzc2lmeVNsaWNlUHJvamVjdHMsXG5cdG5vcm1hbGl6ZVNsaWNlUHJlZml4LFxuXHRwcm9qZWN0c0luU2xpY2UsXG5cdHByb2plY3RzSW5TbGljZXMsXG5cdHJlc29sdmVEZWZlclNjcmlwdCxcblx0dHlwZSBTbGljZUtpbmQsXG5cdHR5cGUgU2xpY2VQcm9qZWN0Vmlldyxcbn0gZnJvbSBcIi4vc2xpY2Utc2VydmUuanNcIjtcbmV4cG9ydCB0eXBlIHsgU291cmNlTW9kdWxlTG9hZGVyT3B0aW9ucyB9IGZyb20gXCIuL3NvdXJjZS1tb2R1bGUtbG9hZGVyLmpzXCI7XG5leHBvcnQgeyBTb3VyY2VNb2R1bGVMb2FkZXIgfSBmcm9tIFwiLi9zb3VyY2UtbW9kdWxlLWxvYWRlci5qc1wiO1xuIl0sIm5hbWVzIjpbIkRFRkFVTFRfUkVCT09UX0RFQk9VTkNFX01TIiwiRGVmZXJyZWRTY3JpcHRSdW5uZXIiLCJGbHV4TW9kdWxlIiwiSG90UmVsb2FkU2VydmVyIiwiU291cmNlTW9kdWxlTG9hZGVyIiwiY2xhc3NpZnlTbGljZVByb2plY3QiLCJjbGFzc2lmeVNsaWNlUHJvamVjdHMiLCJub3JtYWxpemVTbGljZVByZWZpeCIsInByb2plY3RzSW5TbGljZSIsInByb2plY3RzSW5TbGljZXMiLCJyZXNvbHZlRGVmZXJTY3JpcHQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBR1NBO2VBQUFBLDJDQUEwQjs7UUFIMUJDO2VBQUFBLDBDQUFvQjs7UUFDcEJDO2VBQUFBLHNCQUFVOztRQUVrQkM7ZUFBQUEsZ0NBQWU7O1FBZTNDQztlQUFBQSxzQ0FBa0I7O1FBVjFCQztlQUFBQSxnQ0FBb0I7O1FBQ3BCQztlQUFBQSxpQ0FBcUI7O1FBQ3JCQztlQUFBQSxnQ0FBb0I7O1FBQ3BCQztlQUFBQSwyQkFBZTs7UUFDZkM7ZUFBQUEsNEJBQWdCOztRQUNoQkM7ZUFBQUEsOEJBQWtCOzs7c0NBYmtCOzRCQUNWO2lDQUVpQzs0QkFhckQ7b0NBRTRCIn0=
|