@mnaoumov/typescript-dev-toolkit 2.1.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/cjs/docs-site/api-doc-documented-files.cjs +51 -0
- package/dist/lib/cjs/docs-site/api-doc-documented-files.d.cts +31 -0
- package/dist/lib/cjs/docs-site/api-doc-package-sites.cjs +3 -2
- package/dist/lib/cjs/docs-site/api-doc-package-sites.d.cts +2 -1
- package/dist/lib/cjs/docs-site/api-doc-source-processing.cjs +4 -7
- package/dist/lib/cjs/docs-site/index.cjs +4 -1
- package/dist/lib/cjs/docs-site/index.d.cts +1 -0
- package/dist/lib/cjs/exec.cjs +18 -14
- package/dist/lib/cjs/exec.d.cts +31 -0
- package/dist/lib/cjs/linters/eslint-config.cjs +59 -29
- package/dist/lib/cjs/linters/eslint-rules/in-house-plugin.cjs +3 -1
- package/dist/lib/cjs/linters/eslint-rules/index.cjs +4 -1
- package/dist/lib/cjs/linters/eslint-rules/index.d.cts +1 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-logical-operator-over-ternary.cjs +170 -0
- package/dist/lib/cjs/linters/eslint-rules/prefer-logical-operator-over-ternary.d.cts +30 -0
- package/dist/lib/cjs/nano-staged-config.cjs +42 -3
- package/dist/lib/cjs/nano-staged-config.d.cts +24 -4
- package/dist/lib/esm/docs-site/api-doc-documented-files.d.mts +31 -0
- package/dist/lib/esm/docs-site/api-doc-documented-files.mjs +25 -0
- package/dist/lib/esm/docs-site/api-doc-package-sites.d.mts +2 -1
- package/dist/lib/esm/docs-site/api-doc-package-sites.mjs +3 -2
- package/dist/lib/esm/docs-site/api-doc-source-processing.mjs +7 -7
- package/dist/lib/esm/docs-site/index.d.mts +1 -0
- package/dist/lib/esm/docs-site/index.mjs +3 -1
- package/dist/lib/esm/exec.d.mts +31 -0
- package/dist/lib/esm/exec.mjs +15 -13
- package/dist/lib/esm/linters/eslint-config.mjs +59 -29
- package/dist/lib/esm/linters/eslint-rules/in-house-plugin.mjs +3 -1
- package/dist/lib/esm/linters/eslint-rules/index.d.mts +1 -0
- package/dist/lib/esm/linters/eslint-rules/index.mjs +3 -1
- package/dist/lib/esm/linters/eslint-rules/prefer-logical-operator-over-ternary.d.mts +30 -0
- package/dist/lib/esm/linters/eslint-rules/prefer-logical-operator-over-ternary.mjs +134 -0
- package/dist/lib/esm/nano-staged-config.d.mts +24 -4
- package/dist/lib/esm/nano-staged-config.mjs +48 -3
- package/docs-site/api-doc-documented-files/package.json +6 -0
- package/linters/eslint-rules/prefer-logical-operator-over-ternary/package.json +6 -0
- package/package.json +1 -1
|
@@ -0,0 +1,170 @@
|
|
|
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
|
+
"use strict";
|
|
40
|
+
var __create = Object.create;
|
|
41
|
+
var __defProp = Object.defineProperty;
|
|
42
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
43
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
44
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
45
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
46
|
+
var __export = (target, all) => {
|
|
47
|
+
for (var name in all)
|
|
48
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
49
|
+
};
|
|
50
|
+
var __copyProps = (to, from, except, desc) => {
|
|
51
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
52
|
+
for (let key of __getOwnPropNames(from))
|
|
53
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
54
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
55
|
+
}
|
|
56
|
+
return to;
|
|
57
|
+
};
|
|
58
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
59
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
60
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
61
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
62
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
63
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
64
|
+
mod
|
|
65
|
+
));
|
|
66
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
67
|
+
var prefer_logical_operator_over_ternary_exports = {};
|
|
68
|
+
__export(prefer_logical_operator_over_ternary_exports, {
|
|
69
|
+
MESSAGE_ID: () => MESSAGE_ID,
|
|
70
|
+
UNICORN_RULE_NAME: () => UNICORN_RULE_NAME,
|
|
71
|
+
preferLogicalOperatorOverTernary: () => preferLogicalOperatorOverTernary
|
|
72
|
+
});
|
|
73
|
+
module.exports = __toCommonJS(prefer_logical_operator_over_ternary_exports);
|
|
74
|
+
var import_eslint_plugin_unicorn = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('eslint-plugin-unicorn')), 1);
|
|
75
|
+
const UNICORN_RULE_NAME = "prefer-logical-operator-over-ternary";
|
|
76
|
+
const MESSAGE_ID = "prefer-logical-operator-over-ternary/error";
|
|
77
|
+
const unicornRule = getUnicornRule();
|
|
78
|
+
const preferLogicalOperatorOverTernary = {
|
|
79
|
+
create(context) {
|
|
80
|
+
const reportingContext = Object.create(context, {
|
|
81
|
+
report: {
|
|
82
|
+
value(descriptor) {
|
|
83
|
+
context.report(withLiteralBranchFix(descriptor, context.sourceCode));
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return unicornRule.create(reportingContext);
|
|
88
|
+
},
|
|
89
|
+
meta: {
|
|
90
|
+
...unicornRule.meta,
|
|
91
|
+
docs: {
|
|
92
|
+
description: "Prefer a logical operator over a ternary, fixing a boolean literal branch in TypeScript too"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
};
|
|
96
|
+
function getBooleanLiteralValue(node) {
|
|
97
|
+
return node.type === "Literal" && typeof node.value === "boolean" ? node.value : void 0;
|
|
98
|
+
}
|
|
99
|
+
function getUnicornRule() {
|
|
100
|
+
const rule = import_eslint_plugin_unicorn.default.rules?.[UNICORN_RULE_NAME];
|
|
101
|
+
if (!rule || typeof rule === "function") {
|
|
102
|
+
throw new Error(`eslint-plugin-unicorn no longer defines the ${UNICORN_RULE_NAME} rule.`);
|
|
103
|
+
}
|
|
104
|
+
return rule;
|
|
105
|
+
}
|
|
106
|
+
function needsParentheses(node, operator) {
|
|
107
|
+
switch (node.type) {
|
|
108
|
+
case "ArrayExpression":
|
|
109
|
+
case "AwaitExpression":
|
|
110
|
+
case "CallExpression":
|
|
111
|
+
case "ChainExpression":
|
|
112
|
+
case "Identifier":
|
|
113
|
+
case "Literal":
|
|
114
|
+
case "MemberExpression":
|
|
115
|
+
case "NewExpression":
|
|
116
|
+
case "ObjectExpression":
|
|
117
|
+
case "TaggedTemplateExpression":
|
|
118
|
+
case "TemplateLiteral":
|
|
119
|
+
case "ThisExpression":
|
|
120
|
+
case "UnaryExpression": {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
case "BinaryExpression": {
|
|
124
|
+
return operator === "!";
|
|
125
|
+
}
|
|
126
|
+
case "LogicalExpression": {
|
|
127
|
+
return operator === "!" || node.operator === "??" || operator === "&&" && node.operator === "||";
|
|
128
|
+
}
|
|
129
|
+
default: {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
function toOperandText(node, operator, sourceCode) {
|
|
135
|
+
const text = sourceCode.getText(node);
|
|
136
|
+
return needsParentheses(node, operator) ? `(${text})` : text;
|
|
137
|
+
}
|
|
138
|
+
function withLiteralBranchFix(descriptor, sourceCode) {
|
|
139
|
+
const { fix, messageId, node, suggest } = descriptor;
|
|
140
|
+
if (messageId !== MESSAGE_ID || fix || suggest) {
|
|
141
|
+
return descriptor;
|
|
142
|
+
}
|
|
143
|
+
const conditionalExpression = node;
|
|
144
|
+
const { alternate, consequent, test } = conditionalExpression;
|
|
145
|
+
const consequentValue = getBooleanLiteralValue(consequent);
|
|
146
|
+
const alternateValue = getBooleanLiteralValue(alternate);
|
|
147
|
+
const literalValue = consequentValue ?? alternateValue;
|
|
148
|
+
if (literalValue === void 0 || consequentValue !== void 0 && alternateValue !== void 0 || sourceCode.getCommentsInside(conditionalExpression).length > 0) {
|
|
149
|
+
return descriptor;
|
|
150
|
+
}
|
|
151
|
+
const isConsequentLiteral = consequentValue !== void 0;
|
|
152
|
+
const other = isConsequentLiteral ? alternate : consequent;
|
|
153
|
+
const shouldNegateTest = isConsequentLiteral !== literalValue;
|
|
154
|
+
const operator = literalValue ? "||" : "&&";
|
|
155
|
+
const testText = shouldNegateTest ? `!${toOperandText(test, "!", sourceCode)}` : toOperandText(test, operator, sourceCode);
|
|
156
|
+
const otherText = toOperandText(other, operator, sourceCode);
|
|
157
|
+
return {
|
|
158
|
+
...descriptor,
|
|
159
|
+
fix(fixer) {
|
|
160
|
+
return fixer.replaceText(conditionalExpression, `${testText} ${operator} ${otherText}`);
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
165
|
+
0 && (module.exports = {
|
|
166
|
+
MESSAGE_ID,
|
|
167
|
+
UNICORN_RULE_NAME,
|
|
168
|
+
preferLogicalOperatorOverTernary
|
|
169
|
+
});
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIEVTTGludCBydWxlOiBwcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnlcbiAqXG4gKiBgdW5pY29ybi9wcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnlgLCB3aXRoIHRoZSBmaXggaXQgd2l0aGhvbGRzIGluIGEgVHlwZVNjcmlwdCBmaWxlLlxuICpcbiAqIFVuaWNvcm4gcmVwb3J0cyBhIHRlcm5hcnkgd2l0aCBvbmUgYm9vbGVhbiBicmFuY2ggKGBhID8gZmFsc2UgOiBiYCkgYW5kIGZpeGVzIGl0IHRvIGEgbG9naWNhbCBleHByZXNzaW9uXG4gKiAoYCFhICYmIGJgKSwgYnV0IG9ubHkgb3V0c2lkZSBUeXBlU2NyaXB0LiBgdW5pY29ybi9wcmVmZXItdGVybmFyeWAgZml4ZXMgYGlmIChhKSB7IHJldHVybiBmYWxzZTsgfSByZXR1cm4gYjtgIGludG9cbiAqIGV4YWN0bHkgdGhhdCB0ZXJuYXJ5LCBzbyBpbiBhIFR5cGVTY3JpcHQgZmlsZSBgbGludDpmaXhgIHByb2R1Y2VkIGFuIGVycm9yIGl0IHRoZW4gY291bGQgbm90IGZpeCwgYW5kIGV2ZXJ5IHNpdGVcbiAqIGhhZCB0byBiZSByZXdyaXR0ZW4gYnkgaGFuZC4gVGhpcyBydWxlIHJlcG9ydHMgd2hhdCB1bmljb3JuIHJlcG9ydHMgYW5kIGFkZHMgdGhlIGZpeCB3aGVyZSBvbmUgYnJhbmNoIGlzIGEgYm9vbGVhblxuICogbGl0ZXJhbC4gVGhlIHJld3JpdGUgaXMgZXhhY3QgYXQgcnVudGltZTogd2l0aCBhIG5lZ2F0ZWQgdGVzdCAoYGEgPyBmYWxzZSA6IGJgIOKGkiBgIWEgJiYgYmAsIGBhID8gYiA6IHRydWVgIOKGklxuICogYCFhIHx8IGJgKSBmb3IgYW55IHRlc3QsIGFuZCBvdGhlcndpc2UgKGBhID8gdHJ1ZSA6IGJgIOKGkiBgYSB8fCBiYCwgYGEgPyBiIDogZmFsc2VgIOKGkiBgYSAmJiBiYCkgYmVjYXVzZSB1bmljb3JuXG4gKiByZXBvcnRzIHRoYXQgc2hhcGUgb25seSBmb3IgYSB0ZXN0IGl0IGhhcyBwcm92ZW4gYm9vbGVhbi5cbiAqL1xuXG5pbXBvcnQgdHlwZSB7IFJ1bGUgfSBmcm9tICdlc2xpbnQnO1xuaW1wb3J0IHR5cGUge1xuICBDb25kaXRpb25hbEV4cHJlc3Npb24sXG4gIEV4cHJlc3Npb24sXG4gIE5vZGVcbn0gZnJvbSAnZXN0cmVlJztcblxuaW1wb3J0IGVzbGludFBsdWdpblVuaWNvcm4gZnJvbSAnZXNsaW50LXBsdWdpbi11bmljb3JuJztcblxuLyoqXG4gKiBUaGUgaWQgb2YgdGhlIHVuaWNvcm4gcnVsZSB0aGlzIHJ1bGUgZGVsZWdhdGVzIHRvLCBpbnNpZGUgdGhlIGB1bmljb3JuYCBuYW1lc3BhY2UuXG4gKi9cbmV4cG9ydCBjb25zdCBVTklDT1JOX1JVTEVfTkFNRSA9ICdwcmVmZXItbG9naWNhbC1vcGVyYXRvci1vdmVyLXRlcm5hcnknO1xuXG4vKipcbiAqIFRoZSBtZXNzYWdlIGlkIHVuaWNvcm4gcmVwb3J0cyBhIHRlcm5hcnkgdW5kZXIgd2hlbiBhIGxvZ2ljYWwgb3BlcmF0b3IgY291bGQgcmVwbGFjZSBpdC5cbiAqL1xuZXhwb3J0IGNvbnN0IE1FU1NBR0VfSUQgPSAncHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5L2Vycm9yJztcblxudHlwZSBMb2dpY2FsT3BlcmF0b3IgPSAnJiYnIHwgJ3x8JztcblxudHlwZSBVbmljb3JuUmVwb3J0RGVzY3JpcHRvciA9IFJ1bGUuUmVwb3J0RGVzY3JpcHRvck9wdGlvbnMgJiBVbmljb3JuUmVwb3J0RGVzY3JpcHRvckZpZWxkcztcblxuaW50ZXJmYWNlIFVuaWNvcm5SZXBvcnREZXNjcmlwdG9yRmllbGRzIHtcbiAgcmVhZG9ubHkgbWVzc2FnZUlkPzogc3RyaW5nO1xuICByZWFkb25seSBub2RlOiBOb2RlO1xufVxuXG5jb25zdCB1bmljb3JuUnVsZSA9IGdldFVuaWNvcm5SdWxlKCk7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcmVwb3J0aW5nIHdoYXQgYHVuaWNvcm4vcHJlZmVyLWxvZ2ljYWwtb3BlcmF0b3Itb3Zlci10ZXJuYXJ5YCByZXBvcnRzLCBmaXhpbmcgYSB0ZXJuYXJ5IHdpdGggYSBib29sZWFuXG4gKiBsaXRlcmFsIGJyYW5jaCBpbiBhIFR5cGVTY3JpcHQgZmlsZSB0b28uXG4gKi9cbmV4cG9ydCBjb25zdCBwcmVmZXJMb2dpY2FsT3BlcmF0b3JPdmVyVGVybmFyeTogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IHJlcG9ydGluZ0NvbnRleHQ6IFJ1bGUuUnVsZUNvbnRleHQgPSBPYmplY3QuY3JlYXRlKGNvbnRleHQsIHtcbiAgICAgIHJlcG9ydDoge1xuICAgICAgICB2YWx1ZShkZXNjcmlwdG9yOiBSdWxlLlJlcG9ydERlc2NyaXB0b3IpOiB2b2lkIHtcbiAgICAgICAgICBjb250ZXh0LnJlcG9ydCh3aXRoTGl0ZXJhbEJyYW5jaEZpeChkZXNjcmlwdG9yLCBjb250ZXh0LnNvdXJjZUNvZGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHVuaWNvcm5SdWxlLmNyZWF0ZShyZXBvcnRpbmdDb250ZXh0KTtcbiAgfSxcbiAgbWV0YToge1xuICAgIC4uLnVuaWNvcm5SdWxlLm1ldGEsXG4gICAgZG9jczoge1xuICAgICAgZGVzY3JpcHRpb246ICdQcmVmZXIgYSBsb2dpY2FsIG9wZXJhdG9yIG92ZXIgYSB0ZXJuYXJ5LCBmaXhpbmcgYSBib29sZWFuIGxpdGVyYWwgYnJhbmNoIGluIFR5cGVTY3JpcHQgdG9vJ1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gZ2V0Qm9vbGVhbkxpdGVyYWxWYWx1ZShub2RlOiBOb2RlKTogYm9vbGVhbiB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBub2RlLnR5cGUgPT09ICdMaXRlcmFsJyAmJiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ2Jvb2xlYW4nID8gbm9kZS52YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZ2V0VW5pY29yblJ1bGUoKTogUnVsZS5SdWxlTW9kdWxlIHtcbiAgY29uc3QgcnVsZSA9IGVzbGludFBsdWdpblVuaWNvcm4ucnVsZXM/LltVTklDT1JOX1JVTEVfTkFNRV07XG5cbiAgLyogdjggaWdub3JlIHN0YXJ0IC0tIEd1YXJkcyBhbiB1cGdyYWRlIG9mIGVzbGludC1wbHVnaW4tdW5pY29ybiB0aGF0IGRyb3BzIG9yIHJlbmFtZXMgdGhlIHJ1bGUuICovXG4gIGlmICghcnVsZSB8fCB0eXBlb2YgcnVsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgZXNsaW50LXBsdWdpbi11bmljb3JuIG5vIGxvbmdlciBkZWZpbmVzIHRoZSAke1VOSUNPUk5fUlVMRV9OQU1FfSBydWxlLmApO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBzdG9wICovXG5cbiAgcmV0dXJuIHJ1bGU7XG59XG5cbmZ1bmN0aW9uIG5lZWRzUGFyZW50aGVzZXMobm9kZTogRXhwcmVzc2lvbiwgb3BlcmF0b3I6ICchJyB8IExvZ2ljYWxPcGVyYXRvcik6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgIGNhc2UgJ0FycmF5RXhwcmVzc2lvbic6XG4gICAgY2FzZSAnQXdhaXRFeHByZXNzaW9uJzpcbiAgICBjYXNlICdDYWxsRXhwcmVzc2lvbic6XG4gICAgY2FzZSAnQ2hhaW5FeHByZXNzaW9uJzpcbiAgICBjYXNlICdJZGVudGlmaWVyJzpcbiAgICBjYXNlICdMaXRlcmFsJzpcbiAgICBjYXNlICdNZW1iZXJFeHByZXNzaW9uJzpcbiAgICBjYXNlICdOZXdFeHByZXNzaW9uJzpcbiAgICBjYXNlICdPYmplY3RFeHByZXNzaW9uJzpcbiAgICBjYXNlICdUYWdnZWRUZW1wbGF0ZUV4cHJlc3Npb24nOlxuICAgIGNhc2UgJ1RlbXBsYXRlTGl0ZXJhbCc6XG4gICAgY2FzZSAnVGhpc0V4cHJlc3Npb24nOlxuICAgIGNhc2UgJ1VuYXJ5RXhwcmVzc2lvbic6IHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY2FzZSAnQmluYXJ5RXhwcmVzc2lvbic6IHtcbiAgICAgIHJldHVybiBvcGVyYXRvciA9PT0gJyEnO1xuICAgIH1cbiAgICBjYXNlICdMb2dpY2FsRXhwcmVzc2lvbic6IHtcbiAgICAgIHJldHVybiBvcGVyYXRvciA9PT0gJyEnIHx8IG5vZGUub3BlcmF0b3IgPT09ICc/PycgfHwgKG9wZXJhdG9yID09PSAnJiYnICYmIG5vZGUub3BlcmF0b3IgPT09ICd8fCcpO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9PcGVyYW5kVGV4dChub2RlOiBFeHByZXNzaW9uLCBvcGVyYXRvcjogJyEnIHwgTG9naWNhbE9wZXJhdG9yLCBzb3VyY2VDb2RlOiBSdWxlLlJ1bGVDb250ZXh0Wydzb3VyY2VDb2RlJ10pOiBzdHJpbmcge1xuICBjb25zdCB0ZXh0ID0gc291cmNlQ29kZS5nZXRUZXh0KG5vZGUpO1xuICByZXR1cm4gbmVlZHNQYXJlbnRoZXNlcyhub2RlLCBvcGVyYXRvcikgPyBgKCR7dGV4dH0pYCA6IHRleHQ7XG59XG5cbmZ1bmN0aW9uIHdpdGhMaXRlcmFsQnJhbmNoRml4KGRlc2NyaXB0b3I6IFJ1bGUuUmVwb3J0RGVzY3JpcHRvciwgc291cmNlQ29kZTogUnVsZS5SdWxlQ29udGV4dFsnc291cmNlQ29kZSddKTogUnVsZS5SZXBvcnREZXNjcmlwdG9yIHtcbiAgY29uc3QgeyBmaXgsIG1lc3NhZ2VJZCwgbm9kZSwgc3VnZ2VzdCB9ID0gZGVzY3JpcHRvciBhcyBVbmljb3JuUmVwb3J0RGVzY3JpcHRvcjtcblxuICAvLyBVbmljb3JuIGZpeGVzIHRoZSBzaGFwZSBpdHNlbGYgb3V0c2lkZSBUeXBlU2NyaXB0LCBhbmQgb2ZmZXJzIHN1Z2dlc3Rpb25zIGZvciB0aGUgc2hhcGVzIGl0IGNhbm5vdCBmaXguXG4gIGlmIChtZXNzYWdlSWQgIT09IE1FU1NBR0VfSUQgfHwgZml4IHx8IHN1Z2dlc3QpIHtcbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfVxuXG4gIC8vIFVuaWNvcm4gcmVwb3J0cyB0aGlzIG1lc3NhZ2Ugb24gdGhlIHRlcm5hcnkgaXRzZWxmLlxuICBjb25zdCBjb25kaXRpb25hbEV4cHJlc3Npb24gPSBub2RlIGFzIENvbmRpdGlvbmFsRXhwcmVzc2lvbjtcbiAgY29uc3QgeyBhbHRlcm5hdGUsIGNvbnNlcXVlbnQsIHRlc3QgfSA9IGNvbmRpdGlvbmFsRXhwcmVzc2lvbjtcbiAgY29uc3QgY29uc2VxdWVudFZhbHVlID0gZ2V0Qm9vbGVhbkxpdGVyYWxWYWx1ZShjb25zZXF1ZW50KTtcbiAgY29uc3QgYWx0ZXJuYXRlVmFsdWUgPSBnZXRCb29sZWFuTGl0ZXJhbFZhbHVlKGFsdGVybmF0ZSk7XG4gIGNvbnN0IGxpdGVyYWxWYWx1ZSA9IGNvbnNlcXVlbnRWYWx1ZSA/PyBhbHRlcm5hdGVWYWx1ZTtcblxuICBpZiAoXG4gICAgbGl0ZXJhbFZhbHVlID09PSB1bmRlZmluZWRcbiAgICB8fCAoY29uc2VxdWVudFZhbHVlICE9PSB1bmRlZmluZWQgJiYgYWx0ZXJuYXRlVmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICB8fCBzb3VyY2VDb2RlLmdldENvbW1lbnRzSW5zaWRlKGNvbmRpdGlvbmFsRXhwcmVzc2lvbikubGVuZ3RoID4gMFxuICApIHtcbiAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgfVxuXG4gIGNvbnN0IGlzQ29uc2VxdWVudExpdGVyYWwgPSBjb25zZXF1ZW50VmFsdWUgIT09IHVuZGVmaW5lZDtcbiAgY29uc3Qgb3RoZXIgPSBpc0NvbnNlcXVlbnRMaXRlcmFsID8gYWx0ZXJuYXRlIDogY29uc2VxdWVudDtcbiAgY29uc3Qgc2hvdWxkTmVnYXRlVGVzdCA9IGlzQ29uc2VxdWVudExpdGVyYWwgIT09IGxpdGVyYWxWYWx1ZTtcbiAgY29uc3Qgb3BlcmF0b3I6IExvZ2ljYWxPcGVyYXRvciA9IGxpdGVyYWxWYWx1ZSA/ICd8fCcgOiAnJiYnO1xuICBjb25zdCB0ZXN0VGV4dCA9IHNob3VsZE5lZ2F0ZVRlc3QgPyBgISR7dG9PcGVyYW5kVGV4dCh0ZXN0LCAnIScsIHNvdXJjZUNvZGUpfWAgOiB0b09wZXJhbmRUZXh0KHRlc3QsIG9wZXJhdG9yLCBzb3VyY2VDb2RlKTtcbiAgY29uc3Qgb3RoZXJUZXh0ID0gdG9PcGVyYW5kVGV4dChvdGhlciwgb3BlcmF0b3IsIHNvdXJjZUNvZGUpO1xuXG4gIHJldHVybiB7XG4gICAgLi4uZGVzY3JpcHRvcixcbiAgICBmaXgoZml4ZXIpOiBSdWxlLkZpeCB7XG4gICAgICByZXR1cm4gZml4ZXIucmVwbGFjZVRleHQoY29uZGl0aW9uYWxFeHByZXNzaW9uLCBgJHt0ZXN0VGV4dH0gJHtvcGVyYXRvcn0gJHtvdGhlclRleHR9YCk7XG4gICAgfVxuICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQXVCQSxtQ0FBZ0M7QUFLekIsTUFBTSxvQkFBb0I7QUFLMUIsTUFBTSxhQUFhO0FBVzFCLE1BQU0sY0FBYyxlQUFlO0FBTTVCLE1BQU0sbUNBQW9EO0FBQUEsRUFDL0QsT0FBTyxTQUFTO0FBQ2QsVUFBTSxtQkFBcUMsT0FBTyxPQUFPLFNBQVM7QUFBQSxNQUNoRSxRQUFRO0FBQUEsUUFDTixNQUFNLFlBQXlDO0FBQzdDLGtCQUFRLE9BQU8scUJBQXFCLFlBQVksUUFBUSxVQUFVLENBQUM7QUFBQSxRQUNyRTtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFFRCxXQUFPLFlBQVksT0FBTyxnQkFBZ0I7QUFBQSxFQUM1QztBQUFBLEVBQ0EsTUFBTTtBQUFBLElBQ0osR0FBRyxZQUFZO0FBQUEsSUFDZixNQUFNO0FBQUEsTUFDSixhQUFhO0FBQUEsSUFDZjtBQUFBLEVBQ0Y7QUFDRjtBQUVBLFNBQVMsdUJBQXVCLE1BQWlDO0FBQy9ELFNBQU8sS0FBSyxTQUFTLGFBQWEsT0FBTyxLQUFLLFVBQVUsWUFBWSxLQUFLLFFBQVE7QUFDbkY7QUFFQSxTQUFTLGlCQUFrQztBQUN6QyxRQUFNLE9BQU8sNkJBQUFBLFFBQW9CLFFBQVEsaUJBQWlCO0FBRzFELE1BQUksQ0FBQyxRQUFRLE9BQU8sU0FBUyxZQUFZO0FBQ3ZDLFVBQU0sSUFBSSxNQUFNLCtDQUErQyxpQkFBaUIsUUFBUTtBQUFBLEVBQzFGO0FBR0EsU0FBTztBQUNUO0FBRUEsU0FBUyxpQkFBaUIsTUFBa0IsVUFBMEM7QUFDcEYsVUFBUSxLQUFLLE1BQU07QUFBQSxJQUNqQixLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLLG1CQUFtQjtBQUN0QixhQUFPO0FBQUEsSUFDVDtBQUFBLElBQ0EsS0FBSyxvQkFBb0I7QUFDdkIsYUFBTyxhQUFhO0FBQUEsSUFDdEI7QUFBQSxJQUNBLEtBQUsscUJBQXFCO0FBQ3hCLGFBQU8sYUFBYSxPQUFPLEtBQUssYUFBYSxRQUFTLGFBQWEsUUFBUSxLQUFLLGFBQWE7QUFBQSxJQUMvRjtBQUFBLElBQ0EsU0FBUztBQUNQLGFBQU87QUFBQSxJQUNUO0FBQUEsRUFDRjtBQUNGO0FBRUEsU0FBUyxjQUFjLE1BQWtCLFVBQWlDLFlBQW9EO0FBQzVILFFBQU0sT0FBTyxXQUFXLFFBQVEsSUFBSTtBQUNwQyxTQUFPLGlCQUFpQixNQUFNLFFBQVEsSUFBSSxJQUFJLElBQUksTUFBTTtBQUMxRDtBQUVBLFNBQVMscUJBQXFCLFlBQW1DLFlBQW1FO0FBQ2xJLFFBQU0sRUFBRSxLQUFLLFdBQVcsTUFBTSxRQUFRLElBQUk7QUFHMUMsTUFBSSxjQUFjLGNBQWMsT0FBTyxTQUFTO0FBQzlDLFdBQU87QUFBQSxFQUNUO0FBR0EsUUFBTSx3QkFBd0I7QUFDOUIsUUFBTSxFQUFFLFdBQVcsWUFBWSxLQUFLLElBQUk7QUFDeEMsUUFBTSxrQkFBa0IsdUJBQXVCLFVBQVU7QUFDekQsUUFBTSxpQkFBaUIsdUJBQXVCLFNBQVM7QUFDdkQsUUFBTSxlQUFlLG1CQUFtQjtBQUV4QyxNQUNFLGlCQUFpQixVQUNiLG9CQUFvQixVQUFhLG1CQUFtQixVQUNyRCxXQUFXLGtCQUFrQixxQkFBcUIsRUFBRSxTQUFTLEdBQ2hFO0FBQ0EsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLHNCQUFzQixvQkFBb0I7QUFDaEQsUUFBTSxRQUFRLHNCQUFzQixZQUFZO0FBQ2hELFFBQU0sbUJBQW1CLHdCQUF3QjtBQUNqRCxRQUFNLFdBQTRCLGVBQWUsT0FBTztBQUN4RCxRQUFNLFdBQVcsbUJBQW1CLElBQUksY0FBYyxNQUFNLEtBQUssVUFBVSxDQUFDLEtBQUssY0FBYyxNQUFNLFVBQVUsVUFBVTtBQUN6SCxRQUFNLFlBQVksY0FBYyxPQUFPLFVBQVUsVUFBVTtBQUUzRCxTQUFPO0FBQUEsSUFDTCxHQUFHO0FBQUEsSUFDSCxJQUFJLE9BQWlCO0FBQ25CLGFBQU8sTUFBTSxZQUFZLHVCQUF1QixHQUFHLFFBQVEsSUFBSSxRQUFRLElBQUksU0FBUyxFQUFFO0FBQUEsSUFDeEY7QUFBQSxFQUNGO0FBQ0Y7IiwibmFtZXMiOlsiZXNsaW50UGx1Z2luVW5pY29ybiJdfQ==
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/// <reference path="../../library-references.d.cts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* ESLint rule: prefer-logical-operator-over-ternary
|
|
6
|
+
*
|
|
7
|
+
* `unicorn/prefer-logical-operator-over-ternary`, with the fix it withholds in a TypeScript file.
|
|
8
|
+
*
|
|
9
|
+
* Unicorn reports a ternary with one boolean branch (`a ? false : b`) and fixes it to a logical expression
|
|
10
|
+
* (`!a && b`), but only outside TypeScript. `unicorn/prefer-ternary` fixes `if (a) { return false; } return b;` into
|
|
11
|
+
* exactly that ternary, so in a TypeScript file `lint:fix` produced an error it then could not fix, and every site
|
|
12
|
+
* had to be rewritten by hand. This rule reports what unicorn reports and adds the fix where one branch is a boolean
|
|
13
|
+
* literal. The rewrite is exact at runtime: with a negated test (`a ? false : b` → `!a && b`, `a ? b : true` →
|
|
14
|
+
* `!a || b`) for any test, and otherwise (`a ? true : b` → `a || b`, `a ? b : false` → `a && b`) because unicorn
|
|
15
|
+
* reports that shape only for a test it has proven boolean.
|
|
16
|
+
*/
|
|
17
|
+
import type { Rule } from 'eslint' with { 'resolution-mode': 'import' };
|
|
18
|
+
/**
|
|
19
|
+
* The id of the unicorn rule this rule delegates to, inside the `unicorn` namespace.
|
|
20
|
+
*/
|
|
21
|
+
export declare const UNICORN_RULE_NAME = "prefer-logical-operator-over-ternary";
|
|
22
|
+
/**
|
|
23
|
+
* The message id unicorn reports a ternary under when a logical operator could replace it.
|
|
24
|
+
*/
|
|
25
|
+
export declare const MESSAGE_ID = "prefer-logical-operator-over-ternary/error";
|
|
26
|
+
/**
|
|
27
|
+
* ESLint rule reporting what `unicorn/prefer-logical-operator-over-ternary` reports, fixing a ternary with a boolean
|
|
28
|
+
* literal branch in a TypeScript file too.
|
|
29
|
+
*/
|
|
30
|
+
export declare const preferLogicalOperatorOverTernary: Rule.RuleModule;
|
|
@@ -37,11 +37,15 @@ __export(nano_staged_config_exports, {
|
|
|
37
37
|
obsidianDevUtilsConfig: () => obsidianDevUtilsConfig
|
|
38
38
|
});
|
|
39
39
|
module.exports = __toCommonJS(nano_staged_config_exports);
|
|
40
|
+
var import_node_path = require('node:path');
|
|
40
41
|
var import_node_process = __toESM(((module) => module && module.__esModule && 'default' in module ? module.default : module)(require('node:process')), 1);
|
|
41
42
|
var import_env_toggle = require('./env-toggle.cjs');
|
|
43
|
+
var import_exec = require('./exec.cjs');
|
|
42
44
|
var import_package_manager = require('./package-manager.cjs');
|
|
43
45
|
const PACKAGE_MANAGER_RUN_COMMAND = (0, import_package_manager.getPackageManagerRunCommand)().join(" ");
|
|
44
46
|
const SPELLCHECK_COMMAND = `${PACKAGE_MANAGER_RUN_COMMAND} spellcheck --`;
|
|
47
|
+
const EXECUTABLE_PATH_RESERVE = 260;
|
|
48
|
+
const TOKENIZER_UNSAFE_CHARACTERS_REG_EXP = /[\s"']/g;
|
|
45
49
|
const WRITER_TASKS = {
|
|
46
50
|
"*.{ts,tsx,mts}": [
|
|
47
51
|
`${PACKAGE_MANAGER_RUN_COMMAND} lint:fix --`,
|
|
@@ -70,6 +74,27 @@ function getNanoStagedConfig(options) {
|
|
|
70
74
|
}
|
|
71
75
|
return partitionSpellcheck({ ...WRITER_TASKS, ...additionalWriterTasks });
|
|
72
76
|
}
|
|
77
|
+
function batchCommandArguments(prefix, commandArguments) {
|
|
78
|
+
const emptyLength = (0, import_exec.getEffectiveCommandLineLength)("");
|
|
79
|
+
const budget = (0, import_exec.getMaxBatchCommandLength)() - EXECUTABLE_PATH_RESERVE - (0, import_exec.getEffectiveCommandLineLength)(prefix);
|
|
80
|
+
const batches = [];
|
|
81
|
+
let batch = [];
|
|
82
|
+
let batchLength = 0;
|
|
83
|
+
for (const commandArgument of commandArguments) {
|
|
84
|
+
const argumentLength = (0, import_exec.getEffectiveCommandLineLength)(` "${commandArgument}"`) - emptyLength;
|
|
85
|
+
if (batch.length > 0 && batchLength + argumentLength > budget) {
|
|
86
|
+
batches.push(batch);
|
|
87
|
+
batch = [];
|
|
88
|
+
batchLength = 0;
|
|
89
|
+
}
|
|
90
|
+
batch.push(commandArgument);
|
|
91
|
+
batchLength += argumentLength;
|
|
92
|
+
}
|
|
93
|
+
if (batch.length > 0) {
|
|
94
|
+
batches.push(batch);
|
|
95
|
+
}
|
|
96
|
+
return batches;
|
|
97
|
+
}
|
|
73
98
|
function partitionSpellcheck(writerTasks) {
|
|
74
99
|
const patterns = Object.keys(writerTasks);
|
|
75
100
|
const patternWithSlash = patterns.find((pattern) => pattern.includes("/"));
|
|
@@ -78,16 +103,30 @@ function partitionSpellcheck(writerTasks) {
|
|
|
78
103
|
}
|
|
79
104
|
const complementPattern = `!(${patterns.map((pattern) => `${pattern}!(?)`).join("|")})*`;
|
|
80
105
|
const config = {
|
|
81
|
-
[complementPattern]: [SPELLCHECK_COMMAND]
|
|
106
|
+
[complementPattern]: toBatchedTask([SPELLCHECK_COMMAND])
|
|
82
107
|
};
|
|
83
108
|
for (const [pattern, commands] of Object.entries(writerTasks)) {
|
|
84
|
-
config[pattern] = [...commands, SPELLCHECK_COMMAND];
|
|
109
|
+
config[pattern] = toBatchedTask([...commands, SPELLCHECK_COMMAND]);
|
|
85
110
|
}
|
|
86
111
|
return config;
|
|
87
112
|
}
|
|
113
|
+
function toBatchedTask(commands) {
|
|
114
|
+
return ({ filenames }) => {
|
|
115
|
+
const commandArguments = filenames.map((filename) => toCommandArgument(filename));
|
|
116
|
+
return commands.flatMap((command) => batchCommandArguments(command, commandArguments).map((batch) => `${command} ${batch.join(" ")}`));
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
function toCommandArgument(filename) {
|
|
120
|
+
const relativePath = (0, import_node_path.relative)(import_node_process.default.cwd(), filename);
|
|
121
|
+
let commandArgument = (relativePath.startsWith("..") || (0, import_node_path.isAbsolute)(relativePath) ? filename : relativePath).replaceAll("\\", "/");
|
|
122
|
+
if (commandArgument.startsWith("-")) {
|
|
123
|
+
commandArgument = `./${commandArgument}`;
|
|
124
|
+
}
|
|
125
|
+
return commandArgument.replaceAll(TOKENIZER_UNSAFE_CHARACTERS_REG_EXP, "?");
|
|
126
|
+
}
|
|
88
127
|
// Annotate the CommonJS export names for ESM import in node:
|
|
89
128
|
0 && (module.exports = {
|
|
90
129
|
getNanoStagedConfig,
|
|
91
130
|
obsidianDevUtilsConfig
|
|
92
131
|
});
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbm8tc3RhZ2VkLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIGZvciBwcmUtY29tbWl0IGhvb2tzLlxuICovXG5cbmltcG9ydCBwcm9jZXNzIGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5cbmltcG9ydCB7XG4gIGlzRW52VmFyaWFibGVPZmYsXG4gIGxvYWRFbnZGaWxlSWZFeGlzdHNcbn0gZnJvbSAnLi9lbnYtdG9nZ2xlLnRzJztcbmltcG9ydCB7IGdldFBhY2thZ2VNYW5hZ2VyUnVuQ29tbWFuZCB9IGZyb20gJy4vcGFja2FnZS1tYW5hZ2VyLnRzJztcblxuLyoqXG4gKiBPcHRpb25zIGZvciB7QGxpbmsgZ2V0TmFub1N0YWdlZENvbmZpZ30uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgR2V0TmFub1N0YWdlZENvbmZpZ09wdGlvbnMge1xuICAvKipcbiAgICogUmVwby1zcGVjaWZpYyBmaWxlLXJld3JpdGluZyB0YXNrcywga2V5ZWQgYnkgdGhlIG5hbm8tc3RhZ2VkIHBhdHRlcm4gdGhhdCBjbGFpbXMgdGhlaXIgZmlsZXMuXG4gICAqXG4gICAqIEVhY2ggZ2V0cyBzcGVsbGNoZWNrIGFwcGVuZGVkIGFuZCBpdHMgZmlsZXMgcmVtb3ZlZCBmcm9tIHRoZSBzcGVsbGNoZWNrLW9ubHkga2V5LCBleGFjdGx5IGxpa2UgdGhlIHNoYXJlZFxuICAgKiB3cml0ZXJzLiBBIHBhdHRlcm4gbXVzdCBub3QgY29udGFpbiBgL2AsIGFuZCBtdXN0IG5vdCByZXBlYXQgYSBzaGFyZWQgd3JpdGVyIHBhdHRlcm4uXG4gICAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsV3JpdGVyVGFza3M/OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+O1xufVxuXG4vKipcbiAqIFRoZSBgPG1hbmFnZXI+IHJ1bmAgcHJlZml4IGV2ZXJ5IHRhc2sgYmVsb3cgaXMgYnVpbHQgb24sIHJlc29sdmVkIG9uY2UgZm9yIHRoZSBwcm9jZXNzLlxuICpcbiAqIERldGVjdGlvbiBwcm9iZXMgZm9yIGEgbG9ja2ZpbGUgYmVzaWRlIGBwYWNrYWdlLmpzb25gLCBzbyBpdCBpcyBhIGhhbmRmdWwgb2YgYGV4aXN0c1N5bmNgIGNhbGxzIGFuZFxuICogbm90aGluZyBtb3JlIFx1MjAxNCBubyBgLmVudmAgcmVhZCBhbmQgbm8gYHByb2Nlc3MuZXhpdGAsIHdoaWNoIGlzIHdoYXQgbGV0cyBpdCBzaXQgYXQgbW9kdWxlIHNjb3BlLlxuICovXG5jb25zdCBQQUNLQUdFX01BTkFHRVJfUlVOX0NPTU1BTkQgPSBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoKS5qb2luKCcgJyk7XG5cbmNvbnN0IFNQRUxMQ0hFQ0tfQ09NTUFORCA9IGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gc3BlbGxjaGVjayAtLWA7XG5cbi8qKlxuICogVGhlIHRhc2tzIHRoYXQgUkVXUklURSBhIHN0YWdlZCBmaWxlLCBrZXllZCBieSB0aGUgbmFuby1zdGFnZWQgcGF0dGVybiB0aGF0IGNsYWltcyBpdC5cbiAqXG4gKiBgbGludDpmaXhgIGFuZCBgZm9ybWF0YCBib3RoIHJld3JpdGUgdGhlIGZpbGUsIHNvIHRoZXkgaGF2ZSB0byBzaGFyZSBvbmUga2V5OiBuYW5vLXN0YWdlZCBydW5zIGl0c1xuICogcGVyLXBhdHRlcm4gZ3JvdXBzIHVuZGVyIGBQcm9taXNlLmFsbGAgKGBydW4oKWAgaW4gYG5hbm8tc3RhZ2VkL2xpYi9jbWQtcnVubmVyLmpzYCksIGFuZCBzZXF1ZW5jZXMgb25seVxuICogdGhlIGNvbW1hbmRzIElOU0lERSBhIHNpbmdsZSBrZXkncyBhcnJheSAoYHJ1blRhc2soKWAsIGEgYGZvciAuLi4gb2YgYXdhaXRgKS4gU3BsaXQgYWNyb3NzIHR3byBrZXlzIHRoZXlcbiAqIHJhY2UsIHdoaWNoZXZlciBmaW5pc2hlcyBsYXN0IHdpbnMsIGFuZCB0aGUgY29tbWl0IHN0YWdlcyBieXRlcyB0aGF0IG5laXRoZXIgdG9vbCB3b3VsZCBoYXZlIHByb2R1Y2VkIG9uXG4gKiBpdHMgb3duLlxuICpcbiAqIFNvIGRvIE5PVCBleHByZXNzIGEgZGlyZWN0b3J5IGV4Y2x1c2lvbiBieSBnaXZpbmcgb25lIG9mIHRoZXNlIHR3byBpdHMgb3duIG5lZ2F0ZWQga2V5IC0tIHRoYXQgc2lsZW50bHlcbiAqIHRha2VzIHRoZSBvcmRlcmluZyBhd2F5LiBBbiBleGNsdXNpb24gYmVsb25ncyBpbiB0aGUgZXhjbHVkZWQgdG9vbCdzIG93biBjb25maWcsIHdoZXJlIEVTTGludCdzXG4gKiBgZ2xvYmFsSWdub3Jlc2AgYWxyZWFkeSBwdXRzIGl0OiBhIHBhdGggRVNMaW50IGlnbm9yZXMgaXMgcmVwb3J0ZWQgYXMgYSB3YXJuaW5nIGFuZCBleGl0cyAwIHdoZW4gaXQgaXNcbiAqIHBhc3NlZCBleHBsaWNpdGx5LCBzbyBpdCBjb3N0cyBhIGNvbnNvbGUgbGluZSByYXRoZXIgdGhhbiBhIGZhaWxlZCBjb21taXQgYW5kIG5lZWRzIG5vIGtleSBoZXJlLlxuICovXG5jb25zdCBXUklURVJfVEFTS1M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4gPSB7XG4gICcqLnt0cyx0c3gsbXRzfSc6IFtcbiAgICBgJHtQQUNLQUdFX01BTkFHRVJfUlVOX0NPTU1BTkR9IGxpbnQ6Zml4IC0tYCxcbiAgICBgJHtQQUNLQUdFX01BTkFHRVJfUlVOX0NPTU1BTkR9IGZvcm1hdCAtLWBcbiAgXSxcbiAgJyoubWQnOiBbXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBsaW50Om1kOmZpeCAtLWBcbiAgXVxufTtcblxuLyoqXG4gKiBOYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIHRoYXQgcnVucyBmaWxlLWJhc2VkIGxpbnQsIGZvcm1hdCwgYW5kIHNwZWxsY2hlY2sgb24gc3RhZ2VkIGZpbGVzLlxuICpcbiAqIE9ubHkgaW5jbHVkZXMgdG9vbHMgdGhhdCBjYW4gb3BlcmF0ZSBvbiBpbmRpdmlkdWFsIGZpbGVzLiBXaG9sZS1wcm9qZWN0IGNoZWNrc1xuICogKFR5cGVTY3JpcHQgY29tcGlsYXRpb24sIHVuaXQgdGVzdHMpIGFyZSBsZWZ0IHRvIENJLlxuICpcbiAqIENvbW1hbmRzIHJ1biB0aHJvdWdoIHRoZSBwYWNrYWdlIG1hbmFnZXIgdGhhdCBvd25zIHRoZSB0cmVlIFx1MjAxNCBgbnBtIHJ1biAuLi4gLS1gLCBgYnVuIHJ1biAuLi4gLS1gLCBhbmRcbiAqIHNvIG9uIFx1MjAxNCBzbyBuYW5vLXN0YWdlZCBmaWxlIHBhdGhzIGFyZSBmb3J3YXJkZWQgYXMgQ0xJIGFyZ3VtZW50cy5cbiAqXG4gKiBTcGVsbGNoZWNrIGlzIHBhcnRpdGlvbmVkIGFjcm9zcyB0aGUga2V5cyByYXRoZXIgdGhhbiBnaXZlbiBhIGNhdGNoLWFsbCBgJyonYCBrZXkgKHNlZVxuICogYHBhcnRpdGlvblNwZWxsY2hlY2tgKS4gQSByZXBvIGFkZGluZyBhIGZpbGUtcmV3cml0aW5nIHRhc2sgb2YgaXRzIG93biBwYXNzZXMgaXQgdG9cbiAqIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfSBhcyBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCByYXRoZXIgdGhhbiBzcHJlYWRpbmcgdGhpcyBvYmplY3QgYW5kIGFkZGluZyBhIGtleSxcbiAqIHdoaWNoIHdvdWxkIHJlaW50cm9kdWNlIHRoZSBvdmVybGFwIGZvciB0aGF0IGtleSdzIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0gcGFydGl0aW9uU3BlbGxjaGVjayhXUklURVJfVEFTS1MpO1xuXG5jb25zdCBOQU5PX1NUQUdFRF9FTlZfVkFSSUFCTEUgPSAnTkFOT19TVEFHRUQnO1xuXG4vKipcbiAqIFJlc29sdmVzIHRoZSBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIHRvIHVzZSwgaG9ub3JpbmcgYSBwZXItZGV2ZWxvcGVyIG9wdC1vdXQuXG4gKlxuICogTG9hZHMgYSBnaXRpZ25vcmVkIGAuZW52YCBpZiBwcmVzZW50LCB0aGVuIFx1MjAxNCB3aGVuIGBOQU5PX1NUQUdFRGAgaXMgc2V0IHRvIGFuIG9mZiB2YWx1ZSAoYDBgLCBgZmFsc2VgLFxuICogYG9mZmAsIG9yIGBub2ApIFx1MjAxNCBwcmludHMgYSBub3RpY2UgYW5kIGV4aXRzIHRoZSBwcm9jZXNzIHN1Y2Nlc3NmdWxseSBzbyB0aGUgcHJlLWNvbW1pdCBjaGVja3MgYXJlXG4gKiBza2lwcGVkLiBUaGlzIG1pcnJvcnMgaHVza3kncyBvd24gYEhVU0tZPTBgIHN3aXRjaCwgYnV0IHNjb3BlZCB0byB0aGUgbmFuby1zdGFnZWQgc3RlcCAoc28gdGhlXG4gKiBjb21taXQtbXNnIGhvb2sgc3RpbGwgcnVucykuIE90aGVyd2lzZSBpdCByZXR1cm5zIHtAbGluayBvYnNpZGlhbkRldlV0aWxzQ29uZmlnfSwgb3IgXHUyMDE0IHdoZW5cbiAqIGBhZGRpdGlvbmFsV3JpdGVyVGFza3NgIGFyZSBnaXZlbiBcdTIwMTQgdGhlIHNhbWUgY29uZmlndXJhdGlvbiByZS1wYXJ0aXRpb25lZCB3aXRoIHRob3NlIHdyaXRlcnMgYWRkZWQuXG4gKlxuICogYE5BTk9fU1RBR0VEYCBpcyBub3QgYW4gbnBtIHNjcmlwdCwgc28gaXQgY2FycmllcyBpdHMgb3duIHN3aXRjaCByYXRoZXIgdGhhbiB0aGUgc2NyaXB0LW5hbWUtZGVyaXZlZCBvbmVcbiAqIGV2ZXJ5IG5wbSBzY3JpcHQgZ2V0cyBcdTIwMTQgYnV0IGJvdGggc2hhcmUgdGhlIHNhbWUgbm90aW9uIG9mIGFuIG9mZiB2YWx1ZSwgdmlhIHtAbGluayBpc0VudlZhcmlhYmxlT2ZmfS5cbiAqXG4gKiBUaGlzIGlzIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4gbW9kdWxlLWxldmVsIGNvZGUgc28gaW1wb3J0aW5nIHRoZSBwYWNrYWdlIGJhcnJlbCBuZXZlciB0cmlnZ2VycyB0aGVcbiAqIGAuZW52YCByZWFkIG9yIHRoZSBwcm9jZXNzIGV4aXQ7IGNhbGwgaXQgZnJvbSB0aGUgdGhpbiBgc2NyaXB0cy9uYW5vLXN0YWdlZC1jb25maWcudHNgIGVudHJ5LiBSZXNvbHZpbmcgdGhlXG4gKiBwYWNrYWdlIG1hbmFnZXIgaXMgdGhlIG9uZSB0aGluZyB0aGF0IGRvZXMgcnVuIGF0IG1vZHVsZSBzY29wZSwgYW5kIGl0IGRvZXMgbmVpdGhlciBvZiB0aG9zZSB0d29cbiAqIHRoaW5ncyBcdTIwMTQgaXQgb25seSBwcm9iZXMgZm9yIGEgbG9ja2ZpbGUuXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9uYWwgb3B0aW9ucy5cbiAqIEByZXR1cm5zIFRoZSBuYW5vLXN0YWdlZCB0YXNrIGNvbmZpZ3VyYXRpb24uIERvZXMgbm90IHJldHVybiB3aGVuIHRoZSBvcHQtb3V0IGlzIGFjdGl2ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbm9TdGFnZWRDb25maWcob3B0aW9ucz86IEdldE5hbm9TdGFnZWRDb25maWdPcHRpb25zKTogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+IHtcbiAgbG9hZEVudkZpbGVJZkV4aXN0cygpO1xuXG4gIGlmIChpc0VudlZhcmlhYmxlT2ZmKE5BTk9fU1RBR0VEX0VOVl9WQVJJQUJMRSkpIHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgbmFuby1zdGFnZWQ6IHNraXBwZWQgKCR7TkFOT19TVEFHRURfRU5WX1ZBUklBQkxFfSBpcyBvZmYpLlxcbmApO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfVxuXG4gIGNvbnN0IGFkZGl0aW9uYWxXcml0ZXJUYXNrcyA9IG9wdGlvbnM/LmFkZGl0aW9uYWxXcml0ZXJUYXNrcyA/PyB7fTtcbiAgaWYgKE9iamVjdC5rZXlzKGFkZGl0aW9uYWxXcml0ZXJUYXNrcykubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG9ic2lkaWFuRGV2VXRpbHNDb25maWc7XG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVQYXR0ZXJuID0gT2JqZWN0LmtleXMoYWRkaXRpb25hbFdyaXRlclRhc2tzKS5maW5kKChwYXR0ZXJuKSA9PiBPYmplY3QuaGFzT3duKFdSSVRFUl9UQVNLUywgcGF0dGVybikpO1xuICBpZiAoZHVwbGljYXRlUGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBuYW5vLXN0YWdlZCB3cml0ZXIgcGF0dGVybiAnJHtkdXBsaWNhdGVQYXR0ZXJufScgaXMgYWxyZWFkeSBhIHNoYXJlZCB3cml0ZXIgcGF0dGVybi5gKTtcbiAgfVxuXG4gIHJldHVybiBwYXJ0aXRpb25TcGVsbGNoZWNrKHsgLi4uV1JJVEVSX1RBU0tTLCAuLi5hZGRpdGlvbmFsV3JpdGVyVGFza3MgfSk7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBpbiB3aGljaCBzcGVsbGNoZWNrIG5ldmVyIHJlYWRzIGEgZmlsZSB3aGlsZSBhbm90aGVyIHRhc2sgcmV3cml0ZXMgaXQuXG4gKlxuICogVGhlIHNhbWUgYFByb21pc2UuYWxsYCB0aGF0IGZvcmNlcyB0d28gd3JpdGVycyBpbnRvIG9uZSBrZXkgbWFrZXMgYSBjYXRjaC1hbGwgYCcqJ2Agc3BlbGxjaGVjayBrZXkgcnVuXG4gKiBDT05DVVJSRU5UTFkgd2l0aCBldmVyeSB3cml0ZXIga2V5LCBzbyBjc3BlbGwgd291bGQgcmVhZCBhIGZpbGUgdGhhdCBFU0xpbnQgb3IgZHByaW50IGlzIHJld3JpdGluZyBpblxuICogcGxhY2UgLS0gYSBzcHVyaW91cyBmaW5kaW5nIG9uIGEgaGFsZi13cml0dGVuIGZpbGUsIG9yIGEgcGFzcyBvdmVyIGNvbnRlbnQgdGhhdCBpcyBub3Qgd2hhdCBnZXRzXG4gKiBjb21taXR0ZWQuIFNvIHRoZSBzdGFnZWQgZmlsZXMgYXJlIFBBUlRJVElPTkVEIGluc3RlYWQ6XG4gKlxuICogLSBldmVyeSB3cml0ZXIga2V5IGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhcyBpdHMgTEFTVCBjb21tYW5kLCBzbyBpdCByZWFkcyB0aGF0IGtleSdzIGZpbGVzIGFmdGVyIHRoZXlcbiAqICAgaGF2ZSBiZWVuIHJld3JpdHRlbjtcbiAqIC0gb25lIGNvbXBsZW1lbnQga2V5IHNwZWxsY2hlY2tzIGV4YWN0bHkgdGhlIGZpbGVzIG5vIHdyaXRlciBrZXkgY2xhaW1zLlxuICpcbiAqIFRoZSBjb21wbGVtZW50IGlzIHdyaXR0ZW4gaW4gbmFuby1zdGFnZWQncyBvd24gZ2xvYiBkaWFsZWN0LCB3aGljaCBjb21waWxlcyBgISguLi4pYCB0byBhIGxvb2thaGVhZCB0aGF0XG4gKiBpcyBOT1QgYW5jaG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aDogYCEoKi5tZCkqYCB3b3VsZCBleGNsdWRlIGBub3Rlcy5tZC5iYWtgIHRvby4gQSBuZXN0ZWQgYCEoPylgXG4gKiBjb21waWxlcyB0byBgKD8hLilgLCB3aGljaCBJUyBhbiBlbmQgYW5jaG9yLCBzbyBlYWNoIGFsdGVybmF0aXZlIGlzIHN1ZmZpeGVkIHdpdGggaXQuIEEgd3JpdGVyIHBhdHRlcm5cbiAqIGNvbnRhaW5pbmcgYC9gIHdvdWxkIHN3aXRjaCBuYW5vLXN0YWdlZCBpbnRvIGdsb2JzdGFyIG1vZGUsIHdoZXJlIGAqYCBzdG9wcyBjcm9zc2luZyBkaXJlY3RvcmllcyBhbmQgdGhlXG4gKiBjb25zdHJ1Y3Rpb24gbm8gbG9uZ2VyIGhvbGRzIC0tIGhlbmNlIHRoZSB0aHJvdy4gVGhlIHVuaXQgdGVzdCBwaW5zIHRoZSBwYXJ0aXRpb24gYWdhaW5zdCB0aGUgaW5zdGFsbGVkXG4gKiBuYW5vLXN0YWdlZCBjb21waWxlciwgc28gYSByZWxlYXNlIHRoYXQgY2hhbmdlcyBpdHMgZGlhbGVjdCBmYWlscyB0aGVyZSByYXRoZXIgdGhhbiBpbiBhIGNvbW1pdC5cbiAqXG4gKiBAcGFyYW0gd3JpdGVyVGFza3MgLSBUaGUgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIHdpdGggdGhlIHNwZWxsY2hlY2sgc3RlcCBwYXJ0aXRpb25lZCBhY3Jvc3MgdGhlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvblNwZWxsY2hlY2sod3JpdGVyVGFza3M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4ge1xuICBjb25zdCBwYXR0ZXJucyA9IE9iamVjdC5rZXlzKHdyaXRlclRhc2tzKTtcbiAgY29uc3QgcGF0dGVybldpdGhTbGFzaCA9IHBhdHRlcm5zLmZpbmQoKHBhdHRlcm4pID0+IHBhdHRlcm4uaW5jbHVkZXMoJy8nKSk7XG4gIGlmIChwYXR0ZXJuV2l0aFNsYXNoICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hbm8tc3RhZ2VkIHdyaXRlciBwYXR0ZXJuICcke3BhdHRlcm5XaXRoU2xhc2h9JyBjb250YWlucyAnLycsIHdoaWNoIHRoZSBzcGVsbGNoZWNrIHBhcnRpdGlvbiBjYW5ub3QgZXhwcmVzcy5gKTtcbiAgfVxuXG4gIGNvbnN0IGNvbXBsZW1lbnRQYXR0ZXJuID0gYCEoJHtwYXR0ZXJucy5tYXAoKHBhdHRlcm4pID0+IGAke3BhdHRlcm59ISg/KWApLmpvaW4oJ3wnKX0pKmA7XG4gIGNvbnN0IGNvbmZpZzogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge1xuICAgIFtjb21wbGVtZW50UGF0dGVybl06IFtTUEVMTENIRUNLX0NPTU1BTkRdXG4gIH07XG5cbiAgZm9yIChjb25zdCBbcGF0dGVybiwgY29tbWFuZHNdIG9mIE9iamVjdC5lbnRyaWVzKHdyaXRlclRhc2tzKSkge1xuICAgIGNvbmZpZ1twYXR0ZXJuXSA9IFsuLi5jb21tYW5kcywgU1BFTExDSEVDS19DT01NQU5EXTtcbiAgfVxuXG4gIHJldHVybiBjb25maWc7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFNQSwwQkFBb0I7QUFFcEIsd0JBR087QUFDUCw2QkFBNEM7QUFxQjVDLE1BQU0sa0NBQThCLG9EQUE0QixFQUFFLEtBQUssR0FBRztBQUUxRSxNQUFNLHFCQUFxQixHQUFHLDJCQUEyQjtBQWdCekQsTUFBTSxlQUE0RDtBQUFBLEVBQ2hFLGtCQUFrQjtBQUFBLElBQ2hCLEdBQUcsMkJBQTJCO0FBQUEsSUFDOUIsR0FBRywyQkFBMkI7QUFBQSxFQUNoQztBQUFBLEVBQ0EsUUFBUTtBQUFBLElBQ04sR0FBRywyQkFBMkI7QUFBQSxFQUNoQztBQUNGO0FBZ0JPLE1BQU0seUJBQW1ELG9CQUFvQixZQUFZO0FBRWhHLE1BQU0sMkJBQTJCO0FBc0IxQixTQUFTLG9CQUFvQixTQUFnRTtBQUNsRyw2Q0FBb0I7QUFFcEIsVUFBSSxvQ0FBaUIsd0JBQXdCLEdBQUc7QUFDOUMsd0JBQUFBLFFBQVEsT0FBTyxNQUFNLHlCQUF5Qix3QkFBd0I7QUFBQSxDQUFhO0FBQ25GLHdCQUFBQSxRQUFRLEtBQUssQ0FBQztBQUFBLEVBQ2hCO0FBRUEsUUFBTSx3QkFBd0IsU0FBUyx5QkFBeUIsQ0FBQztBQUNqRSxNQUFJLE9BQU8sS0FBSyxxQkFBcUIsRUFBRSxXQUFXLEdBQUc7QUFDbkQsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLG1CQUFtQixPQUFPLEtBQUsscUJBQXFCLEVBQUUsS0FBSyxDQUFDLFlBQVksT0FBTyxPQUFPLGNBQWMsT0FBTyxDQUFDO0FBQ2xILE1BQUkscUJBQXFCLFFBQVc7QUFDbEMsVUFBTSxJQUFJLE1BQU0sK0JBQStCLGdCQUFnQix1Q0FBdUM7QUFBQSxFQUN4RztBQUVBLFNBQU8sb0JBQW9CLEVBQUUsR0FBRyxjQUFjLEdBQUcsc0JBQXNCLENBQUM7QUFDMUU7QUF3QkEsU0FBUyxvQkFBb0IsYUFBb0Y7QUFDL0csUUFBTSxXQUFXLE9BQU8sS0FBSyxXQUFXO0FBQ3hDLFFBQU0sbUJBQW1CLFNBQVMsS0FBSyxDQUFDLFlBQVksUUFBUSxTQUFTLEdBQUcsQ0FBQztBQUN6RSxNQUFJLHFCQUFxQixRQUFXO0FBQ2xDLFVBQU0sSUFBSSxNQUFNLCtCQUErQixnQkFBZ0IsZ0VBQWdFO0FBQUEsRUFDakk7QUFFQSxRQUFNLG9CQUFvQixLQUFLLFNBQVMsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLE1BQU0sRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUNwRixRQUFNLFNBQW1DO0FBQUEsSUFDdkMsQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLGtCQUFrQjtBQUFBLEVBQzFDO0FBRUEsYUFBVyxDQUFDLFNBQVMsUUFBUSxLQUFLLE9BQU8sUUFBUSxXQUFXLEdBQUc7QUFDN0QsV0FBTyxPQUFPLElBQUksQ0FBQyxHQUFHLFVBQVUsa0JBQWtCO0FBQUEsRUFDcEQ7QUFFQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbInByb2Nlc3MiXQp9Cg==
|
|
132
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL25hbm8tc3RhZ2VkLWNvbmZpZy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyoqXG4gKiBAZmlsZVxuICpcbiAqIFNoYXJlZCBuYW5vLXN0YWdlZCBjb25maWd1cmF0aW9uIGZvciBwcmUtY29tbWl0IGhvb2tzLlxuICovXG5cbmltcG9ydCB7XG4gIGlzQWJzb2x1dGUsXG4gIHJlbGF0aXZlXG59IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuXG5pbXBvcnQge1xuICBpc0VudlZhcmlhYmxlT2ZmLFxuICBsb2FkRW52RmlsZUlmRXhpc3RzXG59IGZyb20gJy4vZW52LXRvZ2dsZS50cyc7XG5pbXBvcnQge1xuICBnZXRFZmZlY3RpdmVDb21tYW5kTGluZUxlbmd0aCxcbiAgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RoXG59IGZyb20gJy4vZXhlYy50cyc7XG5pbXBvcnQgeyBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQgfSBmcm9tICcuL3BhY2thZ2UtbWFuYWdlci50cyc7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Ige0BsaW5rIGdldE5hbm9TdGFnZWRDb25maWd9LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEdldE5hbm9TdGFnZWRDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFJlcG8tc3BlY2lmaWMgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBuYW5vLXN0YWdlZCBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICAgKlxuICAgKiBFYWNoIGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhbmQgaXRzIGZpbGVzIHJlbW92ZWQgZnJvbSB0aGUgc3BlbGxjaGVjay1vbmx5IGtleSwgZXhhY3RseSBsaWtlIHRoZSBzaGFyZWRcbiAgICogd3JpdGVycy4gQSBwYXR0ZXJuIG11c3Qgbm90IGNvbnRhaW4gYC9gLCBhbmQgbXVzdCBub3QgcmVwZWF0IGEgc2hhcmVkIHdyaXRlciBwYXR0ZXJuLiBFYWNoIGNvbW1hbmQgaXMgYVxuICAgKiBwcmVmaXggdGhlIHN0YWdlZCBwYXRocyBhcmUgYXBwZW5kZWQgdG8sIGluIGJhdGNoZXMsIGxpa2UgdGhlIHNoYXJlZCBvbmVzIChgbnBtIHJ1biBsaW50OmZpeCAtLWApLlxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFdyaXRlclRhc2tzPzogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgcmVhZG9ubHkgc3RyaW5nW10+Pjtcbn1cblxuLyoqXG4gKiBBIG5hbm8tc3RhZ2VkIGNvbmZpZ3VyYXRpb24gd2hvc2UgZXZlcnkga2V5IGlzIGEge0BsaW5rIE5hbm9TdGFnZWRUYXNrfS5cbiAqL1xuZXhwb3J0IHR5cGUgTmFub1N0YWdlZENvbmZpZyA9IFJlY29yZDxzdHJpbmcsIE5hbm9TdGFnZWRUYXNrPjtcblxuLyoqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCBuYW5vLXN0YWdlZCB0YXNrOiBpdCByZWNlaXZlcyB0aGUgc3RhZ2VkIGZpbGVzIGl0cyBwYXR0ZXJuIGNsYWltcyBhbmQgcmV0dXJucyB0aGVcbiAqIGNvbW1hbmRzIHRvIHJ1biBvdmVyIHRoZW0sIGluIG9yZGVyLlxuICovXG5leHBvcnQgdHlwZSBOYW5vU3RhZ2VkVGFzayA9IChjb250ZXh0OiBOYW5vU3RhZ2VkVGFza0NvbnRleHQpID0+IHN0cmluZ1tdO1xuXG4vKipcbiAqIFdoYXQgbmFuby1zdGFnZWQgcGFzc2VzIHRvIGEgZnVuY3Rpb24tdmFsdWVkIHRhc2suXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFub1N0YWdlZFRhc2tDb250ZXh0IHtcbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRocyBvZiB0aGUgc3RhZ2VkIGZpbGVzIHRoZSB0YXNrJ3MgcGF0dGVybiBjbGFpbXMuXG4gICAqL1xuICByZWFkb25seSBmaWxlbmFtZXM6IHJlYWRvbmx5IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBgPG1hbmFnZXI+IHJ1bmAgcHJlZml4IGV2ZXJ5IHRhc2sgYmVsb3cgaXMgYnVpbHQgb24sIHJlc29sdmVkIG9uY2UgZm9yIHRoZSBwcm9jZXNzLlxuICpcbiAqIERldGVjdGlvbiBwcm9iZXMgZm9yIGEgbG9ja2ZpbGUgYmVzaWRlIGBwYWNrYWdlLmpzb25gLCBzbyBpdCBpcyBhIGhhbmRmdWwgb2YgYGV4aXN0c1N5bmNgIGNhbGxzIGFuZFxuICogbm90aGluZyBtb3JlIFx1MjAxNCBubyBgLmVudmAgcmVhZCBhbmQgbm8gYHByb2Nlc3MuZXhpdGAsIHdoaWNoIGlzIHdoYXQgbGV0cyBpdCBzaXQgYXQgbW9kdWxlIHNjb3BlLlxuICovXG5jb25zdCBQQUNLQUdFX01BTkFHRVJfUlVOX0NPTU1BTkQgPSBnZXRQYWNrYWdlTWFuYWdlclJ1bkNvbW1hbmQoKS5qb2luKCcgJyk7XG5cbmNvbnN0IFNQRUxMQ0hFQ0tfQ09NTUFORCA9IGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gc3BlbGxjaGVjayAtLWA7XG5cbi8qKlxuICogUm9vbSBsZWZ0IGluIGV2ZXJ5IGJhdGNoIGZvciB0aGUgcmVzb2x2ZWQgcGF0aCBvZiB0aGUgcGFja2FnZSBtYW5hZ2VyJ3MgZXhlY3V0YWJsZS5cbiAqXG4gKiBuYW5vLXN0YWdlZCBydW5zIGBucG1gIGFzIHRoZSBhYnNvbHV0ZSBwYXRoIG9mIGBucG0uY21kYCAoYDxjb21zcGVjPiAvRCAvUyAvQyBcIjxwYXRoPlwiIFwiPGFyZz5cIiBcdTIwMjZgKSwgd2hpY2hcbiAqIHRoZSBiYXRjaCBjYW5ub3Qgc2VlLCBzbyBhIGZ1bGwgV2luZG93cyBgTUFYX1BBVEhgIGlzIHNldCBhc2lkZSBmb3IgaXQuXG4gKi9cbmNvbnN0IEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFID0gMjYwO1xuXG4vKipcbiAqIFRoZSBjaGFyYWN0ZXJzIG5hbm8tc3RhZ2VkJ3MgY29tbWFuZCB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IGluc2lkZSBhbiBhcmd1bWVudC5cbiAqXG4gKiBBIGZ1bmN0aW9uLXZhbHVlZCB0YXNrIHJldHVybnMgaXRzIGNvbW1hbmRzIGFzIFNUUklOR1MsIGFuZCBuYW5vLXN0YWdlZCBzcGxpdHMgZWFjaCBvbmUgd2l0aFxuICogYHN0cmluZ0FyZ3ZUb0FycmF5YCwgd2hpY2ggZW1pdHMgYSBxdW90ZWQgdG9rZW4gdHdpY2UgKG9uY2UgYmFyZSwgb25jZSB3aXRoIGl0cyBxdW90ZXMpIGFuZCBoYXMgbm8gZXNjYXBlLlxuICogU28gYSBwYXRoIGhvbGRpbmcgd2hpdGVzcGFjZSBvciBhIHF1b3RlIGNhbm5vdCBiZSBwYXNzZWQgYXMgaXRzZWxmLlxuICovXG5jb25zdCBUT0tFTklaRVJfVU5TQUZFX0NIQVJBQ1RFUlNfUkVHX0VYUCA9IC9bXFxzXCInXS9nO1xuXG4vKipcbiAqIFRoZSB0YXNrcyB0aGF0IFJFV1JJVEUgYSBzdGFnZWQgZmlsZSwga2V5ZWQgYnkgdGhlIG5hbm8tc3RhZ2VkIHBhdHRlcm4gdGhhdCBjbGFpbXMgaXQuXG4gKlxuICogYGxpbnQ6Zml4YCBhbmQgYGZvcm1hdGAgYm90aCByZXdyaXRlIHRoZSBmaWxlLCBzbyB0aGV5IGhhdmUgdG8gc2hhcmUgb25lIGtleTogbmFuby1zdGFnZWQgcnVucyBpdHNcbiAqIHBlci1wYXR0ZXJuIGdyb3VwcyB1bmRlciBgUHJvbWlzZS5hbGxgIChgcnVuKClgIGluIGBuYW5vLXN0YWdlZC9saWIvY21kLXJ1bm5lci5qc2ApLCBhbmQgc2VxdWVuY2VzIG9ubHlcbiAqIHRoZSBjb21tYW5kcyBJTlNJREUgYSBzaW5nbGUga2V5J3MgYXJyYXkgKGBydW5UYXNrKClgLCBhIGBmb3IgLi4uIG9mIGF3YWl0YCkuIFNwbGl0IGFjcm9zcyB0d28ga2V5cyB0aGV5XG4gKiByYWNlLCB3aGljaGV2ZXIgZmluaXNoZXMgbGFzdCB3aW5zLCBhbmQgdGhlIGNvbW1pdCBzdGFnZXMgYnl0ZXMgdGhhdCBuZWl0aGVyIHRvb2wgd291bGQgaGF2ZSBwcm9kdWNlZCBvblxuICogaXRzIG93bi5cbiAqXG4gKiBTbyBkbyBOT1QgZXhwcmVzcyBhIGRpcmVjdG9yeSBleGNsdXNpb24gYnkgZ2l2aW5nIG9uZSBvZiB0aGVzZSB0d28gaXRzIG93biBuZWdhdGVkIGtleSAtLSB0aGF0IHNpbGVudGx5XG4gKiB0YWtlcyB0aGUgb3JkZXJpbmcgYXdheS4gQW4gZXhjbHVzaW9uIGJlbG9uZ3MgaW4gdGhlIGV4Y2x1ZGVkIHRvb2wncyBvd24gY29uZmlnLCB3aGVyZSBFU0xpbnQnc1xuICogYGdsb2JhbElnbm9yZXNgIGFscmVhZHkgcHV0cyBpdDogYSBwYXRoIEVTTGludCBpZ25vcmVzIGlzIHJlcG9ydGVkIGFzIGEgd2FybmluZyBhbmQgZXhpdHMgMCB3aGVuIGl0IGlzXG4gKiBwYXNzZWQgZXhwbGljaXRseSwgc28gaXQgY29zdHMgYSBjb25zb2xlIGxpbmUgcmF0aGVyIHRoYW4gYSBmYWlsZWQgY29tbWl0IGFuZCBuZWVkcyBubyBrZXkgaGVyZS5cbiAqL1xuY29uc3QgV1JJVEVSX1RBU0tTOiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCByZWFkb25seSBzdHJpbmdbXT4+ID0ge1xuICAnKi57dHMsdHN4LG10c30nOiBbXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBsaW50OmZpeCAtLWAsXG4gICAgYCR7UEFDS0FHRV9NQU5BR0VSX1JVTl9DT01NQU5EfSBmb3JtYXQgLS1gXG4gIF0sXG4gICcqLm1kJzogW1xuICAgIGAke1BBQ0tBR0VfTUFOQUdFUl9SVU5fQ09NTUFORH0gbGludDptZDpmaXggLS1gXG4gIF1cbn07XG5cbi8qKlxuICogTmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0aGF0IHJ1bnMgZmlsZS1iYXNlZCBsaW50LCBmb3JtYXQsIGFuZCBzcGVsbGNoZWNrIG9uIHN0YWdlZCBmaWxlcy5cbiAqXG4gKiBPbmx5IGluY2x1ZGVzIHRvb2xzIHRoYXQgY2FuIG9wZXJhdGUgb24gaW5kaXZpZHVhbCBmaWxlcy4gV2hvbGUtcHJvamVjdCBjaGVja3NcbiAqIChUeXBlU2NyaXB0IGNvbXBpbGF0aW9uLCB1bml0IHRlc3RzKSBhcmUgbGVmdCB0byBDSS5cbiAqXG4gKiBDb21tYW5kcyBydW4gdGhyb3VnaCB0aGUgcGFja2FnZSBtYW5hZ2VyIHRoYXQgb3ducyB0aGUgdHJlZSBcdTIwMTQgYG5wbSBydW4gLi4uIC0tYCwgYGJ1biBydW4gLi4uIC0tYCwgYW5kXG4gKiBzbyBvbiBcdTIwMTQgc28gbmFuby1zdGFnZWQgZmlsZSBwYXRocyBhcmUgZm9yd2FyZGVkIGFzIENMSSBhcmd1bWVudHMsIGJhdGNoZWQgdG8gZml0IHRoZSBjb21tYW5kIGxpbmUgKHNlZVxuICogYHRvQmF0Y2hlZFRhc2tgKS5cbiAqXG4gKiBTcGVsbGNoZWNrIGlzIHBhcnRpdGlvbmVkIGFjcm9zcyB0aGUga2V5cyByYXRoZXIgdGhhbiBnaXZlbiBhIGNhdGNoLWFsbCBgJyonYCBrZXkgKHNlZVxuICogYHBhcnRpdGlvblNwZWxsY2hlY2tgKS4gQSByZXBvIGFkZGluZyBhIGZpbGUtcmV3cml0aW5nIHRhc2sgb2YgaXRzIG93biBwYXNzZXMgaXQgdG9cbiAqIHtAbGluayBnZXROYW5vU3RhZ2VkQ29uZmlnfSBhcyBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCByYXRoZXIgdGhhbiBzcHJlYWRpbmcgdGhpcyBvYmplY3QgYW5kIGFkZGluZyBhIGtleSxcbiAqIHdoaWNoIHdvdWxkIHJlaW50cm9kdWNlIHRoZSBvdmVybGFwIGZvciB0aGF0IGtleSdzIGZpbGVzLlxuICovXG5leHBvcnQgY29uc3Qgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZzogTmFub1N0YWdlZENvbmZpZyA9IHBhcnRpdGlvblNwZWxsY2hlY2soV1JJVEVSX1RBU0tTKTtcblxuY29uc3QgTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFID0gJ05BTk9fU1RBR0VEJztcblxuLyoqXG4gKiBSZXNvbHZlcyB0aGUgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiB0byB1c2UsIGhvbm9yaW5nIGEgcGVyLWRldmVsb3BlciBvcHQtb3V0LlxuICpcbiAqIExvYWRzIGEgZ2l0aWdub3JlZCBgLmVudmAgaWYgcHJlc2VudCwgdGhlbiBcdTIwMTQgd2hlbiBgTkFOT19TVEFHRURgIGlzIHNldCB0byBhbiBvZmYgdmFsdWUgKGAwYCwgYGZhbHNlYCxcbiAqIGBvZmZgLCBvciBgbm9gKSBcdTIwMTQgcHJpbnRzIGEgbm90aWNlIGFuZCBleGl0cyB0aGUgcHJvY2VzcyBzdWNjZXNzZnVsbHkgc28gdGhlIHByZS1jb21taXQgY2hlY2tzIGFyZVxuICogc2tpcHBlZC4gVGhpcyBtaXJyb3JzIGh1c2t5J3Mgb3duIGBIVVNLWT0wYCBzd2l0Y2gsIGJ1dCBzY29wZWQgdG8gdGhlIG5hbm8tc3RhZ2VkIHN0ZXAgKHNvIHRoZVxuICogY29tbWl0LW1zZyBob29rIHN0aWxsIHJ1bnMpLiBPdGhlcndpc2UgaXQgcmV0dXJucyB7QGxpbmsgb2JzaWRpYW5EZXZVdGlsc0NvbmZpZ30sIG9yIFx1MjAxNCB3aGVuXG4gKiBgYWRkaXRpb25hbFdyaXRlclRhc2tzYCBhcmUgZ2l2ZW4gXHUyMDE0IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gcmUtcGFydGl0aW9uZWQgd2l0aCB0aG9zZSB3cml0ZXJzIGFkZGVkLlxuICpcbiAqIGBOQU5PX1NUQUdFRGAgaXMgbm90IGFuIG5wbSBzY3JpcHQsIHNvIGl0IGNhcnJpZXMgaXRzIG93biBzd2l0Y2ggcmF0aGVyIHRoYW4gdGhlIHNjcmlwdC1uYW1lLWRlcml2ZWQgb25lXG4gKiBldmVyeSBucG0gc2NyaXB0IGdldHMgXHUyMDE0IGJ1dCBib3RoIHNoYXJlIHRoZSBzYW1lIG5vdGlvbiBvZiBhbiBvZmYgdmFsdWUsIHZpYSB7QGxpbmsgaXNFbnZWYXJpYWJsZU9mZn0uXG4gKlxuICogVGhpcyBpcyBhIGZ1bmN0aW9uIHJhdGhlciB0aGFuIG1vZHVsZS1sZXZlbCBjb2RlIHNvIGltcG9ydGluZyB0aGUgcGFja2FnZSBiYXJyZWwgbmV2ZXIgdHJpZ2dlcnMgdGhlXG4gKiBgLmVudmAgcmVhZCBvciB0aGUgcHJvY2VzcyBleGl0OyBjYWxsIGl0IGZyb20gdGhlIHRoaW4gYHNjcmlwdHMvbmFuby1zdGFnZWQtY29uZmlnLnRzYCBlbnRyeS4gUmVzb2x2aW5nIHRoZVxuICogcGFja2FnZSBtYW5hZ2VyIGlzIHRoZSBvbmUgdGhpbmcgdGhhdCBkb2VzIHJ1biBhdCBtb2R1bGUgc2NvcGUsIGFuZCBpdCBkb2VzIG5laXRoZXIgb2YgdGhvc2UgdHdvXG4gKiB0aGluZ3MgXHUyMDE0IGl0IG9ubHkgcHJvYmVzIGZvciBhIGxvY2tmaWxlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbmFsIG9wdGlvbnMuXG4gKiBAcmV0dXJucyBUaGUgbmFuby1zdGFnZWQgdGFzayBjb25maWd1cmF0aW9uLiBEb2VzIG5vdCByZXR1cm4gd2hlbiB0aGUgb3B0LW91dCBpcyBhY3RpdmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXROYW5vU3RhZ2VkQ29uZmlnKG9wdGlvbnM/OiBHZXROYW5vU3RhZ2VkQ29uZmlnT3B0aW9ucyk6IE5hbm9TdGFnZWRDb25maWcge1xuICBsb2FkRW52RmlsZUlmRXhpc3RzKCk7XG5cbiAgaWYgKGlzRW52VmFyaWFibGVPZmYoTkFOT19TVEFHRURfRU5WX1ZBUklBQkxFKSkge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGBuYW5vLXN0YWdlZDogc2tpcHBlZCAoJHtOQU5PX1NUQUdFRF9FTlZfVkFSSUFCTEV9IGlzIG9mZikuXFxuYCk7XG4gICAgcHJvY2Vzcy5leGl0KDApO1xuICB9XG5cbiAgY29uc3QgYWRkaXRpb25hbFdyaXRlclRhc2tzID0gb3B0aW9ucz8uYWRkaXRpb25hbFdyaXRlclRhc2tzID8/IHt9O1xuICBpZiAoT2JqZWN0LmtleXMoYWRkaXRpb25hbFdyaXRlclRhc2tzKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JzaWRpYW5EZXZVdGlsc0NvbmZpZztcbiAgfVxuXG4gIGNvbnN0IGR1cGxpY2F0ZVBhdHRlcm4gPSBPYmplY3Qua2V5cyhhZGRpdGlvbmFsV3JpdGVyVGFza3MpLmZpbmQoKHBhdHRlcm4pID0+IE9iamVjdC5oYXNPd24oV1JJVEVSX1RBU0tTLCBwYXR0ZXJuKSk7XG4gIGlmIChkdXBsaWNhdGVQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYG5hbm8tc3RhZ2VkIHdyaXRlciBwYXR0ZXJuICcke2R1cGxpY2F0ZVBhdHRlcm59JyBpcyBhbHJlYWR5IGEgc2hhcmVkIHdyaXRlciBwYXR0ZXJuLmApO1xuICB9XG5cbiAgcmV0dXJuIHBhcnRpdGlvblNwZWxsY2hlY2soeyAuLi5XUklURVJfVEFTS1MsIC4uLmFkZGl0aW9uYWxXcml0ZXJUYXNrcyB9KTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgY29tbWFuZCBhcmd1bWVudHMgaW50byBiYXRjaGVzIHRoYXQgZWFjaCBmaXQgb25lIGNvbW1hbmQgbGluZSBhZnRlciBhIGdpdmVuIHByZWZpeC5cbiAqXG4gKiBFYWNoIGFyZ3VtZW50IGlzIGNvc3RlZCBhcyBuYW5vLXN0YWdlZCBwYXNzZXMgaXQgb24gV2luZG93cyBcdTIwMTQgcXVvdGVkLCB0aGVuIGBeYC1lc2NhcGVkIGJ5IGBjbWQuZXhlYCdzXG4gKiBydWxlcyBcdTIwMTQgdGhyb3VnaCB7QGxpbmsgZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGh9LCBhbmQgdGhlIGJ1ZGdldCBpcyB7QGxpbmsgZ2V0TWF4QmF0Y2hDb21tYW5kTGVuZ3RofSxcbiAqIHdoaWNoIGFscmVhZHkgaG9sZHMgYmFjayB0aGUgcmVzZXJ2ZSBmb3IgdGhlIGBucG1gIFx1MjE5MiBgY21kLmV4ZWAgXHUyMTkyIGAuYmluYCBzaGltIGNoYWluIHJlLWV4cGFuZGluZyB0aGVcbiAqIGFyZ3VtZW50cy4gQW4gYXJndW1lbnQgdG9vIGxvbmcgZm9yIGFueSBiYXRjaCBzdGlsbCBnZXRzIGEgYmF0Y2ggb2YgaXRzIG93bjogaXQgZmFpbHMgbG91ZGx5IHRoZXJlLCB3aGljaFxuICogZHJvcHBpbmcgaXQgd291bGQgbm90LlxuICpcbiAqIEBwYXJhbSBwcmVmaXggLSBUaGUgY29tbWFuZCB0aGUgYXJndW1lbnRzIGFyZSBhcHBlbmRlZCB0by5cbiAqIEBwYXJhbSBjb21tYW5kQXJndW1lbnRzIC0gVGhlIGFyZ3VtZW50cyB0byBzcGxpdC5cbiAqIEByZXR1cm5zIFRoZSBiYXRjaGVzLCBpbiBvcmRlciwgdG9nZXRoZXIgaG9sZGluZyBldmVyeSBhcmd1bWVudCBvbmNlLlxuICovXG5mdW5jdGlvbiBiYXRjaENvbW1hbmRBcmd1bWVudHMocHJlZml4OiBzdHJpbmcsIGNvbW1hbmRBcmd1bWVudHM6IHJlYWRvbmx5IHN0cmluZ1tdKTogc3RyaW5nW11bXSB7XG4gIGNvbnN0IGVtcHR5TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoJycpO1xuICBjb25zdCBidWRnZXQgPSBnZXRNYXhCYXRjaENvbW1hbmRMZW5ndGgoKSAtIEVYRUNVVEFCTEVfUEFUSF9SRVNFUlZFIC0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgocHJlZml4KTtcbiAgY29uc3QgYmF0Y2hlczogc3RyaW5nW11bXSA9IFtdO1xuICBsZXQgYmF0Y2g6IHN0cmluZ1tdID0gW107XG4gIGxldCBiYXRjaExlbmd0aCA9IDA7XG5cbiAgZm9yIChjb25zdCBjb21tYW5kQXJndW1lbnQgb2YgY29tbWFuZEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGFyZ3VtZW50TGVuZ3RoID0gZ2V0RWZmZWN0aXZlQ29tbWFuZExpbmVMZW5ndGgoYCBcIiR7Y29tbWFuZEFyZ3VtZW50fVwiYCkgLSBlbXB0eUxlbmd0aDtcbiAgICBpZiAoYmF0Y2gubGVuZ3RoID4gMCAmJiBiYXRjaExlbmd0aCArIGFyZ3VtZW50TGVuZ3RoID4gYnVkZ2V0KSB7XG4gICAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICAgICAgYmF0Y2ggPSBbXTtcbiAgICAgIGJhdGNoTGVuZ3RoID0gMDtcbiAgICB9XG4gICAgYmF0Y2gucHVzaChjb21tYW5kQXJndW1lbnQpO1xuICAgIGJhdGNoTGVuZ3RoICs9IGFyZ3VtZW50TGVuZ3RoO1xuICB9XG5cbiAgaWYgKGJhdGNoLmxlbmd0aCA+IDApIHtcbiAgICBiYXRjaGVzLnB1c2goYmF0Y2gpO1xuICB9XG5cbiAgcmV0dXJuIGJhdGNoZXM7XG59XG5cbi8qKlxuICogQnVpbGRzIGEgbmFuby1zdGFnZWQgY29uZmlndXJhdGlvbiBpbiB3aGljaCBzcGVsbGNoZWNrIG5ldmVyIHJlYWRzIGEgZmlsZSB3aGlsZSBhbm90aGVyIHRhc2sgcmV3cml0ZXMgaXQuXG4gKlxuICogVGhlIHNhbWUgYFByb21pc2UuYWxsYCB0aGF0IGZvcmNlcyB0d28gd3JpdGVycyBpbnRvIG9uZSBrZXkgbWFrZXMgYSBjYXRjaC1hbGwgYCcqJ2Agc3BlbGxjaGVjayBrZXkgcnVuXG4gKiBDT05DVVJSRU5UTFkgd2l0aCBldmVyeSB3cml0ZXIga2V5LCBzbyBjc3BlbGwgd291bGQgcmVhZCBhIGZpbGUgdGhhdCBFU0xpbnQgb3IgZHByaW50IGlzIHJld3JpdGluZyBpblxuICogcGxhY2UgLS0gYSBzcHVyaW91cyBmaW5kaW5nIG9uIGEgaGFsZi13cml0dGVuIGZpbGUsIG9yIGEgcGFzcyBvdmVyIGNvbnRlbnQgdGhhdCBpcyBub3Qgd2hhdCBnZXRzXG4gKiBjb21taXR0ZWQuIFNvIHRoZSBzdGFnZWQgZmlsZXMgYXJlIFBBUlRJVElPTkVEIGluc3RlYWQ6XG4gKlxuICogLSBldmVyeSB3cml0ZXIga2V5IGdldHMgc3BlbGxjaGVjayBhcHBlbmRlZCBhcyBpdHMgTEFTVCBjb21tYW5kLCBzbyBpdCByZWFkcyB0aGF0IGtleSdzIGZpbGVzIGFmdGVyIHRoZXlcbiAqICAgaGF2ZSBiZWVuIHJld3JpdHRlbjtcbiAqIC0gb25lIGNvbXBsZW1lbnQga2V5IHNwZWxsY2hlY2tzIGV4YWN0bHkgdGhlIGZpbGVzIG5vIHdyaXRlciBrZXkgY2xhaW1zLlxuICpcbiAqIFRoZSBjb21wbGVtZW50IGlzIHdyaXR0ZW4gaW4gbmFuby1zdGFnZWQncyBvd24gZ2xvYiBkaWFsZWN0LCB3aGljaCBjb21waWxlcyBgISguLi4pYCB0byBhIGxvb2thaGVhZCB0aGF0XG4gKiBpcyBOT1QgYW5jaG9yZWQgYXQgdGhlIGVuZCBvZiB0aGUgcGF0aDogYCEoKi5tZCkqYCB3b3VsZCBleGNsdWRlIGBub3Rlcy5tZC5iYWtgIHRvby4gQSBuZXN0ZWQgYCEoPylgXG4gKiBjb21waWxlcyB0byBgKD8hLilgLCB3aGljaCBJUyBhbiBlbmQgYW5jaG9yLCBzbyBlYWNoIGFsdGVybmF0aXZlIGlzIHN1ZmZpeGVkIHdpdGggaXQuIEEgd3JpdGVyIHBhdHRlcm5cbiAqIGNvbnRhaW5pbmcgYC9gIHdvdWxkIHN3aXRjaCBuYW5vLXN0YWdlZCBpbnRvIGdsb2JzdGFyIG1vZGUsIHdoZXJlIGAqYCBzdG9wcyBjcm9zc2luZyBkaXJlY3RvcmllcyBhbmQgdGhlXG4gKiBjb25zdHJ1Y3Rpb24gbm8gbG9uZ2VyIGhvbGRzIC0tIGhlbmNlIHRoZSB0aHJvdy4gVGhlIHVuaXQgdGVzdCBwaW5zIHRoZSBwYXJ0aXRpb24gYWdhaW5zdCB0aGUgaW5zdGFsbGVkXG4gKiBuYW5vLXN0YWdlZCBjb21waWxlciwgc28gYSByZWxlYXNlIHRoYXQgY2hhbmdlcyBpdHMgZGlhbGVjdCBmYWlscyB0aGVyZSByYXRoZXIgdGhhbiBpbiBhIGNvbW1pdC5cbiAqXG4gKiBAcGFyYW0gd3JpdGVyVGFza3MgLSBUaGUgZmlsZS1yZXdyaXRpbmcgdGFza3MsIGtleWVkIGJ5IHRoZSBwYXR0ZXJuIHRoYXQgY2xhaW1zIHRoZWlyIGZpbGVzLlxuICogQHJldHVybnMgVGhlIGNvbmZpZ3VyYXRpb24sIHdpdGggdGhlIHNwZWxsY2hlY2sgc3RlcCBwYXJ0aXRpb25lZCBhY3Jvc3MgdGhlIGtleXMuXG4gKi9cbmZ1bmN0aW9uIHBhcnRpdGlvblNwZWxsY2hlY2sod3JpdGVyVGFza3M6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHJlYWRvbmx5IHN0cmluZ1tdPj4pOiBOYW5vU3RhZ2VkQ29uZmlnIHtcbiAgY29uc3QgcGF0dGVybnMgPSBPYmplY3Qua2V5cyh3cml0ZXJUYXNrcyk7XG4gIGNvbnN0IHBhdHRlcm5XaXRoU2xhc2ggPSBwYXR0ZXJucy5maW5kKChwYXR0ZXJuKSA9PiBwYXR0ZXJuLmluY2x1ZGVzKCcvJykpO1xuICBpZiAocGF0dGVybldpdGhTbGFzaCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBuYW5vLXN0YWdlZCB3cml0ZXIgcGF0dGVybiAnJHtwYXR0ZXJuV2l0aFNsYXNofScgY29udGFpbnMgJy8nLCB3aGljaCB0aGUgc3BlbGxjaGVjayBwYXJ0aXRpb24gY2Fubm90IGV4cHJlc3MuYCk7XG4gIH1cblxuICBjb25zdCBjb21wbGVtZW50UGF0dGVybiA9IGAhKCR7cGF0dGVybnMubWFwKChwYXR0ZXJuKSA9PiBgJHtwYXR0ZXJufSEoPylgKS5qb2luKCd8Jyl9KSpgO1xuICBjb25zdCBjb25maWc6IE5hbm9TdGFnZWRDb25maWcgPSB7XG4gICAgW2NvbXBsZW1lbnRQYXR0ZXJuXTogdG9CYXRjaGVkVGFzayhbU1BFTExDSEVDS19DT01NQU5EXSlcbiAgfTtcblxuICBmb3IgKGNvbnN0IFtwYXR0ZXJuLCBjb21tYW5kc10gb2YgT2JqZWN0LmVudHJpZXMod3JpdGVyVGFza3MpKSB7XG4gICAgY29uZmlnW3BhdHRlcm5dID0gdG9CYXRjaGVkVGFzayhbLi4uY29tbWFuZHMsIFNQRUxMQ0hFQ0tfQ09NTUFORF0pO1xuICB9XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cblxuLyoqXG4gKiBCdWlsZHMgYSB0YXNrIHRoYXQgcnVucyBlYWNoIGNvbW1hbmQgb3ZlciBldmVyeSBzdGFnZWQgZmlsZSBpdCByZWNlaXZlcywgaW4gYXMgbWFueSBiYXRjaGVzIGFzIHRoZSBjb21tYW5kXG4gKiBsaW5lIG5lZWRzLlxuICpcbiAqIG5hbm8tc3RhZ2VkIGFwcGVuZHMgYSBzdHJpbmcgdGFzaydzIGZpbGVzIHRvIE9ORSBjb21tYW5kLCBzbyBhIGNvbW1pdCBzdGFnaW5nIGEgZmV3IGh1bmRyZWQgZmlsZXMgcmFuXG4gKiBgbnBtIHJ1biBsaW50OmZpeCAtLSA8ZXZlcnkgcGF0aD5gIGFuZCBmYWlsZWQgb24gV2luZG93cyB3aXRoIGBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nLmAsIHJlZnVzaW5nXG4gKiBleGFjdGx5IHRoZSB3aG9sZS1yZXBvIGNvbW1pdHMgdGhhdCBtb3N0IG5lZWQgdGhlIGhvb2suIEEgZnVuY3Rpb24tdmFsdWVkIHRhc2sgYnVpbGRzIGl0cyBvd24gY29tbWFuZHNcbiAqIGluc3RlYWQsIGFuZCB0aGVzZSBhcmUgYmF0Y2hlZCBhZ2FpbnN0IHRoZSBzYW1lIGJ1ZGdldCBgZXhlYygpYCB1c2VzIChzZWUgYGJhdGNoQ29tbWFuZEFyZ3VtZW50c2ApLlxuICpcbiAqIFRoZSBjb21tYW5kcyBrZWVwIHRoZWlyIG9yZGVyOiBldmVyeSBiYXRjaCBvZiB0aGUgZmlyc3QgY29tbWFuZCBydW5zIGJlZm9yZSBhbnkgYmF0Y2ggb2YgdGhlIHNlY29uZCxcbiAqIGJlY2F1c2UgbmFuby1zdGFnZWQgcnVucyBvbmUga2V5J3MgY29tbWFuZHMgb25lIGFmdGVyIGFub3RoZXIsIHNvIGEgd3JpdGVyIHN0aWxsIGZpbmlzaGVzIGJlZm9yZSB0aGUgbmV4dFxuICogd3JpdGVyLCBhbmQgc3BlbGxjaGVjayBzdGlsbCByZWFkcyB0aGUgcmV3cml0dGVuIGZpbGVzLlxuICpcbiAqIEBwYXJhbSBjb21tYW5kcyAtIFRoZSBjb21tYW5kIHByZWZpeGVzLCBpbiB0aGUgb3JkZXIgdGhleSBydW4uXG4gKiBAcmV0dXJucyBUaGUgdGFzay5cbiAqL1xuZnVuY3Rpb24gdG9CYXRjaGVkVGFzayhjb21tYW5kczogcmVhZG9ubHkgc3RyaW5nW10pOiBOYW5vU3RhZ2VkVGFzayB7XG4gIHJldHVybiAoeyBmaWxlbmFtZXMgfSkgPT4ge1xuICAgIGNvbnN0IGNvbW1hbmRBcmd1bWVudHMgPSBmaWxlbmFtZXMubWFwKChmaWxlbmFtZSkgPT4gdG9Db21tYW5kQXJndW1lbnQoZmlsZW5hbWUpKTtcbiAgICByZXR1cm4gY29tbWFuZHMuZmxhdE1hcCgoY29tbWFuZCkgPT4gYmF0Y2hDb21tYW5kQXJndW1lbnRzKGNvbW1hbmQsIGNvbW1hbmRBcmd1bWVudHMpLm1hcCgoYmF0Y2gpID0+IGAke2NvbW1hbmR9ICR7YmF0Y2guam9pbignICcpfWApKTtcbiAgfTtcbn1cblxuLyoqXG4gKiBUdXJucyBhIHN0YWdlZCBmaWxlJ3MgYWJzb2x1dGUgcGF0aCBpbnRvIHRoZSBhcmd1bWVudCBhIGJhdGNoZWQgdGFzayBwYXNzZXMgZm9yIGl0LlxuICpcbiAqIFRoZSBwYXRoIGlzIG1hZGUgcmVsYXRpdmUgdG8gdGhlIHdvcmtpbmcgZGlyZWN0b3J5LCB3aGVyZSBuYW5vLXN0YWdlZCBhbmQgdGhlIHRhc2sgYm90aCBydW4sIHdoaWNoIHJvdWdobHlcbiAqIGhhbHZlcyBpdHMgbGVuZ3RoIGFuZCBzbyB0aGUgbnVtYmVyIG9mIGJhdGNoZXM7IGEgcGF0aCBvdXRzaWRlIGl0IHN0YXlzIGFic29sdXRlLiBBIHJlbGF0aXZlIHBhdGggc3RhcnRpbmdcbiAqIHdpdGggYC1gIGdldHMgYC4vYCwgc28gbm8gdG9vbCByZWFkcyBpdCBhcyBhbiBvcHRpb24uXG4gKlxuICogV2hpdGVzcGFjZSBhbmQgcXVvdGVzIGJlY29tZSBgP2AsIGJlY2F1c2UgbmFuby1zdGFnZWQncyB0b2tlbml6ZXIgY2Fubm90IGNhcnJ5IHRoZW0gKHNlZVxuICoge0BsaW5rIFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQfSkuIEV2ZXJ5IHRvb2wgdGhlIHRhc2tzIHJ1biAoRVNMaW50LCBkcHJpbnQsIGNzcGVsbCxcbiAqIG1hcmtkb3dubGludC1jbGkyKSB0YWtlcyBpdHMgcGF0aHMgYXMgZ2xvYnMsIGFuZCBgP2AgbWF0Y2hlcyBleGFjdGx5IHRoZSBvbmUgY2hhcmFjdGVyIGl0IHJlcGxhY2VkLCBzbyB0aGVcbiAqIGZpbGUgaXMgc3RpbGwgZm91bmQ7IGEgc2libGluZyBkaWZmZXJpbmcgb25seSBpbiB0aGF0IGNoYXJhY3RlciB3b3VsZCBtYXRjaCB0b28sIHdoaWNoIGNvc3RzIGEgbGludCBvZiBhblxuICogZXh0cmEgZmlsZSwgbm90IGEgbWlzc2VkIG9uZS5cbiAqXG4gKiBAcGFyYW0gZmlsZW5hbWUgLSBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgc3RhZ2VkIGZpbGUuXG4gKiBAcmV0dXJucyBUaGUgYXJndW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHRvQ29tbWFuZEFyZ3VtZW50KGZpbGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCByZWxhdGl2ZVBhdGggPSByZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBmaWxlbmFtZSk7XG4gIGxldCBjb21tYW5kQXJndW1lbnQgPSAocmVsYXRpdmVQYXRoLnN0YXJ0c1dpdGgoJy4uJykgfHwgaXNBYnNvbHV0ZShyZWxhdGl2ZVBhdGgpID8gZmlsZW5hbWUgOiByZWxhdGl2ZVBhdGgpLnJlcGxhY2VBbGwoJ1xcXFwnLCAnLycpO1xuICBpZiAoY29tbWFuZEFyZ3VtZW50LnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbW1hbmRBcmd1bWVudCA9IGAuLyR7Y29tbWFuZEFyZ3VtZW50fWA7XG4gIH1cbiAgcmV0dXJuIGNvbW1hbmRBcmd1bWVudC5yZXBsYWNlQWxsKFRPS0VOSVpFUl9VTlNBRkVfQ0hBUkFDVEVSU19SRUdfRVhQLCAnPycpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBTUEsdUJBR087QUFDUCwwQkFBb0I7QUFFcEIsd0JBR087QUFDUCxrQkFHTztBQUNQLDZCQUE0QztBQTJDNUMsTUFBTSxrQ0FBOEIsb0RBQTRCLEVBQUUsS0FBSyxHQUFHO0FBRTFFLE1BQU0scUJBQXFCLEdBQUcsMkJBQTJCO0FBUXpELE1BQU0sMEJBQTBCO0FBU2hDLE1BQU0sc0NBQXNDO0FBZ0I1QyxNQUFNLGVBQTREO0FBQUEsRUFDaEUsa0JBQWtCO0FBQUEsSUFDaEIsR0FBRywyQkFBMkI7QUFBQSxJQUM5QixHQUFHLDJCQUEyQjtBQUFBLEVBQ2hDO0FBQUEsRUFDQSxRQUFRO0FBQUEsSUFDTixHQUFHLDJCQUEyQjtBQUFBLEVBQ2hDO0FBQ0Y7QUFpQk8sTUFBTSx5QkFBMkMsb0JBQW9CLFlBQVk7QUFFeEYsTUFBTSwyQkFBMkI7QUFzQjFCLFNBQVMsb0JBQW9CLFNBQXdEO0FBQzFGLDZDQUFvQjtBQUVwQixVQUFJLG9DQUFpQix3QkFBd0IsR0FBRztBQUM5Qyx3QkFBQUEsUUFBUSxPQUFPLE1BQU0seUJBQXlCLHdCQUF3QjtBQUFBLENBQWE7QUFDbkYsd0JBQUFBLFFBQVEsS0FBSyxDQUFDO0FBQUEsRUFDaEI7QUFFQSxRQUFNLHdCQUF3QixTQUFTLHlCQUF5QixDQUFDO0FBQ2pFLE1BQUksT0FBTyxLQUFLLHFCQUFxQixFQUFFLFdBQVcsR0FBRztBQUNuRCxXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sbUJBQW1CLE9BQU8sS0FBSyxxQkFBcUIsRUFBRSxLQUFLLENBQUMsWUFBWSxPQUFPLE9BQU8sY0FBYyxPQUFPLENBQUM7QUFDbEgsTUFBSSxxQkFBcUIsUUFBVztBQUNsQyxVQUFNLElBQUksTUFBTSwrQkFBK0IsZ0JBQWdCLHVDQUF1QztBQUFBLEVBQ3hHO0FBRUEsU0FBTyxvQkFBb0IsRUFBRSxHQUFHLGNBQWMsR0FBRyxzQkFBc0IsQ0FBQztBQUMxRTtBQWVBLFNBQVMsc0JBQXNCLFFBQWdCLGtCQUFpRDtBQUM5RixRQUFNLGtCQUFjLDJDQUE4QixFQUFFO0FBQ3BELFFBQU0sYUFBUyxzQ0FBeUIsSUFBSSw4QkFBMEIsMkNBQThCLE1BQU07QUFDMUcsUUFBTSxVQUFzQixDQUFDO0FBQzdCLE1BQUksUUFBa0IsQ0FBQztBQUN2QixNQUFJLGNBQWM7QUFFbEIsYUFBVyxtQkFBbUIsa0JBQWtCO0FBQzlDLFVBQU0scUJBQWlCLDJDQUE4QixLQUFLLGVBQWUsR0FBRyxJQUFJO0FBQ2hGLFFBQUksTUFBTSxTQUFTLEtBQUssY0FBYyxpQkFBaUIsUUFBUTtBQUM3RCxjQUFRLEtBQUssS0FBSztBQUNsQixjQUFRLENBQUM7QUFDVCxvQkFBYztBQUFBLElBQ2hCO0FBQ0EsVUFBTSxLQUFLLGVBQWU7QUFDMUIsbUJBQWU7QUFBQSxFQUNqQjtBQUVBLE1BQUksTUFBTSxTQUFTLEdBQUc7QUFDcEIsWUFBUSxLQUFLLEtBQUs7QUFBQSxFQUNwQjtBQUVBLFNBQU87QUFDVDtBQXdCQSxTQUFTLG9CQUFvQixhQUE0RTtBQUN2RyxRQUFNLFdBQVcsT0FBTyxLQUFLLFdBQVc7QUFDeEMsUUFBTSxtQkFBbUIsU0FBUyxLQUFLLENBQUMsWUFBWSxRQUFRLFNBQVMsR0FBRyxDQUFDO0FBQ3pFLE1BQUkscUJBQXFCLFFBQVc7QUFDbEMsVUFBTSxJQUFJLE1BQU0sK0JBQStCLGdCQUFnQixnRUFBZ0U7QUFBQSxFQUNqSTtBQUVBLFFBQU0sb0JBQW9CLEtBQUssU0FBUyxJQUFJLENBQUMsWUFBWSxHQUFHLE9BQU8sTUFBTSxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQ3BGLFFBQU0sU0FBMkI7QUFBQSxJQUMvQixDQUFDLGlCQUFpQixHQUFHLGNBQWMsQ0FBQyxrQkFBa0IsQ0FBQztBQUFBLEVBQ3pEO0FBRUEsYUFBVyxDQUFDLFNBQVMsUUFBUSxLQUFLLE9BQU8sUUFBUSxXQUFXLEdBQUc7QUFDN0QsV0FBTyxPQUFPLElBQUksY0FBYyxDQUFDLEdBQUcsVUFBVSxrQkFBa0IsQ0FBQztBQUFBLEVBQ25FO0FBRUEsU0FBTztBQUNUO0FBa0JBLFNBQVMsY0FBYyxVQUE2QztBQUNsRSxTQUFPLENBQUMsRUFBRSxVQUFVLE1BQU07QUFDeEIsVUFBTSxtQkFBbUIsVUFBVSxJQUFJLENBQUMsYUFBYSxrQkFBa0IsUUFBUSxDQUFDO0FBQ2hGLFdBQU8sU0FBUyxRQUFRLENBQUMsWUFBWSxzQkFBc0IsU0FBUyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sSUFBSSxNQUFNLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUFBLEVBQ3ZJO0FBQ0Y7QUFrQkEsU0FBUyxrQkFBa0IsVUFBMEI7QUFDbkQsUUFBTSxtQkFBZSwyQkFBUyxvQkFBQUEsUUFBUSxJQUFJLEdBQUcsUUFBUTtBQUNyRCxNQUFJLG1CQUFtQixhQUFhLFdBQVcsSUFBSSxTQUFLLDZCQUFXLFlBQVksSUFBSSxXQUFXLGNBQWMsV0FBVyxNQUFNLEdBQUc7QUFDaEksTUFBSSxnQkFBZ0IsV0FBVyxHQUFHLEdBQUc7QUFDbkMsc0JBQWtCLEtBQUssZUFBZTtBQUFBLEVBQ3hDO0FBQ0EsU0FBTyxnQkFBZ0IsV0FBVyxxQ0FBcUMsR0FBRztBQUM1RTsiLAogICJuYW1lcyI6IFsicHJvY2VzcyJdCn0K
|
|
@@ -12,10 +12,29 @@ export interface GetNanoStagedConfigOptions {
|
|
|
12
12
|
* Repo-specific file-rewriting tasks, keyed by the nano-staged pattern that claims their files.
|
|
13
13
|
*
|
|
14
14
|
* Each gets spellcheck appended and its files removed from the spellcheck-only key, exactly like the shared
|
|
15
|
-
* writers. A pattern must not contain `/`, and must not repeat a shared writer pattern.
|
|
15
|
+
* writers. A pattern must not contain `/`, and must not repeat a shared writer pattern. Each command is a
|
|
16
|
+
* prefix the staged paths are appended to, in batches, like the shared ones (`npm run lint:fix --`).
|
|
16
17
|
*/
|
|
17
18
|
readonly additionalWriterTasks?: Readonly<Record<string, readonly string[]>>;
|
|
18
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* A nano-staged configuration whose every key is a {@link NanoStagedTask}.
|
|
22
|
+
*/
|
|
23
|
+
export type NanoStagedConfig = Record<string, NanoStagedTask>;
|
|
24
|
+
/**
|
|
25
|
+
* A function-valued nano-staged task: it receives the staged files its pattern claims and returns the
|
|
26
|
+
* commands to run over them, in order.
|
|
27
|
+
*/
|
|
28
|
+
export type NanoStagedTask = (context: NanoStagedTaskContext) => string[];
|
|
29
|
+
/**
|
|
30
|
+
* What nano-staged passes to a function-valued task.
|
|
31
|
+
*/
|
|
32
|
+
export interface NanoStagedTaskContext {
|
|
33
|
+
/**
|
|
34
|
+
* The absolute paths of the staged files the task's pattern claims.
|
|
35
|
+
*/
|
|
36
|
+
readonly filenames: readonly string[];
|
|
37
|
+
}
|
|
19
38
|
/**
|
|
20
39
|
* Nano-staged configuration that runs file-based lint, format, and spellcheck on staged files.
|
|
21
40
|
*
|
|
@@ -23,14 +42,15 @@ export interface GetNanoStagedConfigOptions {
|
|
|
23
42
|
* (TypeScript compilation, unit tests) are left to CI.
|
|
24
43
|
*
|
|
25
44
|
* Commands run through the package manager that owns the tree — `npm run ... --`, `bun run ... --`, and
|
|
26
|
-
* so on — so nano-staged file paths are forwarded as CLI arguments
|
|
45
|
+
* so on — so nano-staged file paths are forwarded as CLI arguments, batched to fit the command line (see
|
|
46
|
+
* `toBatchedTask`).
|
|
27
47
|
*
|
|
28
48
|
* Spellcheck is partitioned across the keys rather than given a catch-all `'*'` key (see
|
|
29
49
|
* `partitionSpellcheck`). A repo adding a file-rewriting task of its own passes it to
|
|
30
50
|
* {@link getNanoStagedConfig} as `additionalWriterTasks` rather than spreading this object and adding a key,
|
|
31
51
|
* which would reintroduce the overlap for that key's files.
|
|
32
52
|
*/
|
|
33
|
-
export declare const obsidianDevUtilsConfig:
|
|
53
|
+
export declare const obsidianDevUtilsConfig: NanoStagedConfig;
|
|
34
54
|
/**
|
|
35
55
|
* Resolves the nano-staged configuration to use, honoring a per-developer opt-out.
|
|
36
56
|
*
|
|
@@ -51,4 +71,4 @@ export declare const obsidianDevUtilsConfig: Record<string, string[]>;
|
|
|
51
71
|
* @param options - The optional options.
|
|
52
72
|
* @returns The nano-staged task configuration. Does not return when the opt-out is active.
|
|
53
73
|
*/
|
|
54
|
-
export declare function getNanoStagedConfig(options?: GetNanoStagedConfigOptions):
|
|
74
|
+
export declare function getNanoStagedConfig(options?: GetNanoStagedConfigOptions): NanoStagedConfig;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/// <reference path="../library-references.d.mts" />
|
|
2
|
+
/**
|
|
3
|
+
* @file
|
|
4
|
+
*
|
|
5
|
+
* Which source files the API reference documents, shared by the source walk and by the cross-site linker, so a
|
|
6
|
+
* link to another package's site never names a page that site's generator skipped.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Checks whether a directory's subtree is documented.
|
|
10
|
+
*
|
|
11
|
+
* @param name - The directory's name.
|
|
12
|
+
* @returns `false` for a `@types`, `styles` or `test-helpers` directory.
|
|
13
|
+
*/
|
|
14
|
+
export declare function isDocumentedDirectoryName(name: string): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Checks whether a source file is documented, judged by its name alone.
|
|
17
|
+
*
|
|
18
|
+
* Excludes: `*.test.ts` (incl. `*.browser.test.ts` / `*.integration.test.ts`), `*.d.ts`, `index.ts`, `__merged.ts`,
|
|
19
|
+
* `setup.ts` and `*-setup.ts`.
|
|
20
|
+
*
|
|
21
|
+
* @param name - The file's name.
|
|
22
|
+
* @returns Whether the file is documented.
|
|
23
|
+
*/
|
|
24
|
+
export declare function isDocumentedFileName(name: string): boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Checks whether a module, given by its path relative to the source folder, has documentation pages.
|
|
27
|
+
*
|
|
28
|
+
* @param modulePath - The POSIX path relative to the source folder, without its extension (`linters/eslint`).
|
|
29
|
+
* @returns Whether the generator documents that module.
|
|
30
|
+
*/
|
|
31
|
+
export declare function isDocumentedModulePath(modulePath: string): boolean;
|
|
@@ -0,0 +1,25 @@
|
|
|
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
|
+
|
|
6
|
+
const EXCLUDED_DIR_SEGMENTS = /* @__PURE__ */ new Set(["@types", "styles", "test-helpers"]);
|
|
7
|
+
const EXCLUDED_FILE_NAMES = /* @__PURE__ */ new Set(["__merged.ts", "index.ts", "setup.ts"]);
|
|
8
|
+
function isDocumentedDirectoryName(name) {
|
|
9
|
+
return !EXCLUDED_DIR_SEGMENTS.has(name);
|
|
10
|
+
}
|
|
11
|
+
function isDocumentedFileName(name) {
|
|
12
|
+
return name.endsWith(".ts") && !name.endsWith(".d.ts") && !EXCLUDED_FILE_NAMES.has(name) && !name.endsWith("-setup.ts") && !name.endsWith(".test.ts");
|
|
13
|
+
}
|
|
14
|
+
function isDocumentedModulePath(modulePath) {
|
|
15
|
+
const segments = modulePath.split("/");
|
|
16
|
+
const directoryNames = segments.slice(0, -1);
|
|
17
|
+
const fileName = `${segments.slice(-1).join("")}.ts`;
|
|
18
|
+
return directoryNames.every((directoryName) => isDocumentedDirectoryName(directoryName)) && isDocumentedFileName(fileName);
|
|
19
|
+
}
|
|
20
|
+
export {
|
|
21
|
+
isDocumentedDirectoryName,
|
|
22
|
+
isDocumentedFileName,
|
|
23
|
+
isDocumentedModulePath
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vLi4vc3JjL2RvY3Mtc2l0ZS9hcGktZG9jLWRvY3VtZW50ZWQtZmlsZXMudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBXaGljaCBzb3VyY2UgZmlsZXMgdGhlIEFQSSByZWZlcmVuY2UgZG9jdW1lbnRzLCBzaGFyZWQgYnkgdGhlIHNvdXJjZSB3YWxrIGFuZCBieSB0aGUgY3Jvc3Mtc2l0ZSBsaW5rZXIsIHNvIGFcbiAqIGxpbmsgdG8gYW5vdGhlciBwYWNrYWdlJ3Mgc2l0ZSBuZXZlciBuYW1lcyBhIHBhZ2UgdGhhdCBzaXRlJ3MgZ2VuZXJhdG9yIHNraXBwZWQuXG4gKi9cblxuLyoqXG4gKiBEaXJlY3RvcnkgbmFtZXMgd2hvc2UgZW50aXJlIHN1YnRyZWUgaXMgZXhjbHVkZWQgZnJvbSBkb2N1bWVudGF0aW9uLlxuICovXG5jb25zdCBFWENMVURFRF9ESVJfU0VHTUVOVFMgPSBuZXcgU2V0KFsnQHR5cGVzJywgJ3N0eWxlcycsICd0ZXN0LWhlbHBlcnMnXSk7XG5cbi8qKlxuICogRmlsZSBuYW1lcyB0aGF0IGFyZSBuZXZlciBkb2N1bWVudGVkLCB3aGF0ZXZlciBmb2xkZXIgdGhleSBzaXQgaW4uXG4gKi9cbmNvbnN0IEVYQ0xVREVEX0ZJTEVfTkFNRVMgPSBuZXcgU2V0KFsnX19tZXJnZWQudHMnLCAnaW5kZXgudHMnLCAnc2V0dXAudHMnXSk7XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBkaXJlY3RvcnkncyBzdWJ0cmVlIGlzIGRvY3VtZW50ZWQuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBUaGUgZGlyZWN0b3J5J3MgbmFtZS5cbiAqIEByZXR1cm5zIGBmYWxzZWAgZm9yIGEgYEB0eXBlc2AsIGBzdHlsZXNgIG9yIGB0ZXN0LWhlbHBlcnNgIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9jdW1lbnRlZERpcmVjdG9yeU5hbWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAhRVhDTFVERURfRElSX1NFR01FTlRTLmhhcyhuYW1lKTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIHNvdXJjZSBmaWxlIGlzIGRvY3VtZW50ZWQsIGp1ZGdlZCBieSBpdHMgbmFtZSBhbG9uZS5cbiAqXG4gKiBFeGNsdWRlczogYCoudGVzdC50c2AgKGluY2wuIGAqLmJyb3dzZXIudGVzdC50c2AgLyBgKi5pbnRlZ3JhdGlvbi50ZXN0LnRzYCksIGAqLmQudHNgLCBgaW5kZXgudHNgLCBgX19tZXJnZWQudHNgLFxuICogYHNldHVwLnRzYCBhbmQgYCotc2V0dXAudHNgLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIGZpbGUncyBuYW1lLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZmlsZSBpcyBkb2N1bWVudGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNEb2N1bWVudGVkRmlsZU5hbWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIC8vIFRoZSBgLnRlc3QudHNgIGNsYXVzZSBjb3ZlcnMgKi50ZXN0LnRzLCAqLmJyb3dzZXIudGVzdC50cywgKi5pbnRlZ3JhdGlvbi50ZXN0LnRzXG4gIHJldHVybiBuYW1lLmVuZHNXaXRoKCcudHMnKSAmJiAhbmFtZS5lbmRzV2l0aCgnLmQudHMnKSAmJiAhRVhDTFVERURfRklMRV9OQU1FUy5oYXMobmFtZSkgJiYgIW5hbWUuZW5kc1dpdGgoJy1zZXR1cC50cycpXG4gICAgJiYgIW5hbWUuZW5kc1dpdGgoJy50ZXN0LnRzJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBtb2R1bGUsIGdpdmVuIGJ5IGl0cyBwYXRoIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZm9sZGVyLCBoYXMgZG9jdW1lbnRhdGlvbiBwYWdlcy5cbiAqXG4gKiBAcGFyYW0gbW9kdWxlUGF0aCAtIFRoZSBQT1NJWCBwYXRoIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgZm9sZGVyLCB3aXRob3V0IGl0cyBleHRlbnNpb24gKGBsaW50ZXJzL2VzbGludGApLlxuICogQHJldHVybnMgV2hldGhlciB0aGUgZ2VuZXJhdG9yIGRvY3VtZW50cyB0aGF0IG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRG9jdW1lbnRlZE1vZHVsZVBhdGgobW9kdWxlUGF0aDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IHNlZ21lbnRzID0gbW9kdWxlUGF0aC5zcGxpdCgnLycpO1xuICBjb25zdCBkaXJlY3RvcnlOYW1lcyA9IHNlZ21lbnRzLnNsaWNlKDAsIC0xKTtcbiAgY29uc3QgZmlsZU5hbWUgPSBgJHtzZWdtZW50cy5zbGljZSgtMSkuam9pbignJyl9LnRzYDtcbiAgcmV0dXJuIGRpcmVjdG9yeU5hbWVzLmV2ZXJ5KChkaXJlY3RvcnlOYW1lKSA9PiBpc0RvY3VtZW50ZWREaXJlY3RvcnlOYW1lKGRpcmVjdG9yeU5hbWUpKSAmJiBpc0RvY3VtZW50ZWRGaWxlTmFtZShmaWxlTmFtZSk7XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7OztBQVVBLE1BQU0sd0JBQXdCLG9CQUFJLElBQUksQ0FBQyxVQUFVLFVBQVUsY0FBYyxDQUFDO0FBSzFFLE1BQU0sc0JBQXNCLG9CQUFJLElBQUksQ0FBQyxlQUFlLFlBQVksVUFBVSxDQUFDO0FBUXBFLFNBQVMsMEJBQTBCLE1BQXVCO0FBQy9ELFNBQU8sQ0FBQyxzQkFBc0IsSUFBSSxJQUFJO0FBQ3hDO0FBV08sU0FBUyxxQkFBcUIsTUFBdUI7QUFFMUQsU0FBTyxLQUFLLFNBQVMsS0FBSyxLQUFLLENBQUMsS0FBSyxTQUFTLE9BQU8sS0FBSyxDQUFDLG9CQUFvQixJQUFJLElBQUksS0FBSyxDQUFDLEtBQUssU0FBUyxXQUFXLEtBQ2pILENBQUMsS0FBSyxTQUFTLFVBQVU7QUFDaEM7QUFRTyxTQUFTLHVCQUF1QixZQUE2QjtBQUNsRSxRQUFNLFdBQVcsV0FBVyxNQUFNLEdBQUc7QUFDckMsUUFBTSxpQkFBaUIsU0FBUyxNQUFNLEdBQUcsRUFBRTtBQUMzQyxRQUFNLFdBQVcsR0FBRyxTQUFTLE1BQU0sRUFBRSxFQUFFLEtBQUssRUFBRSxDQUFDO0FBQy9DLFNBQU8sZUFBZSxNQUFNLENBQUMsa0JBQWtCLDBCQUEwQixhQUFhLENBQUMsS0FBSyxxQkFBcUIsUUFBUTtBQUMzSDsiLAogICJuYW1lcyI6IFtdCn0K
|
|
@@ -7,7 +7,8 @@
|
|
|
7
7
|
* A type is recognized by where its declaration lives, not by its name: a declaration under
|
|
8
8
|
* `node_modules/<package>/dist/lib/{esm,cjs}/<path>.d.{mts,cts}` of a package in
|
|
9
9
|
* {@link ApiDocSettings.packageSites} is the page `<site>api/<path>/<Type>/`, built with the generator's own slug
|
|
10
|
-
* rules, because that site was generated from the same tree.
|
|
10
|
+
* rules, because that site was generated from the same tree. A module that generator skips (`@types`, `index`,
|
|
11
|
+
* `*-setup`, ...) has no page, so a type declared there is not linked.
|
|
11
12
|
*/
|
|
12
13
|
/**
|
|
13
14
|
* The documentation sites of the `@mnaoumov` packages, which each site links to unless told otherwise.
|
|
@@ -37,6 +37,7 @@ ensureBrowserProcess();
|
|
|
37
37
|
})();
|
|
38
38
|
|
|
39
39
|
import { getMandatoryNamedGroup } from "@mnaoumov/typescript-lib/reg-exp";
|
|
40
|
+
import { isDocumentedModulePath } from "./api-doc-documented-files.mjs";
|
|
40
41
|
import { toRouteSegmentPreserveCase } from "./api-doc-route-segments.mjs";
|
|
41
42
|
import { getApiDocSettings } from "./api-doc-settings.mjs";
|
|
42
43
|
const PACKAGE_DECLARATION_REG_EXP = /\/node_modules\/(?<Package>(?:@[^/]+\/)?[^/]+)\/dist\/lib\/(?:cjs|esm)\/(?<Path>.+?)(?:\.d\.[cm]?ts)?$/;
|
|
@@ -76,7 +77,7 @@ function toPackageTypeUrl(params) {
|
|
|
76
77
|
}
|
|
77
78
|
const packageName = getMandatoryNamedGroup(match, "Package");
|
|
78
79
|
const path = getMandatoryNamedGroup(match, "Path");
|
|
79
|
-
if (packageName === settings.packageName) {
|
|
80
|
+
if (packageName === settings.packageName || !isDocumentedModulePath(path)) {
|
|
80
81
|
return void 0;
|
|
81
82
|
}
|
|
82
83
|
const site = settings.packageSites.get(packageName);
|
|
@@ -88,4 +89,4 @@ export {
|
|
|
88
89
|
getPackageTypeUrl,
|
|
89
90
|
registerPackageDeclaration
|
|
90
91
|
};
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDcm9zcy1zaXRlIGxpbmtzOiBhIHR5cGUgZGVjbGFyZWQgaW4gYW5vdGhlciBkb2N1bWVudGVkIHBhY2thZ2UgbGlua3MgdG8gaXRzIHBhZ2Ugb24gdGhhdCBwYWNrYWdlJ3Mgc2l0ZS5cbiAqXG4gKiBBIHR5cGUgaXMgcmVjb2duaXplZCBieSB3aGVyZSBpdHMgZGVjbGFyYXRpb24gbGl2ZXMsIG5vdCBieSBpdHMgbmFtZTogYSBkZWNsYXJhdGlvbiB1bmRlclxuICogYG5vZGVfbW9kdWxlcy88cGFja2FnZT4vZGlzdC9saWIve2VzbSxjanN9LzxwYXRoPi5kLnttdHMsY3RzfWAgb2YgYSBwYWNrYWdlIGluXG4gKiB7QGxpbmsgQXBpRG9jU2V0dGluZ3MucGFja2FnZVNpdGVzfSBpcyB0aGUgcGFnZSBgPHNpdGU+
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9kb2NzLXNpdGUvYXBpLWRvYy1wYWNrYWdlLXNpdGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBDcm9zcy1zaXRlIGxpbmtzOiBhIHR5cGUgZGVjbGFyZWQgaW4gYW5vdGhlciBkb2N1bWVudGVkIHBhY2thZ2UgbGlua3MgdG8gaXRzIHBhZ2Ugb24gdGhhdCBwYWNrYWdlJ3Mgc2l0ZS5cbiAqXG4gKiBBIHR5cGUgaXMgcmVjb2duaXplZCBieSB3aGVyZSBpdHMgZGVjbGFyYXRpb24gbGl2ZXMsIG5vdCBieSBpdHMgbmFtZTogYSBkZWNsYXJhdGlvbiB1bmRlclxuICogYG5vZGVfbW9kdWxlcy88cGFja2FnZT4vZGlzdC9saWIve2VzbSxjanN9LzxwYXRoPi5kLnttdHMsY3RzfWAgb2YgYSBwYWNrYWdlIGluXG4gKiB7QGxpbmsgQXBpRG9jU2V0dGluZ3MucGFja2FnZVNpdGVzfSBpcyB0aGUgcGFnZSBgPHNpdGU+YXBpLzxwYXRoPi88VHlwZT4vYCwgYnVpbHQgd2l0aCB0aGUgZ2VuZXJhdG9yJ3Mgb3duIHNsdWdcbiAqIHJ1bGVzLCBiZWNhdXNlIHRoYXQgc2l0ZSB3YXMgZ2VuZXJhdGVkIGZyb20gdGhlIHNhbWUgdHJlZS4gQSBtb2R1bGUgdGhhdCBnZW5lcmF0b3Igc2tpcHMgKGBAdHlwZXNgLCBgaW5kZXhgLFxuICogYCotc2V0dXBgLCAuLi4pIGhhcyBubyBwYWdlLCBzbyBhIHR5cGUgZGVjbGFyZWQgdGhlcmUgaXMgbm90IGxpbmtlZC5cbiAqL1xuXG5pbXBvcnQgeyBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwIH0gZnJvbSAnQG1uYW91bW92L3R5cGVzY3JpcHQtbGliL3JlZy1leHAnO1xuXG5pbXBvcnQgdHlwZSB7IEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuaW1wb3J0IHsgaXNEb2N1bWVudGVkTW9kdWxlUGF0aCB9IGZyb20gJy4vYXBpLWRvYy1kb2N1bWVudGVkLWZpbGVzLnRzJztcbmltcG9ydCB7IHRvUm91dGVTZWdtZW50UHJlc2VydmVDYXNlIH0gZnJvbSAnLi9hcGktZG9jLXJvdXRlLXNlZ21lbnRzLnRzJztcbmltcG9ydCB7IGdldEFwaURvY1NldHRpbmdzIH0gZnJvbSAnLi9hcGktZG9jLXNldHRpbmdzLnRzJztcblxuY29uc3QgUEFDS0FHRV9ERUNMQVJBVElPTl9SRUdfRVhQID0gL1xcL25vZGVfbW9kdWxlc1xcLyg/PFBhY2thZ2U+KD86QFteL10rXFwvKT9bXi9dKylcXC9kaXN0XFwvbGliXFwvKD86Y2pzfGVzbSlcXC8oPzxQYXRoPi4rPykoPzpcXC5kXFwuW2NtXT90cyk/JC87XG5cbi8qKlxuICogVGhlIGRvY3VtZW50YXRpb24gc2l0ZXMgb2YgdGhlIGBAbW5hb3Vtb3ZgIHBhY2thZ2VzLCB3aGljaCBlYWNoIHNpdGUgbGlua3MgdG8gdW5sZXNzIHRvbGQgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9QQUNLQUdFX1NJVEVTOiBSZWFkb25seU1hcDxzdHJpbmcsIHN0cmluZz4gPSBuZXcgTWFwKFtcbiAgJ0BtbmFvdW1vdi9vYnNpZGlhbi1kZXYtdG9vbGtpdCcsXG4gICdAbW5hb3Vtb3Yvb2JzaWRpYW4tbGliJyxcbiAgJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWRldi10b29sa2l0JyxcbiAgJ0BtbmFvdW1vdi90eXBlc2NyaXB0LWxpYicsXG4gICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC10ZXN0LXRvb2xraXQnXG5dLm1hcCgocGFja2FnZU5hbWUpID0+IFtwYWNrYWdlTmFtZSwgYGh0dHBzOi8vbW5hb3Vtb3YuZGV2LyR7cGFja2FnZU5hbWUuc2xpY2UoJ0BtbmFvdW1vdi8nLmxlbmd0aCl9L2BdKSk7XG5cbmludGVyZmFjZSBNb2R1bGVTdGF0ZSB7XG4gIC8qKlxuICAgKiBUeXBlIG5hbWUgdG8gaXRzIHBhZ2UgVVJMOyBgbnVsbGAgd2hlbiB0d28gcGFja2FnZXMgZGVjbGFyZSB0aGUgbmFtZSwgd2hpY2ggY2Fubm90IGJlIHRvbGQgYXBhcnQgZnJvbSB0ZXh0LlxuICAgKi9cbiAgcmVhZG9ubHkgdXJsczogTWFwPHN0cmluZywgbnVsbCB8IHN0cmluZz47XG59XG5cbmNvbnN0IG1vZHVsZVN0YXRlOiBNb2R1bGVTdGF0ZSA9IHtcbiAgdXJsczogbmV3IE1hcCgpXG59O1xuXG5pbnRlcmZhY2UgVG9QYWNrYWdlVHlwZVVybFBhcmFtcyB7XG4gIHJlYWRvbmx5IGRlY2xhcmF0aW9uRmlsZVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSBzZXR0aW5nczogQXBpRG9jU2V0dGluZ3M7XG59XG5cbi8qKlxuICogRm9yZ2V0cyBldmVyeSBkZWNsYXJhdGlvbiB7QGxpbmsgcmVnaXN0ZXJQYWNrYWdlRGVjbGFyYXRpb259IHJlY29yZGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYXJQYWNrYWdlRGVjbGFyYXRpb25zKCk6IHZvaWQge1xuICBtb2R1bGVTdGF0ZS51cmxzLmNsZWFyKCk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgcGFnZSBVUkwgb2YgYSB0eXBlIGRlY2xhcmVkIGluIGFub3RoZXIgZG9jdW1lbnRlZCBwYWNrYWdlLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLCBhcyB0eXBlIHRleHQgcHJpbnRzIGl0LlxuICogQHJldHVybnMgVGhlIFVSTCwgb3IgYHVuZGVmaW5lZGAgd2hlbiBubyBkb2N1bWVudGVkIHBhY2thZ2UgZGVjbGFyZXMgZXhhY3RseSBvbmUgdHlwZSBvZiB0aGF0IG5hbWUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYWNrYWdlVHlwZVVybChuYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gbW9kdWxlU3RhdGUudXJscy5nZXQobmFtZSkgPz8gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIFJlY29yZHMgd2hlcmUgYSB0eXBlIGlzIGRlY2xhcmVkLCBzbyBpdHMgcmVmZXJlbmNlcyBsaW5rIHRvIGl0cyBwYWdlIG9uIHRoYXQgcGFja2FnZSdzIHNpdGUuXG4gKlxuICogQSBkZWNsYXJhdGlvbiBvdXRzaWRlIGV2ZXJ5IHtAbGluayBBcGlEb2NTZXR0aW5ncy5wYWNrYWdlU2l0ZXN9IHBhY2thZ2UgaXMgaWdub3JlZC4gQSBuYW1lIHR3byBwYWNrYWdlcyBkZWNsYXJlIGlzXG4gKiByZW1lbWJlcmVkIGFzIGFtYmlndW91cyBhbmQgbmV2ZXIgbGlua2VkLlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gVGhlIHR5cGUncyBuYW1lLlxuICogQHBhcmFtIGRlY2xhcmF0aW9uRmlsZVBhdGggLSBUaGUgZGVjbGFyYXRpb24gZmlsZSdzIHBhdGgsIHdpdGggb3Igd2l0aG91dCBpdHMgYC5kLm10c2AgLyBgLmQuY3RzYCBleHRlbnNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlclBhY2thZ2VEZWNsYXJhdGlvbihuYW1lOiBzdHJpbmcsIGRlY2xhcmF0aW9uRmlsZVBhdGg6IHN0cmluZyk6IHZvaWQge1xuICBjb25zdCB1cmwgPSB0b1BhY2thZ2VUeXBlVXJsKHsgZGVjbGFyYXRpb25GaWxlUGF0aCwgbmFtZSwgc2V0dGluZ3M6IGdldEFwaURvY1NldHRpbmdzKCkgfSk7XG4gIGlmICh1cmwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGV4aXN0aW5nID0gbW9kdWxlU3RhdGUudXJscy5nZXQobmFtZSk7XG4gIGlmIChleGlzdGluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbW9kdWxlU3RhdGUudXJscy5zZXQobmFtZSwgdXJsKTtcbiAgfSBlbHNlIGlmIChleGlzdGluZyAhPT0gdXJsKSB7XG4gICAgbW9kdWxlU3RhdGUudXJscy5zZXQobmFtZSwgbnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdG9QYWNrYWdlVHlwZVVybChwYXJhbXM6IFRvUGFja2FnZVR5cGVVcmxQYXJhbXMpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IGRlY2xhcmF0aW9uRmlsZVBhdGgsIG5hbWUsIHNldHRpbmdzIH0gPSBwYXJhbXM7XG4gIGNvbnN0IG1hdGNoID0gUEFDS0FHRV9ERUNMQVJBVElPTl9SRUdfRVhQLmV4ZWMoZGVjbGFyYXRpb25GaWxlUGF0aC5yZXBsYWNlQWxsKCdcXFxcJywgJy8nKSk7XG4gIGlmIChtYXRjaCA9PT0gbnVsbCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwYWNrYWdlTmFtZSA9IGdldE1hbmRhdG9yeU5hbWVkR3JvdXAobWF0Y2gsICdQYWNrYWdlJyk7XG4gIGNvbnN0IHBhdGggPSBnZXRNYW5kYXRvcnlOYW1lZEdyb3VwKG1hdGNoLCAnUGF0aCcpO1xuICAvLyBUaGUgb3duaW5nIHNpdGUncyBnZW5lcmF0b3Igc2tpcHBlZCB0aGF0IG1vZHVsZSwgc28gbm8gcGFnZSBleGlzdHMgdG8gbGluayB0by5cbiAgaWYgKHBhY2thZ2VOYW1lID09PSBzZXR0aW5ncy5wYWNrYWdlTmFtZSB8fCAhaXNEb2N1bWVudGVkTW9kdWxlUGF0aChwYXRoKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBzaXRlID0gc2V0dGluZ3MucGFja2FnZVNpdGVzLmdldChwYWNrYWdlTmFtZSk7XG4gIHJldHVybiBzaXRlID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBgJHtzaXRlfWFwaS8ke3BhdGh9LyR7dG9Sb3V0ZVNlZ21lbnRQcmVzZXJ2ZUNhc2UobmFtZSl9L2A7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBWUEsU0FBUyw4QkFBOEI7QUFJdkMsU0FBUyw4QkFBOEI7QUFDdkMsU0FBUyxrQ0FBa0M7QUFDM0MsU0FBUyx5QkFBeUI7QUFFbEMsTUFBTSw4QkFBOEI7QUFLN0IsTUFBTSx3QkFBcUQsSUFBSSxJQUFJO0FBQUEsRUFDeEU7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsYUFBYSx3QkFBd0IsWUFBWSxNQUFNLGFBQWEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBU3hHLE1BQU0sY0FBMkI7QUFBQSxFQUMvQixNQUFNLG9CQUFJLElBQUk7QUFDaEI7QUFXTyxTQUFTLDJCQUFpQztBQUMvQyxjQUFZLEtBQUssTUFBTTtBQUN6QjtBQVFPLFNBQVMsa0JBQWtCLE1BQWtDO0FBQ2xFLFNBQU8sWUFBWSxLQUFLLElBQUksSUFBSSxLQUFLO0FBQ3ZDO0FBV08sU0FBUywyQkFBMkIsTUFBYyxxQkFBbUM7QUFDMUYsUUFBTSxNQUFNLGlCQUFpQixFQUFFLHFCQUFxQixNQUFNLFVBQVUsa0JBQWtCLEVBQUUsQ0FBQztBQUN6RixNQUFJLFFBQVEsUUFBVztBQUNyQjtBQUFBLEVBQ0Y7QUFFQSxRQUFNLFdBQVcsWUFBWSxLQUFLLElBQUksSUFBSTtBQUMxQyxNQUFJLGFBQWEsUUFBVztBQUMxQixnQkFBWSxLQUFLLElBQUksTUFBTSxHQUFHO0FBQUEsRUFDaEMsV0FBVyxhQUFhLEtBQUs7QUFDM0IsZ0JBQVksS0FBSyxJQUFJLE1BQU0sSUFBSTtBQUFBLEVBQ2pDO0FBQ0Y7QUFFQSxTQUFTLGlCQUFpQixRQUFvRDtBQUM1RSxRQUFNLEVBQUUscUJBQXFCLE1BQU0sU0FBUyxJQUFJO0FBQ2hELFFBQU0sUUFBUSw0QkFBNEIsS0FBSyxvQkFBb0IsV0FBVyxNQUFNLEdBQUcsQ0FBQztBQUN4RixNQUFJLFVBQVUsTUFBTTtBQUNsQixXQUFPO0FBQUEsRUFDVDtBQUVBLFFBQU0sY0FBYyx1QkFBdUIsT0FBTyxTQUFTO0FBQzNELFFBQU0sT0FBTyx1QkFBdUIsT0FBTyxNQUFNO0FBRWpELE1BQUksZ0JBQWdCLFNBQVMsZUFBZSxDQUFDLHVCQUF1QixJQUFJLEdBQUc7QUFDekUsV0FBTztBQUFBLEVBQ1Q7QUFFQSxRQUFNLE9BQU8sU0FBUyxhQUFhLElBQUksV0FBVztBQUNsRCxTQUFPLFNBQVMsU0FBWSxTQUFZLEdBQUcsSUFBSSxPQUFPLElBQUksSUFBSSwyQkFBMkIsSUFBSSxDQUFDO0FBQ2hHOyIsIm5hbWVzIjpbXX0=
|