@mnaoumov/typescript-dev-toolkit 4.0.0 → 5.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,120 @@
1
+ /*
2
+ THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
3
+ if you want to view the source, please visit the github repository of this plugin
4
+ */
5
+ (function () {
6
+ function ensureBrowserProcess() {
7
+ const browserProcess = {
8
+ browser: true,
9
+ cwd() {
10
+ return '/';
11
+ },
12
+ env: {},
13
+ platform: 'android'
14
+ };
15
+
16
+ const existingProcess = globalThis.process;
17
+
18
+ if (!existingProcess) {
19
+ globalThis.process = browserProcess;
20
+ return;
21
+ }
22
+
23
+ if (existingProcess.versions?.node) {
24
+ return;
25
+ }
26
+
27
+ const existingProcessRecord = existingProcess;
28
+
29
+ for (const [key, value] of Object.entries(browserProcess)) {
30
+ existingProcessRecord[key] ??= value;
31
+ }
32
+
33
+ existingProcessRecord['browser'] = true;
34
+ }
35
+
36
+ ensureBrowserProcess();
37
+ })();
38
+
39
+ import { assertNonNullable } from "@mnaoumov/typescript-lib/type-guards";
40
+ const RESTRICTED_NAMES = /* @__PURE__ */ new Set([
41
+ "arguments",
42
+ "bigint",
43
+ "boolean",
44
+ "event",
45
+ "function",
46
+ "module",
47
+ "number",
48
+ "object",
49
+ "string",
50
+ "symbol",
51
+ "undefined"
52
+ ]);
53
+ const noKeywordIdentifiers = {
54
+ create(context) {
55
+ const sourceCode = context.sourceCode;
56
+ return {
57
+ "Program:exit"() {
58
+ const scopes = sourceCode.scopeManager.scopes;
59
+ const reported = /* @__PURE__ */ new Set();
60
+ for (const scope of scopes) {
61
+ for (const variable of scope.variables) {
62
+ if (!RESTRICTED_NAMES.has(variable.name)) {
63
+ continue;
64
+ }
65
+ const replacement = `$${variable.name}`;
66
+ const nodes = [.../* @__PURE__ */ new Set([...variable.identifiers, ...variable.references.map((reference) => reference.identifier)])];
67
+ const canRename = variable.defs.every((definition) => definition.type !== "ClassName") && scopes.every(
68
+ (candidate) => candidate.variables.every((binding) => binding.name !== replacement) && candidate.through.every((reference) => reference.identifier.name !== replacement)
69
+ ) && nodes.every(
70
+ (node) => sourceCode.getAncestors(node).every(
71
+ (ancestor) => ![
72
+ "ExportDefaultDeclaration",
73
+ "ExportNamedDeclaration",
74
+ "ExportSpecifier",
75
+ "ImportSpecifier",
76
+ "Property",
77
+ "TSParameterProperty"
78
+ ].includes(ancestor.type)
79
+ )
80
+ );
81
+ for (const identifier of variable.identifiers) {
82
+ if (reported.has(identifier)) {
83
+ continue;
84
+ }
85
+ reported.add(identifier);
86
+ context.report({
87
+ data: { name: variable.name, replacement },
88
+ messageId: "restricted",
89
+ node: identifier,
90
+ suggest: canRename ? [{
91
+ data: { replacement },
92
+ fix: (fixer) => nodes.map((node) => {
93
+ const token = sourceCode.getFirstToken(node);
94
+ assertNonNullable(token, "A binding identifier always has a token");
95
+ return fixer.replaceText(token, replacement);
96
+ }),
97
+ messageId: "rename"
98
+ }] : []
99
+ });
100
+ }
101
+ }
102
+ }
103
+ }
104
+ };
105
+ },
106
+ meta: {
107
+ docs: { description: "Require a $ prefix on bare keyword and colliding global binding names" },
108
+ hasSuggestions: true,
109
+ messages: {
110
+ rename: 'Rename this binding and its references to "{{ replacement }}".',
111
+ restricted: 'Rename "{{ name }}" to "{{ replacement }}". Preserve any public contract when renaming.'
112
+ },
113
+ schema: [],
114
+ type: "suggestion"
115
+ }
116
+ };
117
+ export {
118
+ noKeywordIdentifiers
119
+ };
120
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby1rZXl3b3JkLWlkZW50aWZpZXJzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBSZWplY3QgYmFyZSBrZXl3b3JkIGFuZCBjb2xsaWRpbmcgZ2xvYmFsIG5hbWVzIGluIGRlY2xhcmVkIGJpbmRpbmdzLlxuICovXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuXG5pbXBvcnQgeyBhc3NlcnROb25OdWxsYWJsZSB9IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi90eXBlLWd1YXJkcyc7XG5cbmNvbnN0IFJFU1RSSUNURURfTkFNRVMgPSBuZXcgU2V0KFtcbiAgJ2FyZ3VtZW50cycsXG4gICdiaWdpbnQnLFxuICAnYm9vbGVhbicsXG4gICdldmVudCcsXG4gICdmdW5jdGlvbicsXG4gICdtb2R1bGUnLFxuICAnbnVtYmVyJyxcbiAgJ29iamVjdCcsXG4gICdzdHJpbmcnLFxuICAnc3ltYm9sJyxcbiAgJ3VuZGVmaW5lZCdcbl0pO1xuXG4vKipcbiAqIERpc2FsbG93cyBiYXJlIGtleXdvcmQgbmFtZXMsIHdpdGggY29uc2VydmF0aXZlLCBzY29wZS1hd2FyZSByZW5hbWUgc3VnZ2VzdGlvbnMgZm9yIGxvY2FsIGJpbmRpbmdzLlxuICovXG5leHBvcnQgY29uc3Qgbm9LZXl3b3JkSWRlbnRpZmllcnM6IFJ1bGUuUnVsZU1vZHVsZSA9IHtcbiAgY3JlYXRlKGNvbnRleHQpIHtcbiAgICBjb25zdCBzb3VyY2VDb2RlID0gY29udGV4dC5zb3VyY2VDb2RlO1xuICAgIHJldHVybiB7XG4gICAgICAnUHJvZ3JhbTpleGl0JygpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2NvcGVzID0gc291cmNlQ29kZS5zY29wZU1hbmFnZXIuc2NvcGVzO1xuICAgICAgICBjb25zdCByZXBvcnRlZCA9IG5ldyBTZXQ8dW5rbm93bj4oKTtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBzY29wZXMpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhcmlhYmxlIG9mIHNjb3BlLnZhcmlhYmxlcykge1xuICAgICAgICAgICAgaWYgKCFSRVNUUklDVEVEX05BTUVTLmhhcyh2YXJpYWJsZS5uYW1lKSkge1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gYCQke3ZhcmlhYmxlLm5hbWV9YDtcbiAgICAgICAgICAgIGNvbnN0IG5vZGVzID0gWy4uLm5ldyBTZXQoWy4uLnZhcmlhYmxlLmlkZW50aWZpZXJzLCAuLi52YXJpYWJsZS5yZWZlcmVuY2VzLm1hcCgocmVmZXJlbmNlKSA9PiByZWZlcmVuY2UuaWRlbnRpZmllcildKV07XG4gICAgICAgICAgICBjb25zdCBjYW5SZW5hbWUgPSB2YXJpYWJsZS5kZWZzLmV2ZXJ5KChkZWZpbml0aW9uKSA9PiBkZWZpbml0aW9uLnR5cGUgIT09ICdDbGFzc05hbWUnKVxuICAgICAgICAgICAgICAmJiBzY29wZXMuZXZlcnkoKGNhbmRpZGF0ZSkgPT5cbiAgICAgICAgICAgICAgICBjYW5kaWRhdGUudmFyaWFibGVzLmV2ZXJ5KChiaW5kaW5nKSA9PiBiaW5kaW5nLm5hbWUgIT09IHJlcGxhY2VtZW50KVxuICAgICAgICAgICAgICAgICYmIGNhbmRpZGF0ZS50aHJvdWdoLmV2ZXJ5KChyZWZlcmVuY2UpID0+IHJlZmVyZW5jZS5pZGVudGlmaWVyLm5hbWUgIT09IHJlcGxhY2VtZW50KVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICYmIG5vZGVzLmV2ZXJ5KChub2RlKSA9PlxuICAgICAgICAgICAgICAgIHNvdXJjZUNvZGUuZ2V0QW5jZXN0b3JzKG5vZGUpLmV2ZXJ5KChhbmNlc3RvcikgPT5cbiAgICAgICAgICAgICAgICAgICFbXG4gICAgICAgICAgICAgICAgICAgICdFeHBvcnREZWZhdWx0RGVjbGFyYXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnRXhwb3J0TmFtZWREZWNsYXJhdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdFeHBvcnRTcGVjaWZpZXInLFxuICAgICAgICAgICAgICAgICAgICAnSW1wb3J0U3BlY2lmaWVyJyxcbiAgICAgICAgICAgICAgICAgICAgJ1Byb3BlcnR5JyxcbiAgICAgICAgICAgICAgICAgICAgJ1RTUGFyYW1ldGVyUHJvcGVydHknXG4gICAgICAgICAgICAgICAgICBdLmluY2x1ZGVzKGFuY2VzdG9yLnR5cGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgZm9yIChjb25zdCBpZGVudGlmaWVyIG9mIHZhcmlhYmxlLmlkZW50aWZpZXJzKSB7XG4gICAgICAgICAgICAgIGlmIChyZXBvcnRlZC5oYXMoaWRlbnRpZmllcikpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXBvcnRlZC5hZGQoaWRlbnRpZmllcik7XG4gICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiB7IG5hbWU6IHZhcmlhYmxlLm5hbWUsIHJlcGxhY2VtZW50IH0sXG4gICAgICAgICAgICAgICAgbWVzc2FnZUlkOiAncmVzdHJpY3RlZCcsXG4gICAgICAgICAgICAgICAgbm9kZTogaWRlbnRpZmllcixcbiAgICAgICAgICAgICAgICBzdWdnZXN0OiBjYW5SZW5hbWVcbiAgICAgICAgICAgICAgICAgID8gW3tcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogeyByZXBsYWNlbWVudCB9LFxuICAgICAgICAgICAgICAgICAgICBmaXg6IChmaXhlcik6IFJ1bGUuRml4W10gPT5cbiAgICAgICAgICAgICAgICAgICAgICBub2Rlcy5tYXAoKG5vZGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gc291cmNlQ29kZS5nZXRGaXJzdFRva2VuKG5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0Tm9uTnVsbGFibGUodG9rZW4sICdBIGJpbmRpbmcgaWRlbnRpZmllciBhbHdheXMgaGFzIGEgdG9rZW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXhlci5yZXBsYWNlVGV4dCh0b2tlbiwgcmVwbGFjZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlSWQ6ICdyZW5hbWUnXG4gICAgICAgICAgICAgICAgICB9XVxuICAgICAgICAgICAgICAgICAgOiBbXVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczogeyBkZXNjcmlwdGlvbjogJ1JlcXVpcmUgYSAkIHByZWZpeCBvbiBiYXJlIGtleXdvcmQgYW5kIGNvbGxpZGluZyBnbG9iYWwgYmluZGluZyBuYW1lcycgfSxcbiAgICBoYXNTdWdnZXN0aW9uczogdHJ1ZSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgcmVuYW1lOiAnUmVuYW1lIHRoaXMgYmluZGluZyBhbmQgaXRzIHJlZmVyZW5jZXMgdG8gXCJ7eyByZXBsYWNlbWVudCB9fVwiLicsXG4gICAgICByZXN0cmljdGVkOiAnUmVuYW1lIFwie3sgbmFtZSB9fVwiIHRvIFwie3sgcmVwbGFjZW1lbnQgfX1cIi4gUHJlc2VydmUgYW55IHB1YmxpYyBjb250cmFjdCB3aGVuIHJlbmFtaW5nLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBT0EsU0FBUyx5QkFBeUI7QUFFbEMsTUFBTSxtQkFBbUIsb0JBQUksSUFBSTtBQUFBLEVB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
@@ -186,9 +186,9 @@ function findModuleByPathSuffix(program, checker, modulePath) {
186
186
  function flattenName(name) {
187
187
  return isIdentifier(name) ? [name.text] : [...flattenName(name.left), name.right.text];
188
188
  }
189
- function getMember(checker, symbol, memberName) {
189
+ function getMember(checker, $symbol, memberName) {
190
190
  const escapedName = escapeLeadingUnderscores(memberName);
191
- const target = resolveAlias(checker, symbol);
191
+ const target = resolveAlias(checker, $symbol);
192
192
  const moduleExport = (target.flags & SymbolFlags.Module) === 0 ? void 0 : checker.tryGetMemberInModuleExports(memberName, target);
193
193
  return moduleExport ?? target.exports?.get(escapedName) ?? target.members?.get(escapedName) ?? checker.getPropertyOfType(checker.getDeclaredTypeOfSymbol(target), memberName) ?? checker.getPropertyOfType(checker.getTypeOfSymbol(target), memberName);
194
194
  }
@@ -248,8 +248,8 @@ function isResolvedName(params) {
248
248
  const roots = [...localRoots, ...index.exportsByName.get(rootName) ?? [], findModule(program, checker, rootName, containingFileName)];
249
249
  return roots.some((root) => !!resolveMemberPath(checker, root, memberNames));
250
250
  }
251
- function resolveAlias(checker, symbol) {
252
- return (symbol.flags & SymbolFlags.Alias) === 0 ? symbol : checker.getAliasedSymbol(symbol);
251
+ function resolveAlias(checker, $symbol) {
252
+ return ($symbol.flags & SymbolFlags.Alias) === 0 ? $symbol : checker.getAliasedSymbol($symbol);
253
253
  }
254
254
  function resolveMemberPath(checker, root, memberNames) {
255
255
  let current = root;
@@ -265,4 +265,4 @@ export {
265
265
  MESSAGE_ID,
266
266
  noUnresolvedJsdocLink
267
267
  };
268
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyDigJQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIOKAlCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIOKAlCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSDigJQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSDigJQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG50eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lbWJlclBhdGgsIG1vZHVsZVBhdGggfSA9IG1vZHVsZU1hdGNoLmdyb3VwcyBhcyBNb2R1bGVQYXRoTWF0Y2hHcm91cHM7XG4gICAgICAgICAgICByZXBvcnRlZE5hbWUgPSBtb2R1bGVNYXRjaFswXTtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGZpbmRNb2R1bGUocHJvZ3JhbSwgY2hlY2tlciwgbW9kdWxlUGF0aCwgdHNTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSAhIXJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXIsIG1vZHVsZVN5bWJvbCwgbWVtYmVyUGF0aC5zcGxpdChNRU1CRVJfU0VQQVJBVE9SX1JFR19FWFApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNSZXNvbHZlZCA9IGlzUmVzb2x2ZWROYW1lKHtcbiAgICAgICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICAgICAgY29udGFpbmluZ0ZpbGVOYW1lOiB0c1NvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICAgICAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgICAgICAgICBwcm9ncmFtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVwb3J0ZWROYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgIGVuZDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0RW5kKCkpLFxuICAgICAgICAgICAgICBzdGFydDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0U3RhcnQoKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0Tm9kZSh0c1NvdXJjZUZpbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICByZXBvcnRJZlVucmVzb2x2ZWQobGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBKU0RvYyBsaW5rIHRhZ3Mgd2hvc2UgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnSlNEb2MgbGluayB0YXJnZXQgYHt7bmFtZX19YCBkb2VzIG5vdCByZXNvbHZlLiBXYXMgaXQgcmVuYW1lZCBvciByZW1vdmVkPydcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZShub2RlOiBOb2RlLCBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWU6IE1hcDxzdHJpbmcsIElkZW50aWZpZXJbXT4pOiB2b2lkIHtcbiAgaWYgKCFpc0xvY2FsRGVjbGFyYXRpb24obm9kZSkgfHwgIW5vZGUubmFtZSB8fCAhaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KG5vZGUubmFtZS50ZXh0KSA/PyBbXTtcbiAgbmFtZXMucHVzaChub2RlLm5hbWUpO1xuICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuc2V0KG5vZGUubmFtZS50ZXh0LCBuYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRNb2R1bGUocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNwZWNpZmllcjogc3RyaW5nLCBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW1iaWVudE1vZHVsZSA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKS5tb2R1bGVzQnlQYXRoLmdldChzcGVjaWZpZXIpO1xuICBpZiAoYW1iaWVudE1vZHVsZSkge1xuICAgIHJldHVybiBhbWJpZW50TW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRGaWxlTmFtZSA9IHJlc29sdmVNb2R1bGVOYW1lKHNwZWNpZmllciwgY29udGFpbmluZ0ZpbGVOYW1lLCBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpLCBzeXMpLnJlc29sdmVkTW9kdWxlPy5yZXNvbHZlZEZpbGVOYW1lO1xuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGUgPSByZXNvbHZlZEZpbGVOYW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRGaWxlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVzb2x2ZWRTb3VyY2VGaWxlICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihyZXNvbHZlZFNvdXJjZUZpbGUpO1xuICByZXR1cm4gcmVzb2x2ZWRNb2R1bGUgPz8gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtLCBjaGVja2VyLCBzcGVjaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlQnlQYXRoU3VmZml4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbW9kdWxlUGF0aC5yZXBsYWNlKFJFTEFUSVZFX1BBVEhfUFJFRklYX1JFR19FWFAsICcnKS5yZXBsYWNlKFNPVVJDRV9GSUxFX0VYVEVOU0lPTl9SRUdfRVhQLCAnJyk7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW2AvJHtub3JtYWxpemVkUGF0aH1gLCBgLyR7bm9ybWFsaXplZFBhdGh9JHtJTkRFWF9TVUZGSVh9YF07XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHNvdXJjZUZpbGUuZmlsZU5hbWUucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICAgIGlmIChzdWZmaXhlcy5ldmVyeSgoc3VmZml4KSA9PiAhcGF0aFdpdGhvdXRFeHRlbnNpb24uZW5kc1dpdGgoc3VmZml4KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgcmV0dXJuIG1vZHVsZVN5bWJvbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk5hbWUobmFtZTogRW50aXR5TmFtZSB8IEpTRG9jTWVtYmVyTmFtZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllcihuYW1lKSA/IFtuYW1lLnRleHRdIDogWy4uLmZsYXR0ZW5OYW1lKG5hbWUubGVmdCksIG5hbWUucmlnaHQudGV4dF07XG59XG5cbmZ1bmN0aW9uIGdldE1lbWJlcihjaGVja2VyOiBUeXBlQ2hlY2tlciwgc3ltYm9sOiBUc1N5bWJvbCwgbWVtYmVyTmFtZTogc3RyaW5nKTogVHNTeW1ib2wgfCB1bmRlZmluZWQge1xuICBjb25zdCBlc2NhcGVkTmFtZSA9IGVzY2FwZUxlYWRpbmdVbmRlcnNjb3JlcyhtZW1iZXJOYW1lKTtcbiAgY29uc3QgdGFyZ2V0ID0gcmVzb2x2ZUFsaWFzKGNoZWNrZXIsIHN5bWJvbCk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlIC0tIEJpdHdpc2UgZmxhZyB0ZXN0IGlzIGlkaW9tYXRpYyBmb3IgdGhlIFR5cGVTY3JpcHQgY29tcGlsZXIgQVBJLlxuICBjb25zdCBtb2R1bGVFeHBvcnQgPSAodGFyZ2V0LmZsYWdzICYgU3ltYm9sRmxhZ3MuTW9kdWxlKSA9PT0gMCA/IHVuZGVmaW5lZCA6IGNoZWNrZXIudHJ5R2V0TWVtYmVySW5Nb2R1bGVFeHBvcnRzKG1lbWJlck5hbWUsIHRhcmdldCk7XG4gIHJldHVybiBtb2R1bGVFeHBvcnRcbiAgICA/PyB0YXJnZXQuZXhwb3J0cz8uZ2V0KGVzY2FwZWROYW1lKVxuICAgID8/IHRhcmdldC5tZW1iZXJzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldERlY2xhcmVkVHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpXG4gICAgPz8gY2hlY2tlci5nZXRQcm9wZXJ0eU9mVHlwZShjaGVja2VyLmdldFR5cGVPZlN5bWJvbCh0YXJnZXQpLCBtZW1iZXJOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0UHJvZ3JhbUluZGV4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyKTogUHJvZ3JhbUluZGV4IHtcbiAgbGV0IGluZGV4ID0gcHJvZ3JhbUluZGV4Q2FjaGUuZ2V0KHByb2dyYW0pO1xuICBpZiAoaW5kZXgpIHtcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cblxuICBpbmRleCA9IHtcbiAgICBleHBvcnRzQnlOYW1lOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2xbXT4oKSxcbiAgICBtb2R1bGVzQnlQYXRoOiBuZXcgTWFwPHN0cmluZywgVHNTeW1ib2w+KClcbiAgfTtcblxuICBjb25zdCBtb2R1bGVTeW1ib2xzOiBUc1N5bWJvbFtdID0gW107XG4gIGZvciAoY29uc3QgYW1iaWVudE1vZHVsZSBvZiBjaGVja2VyLmdldEFtYmllbnRNb2R1bGVzKCkpIHtcbiAgICBpbmRleC5tb2R1bGVzQnlQYXRoLnNldChhbWJpZW50TW9kdWxlLm5hbWUucmVwbGFjZUFsbCgnXCInLCAnJyksIGFtYmllbnRNb2R1bGUpO1xuICAgIG1vZHVsZVN5bWJvbHMucHVzaChhbWJpZW50TW9kdWxlKTtcbiAgfVxuICBmb3IgKGNvbnN0IHNvdXJjZUZpbGUgb2YgcHJvZ3JhbS5nZXRTb3VyY2VGaWxlcygpKSB7XG4gICAgY29uc3QgbW9kdWxlU3ltYm9sID0gY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKHNvdXJjZUZpbGUpO1xuICAgIGlmIChtb2R1bGVTeW1ib2wpIHtcbiAgICAgIG1vZHVsZVN5bWJvbHMucHVzaChtb2R1bGVTeW1ib2wpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgbW9kdWxlU3ltYm9sIG9mIG1vZHVsZVN5bWJvbHMpIHtcbiAgICBmb3IgKGNvbnN0IGV4cG9ydFN5bWJvbCBvZiBjaGVja2VyLmdldEV4cG9ydHNPZk1vZHVsZShtb2R1bGVTeW1ib2wpKSB7XG4gICAgICBjb25zdCBzeW1ib2xzID0gaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQoZXhwb3J0U3ltYm9sLm5hbWUpID8/IFtdO1xuICAgICAgc3ltYm9scy5wdXNoKGV4cG9ydFN5bWJvbCk7XG4gICAgICBpbmRleC5leHBvcnRzQnlOYW1lLnNldChleHBvcnRTeW1ib2wubmFtZSwgc3ltYm9scyk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3JhbUluZGV4Q2FjaGUuc2V0KHByb2dyYW0sIGluZGV4KTtcbiAgcmV0dXJuIGluZGV4O1xufVxuXG5mdW5jdGlvbiBpc0pTRG9jTGlua0xpa2Uobm9kZTogTm9kZSk6IG5vZGUgaXMgSlNEb2NMaW5rTGlrZSB7XG4gIHJldHVybiBpc0pTRG9jTGluayhub2RlKSB8fCBpc0pTRG9jTGlua0NvZGUobm9kZSkgfHwgaXNKU0RvY0xpbmtQbGFpbihub2RlKTtcbn1cblxuZnVuY3Rpb24gaXNMb2NhbERlY2xhcmF0aW9uKG5vZGU6IE5vZGUpOiBub2RlIGlzIExvY2FsRGVjbGFyYXRpb24ge1xuICByZXR1cm4gaXNDbGFzc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNFbnVtRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0Z1bmN0aW9uRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0dldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0ludGVyZmFjZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2REZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzTWV0aG9kU2lnbmF0dXJlKG5vZGUpXG4gICAgfHwgaXNNb2R1bGVEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzUHJvcGVydHlTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc1NldEFjY2Vzc29yRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNWYXJpYWJsZURlY2xhcmF0aW9uKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc1Jlc29sdmVkTmFtZShwYXJhbXM6IElzUmVzb2x2ZWROYW1lUGFyYW1zKTogYm9vbGVhbiB7XG4gIGNvbnN0IHtcbiAgICBjaGVja2VyLFxuICAgIGNvbnRhaW5pbmdGaWxlTmFtZSxcbiAgICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUsXG4gICAgbmFtZSxcbiAgICBwcm9ncmFtXG4gIH0gPSBwYXJhbXM7XG5cbiAgaWYgKGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLy8gYEZvbyNiYXJgIGlzIGEgYEpTRG9jTWVtYmVyTmFtZWAsIHdoaWNoIHRoZSBjaGVja2VyIHJlc29sdmVzIG9ubHkgdGhyb3VnaCBpdHMgcmlnaHQtaGFuZCBtZW1iZXIuXG4gIGlmIChpc0pTRG9jTWVtYmVyTmFtZShuYW1lKSAmJiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24obmFtZS5yaWdodCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGNvbnN0IFtyb290TmFtZSA9ICcnLCAuLi5tZW1iZXJOYW1lc10gPSBmbGF0dGVuTmFtZShuYW1lKTtcbiAgY29uc3QgaW5kZXggPSBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbSwgY2hlY2tlcik7XG4gIGNvbnN0IGxvY2FsUm9vdHMgPSAobG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lLmdldChyb290TmFtZSkgPz8gW10pLm1hcCgoZGVjbGFyYXRpb25OYW1lKSA9PiBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oZGVjbGFyYXRpb25OYW1lKSk7XG4gIGNvbnN0IHJvb3RzID0gWy4uLmxvY2FsUm9vdHMsIC4uLmluZGV4LmV4cG9ydHNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSwgZmluZE1vZHVsZShwcm9ncmFtLCBjaGVja2VyLCByb290TmFtZSwgY29udGFpbmluZ0ZpbGVOYW1lKV07XG5cbiAgcmV0dXJuIHJvb3RzLnNvbWUoKHJvb3QpID0+ICEhcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlciwgcm9vdCwgbWVtYmVyTmFtZXMpKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZUFsaWFzKGNoZWNrZXI6IFR5cGVDaGVja2VyLCBzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgdGVzdCBpcyBpZGlvbWF0aWMgZm9yIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgcmV0dXJuIChzeW1ib2wuZmxhZ3MgJiBTeW1ib2xGbGFncy5BbGlhcykgPT09IDAgPyBzeW1ib2wgOiBjaGVja2VyLmdldEFsaWFzZWRTeW1ib2woc3ltYm9sKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHJvb3Q6IFRzU3ltYm9sIHwgdW5kZWZpbmVkLCBtZW1iZXJOYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCA9IHJvb3Q7XG4gIGZvciAoY29uc3QgbWVtYmVyTmFtZSBvZiBtZW1iZXJOYW1lcykge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IGdldE1lbWJlcihjaGVja2VyLCBjdXJyZW50LCBtZW1iZXJOYW1lKTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnRUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxzQkFBc0I7QUFLeEIsTUFBTSxhQUFhO0FBa0MxQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLCtC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
268
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9uby11bnJlc29sdmVkLWpzZG9jLWxpbmsudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBuby11bnJlc29sdmVkLWpzZG9jLWxpbmtcbiAqXG4gKiBSZXBvcnRzIGEgSlNEb2MgYGxpbmtgLCBgbGlua2NvZGVgIG9yIGBsaW5rcGxhaW5gIGlubGluZSB0YWcgd2hvc2UgdGFyZ2V0IG5vIGxvbmdlciByZXNvbHZlcyB0byBhIHN5bWJvbC5cbiAqXG4gKiBBIHJlbmFtZSBsZWF2ZXMgYHtAbGluayBPbGROYW1lfWAgYmVoaW5kIGFuZCBub3RoaW5nIGVsc2UgcmVwb3J0cyBpdDogYGpzZG9jL25vLXVuZGVmaW5lZC10eXBlc2AgZG9lcyBub3QgcmVzb2x2ZVxuICogbGluayB0YXJnZXRzLCBUU0RvYyBjaGVja3Mgb25seSB0aGUgdGFnIHN5bnRheCwgYW5kIGB0c2NgIHBhcnNlcyBKU0RvYyBsaW5rcyB3aXRob3V0IGV2ZXIgZGlhZ25vc2luZyB0aGVtLiBTbyBhIGRlYWRcbiAqIGxpbmsgc3Vydml2ZXMgdW50aWwgc29tZWJvZHkgaGFwcGVucyB0byBjbGljayBpdC5cbiAqXG4gKiBBIHRhcmdldCByZXNvbHZlcyB3aGVuIGFueSBvZiB0aGVzZSBmaW5kcyBpdCwgdHJpZWQgaW4gb3JkZXI6XG4gKlxuICogMS4gVGhlIHR5cGUgY2hlY2tlciwgYXQgdGhlIGNvbW1lbnQncyBvd24gbG9jYXRpb24sIGV4YWN0bHkgYXMgZWRpdG9yIGdvLXRvLWRlZmluaXRpb24gZG9lcyDigJQgc28gZXZlcnl0aGluZyBpblxuICogICAgc2NvcGUgdGhlcmUgcmVzb2x2ZXM6IHR5cGUgcGFyYW1ldGVycywgcGFyYW1ldGVycywgaW1wb3J0cywgYW5kIHRoZSBET00gLyBFUyBnbG9iYWxzLlxuICogMi4gQSBkZWNsYXJhdGlvbiBhbnl3aGVyZSBpbiB0aGUgc2FtZSBmaWxlIOKAlCBhIGZ1bmN0aW9uIG5lc3RlZCBpbiBhbm90aGVyLCBhIHByaXZhdGUgbWV0aG9kIOKAlCB3aGljaCBpcyBvdXQgb2ZcbiAqICAgIHNjb3BlIGF0IGEgYCpQYXJhbXNgIGludGVyZmFjZSBuYW1pbmcgaXQsIHlldCBpcyBleGFjdGx5IHdoYXQgYSByZW5hbWUgb2YgaXQgd291bGQgYnJlYWsuXG4gKiAzLiBUaGUgZXhwb3J0cyBvZiBhbnkgbW9kdWxlIGluIHRoZSBwcm9ncmFtLCBieSBuYW1lLiBBIGNvbW1lbnQgcm91dGluZWx5IG5hbWVzIGEgdHlwZSBpdHMgZmlsZSBuZXZlciBpbXBvcnRzIChhblxuICogICAgaW50ZWdyYXRpb24gdGVzdCBuYW1pbmcgdGhlIGNsYXNzIGl0IGRyaXZlcyB0aHJvdWdoIGBldmFsSW5PYnNpZGlhbmAsIGEgcmVtYXJrIG5hbWluZyBhbiBPYnNpZGlhbiBBUEkpLCBhbmQgdGhlXG4gKiAgICBBUEkgZG9jcyBnZW5lcmF0b3IgcmVzb2x2ZXMgc3VjaCBhIG5hbWUgbGlicmFyeS13aWRlIHRvby4gVGhpcyBrZWVwcyB0aGUgcnVsZSBhYm91dCBERUFEIGxpbmtzIHJhdGhlciB0aGFuXG4gKiAgICBhYm91dCBpbXBvcnRzOiBhIHJlbmFtZWQgb3IgcmVtb3ZlZCBkZWNsYXJhdGlvbiBpcyBleHBvcnRlZCBieSBubyBtb2R1bGUsIHNvIGl0IGlzIHN0aWxsIHJlcG9ydGVkLlxuICogNC4gQSBtb2R1bGUgbmFtZWQgYnkgaXRzIHNwZWNpZmllciBvciBpdHMgcGF0aCwgaW4gYm90aCBUU0RvYyBmb3JtczogYG9ic2lkaWFuI0V2ZW50cyNvbmAgKHRoZSBwYWNrYWdlIGFzIHRoZSBmaXJzdFxuICogICAgc2VnbWVudCkgYW5kIGBlcnJvciFlcnJvclRvU3RyaW5nYCAvIGBvYnNpZGlhbi9jb21wb25lbnRzL3BsdWdpbi1nYXRlLWNvbXBvbmVudCFQbHVnaW5Db25mbGljdFNldmVyaXR5Lldhcm5gXG4gKiAgICAoYSBtb2R1bGUgcGF0aCwgZW5kaW5nIHdpdGggYCFgKSDigJQgcGx1cyBUeXBlU2NyaXB0J3Mgb3duIGBpbXBvcnQoJy4vbW9kdWxlLnRzJykuTWVtYmVyYC4gQSBwYXRoIG1hdGNoZXMgYW55XG4gKiAgICBzb3VyY2UgZmlsZSBpbiB0aGUgcHJvZ3JhbSB3aG9zZSBwYXRoIGVuZHMgd2l0aCBpdC5cbiAqXG4gKiBBZnRlciB0aGUgZmlyc3Qgc2VnbWVudCwgZWFjaCBmdXJ0aGVyIGAuYCAvIGAjYCBzZWdtZW50IGlzIGxvb2tlZCB1cCBhcyBhIG1lbWJlcjogYSBuYW1lc3BhY2Ugb3IgbW9kdWxlIGV4cG9ydCwgYVxuICogc3RhdGljIG9yIGluc3RhbmNlIG1lbWJlciwgb3IgYSBwcm9wZXJ0eSBvZiB0aGUgcHJldmlvdXMgbWVtYmVyJ3MgdHlwZSDigJQgc28gYEFwcC52YXVsdC5hZGFwdGVyYCByZXNvbHZlcy5cbiAqXG4gKiBBIGxpbmsgdGhhdCBpcyBub3QgYSBjb2RlIHJlZmVyZW5jZSBpcyBza2lwcGVkOiBhIFVSTCAoYHtAbGluayBodHRwczovL2V4YW1wbGUuY29tfWApIGFuZCBhIEpTRG9jIG5hbWVwYXRoXG4gKiAoYHtAbGluayBtb2R1bGU6Zm9vfWApIGJvdGggcGFyc2UgYXMgYSBuYW1lIGZvbGxvd2VkIGJ5IHRleHQgc3RhcnRpbmcgd2l0aCBgOmAsIGFuZCBhIGxpbmsgd2l0aCBubyBuYW1lIGhhc1xuICogbm90aGluZyB0byByZXNvbHZlLlxuICovXG5pbXBvcnQgdHlwZSB7XG4gIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbixcbiAgVFNFU1RyZWVcbn0gZnJvbSAnQHR5cGVzY3JpcHQtZXNsaW50L3V0aWxzJztcbmltcG9ydCB0eXBlIHsgUnVsZSB9IGZyb20gJ2VzbGludCc7XG5pbXBvcnQgdHlwZSB7XG4gIENsYXNzRGVjbGFyYXRpb24sXG4gIEVudGl0eU5hbWUsXG4gIEVudW1EZWNsYXJhdGlvbixcbiAgRnVuY3Rpb25EZWNsYXJhdGlvbixcbiAgR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgSWRlbnRpZmllcixcbiAgSW50ZXJmYWNlRGVjbGFyYXRpb24sXG4gIEpTRG9jTGluayxcbiAgSlNEb2NMaW5rQ29kZSxcbiAgSlNEb2NMaW5rUGxhaW4sXG4gIEpTRG9jTWVtYmVyTmFtZSxcbiAgTWV0aG9kRGVjbGFyYXRpb24sXG4gIE1ldGhvZFNpZ25hdHVyZSxcbiAgTW9kdWxlRGVjbGFyYXRpb24sXG4gIE5vZGUsXG4gIFByb2dyYW0sXG4gIFByb3BlcnR5RGVjbGFyYXRpb24sXG4gIFByb3BlcnR5U2lnbmF0dXJlLFxuICBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBTeW1ib2wgYXMgVHNTeW1ib2wsXG4gIFR5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBUeXBlQ2hlY2tlcixcbiAgVmFyaWFibGVEZWNsYXJhdGlvblxufSBmcm9tICd0eXBlc2NyaXB0JztcblxuaW1wb3J0IHtcbiAgZXNjYXBlTGVhZGluZ1VuZGVyc2NvcmVzLFxuICBmb3JFYWNoQ2hpbGQsXG4gIGdldEpTRG9jQ29tbWVudHNBbmRUYWdzLFxuICBpc0NsYXNzRGVjbGFyYXRpb24sXG4gIGlzRW51bURlY2xhcmF0aW9uLFxuICBpc0Z1bmN0aW9uRGVjbGFyYXRpb24sXG4gIGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbixcbiAgaXNJZGVudGlmaWVyLFxuICBpc0ludGVyZmFjZURlY2xhcmF0aW9uLFxuICBpc0pTRG9jTGluayxcbiAgaXNKU0RvY0xpbmtDb2RlLFxuICBpc0pTRG9jTGlua1BsYWluLFxuICBpc0pTRG9jTWVtYmVyTmFtZSxcbiAgaXNNZXRob2REZWNsYXJhdGlvbixcbiAgaXNNZXRob2RTaWduYXR1cmUsXG4gIGlzTW9kdWxlRGVjbGFyYXRpb24sXG4gIGlzUHJvcGVydHlEZWNsYXJhdGlvbixcbiAgaXNQcm9wZXJ0eVNpZ25hdHVyZSxcbiAgaXNTZXRBY2Nlc3NvckRlY2xhcmF0aW9uLFxuICBpc1R5cGVBbGlhc0RlY2xhcmF0aW9uLFxuICBpc1ZhcmlhYmxlRGVjbGFyYXRpb24sXG4gIHJlc29sdmVNb2R1bGVOYW1lLFxuICBTeW1ib2xGbGFncyxcbiAgc3lzXG59IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyB0b1RTRVNUcmVlTm9kZSB9IGZyb20gJy4vdHMtZXN0cmVlLW5vZGUudHMnO1xuXG4vKipcbiAqIE1lc3NhZ2UgSUQgcmVwb3J0ZWQgd2hlbiBhIEpTRG9jIGxpbmsgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ25vVW5yZXNvbHZlZEpzZG9jTGluayc7XG5cbmludGVyZmFjZSBJc1Jlc29sdmVkTmFtZVBhcmFtcyB7XG4gIHJlYWRvbmx5IGNoZWNrZXI6IFR5cGVDaGVja2VyO1xuICByZWFkb25seSBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgbG9jYWxEZWNsYXJhdGlvbk5hbWVzQnlOYW1lOiBSZWFkb25seU1hcDxzdHJpbmcsIHJlYWRvbmx5IElkZW50aWZpZXJbXT47XG4gIHJlYWRvbmx5IG5hbWU6IEVudGl0eU5hbWUgfCBKU0RvY01lbWJlck5hbWU7XG4gIHJlYWRvbmx5IHByb2dyYW06IFByb2dyYW07XG59XG5cbnR5cGUgSlNEb2NMaW5rTGlrZSA9IEpTRG9jTGluayB8IEpTRG9jTGlua0NvZGUgfCBKU0RvY0xpbmtQbGFpbjtcblxudHlwZSBMb2NhbERlY2xhcmF0aW9uID1cbiAgfCBDbGFzc0RlY2xhcmF0aW9uXG4gIHwgRW51bURlY2xhcmF0aW9uXG4gIHwgRnVuY3Rpb25EZWNsYXJhdGlvblxuICB8IEdldEFjY2Vzc29yRGVjbGFyYXRpb25cbiAgfCBJbnRlcmZhY2VEZWNsYXJhdGlvblxuICB8IE1ldGhvZERlY2xhcmF0aW9uXG4gIHwgTWV0aG9kU2lnbmF0dXJlXG4gIHwgTW9kdWxlRGVjbGFyYXRpb25cbiAgfCBQcm9wZXJ0eURlY2xhcmF0aW9uXG4gIHwgUHJvcGVydHlTaWduYXR1cmVcbiAgfCBTZXRBY2Nlc3NvckRlY2xhcmF0aW9uXG4gIHwgVHlwZUFsaWFzRGVjbGFyYXRpb25cbiAgfCBWYXJpYWJsZURlY2xhcmF0aW9uO1xuXG50eXBlIE1vZHVsZVBhdGhNYXRjaEdyb3VwcyA9IFJlYWRvbmx5PFJlY29yZDwnbWVtYmVyUGF0aCcgfCAnbW9kdWxlUGF0aCcsIHN0cmluZz4+O1xuXG5pbnRlcmZhY2UgUHJvZ3JhbUluZGV4IHtcbiAgcmVhZG9ubHkgZXhwb3J0c0J5TmFtZTogTWFwPHN0cmluZywgVHNTeW1ib2xbXT47XG4gIHJlYWRvbmx5IG1vZHVsZXNCeVBhdGg6IE1hcDxzdHJpbmcsIFRzU3ltYm9sPjtcbn1cblxuY29uc3QgTU9EVUxFX1BBVEhfUkVHX0VYUCA9IC9eKD88bW9kdWxlUGF0aD5bXlxccyF8fV0qKSEoPzxtZW1iZXJQYXRoPltcXHckLiNdKykvO1xuY29uc3QgSU1QT1JUX1RZUEVfUkVHX0VYUCA9IC9eaW1wb3J0XFwoXFxzKig/PHF1b3RlPlsnXCJdKSg/PG1vZHVsZVBhdGg+W14nXCJdKylcXGs8cXVvdGU+XFxzKlxcKVxcLig/PG1lbWJlclBhdGg+W1xcdyQuI10rKS87XG5jb25zdCBSRUxBVElWRV9QQVRIX1BSRUZJWF9SRUdfRVhQID0gL14oPzpcXC5cXC4/XFwvKSsvO1xuY29uc3QgTUVNQkVSX1NFUEFSQVRPUl9SRUdfRVhQID0gL1suI10vO1xuY29uc3QgU09VUkNFX0ZJTEVfRVhURU5TSU9OX1JFR19FWFAgPSAvKD86XFwuZCk/XFwuW2NtXT90c3g/JC87XG5jb25zdCBJTkRFWF9TVUZGSVggPSAnL2luZGV4JztcblxuY29uc3QgcHJvZ3JhbUluZGV4Q2FjaGUgPSBuZXcgV2Vha01hcDxQcm9ncmFtLCBQcm9ncmFtSW5kZXg+KCk7XG5cbi8qKlxuICogVGhlIEVTTGludCBydWxlIHRoYXQgcmVwb3J0cyBKU0RvYyBsaW5rcyB3aG9zZSB0YXJnZXQgZG9lcyBub3QgcmVzb2x2ZS5cbiAqL1xuZXhwb3J0IGNvbnN0IG5vVW5yZXNvbHZlZEpzZG9jTGluazogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHNlcnZpY2VzID0gY29udGV4dC5zb3VyY2VDb2RlLnBhcnNlclNlcnZpY2VzIGFzIFBhcnNlclNlcnZpY2VzV2l0aFR5cGVJbmZvcm1hdGlvbjtcblxuICAgIHJldHVybiB7XG4gICAgICBQcm9ncmFtKG5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcHJvZ3JhbSA9IHNlcnZpY2VzLnByb2dyYW07XG4gICAgICAgIGNvbnN0IGNoZWNrZXIgPSBwcm9ncmFtLmdldFR5cGVDaGVja2VyKCk7XG4gICAgICAgIGNvbnN0IHRzU291cmNlRmlsZSA9IHNlcnZpY2VzLmVzVHJlZU5vZGVUb1RTTm9kZU1hcC5nZXQodG9UU0VTVHJlZU5vZGUobm9kZSkgYXMgVFNFU1RyZWUuUHJvZ3JhbSk7XG5cbiAgICAgICAgLypcbiAgICAgICAgICogVGhlIHNhbWUgbGluayBpcyByZWFjaGFibGUgbW9yZSB0aGFuIG9uY2U6IGEgcGFyYW1ldGVyIHJldHVybnMgaXRzIG93biBgQHBhcmFtYCB0YWcsIHdoaWNoIGl0cyBmdW5jdGlvbidzXG4gICAgICAgICAqIEpTRG9jIGJsb2NrIGFsc28gY29udGFpbnMuIFNvIGRlZHVwbGljYXRlIG9uIHRoZSBsaW5rIGl0c2VsZiByYXRoZXIgdGhhbiBvbiB0aGUgSlNEb2Mgbm9kZS5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmV3IFNldDxKU0RvY0xpbmtMaWtlPigpO1xuXG4gICAgICAgIC8qXG4gICAgICAgICAqIEEgbGluayBtYXkgbmFtZSBhIGRlY2xhcmF0aW9uIGZ1cnRoZXIgZG93biB0aGUgZmlsZSwgc28gdGhlIHdob2xlIGZpbGUgaXMgd2Fsa2VkIGJlZm9yZSBhbnkgbGluayBpc1xuICAgICAgICAgKiByZXNvbHZlZC5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0IGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSA9IG5ldyBNYXA8c3RyaW5nLCBJZGVudGlmaWVyW10+KCk7XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlOiBOb2RlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKGlzSlNEb2NMaW5rTGlrZShqc0RvY05vZGUpKSB7XG4gICAgICAgICAgICBsaW5rcy5hZGQoanNEb2NOb2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKGpzRG9jTm9kZSwgdmlzaXRKc0RvY05vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gdmlzaXROb2RlKHRzTm9kZTogTm9kZSk6IHZvaWQge1xuICAgICAgICAgIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZSh0c05vZGUsIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSk7XG4gICAgICAgICAgZm9yIChjb25zdCBqc0RvY05vZGUgb2YgZ2V0SlNEb2NDb21tZW50c0FuZFRhZ3ModHNOb2RlKSkge1xuICAgICAgICAgICAgdmlzaXRKc0RvY05vZGUoanNEb2NOb2RlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZm9yRWFjaENoaWxkKHRzTm9kZSwgdmlzaXROb2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlcG9ydElmVW5yZXNvbHZlZChsaW5rOiBKU0RvY0xpbmtMaWtlKTogdm9pZCB7XG4gICAgICAgICAgaWYgKCFsaW5rLm5hbWUgfHwgbGluay50ZXh0LnN0YXJ0c1dpdGgoJzonKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG5hbWVUZXh0ID0gbGluay5uYW1lLmdldFRleHQoKTtcbiAgICAgICAgICBjb25zdCBmdWxsVGFyZ2V0ID0gbmFtZVRleHQgKyBsaW5rLnRleHQ7XG4gICAgICAgICAgY29uc3QgbW9kdWxlTWF0Y2ggPSBJTVBPUlRfVFlQRV9SRUdfRVhQLmV4ZWMoZnVsbFRhcmdldCkgPz8gTU9EVUxFX1BBVEhfUkVHX0VYUC5leGVjKGZ1bGxUYXJnZXQpO1xuICAgICAgICAgIGxldCByZXBvcnRlZE5hbWUgPSBuYW1lVGV4dDtcbiAgICAgICAgICBsZXQgaXNSZXNvbHZlZDogYm9vbGVhbjtcblxuICAgICAgICAgIGlmIChtb2R1bGVNYXRjaD8uZ3JvdXBzKSB7XG4gICAgICAgICAgICBjb25zdCB7IG1lbWJlclBhdGgsIG1vZHVsZVBhdGggfSA9IG1vZHVsZU1hdGNoLmdyb3VwcyBhcyBNb2R1bGVQYXRoTWF0Y2hHcm91cHM7XG4gICAgICAgICAgICByZXBvcnRlZE5hbWUgPSBtb2R1bGVNYXRjaFswXTtcbiAgICAgICAgICAgIGNvbnN0IG1vZHVsZVN5bWJvbCA9IGZpbmRNb2R1bGUocHJvZ3JhbSwgY2hlY2tlciwgbW9kdWxlUGF0aCwgdHNTb3VyY2VGaWxlLmZpbGVOYW1lKTtcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQgPSAhIXJlc29sdmVNZW1iZXJQYXRoKGNoZWNrZXIsIG1vZHVsZVN5bWJvbCwgbWVtYmVyUGF0aC5zcGxpdChNRU1CRVJfU0VQQVJBVE9SX1JFR19FWFApKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaXNSZXNvbHZlZCA9IGlzUmVzb2x2ZWROYW1lKHtcbiAgICAgICAgICAgICAgY2hlY2tlcixcbiAgICAgICAgICAgICAgY29udGFpbmluZ0ZpbGVOYW1lOiB0c1NvdXJjZUZpbGUuZmlsZU5hbWUsXG4gICAgICAgICAgICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICAgICAgICAgICAgbmFtZTogbGluay5uYW1lLFxuICAgICAgICAgICAgICBwcm9ncmFtXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaXNSZXNvbHZlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgbmFtZTogcmVwb3J0ZWROYW1lXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbG9jOiB7XG4gICAgICAgICAgICAgIGVuZDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0RW5kKCkpLFxuICAgICAgICAgICAgICBzdGFydDogY29udGV4dC5zb3VyY2VDb2RlLmdldExvY0Zyb21JbmRleChsaW5rLm5hbWUuZ2V0U3RhcnQoKSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtZXNzYWdlSWQ6IE1FU1NBR0VfSURcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZpc2l0Tm9kZSh0c1NvdXJjZUZpbGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICByZXBvcnRJZlVucmVzb2x2ZWQobGluayk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9LFxuICBtZXRhOiB7XG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdEaXNhbGxvdyBKU0RvYyBsaW5rIHRhZ3Mgd2hvc2UgdGFyZ2V0IGRvZXMgbm90IHJlc29sdmUgdG8gYSBzeW1ib2wnXG4gICAgfSxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnSlNEb2MgbGluayB0YXJnZXQgYHt7bmFtZX19YCBkb2VzIG5vdCByZXNvbHZlLiBXYXMgaXQgcmVuYW1lZCBvciByZW1vdmVkPydcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3Byb2JsZW0nXG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNvbGxlY3RMb2NhbERlY2xhcmF0aW9uTmFtZShub2RlOiBOb2RlLCBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWU6IE1hcDxzdHJpbmcsIElkZW50aWZpZXJbXT4pOiB2b2lkIHtcbiAgaWYgKCFpc0xvY2FsRGVjbGFyYXRpb24obm9kZSkgfHwgIW5vZGUubmFtZSB8fCAhaXNJZGVudGlmaWVyKG5vZGUubmFtZSkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3QgbmFtZXMgPSBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KG5vZGUubmFtZS50ZXh0KSA/PyBbXTtcbiAgbmFtZXMucHVzaChub2RlLm5hbWUpO1xuICBsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuc2V0KG5vZGUubmFtZS50ZXh0LCBuYW1lcyk7XG59XG5cbmZ1bmN0aW9uIGZpbmRNb2R1bGUocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIsIHNwZWNpZmllcjogc3RyaW5nLCBjb250YWluaW5nRmlsZU5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgYW1iaWVudE1vZHVsZSA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKS5tb2R1bGVzQnlQYXRoLmdldChzcGVjaWZpZXIpO1xuICBpZiAoYW1iaWVudE1vZHVsZSkge1xuICAgIHJldHVybiBhbWJpZW50TW9kdWxlO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRGaWxlTmFtZSA9IHJlc29sdmVNb2R1bGVOYW1lKHNwZWNpZmllciwgY29udGFpbmluZ0ZpbGVOYW1lLCBwcm9ncmFtLmdldENvbXBpbGVyT3B0aW9ucygpLCBzeXMpLnJlc29sdmVkTW9kdWxlPy5yZXNvbHZlZEZpbGVOYW1lO1xuICBjb25zdCByZXNvbHZlZFNvdXJjZUZpbGUgPSByZXNvbHZlZEZpbGVOYW1lID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBwcm9ncmFtLmdldFNvdXJjZUZpbGUocmVzb2x2ZWRGaWxlTmFtZSk7XG4gIGNvbnN0IHJlc29sdmVkTW9kdWxlID0gcmVzb2x2ZWRTb3VyY2VGaWxlICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihyZXNvbHZlZFNvdXJjZUZpbGUpO1xuICByZXR1cm4gcmVzb2x2ZWRNb2R1bGUgPz8gZmluZE1vZHVsZUJ5UGF0aFN1ZmZpeChwcm9ncmFtLCBjaGVja2VyLCBzcGVjaWZpZXIpO1xufVxuXG5mdW5jdGlvbiBmaW5kTW9kdWxlQnlQYXRoU3VmZml4KHByb2dyYW06IFByb2dyYW0sIGNoZWNrZXI6IFR5cGVDaGVja2VyLCBtb2R1bGVQYXRoOiBzdHJpbmcpOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG5vcm1hbGl6ZWRQYXRoID0gbW9kdWxlUGF0aC5yZXBsYWNlKFJFTEFUSVZFX1BBVEhfUFJFRklYX1JFR19FWFAsICcnKS5yZXBsYWNlKFNPVVJDRV9GSUxFX0VYVEVOU0lPTl9SRUdfRVhQLCAnJyk7XG4gIGNvbnN0IHN1ZmZpeGVzID0gW2AvJHtub3JtYWxpemVkUGF0aH1gLCBgLyR7bm9ybWFsaXplZFBhdGh9JHtJTkRFWF9TVUZGSVh9YF07XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBwYXRoV2l0aG91dEV4dGVuc2lvbiA9IHNvdXJjZUZpbGUuZmlsZU5hbWUucmVwbGFjZShTT1VSQ0VfRklMRV9FWFRFTlNJT05fUkVHX0VYUCwgJycpO1xuICAgIGlmIChzdWZmaXhlcy5ldmVyeSgoc3VmZml4KSA9PiAhcGF0aFdpdGhvdXRFeHRlbnNpb24uZW5kc1dpdGgoc3VmZml4KSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgcmV0dXJuIG1vZHVsZVN5bWJvbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmxhdHRlbk5hbWUobmFtZTogRW50aXR5TmFtZSB8IEpTRG9jTWVtYmVyTmFtZSk6IHN0cmluZ1tdIHtcbiAgcmV0dXJuIGlzSWRlbnRpZmllcihuYW1lKSA/IFtuYW1lLnRleHRdIDogWy4uLmZsYXR0ZW5OYW1lKG5hbWUubGVmdCksIG5hbWUucmlnaHQudGV4dF07XG59XG5cbmZ1bmN0aW9uIGdldE1lbWJlcihjaGVja2VyOiBUeXBlQ2hlY2tlciwgJHN5bWJvbDogVHNTeW1ib2wsIG1lbWJlck5hbWU6IHN0cmluZyk6IFRzU3ltYm9sIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZXNjYXBlZE5hbWUgPSBlc2NhcGVMZWFkaW5nVW5kZXJzY29yZXMobWVtYmVyTmFtZSk7XG4gIGNvbnN0IHRhcmdldCA9IHJlc29sdmVBbGlhcyhjaGVja2VyLCAkc3ltYm9sKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2UgLS0gQml0d2lzZSBmbGFnIHRlc3QgaXMgaWRpb21hdGljIGZvciB0aGUgVHlwZVNjcmlwdCBjb21waWxlciBBUEkuXG4gIGNvbnN0IG1vZHVsZUV4cG9ydCA9ICh0YXJnZXQuZmxhZ3MgJiBTeW1ib2xGbGFncy5Nb2R1bGUpID09PSAwID8gdW5kZWZpbmVkIDogY2hlY2tlci50cnlHZXRNZW1iZXJJbk1vZHVsZUV4cG9ydHMobWVtYmVyTmFtZSwgdGFyZ2V0KTtcbiAgcmV0dXJuIG1vZHVsZUV4cG9ydFxuICAgID8/IHRhcmdldC5leHBvcnRzPy5nZXQoZXNjYXBlZE5hbWUpXG4gICAgPz8gdGFyZ2V0Lm1lbWJlcnM/LmdldChlc2NhcGVkTmFtZSlcbiAgICA/PyBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKGNoZWNrZXIuZ2V0RGVjbGFyZWRUeXBlT2ZTeW1ib2wodGFyZ2V0KSwgbWVtYmVyTmFtZSlcbiAgICA/PyBjaGVja2VyLmdldFByb3BlcnR5T2ZUeXBlKGNoZWNrZXIuZ2V0VHlwZU9mU3ltYm9sKHRhcmdldCksIG1lbWJlck5hbWUpO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9ncmFtSW5kZXgocHJvZ3JhbTogUHJvZ3JhbSwgY2hlY2tlcjogVHlwZUNoZWNrZXIpOiBQcm9ncmFtSW5kZXgge1xuICBsZXQgaW5kZXggPSBwcm9ncmFtSW5kZXhDYWNoZS5nZXQocHJvZ3JhbSk7XG4gIGlmIChpbmRleCkge1xuICAgIHJldHVybiBpbmRleDtcbiAgfVxuXG4gIGluZGV4ID0ge1xuICAgIGV4cG9ydHNCeU5hbWU6IG5ldyBNYXA8c3RyaW5nLCBUc1N5bWJvbFtdPigpLFxuICAgIG1vZHVsZXNCeVBhdGg6IG5ldyBNYXA8c3RyaW5nLCBUc1N5bWJvbD4oKVxuICB9O1xuXG4gIGNvbnN0IG1vZHVsZVN5bWJvbHM6IFRzU3ltYm9sW10gPSBbXTtcbiAgZm9yIChjb25zdCBhbWJpZW50TW9kdWxlIG9mIGNoZWNrZXIuZ2V0QW1iaWVudE1vZHVsZXMoKSkge1xuICAgIGluZGV4Lm1vZHVsZXNCeVBhdGguc2V0KGFtYmllbnRNb2R1bGUubmFtZS5yZXBsYWNlQWxsKCdcIicsICcnKSwgYW1iaWVudE1vZHVsZSk7XG4gICAgbW9kdWxlU3ltYm9scy5wdXNoKGFtYmllbnRNb2R1bGUpO1xuICB9XG4gIGZvciAoY29uc3Qgc291cmNlRmlsZSBvZiBwcm9ncmFtLmdldFNvdXJjZUZpbGVzKCkpIHtcbiAgICBjb25zdCBtb2R1bGVTeW1ib2wgPSBjaGVja2VyLmdldFN5bWJvbEF0TG9jYXRpb24oc291cmNlRmlsZSk7XG4gICAgaWYgKG1vZHVsZVN5bWJvbCkge1xuICAgICAgbW9kdWxlU3ltYm9scy5wdXNoKG1vZHVsZVN5bWJvbCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBtb2R1bGVTeW1ib2wgb2YgbW9kdWxlU3ltYm9scykge1xuICAgIGZvciAoY29uc3QgZXhwb3J0U3ltYm9sIG9mIGNoZWNrZXIuZ2V0RXhwb3J0c09mTW9kdWxlKG1vZHVsZVN5bWJvbCkpIHtcbiAgICAgIGNvbnN0IHN5bWJvbHMgPSBpbmRleC5leHBvcnRzQnlOYW1lLmdldChleHBvcnRTeW1ib2wubmFtZSkgPz8gW107XG4gICAgICBzeW1ib2xzLnB1c2goZXhwb3J0U3ltYm9sKTtcbiAgICAgIGluZGV4LmV4cG9ydHNCeU5hbWUuc2V0KGV4cG9ydFN5bWJvbC5uYW1lLCBzeW1ib2xzKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmFtSW5kZXhDYWNoZS5zZXQocHJvZ3JhbSwgaW5kZXgpO1xuICByZXR1cm4gaW5kZXg7XG59XG5cbmZ1bmN0aW9uIGlzSlNEb2NMaW5rTGlrZShub2RlOiBOb2RlKTogbm9kZSBpcyBKU0RvY0xpbmtMaWtlIHtcbiAgcmV0dXJuIGlzSlNEb2NMaW5rKG5vZGUpIHx8IGlzSlNEb2NMaW5rQ29kZShub2RlKSB8fCBpc0pTRG9jTGlua1BsYWluKG5vZGUpO1xufVxuXG5mdW5jdGlvbiBpc0xvY2FsRGVjbGFyYXRpb24obm9kZTogTm9kZSk6IG5vZGUgaXMgTG9jYWxEZWNsYXJhdGlvbiB7XG4gIHJldHVybiBpc0NsYXNzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc0VudW1EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzRnVuY3Rpb25EZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzR2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzSW50ZXJmYWNlRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc01ldGhvZERlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNNZXRob2RTaWduYXR1cmUobm9kZSlcbiAgICB8fCBpc01vZHVsZURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNQcm9wZXJ0eURlY2xhcmF0aW9uKG5vZGUpXG4gICAgfHwgaXNQcm9wZXJ0eVNpZ25hdHVyZShub2RlKVxuICAgIHx8IGlzU2V0QWNjZXNzb3JEZWNsYXJhdGlvbihub2RlKVxuICAgIHx8IGlzVHlwZUFsaWFzRGVjbGFyYXRpb24obm9kZSlcbiAgICB8fCBpc1ZhcmlhYmxlRGVjbGFyYXRpb24obm9kZSk7XG59XG5cbmZ1bmN0aW9uIGlzUmVzb2x2ZWROYW1lKHBhcmFtczogSXNSZXNvbHZlZE5hbWVQYXJhbXMpOiBib29sZWFuIHtcbiAgY29uc3Qge1xuICAgIGNoZWNrZXIsXG4gICAgY29udGFpbmluZ0ZpbGVOYW1lLFxuICAgIGxvY2FsRGVjbGFyYXRpb25OYW1lc0J5TmFtZSxcbiAgICBuYW1lLFxuICAgIHByb2dyYW1cbiAgfSA9IHBhcmFtcztcblxuICBpZiAoY2hlY2tlci5nZXRTeW1ib2xBdExvY2F0aW9uKG5hbWUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBgRm9vI2JhcmAgaXMgYSBgSlNEb2NNZW1iZXJOYW1lYCwgd2hpY2ggdGhlIGNoZWNrZXIgcmVzb2x2ZXMgb25seSB0aHJvdWdoIGl0cyByaWdodC1oYW5kIG1lbWJlci5cbiAgaWYgKGlzSlNEb2NNZW1iZXJOYW1lKG5hbWUpICYmIGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihuYW1lLnJpZ2h0KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgY29uc3QgW3Jvb3ROYW1lID0gJycsIC4uLm1lbWJlck5hbWVzXSA9IGZsYXR0ZW5OYW1lKG5hbWUpO1xuICBjb25zdCBpbmRleCA9IGdldFByb2dyYW1JbmRleChwcm9ncmFtLCBjaGVja2VyKTtcbiAgY29uc3QgbG9jYWxSb290cyA9IChsb2NhbERlY2xhcmF0aW9uTmFtZXNCeU5hbWUuZ2V0KHJvb3ROYW1lKSA/PyBbXSkubWFwKChkZWNsYXJhdGlvbk5hbWUpID0+IGNoZWNrZXIuZ2V0U3ltYm9sQXRMb2NhdGlvbihkZWNsYXJhdGlvbk5hbWUpKTtcbiAgY29uc3Qgcm9vdHMgPSBbLi4ubG9jYWxSb290cywgLi4uaW5kZXguZXhwb3J0c0J5TmFtZS5nZXQocm9vdE5hbWUpID8/IFtdLCBmaW5kTW9kdWxlKHByb2dyYW0sIGNoZWNrZXIsIHJvb3ROYW1lLCBjb250YWluaW5nRmlsZU5hbWUpXTtcblxuICByZXR1cm4gcm9vdHMuc29tZSgocm9vdCkgPT4gISFyZXNvbHZlTWVtYmVyUGF0aChjaGVja2VyLCByb290LCBtZW1iZXJOYW1lcykpO1xufVxuXG5mdW5jdGlvbiByZXNvbHZlQWxpYXMoY2hlY2tlcjogVHlwZUNoZWNrZXIsICRzeW1ib2w6IFRzU3ltYm9sKTogVHNTeW1ib2wge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZSAtLSBCaXR3aXNlIGZsYWcgdGVzdCBpcyBpZGlvbWF0aWMgZm9yIHRoZSBUeXBlU2NyaXB0IGNvbXBpbGVyIEFQSS5cbiAgcmV0dXJuICgkc3ltYm9sLmZsYWdzICYgU3ltYm9sRmxhZ3MuQWxpYXMpID09PSAwID8gJHN5bWJvbCA6IGNoZWNrZXIuZ2V0QWxpYXNlZFN5bWJvbCgkc3ltYm9sKTtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZU1lbWJlclBhdGgoY2hlY2tlcjogVHlwZUNoZWNrZXIsIHJvb3Q6IFRzU3ltYm9sIHwgdW5kZWZpbmVkLCBtZW1iZXJOYW1lczogcmVhZG9ubHkgc3RyaW5nW10pOiBUc1N5bWJvbCB8IHVuZGVmaW5lZCB7XG4gIGxldCBjdXJyZW50OiBUc1N5bWJvbCB8IHVuZGVmaW5lZCA9IHJvb3Q7XG4gIGZvciAoY29uc3QgbWVtYmVyTmFtZSBvZiBtZW1iZXJOYW1lcykge1xuICAgIGlmICghY3VycmVudCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY3VycmVudCA9IGdldE1lbWJlcihjaGVja2VyLCBjdXJyZW50LCBtZW1iZXJOYW1lKTtcbiAgfVxuICByZXR1cm4gY3VycmVudDtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnRUE7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxzQkFBc0I7QUFLeEIsTUFBTSxhQUFhO0FBa0MxQixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLHNCQUFzQjtBQUM1QixNQUFNLCtCQUErQjtBQUNyQyxNQUFNLDJCQUEyQjtBQUNqQyxNQUFNLGdDQUFnQztBQUN0QyxNQUFNLGVBQWU7QUFFckIsTUFBTSxvQkFBb0Isb0JBQUksUUFBK0I7QUFLdEQsTUFBTSx3QkFBeUM7QUFBQSxFQUNwRCxPQUFPLFNBQVM7QUFDZCxVQUFNLFdBQVcsUUFBUSxXQUFXO0FBRXBDLFdBQU87QUFBQSxNQUNMLFFBQVEsTUFBWTtBQUNsQixjQUFNLFVBQVUsU0FBUztBQUN6QixjQUFNLFVBQVUsUUFBUSxlQUFlO0FBQ3ZDLGNBQU0sZUFBZSxTQUFTLHNCQUFzQixJQUFJLGVBQWUsSUFBSSxDQUFxQjtBQU1oRyxjQUFNLFFBQVEsb0JBQUksSUFBbUI7QUFNckMsY0FBTSw4QkFBOEIsb0JBQUksSUFBMEI7QUFFbEUsaUJBQVMsZUFBZSxXQUF1QjtBQUM3QyxjQUFJLGdCQUFnQixTQUFTLEdBQUc7QUFDOUIsa0JBQU0sSUFBSSxTQUFTO0FBQ25CO0FBQUEsVUFDRjtBQUNBLHVCQUFhLFdBQVcsY0FBYztBQUFBLFFBQ3hDO0FBRUEsaUJBQVMsVUFBVSxRQUFvQjtBQUNyQyxzQ0FBNEIsUUFBUSwyQkFBMkI7QUFDL0QscUJBQVcsYUFBYSx3QkFBd0IsTUFBTSxHQUFHO0FBQ3ZELDJCQUFlLFNBQVM7QUFBQSxVQUMxQjtBQUNBLHVCQUFhLFFBQVEsU0FBUztBQUFBLFFBQ2hDO0FBRUEsaUJBQVMsbUJBQW1CLE1BQTJCO0FBQ3JELGNBQUksQ0FBQyxLQUFLLFFBQVEsS0FBSyxLQUFLLFdBQVcsR0FBRyxHQUFHO0FBQzNDO0FBQUEsVUFDRjtBQUVBLGdCQUFNLFdBQVcsS0FBSyxLQUFLLFFBQVE7QUFDbkMsZ0JBQU0sYUFBYSxXQUFXLEtBQUs7QUFDbkMsZ0JBQU0sY0FBYyxvQkFBb0IsS0FBSyxVQUFVLEtBQUssb0JBQW9CLEtBQUssVUFBVTtBQUMvRixjQUFJLGVBQWU7QUFDbkIsY0FBSTtBQUVKLGNBQUksYUFBYSxRQUFRO0FBQ3ZCLGtCQUFNLEVBQUUsWUFBWSxXQUFXLElBQUksWUFBWTtBQUMvQywyQkFBZSxZQUFZLENBQUM7QUFDNUIsa0JBQU0sZUFBZSxXQUFXLFNBQVMsU0FBUyxZQUFZLGFBQWEsUUFBUTtBQUNuRix5QkFBYSxDQUFDLENBQUMsa0JBQWtCLFNBQVMsY0FBYyxXQUFXLE1BQU0sd0JBQXdCLENBQUM7QUFBQSxVQUNwRyxPQUFPO0FBQ0wseUJBQWEsZUFBZTtBQUFBLGNBQzFCO0FBQUEsY0FDQSxvQkFBb0IsYUFBYTtBQUFBLGNBQ2pDO0FBQUEsY0FDQSxNQUFNLEtBQUs7QUFBQSxjQUNYO0FBQUEsWUFDRixDQUFDO0FBQUEsVUFDSDtBQUVBLGNBQUksWUFBWTtBQUNkO0FBQUEsVUFDRjtBQUVBLGtCQUFRLE9BQU87QUFBQSxZQUNiLE1BQU07QUFBQSxjQUNKLE1BQU07QUFBQSxZQUNSO0FBQUEsWUFDQSxLQUFLO0FBQUEsY0FDSCxLQUFLLFFBQVEsV0FBVyxnQkFBZ0IsS0FBSyxLQUFLLE9BQU8sQ0FBQztBQUFBLGNBQzFELE9BQU8sUUFBUSxXQUFXLGdCQUFnQixLQUFLLEtBQUssU0FBUyxDQUFDO0FBQUEsWUFDaEU7QUFBQSxZQUNBLFdBQVc7QUFBQSxVQUNiLENBQUM7QUFBQSxRQUNIO0FBRUEsa0JBQVUsWUFBWTtBQUN0QixtQkFBVyxRQUFRLE9BQU87QUFDeEIsNkJBQW1CLElBQUk7QUFBQSxRQUN6QjtBQUFBLE1BQ0Y7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osTUFBTTtBQUFBLE1BQ0osYUFBYTtBQUFBLElBQ2Y7QUFBQSxJQUNBLFVBQVU7QUFBQSxNQUNSLENBQUMsVUFBVSxHQUFHO0FBQUEsSUFDaEI7QUFBQSxJQUNBLFFBQVEsQ0FBQztBQUFBLElBQ1QsTUFBTTtBQUFBLEVBQ1I7QUFDRjtBQUVBLFNBQVMsNEJBQTRCLE1BQVksNkJBQThEO0FBQzdHLE1BQUksQ0FBQyxtQkFBbUIsSUFBSSxLQUFLLENBQUMsS0FBSyxRQUFRLENBQUMsYUFBYSxLQUFLLElBQUksR0FBRztBQUN2RTtBQUFBLEVBQ0Y7QUFDQSxRQUFNLFFBQVEsNEJBQTRCLElBQUksS0FBSyxLQUFLLElBQUksS0FBSyxDQUFDO0FBQ2xFLFFBQU0sS0FBSyxLQUFLLElBQUk7QUFDcEIsOEJBQTRCLElBQUksS0FBSyxLQUFLLE1BQU0sS0FBSztBQUN2RDtBQUVBLFNBQVMsV0FBVyxTQUFrQixTQUFzQixXQUFtQixvQkFBa0Q7QUFDL0gsUUFBTSxnQkFBZ0IsZ0JBQWdCLFNBQVMsT0FBTyxFQUFFLGNBQWMsSUFBSSxTQUFTO0FBQ25GLE1BQUksZUFBZTtBQUNqQixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sbUJBQW1CLGtCQUFrQixXQUFXLG9CQUFvQixRQUFRLG1CQUFtQixHQUFHLEdBQUcsRUFBRSxnQkFBZ0I7QUFDN0gsUUFBTSxxQkFBcUIscUJBQXFCLFNBQVksU0FBWSxRQUFRLGNBQWMsZ0JBQWdCO0FBQzlHLFFBQU0saUJBQWlCLHNCQUFzQixRQUFRLG9CQUFvQixrQkFBa0I7QUFDM0YsU0FBTyxrQkFBa0IsdUJBQXVCLFNBQVMsU0FBUyxTQUFTO0FBQzdFO0FBRUEsU0FBUyx1QkFBdUIsU0FBa0IsU0FBc0IsWUFBMEM7QUFDaEgsUUFBTSxpQkFBaUIsV0FBVyxRQUFRLDhCQUE4QixFQUFFLEVBQUUsUUFBUSwrQkFBK0IsRUFBRTtBQUNySCxRQUFNLFdBQVcsQ0FBQyxJQUFJLGNBQWMsSUFBSSxJQUFJLGNBQWMsR0FBRyxZQUFZLEVBQUU7QUFDM0UsYUFBVyxjQUFjLFFBQVEsZUFBZSxHQUFHO0FBQ2pELFVBQU0sdUJBQXVCLFdBQVcsU0FBUyxRQUFRLCtCQUErQixFQUFFO0FBQzFGLFFBQUksU0FBUyxNQUFNLENBQUMsV0FBVyxDQUFDLHFCQUFxQixTQUFTLE1BQU0sQ0FBQyxHQUFHO0FBQ3RFO0FBQUEsSUFDRjtBQUNBLFVBQU0sZUFBZSxRQUFRLG9CQUFvQixVQUFVO0FBQzNELFFBQUksY0FBYztBQUNoQixhQUFPO0FBQUEsSUFDVDtBQUFBLEVBQ0Y7QUFDQSxTQUFPO0FBQ1Q7QUFFQSxTQUFTLFlBQVksTUFBOEM7QUFDakUsU0FBTyxhQUFhLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsR0FBRyxZQUFZLEtBQUssSUFBSSxHQUFHLEtBQUssTUFBTSxJQUFJO0FBQ3ZGO0FBRUEsU0FBUyxVQUFVLFNBQXNCLFNBQW1CLFlBQTBDO0FBQ3BHLFFBQU0sY0FBYyx5QkFBeUIsVUFBVTtBQUN2RCxRQUFNLFNBQVMsYUFBYSxTQUFTLE9BQU87QUFFNUMsUUFBTSxnQkFBZ0IsT0FBTyxRQUFRLFlBQVksWUFBWSxJQUFJLFNBQVksUUFBUSw0QkFBNEIsWUFBWSxNQUFNO0FBQ25JLFNBQU8sZ0JBQ0YsT0FBTyxTQUFTLElBQUksV0FBVyxLQUMvQixPQUFPLFNBQVMsSUFBSSxXQUFXLEtBQy9CLFFBQVEsa0JBQWtCLFFBQVEsd0JBQXdCLE1BQU0sR0FBRyxVQUFVLEtBQzdFLFFBQVEsa0JBQWtCLFFBQVEsZ0JBQWdCLE1BQU0sR0FBRyxVQUFVO0FBQzVFO0FBRUEsU0FBUyxnQkFBZ0IsU0FBa0IsU0FBb0M7QUFDN0UsTUFBSSxRQUFRLGtCQUFrQixJQUFJLE9BQU87QUFDekMsTUFBSSxPQUFPO0FBQ1QsV0FBTztBQUFBLEVBQ1Q7QUFFQSxVQUFRO0FBQUEsSUFDTixlQUFlLG9CQUFJLElBQXdCO0FBQUEsSUFDM0MsZUFBZSxvQkFBSSxJQUFzQjtBQUFBLEVBQzNDO0FBRUEsUUFBTSxnQkFBNEIsQ0FBQztBQUNuQyxhQUFXLGlCQUFpQixRQUFRLGtCQUFrQixHQUFHO0FBQ3ZELFVBQU0sY0FBYyxJQUFJLGNBQWMsS0FBSyxXQUFXLEtBQUssRUFBRSxHQUFHLGFBQWE7QUFDN0Usa0JBQWMsS0FBSyxhQUFhO0FBQUEsRUFDbEM7QUFDQSxhQUFXLGNBQWMsUUFBUSxlQUFlLEdBQUc7QUFDakQsVUFBTSxlQUFlLFFBQVEsb0JBQW9CLFVBQVU7QUFDM0QsUUFBSSxjQUFjO0FBQ2hCLG9CQUFjLEtBQUssWUFBWTtBQUFBLElBQ2pDO0FBQUEsRUFDRjtBQUVBLGFBQVcsZ0JBQWdCLGVBQWU7QUFDeEMsZUFBVyxnQkFBZ0IsUUFBUSxtQkFBbUIsWUFBWSxHQUFHO0FBQ25FLFlBQU0sVUFBVSxNQUFNLGNBQWMsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDO0FBQy9ELGNBQVEsS0FBSyxZQUFZO0FBQ3pCLFlBQU0sY0FBYyxJQUFJLGFBQWEsTUFBTSxPQUFPO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBRUEsb0JBQWtCLElBQUksU0FBUyxLQUFLO0FBQ3BDLFNBQU87QUFDVDtBQUVBLFNBQVMsZ0JBQWdCLE1BQW1DO0FBQzFELFNBQU8sWUFBWSxJQUFJLEtBQUssZ0JBQWdCLElBQUksS0FBSyxpQkFBaUIsSUFBSTtBQUM1RTtBQUVBLFNBQVMsbUJBQW1CLE1BQXNDO0FBQ2hFLFNBQU8sbUJBQW1CLElBQUksS0FDekIsa0JBQWtCLElBQUksS0FDdEIsc0JBQXNCLElBQUksS0FDMUIseUJBQXlCLElBQUksS0FDN0IsdUJBQXVCLElBQUksS0FDM0Isb0JBQW9CLElBQUksS0FDeEIsa0JBQWtCLElBQUksS0FDdEIsb0JBQW9CLElBQUksS0FDeEIsc0JBQXNCLElBQUksS0FDMUIsb0JBQW9CLElBQUksS0FDeEIseUJBQXlCLElBQUksS0FDN0IsdUJBQXVCLElBQUksS0FDM0Isc0JBQXNCLElBQUk7QUFDakM7QUFFQSxTQUFTLGVBQWUsUUFBdUM7QUFDN0QsUUFBTTtBQUFBLElBQ0o7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRixJQUFJO0FBRUosTUFBSSxRQUFRLG9CQUFvQixJQUFJLEdBQUc7QUFDckMsV0FBTztBQUFBLEVBQ1Q7QUFHQSxNQUFJLGtCQUFrQixJQUFJLEtBQUssUUFBUSxvQkFBb0IsS0FBSyxLQUFLLEdBQUc7QUFDdEUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLENBQUMsV0FBVyxJQUFJLEdBQUcsV0FBVyxJQUFJLFlBQVksSUFBSTtBQUN4RCxRQUFNLFFBQVEsZ0JBQWdCLFNBQVMsT0FBTztBQUM5QyxRQUFNLGNBQWMsNEJBQTRCLElBQUksUUFBUSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLFFBQVEsb0JBQW9CLGVBQWUsQ0FBQztBQUMxSSxRQUFNLFFBQVEsQ0FBQyxHQUFHLFlBQVksR0FBRyxNQUFNLGNBQWMsSUFBSSxRQUFRLEtBQUssQ0FBQyxHQUFHLFdBQVcsU0FBUyxTQUFTLFVBQVUsa0JBQWtCLENBQUM7QUFFcEksU0FBTyxNQUFNLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxrQkFBa0IsU0FBUyxNQUFNLFdBQVcsQ0FBQztBQUM3RTtBQUVBLFNBQVMsYUFBYSxTQUFzQixTQUE2QjtBQUV2RSxVQUFRLFFBQVEsUUFBUSxZQUFZLFdBQVcsSUFBSSxVQUFVLFFBQVEsaUJBQWlCLE9BQU87QUFDL0Y7QUFFQSxTQUFTLGtCQUFrQixTQUFzQixNQUE0QixhQUFzRDtBQUNqSSxNQUFJLFVBQWdDO0FBQ3BDLGFBQVcsY0FBYyxhQUFhO0FBQ3BDLFFBQUksQ0FBQyxTQUFTO0FBQ1osYUFBTztBQUFBLElBQ1Q7QUFDQSxjQUFVLFVBQVUsU0FBUyxTQUFTLFVBQVU7QUFBQSxFQUNsRDtBQUNBLFNBQU87QUFDVDsiLCJuYW1lcyI6W119
@@ -109,13 +109,13 @@ function getIssueReferences(params) {
109
109
  const closingFlagByNumber = /* @__PURE__ */ new Map();
110
110
  for (const commitMessage of commitMessages) {
111
111
  for (const match of commitMessage.matchAll(regExp)) {
112
- const number = Number(
112
+ const $number = Number(
113
113
  getOptionalNamedGroup(match, "urlNumber") ?? getOptionalNamedGroup(match, "slugNumber") ?? getOptionalNamedGroup(match, "bareNumber")
114
114
  );
115
- closingFlagByNumber.set(number, (closingFlagByNumber.get(number) ?? false) || getOptionalNamedGroup(match, "keyword") !== null);
115
+ closingFlagByNumber.set($number, (closingFlagByNumber.get($number) ?? false) || getOptionalNamedGroup(match, "keyword") !== null);
116
116
  }
117
117
  }
118
- return [...closingFlagByNumber].sort(([number1], [number2]) => number1 - number2).map(([number, isClosing]) => ({ isClosing, number }));
118
+ return [...closingFlagByNumber].sort(([number1], [number2]) => number1 - number2).map(([$number, isClosing]) => ({ isClosing, number: $number }));
119
119
  }
120
120
  async function hasCommentContaining(repoSlug, issueNumber, text) {
121
121
  const bodies = await execFromRoot(["gh", "api", "--paginate", `repos/${repoSlug}/issues/${String(issueNumber)}/comments`, "--jq", ".[].body"], {
@@ -131,4 +131,4 @@ export {
131
131
  closeReleasedIssues,
132
132
  getIssueReferences
133
133
  };
134
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWxlYXNlZC1pc3N1ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENsb3NlcyB0aGUgR2l0SHViIGlzc3VlcyBhIHJlbGVhc2UgY2Fycmllcywgd2l0aCBhIGNvbW1lbnQgbGlua2luZyB0aGUgcmVsZWFzZS5cbiAqXG4gKiBBbiBpc3N1ZSB0aGF0IGEgY29tbWl0IGluIHRoZSByZWxlYXNlIG5hbWVzIHdpdGggYSBjbG9zaW5nIGtleXdvcmQgKGBmaXhlcyAjMTJgLCBgY2xvc2VzICMxMmAsIGByZXNvbHZlcyAjMTJgLFxuICogYW5kIHRoZWlyIG90aGVyIHRlbnNlcykgaXMgY2xvc2VkIGFzIGNvbXBsZXRlZCwgd2l0aCBgRml4ZWQgaW4gPHJlbGVhc2UgVVJMPmAgd2hlbiBpdCBjYXJyaWVzIGEgYGJ1Z2AgbGFiZWwgYW5kXG4gKiBgSW1wbGVtZW50ZWQgaW4gPHJlbGVhc2UgVVJMPmAgb3RoZXJ3aXNlLiBUaGUgVVJMIGlzIHRoZSBgcmVsZWFzZXMvdGFnLzx2ZXJzaW9uPmAgcGFnZSwgd2hpY2ggZXhpc3RzIGJ5IHRoZSB0aW1lXG4gKiB0aGlzIHJ1bnMuXG4gKlxuICogT25seSBhIGNsb3Npbmcga2V5d29yZCBjbG9zZXMgYW55dGhpbmcuIEEgYmFyZSBtZW50aW9uIChgcmUgIzEyYCwgYCgjMTIpYCwgdGhlIGlzc3VlIFVSTCkgaXMgb2Z0ZW4gb25lIHN0ZXAgb2ZcbiAqIHVuZmluaXNoZWQgd29yaywgYW5kIHRoaXMgbW9kdWxlIGNhbm5vdCBrbm93IHdoZXRoZXIgdGhlIHJlc3QgaGFzIGxhbmRlZCwgc28gc3VjaCBhbiBpc3N1ZSBpcyBsaXN0ZWQgYXMgbGVmdCBvcGVuXG4gKiBhbmQgbm90aGluZyBpcyBwb3N0ZWQgdG8gaXQuXG4gKlxuICogR2l0SHViIGl0c2VsZiBjbG9zZXMgYW4gaXNzdWUgbmFtZWQgd2l0aCBhIGNsb3Npbmcga2V5d29yZCBhcyBzb29uIGFzIHRoZSBjb21taXQgcmVhY2hlcyB0aGUgZGVmYXVsdCBicmFuY2gg4oCUXG4gKiBiZWZvcmUgdGhlIHJlbGVhc2UsIGFuZCB3aXRob3V0IHNheWluZyB3aGljaCByZWxlYXNlIGNhcnJpZXMgdGhlIGNoYW5nZS4gU28gYW4gaXNzdWUgdGhhdCBpcyBhbHJlYWR5IGNsb3NlZCBhc1xuICogY29tcGxldGVkIHN0aWxsIGdldHMgdGhlIHJlbGVhc2UgbGluaywgdW5sZXNzIG9uZSBvZiBpdHMgY29tbWVudHMgYWxyZWFkeSBjYXJyaWVzIHRoaXMgcmVsZWFzZSdzIFVSTCwgd2hpY2ggYWxzb1xuICogbWFrZXMgYSBzZWNvbmQgcnVuIHBvc3Qgbm90aGluZy5cbiAqL1xuXG5pbXBvcnQgeyBlcnJvclRvU3RyaW5nIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7XG4gIGVzY2FwZVJlZ0V4cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcblxuaW1wb3J0IHsgZXhlY0Zyb21Sb290IH0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBjbG9zZVJlbGVhc2VkSXNzdWVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbG9zZVJlbGVhc2VkSXNzdWVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIGp1c3QgcmVsZWFzZWQuIEl0cyB0YWcgbXVzdCBleGlzdCBsb2NhbGx5IGFuZCBpdHMgR2l0SHViIHJlbGVhc2UgbXVzdCBiZSBwdWJsaXNoZWQuXG4gICAqL1xuICByZWFkb25seSBuZXdWZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZ2V0SXNzdWVSZWZlcmVuY2VzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRJc3N1ZVJlZmVyZW5jZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBtZXNzYWdlcyB0byByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0TWVzc2FnZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgYDxvd25lcj4vPG5hbWU+YCBvZiB0aGUgcmVwb3NpdG9yeSB3aG9zZSBpc3N1ZXMgY291bnQuIEEgcmVmZXJlbmNlIGludG8gYW55IG90aGVyIHJlcG9zaXRvcnkgaXMgaWdub3JlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9TbHVnOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gaXNzdWUgbnVtYmVyIG5hbWVkIGJ5IHRoZSBjb21taXQgbWVzc2FnZXMgb2YgYSByZWxlYXNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzc3VlUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYXQgbGVhc3Qgb25lIG1lbnRpb24gdXNlZCBhIGNsb3Npbmcga2V5d29yZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzQ2xvc2luZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGlzc3VlIG9yIHB1bGwgcmVxdWVzdCBudW1iZXIuXG4gICAqL1xuICByZWFkb25seSBudW1iZXI6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEdpdEh1Yklzc3VlIHtcbiAgcmVhZG9ubHkgbGFiZWxzOiByZWFkb25seSBHaXRIdWJMYWJlbFtdO1xuICByZWFkb25seSBwdWxsX3JlcXVlc3Q/OiB1bmtub3duO1xuICByZWFkb25seSBzdGF0ZTogc3RyaW5nO1xuICByZWFkb25seSBzdGF0ZV9yZWFzb24/OiBudWxsIHwgc3RyaW5nO1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgR2l0SHViTGFiZWwge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xvc2VzIHRoZSBpc3N1ZXMgdGhlIHJlbGVhc2Ugb2Yge0BsaW5rIENsb3NlUmVsZWFzZWRJc3N1ZXNQYXJhbXMubmV3VmVyc2lvbn0gY2FycmllcywgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlXG4gKiBvdmVydmlldy5cbiAqXG4gKiBBIGZhaWx1cmUgdG8gcmVhZCBvciB1cGRhdGUgb25lIGlzc3VlIGlzIHJlcG9ydGVkIGFuZCB0aGUgcmVzdCBhcmUgc3RpbGwgcHJvY2Vzc2VkLCBiZWNhdXNlIHRoZSByZWxlYXNlIGlzXG4gKiBhbHJlYWR5IHB1Ymxpc2hlZCBieSB0aGUgdGltZSB0aGlzIHJ1bnMgYW5kIG5vdGhpbmcgYWJvdXQgaXQgY2FuIGJlIHVuZG9uZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDbG9zZVJlbGVhc2VkSXNzdWVzUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG51bWJlcnMgb2YgdGhlIGlzc3VlcyB0aGF0IGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVJlbGVhc2VkSXNzdWVzKHBhcmFtczogQ2xvc2VSZWxlYXNlZElzc3Vlc1BhcmFtcyk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgY29uc3QgeyBuZXdWZXJzaW9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHJlcG9VcmwgPSBhd2FpdCBleGVjRnJvbVJvb3QoJ2doIHJlcG8gdmlldyAtLWpzb24gdXJsIC1xIC51cmwnLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gIGNvbnN0IHJlcG9TbHVnID0gdG9SZXBvU2x1ZyhyZXBvVXJsKTtcbiAgaWYgKCFyZXBvU2x1Zykge1xuICAgIGNvbnNvbGUud2FybihgTm90IGNsb3NpbmcgdGhlIHJlbGVhc2VkIGlzc3VlczogJyR7cmVwb1VybH0nIGlzIG5vdCBhIEdpdEh1YiByZXBvc2l0b3J5IFVSTC5gKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwcmV2aW91c1RhZyA9IGF3YWl0IGV4ZWNGcm9tUm9vdChbJ2dpdCcsICdkZXNjcmliZScsICctLXRhZ3MnLCAnLS1hYmJyZXY9MCcsIGAke25ld1ZlcnNpb259XmBdLCB7XG4gICAgaXNRdWlldDogdHJ1ZSxcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogdHJ1ZVxuICB9KTtcbiAgY29uc3QgY29tbWl0UmFuZ2UgPSBwcmV2aW91c1RhZyA/IGAke3ByZXZpb3VzVGFnfS4uJHtuZXdWZXJzaW9ufWAgOiBuZXdWZXJzaW9uO1xuICBjb25zdCBjb21taXRNZXNzYWdlc1N0cmluZyA9IGF3YWl0IGV4ZWNGcm9tUm9vdChbJ2dpdCcsICdsb2cnLCBjb21taXRSYW5nZSwgJy0tZm9ybWF0PSVCJywgJy16J10sIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IGdldElzc3VlUmVmZXJlbmNlcyh7IGNvbW1pdE1lc3NhZ2VzOiBjb21taXRNZXNzYWdlc1N0cmluZy5zcGxpdCgnXFwwJyksIHJlcG9TbHVnIH0pO1xuICBjb25zdCByZWxlYXNlVXJsID0gYCR7cmVwb1VybH0vcmVsZWFzZXMvdGFnLyR7bmV3VmVyc2lvbn1gO1xuICBjb25zdCBmYWlsZWROdW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBsZWZ0T3BlbkxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaXNzdWUgPSBKU09OLnBhcnNlKGF3YWl0IGV4ZWNGcm9tUm9vdChbJ2doJywgJ2FwaScsIGByZXBvcy8ke3JlcG9TbHVnfS9pc3N1ZXMvJHtTdHJpbmcocmVmZXJlbmNlLm51bWJlcil9YF0sIHsgaXNRdWlldDogdHJ1ZSB9KSkgYXMgR2l0SHViSXNzdWU7XG4gICAgICBpZiAoaXNzdWUucHVsbF9yZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1lbnQgPSBgJHtpc3N1ZS5sYWJlbHMuc29tZSgobGFiZWwpID0+IC9idWcvaS50ZXN0KGxhYmVsLm5hbWUpKSA/ICdGaXhlZCBpbicgOiAnSW1wbGVtZW50ZWQgaW4nfSAke3JlbGVhc2VVcmx9YDtcbiAgICAgIGNvbnN0IGlzT3BlbiA9IGlzc3VlLnN0YXRlID09PSAnb3Blbic7XG5cbiAgICAgIGlmICghcmVmZXJlbmNlLmlzQ2xvc2luZykge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgbGVmdE9wZW5MaW5lcy5wdXNoKGAgICMke1N0cmluZyhyZWZlcmVuY2UubnVtYmVyKX0gJHtpc3N1ZS50aXRsZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICBhd2FpdCBleGVjRnJvbVJvb3QoWydnaCcsICdpc3N1ZScsICdjbG9zZScsIFN0cmluZyhyZWZlcmVuY2UubnVtYmVyKSwgJy1SJywgcmVwb1NsdWcsICctLXJlYXNvbicsICdjb21wbGV0ZWQnLCAnLS1jb21tZW50JywgY29tbWVudF0sIHtcbiAgICAgICAgICBpc1F1aWV0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLndhcm4oYENsb3NlZCAjJHtTdHJpbmcocmVmZXJlbmNlLm51bWJlcil9ICR7aXNzdWUudGl0bGV9OiAke2NvbW1lbnR9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNzdWUuc3RhdGVfcmVhc29uICE9PSAnY29tcGxldGVkJyB8fCBhd2FpdCBoYXNDb21tZW50Q29udGFpbmluZyhyZXBvU2x1ZywgcmVmZXJlbmNlLm51bWJlciwgcmVsZWFzZVVybCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ2doJywgJ2lzc3VlJywgJ2NvbW1lbnQnLCBTdHJpbmcocmVmZXJlbmNlLm51bWJlciksICctUicsIHJlcG9TbHVnLCAnLS1ib2R5JywgY29tbWVudF0sIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUud2FybihgQ29tbWVudGVkIG9uIHRoZSBhbHJlYWR5IGNsb3NlZCAjJHtTdHJpbmcocmVmZXJlbmNlLm51bWJlcil9ICR7aXNzdWUudGl0bGV9OiAke2NvbW1lbnR9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZhaWxlZE51bWJlcnMucHVzaChyZWZlcmVuY2UubnVtYmVyKTtcbiAgICAgIGNvbnNvbGUud2FybihgQ291bGQgbm90IHByb2Nlc3MgaXNzdWUgIyR7U3RyaW5nKHJlZmVyZW5jZS5udW1iZXIpfSBvZiAke3JlcG9TbHVnfTogJHtlcnJvclRvU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAobGVmdE9wZW5MaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYExlZnQgb3BlbjogdGhlIHJlbGVhc2UgbmFtZXMgdGhlc2UgaXNzdWVzIHdpdGhvdXQgYSBjbG9zaW5nIGtleXdvcmQsIHNvIHdoZXRoZXIgdGhleSBhcmUgZmluaXNoZWQgaXMgbm90IGtub3duIGhlcmU6XFxuJHtsZWZ0T3BlbkxpbmVzLmpvaW4oJ1xcbicpfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGZhaWxlZE51bWJlcnM7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgdGhlIGlzc3VlIG51bWJlcnMgb2Ygb25lIHJlcG9zaXRvcnkgdGhhdCBhIHNldCBvZiBjb21taXQgbWVzc2FnZXMgbmFtZXMsIGFuZCB3aGV0aGVyIGVhY2ggd2FzIG5hbWVkIHdpdGhcbiAqIGEgY2xvc2luZyBrZXl3b3JkLlxuICpcbiAqIFRocmVlIGZvcm1zIGNvdW50OiBhIGJhcmUgYCMxMmAsIGA8b3duZXI+LzxuYW1lPiMxMmAsIGFuZCB0aGUgcmVwb3NpdG9yeSdzIGBpc3N1ZXMvMTJgIG9yIGBwdWxsLzEyYCBVUkwuIEEgYmFyZVxuICogYCMxMmAgZ2x1ZWQgdG8gYSBwcmVjZWRpbmcgdG9rZW4gKGBvdGhlciMxMmAsIGBvdGhlci9yZXBvIzEyYCwgYCYjMTJgKSBkb2VzIG5vdC4gQSBtZW50aW9uIGlzIGNsb3Npbmcgd2hlblxuICogR2l0SHViJ3Mgb3duIGNsb3Npbmcga2V5d29yZCBwcmVjZWRlcyBpdCBkaXJlY3RseTogYGNsb3NlYCwgYGNsb3Nlc2AsIGBjbG9zZWRgLCBgZml4YCwgYGZpeGVzYCwgYGZpeGVkYCxcbiAqIGByZXNvbHZlYCwgYHJlc29sdmVzYCBvciBgcmVzb2x2ZWRgLCBpbiBhbnkgY2FzZSwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGNvbG9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEdldElzc3VlUmVmZXJlbmNlc1BhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgcmVmZXJlbmNlcywgc29ydGVkIGJ5IG51bWJlciwgb25lIHBlciBudW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJc3N1ZVJlZmVyZW5jZXMocGFyYW1zOiBHZXRJc3N1ZVJlZmVyZW5jZXNQYXJhbXMpOiBJc3N1ZVJlZmVyZW5jZVtdIHtcbiAgY29uc3QgeyBjb21taXRNZXNzYWdlcywgcmVwb1NsdWcgfSA9IHBhcmFtcztcbiAgY29uc3QgZXNjYXBlZFNsdWcgPSBlc2NhcGVSZWdFeHAocmVwb1NsdWcpO1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKFxuICAgIFN0cmluZy5yYXdgKD88a2V5d29yZD5cXGIoPzpjbG9zZVtzZF0/fGZpeCg/OmVbc2RdKT98cmVzb2x2ZVtzZF0/KTo/XFxzKyk/KD86aHR0cHM/Oi8vZ2l0aHViXFwuY29tLyR7ZXNjYXBlZFNsdWd9Lyg/Omlzc3Vlc3xwdWxsKS8oPzx1cmxOdW1iZXI+XFxkKyl8KD88IVtcXHcuLV0pJHtlc2NhcGVkU2x1Z30jKD88c2x1Z051bWJlcj5cXGQrKVxcYnwoPzwhW1xcdy8mIy4tXSkjKD88YmFyZU51bWJlcj5cXGR7MSw2fSlcXGIpYCxcbiAgICAnZ2knXG4gICk7XG4gIGNvbnN0IGNsb3NpbmdGbGFnQnlOdW1iZXIgPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcblxuICBmb3IgKGNvbnN0IGNvbW1pdE1lc3NhZ2Ugb2YgY29tbWl0TWVzc2FnZXMpIHtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbW1pdE1lc3NhZ2UubWF0Y2hBbGwocmVnRXhwKSkge1xuICAgICAgY29uc3QgbnVtYmVyID0gTnVtYmVyKFxuICAgICAgICBnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsICd1cmxOdW1iZXInKSA/PyBnZXRPcHRpb25hbE5hbWVkR3JvdXAobWF0Y2gsICdzbHVnTnVtYmVyJykgPz8gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAnYmFyZU51bWJlcicpXG4gICAgICApO1xuICAgICAgY2xvc2luZ0ZsYWdCeU51bWJlci5zZXQobnVtYmVyLCAoY2xvc2luZ0ZsYWdCeU51bWJlci5nZXQobnVtYmVyKSA/PyBmYWxzZSkgfHwgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAna2V5d29yZCcpICE9PSBudWxsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmNsb3NpbmdGbGFnQnlOdW1iZXJdXG4gICAgLnNvcnQoKFtudW1iZXIxXSwgW251bWJlcjJdKSA9PiBudW1iZXIxIC0gbnVtYmVyMilcbiAgICAubWFwKChbbnVtYmVyLCBpc0Nsb3NpbmddKSA9PiAoeyBpc0Nsb3NpbmcsIG51bWJlciB9KSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhc0NvbW1lbnRDb250YWluaW5nKHJlcG9TbHVnOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBudW1iZXIsIHRleHQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBib2RpZXMgPSBhd2FpdCBleGVjRnJvbVJvb3QoWydnaCcsICdhcGknLCAnLS1wYWdpbmF0ZScsIGByZXBvcy8ke3JlcG9TbHVnfS9pc3N1ZXMvJHtTdHJpbmcoaXNzdWVOdW1iZXIpfS9jb21tZW50c2AsICctLWpxJywgJy5bXS5ib2R5J10sIHtcbiAgICBpc1F1aWV0OiB0cnVlXG4gIH0pO1xuICByZXR1cm4gYm9kaWVzLmluY2x1ZGVzKHRleHQpO1xufVxuXG5mdW5jdGlvbiB0b1JlcG9TbHVnKHJlcG9Vcmw6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCBtYXRjaCA9IC9eaHR0cHM6XFwvXFwvZ2l0aHViXFwuY29tXFwvKD88c2x1Zz5bXi9dK1xcL1teL10rPylcXC8/JC8uZXhlYyhyZXBvVXJsKTtcbiAgcmV0dXJuIG1hdGNoPy5ncm91cHM/Llsnc2x1ZyddID8/IG51bGw7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBb0JBLFNBQVMscUJBQXFCO0FBQzlCO0FBQUEsRUFDRTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBRVAsU0FBUyxvQkFBb0I7QUFnRTdCLGVBQXNCLG9CQUFvQixRQUFzRDtBQUM5RixRQUFNLEVBQUUsV0FBVyxJQUFJO0FBQ3ZCLFFBQU0sVUFBVSxNQUFNLGFBQWEsbUNBQW1DLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFDdkYsUUFBTSxXQUFXLFdBQVcsT0FBTztBQUNuQyxNQUFJLENBQUMsVUFBVTtBQUNiLFlBQVEsS0FBSyxxQ0FBcUMsT0FBTyxtQ0FBbUM7QUFDNUYsV0FBTyxDQUFDO0FBQUEsRUFDVjtBQUVBLFFBQU0sY0FBYyxNQUFNLGFBQWEsQ0FBQyxPQUFPLFlBQVksVUFBVSxjQUFjLEdBQUcsVUFBVSxHQUFHLEdBQUc7QUFBQSxJQUNwRyxTQUFTO0FBQUEsSUFDVCxzQkFBc0I7QUFBQSxFQUN4QixDQUFDO0FBQ0QsUUFBTSxjQUFjLGNBQWMsR0FBRyxXQUFXLEtBQUssVUFBVSxLQUFLO0FBQ3BFLFFBQU0sdUJBQXVCLE1BQU0sYUFBYSxDQUFDLE9BQU8sT0FBTyxhQUFhLGVBQWUsSUFBSSxHQUFHLEVBQUUsU0FBUyxLQUFLLENBQUM7QUFDbkgsUUFBTSxhQUFhLG1CQUFtQixFQUFFLGdCQUFnQixxQkFBcUIsTUFBTSxJQUFJLEdBQUcsU0FBUyxDQUFDO0FBQ3BHLFFBQU0sYUFBYSxHQUFHLE9BQU8saUJBQWlCLFVBQVU7QUFDeEQsUUFB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
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9yZWxlYXNlZC1pc3N1ZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIENsb3NlcyB0aGUgR2l0SHViIGlzc3VlcyBhIHJlbGVhc2UgY2Fycmllcywgd2l0aCBhIGNvbW1lbnQgbGlua2luZyB0aGUgcmVsZWFzZS5cbiAqXG4gKiBBbiBpc3N1ZSB0aGF0IGEgY29tbWl0IGluIHRoZSByZWxlYXNlIG5hbWVzIHdpdGggYSBjbG9zaW5nIGtleXdvcmQgKGBmaXhlcyAjMTJgLCBgY2xvc2VzICMxMmAsIGByZXNvbHZlcyAjMTJgLFxuICogYW5kIHRoZWlyIG90aGVyIHRlbnNlcykgaXMgY2xvc2VkIGFzIGNvbXBsZXRlZCwgd2l0aCBgRml4ZWQgaW4gPHJlbGVhc2UgVVJMPmAgd2hlbiBpdCBjYXJyaWVzIGEgYGJ1Z2AgbGFiZWwgYW5kXG4gKiBgSW1wbGVtZW50ZWQgaW4gPHJlbGVhc2UgVVJMPmAgb3RoZXJ3aXNlLiBUaGUgVVJMIGlzIHRoZSBgcmVsZWFzZXMvdGFnLzx2ZXJzaW9uPmAgcGFnZSwgd2hpY2ggZXhpc3RzIGJ5IHRoZSB0aW1lXG4gKiB0aGlzIHJ1bnMuXG4gKlxuICogT25seSBhIGNsb3Npbmcga2V5d29yZCBjbG9zZXMgYW55dGhpbmcuIEEgYmFyZSBtZW50aW9uIChgcmUgIzEyYCwgYCgjMTIpYCwgdGhlIGlzc3VlIFVSTCkgaXMgb2Z0ZW4gb25lIHN0ZXAgb2ZcbiAqIHVuZmluaXNoZWQgd29yaywgYW5kIHRoaXMgbW9kdWxlIGNhbm5vdCBrbm93IHdoZXRoZXIgdGhlIHJlc3QgaGFzIGxhbmRlZCwgc28gc3VjaCBhbiBpc3N1ZSBpcyBsaXN0ZWQgYXMgbGVmdCBvcGVuXG4gKiBhbmQgbm90aGluZyBpcyBwb3N0ZWQgdG8gaXQuXG4gKlxuICogR2l0SHViIGl0c2VsZiBjbG9zZXMgYW4gaXNzdWUgbmFtZWQgd2l0aCBhIGNsb3Npbmcga2V5d29yZCBhcyBzb29uIGFzIHRoZSBjb21taXQgcmVhY2hlcyB0aGUgZGVmYXVsdCBicmFuY2gg4oCUXG4gKiBiZWZvcmUgdGhlIHJlbGVhc2UsIGFuZCB3aXRob3V0IHNheWluZyB3aGljaCByZWxlYXNlIGNhcnJpZXMgdGhlIGNoYW5nZS4gU28gYW4gaXNzdWUgdGhhdCBpcyBhbHJlYWR5IGNsb3NlZCBhc1xuICogY29tcGxldGVkIHN0aWxsIGdldHMgdGhlIHJlbGVhc2UgbGluaywgdW5sZXNzIG9uZSBvZiBpdHMgY29tbWVudHMgYWxyZWFkeSBjYXJyaWVzIHRoaXMgcmVsZWFzZSdzIFVSTCwgd2hpY2ggYWxzb1xuICogbWFrZXMgYSBzZWNvbmQgcnVuIHBvc3Qgbm90aGluZy5cbiAqL1xuXG5pbXBvcnQgeyBlcnJvclRvU3RyaW5nIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL2Vycm9yJztcbmltcG9ydCB7XG4gIGVzY2FwZVJlZ0V4cCxcbiAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwXG59IGZyb20gJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYi9yZWctZXhwJztcblxuaW1wb3J0IHsgZXhlY0Zyb21Sb290IH0gZnJvbSAnLi9yb290LnRzJztcblxuLyoqXG4gKiBQYXJhbXMgZm9yIHtAbGluayBjbG9zZVJlbGVhc2VkSXNzdWVzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDbG9zZVJlbGVhc2VkSXNzdWVzUGFyYW1zIHtcbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIGp1c3QgcmVsZWFzZWQuIEl0cyB0YWcgbXVzdCBleGlzdCBsb2NhbGx5IGFuZCBpdHMgR2l0SHViIHJlbGVhc2UgbXVzdCBiZSBwdWJsaXNoZWQuXG4gICAqL1xuICByZWFkb25seSBuZXdWZXJzaW9uOiBzdHJpbmc7XG59XG5cbi8qKlxuICogUGFyYW1zIGZvciB7QGxpbmsgZ2V0SXNzdWVSZWZlcmVuY2VzfS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHZXRJc3N1ZVJlZmVyZW5jZXNQYXJhbXMge1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBtZXNzYWdlcyB0byByZWFkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWl0TWVzc2FnZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgYDxvd25lcj4vPG5hbWU+YCBvZiB0aGUgcmVwb3NpdG9yeSB3aG9zZSBpc3N1ZXMgY291bnQuIEEgcmVmZXJlbmNlIGludG8gYW55IG90aGVyIHJlcG9zaXRvcnkgaXMgaWdub3JlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlcG9TbHVnOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQW4gaXNzdWUgbnVtYmVyIG5hbWVkIGJ5IHRoZSBjb21taXQgbWVzc2FnZXMgb2YgYSByZWxlYXNlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElzc3VlUmVmZXJlbmNlIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgYXQgbGVhc3Qgb25lIG1lbnRpb24gdXNlZCBhIGNsb3Npbmcga2V5d29yZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzQ2xvc2luZzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGlzc3VlIG9yIHB1bGwgcmVxdWVzdCBudW1iZXIuXG4gICAqL1xuICByZWFkb25seSBudW1iZXI6IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIEdpdEh1Yklzc3VlIHtcbiAgcmVhZG9ubHkgbGFiZWxzOiByZWFkb25seSBHaXRIdWJMYWJlbFtdO1xuICByZWFkb25seSBwdWxsX3JlcXVlc3Q/OiB1bmtub3duO1xuICByZWFkb25seSBzdGF0ZTogc3RyaW5nO1xuICByZWFkb25seSBzdGF0ZV9yZWFzb24/OiBudWxsIHwgc3RyaW5nO1xuICByZWFkb25seSB0aXRsZTogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgR2l0SHViTGFiZWwge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xvc2VzIHRoZSBpc3N1ZXMgdGhlIHJlbGVhc2Ugb2Yge0BsaW5rIENsb3NlUmVsZWFzZWRJc3N1ZXNQYXJhbXMubmV3VmVyc2lvbn0gY2FycmllcywgYXMgZGVzY3JpYmVkIGluIHRoZSBmaWxlXG4gKiBvdmVydmlldy5cbiAqXG4gKiBBIGZhaWx1cmUgdG8gcmVhZCBvciB1cGRhdGUgb25lIGlzc3VlIGlzIHJlcG9ydGVkIGFuZCB0aGUgcmVzdCBhcmUgc3RpbGwgcHJvY2Vzc2VkLCBiZWNhdXNlIHRoZSByZWxlYXNlIGlzXG4gKiBhbHJlYWR5IHB1Ymxpc2hlZCBieSB0aGUgdGltZSB0aGlzIHJ1bnMgYW5kIG5vdGhpbmcgYWJvdXQgaXQgY2FuIGJlIHVuZG9uZS5cbiAqXG4gKiBAcGFyYW0gcGFyYW1zIC0gVGhlIHtAbGluayBDbG9zZVJlbGVhc2VkSXNzdWVzUGFyYW1zfS5cbiAqIEByZXR1cm5zIEEge0BsaW5rIFByb21pc2V9IHRoYXQgcmVzb2x2ZXMgdG8gdGhlIG51bWJlcnMgb2YgdGhlIGlzc3VlcyB0aGF0IGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjbG9zZVJlbGVhc2VkSXNzdWVzKHBhcmFtczogQ2xvc2VSZWxlYXNlZElzc3Vlc1BhcmFtcyk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgY29uc3QgeyBuZXdWZXJzaW9uIH0gPSBwYXJhbXM7XG4gIGNvbnN0IHJlcG9VcmwgPSBhd2FpdCBleGVjRnJvbVJvb3QoJ2doIHJlcG8gdmlldyAtLWpzb24gdXJsIC1xIC51cmwnLCB7IGlzUXVpZXQ6IHRydWUgfSk7XG4gIGNvbnN0IHJlcG9TbHVnID0gdG9SZXBvU2x1ZyhyZXBvVXJsKTtcbiAgaWYgKCFyZXBvU2x1Zykge1xuICAgIGNvbnNvbGUud2FybihgTm90IGNsb3NpbmcgdGhlIHJlbGVhc2VkIGlzc3VlczogJyR7cmVwb1VybH0nIGlzIG5vdCBhIEdpdEh1YiByZXBvc2l0b3J5IFVSTC5gKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBwcmV2aW91c1RhZyA9IGF3YWl0IGV4ZWNGcm9tUm9vdChbJ2dpdCcsICdkZXNjcmliZScsICctLXRhZ3MnLCAnLS1hYmJyZXY9MCcsIGAke25ld1ZlcnNpb259XmBdLCB7XG4gICAgaXNRdWlldDogdHJ1ZSxcbiAgICBzaG91bGRJZ25vcmVFeGl0Q29kZTogdHJ1ZVxuICB9KTtcbiAgY29uc3QgY29tbWl0UmFuZ2UgPSBwcmV2aW91c1RhZyA/IGAke3ByZXZpb3VzVGFnfS4uJHtuZXdWZXJzaW9ufWAgOiBuZXdWZXJzaW9uO1xuICBjb25zdCBjb21taXRNZXNzYWdlc1N0cmluZyA9IGF3YWl0IGV4ZWNGcm9tUm9vdChbJ2dpdCcsICdsb2cnLCBjb21taXRSYW5nZSwgJy0tZm9ybWF0PSVCJywgJy16J10sIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgY29uc3QgcmVmZXJlbmNlcyA9IGdldElzc3VlUmVmZXJlbmNlcyh7IGNvbW1pdE1lc3NhZ2VzOiBjb21taXRNZXNzYWdlc1N0cmluZy5zcGxpdCgnXFwwJyksIHJlcG9TbHVnIH0pO1xuICBjb25zdCByZWxlYXNlVXJsID0gYCR7cmVwb1VybH0vcmVsZWFzZXMvdGFnLyR7bmV3VmVyc2lvbn1gO1xuICBjb25zdCBmYWlsZWROdW1iZXJzOiBudW1iZXJbXSA9IFtdO1xuICBjb25zdCBsZWZ0T3BlbkxpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZXMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaXNzdWUgPSBKU09OLnBhcnNlKGF3YWl0IGV4ZWNGcm9tUm9vdChbJ2doJywgJ2FwaScsIGByZXBvcy8ke3JlcG9TbHVnfS9pc3N1ZXMvJHtTdHJpbmcocmVmZXJlbmNlLm51bWJlcil9YF0sIHsgaXNRdWlldDogdHJ1ZSB9KSkgYXMgR2l0SHViSXNzdWU7XG4gICAgICBpZiAoaXNzdWUucHVsbF9yZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbW1lbnQgPSBgJHtpc3N1ZS5sYWJlbHMuc29tZSgobGFiZWwpID0+IC9idWcvaS50ZXN0KGxhYmVsLm5hbWUpKSA/ICdGaXhlZCBpbicgOiAnSW1wbGVtZW50ZWQgaW4nfSAke3JlbGVhc2VVcmx9YDtcbiAgICAgIGNvbnN0IGlzT3BlbiA9IGlzc3VlLnN0YXRlID09PSAnb3Blbic7XG5cbiAgICAgIGlmICghcmVmZXJlbmNlLmlzQ2xvc2luZykge1xuICAgICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgICAgbGVmdE9wZW5MaW5lcy5wdXNoKGAgICMke1N0cmluZyhyZWZlcmVuY2UubnVtYmVyKX0gJHtpc3N1ZS50aXRsZX1gKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzT3Blbikge1xuICAgICAgICBhd2FpdCBleGVjRnJvbVJvb3QoWydnaCcsICdpc3N1ZScsICdjbG9zZScsIFN0cmluZyhyZWZlcmVuY2UubnVtYmVyKSwgJy1SJywgcmVwb1NsdWcsICctLXJlYXNvbicsICdjb21wbGV0ZWQnLCAnLS1jb21tZW50JywgY29tbWVudF0sIHtcbiAgICAgICAgICBpc1F1aWV0OiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zb2xlLndhcm4oYENsb3NlZCAjJHtTdHJpbmcocmVmZXJlbmNlLm51bWJlcil9ICR7aXNzdWUudGl0bGV9OiAke2NvbW1lbnR9YCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNzdWUuc3RhdGVfcmVhc29uICE9PSAnY29tcGxldGVkJyB8fCBhd2FpdCBoYXNDb21tZW50Q29udGFpbmluZyhyZXBvU2x1ZywgcmVmZXJlbmNlLm51bWJlciwgcmVsZWFzZVVybCkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IGV4ZWNGcm9tUm9vdChbJ2doJywgJ2lzc3VlJywgJ2NvbW1lbnQnLCBTdHJpbmcocmVmZXJlbmNlLm51bWJlciksICctUicsIHJlcG9TbHVnLCAnLS1ib2R5JywgY29tbWVudF0sIHsgaXNRdWlldDogdHJ1ZSB9KTtcbiAgICAgIGNvbnNvbGUud2FybihgQ29tbWVudGVkIG9uIHRoZSBhbHJlYWR5IGNsb3NlZCAjJHtTdHJpbmcocmVmZXJlbmNlLm51bWJlcil9ICR7aXNzdWUudGl0bGV9OiAke2NvbW1lbnR9YCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGZhaWxlZE51bWJlcnMucHVzaChyZWZlcmVuY2UubnVtYmVyKTtcbiAgICAgIGNvbnNvbGUud2FybihgQ291bGQgbm90IHByb2Nlc3MgaXNzdWUgIyR7U3RyaW5nKHJlZmVyZW5jZS5udW1iZXIpfSBvZiAke3JlcG9TbHVnfTogJHtlcnJvclRvU3RyaW5nKGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAobGVmdE9wZW5MaW5lcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYExlZnQgb3BlbjogdGhlIHJlbGVhc2UgbmFtZXMgdGhlc2UgaXNzdWVzIHdpdGhvdXQgYSBjbG9zaW5nIGtleXdvcmQsIHNvIHdoZXRoZXIgdGhleSBhcmUgZmluaXNoZWQgaXMgbm90IGtub3duIGhlcmU6XFxuJHtsZWZ0T3BlbkxpbmVzLmpvaW4oJ1xcbicpfWBcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGZhaWxlZE51bWJlcnM7XG59XG5cbi8qKlxuICogQ29sbGVjdHMgdGhlIGlzc3VlIG51bWJlcnMgb2Ygb25lIHJlcG9zaXRvcnkgdGhhdCBhIHNldCBvZiBjb21taXQgbWVzc2FnZXMgbmFtZXMsIGFuZCB3aGV0aGVyIGVhY2ggd2FzIG5hbWVkIHdpdGhcbiAqIGEgY2xvc2luZyBrZXl3b3JkLlxuICpcbiAqIFRocmVlIGZvcm1zIGNvdW50OiBhIGJhcmUgYCMxMmAsIGA8b3duZXI+LzxuYW1lPiMxMmAsIGFuZCB0aGUgcmVwb3NpdG9yeSdzIGBpc3N1ZXMvMTJgIG9yIGBwdWxsLzEyYCBVUkwuIEEgYmFyZVxuICogYCMxMmAgZ2x1ZWQgdG8gYSBwcmVjZWRpbmcgdG9rZW4gKGBvdGhlciMxMmAsIGBvdGhlci9yZXBvIzEyYCwgYCYjMTJgKSBkb2VzIG5vdC4gQSBtZW50aW9uIGlzIGNsb3Npbmcgd2hlblxuICogR2l0SHViJ3Mgb3duIGNsb3Npbmcga2V5d29yZCBwcmVjZWRlcyBpdCBkaXJlY3RseTogYGNsb3NlYCwgYGNsb3Nlc2AsIGBjbG9zZWRgLCBgZml4YCwgYGZpeGVzYCwgYGZpeGVkYCxcbiAqIGByZXNvbHZlYCwgYHJlc29sdmVzYCBvciBgcmVzb2x2ZWRgLCBpbiBhbnkgY2FzZSwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIGNvbG9uLlxuICpcbiAqIEBwYXJhbSBwYXJhbXMgLSBUaGUge0BsaW5rIEdldElzc3VlUmVmZXJlbmNlc1BhcmFtc30uXG4gKiBAcmV0dXJucyBUaGUgcmVmZXJlbmNlcywgc29ydGVkIGJ5IG51bWJlciwgb25lIHBlciBudW1iZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJc3N1ZVJlZmVyZW5jZXMocGFyYW1zOiBHZXRJc3N1ZVJlZmVyZW5jZXNQYXJhbXMpOiBJc3N1ZVJlZmVyZW5jZVtdIHtcbiAgY29uc3QgeyBjb21taXRNZXNzYWdlcywgcmVwb1NsdWcgfSA9IHBhcmFtcztcbiAgY29uc3QgZXNjYXBlZFNsdWcgPSBlc2NhcGVSZWdFeHAocmVwb1NsdWcpO1xuICBjb25zdCByZWdFeHAgPSBuZXcgUmVnRXhwKFxuICAgIFN0cmluZy5yYXdgKD88a2V5d29yZD5cXGIoPzpjbG9zZVtzZF0/fGZpeCg/OmVbc2RdKT98cmVzb2x2ZVtzZF0/KTo/XFxzKyk/KD86aHR0cHM/Oi8vZ2l0aHViXFwuY29tLyR7ZXNjYXBlZFNsdWd9Lyg/Omlzc3Vlc3xwdWxsKS8oPzx1cmxOdW1iZXI+XFxkKyl8KD88IVtcXHcuLV0pJHtlc2NhcGVkU2x1Z30jKD88c2x1Z051bWJlcj5cXGQrKVxcYnwoPzwhW1xcdy8mIy4tXSkjKD88YmFyZU51bWJlcj5cXGR7MSw2fSlcXGIpYCxcbiAgICAnZ2knXG4gICk7XG4gIGNvbnN0IGNsb3NpbmdGbGFnQnlOdW1iZXIgPSBuZXcgTWFwPG51bWJlciwgYm9vbGVhbj4oKTtcblxuICBmb3IgKGNvbnN0IGNvbW1pdE1lc3NhZ2Ugb2YgY29tbWl0TWVzc2FnZXMpIHtcbiAgICBmb3IgKGNvbnN0IG1hdGNoIG9mIGNvbW1pdE1lc3NhZ2UubWF0Y2hBbGwocmVnRXhwKSkge1xuICAgICAgY29uc3QgJG51bWJlciA9IE51bWJlcihcbiAgICAgICAgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAndXJsTnVtYmVyJykgPz8gZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAnc2x1Z051bWJlcicpID8/IGdldE9wdGlvbmFsTmFtZWRHcm91cChtYXRjaCwgJ2JhcmVOdW1iZXInKVxuICAgICAgKTtcbiAgICAgIGNsb3NpbmdGbGFnQnlOdW1iZXIuc2V0KCRudW1iZXIsIChjbG9zaW5nRmxhZ0J5TnVtYmVyLmdldCgkbnVtYmVyKSA/PyBmYWxzZSkgfHwgZ2V0T3B0aW9uYWxOYW1lZEdyb3VwKG1hdGNoLCAna2V5d29yZCcpICE9PSBudWxsKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmNsb3NpbmdGbGFnQnlOdW1iZXJdXG4gICAgLnNvcnQoKFtudW1iZXIxXSwgW251bWJlcjJdKSA9PiBudW1iZXIxIC0gbnVtYmVyMilcbiAgICAubWFwKChbJG51bWJlciwgaXNDbG9zaW5nXSkgPT4gKHsgaXNDbG9zaW5nLCBudW1iZXI6ICRudW1iZXIgfSkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYXNDb21tZW50Q29udGFpbmluZyhyZXBvU2x1Zzogc3RyaW5nLCBpc3N1ZU51bWJlcjogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgYm9kaWVzID0gYXdhaXQgZXhlY0Zyb21Sb290KFsnZ2gnLCAnYXBpJywgJy0tcGFnaW5hdGUnLCBgcmVwb3MvJHtyZXBvU2x1Z30vaXNzdWVzLyR7U3RyaW5nKGlzc3VlTnVtYmVyKX0vY29tbWVudHNgLCAnLS1qcScsICcuW10uYm9keSddLCB7XG4gICAgaXNRdWlldDogdHJ1ZVxuICB9KTtcbiAgcmV0dXJuIGJvZGllcy5pbmNsdWRlcyh0ZXh0KTtcbn1cblxuZnVuY3Rpb24gdG9SZXBvU2x1ZyhyZXBvVXJsOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgbWF0Y2ggPSAvXmh0dHBzOlxcL1xcL2dpdGh1YlxcLmNvbVxcLyg/PHNsdWc+W14vXStcXC9bXi9dKz8pXFwvPyQvLmV4ZWMocmVwb1VybCk7XG4gIHJldHVybiBtYXRjaD8uZ3JvdXBzPy5bJ3NsdWcnXSA/PyBudWxsO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW9CQSxTQUFTLHFCQUFxQjtBQUM5QjtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUVQLFNBQVMsb0JBQW9CO0FBZ0U3QixlQUFzQixvQkFBb0IsUUFBc0Q7QUFDOUYsUUFBTSxFQUFFLFdBQVcsSUFBSTtBQUN2QixRQUFNLFVBQVUsTUFBTSxhQUFhLG1DQUFtQyxFQUFFLFNBQVMsS0FBSyxDQUFDO0FBQ3ZGLFFBQU0sV0FBVyxXQUFXLE9BQU87QUFDbkMsTUFBSSxDQUFDLFVBQVU7QUFDYixZQUFRLEtBQUsscUNBQXFDLE9BQU8sbUNBQW1DO0FBQzVGLFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxRQUFNLGNBQWMsTUFBTSxhQUFhLENBQUMsT0FBTyxZQUFZLFVBQVUsY0FBYyxHQUFHLFVBQVUsR0FBRyxHQUFHO0FBQUEsSUFDcEcsU0FBUztBQUFBLElBQ1Qsc0JBQXNCO0FBQUEsRUFDeEIsQ0FBQztBQUNELFFBQU0sY0FBYyxjQUFjLEdBQUcsV0FBVyxLQUFLLFVBQVUsS0FBSztBQUNwRSxRQUFNLHVCQUF1QixNQUFNLGFBQWEsQ0FBQyxPQUFPLE9BQU8sYUFBYSxlQUFlLElBQUksR0FBRyxFQUFFLFNBQVMsS0FBSyxDQUFDO0FBQ25ILFFBQU0sYUFBYSxtQkFBbUIsRUFBRSxnQkFBZ0IscUJBQXFCLE1BQU0sSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUNwRyxRQUFNLGFBQWEsR0FBRyxPQUFPLGlCQUFpQixV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
@@ -238,8 +238,8 @@ function execOrThrow(dependencies, file, arguments_) {
238
238
  return result.output;
239
239
  }
240
240
  function findOpenPr(dependencies, branch) {
241
- const number = execOrThrow(dependencies, "gh", ["pr", "list", "--head", branch, "--state", "open", "--json", "number", "--jq", ".[0].number"]).trim();
242
- return number === "" || number === "null" ? null : number;
241
+ const $number = execOrThrow(dependencies, "gh", ["pr", "list", "--head", branch, "--state", "open", "--json", "number", "--jq", ".[0].number"]).trim();
242
+ return $number === "" || $number === "null" ? null : $number;
243
243
  }
244
244
  function isGitUpstream(entry) {
245
245
  return "repo" in entry;
@@ -291,4 +291,4 @@ export {
291
291
  syncUpstreams,
292
292
  writePin
293
293
  };
294
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Vwc3RyZWFtLXN5bmMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXYXRjaGVzIHRoZSB1cHN0cmVhbXMgYSByZXBvc2l0b3J5IG1pcnJvcnMgYW5kIG9wZW5zIG9uZSB1cGRhdGUgUFIgcGVyIHVwc3RyZWFtIHRoYXQgbW92ZWQuXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIGRyaXZlbiBieSBgdXBzdHJlYW1zLmpzb25gIGFuZCB0aGUgaGFuZGxlciBjb21tYW5kcyBpdCBuYW1lcywgc28gYW55IHJlcG9zaXRvcnkgdGhhdCB2ZW5kb3JzXG4gKiB1cHN0cmVhbSBjb2RlIGNhbiB1c2UgaXQ6IHRocm91Z2ggdGhlIGBzeW5jLXVwc3RyZWFtc2AgYmluLCBvciB0aGUgcmV1c2FibGUgYHN5bmMtdXBzdHJlYW1zLnltbGAgd29ya2Zsb3cuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWF0Y2hlc0dsb2IgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFdoYXQgYSBjb21tYW5kIHByaW50ZWQgYW5kIGhvdyBpdCBleGl0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdCB7XG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIG9uIGEgR2l0SHViIGJyYW5jaCBvciB0YWcsIHBpbm5lZCB0byBhIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgY29tbWl0OiB0aGUgbGFzdCB1cHN0cmVhbSBzdGF0ZSB0aGUgaGFuZGxlciB3YXMgcnVuIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBjb21taXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgdHVybnMgYSBuZXdlciB1cHN0cmVhbSBzdGF0ZSBpbnRvIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgd2F0Y2hlZCB1cHN0cmVhbSwgYXMgZ2xvYnMgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gQSBtb3ZlIHRoYXQgdG91Y2hlcyBub25lIG9mIHRoZW0gb3BlbnMgbm8gUFIuXG4gICAqL1xuICByZWFkb25seSBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIG9yIHRhZyBmb2xsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZjogc3RyaW5nO1xuICAvKipcbiAgICogYDxvd25lcj4vPHJlcG8+YCBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgaGFuZGxlcidzIHJlc3VsdC4gT3ZlcnJpZGVzIHRoZSBmaWxlJ3MgdG9wLWxldmVsIGB2ZXJpZnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIGFzIGFuIG5wbSBwYWNrYWdlJ3MgZGlzdC10YWcsIHBpbm5lZCB0byBhIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtVXBzdHJlYW1FbnRyeSB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5wbTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRpc3QtdGFnIGZvbGxvd2VkLiBgbGF0ZXN0YCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBpbm5lZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgdGhlIHN5bmMgZG9lcyB0byB0aGUgb3V0c2lkZSB3b3JsZCwgc28gYSB0ZXN0IGNhbiBzdGFuZCBhIGZpeHR1cmUgaW4gZm9yIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNEZXBlbmRlbmNpZXMge1xuICAvKipcbiAgICogUnVucyBhbiBleGVjdXRhYmxlIHdpdGggYXJndW1lbnRzIGFuZCBubyBzaGVsbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWM6IChmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdLCBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4gQ29tbWFuZFJlc3VsdDtcbiAgLyoqXG4gICAqIEdFVHMgYSBVUkwgYW5kIHBhcnNlcyB0aGUgSlNPTiBpdCByZXR1cm5zLCB0aHJvd2luZyBvbiBhbiBIVFRQIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hKc29uOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRvbmx5IGxvZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgc2hlbGw6IGEgaGFuZGxlciBvciBhIHZlcmlmeSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGw6IChjb21tYW5kOiBzdHJpbmcsIGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSA9PiBDb21tYW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBQUiBhbiB1cHN0cmVhbSBtb3ZlIGFza3MgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNQbGFuIHtcbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1czogVXBzdHJlYW1TdGF0dXM7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBoYXBwZW5lZCB0byBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBjaGVja2luZyBvciBhcHBseWluZyB0aHJldzogdGhlIGpvYiByZXBvcnRzIGl0IGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgcGxhbm5lZGAgaW4gYSBkcnkgcnVuLCBgb3BlbmVkYC9gdXBkYXRlZGAgd2hlbiBhIFBSIHdhcyBwdXNoZWQsIGB1bmNoYW5nZWRgIHdoZW4gdGhlIGJyYW5jaCBhbHJlYWR5IGhlbGQgdGhpcyByZXN1bHQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiAnY3VycmVudCcgfCAnZXJyb3InIHwgJ29wZW5lZCcgfCAncGxhbm5lZCcgfCAndW5jaGFuZ2VkJyB8ICd1bndhdGNoZWQnIHwgJ3VwZGF0ZWQnO1xuICByZWFkb25seSBwck51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzeW5jVXBzdHJlYW1zfSBzeW5jcywgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW5jVXBzdHJlYW1zT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIGVhY2ggUFIgdGFyZ2V0cyBhbmQgZWFjaCB1cGRhdGUgYnJhbmNoIGlzIGN1dCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gYHVwc3RyZWFtcy5qc29uYCwgd2hpY2ggdGhlIHN5bmMgdXBkYXRlcyB0aGUgcGluIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGxhbiBhbmQgcHJpbnQgZXZlcnkgUFIsIGFuZCBjaGFuZ2Ugbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9ubHkgdGhlIGVudHJpZXMgd2l0aCB0aGVzZSBuYW1lcywgb3IgZXZlcnkgZW50cnkgd2hlbiBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IG9ubHk6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSB1cHN0cmVhbSB0aGF0IGB1cHN0cmVhbXMuanNvbmAgbGlzdHM6IGEgZ2l0IG9uZSBvciBhbiBucG0gb25lLlxuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbUVudHJ5ID0gR2l0VXBzdHJlYW1FbnRyeSB8IE5wbVVwc3RyZWFtRW50cnk7XG5cbi8qKlxuICogVGhlIGNvbnRlbnQgb2YgYHVwc3RyZWFtcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHN0cmVhbXNDb25maWcge1xuICByZWFkb25seSB1cHN0cmVhbXM6IHJlYWRvbmx5IFVwc3RyZWFtRW50cnlbXTtcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgY2hlY2tzIGV2ZXJ5IGhhbmRsZXIncyByZXN1bHQsIHVubGVzcyBhbiBlbnRyeSBuYW1lcyBpdHMgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgb25lIGNvbXBhcmlzb24gb2YgYW4gZW50cnkgd2l0aCBpdHMgdXBzdHJlYW0gZm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzdHJlYW1TdGF0dXMge1xuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIHBhdGhzIHRoYXQgY2hhbmdlZCBhbmQgYXJlIHdhdGNoZWQsIHNvcnRlZC4gQWx3YXlzIGVtcHR5IGZvciBhbiBucG0gdXBzdHJlYW0uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VkUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQSBsaW5rIHRoYXQgc2hvd3Mgd2hhdCBjaGFuZ2VkIGJldHdlZW4gdGhlIHBpbiBhbmQgdGhlIGhlYWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXJlVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudHJ5OiBVcHN0cmVhbUVudHJ5O1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBvciB2ZXJzaW9uIHRoZSB1cHN0cmVhbSBpcyBhdCBub3cuXG4gICAqL1xuICByZWFkb25seSBoZWFkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG9yIHZlcnNpb24gYHVwc3RyZWFtcy5qc29uYCByZWNvcmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGluOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgY3VycmVudGA6IG5vdGhpbmcgdG8gZG8uIGBtb3ZlZGA6IGEgUFIgaXMgZHVlLiBgdW53YXRjaGVkYDogdXBzdHJlYW0gbW92ZWQsIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiAnY3VycmVudCcgfCAnbW92ZWQnIHwgJ3Vud2F0Y2hlZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEdpdEh1YiB0cnVuY2F0ZWQgdGhlIGNvbXBhcmUncyBmaWxlIGxpc3QsIHNvIGEgd2F0Y2hlZCBwYXRoIG1heSBiZSBtaXNzaW5nIGZyb20gYGNoYW5nZWRQYXRoc2AuXG4gICAqL1xuICByZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBHaXRIdWJDb21taXQge1xuICByZWFkb25seSBzaGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YkNvbXBhcmUge1xuICByZWFkb25seSBmaWxlcz86IHJlYWRvbmx5IEdpdEh1YkNvbXBhcmVGaWxlW107XG59XG5cbi8qKlxuICogT25lIGZpbGUgb2YgYSBHaXRIdWIgY29tcGFyZSwgYXMgdGhlIEFQSSBzcGVsbHMgaXQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJDb21wYXJlRmlsZSB7XG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgcHJldmlvdXNfZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOcG1QYWNrdW1lbnQge1xuICByZWFkb25seSAnZGlzdC10YWdzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBSZXN1bHQge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdDogQ29tbWFuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxlciBhbmQgdmVyaWZ5IHJ1bnMgYSBQUiBib2R5IHJlcG9ydHMuXG4gKi9cbmludGVyZmFjZSBTdGVwUmVzdWx0cyB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IFN0ZXBSZXN1bHQ7XG4gIHJlYWRvbmx5IHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQ7XG59XG5cbi8qKlxuICogYHVwc3RyZWFtcy5qc29uYCByZWFkIGxvb3NlbHksIHRvIHdyaXRlIG9uZSB2YWx1ZSBiYWNrIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgcmVzdC5cbiAqL1xuaW50ZXJmYWNlIFVwc3RyZWFtc0ZpbGVTaGFwZSB7XG4gIHJlYWRvbmx5IHVwc3RyZWFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBHaXRIdWIncyBjb21wYXJlIEFQSSBsaXN0cyBhdCBtb3N0IHRoaXMgbWFueSBmaWxlcywgYW5kIHNheXMgbm90aGluZyB3aGVuIGl0IHN0b3BzLlxuICovXG5jb25zdCBDT01QQVJFX0ZJTEVfTElNSVQgPSAzMDA7XG5cbmNvbnN0IFNIT1JUX1NIQV9MRU5HVEggPSAxMjtcblxuLyoqXG4gKiBUaGUgdGFpbCBvZiBhIGNvbW1hbmQncyBvdXRwdXQgYSBQUiBib2R5IHF1b3RlczogZW5vdWdoIHRvIHJlYWQgYSBmYWlsdXJlLCBzaG9ydCBlbm91Z2ggdG8gc3RheSB1bmRlciBHaXRIdWIncyBib2R5IGxpbWl0LlxuICovXG5jb25zdCBPVVRQVVRfVEFJTF9MSU5FUyA9IDYwO1xuXG4vKipcbiAqIFRoZSBtb3N0IGxpbmVzIHRoYXQgcmVwb3J0IGEgZmFpbHVyZSBhIGZhaWxlZCBzdGVwJ3Mgc2VjdGlvbiBvcGVucyB3aXRoLCBhaGVhZCBvZiBpdHMgb3V0cHV0IHRhaWwuXG4gKi9cbmNvbnN0IEZBSUxVUkVfTElORV9MSU1JVCA9IDIwO1xuXG5jb25zdCBKU09OX0lOREVOVF9TUEFDRVMgPSAyO1xuXG4vKipcbiAqIFRoZSBFU0MgdGhhdCBvcGVucyBhIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UsIGVpdGhlciBhcyB0aGUgYnl0ZSBvciBhcyB0aGUgY2FyZXQgdGV4dCBgXltgIGEgbG9nIHZpZXdlciBvciBhblxuICogZWFybGllciBjb3B5IHR1cm5lZCBpdCBpbnRvLiBCb3RoIHJlYWNoZWQgYSBQUiBib2R5OiBjcmVhdGUtb2JzaWRpYW4tcGx1Z2luIzIgY2FycmllZCB0aGUgY2FyZXQgZm9ybS5cbiAqL1xuY29uc3QgRVNDID0gU3RyaW5nLnJhd2AoPzpcXHUwMDFCfFxcXlxcWylgO1xuXG4vKipcbiAqIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciBzZXF1ZW5jZXMgKGNvbG9ycywgY3Vyc29yIG1vdmVzKSwgT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kIHNlcXVlbmNlcyAoaHlwZXJsaW5rcyxcbiAqIHRpdGxlcywgZW5kZWQgYnkgQkVMIG9yIFNULCBhbHNvIGFzIGBeR2ApLCBhbmQgdGhlIHR3by1jaGFyYWN0ZXIgZXNjYXBlcy4gQSB0d28tY2hhcmFjdGVyIGVzY2FwZSBpcyBtYXRjaGVkIG9ubHkgYXNcbiAqIHRoZSBieXRlLCBiZWNhdXNlIGl0cyBjYXJldCB0ZXh0IGFsc28gc3BlbGxzIGFuIG9yZGluYXJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiwgc3VjaCBhcyBgXltBLVpdYC5cbiAqL1xuY29uc3QgVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQID0gbmV3IFJlZ0V4cChcbiAgU3RyaW5nLnJhd2Ake0VTQ31cXFtbMC0/XSpbIC0vXSpbQC1+XXwke0VTQ31cXF1bXlxcdTAwMDdcXHUwMDFCXl0qKD86XFx1MDAwN3xcXF5HfCR7RVNDfVxcXFwpfFxcdTAwMUJbQC1aXFxcXC1fXWAsXG4gICdnJ1xuKTtcblxuLyoqXG4gKiBBIGxpbmUgdGhhdCByZXBvcnRzIGEgZmFpbHVyZSwgd2hpY2ggYSBmYWlsZWQgc3RlcCdzIHNlY3Rpb24gcXVvdGVzIGZpcnN0LCBiZWNhdXNlIHRoZSB0YWlsIG1heSBiZSBhIGdyZWVuIHRlc3QgcnVuXG4gKiB0aGF0IGZpbmlzaGVkIGFmdGVyIGl0LlxuICovXG5jb25zdCBGQUlMVVJFX0xJTkVfUkVHX0VYUCA9IC9zdGVwLWZhaWxlZHxcXGJmYWlsKD86c3xlZHx1cmV8aW5nKT9cXGJ8XFxiZXJyb3JcXGJ8XFxibm90IGZvdW5kXFxifFxcYkVSUiF8W1x1MjcxN1x1MDBEN10vaTtcblxuLyoqXG4gKiBXcml0ZXMgdGhlIFBSIGJvZHkuXG4gKlxuICogQHBhcmFtIHBsYW4gLSBUaGUgcGxhbi5cbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBoYW5kbGVyIGFuZCB2ZXJpZnkgcnVucywgb3IgYG51bGxgIGluIGEgZHJ5IHJ1biwgd2hlcmUgbmVpdGhlciBydW5zLlxuICogQHBhcmFtIGRpZmZTdGF0IC0gYGdpdCBkaWZmIC0tc3RhdGAgb2YgdGhlIHVwZGF0ZSBjb21taXQsIG9yIGBudWxsYCBpbiBhIGRyeSBydW4uXG4gKiBAcmV0dXJucyBUaGUgYm9keSwgaW4gTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByQm9keShwbGFuOiBTeW5jUGxhbiwgc3RlcHM6IG51bGwgfCBTdGVwUmVzdWx0cywgZGlmZlN0YXQ6IG51bGwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB7IGVudHJ5LCBoZWFkLCBwaW4gfSA9IHBsYW4uc3RhdHVzO1xuICBjb25zdCBzb3VyY2UgPSBpc0dpdFVwc3RyZWFtKGVudHJ5KSA/IGBcXGAke2VudHJ5LnJlcG99QCR7ZW50cnkucmVmfVxcYGAgOiBgbnBtIFxcYCR7ZW50cnkubnBtfUAke2VudHJ5LnRhZyA/PyAnbGF0ZXN0J31cXGBgO1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgVXBzdHJlYW0gXFxgJHtlbnRyeS5uYW1lfVxcYCBtb3ZlZDogJHtzb3VyY2V9IGZyb20gXFxgJHtwaW59XFxgIHRvIFxcYCR7aGVhZH1cXGAuYCxcbiAgICAnJyxcbiAgICBgQ29tcGFyZTogJHtwbGFuLnN0YXR1cy5jb21wYXJlVXJsfWAsXG4gICAgJydcbiAgXTtcblxuICBpZiAoaXNHaXRVcHN0cmVhbShlbnRyeSkpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgQ2hhbmdlZCB1cHN0cmVhbSBmaWxlcycsICcnLCAuLi5wbGFuLnN0YXR1cy5jaGFuZ2VkUGF0aHMubWFwKChwYXRoKSA9PiBgLSBcXGAke3BhdGh9XFxgYCkpO1xuICAgIGlmIChwbGFuLnN0YXR1cy50cnVuY2F0ZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gR2l0SHViIGxpc3RzIGF0IG1vc3QgJHtTdHJpbmcoQ09NUEFSRV9GSUxFX0xJTUlUKX0gZmlsZXM6IG9wZW4gdGhlIGNvbXBhcmUgbGluayBmb3IgdGhlIHJlc3QuYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgaWYgKHN0ZXBzID09PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEhhbmRsZXInLCAnJywgYFxcYCR7ZW50cnkuaGFuZGxlcn1cXGA6IG5vdCBydW4gKGRyeSBydW4pLmAsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnSGFuZGxlcicsIHN0ZXBzLmhhbmRsZXIpKTtcbiAgICBpZiAoc3RlcHMudmVyaWZ5ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnVmVyaWZ5Jywgc3RlcHMudmVyaWZ5KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpZmZTdGF0ICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEdlbmVyYXRlZCBjaGFuZ2VzJywgJycsICdgYGB0ZXh0JywgY2xlYW5Db21tYW5kT3V0cHV0KGRpZmZTdGF0KS50cmltRW5kKCksICdgYGAnLCAnJyk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCdUaGlzIFBSIHdhcyBvcGVuZWQgYnkgdGhlIHVwc3RyZWFtLXN5bmMgam9iIGFuZCBpcyBuZXZlciBtZXJnZWQgYXV0b21hdGljYWxseS4nKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbi8qKlxuICogVHVybnMgYSBjb21tYW5kJ3MgY2FwdHVyZWQgb3V0cHV0IGludG8gcGxhaW4gdGV4dCBhIFBSIGJvZHkgY2FuIHF1b3RlOiB0ZXJtaW5hbCBjb250cm9sIHNlcXVlbmNlcyBhcmUgcmVtb3ZlZCxcbiAqIHdoZXRoZXIgdGhleSBhcnJpdmVkIGFzIEVTQyBieXRlcyBvciBhcyB0aGVpciBjYXJldC1yZW5kZXJlZCBgXltbLi4ubWAgdGV4dCwgYW5kIGEgbGluZSBhIHByb2dyZXNzIGRpc3BsYXkgcmV3cm90ZVxuICogd2l0aCBgXFxyYCBrZWVwcyBvbmx5IGl0cyBsYXN0IHN0YXRlLlxuICpcbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgY2FwdHVyZWQgb3V0cHV0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNvbW1hbmRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gb3V0cHV0XG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQLCAnJylcbiAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHRvTGFzdExpbmVTdGF0ZShsaW5lKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgb25lIGVudHJ5IHdpdGggaXRzIHVwc3RyZWFtLlxuICpcbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgb3V0c2lkZSB3b3JsZC5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIGNvbXBhcmlzb24gZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBkZXBlbmRlbmNpZXM6IFBpY2s8U3luY0RlcGVuZGVuY2llcywgJ2ZldGNoSnNvbic+KTogUHJvbWlzZTxVcHN0cmVhbVN0YXR1cz4ge1xuICBpZiAoIWlzR2l0VXBzdHJlYW0oZW50cnkpKSB7XG4gICAgY29uc3QgdGFnID0gZW50cnkudGFnID8/ICdsYXRlc3QnO1xuICAgIGNvbnN0IHBhY2t1bWVudCA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7ZW50cnkubnBtLnJlcGxhY2UoJy8nLCAnJTJmJyl9YCkgYXMgTnBtUGFja3VtZW50O1xuICAgIGNvbnN0IGhlYWQgPSBwYWNrdW1lbnRbJ2Rpc3QtdGFncyddW3RhZ107XG4gICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBucG0gcGFja2FnZSAke2VudHJ5Lm5wbX0gaGFzIG5vIGRpc3QtdGFnIFwiJHt0YWd9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VkUGF0aHM6IFtdLFxuICAgICAgY29tcGFyZVVybDogYGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlLyR7ZW50cnkubnBtfS92LyR7aGVhZH1gLFxuICAgICAgZW50cnksXG4gICAgICBoZWFkLFxuICAgICAgcGluOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgc3RhdGU6IGhlYWQgPT09IGVudHJ5LnZlcnNpb24gPyAnY3VycmVudCcgOiAnbW92ZWQnLFxuICAgICAgdHJ1bmNhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21taXQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuZmV0Y2hKc29uKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7ZW50cnkucmVwb30vY29tbWl0cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbnRyeS5yZWYpfWApIGFzIEdpdEh1YkNvbW1pdDtcbiAgY29uc3QgaGVhZCA9IGNvbW1pdC5zaGE7XG4gIGNvbnN0IGNvbXBhcmVVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vY29tcGFyZS8ke2VudHJ5LmNvbW1pdH0uLi4ke2hlYWR9YDtcbiAgaWYgKGhlYWQgPT09IGVudHJ5LmNvbW1pdCkge1xuICAgIHJldHVybiB7IGNoYW5nZWRQYXRoczogW10sIGNvbXBhcmVVcmwsIGVudHJ5LCBoZWFkLCBwaW46IGVudHJ5LmNvbW1pdCwgc3RhdGU6ICdjdXJyZW50JywgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgY29tcGFyZSA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9jb21wYXJlLyR7ZW50cnkuY29tbWl0fS4uLiR7aGVhZH1gKSBhcyBHaXRIdWJDb21wYXJlO1xuICBjb25zdCBmaWxlcyA9IGNvbXBhcmUuZmlsZXMgPz8gW107XG4gIGNvbnN0IHRvdWNoZWQgPSBuZXcgU2V0KGZpbGVzLmZsYXRNYXAoKGZpbGUpID0+IGZpbGUucHJldmlvdXNfZmlsZW5hbWUgPT09IHVuZGVmaW5lZCA/IFtmaWxlLmZpbGVuYW1lXSA6IFtmaWxlLmZpbGVuYW1lLCBmaWxlLnByZXZpb3VzX2ZpbGVuYW1lXSkpO1xuICBjb25zdCBjaGFuZ2VkUGF0aHMgPSBbLi4udG91Y2hlZF0uZmlsdGVyKChwYXRoKSA9PiBlbnRyeS5wYXRocy5zb21lKChnbG9iKSA9PiBtYXRjaGVzR2xvYihwYXRoLCBnbG9iKSkpLnNvcnQoKTtcbiAgY29uc3QgaXNUcnVuY2F0ZWQgPSBmaWxlcy5sZW5ndGggPj0gQ09NUEFSRV9GSUxFX0xJTUlUO1xuICByZXR1cm4ge1xuICAgIGNoYW5nZWRQYXRocyxcbiAgICBjb21wYXJlVXJsLFxuICAgIGVudHJ5LFxuICAgIGhlYWQsXG4gICAgcGluOiBlbnRyeS5jb21taXQsXG4gICAgc3RhdGU6IGNoYW5nZWRQYXRocy5sZW5ndGggPiAwIHx8IGlzVHJ1bmNhdGVkID8gJ21vdmVkJyA6ICd1bndhdGNoZWQnLFxuICAgIHRydW5jYXRlZDogaXNUcnVuY2F0ZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhbiBgdXBzdHJlYW1zLmpzb25gLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIGZpbGUncyBjb250ZW50LlxuICogQHJldHVybnMgVGhlIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBzdHJlYW1zQ29uZmlnKHRleHQ6IHN0cmluZyk6IFVwc3RyZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGV4dCkgYXMgUGFydGlhbDxVcHN0cmVhbXNDb25maWc+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnVwc3RyZWFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1cHN0cmVhbXMuanNvbiBoYXMgbm8gXCJ1cHN0cmVhbXNcIiBhcnJheS4nKTtcbiAgfVxuICAvLyBSZWFkIHRocm91Z2ggYFJlZmxlY3QuZ2V0YCwgYmVjYXVzZSBub3RoaW5nIGFib3V0IHRoZSBwYXJzZWQgZW50cmllcyBpcyBrbm93biB5ZXQuXG4gIGNvbnN0IGVudHJpZXM6IHJlYWRvbmx5IG9iamVjdFtdID0gY29uZmlnLnVwc3RyZWFtcztcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5hbWU6IHVua25vd24gPSBSZWZsZWN0LmdldChlbnRyeSwgJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IGBcIiR7bmFtZX1cImAgOiAnd2l0aCBubyBuYW1lJztcbiAgICBjb25zdCBpc0dpdCA9ICdyZXBvJyBpbiBlbnRyeTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGlzR2l0ID8gWyduYW1lJywgJ3JlcG8nLCAncmVmJywgJ2NvbW1pdCcsICdoYW5kbGVyJ10gOiBbJ25hbWUnLCAnbnBtJywgJ3ZlcnNpb24nLCAnaGFuZGxlciddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QuZ2V0KGVudHJ5LCBrZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1cHN0cmVhbXMuanNvbjogZW50cnkgJHtsYWJlbH0gbmVlZHMgYSBzdHJpbmcgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzR2l0ICYmICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGVudHJ5LCAncGF0aHMnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb246IGVudHJ5ICR7bGFiZWx9IG5lZWRzIGEgXCJwYXRoc1wiIGFycmF5LmApO1xuICAgIH1cbiAgICBpZiAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uOiB0aGUgbmFtZSAke2xhYmVsfSBpcyB1c2VkIHR3aWNlLmApO1xuICAgIH1cbiAgICBuYW1lcy5hZGQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZyBhcyBVcHN0cmVhbXNDb25maWc7XG59XG5cbi8qKlxuICogUGxhbnMgdGhlIFBSIGEgbW92ZWQgdXBzdHJlYW0gYXNrcyBmb3IuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBjb21wYXJpc29uIG9mIGEgbW92ZWQgZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgYnJhbmNoIGFuZCB0aXRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYW5TeW5jKHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiBTeW5jUGxhbiB7XG4gIHJldHVybiB7XG4gICAgYnJhbmNoOiBgdXBzdHJlYW0vJHtzdGF0dXMuZW50cnkubmFtZX1gLFxuICAgIHN0YXR1cyxcbiAgICB0aXRsZTogYGNob3JlKHVwc3RyZWFtKTogc3luYyAke3N0YXR1cy5lbnRyeS5uYW1lfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgZXZlcnkgZW50cnksIGFuZCBvcGVucyBvciB1cGRhdGVzIG9uZSBQUiBwZXIgbW92ZWQgdXBzdHJlYW0uXG4gKlxuICogQSBoYW5kbGVyIG9yIHZlcmlmeSBmYWlsdXJlIHN0aWxsIG9wZW5zIHRoZSBQUiwgYXMgYSBkcmFmdCB3aXRoIHRoZSBmYWlsdXJlIGluIGl0cyBib2R5LCBzbyBhIGJyZWFraW5nIHVwc3RyZWFtIGNoYW5nZVxuICogaXMgc2VlbiByYXRoZXIgdGhhbiBza2lwcGVkLiBBbiBlcnJvciBpbiB0aGUgc3luYyBpdHNlbGYsIHN1Y2ggYXMgYSBmYWlsZWQgQVBJIGNhbGwsIGlzIHJlcG9ydGVkIGluIHRoZSBlbnRyeSdzIHJlc3VsdFxuICogYW5kIHRoZSBuZXh0IGVudHJ5IHN0aWxsIHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBXaGF0IHRvIHN5bmMsIGFuZCBob3cuXG4gKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIG91dHNpZGUgd29ybGQuXG4gKiBAcmV0dXJucyBPbmUgcmVzdWx0IHBlciBlbnRyeSBjaGVja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1Vwc3RyZWFtcyhvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogUHJvbWlzZTxTeW5jUmVzdWx0W10+IHtcbiAgY29uc3QgY29uZmlnID0gcGFyc2VVcHN0cmVhbXNDb25maWcocmVhZEZpbGVTeW5jKG9wdGlvbnMuY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICBjb25zdCB1bmtub3duID0gb3B0aW9ucy5vbmx5LmZpbHRlcigobmFtZSkgPT4gY29uZmlnLnVwc3RyZWFtcy5ldmVyeSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpKTtcbiAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb24gaGFzIG5vIGVudHJ5IG5hbWVkICR7dW5rbm93bi5tYXAoKG5hbWUpID0+IGBcIiR7bmFtZX1cImApLmpvaW4oJywgJyl9LmApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0czogU3luY1Jlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgY29uZmlnLnVwc3RyZWFtcykge1xuICAgIGlmIChvcHRpb25zLm9ubHkubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5vbmx5LmluY2x1ZGVzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCBzeW5jRW50cnkoZW50cnksIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBFUlJPUiAke21lc3NhZ2V9YCk7XG4gICAgICByZXN1bHRzLnB1c2goeyBlcnJvcjogbWVzc2FnZSwgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogUmVjb3JkcyBgaGVhZGAgYXMgdGhlIGVudHJ5J3MgcGluIGluIGB1cHN0cmVhbXMuanNvbmAsIHVubGVzcyB0aGUgaGFuZGxlciBhbHJlYWR5IG1vdmVkIGl0LCBrZWVwaW5nIHRoZSBmaWxlJ3NcbiAqIGtleSBvcmRlciBhbmQgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnUGF0aCAtIFRoZSBwYXRoIHRvIGB1cHN0cmVhbXMuanNvbmAuXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIGNvbXBhcmlzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBpbihjb25maWdQYXRoOiBzdHJpbmcsIHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiB2b2lkIHtcbiAgY29uc3QgdGV4dCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyBVcHN0cmVhbXNGaWxlU2hhcGU7XG4gIGNvbnN0IGtleSA9IGlzR2l0VXBzdHJlYW0oc3RhdHVzLmVudHJ5KSA/ICdjb21taXQnIDogJ3ZlcnNpb24nO1xuICBjb25zdCB0YXJnZXQgPSBwYXJzZWQudXBzdHJlYW1zLmZpbmQoKGVudHJ5KSA9PiBlbnRyeVsnbmFtZSddID09PSBzdGF0dXMuZW50cnkubmFtZSk7XG4gIGlmICh0YXJnZXQ/LltrZXldICE9PSBzdGF0dXMucGluKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRhcmdldFtrZXldID0gc3RhdHVzLmhlYWQ7XG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBKU09OX0lOREVOVF9TUEFDRVMpfVxcbmApO1xufVxuXG5mdW5jdGlvbiBhcHBseVBsYW4ocGxhbjogU3luY1BsYW4sIGNvbmZpZzogVXBzdHJlYW1zQ29uZmlnLCBvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogU3luY1Jlc3VsdCB7XG4gIGNvbnN0IHsgZW50cnkgfSA9IHBsYW4uc3RhdHVzO1xuICAvLyBObyBjb2xvcjogdGhlIG91dHB1dCBpcyBxdW90ZWQgaW4gYSBQUiBib2R5LCB3aGVyZSBhIGNvbG9yIGNvZGUgaXMgb25seSBub2lzZS4gYENJYCBpcyBsZWZ0IGFsb25lLCBiZWNhdXNlIGl0XG4gIC8vIGNoYW5nZXMgd2hhdCBzb21lIHRvb2xzIGRvLCBub3QganVzdCBob3cgdGhleSBwcmludC5cbiAgY29uc3QgZW52ID0geyBGT1JDRV9DT0xPUjogJzAnLCBOT19DT0xPUjogJzEnLCBVUFNUUkVBTV9OQU1FOiBlbnRyeS5uYW1lLCBVUFNUUkVBTV9UQVJHRVQ6IHBsYW4uc3RhdHVzLmhlYWQgfTtcbiAgY29uc3QgaGFuZGxlcjogU3RlcFJlc3VsdCA9IHsgY29tbWFuZDogZW50cnkuaGFuZGxlciwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwoZW50cnkuaGFuZGxlciwgZW52KSB9O1xuICB3cml0ZVBpbihvcHRpb25zLmNvbmZpZ1BhdGgsIHBsYW4uc3RhdHVzKTtcbiAgY29uc3QgdmVyaWZ5Q29tbWFuZCA9IGVudHJ5LnZlcmlmeSA/PyBjb25maWcudmVyaWZ5O1xuICBjb25zdCB2ZXJpZnk6IG51bGwgfCBTdGVwUmVzdWx0ID0gdmVyaWZ5Q29tbWFuZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHsgY29tbWFuZDogdmVyaWZ5Q29tbWFuZCwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwodmVyaWZ5Q29tbWFuZCwgZW52KSB9O1xuICBjb25zdCBpc0ZhaWxlZCA9IGhhbmRsZXIucmVzdWx0LmV4aXRDb2RlICE9PSAwIHx8ICh2ZXJpZnkgIT09IG51bGwgJiYgdmVyaWZ5LnJlc3VsdC5leGl0Q29kZSAhPT0gMCk7XG5cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydhZGQnLCAnLS1hbGwnXSk7XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnY29tbWl0JywgJy0tbm8tdmVyaWZ5JywgJy0tbWVzc2FnZScsIHBsYW4udGl0bGVdKTtcbiAgY29uc3QgZGlmZlN0YXQgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2RpZmYnLCAnLS1zdGF0JywgJ0hFQUR+MScsICdIRUFEJ10pO1xuXG4gIGNvbnN0IGJvZHkgPSBidWlsZFByQm9keShwbGFuLCB7IGhhbmRsZXIsIHZlcmlmeSB9LCBkaWZmU3RhdCk7XG4gIGNvbnN0IGlzUmVtb3RlQnJhbmNoID0gZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnbHMtcmVtb3RlJywgJy0tZXhpdC1jb2RlJywgJy0taGVhZHMnLCAnb3JpZ2luJywgcGxhbi5icmFuY2hdKS5leGl0Q29kZSA9PT0gMDtcbiAgaWYgKGlzUmVtb3RlQnJhbmNoKSB7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBwbGFuLmJyYW5jaF0pO1xuICAgIGlmIChkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydkaWZmJywgJy0tcXVpZXQnLCAnRkVUQ0hfSEVBRCcsICdIRUFEJ10pLmV4aXRDb2RlID09PSAwKSB7XG4gICAgICAvLyBUaGUgYm9keSBpcyBzdGlsbCByZXdyaXR0ZW4sIHNvIGEgY2hhbmdlIHRvIGhvdyBpdCBpcyB3cml0dGVuIHJlYWNoZXMgYSBQUiB3aG9zZSBicmFuY2ggaGFzIG5vdCBtb3ZlZC5cbiAgICAgIGNvbnN0IG9wZW4gPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICAgICAgaWYgKG9wZW4gIT09IG51bGwpIHtcbiAgICAgICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBvcGVuLCAnLS1ib2R5JywgYm9keV0pO1xuICAgICAgfVxuICAgICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogJHtwbGFuLmJyYW5jaH0gYWxyZWFkeSBob2xkcyB0aGlzIHJlc3VsdDsgbm90aGluZyBwdXNoZWQke29wZW4gPT09IG51bGwgPyAnJyA6IGAsIFBSICMke29wZW59J3MgYm9keSByZXdyaXR0ZW5gfS5gKTtcbiAgICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bmNoYW5nZWQnIH07XG4gICAgfVxuICB9XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsncHVzaCcsICctLWZvcmNlJywgJ29yaWdpbicsIGBIRUFEOnJlZnMvaGVhZHMvJHtwbGFuLmJyYW5jaH1gXSk7XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICBpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcbiAgICBjb25zdCBwck51bWJlciA9IE51bWJlcihleGlzdGluZyk7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBleGlzdGluZywgJy0tdGl0bGUnLCBwbGFuLnRpdGxlLCAnLS1ib2R5JywgYm9keV0pO1xuICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgaXNGYWlsZWQgPyBbJ3ByJywgJ3JlYWR5JywgZXhpc3RpbmcsICctLXVuZG8nXSA6IFsncHInLCAncmVhZHknLCBleGlzdGluZ10pO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IHVwZGF0ZWQgUFIgIyR7ZXhpc3Rpbmd9JHtpc0ZhaWxlZCA/ICcgKGRyYWZ0OiBhIHN0ZXAgZmFpbGVkKScgOiAnJ30uYCk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3VwZGF0ZWQnLCBwck51bWJlciB9O1xuICB9XG5cbiAgY29uc3QgdXJsID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbXG4gICAgJ3ByJyxcbiAgICAnY3JlYXRlJyxcbiAgICAnLS1iYXNlJyxcbiAgICBvcHRpb25zLmJhc2VCcmFuY2gsXG4gICAgJy0taGVhZCcsXG4gICAgcGxhbi5icmFuY2gsXG4gICAgJy0tdGl0bGUnLFxuICAgIHBsYW4udGl0bGUsXG4gICAgJy0tYm9keScsXG4gICAgYm9keSxcbiAgICAuLi4oaXNGYWlsZWQgPyBbJy0tZHJhZnQnXSA6IFtdKVxuICBdKS50cmltKCk7XG4gIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG9wZW5lZCAke3VybH0ke2lzRmFpbGVkID8gJyAoZHJhZnQ6IGEgc3RlcCBmYWlsZWQpJyA6ICcnfS5gKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBOdW1iZXIoL1xcL3B1bGxcXC8oPzxOdW1iZXI+XFxkKykvLmV4ZWModXJsKT8uZ3JvdXBzPy5bJ051bWJlciddID8/IE5hTik7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocHJOdW1iZXIpID8geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJyB9IDogeyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJywgcHJOdW1iZXIgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVTdGVwKGhlYWRpbmc6IHN0cmluZywgc3RlcDogU3RlcFJlc3VsdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaXNQYXNzZWQgPSBzdGVwLnJlc3VsdC5leGl0Q29kZSA9PT0gMDtcbiAgY29uc3Qgb3V0cHV0TGluZXMgPSBjbGVhbkNvbW1hbmRPdXRwdXQoc3RlcC5yZXN1bHQub3V0cHV0KS50cmltRW5kKCkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0YWlsID0gb3V0cHV0TGluZXMuc2xpY2UoLU9VVFBVVF9UQUlMX0xJTkVTKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmFpbHVyZUxpbmVzID0gaXNQYXNzZWQgPyBbXSA6IG91dHB1dExpbmVzLmZpbHRlcigobGluZSkgPT4gRkFJTFVSRV9MSU5FX1JFR19FWFAudGVzdChsaW5lKSkuc2xpY2UoMCwgRkFJTFVSRV9MSU5FX0xJTUlUKTtcbiAgcmV0dXJuIFtcbiAgICBgIyMjICR7aGVhZGluZ31gLFxuICAgICcnLFxuICAgIGBcXGAke3N0ZXAuY29tbWFuZH1cXGA6ICR7aXNQYXNzZWQgPyAncGFzc2VkJyA6IGAqKkZBSUxFRCoqIChleGl0ICR7U3RyaW5nKHN0ZXAucmVzdWx0LmV4aXRDb2RlKX0pYH0uYCxcbiAgICAnJyxcbiAgICAuLi4oZmFpbHVyZUxpbmVzLmxlbmd0aCA9PT0gMCA/IFtdIDogWydMaW5lcyByZXBvcnRpbmcgdGhlIGZhaWx1cmU6JywgJycsICdgYGB0ZXh0JywgLi4uZmFpbHVyZUxpbmVzLCAnYGBgJywgJyddKSxcbiAgICBpc1Bhc3NlZCA/ICc8ZGV0YWlscz48c3VtbWFyeT5PdXRwdXQ8L3N1bW1hcnk+JyA6ICc8ZGV0YWlscyBvcGVuPjxzdW1tYXJ5Pk91dHB1dDwvc3VtbWFyeT4nLFxuICAgICcnLFxuICAgICdgYGB0ZXh0JyxcbiAgICB0YWlsLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgICc8L2RldGFpbHM+JyxcbiAgICAnJ1xuICBdO1xufVxuXG5mdW5jdGlvbiBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMsIGZpbGU6IHN0cmluZywgYXJndW1lbnRzXzogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBkZXBlbmRlbmNpZXMuZXhlYyhmaWxlLCBhcmd1bWVudHNfKTtcbiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWxlfSAke2FyZ3VtZW50c18uam9pbignICcpfSBmYWlsZWQgKGV4aXQgJHtTdHJpbmcocmVzdWx0LmV4aXRDb2RlKX0pOiAke3Jlc3VsdC5vdXRwdXQudHJpbSgpfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmaW5kT3BlblByKGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcywgYnJhbmNoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgbnVtYmVyID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2xpc3QnLCAnLS1oZWFkJywgYnJhbmNoLCAnLS1zdGF0ZScsICdvcGVuJywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcuWzBdLm51bWJlciddKS50cmltKCk7XG4gIHJldHVybiBudW1iZXIgPT09ICcnIHx8IG51bWJlciA9PT0gJ251bGwnID8gbnVsbCA6IG51bWJlcjtcbn1cblxuZnVuY3Rpb24gaXNHaXRVcHN0cmVhbShlbnRyeTogVXBzdHJlYW1FbnRyeSk6IGVudHJ5IGlzIEdpdFVwc3RyZWFtRW50cnkge1xuICByZXR1cm4gJ3JlcG8nIGluIGVudHJ5O1xufVxuXG5mdW5jdGlvbiBzaG9ydGVuKGhlYWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiAvXlswLTlhLWZdezQwfSQvLnRlc3QoaGVhZCkgPyBoZWFkLnNsaWNlKDAsIFNIT1JUX1NIQV9MRU5HVEgpIDogaGVhZDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3luY0VudHJ5KGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBjb25maWc6IFVwc3RyZWFtc0NvbmZpZywgb3B0aW9uczogU3luY1Vwc3RyZWFtc09wdGlvbnMsIGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcyk6IFByb21pc2U8U3luY1Jlc3VsdD4ge1xuICBjb25zdCBzdGF0dXMgPSBhd2FpdCBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5LCBkZXBlbmRlbmNpZXMpO1xuICBpZiAoc3RhdHVzLnN0YXRlID09PSAnY3VycmVudCcpIHtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBjdXJyZW50IGF0ICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdjdXJyZW50JyB9O1xuICB9XG4gIGlmIChzdGF0dXMuc3RhdGUgPT09ICd1bndhdGNoZWQnKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogbW92ZWQgdG8gJHtzaG9ydGVuKHN0YXR1cy5oZWFkKX0sIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZCBzaW5jZSAke3Nob3J0ZW4oc3RhdHVzLnBpbil9LmApO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bndhdGNoZWQnIH07XG4gIH1cblxuICBjb25zdCBwbGFuID0gcGxhblN5bmMoc3RhdHVzKTtcbiAgaWYgKG9wdGlvbnMuZHJ5UnVuKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogbW92ZWQgZnJvbSAke3Nob3J0ZW4oc3RhdHVzLnBpbil9IHRvICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LiBXb3VsZCBwdXNoICR7cGxhbi5icmFuY2h9IGFuZCBvcGVuOmApO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCAgdGl0bGU6ICR7cGxhbi50aXRsZX1gKTtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGJ1aWxkUHJCb2R5KHBsYW4sIG51bGwsIG51bGwpLnJlcGxhY2VBbGwoL14vZ20sICcgIHwgJykpO1xuICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICdwbGFubmVkJyB9O1xuICB9XG5cbiAgLy8gVGhlIHVwZGF0ZSBjb21taXQgdGFrZXMgZXZlcnkgZmlsZSBpbiB0aGUgdHJlZSwgc28gYSBmaWxlIGxlZnQgbHlpbmcgYXJvdW5kIHdvdWxkIGJlIHB1c2hlZCB3aXRoIGl0LlxuICBjb25zdCBkaXJ0eSA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnc3RhdHVzJywgJy0tcG9yY2VsYWluJ10pLnRyaW0oKTtcbiAgaWYgKGRpcnR5ICE9PSAnJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgdGhlIHdvcmtpbmcgdHJlZSBpcyBub3QgY2xlYW4sIGFuZCB0aGUgdXBkYXRlIGNvbW1pdCB3b3VsZCB0YWtlIHRoZXNlIGZpbGVzIHdpdGggaXQ6XFxuJHtkaXJ0eX1gKTtcbiAgfVxuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2ZldGNoJywgJ29yaWdpbicsIG9wdGlvbnMuYmFzZUJyYW5jaF0pO1xuICBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2NoZWNrb3V0JywgJy1CJywgcGxhbi5icmFuY2gsIGBvcmlnaW4vJHtvcHRpb25zLmJhc2VCcmFuY2h9YF0pO1xuICB0cnkge1xuICAgIHJldHVybiBhcHBseVBsYW4ocGxhbiwgY29uZmlnLCBvcHRpb25zLCBkZXBlbmRlbmNpZXMpO1xuICB9IGZpbmFsbHkge1xuICAgIGRlcGVuZGVuY2llcy5leGVjKCdnaXQnLCBbJ2NoZWNrb3V0JywgJy0tZm9yY2UnLCBvcHRpb25zLmJhc2VCcmFuY2hdKTtcbiAgICBkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydicmFuY2gnLCAnLS1kZWxldGUnLCAnLS1mb3JjZScsIHBsYW4uYnJhbmNoXSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9MYXN0TGluZVN0YXRlKGxpbmU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHN0YXRlcyA9IGxpbmUucmVwbGFjZSgvXFxyKyQvLCAnJyk7XG4gIHJldHVybiBzdGF0ZXMuc2xpY2Uoc3RhdGVzLmxhc3RJbmRleE9mKCdcXHInKSArIDEpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7QUFTQTtBQUFBLEVBQ0U7QUFBQSxFQUNBO0FBQUEsT0FDSztBQUNQLFNBQVMsbUJBQW1CO0FBMk41QixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLG1CQUFtQjtBQUt6QixNQUFNLG9CQUFvQjtBQUsxQixNQUFNLHFCQUFxQjtBQUUzQixNQUFNLHFCQUFxQjtBQU0zQixNQUFNLE1BQU0sT0FBTztBQU9uQixNQUFNLDJCQUEyQixJQUFJO0FBQUEsRUFDbkMsT0FBTyxNQUFNLEdBQUcsdUJBQXVCLEdBQUcsb0NBQW9DLEdBQUc7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
294
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL3Vwc3RyZWFtLXN5bmMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXYXRjaGVzIHRoZSB1cHN0cmVhbXMgYSByZXBvc2l0b3J5IG1pcnJvcnMgYW5kIG9wZW5zIG9uZSB1cGRhdGUgUFIgcGVyIHVwc3RyZWFtIHRoYXQgbW92ZWQuXG4gKlxuICogRXZlcnl0aGluZyBoZXJlIGlzIGRyaXZlbiBieSBgdXBzdHJlYW1zLmpzb25gIGFuZCB0aGUgaGFuZGxlciBjb21tYW5kcyBpdCBuYW1lcywgc28gYW55IHJlcG9zaXRvcnkgdGhhdCB2ZW5kb3JzXG4gKiB1cHN0cmVhbSBjb2RlIGNhbiB1c2UgaXQ6IHRocm91Z2ggdGhlIGBzeW5jLXVwc3RyZWFtc2AgYmluLCBvciB0aGUgcmV1c2FibGUgYHN5bmMtdXBzdHJlYW1zLnltbGAgd29ya2Zsb3cuXG4gKi9cblxuaW1wb3J0IHtcbiAgcmVhZEZpbGVTeW5jLFxuICB3cml0ZUZpbGVTeW5jXG59IGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0IHsgbWF0Y2hlc0dsb2IgfSBmcm9tICdub2RlOnBhdGgnO1xuXG4vKipcbiAqIFdoYXQgYSBjb21tYW5kIHByaW50ZWQgYW5kIGhvdyBpdCBleGl0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWFuZFJlc3VsdCB7XG4gIHJlYWRvbmx5IGV4aXRDb2RlOiBudW1iZXI7XG4gIHJlYWRvbmx5IG91dHB1dDogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIG9uIGEgR2l0SHViIGJyYW5jaCBvciB0YWcsIHBpbm5lZCB0byBhIGNvbW1pdC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgLyoqXG4gICAqIFRoZSBwaW5uZWQgY29tbWl0OiB0aGUgbGFzdCB1cHN0cmVhbSBzdGF0ZSB0aGUgaGFuZGxlciB3YXMgcnVuIGFnYWluc3QuXG4gICAqL1xuICByZWFkb25seSBjb21taXQ6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgdHVybnMgYSBuZXdlciB1cHN0cmVhbSBzdGF0ZSBpbnRvIGNoYW5nZXMgaW4gdGhpcyByZXBvc2l0b3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgaGFuZGxlcjogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgcGF0aHMgd2F0Y2hlZCB1cHN0cmVhbSwgYXMgZ2xvYnMgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC4gQSBtb3ZlIHRoYXQgdG91Y2hlcyBub25lIG9mIHRoZW0gb3BlbnMgbm8gUFIuXG4gICAqL1xuICByZWFkb25seSBwYXRoczogcmVhZG9ubHkgc3RyaW5nW107XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIG9yIHRhZyBmb2xsb3dlZC5cbiAgICovXG4gIHJlYWRvbmx5IHJlZjogc3RyaW5nO1xuICAvKipcbiAgICogYDxvd25lcj4vPHJlcG8+YCBvbiBHaXRIdWIuXG4gICAqL1xuICByZWFkb25seSByZXBvOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgc2hlbGwgY29tbWFuZCB0aGF0IGNoZWNrcyB0aGUgaGFuZGxlcidzIHJlc3VsdC4gT3ZlcnJpZGVzIHRoZSBmaWxlJ3MgdG9wLWxldmVsIGB2ZXJpZnlgLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEFuIHVwc3RyZWFtIGZvbGxvd2VkIGFzIGFuIG5wbSBwYWNrYWdlJ3MgZGlzdC10YWcsIHBpbm5lZCB0byBhIHZlcnNpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTnBtVXBzdHJlYW1FbnRyeSB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbmFtZS5cbiAgICovXG4gIHJlYWRvbmx5IG5wbTogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGRpc3QtdGFnIGZvbGxvd2VkLiBgbGF0ZXN0YCB3aGVuIGFic2VudC5cbiAgICovXG4gIHJlYWRvbmx5IHRhZz86IHN0cmluZztcbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBpbm5lZCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIEV2ZXJ5dGhpbmcgdGhlIHN5bmMgZG9lcyB0byB0aGUgb3V0c2lkZSB3b3JsZCwgc28gYSB0ZXN0IGNhbiBzdGFuZCBhIGZpeHR1cmUgaW4gZm9yIGl0LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNEZXBlbmRlbmNpZXMge1xuICAvKipcbiAgICogUnVucyBhbiBleGVjdXRhYmxlIHdpdGggYXJndW1lbnRzIGFuZCBubyBzaGVsbC5cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWM6IChmaWxlOiBzdHJpbmcsIGFyZ3VtZW50c186IHJlYWRvbmx5IHN0cmluZ1tdLCBlbnY/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PikgPT4gQ29tbWFuZFJlc3VsdDtcbiAgLyoqXG4gICAqIEdFVHMgYSBVUkwgYW5kIHBhcnNlcyB0aGUgSlNPTiBpdCByZXR1cm5zLCB0aHJvd2luZyBvbiBhbiBIVFRQIGVycm9yLlxuICAgKi9cbiAgcmVhZG9ubHkgZmV0Y2hKc29uOiAodXJsOiBzdHJpbmcpID0+IFByb21pc2U8dW5rbm93bj47XG4gIHJlYWRvbmx5IGxvZzogKHRleHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgLyoqXG4gICAqIFJ1bnMgYSBjb21tYW5kIGxpbmUgdGhyb3VnaCB0aGUgc2hlbGw6IGEgaGFuZGxlciBvciBhIHZlcmlmeSBjb21tYW5kLlxuICAgKi9cbiAgcmVhZG9ubHkgc2hlbGw6IChjb21tYW5kOiBzdHJpbmcsIGVudj86IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+KSA9PiBDb21tYW5kUmVzdWx0O1xufVxuXG4vKipcbiAqIFRoZSBQUiBhbiB1cHN0cmVhbSBtb3ZlIGFza3MgZm9yLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN5bmNQbGFuIHtcbiAgcmVhZG9ubHkgYnJhbmNoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YXR1czogVXBzdHJlYW1TdGF0dXM7XG4gIHJlYWRvbmx5IHRpdGxlOiBzdHJpbmc7XG59XG5cbi8qKlxuICogV2hhdCBoYXBwZW5lZCB0byBvbmUgZW50cnkuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3luY1Jlc3VsdCB7XG4gIC8qKlxuICAgKiBTZXQgd2hlbiBjaGVja2luZyBvciBhcHBseWluZyB0aHJldzogdGhlIGpvYiByZXBvcnRzIGl0IGFuZCBtb3ZlcyBvbiB0byB0aGUgbmV4dCBlbnRyeS5cbiAgICovXG4gIHJlYWRvbmx5IGVycm9yPzogc3RyaW5nO1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgcGxhbm5lZGAgaW4gYSBkcnkgcnVuLCBgb3BlbmVkYC9gdXBkYXRlZGAgd2hlbiBhIFBSIHdhcyBwdXNoZWQsIGB1bmNoYW5nZWRgIHdoZW4gdGhlIGJyYW5jaCBhbHJlYWR5IGhlbGQgdGhpcyByZXN1bHQuXG4gICAqL1xuICByZWFkb25seSBvdXRjb21lOiAnY3VycmVudCcgfCAnZXJyb3InIHwgJ29wZW5lZCcgfCAncGxhbm5lZCcgfCAndW5jaGFuZ2VkJyB8ICd1bndhdGNoZWQnIHwgJ3VwZGF0ZWQnO1xuICByZWFkb25seSBwck51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBXaGF0IHtAbGluayBzeW5jVXBzdHJlYW1zfSBzeW5jcywgYW5kIGhvdy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTeW5jVXBzdHJlYW1zT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgYnJhbmNoIGVhY2ggUFIgdGFyZ2V0cyBhbmQgZWFjaCB1cGRhdGUgYnJhbmNoIGlzIGN1dCBmcm9tLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUJyYW5jaDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHBhdGggdG8gYHVwc3RyZWFtcy5qc29uYCwgd2hpY2ggdGhlIHN5bmMgdXBkYXRlcyB0aGUgcGluIGluLlxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlnUGF0aDogc3RyaW5nO1xuICAvKipcbiAgICogUGxhbiBhbmQgcHJpbnQgZXZlcnkgUFIsIGFuZCBjaGFuZ2Ugbm90aGluZy5cbiAgICovXG4gIHJlYWRvbmx5IGRyeVJ1bjogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9ubHkgdGhlIGVudHJpZXMgd2l0aCB0aGVzZSBuYW1lcywgb3IgZXZlcnkgZW50cnkgd2hlbiBlbXB0eS5cbiAgICovXG4gIHJlYWRvbmx5IG9ubHk6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIE9uZSB1cHN0cmVhbSB0aGF0IGB1cHN0cmVhbXMuanNvbmAgbGlzdHM6IGEgZ2l0IG9uZSBvciBhbiBucG0gb25lLlxuICovXG5leHBvcnQgdHlwZSBVcHN0cmVhbUVudHJ5ID0gR2l0VXBzdHJlYW1FbnRyeSB8IE5wbVVwc3RyZWFtRW50cnk7XG5cbi8qKlxuICogVGhlIGNvbnRlbnQgb2YgYHVwc3RyZWFtcy5qc29uYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVcHN0cmVhbXNDb25maWcge1xuICByZWFkb25seSB1cHN0cmVhbXM6IHJlYWRvbmx5IFVwc3RyZWFtRW50cnlbXTtcbiAgLyoqXG4gICAqIFRoZSBzaGVsbCBjb21tYW5kIHRoYXQgY2hlY2tzIGV2ZXJ5IGhhbmRsZXIncyByZXN1bHQsIHVubGVzcyBhbiBlbnRyeSBuYW1lcyBpdHMgb3duLlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyaWZ5Pzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFdoYXQgb25lIGNvbXBhcmlzb24gb2YgYW4gZW50cnkgd2l0aCBpdHMgdXBzdHJlYW0gZm91bmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVXBzdHJlYW1TdGF0dXMge1xuICAvKipcbiAgICogVGhlIHVwc3RyZWFtIHBhdGhzIHRoYXQgY2hhbmdlZCBhbmQgYXJlIHdhdGNoZWQsIHNvcnRlZC4gQWx3YXlzIGVtcHR5IGZvciBhbiBucG0gdXBzdHJlYW0uXG4gICAqL1xuICByZWFkb25seSBjaGFuZ2VkUGF0aHM6IHJlYWRvbmx5IHN0cmluZ1tdO1xuICAvKipcbiAgICogQSBsaW5rIHRoYXQgc2hvd3Mgd2hhdCBjaGFuZ2VkIGJldHdlZW4gdGhlIHBpbiBhbmQgdGhlIGhlYWQuXG4gICAqL1xuICByZWFkb25seSBjb21wYXJlVXJsOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGVudHJ5OiBVcHN0cmVhbUVudHJ5O1xuICAvKipcbiAgICogVGhlIGNvbW1pdCBvciB2ZXJzaW9uIHRoZSB1cHN0cmVhbSBpcyBhdCBub3cuXG4gICAqL1xuICByZWFkb25seSBoZWFkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgY29tbWl0IG9yIHZlcnNpb24gYHVwc3RyZWFtcy5qc29uYCByZWNvcmRzLlxuICAgKi9cbiAgcmVhZG9ubHkgcGluOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBgY3VycmVudGA6IG5vdGhpbmcgdG8gZG8uIGBtb3ZlZGA6IGEgUFIgaXMgZHVlLiBgdW53YXRjaGVkYDogdXBzdHJlYW0gbW92ZWQsIGJ1dCBubyB3YXRjaGVkIHBhdGggY2hhbmdlZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXRlOiAnY3VycmVudCcgfCAnbW92ZWQnIHwgJ3Vud2F0Y2hlZCc7XG4gIC8qKlxuICAgKiBXaGV0aGVyIEdpdEh1YiB0cnVuY2F0ZWQgdGhlIGNvbXBhcmUncyBmaWxlIGxpc3QsIHNvIGEgd2F0Y2hlZCBwYXRoIG1heSBiZSBtaXNzaW5nIGZyb20gYGNoYW5nZWRQYXRoc2AuXG4gICAqL1xuICByZWFkb25seSB0cnVuY2F0ZWQ6IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBHaXRIdWJDb21taXQge1xuICByZWFkb25seSBzaGE6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIEdpdEh1YkNvbXBhcmUge1xuICByZWFkb25seSBmaWxlcz86IHJlYWRvbmx5IEdpdEh1YkNvbXBhcmVGaWxlW107XG59XG5cbi8qKlxuICogT25lIGZpbGUgb2YgYSBHaXRIdWIgY29tcGFyZSwgYXMgdGhlIEFQSSBzcGVsbHMgaXQuXG4gKi9cbmludGVyZmFjZSBHaXRIdWJDb21wYXJlRmlsZSB7XG4gIHJlYWRvbmx5IGZpbGVuYW1lOiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgcHJldmlvdXNfZmlsZW5hbWU/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBOcG1QYWNrdW1lbnQge1xuICByZWFkb25seSAnZGlzdC10YWdzJzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuaW50ZXJmYWNlIFN0ZXBSZXN1bHQge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc3VsdDogQ29tbWFuZFJlc3VsdDtcbn1cblxuLyoqXG4gKiBUaGUgaGFuZGxlciBhbmQgdmVyaWZ5IHJ1bnMgYSBQUiBib2R5IHJlcG9ydHMuXG4gKi9cbmludGVyZmFjZSBTdGVwUmVzdWx0cyB7XG4gIHJlYWRvbmx5IGhhbmRsZXI6IFN0ZXBSZXN1bHQ7XG4gIHJlYWRvbmx5IHZlcmlmeTogbnVsbCB8IFN0ZXBSZXN1bHQ7XG59XG5cbi8qKlxuICogYHVwc3RyZWFtcy5qc29uYCByZWFkIGxvb3NlbHksIHRvIHdyaXRlIG9uZSB2YWx1ZSBiYWNrIHdpdGhvdXQgZGlzdHVyYmluZyB0aGUgcmVzdC5cbiAqL1xuaW50ZXJmYWNlIFVwc3RyZWFtc0ZpbGVTaGFwZSB7XG4gIHJlYWRvbmx5IHVwc3RyZWFtczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXTtcbn1cblxuLyoqXG4gKiBHaXRIdWIncyBjb21wYXJlIEFQSSBsaXN0cyBhdCBtb3N0IHRoaXMgbWFueSBmaWxlcywgYW5kIHNheXMgbm90aGluZyB3aGVuIGl0IHN0b3BzLlxuICovXG5jb25zdCBDT01QQVJFX0ZJTEVfTElNSVQgPSAzMDA7XG5cbmNvbnN0IFNIT1JUX1NIQV9MRU5HVEggPSAxMjtcblxuLyoqXG4gKiBUaGUgdGFpbCBvZiBhIGNvbW1hbmQncyBvdXRwdXQgYSBQUiBib2R5IHF1b3RlczogZW5vdWdoIHRvIHJlYWQgYSBmYWlsdXJlLCBzaG9ydCBlbm91Z2ggdG8gc3RheSB1bmRlciBHaXRIdWIncyBib2R5IGxpbWl0LlxuICovXG5jb25zdCBPVVRQVVRfVEFJTF9MSU5FUyA9IDYwO1xuXG4vKipcbiAqIFRoZSBtb3N0IGxpbmVzIHRoYXQgcmVwb3J0IGEgZmFpbHVyZSBhIGZhaWxlZCBzdGVwJ3Mgc2VjdGlvbiBvcGVucyB3aXRoLCBhaGVhZCBvZiBpdHMgb3V0cHV0IHRhaWwuXG4gKi9cbmNvbnN0IEZBSUxVUkVfTElORV9MSU1JVCA9IDIwO1xuXG5jb25zdCBKU09OX0lOREVOVF9TUEFDRVMgPSAyO1xuXG4vKipcbiAqIFRoZSBFU0MgdGhhdCBvcGVucyBhIHRlcm1pbmFsIGNvbnRyb2wgc2VxdWVuY2UsIGVpdGhlciBhcyB0aGUgYnl0ZSBvciBhcyB0aGUgY2FyZXQgdGV4dCBgXltgIGEgbG9nIHZpZXdlciBvciBhblxuICogZWFybGllciBjb3B5IHR1cm5lZCBpdCBpbnRvLiBCb3RoIHJlYWNoZWQgYSBQUiBib2R5OiBjcmVhdGUtb2JzaWRpYW4tcGx1Z2luIzIgY2FycmllZCB0aGUgY2FyZXQgZm9ybS5cbiAqL1xuY29uc3QgRVNDID0gU3RyaW5nLnJhd2AoPzpcXHUwMDFCfFxcXlxcWylgO1xuXG4vKipcbiAqIENvbnRyb2wgU2VxdWVuY2UgSW50cm9kdWNlciBzZXF1ZW5jZXMgKGNvbG9ycywgY3Vyc29yIG1vdmVzKSwgT3BlcmF0aW5nIFN5c3RlbSBDb21tYW5kIHNlcXVlbmNlcyAoaHlwZXJsaW5rcyxcbiAqIHRpdGxlcywgZW5kZWQgYnkgQkVMIG9yIFNULCBhbHNvIGFzIGBeR2ApLCBhbmQgdGhlIHR3by1jaGFyYWN0ZXIgZXNjYXBlcy4gQSB0d28tY2hhcmFjdGVyIGVzY2FwZSBpcyBtYXRjaGVkIG9ubHkgYXNcbiAqIHRoZSBieXRlLCBiZWNhdXNlIGl0cyBjYXJldCB0ZXh0IGFsc28gc3BlbGxzIGFuIG9yZGluYXJ5IHJlZ3VsYXIgZXhwcmVzc2lvbiwgc3VjaCBhcyBgXltBLVpdYC5cbiAqL1xuY29uc3QgVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQID0gbmV3IFJlZ0V4cChcbiAgU3RyaW5nLnJhd2Ake0VTQ31cXFtbMC0/XSpbIC0vXSpbQC1+XXwke0VTQ31cXF1bXlxcdTAwMDdcXHUwMDFCXl0qKD86XFx1MDAwN3xcXF5HfCR7RVNDfVxcXFwpfFxcdTAwMUJbQC1aXFxcXC1fXWAsXG4gICdnJ1xuKTtcblxuLyoqXG4gKiBBIGxpbmUgdGhhdCByZXBvcnRzIGEgZmFpbHVyZSwgd2hpY2ggYSBmYWlsZWQgc3RlcCdzIHNlY3Rpb24gcXVvdGVzIGZpcnN0LCBiZWNhdXNlIHRoZSB0YWlsIG1heSBiZSBhIGdyZWVuIHRlc3QgcnVuXG4gKiB0aGF0IGZpbmlzaGVkIGFmdGVyIGl0LlxuICovXG5jb25zdCBGQUlMVVJFX0xJTkVfUkVHX0VYUCA9IC9zdGVwLWZhaWxlZHxcXGJmYWlsKD86c3xlZHx1cmV8aW5nKT9cXGJ8XFxiZXJyb3JcXGJ8XFxibm90IGZvdW5kXFxifFxcYkVSUiF8W1x1MjcxN1x1MDBEN10vaTtcblxuLyoqXG4gKiBXcml0ZXMgdGhlIFBSIGJvZHkuXG4gKlxuICogQHBhcmFtIHBsYW4gLSBUaGUgcGxhbi5cbiAqIEBwYXJhbSBzdGVwcyAtIFRoZSBoYW5kbGVyIGFuZCB2ZXJpZnkgcnVucywgb3IgYG51bGxgIGluIGEgZHJ5IHJ1biwgd2hlcmUgbmVpdGhlciBydW5zLlxuICogQHBhcmFtIGRpZmZTdGF0IC0gYGdpdCBkaWZmIC0tc3RhdGAgb2YgdGhlIHVwZGF0ZSBjb21taXQsIG9yIGBudWxsYCBpbiBhIGRyeSBydW4uXG4gKiBAcmV0dXJucyBUaGUgYm9keSwgaW4gTWFya2Rvd24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFByQm9keShwbGFuOiBTeW5jUGxhbiwgc3RlcHM6IG51bGwgfCBTdGVwUmVzdWx0cywgZGlmZlN0YXQ6IG51bGwgfCBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCB7IGVudHJ5LCBoZWFkLCBwaW4gfSA9IHBsYW4uc3RhdHVzO1xuICBjb25zdCBzb3VyY2UgPSBpc0dpdFVwc3RyZWFtKGVudHJ5KSA/IGBcXGAke2VudHJ5LnJlcG99QCR7ZW50cnkucmVmfVxcYGAgOiBgbnBtIFxcYCR7ZW50cnkubnBtfUAke2VudHJ5LnRhZyA/PyAnbGF0ZXN0J31cXGBgO1xuICBjb25zdCBsaW5lcyA9IFtcbiAgICBgVXBzdHJlYW0gXFxgJHtlbnRyeS5uYW1lfVxcYCBtb3ZlZDogJHtzb3VyY2V9IGZyb20gXFxgJHtwaW59XFxgIHRvIFxcYCR7aGVhZH1cXGAuYCxcbiAgICAnJyxcbiAgICBgQ29tcGFyZTogJHtwbGFuLnN0YXR1cy5jb21wYXJlVXJsfWAsXG4gICAgJydcbiAgXTtcblxuICBpZiAoaXNHaXRVcHN0cmVhbShlbnRyeSkpIHtcbiAgICBsaW5lcy5wdXNoKCcjIyMgQ2hhbmdlZCB1cHN0cmVhbSBmaWxlcycsICcnLCAuLi5wbGFuLnN0YXR1cy5jaGFuZ2VkUGF0aHMubWFwKChwYXRoKSA9PiBgLSBcXGAke3BhdGh9XFxgYCkpO1xuICAgIGlmIChwbGFuLnN0YXR1cy50cnVuY2F0ZWQpIHtcbiAgICAgIGxpbmVzLnB1c2goYC0gR2l0SHViIGxpc3RzIGF0IG1vc3QgJHtTdHJpbmcoQ09NUEFSRV9GSUxFX0xJTUlUKX0gZmlsZXM6IG9wZW4gdGhlIGNvbXBhcmUgbGluayBmb3IgdGhlIHJlc3QuYCk7XG4gICAgfVxuICAgIGxpbmVzLnB1c2goJycpO1xuICB9XG5cbiAgaWYgKHN0ZXBzID09PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEhhbmRsZXInLCAnJywgYFxcYCR7ZW50cnkuaGFuZGxlcn1cXGA6IG5vdCBydW4gKGRyeSBydW4pLmAsICcnKTtcbiAgfSBlbHNlIHtcbiAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnSGFuZGxlcicsIHN0ZXBzLmhhbmRsZXIpKTtcbiAgICBpZiAoc3RlcHMudmVyaWZ5ICE9PSBudWxsKSB7XG4gICAgICBsaW5lcy5wdXNoKC4uLmRlc2NyaWJlU3RlcCgnVmVyaWZ5Jywgc3RlcHMudmVyaWZ5KSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKGRpZmZTdGF0ICE9PSBudWxsKSB7XG4gICAgbGluZXMucHVzaCgnIyMjIEdlbmVyYXRlZCBjaGFuZ2VzJywgJycsICdgYGB0ZXh0JywgY2xlYW5Db21tYW5kT3V0cHV0KGRpZmZTdGF0KS50cmltRW5kKCksICdgYGAnLCAnJyk7XG4gIH1cblxuICBsaW5lcy5wdXNoKCdUaGlzIFBSIHdhcyBvcGVuZWQgYnkgdGhlIHVwc3RyZWFtLXN5bmMgam9iIGFuZCBpcyBuZXZlciBtZXJnZWQgYXV0b21hdGljYWxseS4nKTtcbiAgcmV0dXJuIGAke2xpbmVzLmpvaW4oJ1xcbicpfVxcbmA7XG59XG5cbi8qKlxuICogVHVybnMgYSBjb21tYW5kJ3MgY2FwdHVyZWQgb3V0cHV0IGludG8gcGxhaW4gdGV4dCBhIFBSIGJvZHkgY2FuIHF1b3RlOiB0ZXJtaW5hbCBjb250cm9sIHNlcXVlbmNlcyBhcmUgcmVtb3ZlZCxcbiAqIHdoZXRoZXIgdGhleSBhcnJpdmVkIGFzIEVTQyBieXRlcyBvciBhcyB0aGVpciBjYXJldC1yZW5kZXJlZCBgXltbLi4ubWAgdGV4dCwgYW5kIGEgbGluZSBhIHByb2dyZXNzIGRpc3BsYXkgcmV3cm90ZVxuICogd2l0aCBgXFxyYCBrZWVwcyBvbmx5IGl0cyBsYXN0IHN0YXRlLlxuICpcbiAqIEBwYXJhbSBvdXRwdXQgLSBUaGUgY2FwdHVyZWQgb3V0cHV0LlxuICogQHJldHVybnMgVGhlIHBsYWluIHRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbkNvbW1hbmRPdXRwdXQob3V0cHV0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gb3V0cHV0XG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ09OVFJPTF9SRUdfRVhQLCAnJylcbiAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IHRvTGFzdExpbmVTdGF0ZShsaW5lKSlcbiAgICAuam9pbignXFxuJyk7XG59XG5cbi8qKlxuICogQ29tcGFyZXMgb25lIGVudHJ5IHdpdGggaXRzIHVwc3RyZWFtLlxuICpcbiAqIEBwYXJhbSBlbnRyeSAtIFRoZSBlbnRyeS5cbiAqIEBwYXJhbSBkZXBlbmRlbmNpZXMgLSBUaGUgb3V0c2lkZSB3b3JsZC5cbiAqIEByZXR1cm5zIFdoYXQgdGhlIGNvbXBhcmlzb24gZm91bmQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb21wYXJlV2l0aFVwc3RyZWFtKGVudHJ5OiBVcHN0cmVhbUVudHJ5LCBkZXBlbmRlbmNpZXM6IFBpY2s8U3luY0RlcGVuZGVuY2llcywgJ2ZldGNoSnNvbic+KTogUHJvbWlzZTxVcHN0cmVhbVN0YXR1cz4ge1xuICBpZiAoIWlzR2l0VXBzdHJlYW0oZW50cnkpKSB7XG4gICAgY29uc3QgdGFnID0gZW50cnkudGFnID8/ICdsYXRlc3QnO1xuICAgIGNvbnN0IHBhY2t1bWVudCA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnLyR7ZW50cnkubnBtLnJlcGxhY2UoJy8nLCAnJTJmJyl9YCkgYXMgTnBtUGFja3VtZW50O1xuICAgIGNvbnN0IGhlYWQgPSBwYWNrdW1lbnRbJ2Rpc3QtdGFncyddW3RhZ107XG4gICAgaWYgKGhlYWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBucG0gcGFja2FnZSAke2VudHJ5Lm5wbX0gaGFzIG5vIGRpc3QtdGFnIFwiJHt0YWd9XCIuYCk7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBjaGFuZ2VkUGF0aHM6IFtdLFxuICAgICAgY29tcGFyZVVybDogYGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlLyR7ZW50cnkubnBtfS92LyR7aGVhZH1gLFxuICAgICAgZW50cnksXG4gICAgICBoZWFkLFxuICAgICAgcGluOiBlbnRyeS52ZXJzaW9uLFxuICAgICAgc3RhdGU6IGhlYWQgPT09IGVudHJ5LnZlcnNpb24gPyAnY3VycmVudCcgOiAnbW92ZWQnLFxuICAgICAgdHJ1bmNhdGVkOiBmYWxzZVxuICAgIH07XG4gIH1cblxuICBjb25zdCBjb21taXQgPSBhd2FpdCBkZXBlbmRlbmNpZXMuZmV0Y2hKc29uKGBodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLyR7ZW50cnkucmVwb30vY29tbWl0cy8ke2VuY29kZVVSSUNvbXBvbmVudChlbnRyeS5yZWYpfWApIGFzIEdpdEh1YkNvbW1pdDtcbiAgY29uc3QgaGVhZCA9IGNvbW1pdC5zaGE7XG4gIGNvbnN0IGNvbXBhcmVVcmwgPSBgaHR0cHM6Ly9naXRodWIuY29tLyR7ZW50cnkucmVwb30vY29tcGFyZS8ke2VudHJ5LmNvbW1pdH0uLi4ke2hlYWR9YDtcbiAgaWYgKGhlYWQgPT09IGVudHJ5LmNvbW1pdCkge1xuICAgIHJldHVybiB7IGNoYW5nZWRQYXRoczogW10sIGNvbXBhcmVVcmwsIGVudHJ5LCBoZWFkLCBwaW46IGVudHJ5LmNvbW1pdCwgc3RhdGU6ICdjdXJyZW50JywgdHJ1bmNhdGVkOiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgY29tcGFyZSA9IGF3YWl0IGRlcGVuZGVuY2llcy5mZXRjaEpzb24oYGh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3MvJHtlbnRyeS5yZXBvfS9jb21wYXJlLyR7ZW50cnkuY29tbWl0fS4uLiR7aGVhZH1gKSBhcyBHaXRIdWJDb21wYXJlO1xuICBjb25zdCBmaWxlcyA9IGNvbXBhcmUuZmlsZXMgPz8gW107XG4gIGNvbnN0IHRvdWNoZWQgPSBuZXcgU2V0KGZpbGVzLmZsYXRNYXAoKGZpbGUpID0+IGZpbGUucHJldmlvdXNfZmlsZW5hbWUgPT09IHVuZGVmaW5lZCA/IFtmaWxlLmZpbGVuYW1lXSA6IFtmaWxlLmZpbGVuYW1lLCBmaWxlLnByZXZpb3VzX2ZpbGVuYW1lXSkpO1xuICBjb25zdCBjaGFuZ2VkUGF0aHMgPSBbLi4udG91Y2hlZF0uZmlsdGVyKChwYXRoKSA9PiBlbnRyeS5wYXRocy5zb21lKChnbG9iKSA9PiBtYXRjaGVzR2xvYihwYXRoLCBnbG9iKSkpLnNvcnQoKTtcbiAgY29uc3QgaXNUcnVuY2F0ZWQgPSBmaWxlcy5sZW5ndGggPj0gQ09NUEFSRV9GSUxFX0xJTUlUO1xuICByZXR1cm4ge1xuICAgIGNoYW5nZWRQYXRocyxcbiAgICBjb21wYXJlVXJsLFxuICAgIGVudHJ5LFxuICAgIGhlYWQsXG4gICAgcGluOiBlbnRyeS5jb21taXQsXG4gICAgc3RhdGU6IGNoYW5nZWRQYXRocy5sZW5ndGggPiAwIHx8IGlzVHJ1bmNhdGVkID8gJ21vdmVkJyA6ICd1bndhdGNoZWQnLFxuICAgIHRydW5jYXRlZDogaXNUcnVuY2F0ZWRcbiAgfTtcbn1cblxuLyoqXG4gKiBQYXJzZXMgYW5kIHZhbGlkYXRlcyBhbiBgdXBzdHJlYW1zLmpzb25gLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIGZpbGUncyBjb250ZW50LlxuICogQHJldHVybnMgVGhlIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXBzdHJlYW1zQ29uZmlnKHRleHQ6IHN0cmluZyk6IFVwc3RyZWFtc0NvbmZpZyB7XG4gIGNvbnN0IGNvbmZpZyA9IEpTT04ucGFyc2UodGV4dCkgYXMgUGFydGlhbDxVcHN0cmVhbXNDb25maWc+O1xuICBpZiAoIUFycmF5LmlzQXJyYXkoY29uZmlnLnVwc3RyZWFtcykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1cHN0cmVhbXMuanNvbiBoYXMgbm8gXCJ1cHN0cmVhbXNcIiBhcnJheS4nKTtcbiAgfVxuICAvLyBSZWFkIHRocm91Z2ggYFJlZmxlY3QuZ2V0YCwgYmVjYXVzZSBub3RoaW5nIGFib3V0IHRoZSBwYXJzZWQgZW50cmllcyBpcyBrbm93biB5ZXQuXG4gIGNvbnN0IGVudHJpZXM6IHJlYWRvbmx5IG9iamVjdFtdID0gY29uZmlnLnVwc3RyZWFtcztcbiAgY29uc3QgbmFtZXMgPSBuZXcgU2V0PHVua25vd24+KCk7XG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGNvbnN0IG5hbWU6IHVua25vd24gPSBSZWZsZWN0LmdldChlbnRyeSwgJ25hbWUnKTtcbiAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyA/IGBcIiR7bmFtZX1cImAgOiAnd2l0aCBubyBuYW1lJztcbiAgICBjb25zdCBpc0dpdCA9ICdyZXBvJyBpbiBlbnRyeTtcbiAgICBjb25zdCByZXF1aXJlZCA9IGlzR2l0ID8gWyduYW1lJywgJ3JlcG8nLCAncmVmJywgJ2NvbW1pdCcsICdoYW5kbGVyJ10gOiBbJ25hbWUnLCAnbnBtJywgJ3ZlcnNpb24nLCAnaGFuZGxlciddO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIHJlcXVpcmVkKSB7XG4gICAgICBpZiAodHlwZW9mIFJlZmxlY3QuZ2V0KGVudHJ5LCBrZXkpICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGB1cHN0cmVhbXMuanNvbjogZW50cnkgJHtsYWJlbH0gbmVlZHMgYSBzdHJpbmcgXCIke2tleX1cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGlzR2l0ICYmICFBcnJheS5pc0FycmF5KFJlZmxlY3QuZ2V0KGVudHJ5LCAncGF0aHMnKSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb246IGVudHJ5ICR7bGFiZWx9IG5lZWRzIGEgXCJwYXRoc1wiIGFycmF5LmApO1xuICAgIH1cbiAgICBpZiAobmFtZXMuaGFzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHVwc3RyZWFtcy5qc29uOiB0aGUgbmFtZSAke2xhYmVsfSBpcyB1c2VkIHR3aWNlLmApO1xuICAgIH1cbiAgICBuYW1lcy5hZGQobmFtZSk7XG4gIH1cbiAgcmV0dXJuIGNvbmZpZyBhcyBVcHN0cmVhbXNDb25maWc7XG59XG5cbi8qKlxuICogUGxhbnMgdGhlIFBSIGEgbW92ZWQgdXBzdHJlYW0gYXNrcyBmb3IuXG4gKlxuICogQHBhcmFtIHN0YXR1cyAtIFRoZSBjb21wYXJpc29uIG9mIGEgbW92ZWQgZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgYnJhbmNoIGFuZCB0aXRsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBsYW5TeW5jKHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiBTeW5jUGxhbiB7XG4gIHJldHVybiB7XG4gICAgYnJhbmNoOiBgdXBzdHJlYW0vJHtzdGF0dXMuZW50cnkubmFtZX1gLFxuICAgIHN0YXR1cyxcbiAgICB0aXRsZTogYGNob3JlKHVwc3RyZWFtKTogc3luYyAke3N0YXR1cy5lbnRyeS5uYW1lfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfWBcbiAgfTtcbn1cblxuLyoqXG4gKiBDaGVja3MgZXZlcnkgZW50cnksIGFuZCBvcGVucyBvciB1cGRhdGVzIG9uZSBQUiBwZXIgbW92ZWQgdXBzdHJlYW0uXG4gKlxuICogQSBoYW5kbGVyIG9yIHZlcmlmeSBmYWlsdXJlIHN0aWxsIG9wZW5zIHRoZSBQUiwgYXMgYSBkcmFmdCB3aXRoIHRoZSBmYWlsdXJlIGluIGl0cyBib2R5LCBzbyBhIGJyZWFraW5nIHVwc3RyZWFtIGNoYW5nZVxuICogaXMgc2VlbiByYXRoZXIgdGhhbiBza2lwcGVkLiBBbiBlcnJvciBpbiB0aGUgc3luYyBpdHNlbGYsIHN1Y2ggYXMgYSBmYWlsZWQgQVBJIGNhbGwsIGlzIHJlcG9ydGVkIGluIHRoZSBlbnRyeSdzIHJlc3VsdFxuICogYW5kIHRoZSBuZXh0IGVudHJ5IHN0aWxsIHJ1bnMuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBXaGF0IHRvIHN5bmMsIGFuZCBob3cuXG4gKiBAcGFyYW0gZGVwZW5kZW5jaWVzIC0gVGhlIG91dHNpZGUgd29ybGQuXG4gKiBAcmV0dXJucyBPbmUgcmVzdWx0IHBlciBlbnRyeSBjaGVja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY1Vwc3RyZWFtcyhvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogUHJvbWlzZTxTeW5jUmVzdWx0W10+IHtcbiAgY29uc3QgY29uZmlnID0gcGFyc2VVcHN0cmVhbXNDb25maWcocmVhZEZpbGVTeW5jKG9wdGlvbnMuY29uZmlnUGF0aCwgJ3V0Zi04JykpO1xuICBjb25zdCB1bmtub3duID0gb3B0aW9ucy5vbmx5LmZpbHRlcigobmFtZSkgPT4gY29uZmlnLnVwc3RyZWFtcy5ldmVyeSgoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpKTtcbiAgaWYgKHVua25vd24ubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgdXBzdHJlYW1zLmpzb24gaGFzIG5vIGVudHJ5IG5hbWVkICR7dW5rbm93bi5tYXAoKG5hbWUpID0+IGBcIiR7bmFtZX1cImApLmpvaW4oJywgJyl9LmApO1xuICB9XG5cbiAgY29uc3QgcmVzdWx0czogU3luY1Jlc3VsdFtdID0gW107XG4gIGZvciAoY29uc3QgZW50cnkgb2YgY29uZmlnLnVwc3RyZWFtcykge1xuICAgIGlmIChvcHRpb25zLm9ubHkubGVuZ3RoID4gMCAmJiAhb3B0aW9ucy5vbmx5LmluY2x1ZGVzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJlc3VsdHMucHVzaChhd2FpdCBzeW5jRW50cnkoZW50cnksIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IubWVzc2FnZSA6IFN0cmluZyhlcnJvcik7XG4gICAgICBkZXBlbmRlbmNpZXMubG9nKGAke2VudHJ5Lm5hbWV9OiBFUlJPUiAke21lc3NhZ2V9YCk7XG4gICAgICByZXN1bHRzLnB1c2goeyBlcnJvcjogbWVzc2FnZSwgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ2Vycm9yJyB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdHM7XG59XG5cbi8qKlxuICogUmVjb3JkcyBgaGVhZGAgYXMgdGhlIGVudHJ5J3MgcGluIGluIGB1cHN0cmVhbXMuanNvbmAsIHVubGVzcyB0aGUgaGFuZGxlciBhbHJlYWR5IG1vdmVkIGl0LCBrZWVwaW5nIHRoZSBmaWxlJ3NcbiAqIGtleSBvcmRlciBhbmQgZm9ybWF0dGluZy5cbiAqXG4gKiBAcGFyYW0gY29uZmlnUGF0aCAtIFRoZSBwYXRoIHRvIGB1cHN0cmVhbXMuanNvbmAuXG4gKiBAcGFyYW0gc3RhdHVzIC0gVGhlIGNvbXBhcmlzb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3cml0ZVBpbihjb25maWdQYXRoOiBzdHJpbmcsIHN0YXR1czogVXBzdHJlYW1TdGF0dXMpOiB2b2lkIHtcbiAgY29uc3QgdGV4dCA9IHJlYWRGaWxlU3luYyhjb25maWdQYXRoLCAndXRmLTgnKTtcbiAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZSh0ZXh0KSBhcyBVcHN0cmVhbXNGaWxlU2hhcGU7XG4gIGNvbnN0IGtleSA9IGlzR2l0VXBzdHJlYW0oc3RhdHVzLmVudHJ5KSA/ICdjb21taXQnIDogJ3ZlcnNpb24nO1xuICBjb25zdCB0YXJnZXQgPSBwYXJzZWQudXBzdHJlYW1zLmZpbmQoKGVudHJ5KSA9PiBlbnRyeVsnbmFtZSddID09PSBzdGF0dXMuZW50cnkubmFtZSk7XG4gIGlmICh0YXJnZXQ/LltrZXldICE9PSBzdGF0dXMucGluKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRhcmdldFtrZXldID0gc3RhdHVzLmhlYWQ7XG4gIHdyaXRlRmlsZVN5bmMoY29uZmlnUGF0aCwgYCR7SlNPTi5zdHJpbmdpZnkocGFyc2VkLCBudWxsLCBKU09OX0lOREVOVF9TUEFDRVMpfVxcbmApO1xufVxuXG5mdW5jdGlvbiBhcHBseVBsYW4ocGxhbjogU3luY1BsYW4sIGNvbmZpZzogVXBzdHJlYW1zQ29uZmlnLCBvcHRpb25zOiBTeW5jVXBzdHJlYW1zT3B0aW9ucywgZGVwZW5kZW5jaWVzOiBTeW5jRGVwZW5kZW5jaWVzKTogU3luY1Jlc3VsdCB7XG4gIGNvbnN0IHsgZW50cnkgfSA9IHBsYW4uc3RhdHVzO1xuICAvLyBObyBjb2xvcjogdGhlIG91dHB1dCBpcyBxdW90ZWQgaW4gYSBQUiBib2R5LCB3aGVyZSBhIGNvbG9yIGNvZGUgaXMgb25seSBub2lzZS4gYENJYCBpcyBsZWZ0IGFsb25lLCBiZWNhdXNlIGl0XG4gIC8vIGNoYW5nZXMgd2hhdCBzb21lIHRvb2xzIGRvLCBub3QganVzdCBob3cgdGhleSBwcmludC5cbiAgY29uc3QgZW52ID0geyBGT1JDRV9DT0xPUjogJzAnLCBOT19DT0xPUjogJzEnLCBVUFNUUkVBTV9OQU1FOiBlbnRyeS5uYW1lLCBVUFNUUkVBTV9UQVJHRVQ6IHBsYW4uc3RhdHVzLmhlYWQgfTtcbiAgY29uc3QgaGFuZGxlcjogU3RlcFJlc3VsdCA9IHsgY29tbWFuZDogZW50cnkuaGFuZGxlciwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwoZW50cnkuaGFuZGxlciwgZW52KSB9O1xuICB3cml0ZVBpbihvcHRpb25zLmNvbmZpZ1BhdGgsIHBsYW4uc3RhdHVzKTtcbiAgY29uc3QgdmVyaWZ5Q29tbWFuZCA9IGVudHJ5LnZlcmlmeSA/PyBjb25maWcudmVyaWZ5O1xuICBjb25zdCB2ZXJpZnk6IG51bGwgfCBTdGVwUmVzdWx0ID0gdmVyaWZ5Q29tbWFuZCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IHsgY29tbWFuZDogdmVyaWZ5Q29tbWFuZCwgcmVzdWx0OiBkZXBlbmRlbmNpZXMuc2hlbGwodmVyaWZ5Q29tbWFuZCwgZW52KSB9O1xuICBjb25zdCBpc0ZhaWxlZCA9IGhhbmRsZXIucmVzdWx0LmV4aXRDb2RlICE9PSAwIHx8ICh2ZXJpZnkgIT09IG51bGwgJiYgdmVyaWZ5LnJlc3VsdC5leGl0Q29kZSAhPT0gMCk7XG5cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydhZGQnLCAnLS1hbGwnXSk7XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsnY29tbWl0JywgJy0tbm8tdmVyaWZ5JywgJy0tbWVzc2FnZScsIHBsYW4udGl0bGVdKTtcbiAgY29uc3QgZGlmZlN0YXQgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ2RpZmYnLCAnLS1zdGF0JywgJ0hFQUR+MScsICdIRUFEJ10pO1xuXG4gIGNvbnN0IGJvZHkgPSBidWlsZFByQm9keShwbGFuLCB7IGhhbmRsZXIsIHZlcmlmeSB9LCBkaWZmU3RhdCk7XG4gIGNvbnN0IGlzUmVtb3RlQnJhbmNoID0gZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnbHMtcmVtb3RlJywgJy0tZXhpdC1jb2RlJywgJy0taGVhZHMnLCAnb3JpZ2luJywgcGxhbi5icmFuY2hdKS5leGl0Q29kZSA9PT0gMDtcbiAgaWYgKGlzUmVtb3RlQnJhbmNoKSB7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBwbGFuLmJyYW5jaF0pO1xuICAgIGlmIChkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydkaWZmJywgJy0tcXVpZXQnLCAnRkVUQ0hfSEVBRCcsICdIRUFEJ10pLmV4aXRDb2RlID09PSAwKSB7XG4gICAgICAvLyBUaGUgYm9keSBpcyBzdGlsbCByZXdyaXR0ZW4sIHNvIGEgY2hhbmdlIHRvIGhvdyBpdCBpcyB3cml0dGVuIHJlYWNoZXMgYSBQUiB3aG9zZSBicmFuY2ggaGFzIG5vdCBtb3ZlZC5cbiAgICAgIGNvbnN0IG9wZW4gPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICAgICAgaWYgKG9wZW4gIT09IG51bGwpIHtcbiAgICAgICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBvcGVuLCAnLS1ib2R5JywgYm9keV0pO1xuICAgICAgfVxuICAgICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogJHtwbGFuLmJyYW5jaH0gYWxyZWFkeSBob2xkcyB0aGlzIHJlc3VsdDsgbm90aGluZyBwdXNoZWQke29wZW4gPT09IG51bGwgPyAnJyA6IGAsIFBSICMke29wZW59J3MgYm9keSByZXdyaXR0ZW5gfS5gKTtcbiAgICAgIHJldHVybiB7IG5hbWU6IGVudHJ5Lm5hbWUsIG91dGNvbWU6ICd1bmNoYW5nZWQnIH07XG4gICAgfVxuICB9XG4gIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2dpdCcsIFsncHVzaCcsICctLWZvcmNlJywgJ29yaWdpbicsIGBIRUFEOnJlZnMvaGVhZHMvJHtwbGFuLmJyYW5jaH1gXSk7XG5cbiAgY29uc3QgZXhpc3RpbmcgPSBmaW5kT3BlblByKGRlcGVuZGVuY2llcywgcGxhbi5icmFuY2gpO1xuICBpZiAoZXhpc3RpbmcgIT09IG51bGwpIHtcbiAgICBjb25zdCBwck51bWJlciA9IE51bWJlcihleGlzdGluZyk7XG4gICAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbJ3ByJywgJ2VkaXQnLCBleGlzdGluZywgJy0tdGl0bGUnLCBwbGFuLnRpdGxlLCAnLS1ib2R5JywgYm9keV0pO1xuICAgIGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgaXNGYWlsZWQgPyBbJ3ByJywgJ3JlYWR5JywgZXhpc3RpbmcsICctLXVuZG8nXSA6IFsncHInLCAncmVhZHknLCBleGlzdGluZ10pO1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IHVwZGF0ZWQgUFIgIyR7ZXhpc3Rpbmd9JHtpc0ZhaWxlZCA/ICcgKGRyYWZ0OiBhIHN0ZXAgZmFpbGVkKScgOiAnJ30uYCk7XG4gICAgcmV0dXJuIHsgbmFtZTogZW50cnkubmFtZSwgb3V0Y29tZTogJ3VwZGF0ZWQnLCBwck51bWJlciB9O1xuICB9XG5cbiAgY29uc3QgdXJsID0gZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2gnLCBbXG4gICAgJ3ByJyxcbiAgICAnY3JlYXRlJyxcbiAgICAnLS1iYXNlJyxcbiAgICBvcHRpb25zLmJhc2VCcmFuY2gsXG4gICAgJy0taGVhZCcsXG4gICAgcGxhbi5icmFuY2gsXG4gICAgJy0tdGl0bGUnLFxuICAgIHBsYW4udGl0bGUsXG4gICAgJy0tYm9keScsXG4gICAgYm9keSxcbiAgICAuLi4oaXNGYWlsZWQgPyBbJy0tZHJhZnQnXSA6IFtdKVxuICBdKS50cmltKCk7XG4gIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG9wZW5lZCAke3VybH0ke2lzRmFpbGVkID8gJyAoZHJhZnQ6IGEgc3RlcCBmYWlsZWQpJyA6ICcnfS5gKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBOdW1iZXIoL1xcL3B1bGxcXC8oPzxOdW1iZXI+XFxkKykvLmV4ZWModXJsKT8uZ3JvdXBzPy5bJ051bWJlciddID8/IE5hTik7XG4gIHJldHVybiBOdW1iZXIuaXNOYU4ocHJOdW1iZXIpID8geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJyB9IDogeyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnb3BlbmVkJywgcHJOdW1iZXIgfTtcbn1cblxuZnVuY3Rpb24gZGVzY3JpYmVTdGVwKGhlYWRpbmc6IHN0cmluZywgc3RlcDogU3RlcFJlc3VsdCk6IHN0cmluZ1tdIHtcbiAgY29uc3QgaXNQYXNzZWQgPSBzdGVwLnJlc3VsdC5leGl0Q29kZSA9PT0gMDtcbiAgY29uc3Qgb3V0cHV0TGluZXMgPSBjbGVhbkNvbW1hbmRPdXRwdXQoc3RlcC5yZXN1bHQub3V0cHV0KS50cmltRW5kKCkuc3BsaXQoJ1xcbicpO1xuICBjb25zdCB0YWlsID0gb3V0cHV0TGluZXMuc2xpY2UoLU9VVFBVVF9UQUlMX0xJTkVTKS5qb2luKCdcXG4nKTtcbiAgY29uc3QgZmFpbHVyZUxpbmVzID0gaXNQYXNzZWQgPyBbXSA6IG91dHB1dExpbmVzLmZpbHRlcigobGluZSkgPT4gRkFJTFVSRV9MSU5FX1JFR19FWFAudGVzdChsaW5lKSkuc2xpY2UoMCwgRkFJTFVSRV9MSU5FX0xJTUlUKTtcbiAgcmV0dXJuIFtcbiAgICBgIyMjICR7aGVhZGluZ31gLFxuICAgICcnLFxuICAgIGBcXGAke3N0ZXAuY29tbWFuZH1cXGA6ICR7aXNQYXNzZWQgPyAncGFzc2VkJyA6IGAqKkZBSUxFRCoqIChleGl0ICR7U3RyaW5nKHN0ZXAucmVzdWx0LmV4aXRDb2RlKX0pYH0uYCxcbiAgICAnJyxcbiAgICAuLi4oZmFpbHVyZUxpbmVzLmxlbmd0aCA9PT0gMCA/IFtdIDogWydMaW5lcyByZXBvcnRpbmcgdGhlIGZhaWx1cmU6JywgJycsICdgYGB0ZXh0JywgLi4uZmFpbHVyZUxpbmVzLCAnYGBgJywgJyddKSxcbiAgICBpc1Bhc3NlZCA/ICc8ZGV0YWlscz48c3VtbWFyeT5PdXRwdXQ8L3N1bW1hcnk+JyA6ICc8ZGV0YWlscyBvcGVuPjxzdW1tYXJ5Pk91dHB1dDwvc3VtbWFyeT4nLFxuICAgICcnLFxuICAgICdgYGB0ZXh0JyxcbiAgICB0YWlsLFxuICAgICdgYGAnLFxuICAgICcnLFxuICAgICc8L2RldGFpbHM+JyxcbiAgICAnJ1xuICBdO1xufVxuXG5mdW5jdGlvbiBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMsIGZpbGU6IHN0cmluZywgYXJndW1lbnRzXzogcmVhZG9ubHkgc3RyaW5nW10pOiBzdHJpbmcge1xuICBjb25zdCByZXN1bHQgPSBkZXBlbmRlbmNpZXMuZXhlYyhmaWxlLCBhcmd1bWVudHNfKTtcbiAgaWYgKHJlc3VsdC5leGl0Q29kZSAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgJHtmaWxlfSAke2FyZ3VtZW50c18uam9pbignICcpfSBmYWlsZWQgKGV4aXQgJHtTdHJpbmcocmVzdWx0LmV4aXRDb2RlKX0pOiAke3Jlc3VsdC5vdXRwdXQudHJpbSgpfWApO1xuICB9XG4gIHJldHVybiByZXN1bHQub3V0cHV0O1xufVxuXG5mdW5jdGlvbiBmaW5kT3BlblByKGRlcGVuZGVuY2llczogU3luY0RlcGVuZGVuY2llcywgYnJhbmNoOiBzdHJpbmcpOiBudWxsIHwgc3RyaW5nIHtcbiAgY29uc3QgJG51bWJlciA9IGV4ZWNPclRocm93KGRlcGVuZGVuY2llcywgJ2doJywgWydwcicsICdsaXN0JywgJy0taGVhZCcsIGJyYW5jaCwgJy0tc3RhdGUnLCAnb3BlbicsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLlswXS5udW1iZXInXSkudHJpbSgpO1xuICByZXR1cm4gJG51bWJlciA9PT0gJycgfHwgJG51bWJlciA9PT0gJ251bGwnID8gbnVsbCA6ICRudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGlzR2l0VXBzdHJlYW0oZW50cnk6IFVwc3RyZWFtRW50cnkpOiBlbnRyeSBpcyBHaXRVcHN0cmVhbUVudHJ5IHtcbiAgcmV0dXJuICdyZXBvJyBpbiBlbnRyeTtcbn1cblxuZnVuY3Rpb24gc2hvcnRlbihoZWFkOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gL15bMC05YS1mXXs0MH0kLy50ZXN0KGhlYWQpID8gaGVhZC5zbGljZSgwLCBTSE9SVF9TSEFfTEVOR1RIKSA6IGhlYWQ7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN5bmNFbnRyeShlbnRyeTogVXBzdHJlYW1FbnRyeSwgY29uZmlnOiBVcHN0cmVhbXNDb25maWcsIG9wdGlvbnM6IFN5bmNVcHN0cmVhbXNPcHRpb25zLCBkZXBlbmRlbmNpZXM6IFN5bmNEZXBlbmRlbmNpZXMpOiBQcm9taXNlPFN5bmNSZXN1bHQ+IHtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgY29tcGFyZVdpdGhVcHN0cmVhbShlbnRyeSwgZGVwZW5kZW5jaWVzKTtcbiAgaWYgKHN0YXR1cy5zdGF0ZSA9PT0gJ2N1cnJlbnQnKSB7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhgJHtlbnRyeS5uYW1lfTogY3VycmVudCBhdCAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfS5gKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAnY3VycmVudCcgfTtcbiAgfVxuICBpZiAoc3RhdHVzLnN0YXRlID09PSAndW53YXRjaGVkJykge1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG1vdmVkIHRvICR7c2hvcnRlbihzdGF0dXMuaGVhZCl9LCBidXQgbm8gd2F0Y2hlZCBwYXRoIGNoYW5nZWQgc2luY2UgJHtzaG9ydGVuKHN0YXR1cy5waW4pfS5gKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAndW53YXRjaGVkJyB9O1xuICB9XG5cbiAgY29uc3QgcGxhbiA9IHBsYW5TeW5jKHN0YXR1cyk7XG4gIGlmIChvcHRpb25zLmRyeVJ1bikge1xuICAgIGRlcGVuZGVuY2llcy5sb2coYCR7ZW50cnkubmFtZX06IG1vdmVkIGZyb20gJHtzaG9ydGVuKHN0YXR1cy5waW4pfSB0byAke3Nob3J0ZW4oc3RhdHVzLmhlYWQpfS4gV291bGQgcHVzaCAke3BsYW4uYnJhbmNofSBhbmQgb3BlbjpgKTtcbiAgICBkZXBlbmRlbmNpZXMubG9nKGAgIHRpdGxlOiAke3BsYW4udGl0bGV9YCk7XG4gICAgZGVwZW5kZW5jaWVzLmxvZyhidWlsZFByQm9keShwbGFuLCBudWxsLCBudWxsKS5yZXBsYWNlQWxsKC9eL2dtLCAnICB8ICcpKTtcbiAgICByZXR1cm4geyBuYW1lOiBlbnRyeS5uYW1lLCBvdXRjb21lOiAncGxhbm5lZCcgfTtcbiAgfVxuXG4gIC8vIFRoZSB1cGRhdGUgY29tbWl0IHRha2VzIGV2ZXJ5IGZpbGUgaW4gdGhlIHRyZWUsIHNvIGEgZmlsZSBsZWZ0IGx5aW5nIGFyb3VuZCB3b3VsZCBiZSBwdXNoZWQgd2l0aCBpdC5cbiAgY29uc3QgZGlydHkgPSBleGVjT3JUaHJvdyhkZXBlbmRlbmNpZXMsICdnaXQnLCBbJ3N0YXR1cycsICctLXBvcmNlbGFpbiddKS50cmltKCk7XG4gIGlmIChkaXJ0eSAhPT0gJycpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYHRoZSB3b3JraW5nIHRyZWUgaXMgbm90IGNsZWFuLCBhbmQgdGhlIHVwZGF0ZSBjb21taXQgd291bGQgdGFrZSB0aGVzZSBmaWxlcyB3aXRoIGl0OlxcbiR7ZGlydHl9YCk7XG4gIH1cbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydmZXRjaCcsICdvcmlnaW4nLCBvcHRpb25zLmJhc2VCcmFuY2hdKTtcbiAgZXhlY09yVGhyb3coZGVwZW5kZW5jaWVzLCAnZ2l0JywgWydjaGVja291dCcsICctQicsIHBsYW4uYnJhbmNoLCBgb3JpZ2luLyR7b3B0aW9ucy5iYXNlQnJhbmNofWBdKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXBwbHlQbGFuKHBsYW4sIGNvbmZpZywgb3B0aW9ucywgZGVwZW5kZW5jaWVzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBkZXBlbmRlbmNpZXMuZXhlYygnZ2l0JywgWydjaGVja291dCcsICctLWZvcmNlJywgb3B0aW9ucy5iYXNlQnJhbmNoXSk7XG4gICAgZGVwZW5kZW5jaWVzLmV4ZWMoJ2dpdCcsIFsnYnJhbmNoJywgJy0tZGVsZXRlJywgJy0tZm9yY2UnLCBwbGFuLmJyYW5jaF0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvTGFzdExpbmVTdGF0ZShsaW5lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzdGF0ZXMgPSBsaW5lLnJlcGxhY2UoL1xcciskLywgJycpO1xuICByZXR1cm4gc3RhdGVzLnNsaWNlKHN0YXRlcy5sYXN0SW5kZXhPZignXFxyJykgKyAxKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7O0FBU0E7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLE9BQ0s7QUFDUCxTQUFTLG1CQUFtQjtBQTJONUIsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSxtQkFBbUI7QUFLekIsTUFBTSxvQkFBb0I7QUFLMUIsTUFBTSxxQkFBcUI7QUFFM0IsTUFBTSxxQkFBcUI7QUFNM0IsTUFBTSxNQUFNLE9BQU87QUFPbkIsTUFBTSwyQkFBMkIsSUFBSTtBQUFBLEVBQ25DLE9BQU8sTUFBTSxHQUFHLHVCQUF1QixHQUFHLG9DQUFvQyxH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
@@ -0,0 +1,6 @@
1
+ {
2
+ "main": "../../../dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.cjs",
3
+ "module": "../../../dist/lib/esm/linters/eslint-rules/no-keyword-identifiers.mjs",
4
+ "type": "module",
5
+ "types": "../../../dist/lib/cjs/linters/eslint-rules/no-keyword-identifiers.d.cts"
6
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mnaoumov/typescript-dev-toolkit",
3
- "version": "4.0.0",
3
+ "version": "5.0.0",
4
4
  "description": "Generic TypeScript project tooling: build, lint, format, spellcheck, test, gate and release scripts.",
5
5
  "keywords": [
6
6
  "typescript",