semantifold 0.1.1 → 0.2.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/README.md +13 -6
- package/build/index.d.ts +32 -3
- package/build/index.d.ts.map +1 -1
- package/build/index.js +99 -4
- package/build/src/acceptance.d.ts +22 -0
- package/build/src/acceptance.d.ts.map +1 -0
- package/build/src/acceptance.js +339 -0
- package/build/src/array.d.ts +7 -0
- package/build/src/array.d.ts.map +1 -0
- package/build/src/array.js +18 -0
- package/build/src/artifact-path.d.ts +13 -0
- package/build/src/artifact-path.d.ts.map +1 -0
- package/build/src/artifact-path.js +30 -0
- package/build/src/artifacts.d.ts +7 -0
- package/build/src/artifacts.d.ts.map +1 -0
- package/build/src/artifacts.js +389 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +10 -2
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +19 -37
- package/build/src/backends/python.d.ts +8 -0
- package/build/src/backends/python.d.ts.map +1 -0
- package/build/src/backends/python.js +162 -0
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +2 -1
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +9 -6
- package/build/src/binary-mapping.d.ts +32 -0
- package/build/src/binary-mapping.d.ts.map +1 -0
- package/build/src/binary-mapping.js +285 -0
- package/build/src/diagnostic.d.ts +36 -4
- package/build/src/diagnostic.d.ts.map +1 -1
- package/build/src/diagnostic.js +42 -3
- package/build/src/frontends/index.d.ts.map +1 -1
- package/build/src/frontends/index.js +5 -23
- package/build/src/frontends/python.d.ts +14 -0
- package/build/src/frontends/python.d.ts.map +1 -0
- package/build/src/frontends/python.js +615 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +6 -1
- package/build/src/language-registry.d.ts +113 -0
- package/build/src/language-registry.d.ts.map +1 -0
- package/build/src/language-registry.js +372 -0
- package/build/src/mapping.js +3 -2
- package/build/src/semantic/location.d.ts +7 -0
- package/build/src/semantic/location.d.ts.map +1 -1
- package/build/src/semantic/location.js +10 -1
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +399 -2
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +110 -2
- package/build/src/subprocess.d.ts +29 -0
- package/build/src/subprocess.d.ts.map +1 -0
- package/build/src/subprocess.js +207 -0
- package/build/src/timeout.d.ts +8 -0
- package/build/src/timeout.d.ts.map +1 -0
- package/build/src/timeout.js +11 -0
- package/build/src/toolchains.d.ts +83 -0
- package/build/src/toolchains.d.ts.map +1 -0
- package/build/src/toolchains.js +413 -0
- package/docs/architecture.md +7 -3
- package/docs/language-support.md +25 -4
- package/docs/parser-qualification.md +70 -0
- package/docs/source-maps.md +31 -4
- package/docs/testing.md +21 -2
- package/index.js +109 -4
- package/package.json +4 -2
- package/src/acceptance.js +359 -0
- package/src/array.js +19 -0
- package/src/artifact-path.js +34 -0
- package/src/artifacts.js +420 -0
- package/src/backends/identifiers.js +9 -1
- package/src/backends/index.js +16 -32
- package/src/backends/python.js +175 -0
- package/src/backends/scalars.js +1 -0
- package/src/backends/shared.js +8 -5
- package/src/binary-mapping.js +305 -0
- package/src/diagnostic.js +34 -2
- package/src/frontends/index.js +5 -20
- package/src/frontends/python.js +689 -0
- package/src/frontends/scalars.js +5 -0
- package/src/language-registry.js +403 -0
- package/src/mapping.js +2 -1
- package/src/semantic/location.js +10 -0
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +124 -1
- package/src/subprocess.js +203 -0
- package/src/timeout.js +12 -0
- package/src/toolchains.js +444 -0
- package/tsconfig.json +1 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
// @ts-check
|
|
2
|
+
import { decodedMappings, encodedMappings, presortedDecodedMap, TraceMap } from "@jridgewell/trace-mapping";
|
|
3
|
+
import { isDenseArray } from "./array.js";
|
|
4
|
+
import { isSafeArtifactPath, isValidFilenameMetadata } from "./artifact-path.js";
|
|
5
|
+
import { finalizeByteMapping } from "./binary-mapping.js";
|
|
6
|
+
import { SemantifoldDiagnostic } from "./diagnostic.js";
|
|
7
|
+
import { finalizeMapping, toSourceMapV3 } from "./mapping.js";
|
|
8
|
+
import { isSourceRangeOrdered } from "./semantic/location.js";
|
|
9
|
+
import { hasOnlyUnicodeScalars } from "./semantic/scalars.js";
|
|
10
|
+
const artifactRoles = new Set(["entry", "source", "manifest", "support", "mapping", "resource", "loader"]);
|
|
11
|
+
const mediaTypePattern = /^[A-Za-z0-9!#$&^_.+-]+\/[A-Za-z0-9!#$&^_.+-]+(?:;[\u0020-\u007e]+)?$/u;
|
|
12
|
+
/**
|
|
13
|
+
* Transactionally validates and constructs one deterministic generated artifact set.
|
|
14
|
+
* @param {unknown} candidate - Artifact-set fields.
|
|
15
|
+
* @returns {import("./semantic/types.js").GeneratedArtifactSet} Detached immutable set.
|
|
16
|
+
*/
|
|
17
|
+
export function createGeneratedArtifactSet(candidate) {
|
|
18
|
+
try {
|
|
19
|
+
if (!isPlainObject(candidate) || typeof candidate.target != "string" || candidate.target.length == 0 ||
|
|
20
|
+
!/^[a-z][a-z0-9-]*$/u.test(candidate.target)) {
|
|
21
|
+
invalidArtifactSet("Artifact set requires a stable lowercase target ID.", targetOf(candidate));
|
|
22
|
+
}
|
|
23
|
+
if (!isDenseArray(candidate.artifacts) || candidate.artifacts.length == 0) {
|
|
24
|
+
invalidArtifactSet("Artifact set requires a non-empty ordered artifact array.", candidate.target);
|
|
25
|
+
}
|
|
26
|
+
const target = candidate.target;
|
|
27
|
+
const paths = new Set();
|
|
28
|
+
const directoryPaths = new Set();
|
|
29
|
+
/** @type {string[]} */
|
|
30
|
+
const entryPaths = [];
|
|
31
|
+
/** @type {import("./semantic/types.js").GeneratedSetArtifact[]} */
|
|
32
|
+
const artifacts = [];
|
|
33
|
+
for (let index = 0; index < candidate.artifacts.length; index += 1) {
|
|
34
|
+
const artifact = candidate.artifacts[index];
|
|
35
|
+
if (!isPlainObject(artifact))
|
|
36
|
+
invalidArtifactSet(`Artifact ${index} must be a plain object.`, target);
|
|
37
|
+
const artifactPath = artifact.path;
|
|
38
|
+
const mediaType = artifact.mediaType;
|
|
39
|
+
const role = artifact.role;
|
|
40
|
+
const contentKind = artifact.contentKind;
|
|
41
|
+
if (!isSafeArtifactPath(artifactPath))
|
|
42
|
+
invalidArtifactSet(`Artifact ${index} has an unsafe path.`, target);
|
|
43
|
+
if (paths.has(artifactPath))
|
|
44
|
+
invalidArtifactSet(`Duplicate artifact path '${artifactPath}'.`, target);
|
|
45
|
+
if (directoryPaths.has(artifactPath)) {
|
|
46
|
+
invalidArtifactSet(`Artifact path '${artifactPath}' collides with a required directory.`, target);
|
|
47
|
+
}
|
|
48
|
+
const parentPaths = artifactDirectoryPaths(artifactPath);
|
|
49
|
+
for (const parentPath of parentPaths) {
|
|
50
|
+
if (paths.has(parentPath)) {
|
|
51
|
+
invalidArtifactSet(`Artifact path '${artifactPath}' descends from artifact file '${parentPath}'.`, target);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
paths.add(artifactPath);
|
|
55
|
+
for (const parentPath of parentPaths)
|
|
56
|
+
directoryPaths.add(parentPath);
|
|
57
|
+
if (typeof mediaType != "string" || !mediaTypePattern.test(mediaType) || /[\r\n]/u.test(mediaType)) {
|
|
58
|
+
invalidArtifactSet(`Artifact '${artifactPath}' has an invalid media type.`, target);
|
|
59
|
+
}
|
|
60
|
+
if (typeof role != "string" || !artifactRoles.has(role))
|
|
61
|
+
invalidArtifactSet(`Artifact '${artifactPath}' has an invalid role.`, target);
|
|
62
|
+
if (artifact.ownership != "generated")
|
|
63
|
+
invalidArtifactSet(`Artifact '${artifactPath}' must have generated ownership.`, target);
|
|
64
|
+
if (role == "entry") {
|
|
65
|
+
if (entryPaths.length > 0)
|
|
66
|
+
invalidArtifactSet("Artifact set must declare exactly one entry artifact.", target);
|
|
67
|
+
entryPaths.push(artifactPath);
|
|
68
|
+
}
|
|
69
|
+
const contentValue = artifact.content;
|
|
70
|
+
/** @type {string | Uint8Array} */
|
|
71
|
+
let content;
|
|
72
|
+
if (contentKind == "text") {
|
|
73
|
+
if (typeof contentValue != "string" || contentValue.length == 0 || !hasOnlyUnicodeScalars(contentValue)) {
|
|
74
|
+
invalidArtifactSet(`Text artifact '${artifactPath}' requires non-empty string content.`, target);
|
|
75
|
+
}
|
|
76
|
+
content = contentValue;
|
|
77
|
+
}
|
|
78
|
+
else if (contentKind == "binary") {
|
|
79
|
+
if (!(contentValue instanceof Uint8Array) || contentValue.byteLength == 0) {
|
|
80
|
+
invalidArtifactSet(`Binary artifact '${artifactPath}' requires non-empty bytes.`, target);
|
|
81
|
+
}
|
|
82
|
+
content = new Uint8Array(contentValue);
|
|
83
|
+
}
|
|
84
|
+
else
|
|
85
|
+
invalidArtifactSet(`Artifact '${artifactPath}' has an invalid content kind.`, target);
|
|
86
|
+
const provenance = validateArtifactProvenance(artifact.provenance, contentKind, artifactPath, content, target);
|
|
87
|
+
artifacts.push(/** @type {import("./semantic/types.js").GeneratedSetArtifact} */ (freezeArtifact({
|
|
88
|
+
content,
|
|
89
|
+
contentKind,
|
|
90
|
+
mediaType,
|
|
91
|
+
ownership: /** @type {const} */ ("generated"),
|
|
92
|
+
path: artifactPath,
|
|
93
|
+
provenance,
|
|
94
|
+
role
|
|
95
|
+
})));
|
|
96
|
+
}
|
|
97
|
+
if (entryPaths.length != 1)
|
|
98
|
+
invalidArtifactSet("Artifact set must declare exactly one entry artifact.", candidate.target);
|
|
99
|
+
return Object.freeze({
|
|
100
|
+
artifacts: Object.freeze(artifacts),
|
|
101
|
+
entry: entryPaths[0],
|
|
102
|
+
schema: /** @type {const} */ ("GeneratedArtifactSet"),
|
|
103
|
+
target,
|
|
104
|
+
version: /** @type {const} */ (1)
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
if (error instanceof SemantifoldDiagnostic && error.code == "INVALID_ARTIFACT_SET")
|
|
109
|
+
throw error;
|
|
110
|
+
return invalidArtifactSet("Artifact-set validation failed.", targetOf(candidate), error);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Validates artifact-level text, byte, or synthetic provenance.
|
|
115
|
+
* @param {unknown} value - Provenance candidate.
|
|
116
|
+
* @param {unknown} contentKind - Validated artifact content kind.
|
|
117
|
+
* @param {string} artifactPath - Validated artifact path.
|
|
118
|
+
* @param {string | Uint8Array} content - Detached artifact content.
|
|
119
|
+
* @param {string} target - Artifact target.
|
|
120
|
+
* @returns {import("./semantic/types.js").ArtifactProvenance} Validated provenance.
|
|
121
|
+
*/
|
|
122
|
+
function validateArtifactProvenance(value, contentKind, artifactPath, content, target) {
|
|
123
|
+
if (!isPlainObject(value))
|
|
124
|
+
invalidArtifactSet(`Artifact '${artifactPath}' requires provenance.`, target);
|
|
125
|
+
if (value.kind == "synthetic") {
|
|
126
|
+
if (typeof value.reason != "string" || value.reason.length == 0 || !isDenseArray(value.relatedOrigins)) {
|
|
127
|
+
invalidArtifactSet(`Synthetic artifact '${artifactPath}' requires an explicit reason and related origins.`, target);
|
|
128
|
+
}
|
|
129
|
+
if (contentKind == "binary") {
|
|
130
|
+
invalidArtifactSet(`Binary artifact '${artifactPath}' requires byte-range provenance.`, target);
|
|
131
|
+
}
|
|
132
|
+
/** @type {import("./semantic/types.js").RelatedOrigin[]} */
|
|
133
|
+
const relatedOrigins = [];
|
|
134
|
+
for (let index = 0; index < value.relatedOrigins.length; index += 1) {
|
|
135
|
+
relatedOrigins.push(validateRelatedOrigin(value.relatedOrigins[index], artifactPath, index, target));
|
|
136
|
+
}
|
|
137
|
+
return Object.freeze({ kind: /** @type {const} */ ("synthetic"), reason: value.reason, relatedOrigins: Object.freeze(relatedOrigins) });
|
|
138
|
+
}
|
|
139
|
+
if (value.kind == "text") {
|
|
140
|
+
const mappingCandidate = value.mapping;
|
|
141
|
+
if (contentKind != "text" || !isPlainObject(mappingCandidate) || mappingCandidate.schema != "SemantifoldMapping" ||
|
|
142
|
+
!isPlainObject(mappingCandidate.generated) || mappingCandidate.generated.filename != artifactPath ||
|
|
143
|
+
mappingCandidate.generated.content != content || !isPlainObject(value.sourceMap)) {
|
|
144
|
+
invalidArtifactSet(`Text artifact '${artifactPath}' has mismatched rich or Source Map provenance.`, target);
|
|
145
|
+
}
|
|
146
|
+
if (value.sourceMapFilename !== undefined && !isValidFilenameMetadata(value.sourceMapFilename)) {
|
|
147
|
+
invalidArtifactSet(`Text artifact '${artifactPath}' has invalid Source Map filename metadata.`, target);
|
|
148
|
+
}
|
|
149
|
+
const mapping = finalizeMapping(mappingCandidate);
|
|
150
|
+
const sourceMap = validateSourceMap(value.sourceMap, artifactPath, target);
|
|
151
|
+
const projectedSourceMap = toSourceMapV3(mapping);
|
|
152
|
+
if (!sameJsonValue(sourceMap, projectedSourceMap)) {
|
|
153
|
+
invalidArtifactSet(`Text artifact '${artifactPath}' has Source Map provenance that contradicts its rich mapping.`, target);
|
|
154
|
+
}
|
|
155
|
+
return Object.freeze({
|
|
156
|
+
kind: /** @type {const} */ ("text"),
|
|
157
|
+
mapping,
|
|
158
|
+
sourceMap,
|
|
159
|
+
sourceMapFilename: value.sourceMapFilename
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
if (value.kind == "bytes") {
|
|
163
|
+
if (contentKind != "binary")
|
|
164
|
+
invalidArtifactSet(`Byte provenance requires binary content for '${artifactPath}'.`, target);
|
|
165
|
+
const mapping = finalizeByteMapping(value.mapping);
|
|
166
|
+
if (mapping.generated.path != artifactPath || mapping.generated.byteLength != /** @type {Uint8Array} */ (content).byteLength) {
|
|
167
|
+
invalidArtifactSet(`Byte provenance does not match artifact '${artifactPath}'.`, target);
|
|
168
|
+
}
|
|
169
|
+
return Object.freeze({ kind: /** @type {const} */ ("bytes"), mapping });
|
|
170
|
+
}
|
|
171
|
+
return invalidArtifactSet(`Artifact '${artifactPath}' has an unknown provenance kind.`, target);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Freezes one validated artifact record.
|
|
175
|
+
* @param {Record<string, unknown>} artifact - Validated fields.
|
|
176
|
+
* @returns {Readonly<Record<string, unknown>>} Frozen record.
|
|
177
|
+
*/
|
|
178
|
+
function freezeArtifact(artifact) {
|
|
179
|
+
if (artifact.contentKind == "binary" && artifact.content instanceof Uint8Array) {
|
|
180
|
+
const content = artifact.content;
|
|
181
|
+
Object.defineProperty(artifact, "content", {
|
|
182
|
+
configurable: false,
|
|
183
|
+
enumerable: true,
|
|
184
|
+
get() {
|
|
185
|
+
return new Uint8Array(content);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
return Object.freeze(artifact);
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Lists every directory a safe relative POSIX artifact path requires.
|
|
193
|
+
* @param {string} artifactPath - Validated artifact path.
|
|
194
|
+
* @returns {string[]} Ordered parent directory paths.
|
|
195
|
+
*/
|
|
196
|
+
function artifactDirectoryPaths(artifactPath) {
|
|
197
|
+
const parts = artifactPath.split("/");
|
|
198
|
+
/** @type {string[]} */
|
|
199
|
+
const directories = [];
|
|
200
|
+
for (let index = 1; index < parts.length; index += 1)
|
|
201
|
+
directories.push(parts.slice(0, index).join("/"));
|
|
202
|
+
return directories;
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Throws a normalized artifact-set diagnostic.
|
|
206
|
+
* @param {string} message - Failure detail.
|
|
207
|
+
* @param {string} target - Artifact target.
|
|
208
|
+
* @param {unknown} [error] - Preserved validation cause.
|
|
209
|
+
* @returns {never} Always throws.
|
|
210
|
+
*/
|
|
211
|
+
function invalidArtifactSet(message, target, error) {
|
|
212
|
+
throw new SemantifoldDiagnostic({
|
|
213
|
+
cause: error instanceof Error ? error : undefined,
|
|
214
|
+
code: "INVALID_ARTIFACT_SET",
|
|
215
|
+
language: target,
|
|
216
|
+
message
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Derives a safe diagnostic identity from an unknown request.
|
|
221
|
+
* @param {unknown} value - Candidate set.
|
|
222
|
+
* @returns {string} Diagnostic identity.
|
|
223
|
+
*/
|
|
224
|
+
function targetOf(value) {
|
|
225
|
+
return isPlainObject(value) && typeof value.target == "string" && value.target.length > 0 ? value.target : "artifact";
|
|
226
|
+
}
|
|
227
|
+
/**
|
|
228
|
+
* Checks for an ordinary string-keyed object.
|
|
229
|
+
* @param {unknown} value - Candidate value.
|
|
230
|
+
* @returns {value is Record<string, unknown>} Whether the value is a plain object.
|
|
231
|
+
*/
|
|
232
|
+
function isPlainObject(value) {
|
|
233
|
+
return typeof value == "object" && value != null && !Array.isArray(value) && Object.getPrototypeOf(value) == Object.prototype;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Validates an artifact-level related origin without interpreting source offsets as generated bytes.
|
|
237
|
+
* @param {unknown} value - Related-origin candidate.
|
|
238
|
+
* @param {string} artifactPath - Owning artifact path.
|
|
239
|
+
* @param {number} index - Origin index.
|
|
240
|
+
* @param {string} target - Artifact target.
|
|
241
|
+
* @returns {import("./semantic/types.js").RelatedOrigin} Detached related origin.
|
|
242
|
+
*/
|
|
243
|
+
function validateRelatedOrigin(value, artifactPath, index, target) {
|
|
244
|
+
if (!isPlainObject(value) || typeof value.sourceId != "string" || value.sourceId.length == 0 ||
|
|
245
|
+
!isPlainObject(value.location) || typeof value.location.filename != "string" || value.location.filename.length == 0 ||
|
|
246
|
+
!validSourcePoint(value.location.start) || !validSourcePoint(value.location.end) ||
|
|
247
|
+
value.location.end.offset < value.location.start.offset || !isSourceRangeOrdered(value.location.start, value.location.end)) {
|
|
248
|
+
invalidArtifactSet(`Artifact '${artifactPath}' has malformed related origin ${index}.`, target);
|
|
249
|
+
}
|
|
250
|
+
return deepFreeze({
|
|
251
|
+
location: {
|
|
252
|
+
end: { ...value.location.end },
|
|
253
|
+
filename: value.location.filename,
|
|
254
|
+
start: { ...value.location.start }
|
|
255
|
+
},
|
|
256
|
+
sourceId: value.sourceId,
|
|
257
|
+
...(optionalString(value.nodeId, "nodeId", artifactPath, index, target)),
|
|
258
|
+
...(optionalString(value.symbolId, "symbolId", artifactPath, index, target)),
|
|
259
|
+
...(optionalString(value.role, "role", artifactPath, index, target))
|
|
260
|
+
});
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Validates one optional related-origin string field.
|
|
264
|
+
* @param {unknown} value - Candidate value.
|
|
265
|
+
* @param {string} property - Property name.
|
|
266
|
+
* @param {string} artifactPath - Owning artifact path.
|
|
267
|
+
* @param {number} index - Origin index.
|
|
268
|
+
* @param {string} target - Artifact target.
|
|
269
|
+
* @returns {Record<string, string>} Present validated property or an empty record.
|
|
270
|
+
*/
|
|
271
|
+
function optionalString(value, property, artifactPath, index, target) {
|
|
272
|
+
if (value === undefined)
|
|
273
|
+
return {};
|
|
274
|
+
if (typeof value != "string" || value.length == 0) {
|
|
275
|
+
invalidArtifactSet(`Artifact '${artifactPath}' has invalid ${property} in related origin ${index}.`, target);
|
|
276
|
+
}
|
|
277
|
+
return { [property]: value };
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Checks one UTF-16 source point.
|
|
281
|
+
* @param {unknown} value - Candidate point.
|
|
282
|
+
* @returns {value is import("./semantic/types.js").SourcePoint} Whether the point is structurally valid.
|
|
283
|
+
*/
|
|
284
|
+
function validSourcePoint(value) {
|
|
285
|
+
return isPlainObject(value) && typeof value.line == "number" && Number.isSafeInteger(value.line) && value.line > 0 &&
|
|
286
|
+
typeof value.column == "number" && Number.isSafeInteger(value.column) && value.column > 0 &&
|
|
287
|
+
typeof value.offset == "number" && Number.isSafeInteger(value.offset) && value.offset >= 0;
|
|
288
|
+
}
|
|
289
|
+
/**
|
|
290
|
+
* Validates and detaches the Source Map v3 projection carried by a text artifact.
|
|
291
|
+
* @param {unknown} value - Source Map candidate.
|
|
292
|
+
* @param {string} artifactPath - Owning artifact path.
|
|
293
|
+
* @param {string} target - Artifact target.
|
|
294
|
+
* @returns {import("@jridgewell/gen-mapping").EncodedSourceMap} Detached Source Map.
|
|
295
|
+
*/
|
|
296
|
+
function validateSourceMap(value, artifactPath, target) {
|
|
297
|
+
if (!isPlainObject(value) || value.version != 3 || value.file != artifactPath || typeof value.mappings != "string" ||
|
|
298
|
+
!isDenseArray(value.names) || !value.names.every((name) => typeof name == "string") ||
|
|
299
|
+
!isDenseArray(value.sources) || !value.sources.every((source) => typeof source == "string") ||
|
|
300
|
+
(value.sourcesContent !== undefined && (!isDenseArray(value.sourcesContent) ||
|
|
301
|
+
!value.sourcesContent.every((source) => source == null || typeof source == "string")))) {
|
|
302
|
+
invalidArtifactSet(`Text artifact '${artifactPath}' has malformed Source Map v3 provenance.`, target);
|
|
303
|
+
}
|
|
304
|
+
validateEncodedSourceMapMappings(
|
|
305
|
+
/** @type {import("@jridgewell/trace-mapping").EncodedSourceMap} */ ( /** @type {unknown} */(value)), artifactPath, target);
|
|
306
|
+
const detached = /** @type {unknown} */ (structuredClone(value));
|
|
307
|
+
return deepFreeze(/** @type {import("@jridgewell/gen-mapping").EncodedSourceMap} */ (detached));
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Decodes and validates the Source Map payload with the installed mapping implementation.
|
|
311
|
+
* @param {import("@jridgewell/trace-mapping").EncodedSourceMap} sourceMap - Structurally validated map.
|
|
312
|
+
* @param {string} artifactPath - Owning artifact path.
|
|
313
|
+
* @param {string} target - Artifact target.
|
|
314
|
+
* @returns {void}
|
|
315
|
+
*/
|
|
316
|
+
function validateEncodedSourceMapMappings(sourceMap, artifactPath, target) {
|
|
317
|
+
/** @type {Readonly<import("@jridgewell/trace-mapping").SourceMapSegment[][]>} */
|
|
318
|
+
let decoded;
|
|
319
|
+
let canonicalMappings;
|
|
320
|
+
try {
|
|
321
|
+
decoded = decodedMappings(new TraceMap(sourceMap));
|
|
322
|
+
const decodedMap = /** @type {import("@jridgewell/trace-mapping").DecodedSourceMap} */ ({
|
|
323
|
+
...sourceMap,
|
|
324
|
+
mappings: structuredClone(decoded)
|
|
325
|
+
});
|
|
326
|
+
canonicalMappings = encodedMappings(presortedDecodedMap(decodedMap));
|
|
327
|
+
}
|
|
328
|
+
catch (error) {
|
|
329
|
+
invalidArtifactSet(`Text artifact '${artifactPath}' has invalid encoded Source Map mappings.`, target, error);
|
|
330
|
+
}
|
|
331
|
+
if (canonicalMappings != sourceMap.mappings ||
|
|
332
|
+
!validDecodedSourceMapMappings(decoded, sourceMap.sources.length, sourceMap.names.length)) {
|
|
333
|
+
invalidArtifactSet(`Text artifact '${artifactPath}' has invalid encoded Source Map mappings.`, target);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Validates decoded Source Map segment shape and referenced indices.
|
|
338
|
+
* @param {Readonly<import("@jridgewell/trace-mapping").SourceMapSegment[][]>} lines - Decoded mapping lines.
|
|
339
|
+
* @param {number} sourceCount - Declared source count.
|
|
340
|
+
* @param {number} nameCount - Declared name count.
|
|
341
|
+
* @returns {boolean} Whether every segment is semantically valid.
|
|
342
|
+
*/
|
|
343
|
+
function validDecodedSourceMapMappings(lines, sourceCount, nameCount) {
|
|
344
|
+
return lines.every((line) => line.every((segment) => {
|
|
345
|
+
if (segment.length != 1 && segment.length != 4 && segment.length != 5)
|
|
346
|
+
return false;
|
|
347
|
+
if (!segment.every((field) => Number.isSafeInteger(field) && field >= 0))
|
|
348
|
+
return false;
|
|
349
|
+
if (segment.length == 1)
|
|
350
|
+
return true;
|
|
351
|
+
if (segment[1] >= sourceCount)
|
|
352
|
+
return false;
|
|
353
|
+
return segment.length == 4 || segment[4] < nameCount;
|
|
354
|
+
}));
|
|
355
|
+
}
|
|
356
|
+
/**
|
|
357
|
+
* Compares detached JSON values without depending on caller object-key order.
|
|
358
|
+
* @param {unknown} left - First JSON value.
|
|
359
|
+
* @param {unknown} right - Second JSON value.
|
|
360
|
+
* @returns {boolean} Whether both values are structurally identical.
|
|
361
|
+
*/
|
|
362
|
+
function sameJsonValue(left, right) {
|
|
363
|
+
if (left === right)
|
|
364
|
+
return true;
|
|
365
|
+
if (Array.isArray(left) || Array.isArray(right)) {
|
|
366
|
+
return Array.isArray(left) && Array.isArray(right) && left.length == right.length &&
|
|
367
|
+
left.every((entry, index) => sameJsonValue(entry, right[index]));
|
|
368
|
+
}
|
|
369
|
+
if (!isPlainObject(left) || !isPlainObject(right))
|
|
370
|
+
return false;
|
|
371
|
+
const leftKeys = Object.keys(left);
|
|
372
|
+
const rightKeys = Object.keys(right);
|
|
373
|
+
return leftKeys.length == rightKeys.length &&
|
|
374
|
+
leftKeys.every((key) => Object.hasOwn(right, key) && sameJsonValue(left[key], right[key]));
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Deeply freezes a detached JSON value.
|
|
378
|
+
* @template T
|
|
379
|
+
* @param {T} value - Detached value.
|
|
380
|
+
* @returns {T} Frozen value.
|
|
381
|
+
*/
|
|
382
|
+
function deepFreeze(value) {
|
|
383
|
+
if (!value || typeof value != "object" || Object.isFrozen(value))
|
|
384
|
+
return value;
|
|
385
|
+
for (const nested of Object.values(value))
|
|
386
|
+
deepFreeze(nested);
|
|
387
|
+
return Object.freeze(value);
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJ0aWZhY3RzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2FydGlmYWN0cy5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsUUFBUSxFQUFDLE1BQU0sMkJBQTJCLENBQUE7QUFDekcsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLFlBQVksQ0FBQTtBQUN2QyxPQUFPLEVBQUMsa0JBQWtCLEVBQUUsdUJBQXVCLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN2RCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUNyRCxPQUFPLEVBQUMsZUFBZSxFQUFFLGFBQWEsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUMzRCxPQUFPLEVBQUMsb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQTtBQUMzRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQTtBQUUzRCxNQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7QUFDMUcsTUFBTSxnQkFBZ0IsR0FBRyx1RUFBdUUsQ0FBQTtBQUVoRzs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLDBCQUEwQixDQUFDLFNBQVM7SUFDbEQsSUFBSSxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxPQUFPLFNBQVMsQ0FBQyxNQUFNLElBQUksUUFBUSxJQUFJLFNBQVMsQ0FBQyxNQUFNLENBQUMsTUFBTSxJQUFJLENBQUM7WUFDbEcsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0s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Ozs7R0FLRztBQUNILFNBQVMsVUFBVSxDQUFDLEtBQUs7SUFDdkIsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssSUFBSSxRQUFRLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQTtJQUU5RSxLQUFLLE1BQU0sTUFBTSxJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBRTdELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUM3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7ZGVjb2RlZE1hcHBpbmdzLCBlbmNvZGVkTWFwcGluZ3MsIHByZXNvcnRlZERlY29kZWRNYXAsIFRyYWNlTWFwfSBmcm9tIFwiQGpyaWRnZXdlbGwvdHJhY2UtbWFwcGluZ1wiXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtpc1NhZmVBcnRpZmFjdFBhdGgsIGlzVmFsaWRGaWxlbmFtZU1ldGFkYXRhfSBmcm9tIFwiLi9hcnRpZmFjdC1wYXRoLmpzXCJcbmltcG9ydCB7ZmluYWxpemVCeXRlTWFwcGluZ30gZnJvbSBcIi4vYmluYXJ5LW1hcHBpbmcuanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuL2RpYWdub3N0aWMuanNcIlxuaW1wb3J0IHtmaW5hbGl6ZU1hcHBpbmcsIHRvU291cmNlTWFwVjN9IGZyb20gXCIuL21hcHBpbmcuanNcIlxuaW1wb3J0IHtpc1NvdXJjZVJhbmdlT3JkZXJlZH0gZnJvbSBcIi4vc2VtYW50aWMvbG9jYXRpb24uanNcIlxuaW1wb3J0IHtoYXNPbmx5VW5pY29kZVNjYWxhcnN9IGZyb20gXCIuL3NlbWFudGljL3NjYWxhcnMuanNcIlxuXG5jb25zdCBhcnRpZmFjdFJvbGVzID0gbmV3IFNldChbXCJlbnRyeVwiLCBcInNvdXJjZVwiLCBcIm1hbmlmZXN0XCIsIFwic3VwcG9ydFwiLCBcIm1hcHBpbmdcIiwgXCJyZXNvdXJjZVwiLCBcImxvYWRlclwiXSlcbmNvbnN0IG1lZGlhVHlwZVBhdHRlcm4gPSAvXltBLVphLXowLTkhIyQmXl8uKy1dK1xcL1tBLVphLXowLTkhIyQmXl8uKy1dKyg/OjtbXFx1MDAyMC1cXHUwMDdlXSspPyQvdVxuXG4vKipcbiAqIFRyYW5zYWN0aW9uYWxseSB2YWxpZGF0ZXMgYW5kIGNvbnN0cnVjdHMgb25lIGRldGVybWluaXN0aWMgZ2VuZXJhdGVkIGFydGlmYWN0IHNldC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gY2FuZGlkYXRlIC0gQXJ0aWZhY3Qtc2V0IGZpZWxkcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBEZXRhY2hlZCBpbW11dGFibGUgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR2VuZXJhdGVkQXJ0aWZhY3RTZXQoY2FuZGlkYXRlKSB7XG4gIHRyeSB7XG4gICAgaWYgKCFpc1BsYWluT2JqZWN0KGNhbmRpZGF0ZSkgfHwgdHlwZW9mIGNhbmRpZGF0ZS50YXJnZXQgIT0gXCJzdHJpbmdcIiB8fCBjYW5kaWRhdGUudGFyZ2V0Lmxlbmd0aCA9PSAwIHx8XG4gICAgICAhL15bYS16XVthLXowLTktXSokL3UudGVzdChjYW5kaWRhdGUudGFyZ2V0KSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KFwiQXJ0aWZhY3Qgc2V0IHJlcXVpcmVzIGEgc3RhYmxlIGxvd2VyY2FzZSB0YXJnZXQgSUQuXCIsIHRhcmdldE9mKGNhbmRpZGF0ZSkpXG4gICAgfVxuICAgIGlmICghaXNEZW5zZUFycmF5KGNhbmRpZGF0ZS5hcnRpZmFjdHMpIHx8IGNhbmRpZGF0ZS5hcnRpZmFjdHMubGVuZ3RoID09IDApIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCByZXF1aXJlcyBhIG5vbi1lbXB0eSBvcmRlcmVkIGFydGlmYWN0IGFycmF5LlwiLCBjYW5kaWRhdGUudGFyZ2V0KVxuICAgIH1cbiAgICBjb25zdCB0YXJnZXQgPSBjYW5kaWRhdGUudGFyZ2V0XG5cbiAgICBjb25zdCBwYXRocyA9IG5ldyBTZXQoKVxuICAgIGNvbnN0IGRpcmVjdG9yeVBhdGhzID0gbmV3IFNldCgpXG4gICAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgICBjb25zdCBlbnRyeVBhdGhzID0gW11cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkU2V0QXJ0aWZhY3RbXX0gKi9cbiAgICBjb25zdCBhcnRpZmFjdHMgPSBbXVxuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNhbmRpZGF0ZS5hcnRpZmFjdHMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICBjb25zdCBhcnRpZmFjdCA9IGNhbmRpZGF0ZS5hcnRpZmFjdHNbaW5kZXhdXG5cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChhcnRpZmFjdCkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJHtpbmRleH0gbXVzdCBiZSBhIHBsYWluIG9iamVjdC5gLCB0YXJnZXQpXG4gICAgICBjb25zdCBhcnRpZmFjdFBhdGggPSBhcnRpZmFjdC5wYXRoXG4gICAgICBjb25zdCBtZWRpYVR5cGUgPSBhcnRpZmFjdC5tZWRpYVR5cGVcbiAgICAgIGNvbnN0IHJvbGUgPSBhcnRpZmFjdC5yb2xlXG4gICAgICBjb25zdCBjb250ZW50S2luZCA9IGFydGlmYWN0LmNvbnRlbnRLaW5kXG5cbiAgICAgIGlmICghaXNTYWZlQXJ0aWZhY3RQYXRoKGFydGlmYWN0UGF0aCkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJHtpbmRleH0gaGFzIGFuIHVuc2FmZSBwYXRoLmAsIHRhcmdldClcbiAgICAgIGlmIChwYXRocy5oYXMoYXJ0aWZhY3RQYXRoKSkgaW52YWxpZEFydGlmYWN0U2V0KGBEdXBsaWNhdGUgYXJ0aWZhY3QgcGF0aCAnJHthcnRpZmFjdFBhdGh9Jy5gLCB0YXJnZXQpXG4gICAgICBpZiAoZGlyZWN0b3J5UGF0aHMuaGFzKGFydGlmYWN0UGF0aCkpIHtcbiAgICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCBwYXRoICcke2FydGlmYWN0UGF0aH0nIGNvbGxpZGVzIHdpdGggYSByZXF1aXJlZCBkaXJlY3RvcnkuYCwgdGFyZ2V0KVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyZW50UGF0aHMgPSBhcnRpZmFjdERpcmVjdG9yeVBhdGhzKGFydGlmYWN0UGF0aClcblxuICAgICAgZm9yIChjb25zdCBwYXJlbnRQYXRoIG9mIHBhcmVudFBhdGhzKSB7XG4gICAgICAgIGlmIChwYXRocy5oYXMocGFyZW50UGF0aCkpIHtcbiAgICAgICAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0IHBhdGggJyR7YXJ0aWZhY3RQYXRofScgZGVzY2VuZHMgZnJvbSBhcnRpZmFjdCBmaWxlICcke3BhcmVudFBhdGh9Jy5gLCB0YXJnZXQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHBhdGhzLmFkZChhcnRpZmFjdFBhdGgpXG4gICAgICBmb3IgKGNvbnN0IHBhcmVudFBhdGggb2YgcGFyZW50UGF0aHMpIGRpcmVjdG9yeVBhdGhzLmFkZChwYXJlbnRQYXRoKVxuICAgICAgaWYgKHR5cGVvZiBtZWRpYVR5cGUgIT0gXCJzdHJpbmdcIiB8fCAhbWVkaWFUeXBlUGF0dGVybi50ZXN0KG1lZGlhVHlwZSkgfHwgL1tcXHJcXG5dL3UudGVzdChtZWRpYVR5cGUpKSB7XG4gICAgICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgbWVkaWEgdHlwZS5gLCB0YXJnZXQpXG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHJvbGUgIT0gXCJzdHJpbmdcIiB8fCAhYXJ0aWZhY3RSb2xlcy5oYXMocm9sZSkpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgcm9sZS5gLCB0YXJnZXQpXG4gICAgICBpZiAoYXJ0aWZhY3Qub3duZXJzaGlwICE9IFwiZ2VuZXJhdGVkXCIpIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgbXVzdCBoYXZlIGdlbmVyYXRlZCBvd25lcnNoaXAuYCwgdGFyZ2V0KVxuICAgICAgaWYgKHJvbGUgPT0gXCJlbnRyeVwiKSB7XG4gICAgICAgIGlmIChlbnRyeVBhdGhzLmxlbmd0aCA+IDApIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCBtdXN0IGRlY2xhcmUgZXhhY3RseSBvbmUgZW50cnkgYXJ0aWZhY3QuXCIsIHRhcmdldClcbiAgICAgICAgZW50cnlQYXRocy5wdXNoKGFydGlmYWN0UGF0aClcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudFZhbHVlID0gYXJ0aWZhY3QuY29udGVudFxuICAgICAgLyoqIEB0eXBlIHtzdHJpbmcgfCBVaW50OEFycmF5fSAqL1xuICAgICAgbGV0IGNvbnRlbnRcblxuICAgICAgaWYgKGNvbnRlbnRLaW5kID09IFwidGV4dFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY29udGVudFZhbHVlICE9IFwic3RyaW5nXCIgfHwgY29udGVudFZhbHVlLmxlbmd0aCA9PSAwIHx8ICFoYXNPbmx5VW5pY29kZVNjYWxhcnMoY29udGVudFZhbHVlKSkge1xuICAgICAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyByZXF1aXJlcyBub24tZW1wdHkgc3RyaW5nIGNvbnRlbnQuYCwgdGFyZ2V0KVxuICAgICAgICB9XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50VmFsdWVcbiAgICAgIH0gZWxzZSBpZiAoY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIikge1xuICAgICAgICBpZiAoIShjb250ZW50VmFsdWUgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB8fCBjb250ZW50VmFsdWUuYnl0ZUxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCaW5hcnkgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgbm9uLWVtcHR5IGJ5dGVzLmAsIHRhcmdldClcbiAgICAgICAgfVxuICAgICAgICBjb250ZW50ID0gbmV3IFVpbnQ4QXJyYXkoY29udGVudFZhbHVlKVxuICAgICAgfSBlbHNlIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGFuIGludmFsaWQgY29udGVudCBraW5kLmAsIHRhcmdldClcblxuICAgICAgY29uc3QgcHJvdmVuYW5jZSA9IHZhbGlkYXRlQXJ0aWZhY3RQcm92ZW5hbmNlKGFydGlmYWN0LnByb3ZlbmFuY2UsIGNvbnRlbnRLaW5kLCBhcnRpZmFjdFBhdGgsIGNvbnRlbnQsIHRhcmdldClcblxuICAgICAgYXJ0aWZhY3RzLnB1c2goLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0fSAqLyAoZnJlZXplQXJ0aWZhY3Qoe1xuICAgICAgICBjb250ZW50LFxuICAgICAgICBjb250ZW50S2luZCxcbiAgICAgICAgbWVkaWFUeXBlLFxuICAgICAgICBvd25lcnNoaXA6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcImdlbmVyYXRlZFwiKSxcbiAgICAgICAgcGF0aDogYXJ0aWZhY3RQYXRoLFxuICAgICAgICBwcm92ZW5hbmNlLFxuICAgICAgICByb2xlXG4gICAgICB9KSkpXG4gICAgfVxuXG4gICAgaWYgKGVudHJ5UGF0aHMubGVuZ3RoICE9IDEpIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0IHNldCBtdXN0IGRlY2xhcmUgZXhhY3RseSBvbmUgZW50cnkgYXJ0aWZhY3QuXCIsIGNhbmRpZGF0ZS50YXJnZXQpXG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBhcnRpZmFjdHM6IE9iamVjdC5mcmVlemUoYXJ0aWZhY3RzKSxcbiAgICAgIGVudHJ5OiBlbnRyeVBhdGhzWzBdLFxuICAgICAgc2NoZW1hOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJHZW5lcmF0ZWRBcnRpZmFjdFNldFwiKSxcbiAgICAgIHRhcmdldCxcbiAgICAgIHZlcnNpb246IC8qKiBAdHlwZSB7Y29uc3R9ICovICgxKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljICYmIGVycm9yLmNvZGUgPT0gXCJJTlZBTElEX0FSVElGQUNUX1NFVFwiKSB0aHJvdyBlcnJvclxuXG4gICAgcmV0dXJuIGludmFsaWRBcnRpZmFjdFNldChcIkFydGlmYWN0LXNldCB2YWxpZGF0aW9uIGZhaWxlZC5cIiwgdGFyZ2V0T2YoY2FuZGlkYXRlKSwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYXJ0aWZhY3QtbGV2ZWwgdGV4dCwgYnl0ZSwgb3Igc3ludGhldGljIHByb3ZlbmFuY2UuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUHJvdmVuYW5jZSBjYW5kaWRhdGUuXG4gKiBAcGFyYW0ge3Vua25vd259IGNvbnRlbnRLaW5kIC0gVmFsaWRhdGVkIGFydGlmYWN0IGNvbnRlbnQga2luZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBWYWxpZGF0ZWQgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgVWludDhBcnJheX0gY29udGVudCAtIERldGFjaGVkIGFydGlmYWN0IGNvbnRlbnQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQXJ0aWZhY3QgdGFyZ2V0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQXJ0aWZhY3RQcm92ZW5hbmNlfSBWYWxpZGF0ZWQgcHJvdmVuYW5jZS5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVBcnRpZmFjdFByb3ZlbmFuY2UodmFsdWUsIGNvbnRlbnRLaW5kLCBhcnRpZmFjdFBhdGgsIGNvbnRlbnQsIHRhcmdldCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpKSBpbnZhbGlkQXJ0aWZhY3RTZXQoYEFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIHJlcXVpcmVzIHByb3ZlbmFuY2UuYCwgdGFyZ2V0KVxuXG4gIGlmICh2YWx1ZS5raW5kID09IFwic3ludGhldGljXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlLnJlYXNvbiAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLnJlYXNvbi5sZW5ndGggPT0gMCB8fCAhaXNEZW5zZUFycmF5KHZhbHVlLnJlbGF0ZWRPcmlnaW5zKSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBTeW50aGV0aWMgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgYW4gZXhwbGljaXQgcmVhc29uIGFuZCByZWxhdGVkIG9yaWdpbnMuYCwgdGFyZ2V0KVxuICAgIH1cbiAgICBpZiAoY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIikge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCaW5hcnkgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgcmVxdWlyZXMgYnl0ZS1yYW5nZSBwcm92ZW5hbmNlLmAsIHRhcmdldClcbiAgICB9XG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW5bXX0gKi9cbiAgICBjb25zdCByZWxhdGVkT3JpZ2lucyA9IFtdXG5cbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdmFsdWUucmVsYXRlZE9yaWdpbnMubGVuZ3RoOyBpbmRleCArPSAxKSB7XG4gICAgICByZWxhdGVkT3JpZ2lucy5wdXNoKHZhbGlkYXRlUmVsYXRlZE9yaWdpbih2YWx1ZS5yZWxhdGVkT3JpZ2luc1tpbmRleF0sIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpXG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5mcmVlemUoe2tpbmQ6IC8qKiBAdHlwZSB7Y29uc3R9ICovIChcInN5bnRoZXRpY1wiKSwgcmVhc29uOiB2YWx1ZS5yZWFzb24sIHJlbGF0ZWRPcmlnaW5zOiBPYmplY3QuZnJlZXplKHJlbGF0ZWRPcmlnaW5zKX0pXG4gIH1cblxuICBpZiAodmFsdWUua2luZCA9PSBcInRleHRcIikge1xuICAgIGNvbnN0IG1hcHBpbmdDYW5kaWRhdGUgPSB2YWx1ZS5tYXBwaW5nXG5cbiAgICBpZiAoY29udGVudEtpbmQgIT0gXCJ0ZXh0XCIgfHwgIWlzUGxhaW5PYmplY3QobWFwcGluZ0NhbmRpZGF0ZSkgfHwgbWFwcGluZ0NhbmRpZGF0ZS5zY2hlbWEgIT0gXCJTZW1hbnRpZm9sZE1hcHBpbmdcIiB8fFxuICAgICAgIWlzUGxhaW5PYmplY3QobWFwcGluZ0NhbmRpZGF0ZS5nZW5lcmF0ZWQpIHx8IG1hcHBpbmdDYW5kaWRhdGUuZ2VuZXJhdGVkLmZpbGVuYW1lICE9IGFydGlmYWN0UGF0aCB8fFxuICAgICAgbWFwcGluZ0NhbmRpZGF0ZS5nZW5lcmF0ZWQuY29udGVudCAhPSBjb250ZW50IHx8ICFpc1BsYWluT2JqZWN0KHZhbHVlLnNvdXJjZU1hcCkpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgbWlzbWF0Y2hlZCByaWNoIG9yIFNvdXJjZSBNYXAgcHJvdmVuYW5jZS5gLCB0YXJnZXQpXG4gICAgfVxuICAgIGlmICh2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkRmlsZW5hbWVNZXRhZGF0YSh2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZSkpIHtcbiAgICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgaW52YWxpZCBTb3VyY2UgTWFwIGZpbGVuYW1lIG1ldGFkYXRhLmAsIHRhcmdldClcbiAgICB9XG4gICAgY29uc3QgbWFwcGluZyA9IGZpbmFsaXplTWFwcGluZyhtYXBwaW5nQ2FuZGlkYXRlKVxuICAgIGNvbnN0IHNvdXJjZU1hcCA9IHZhbGlkYXRlU291cmNlTWFwKHZhbHVlLnNvdXJjZU1hcCwgYXJ0aWZhY3RQYXRoLCB0YXJnZXQpXG4gICAgY29uc3QgcHJvamVjdGVkU291cmNlTWFwID0gdG9Tb3VyY2VNYXBWMyhtYXBwaW5nKVxuXG4gICAgaWYgKCFzYW1lSnNvblZhbHVlKHNvdXJjZU1hcCwgcHJvamVjdGVkU291cmNlTWFwKSkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBUZXh0IGFydGlmYWN0ICcke2FydGlmYWN0UGF0aH0nIGhhcyBTb3VyY2UgTWFwIHByb3ZlbmFuY2UgdGhhdCBjb250cmFkaWN0cyBpdHMgcmljaCBtYXBwaW5nLmAsIHRhcmdldClcbiAgICB9XG5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICBraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJ0ZXh0XCIpLFxuICAgICAgbWFwcGluZyxcbiAgICAgIHNvdXJjZU1hcCxcbiAgICAgIHNvdXJjZU1hcEZpbGVuYW1lOiB2YWx1ZS5zb3VyY2VNYXBGaWxlbmFtZVxuICAgIH0pXG4gIH1cblxuICBpZiAodmFsdWUua2luZCA9PSBcImJ5dGVzXCIpIHtcbiAgICBpZiAoY29udGVudEtpbmQgIT0gXCJiaW5hcnlcIikgaW52YWxpZEFydGlmYWN0U2V0KGBCeXRlIHByb3ZlbmFuY2UgcmVxdWlyZXMgYmluYXJ5IGNvbnRlbnQgZm9yICcke2FydGlmYWN0UGF0aH0nLmAsIHRhcmdldClcbiAgICBjb25zdCBtYXBwaW5nID0gZmluYWxpemVCeXRlTWFwcGluZyh2YWx1ZS5tYXBwaW5nKVxuXG4gICAgaWYgKG1hcHBpbmcuZ2VuZXJhdGVkLnBhdGggIT0gYXJ0aWZhY3RQYXRoIHx8IG1hcHBpbmcuZ2VuZXJhdGVkLmJ5dGVMZW5ndGggIT0gLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqLyAoY29udGVudCkuYnl0ZUxlbmd0aCkge1xuICAgICAgaW52YWxpZEFydGlmYWN0U2V0KGBCeXRlIHByb3ZlbmFuY2UgZG9lcyBub3QgbWF0Y2ggYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScuYCwgdGFyZ2V0KVxuICAgIH1cblxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHtraW5kOiAvKiogQHR5cGUge2NvbnN0fSAqLyAoXCJieXRlc1wiKSwgbWFwcGluZ30pXG4gIH1cblxuICByZXR1cm4gaW52YWxpZEFydGlmYWN0U2V0KGBBcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgYW4gdW5rbm93biBwcm92ZW5hbmNlIGtpbmQuYCwgdGFyZ2V0KVxufVxuXG4vKipcbiAqIEZyZWV6ZXMgb25lIHZhbGlkYXRlZCBhcnRpZmFjdCByZWNvcmQuXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSBhcnRpZmFjdCAtIFZhbGlkYXRlZCBmaWVsZHMuXG4gKiBAcmV0dXJucyB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+fSBGcm96ZW4gcmVjb3JkLlxuICovXG5mdW5jdGlvbiBmcmVlemVBcnRpZmFjdChhcnRpZmFjdCkge1xuICBpZiAoYXJ0aWZhY3QuY29udGVudEtpbmQgPT0gXCJiaW5hcnlcIiAmJiBhcnRpZmFjdC5jb250ZW50IGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhcnRpZmFjdC5jb250ZW50XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoYXJ0aWZhY3QsIFwiY29udGVudFwiLCB7XG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGNvbnRlbnQpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJlZXplKGFydGlmYWN0KVxufVxuXG4vKipcbiAqIExpc3RzIGV2ZXJ5IGRpcmVjdG9yeSBhIHNhZmUgcmVsYXRpdmUgUE9TSVggYXJ0aWZhY3QgcGF0aCByZXF1aXJlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBWYWxpZGF0ZWQgYXJ0aWZhY3QgcGF0aC5cbiAqIEByZXR1cm5zIHtzdHJpbmdbXX0gT3JkZXJlZCBwYXJlbnQgZGlyZWN0b3J5IHBhdGhzLlxuICovXG5mdW5jdGlvbiBhcnRpZmFjdERpcmVjdG9yeVBhdGhzKGFydGlmYWN0UGF0aCkge1xuICBjb25zdCBwYXJ0cyA9IGFydGlmYWN0UGF0aC5zcGxpdChcIi9cIilcbiAgLyoqIEB0eXBlIHtzdHJpbmdbXX0gKi9cbiAgY29uc3QgZGlyZWN0b3JpZXMgPSBbXVxuXG4gIGZvciAobGV0IGluZGV4ID0gMTsgaW5kZXggPCBwYXJ0cy5sZW5ndGg7IGluZGV4ICs9IDEpIGRpcmVjdG9yaWVzLnB1c2gocGFydHMuc2xpY2UoMCwgaW5kZXgpLmpvaW4oXCIvXCIpKVxuXG4gIHJldHVybiBkaXJlY3Rvcmllc1xufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgYXJ0aWZhY3Qtc2V0IGRpYWdub3N0aWMuXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAtIEZhaWx1cmUgZGV0YWlsLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFydGlmYWN0IHRhcmdldC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gW2Vycm9yXSAtIFByZXNlcnZlZCB2YWxpZGF0aW9uIGNhdXNlLlxuICogQHJldHVybnMge25ldmVyfSBBbHdheXMgdGhyb3dzLlxuICovXG5mdW5jdGlvbiBpbnZhbGlkQXJ0aWZhY3RTZXQobWVzc2FnZSwgdGFyZ2V0LCBlcnJvcikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjYXVzZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICBsYW5ndWFnZTogdGFyZ2V0LFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxuLyoqXG4gKiBEZXJpdmVzIGEgc2FmZSBkaWFnbm9zdGljIGlkZW50aXR5IGZyb20gYW4gdW5rbm93biByZXF1ZXN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSBzZXQuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBEaWFnbm9zdGljIGlkZW50aXR5LlxuICovXG5mdW5jdGlvbiB0YXJnZXRPZih2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlLnRhcmdldCA9PSBcInN0cmluZ1wiICYmIHZhbHVlLnRhcmdldC5sZW5ndGggPiAwID8gdmFsdWUudGFyZ2V0IDogXCJhcnRpZmFjdFwiXG59XG5cbi8qKlxuICogQ2hlY2tzIGZvciBhbiBvcmRpbmFyeSBzdHJpbmcta2V5ZWQgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gV2hldGhlciB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT0gT2JqZWN0LnByb3RvdHlwZVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbiBhcnRpZmFjdC1sZXZlbCByZWxhdGVkIG9yaWdpbiB3aXRob3V0IGludGVycHJldGluZyBzb3VyY2Ugb2Zmc2V0cyBhcyBnZW5lcmF0ZWQgYnl0ZXMuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gUmVsYXRlZC1vcmlnaW4gY2FuZGlkYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGFydGlmYWN0UGF0aCAtIE93bmluZyBhcnRpZmFjdCBwYXRoLlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gT3JpZ2luIGluZGV4LlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFydGlmYWN0IHRhcmdldC5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLlJlbGF0ZWRPcmlnaW59IERldGFjaGVkIHJlbGF0ZWQgb3JpZ2luLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlbGF0ZWRPcmlnaW4odmFsdWUsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkge1xuICBpZiAoIWlzUGxhaW5PYmplY3QodmFsdWUpIHx8IHR5cGVvZiB2YWx1ZS5zb3VyY2VJZCAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLnNvdXJjZUlkLmxlbmd0aCA9PSAwIHx8XG4gICAgIWlzUGxhaW5PYmplY3QodmFsdWUubG9jYXRpb24pIHx8IHR5cGVvZiB2YWx1ZS5sb2NhdGlvbi5maWxlbmFtZSAhPSBcInN0cmluZ1wiIHx8IHZhbHVlLmxvY2F0aW9uLmZpbGVuYW1lLmxlbmd0aCA9PSAwIHx8XG4gICAgIXZhbGlkU291cmNlUG9pbnQodmFsdWUubG9jYXRpb24uc3RhcnQpIHx8ICF2YWxpZFNvdXJjZVBvaW50KHZhbHVlLmxvY2F0aW9uLmVuZCkgfHxcbiAgICB2YWx1ZS5sb2NhdGlvbi5lbmQub2Zmc2V0IDwgdmFsdWUubG9jYXRpb24uc3RhcnQub2Zmc2V0IHx8ICFpc1NvdXJjZVJhbmdlT3JkZXJlZCh2YWx1ZS5sb2NhdGlvbi5zdGFydCwgdmFsdWUubG9jYXRpb24uZW5kKSkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIG1hbGZvcm1lZCByZWxhdGVkIG9yaWdpbiAke2luZGV4fS5gLCB0YXJnZXQpXG4gIH1cblxuICByZXR1cm4gZGVlcEZyZWV6ZSh7XG4gICAgbG9jYXRpb246IHtcbiAgICAgIGVuZDogey4uLnZhbHVlLmxvY2F0aW9uLmVuZH0sXG4gICAgICBmaWxlbmFtZTogdmFsdWUubG9jYXRpb24uZmlsZW5hbWUsXG4gICAgICBzdGFydDogey4uLnZhbHVlLmxvY2F0aW9uLnN0YXJ0fVxuICAgIH0sXG4gICAgc291cmNlSWQ6IHZhbHVlLnNvdXJjZUlkLFxuICAgIC4uLihvcHRpb25hbFN0cmluZyh2YWx1ZS5ub2RlSWQsIFwibm9kZUlkXCIsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpLFxuICAgIC4uLihvcHRpb25hbFN0cmluZyh2YWx1ZS5zeW1ib2xJZCwgXCJzeW1ib2xJZFwiLCBhcnRpZmFjdFBhdGgsIGluZGV4LCB0YXJnZXQpKSxcbiAgICAuLi4ob3B0aW9uYWxTdHJpbmcodmFsdWUucm9sZSwgXCJyb2xlXCIsIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkpXG4gIH0pXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIG9uZSBvcHRpb25hbCByZWxhdGVkLW9yaWdpbiBzdHJpbmcgZmllbGQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmd9IHByb3BlcnR5IC0gUHJvcGVydHkgbmFtZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBPd25pbmcgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCAtIE9yaWdpbiBpbmRleC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gUHJlc2VudCB2YWxpZGF0ZWQgcHJvcGVydHkgb3IgYW4gZW1wdHkgcmVjb3JkLlxuICovXG5mdW5jdGlvbiBvcHRpb25hbFN0cmluZyh2YWx1ZSwgcHJvcGVydHksIGFydGlmYWN0UGF0aCwgaW5kZXgsIHRhcmdldCkge1xuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHt9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT0gXCJzdHJpbmdcIiB8fCB2YWx1ZS5sZW5ndGggPT0gMCkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgQXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgJHtwcm9wZXJ0eX0gaW4gcmVsYXRlZCBvcmlnaW4gJHtpbmRleH0uYCwgdGFyZ2V0KVxuICB9XG5cbiAgcmV0dXJuIHtbcHJvcGVydHldOiB2YWx1ZX1cbn1cblxuLyoqXG4gKiBDaGVja3Mgb25lIFVURi0xNiBzb3VyY2UgcG9pbnQuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHBvaW50LlxuICogQHJldHVybnMge3ZhbHVlIGlzIGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlUG9pbnR9IFdoZXRoZXIgdGhlIHBvaW50IGlzIHN0cnVjdHVyYWxseSB2YWxpZC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRTb3VyY2VQb2ludCh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlLmxpbmUgPT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZS5saW5lKSAmJiB2YWx1ZS5saW5lID4gMCAmJlxuICAgIHR5cGVvZiB2YWx1ZS5jb2x1bW4gPT0gXCJudW1iZXJcIiAmJiBOdW1iZXIuaXNTYWZlSW50ZWdlcih2YWx1ZS5jb2x1bW4pICYmIHZhbHVlLmNvbHVtbiA+IDAgJiZcbiAgICB0eXBlb2YgdmFsdWUub2Zmc2V0ID09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzU2FmZUludGVnZXIodmFsdWUub2Zmc2V0KSAmJiB2YWx1ZS5vZmZzZXQgPj0gMFxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhbmQgZGV0YWNoZXMgdGhlIFNvdXJjZSBNYXAgdjMgcHJvamVjdGlvbiBjYXJyaWVkIGJ5IGEgdGV4dCBhcnRpZmFjdC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBTb3VyY2UgTWFwIGNhbmRpZGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcnRpZmFjdFBhdGggLSBPd25pbmcgYXJ0aWZhY3QgcGF0aC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBcnRpZmFjdCB0YXJnZXQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiQGpyaWRnZXdlbGwvZ2VuLW1hcHBpbmdcIikuRW5jb2RlZFNvdXJjZU1hcH0gRGV0YWNoZWQgU291cmNlIE1hcC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTb3VyY2VNYXAodmFsdWUsIGFydGlmYWN0UGF0aCwgdGFyZ2V0KSB7XG4gIGlmICghaXNQbGFpbk9iamVjdCh2YWx1ZSkgfHwgdmFsdWUudmVyc2lvbiAhPSAzIHx8IHZhbHVlLmZpbGUgIT0gYXJ0aWZhY3RQYXRoIHx8IHR5cGVvZiB2YWx1ZS5tYXBwaW5ncyAhPSBcInN0cmluZ1wiIHx8XG4gICAgIWlzRGVuc2VBcnJheSh2YWx1ZS5uYW1lcykgfHwgIXZhbHVlLm5hbWVzLmV2ZXJ5KChuYW1lKSA9PiB0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiKSB8fFxuICAgICFpc0RlbnNlQXJyYXkodmFsdWUuc291cmNlcykgfHwgIXZhbHVlLnNvdXJjZXMuZXZlcnkoKHNvdXJjZSkgPT4gdHlwZW9mIHNvdXJjZSA9PSBcInN0cmluZ1wiKSB8fFxuICAgICh2YWx1ZS5zb3VyY2VzQ29udGVudCAhPT0gdW5kZWZpbmVkICYmICghaXNEZW5zZUFycmF5KHZhbHVlLnNvdXJjZXNDb250ZW50KSB8fFxuICAgICAgIXZhbHVlLnNvdXJjZXNDb250ZW50LmV2ZXJ5KChzb3VyY2UpID0+IHNvdXJjZSA9PSBudWxsIHx8IHR5cGVvZiBzb3VyY2UgPT0gXCJzdHJpbmdcIikpKSkge1xuICAgIGludmFsaWRBcnRpZmFjdFNldChgVGV4dCBhcnRpZmFjdCAnJHthcnRpZmFjdFBhdGh9JyBoYXMgbWFsZm9ybWVkIFNvdXJjZSBNYXAgdjMgcHJvdmVuYW5jZS5gLCB0YXJnZXQpXG4gIH1cbiAgdmFsaWRhdGVFbmNvZGVkU291cmNlTWFwTWFwcGluZ3MoXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLkVuY29kZWRTb3VyY2VNYXB9ICovICgvKiogQHR5cGUge3Vua25vd259ICovICh2YWx1ZSkpLFxuICAgIGFydGlmYWN0UGF0aCxcbiAgICB0YXJnZXRcbiAgKVxuXG4gIGNvbnN0IGRldGFjaGVkID0gLyoqIEB0eXBlIHt1bmtub3dufSAqLyAoc3RydWN0dXJlZENsb25lKHZhbHVlKSlcblxuICByZXR1cm4gZGVlcEZyZWV6ZSgvKiogQHR5cGUge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL2dlbi1tYXBwaW5nXCIpLkVuY29kZWRTb3VyY2VNYXB9ICovIChkZXRhY2hlZCkpXG59XG5cbi8qKlxuICogRGVjb2RlcyBhbmQgdmFsaWRhdGVzIHRoZSBTb3VyY2UgTWFwIHBheWxvYWQgd2l0aCB0aGUgaW5zdGFsbGVkIG1hcHBpbmcgaW1wbGVtZW50YXRpb24uXG4gKiBAcGFyYW0ge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmdcIikuRW5jb2RlZFNvdXJjZU1hcH0gc291cmNlTWFwIC0gU3RydWN0dXJhbGx5IHZhbGlkYXRlZCBtYXAuXG4gKiBAcGFyYW0ge3N0cmluZ30gYXJ0aWZhY3RQYXRoIC0gT3duaW5nIGFydGlmYWN0IHBhdGguXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQXJ0aWZhY3QgdGFyZ2V0LlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlRW5jb2RlZFNvdXJjZU1hcE1hcHBpbmdzKHNvdXJjZU1hcCwgYXJ0aWZhY3RQYXRoLCB0YXJnZXQpIHtcbiAgLyoqIEB0eXBlIHtSZWFkb25seTxpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLlNvdXJjZU1hcFNlZ21lbnRbXVtdPn0gKi9cbiAgbGV0IGRlY29kZWRcbiAgbGV0IGNhbm9uaWNhbE1hcHBpbmdzXG5cbiAgdHJ5IHtcbiAgICBkZWNvZGVkID0gZGVjb2RlZE1hcHBpbmdzKG5ldyBUcmFjZU1hcChzb3VyY2VNYXApKVxuICAgIGNvbnN0IGRlY29kZWRNYXAgPSAvKiogQHR5cGUge2ltcG9ydChcIkBqcmlkZ2V3ZWxsL3RyYWNlLW1hcHBpbmdcIikuRGVjb2RlZFNvdXJjZU1hcH0gKi8gKHtcbiAgICAgIC4uLnNvdXJjZU1hcCxcbiAgICAgIG1hcHBpbmdzOiBzdHJ1Y3R1cmVkQ2xvbmUoZGVjb2RlZClcbiAgICB9KVxuXG4gICAgY2Fub25pY2FsTWFwcGluZ3MgPSBlbmNvZGVkTWFwcGluZ3MocHJlc29ydGVkRGVjb2RlZE1hcChkZWNvZGVkTWFwKSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgZW5jb2RlZCBTb3VyY2UgTWFwIG1hcHBpbmdzLmAsIHRhcmdldCwgZXJyb3IpXG4gIH1cblxuICBpZiAoY2Fub25pY2FsTWFwcGluZ3MgIT0gc291cmNlTWFwLm1hcHBpbmdzIHx8XG4gICAgIXZhbGlkRGVjb2RlZFNvdXJjZU1hcE1hcHBpbmdzKGRlY29kZWQsIHNvdXJjZU1hcC5zb3VyY2VzLmxlbmd0aCwgc291cmNlTWFwLm5hbWVzLmxlbmd0aCkpIHtcbiAgICBpbnZhbGlkQXJ0aWZhY3RTZXQoYFRleHQgYXJ0aWZhY3QgJyR7YXJ0aWZhY3RQYXRofScgaGFzIGludmFsaWQgZW5jb2RlZCBTb3VyY2UgTWFwIG1hcHBpbmdzLmAsIHRhcmdldClcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBkZWNvZGVkIFNvdXJjZSBNYXAgc2VnbWVudCBzaGFwZSBhbmQgcmVmZXJlbmNlZCBpbmRpY2VzLlxuICogQHBhcmFtIHtSZWFkb25seTxpbXBvcnQoXCJAanJpZGdld2VsbC90cmFjZS1tYXBwaW5nXCIpLlNvdXJjZU1hcFNlZ21lbnRbXVtdPn0gbGluZXMgLSBEZWNvZGVkIG1hcHBpbmcgbGluZXMuXG4gKiBAcGFyYW0ge251bWJlcn0gc291cmNlQ291bnQgLSBEZWNsYXJlZCBzb3VyY2UgY291bnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbmFtZUNvdW50IC0gRGVjbGFyZWQgbmFtZSBjb3VudC5cbiAqIEByZXR1cm5zIHtib29sZWFufSBXaGV0aGVyIGV2ZXJ5IHNlZ21lbnQgaXMgc2VtYW50aWNhbGx5IHZhbGlkLlxuICovXG5mdW5jdGlvbiB2YWxpZERlY29kZWRTb3VyY2VNYXBNYXBwaW5ncyhsaW5lcywgc291cmNlQ291bnQsIG5hbWVDb3VudCkge1xuICByZXR1cm4gbGluZXMuZXZlcnkoKGxpbmUpID0+IGxpbmUuZXZlcnkoKHNlZ21lbnQpID0+IHtcbiAgICBpZiAoc2VnbWVudC5sZW5ndGggIT0gMSAmJiBzZWdtZW50Lmxlbmd0aCAhPSA0ICYmIHNlZ21lbnQubGVuZ3RoICE9IDUpIHJldHVybiBmYWxzZVxuICAgIGlmICghc2VnbWVudC5ldmVyeSgoZmllbGQpID0+IE51bWJlci5pc1NhZmVJbnRlZ2VyKGZpZWxkKSAmJiBmaWVsZCA+PSAwKSkgcmV0dXJuIGZhbHNlXG4gICAgaWYgKHNlZ21lbnQubGVuZ3RoID09IDEpIHJldHVybiB0cnVlXG4gICAgaWYgKHNlZ21lbnRbMV0gPj0gc291cmNlQ291bnQpIHJldHVybiBmYWxzZVxuXG4gICAgcmV0dXJuIHNlZ21lbnQubGVuZ3RoID09IDQgfHwgc2VnbWVudFs0XSA8IG5hbWVDb3VudFxuICB9KSlcbn1cblxuLyoqXG4gKiBDb21wYXJlcyBkZXRhY2hlZCBKU09OIHZhbHVlcyB3aXRob3V0IGRlcGVuZGluZyBvbiBjYWxsZXIgb2JqZWN0LWtleSBvcmRlci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gbGVmdCAtIEZpcnN0IEpTT04gdmFsdWUuXG4gKiBAcGFyYW0ge3Vua25vd259IHJpZ2h0IC0gU2Vjb25kIEpTT04gdmFsdWUuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gV2hldGhlciBib3RoIHZhbHVlcyBhcmUgc3RydWN0dXJhbGx5IGlkZW50aWNhbC5cbiAqL1xuZnVuY3Rpb24gc2FtZUpzb25WYWx1ZShsZWZ0LCByaWdodCkge1xuICBpZiAobGVmdCA9PT0gcmlnaHQpIHJldHVybiB0cnVlXG4gIGlmIChBcnJheS5pc0FycmF5KGxlZnQpIHx8IEFycmF5LmlzQXJyYXkocmlnaHQpKSB7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkobGVmdCkgJiYgQXJyYXkuaXNBcnJheShyaWdodCkgJiYgbGVmdC5sZW5ndGggPT0gcmlnaHQubGVuZ3RoICYmXG4gICAgICBsZWZ0LmV2ZXJ5KChlbnRyeSwgaW5kZXgpID0+IHNhbWVKc29uVmFsdWUoZW50cnksIHJpZ2h0W2luZGV4XSkpXG4gIH1cbiAgaWYgKCFpc1BsYWluT2JqZWN0KGxlZnQpIHx8ICFpc1BsYWluT2JqZWN0KHJpZ2h0KSkgcmV0dXJuIGZhbHNlXG4gIGNvbnN0IGxlZnRLZXlzID0gT2JqZWN0LmtleXMobGVmdClcbiAgY29uc3QgcmlnaHRLZXlzID0gT2JqZWN0LmtleXMocmlnaHQpXG5cbiAgcmV0dXJuIGxlZnRLZXlzLmxlbmd0aCA9PSByaWdodEtleXMubGVuZ3RoICYmXG4gICAgbGVmdEtleXMuZXZlcnkoKGtleSkgPT4gT2JqZWN0Lmhhc093bihyaWdodCwga2V5KSAmJiBzYW1lSnNvblZhbHVlKGxlZnRba2V5XSwgcmlnaHRba2V5XSkpXG59XG5cbi8qKlxuICogRGVlcGx5IGZyZWV6ZXMgYSBkZXRhY2hlZCBKU09OIHZhbHVlLlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSB7VH0gdmFsdWUgLSBEZXRhY2hlZCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtUfSBGcm96ZW4gdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGRlZXBGcmVlemUodmFsdWUpIHtcbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT0gXCJvYmplY3RcIiB8fCBPYmplY3QuaXNGcm96ZW4odmFsdWUpKSByZXR1cm4gdmFsdWVcblxuICBmb3IgKGNvbnN0IG5lc3RlZCBvZiBPYmplY3QudmFsdWVzKHZhbHVlKSkgZGVlcEZyZWV6ZShuZXN0ZWQpXG5cbiAgcmV0dXJuIE9iamVjdC5mcmVlemUodmFsdWUpXG59XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../../src/backends/identifiers.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"identifiers.d.ts","sourceRoot":"","sources":["../../../src/backends/identifiers.js"],"names":[],"mappings":"AAqEA;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EANtC,OAAO,sBAAsB,EAAE,gBAMO,EAAE,IAAI,EAL5C,OAK4C,EAAE,IAAI,EAJlD,MAIkD,EAAE,QAAQ,EAH5D,OAAO,sBAAsB,EAAE,cAAc,GAAG,SAGY,GAF1D,IAAI,CAWhB;AAED;;;;;;;GAOG;AACH,wBAAgB,+BAA+B,CAAC,QAAQ,EAN7C,OAAO,sBAAsB,EAAE,gBAMc,EAAE,IAAI,EALnD,OAKmD,EAAE,IAAI,EAJzD,MAIyD,EAAE,QAAQ,EAHnE,OAAO,sBAAsB,EAAE,cAAc,GAAG,SAGmB,GAFjE,IAAI,CAchB"}
|
|
@@ -5,6 +5,7 @@ const identifierPatterns = {
|
|
|
5
5
|
java: /^[A-Za-z_$][A-Za-z0-9_$]*$/u,
|
|
6
6
|
javascript: /^[A-Za-z_$][A-Za-z0-9_$]*$/u,
|
|
7
7
|
php: /^[A-Za-z_][A-Za-z0-9_]*$/u,
|
|
8
|
+
python: /^(?:_|\p{XID_Start})(?:_|\p{XID_Continue})*$/u,
|
|
8
9
|
ruby: /^[a-z_][A-Za-z0-9_]*$/u,
|
|
9
10
|
typescript: /^[A-Za-z_$][A-Za-z0-9_$]*$/u
|
|
10
11
|
};
|
|
@@ -35,6 +36,12 @@ const reservedWords = {
|
|
|
35
36
|
"require_once", "return", "self", "static", "switch", "throw", "trait", "true", "try", "unset", "use", "var",
|
|
36
37
|
"void", "while", "xor", "yield"
|
|
37
38
|
]),
|
|
39
|
+
python: new Set([
|
|
40
|
+
"False", "None", "True", "and", "as", "assert", "async", "await", "bool", "break", "case", "class",
|
|
41
|
+
"continue", "def", "del", "elif", "else", "except", "exec", "finally", "for", "from", "global", "if",
|
|
42
|
+
"import", "in", "int", "is", "lambda", "match", "nonlocal", "not", "or", "pass", "print",
|
|
43
|
+
"raise", "return", "str", "try", "type", "while", "with", "yield", "_", "__debug__"
|
|
44
|
+
]),
|
|
38
45
|
ruby: new Set([
|
|
39
46
|
"BEGIN", "END", "__ENCODING__", "__END__", "__FILE__", "__LINE__", "alias", "and", "begin", "break", "case",
|
|
40
47
|
"class", "def", "defined?", "do", "else", "elsif", "end", "ensure", "false", "for", "if", "in", "module",
|
|
@@ -67,7 +74,8 @@ export function validateTargetIdentifier(language, name, role, location) {
|
|
|
67
74
|
if (typeof name != "string")
|
|
68
75
|
unsupportedCapability(language, `${role} identifier`, location);
|
|
69
76
|
const reservedName = language == "php" ? name.toLowerCase() : name;
|
|
70
|
-
if (!identifierPatterns[language].test(name) || reservedWords[language].has(reservedName)
|
|
77
|
+
if (!identifierPatterns[language].test(name) || reservedWords[language].has(reservedName) ||
|
|
78
|
+
language == "python" && name.normalize("NFKC") != name) {
|
|
71
79
|
unsupportedCapability(language, `${role} identifier '${name}'`, location);
|
|
72
80
|
}
|
|
73
81
|
}
|
|
@@ -90,4 +98,4 @@ export function validateTargetBindingIdentifier(language, name, role, location)
|
|
|
90
98
|
unsupportedCapability(language, `${role} identifier '${name}'`, location);
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpZmllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvaWRlbnRpZmllcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELDhFQUE4RTtBQUM5RSxNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLElBQUksRUFBRSw2QkFBNkI7SUFDbkMsVUFBVSxFQUFFLDZCQUE2QjtJQUN6QyxHQUFHLEVBQUUsMkJBQTJCO0lBQ2hDLElBQUksRUFBRSx3QkFBd0I7SUFDOUIsVUFBVSxFQUFFLDZCQUE2QjtDQUMxQyxDQUFBO0FBRUQsbUZBQW1GO0FBQ25GLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLElBQUksRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUNaLEdBQUcsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVTtRQUM1RyxTQUFTLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEtBQUs7UUFDNUcsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLEtBQUs7UUFDekcsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsUUFBUTtRQUN6RyxRQUFRLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjO1FBQzFHLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVTtRQUM1RyxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPO0tBQ2pDLENBQUM7SUFDRixVQUFVLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDbEIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNO1FBQzlHLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxJQUFJO1FBQ3RHLFlBQVksRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxRQUFRO1FBQ2hILE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTztLQUNyRyxDQUFDO0lBQ0YsR0FBRyxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ1gsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTztRQUMzRyxPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsWUFBWTtRQUN2RyxRQUFRLEVBQUUsWUFBWSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTztRQUM3RyxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsU0FBUztRQUN0RyxjQUFjLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxXQUFXO1FBQ2xILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUztRQUNsSCxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUs7UUFDNUcsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsT0FBTztLQUNoQyxDQUFDO0lBQ0YsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ1osT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU07UUFDM0csT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUTtRQUN4RyxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPO1FBQ3pHLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxPQUFPO0tBQzVDLENBQUM7SUFDRixVQUFVLEVBQUUsSUFBSSxHQUFHLENBQUM7UUFDbEIsVUFBVSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPO1FBQzNHLGFBQWEsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxTQUFTO1FBQ2hILE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWTtRQUMvRyxXQUFXLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUk7UUFDMUcsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsS0FBSztRQUM1RyxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVc7UUFDOUcsUUFBUSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE9BQU87S0FDdEUsQ0FBQztDQUNILENBQUE7QUFFRCxNQUFNLDJCQUEyQixHQUFHLElBQUksR0FBRyxDQUFDO0lBQzFDLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU07Q0FDbkcsQ0FBQyxDQUFBO0FBQ0YsTUFBTSwwQkFBMEIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBRS9EOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUTtJQUNyRSxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVE7UUFBRSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUU1RixNQUFNLFlBQVksR0FBRyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQTtJQUVsRSxJQUFJLENBQUMsa0JBQWtCLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUMxRixxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLGdCQUFnQixJQUFJLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsK0JBQStCLENBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsUUFBUTtJQUM1RSx3QkFBd0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUV4RCxNQUFNLHdCQUF3QixHQUFHLFFBQVEsSUFBSSxZQUFZLElBQUksQ0FBQyxJQUFJLElBQUksV0FBVyxJQUFJLElBQUksSUFBSSxNQUFNLENBQUMsQ0FBQTtJQUNwRyxNQUFNLGtCQUFrQixHQUFHLFFBQVEsSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksUUFBUTtRQUNyRSxDQUFDLENBQUMsSUFBSSxJQUFJLFdBQVcsSUFBSSwyQkFBMkIsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0QsQ0FBQyxDQUFDLElBQUksSUFBSSxPQUFPLElBQUksSUFBSSxJQUFJLG1CQUFtQixDQUFDLElBQUksMEJBQTBCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvRixNQUFNLGtCQUFrQixHQUFHLFFBQVEsSUFBSSxNQUFNLElBQUksT0FBTyxJQUFJLElBQUksUUFBUSxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUE7SUFFbEcsSUFBSSx3QkFBd0IsSUFBSSxrQkFBa0IsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pFLHFCQUFxQixDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksZ0JBQWdCLElBQUksR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFBO0lBQzNFLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7dW5zdXBwb3J0ZWRDYXBhYmlsaXR5fSBmcm9tIFwiLi4vZGlhZ25vc3RpYy5qc1wiXG5cbi8qKiBAdHlwZSB7UmVjb3JkPGltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2UsIFJlZ0V4cD59ICovXG5jb25zdCBpZGVudGlmaWVyUGF0dGVybnMgPSB7XG4gIGphdmE6IC9eW0EtWmEtel8kXVtBLVphLXowLTlfJF0qJC91LFxuICBqYXZhc2NyaXB0OiAvXltBLVphLXpfJF1bQS1aYS16MC05XyRdKiQvdSxcbiAgcGhwOiAvXltBLVphLXpfXVtBLVphLXowLTlfXSokL3UsXG4gIHJ1Ynk6IC9eW2Etel9dW0EtWmEtejAtOV9dKiQvdSxcbiAgdHlwZXNjcmlwdDogL15bQS1aYS16XyRdW0EtWmEtejAtOV8kXSokL3Vcbn1cblxuLyoqIEB0eXBlIHtSZWNvcmQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZSwgU2V0PHN0cmluZz4+fSAqL1xuY29uc3QgcmVzZXJ2ZWRXb3JkcyA9IHtcbiAgamF2YTogbmV3IFNldChbXG4gICAgXCJfXCIsIFwiYWJzdHJhY3RcIiwgXCJhc3NlcnRcIiwgXCJib29sZWFuXCIsIFwiYnJlYWtcIiwgXCJieXRlXCIsIFwiY2FzZVwiLCBcImNhdGNoXCIsIFwiY2hhclwiLCBcImNsYXNzXCIsIFwiY29uc3RcIiwgXCJjb250aW51ZVwiLFxuICAgIFwiZGVmYXVsdFwiLCBcImRvXCIsIFwiZG91YmxlXCIsIFwiZWxzZVwiLCBcImVudW1cIiwgXCJleHBvcnRzXCIsIFwiZXh0ZW5kc1wiLCBcImZhbHNlXCIsIFwiZmluYWxcIiwgXCJmaW5hbGx5XCIsIFwiZmxvYXRcIiwgXCJmb3JcIixcbiAgICBcImdvdG9cIiwgXCJpZlwiLCBcImltcGxlbWVudHNcIiwgXCJpbXBvcnRcIiwgXCJpbnN0YW5jZW9mXCIsIFwiaW50XCIsIFwiaW50ZXJmYWNlXCIsIFwibG9uZ1wiLCBcIm1vZHVsZVwiLCBcIm5hdGl2ZVwiLCBcIm5ld1wiLFxuICAgIFwibm9uLXNlYWxlZFwiLCBcIm51bGxcIiwgXCJvcGVuXCIsIFwib3BlbnNcIiwgXCJwYWNrYWdlXCIsIFwicGVybWl0c1wiLCBcInByaXZhdGVcIiwgXCJwcm90ZWN0ZWRcIiwgXCJwcm92aWRlc1wiLCBcInB1YmxpY1wiLFxuICAgIFwicmVjb3JkXCIsIFwicmVxdWlyZXNcIiwgXCJyZXR1cm5cIiwgXCJzZWFsZWRcIiwgXCJzaG9ydFwiLCBcInN0YXRpY1wiLCBcInN0cmljdGZwXCIsIFwic3VwZXJcIiwgXCJzd2l0Y2hcIiwgXCJzeW5jaHJvbml6ZWRcIixcbiAgICBcInRoaXNcIiwgXCJ0aHJvd1wiLCBcInRocm93c1wiLCBcInRvXCIsIFwidHJhbnNpZW50XCIsIFwidHJhbnNpdGl2ZVwiLCBcInRydWVcIiwgXCJ0cnlcIiwgXCJ1c2VzXCIsIFwidmFyXCIsIFwidm9pZFwiLCBcInZvbGF0aWxlXCIsXG4gICAgXCJ3aGVuXCIsIFwid2hpbGVcIiwgXCJ3aXRoXCIsIFwieWllbGRcIlxuICBdKSxcbiAgamF2YXNjcmlwdDogbmV3IFNldChbXG4gICAgXCJhd2FpdFwiLCBcImJyZWFrXCIsIFwiY2FzZVwiLCBcImNhdGNoXCIsIFwiY2xhc3NcIiwgXCJjb25zdFwiLCBcImNvbnRpbnVlXCIsIFwiZGVidWdnZXJcIiwgXCJkZWZhdWx0XCIsIFwiZGVsZXRlXCIsIFwiZG9cIiwgXCJlbHNlXCIsXG4gICAgXCJlbnVtXCIsIFwiZXhwb3J0XCIsIFwiZXh0ZW5kc1wiLCBcImZhbHNlXCIsIFwiZmluYWxseVwiLCBcImZvclwiLCBcImZ1bmN0aW9uXCIsIFwiaWZcIiwgXCJpbXBsZW1lbnRzXCIsIFwiaW1wb3J0XCIsIFwiaW5cIixcbiAgICBcImluc3RhbmNlb2ZcIiwgXCJpbnRlcmZhY2VcIiwgXCJsZXRcIiwgXCJuZXdcIiwgXCJudWxsXCIsIFwicGFja2FnZVwiLCBcInByaXZhdGVcIiwgXCJwcm90ZWN0ZWRcIiwgXCJwdWJsaWNcIiwgXCJyZXR1cm5cIiwgXCJzdGF0aWNcIixcbiAgICBcInN1cGVyXCIsIFwic3dpdGNoXCIsIFwidGhpc1wiLCBcInRocm93XCIsIFwidHJ1ZVwiLCBcInRyeVwiLCBcInR5cGVvZlwiLCBcInZhclwiLCBcInZvaWRcIiwgXCJ3aGlsZVwiLCBcIndpdGhcIiwgXCJ5aWVsZFwiXG4gIF0pLFxuICBwaHA6IG5ldyBTZXQoW1xuICAgIFwiX19oYWx0X2NvbXBpbGVyXCIsIFwiYWJzdHJhY3RcIiwgXCJhbmRcIiwgXCJhcnJheVwiLCBcImFzXCIsIFwiYnJlYWtcIiwgXCJjYWxsYWJsZVwiLCBcImNhc2VcIiwgXCJjYXRjaFwiLCBcImNsYXNzXCIsIFwiY2xvbmVcIixcbiAgICBcImNvbnN0XCIsIFwiY29udGludWVcIiwgXCJkZWNsYXJlXCIsIFwiZGVmYXVsdFwiLCBcImRpZVwiLCBcImRvXCIsIFwiZWNob1wiLCBcImVsc2VcIiwgXCJlbHNlaWZcIiwgXCJlbXB0eVwiLCBcImVuZGRlY2xhcmVcIixcbiAgICBcImVuZGZvclwiLCBcImVuZGZvcmVhY2hcIiwgXCJlbmRpZlwiLCBcImVuZHN3aXRjaFwiLCBcImVuZHdoaWxlXCIsIFwiZW51bVwiLCBcImV2YWxcIiwgXCJleGl0XCIsIFwiZXh0ZW5kc1wiLCBcImZhbHNlXCIsIFwiZmluYWxcIixcbiAgICBcImZpbmFsbHlcIiwgXCJmblwiLCBcImZvclwiLCBcImZvcmVhY2hcIiwgXCJmcm9tXCIsIFwiZnVuY3Rpb25cIiwgXCJnbG9iYWxcIiwgXCJnb3RvXCIsIFwiaWZcIiwgXCJpbXBsZW1lbnRzXCIsIFwiaW5jbHVkZVwiLFxuICAgIFwiaW5jbHVkZV9vbmNlXCIsIFwiaW5zdGFuY2VvZlwiLCBcImluc3RlYWRvZlwiLCBcImludGVyZmFjZVwiLCBcImlzc2V0XCIsIFwiaXRlcmFibGVcIiwgXCJsaXN0XCIsIFwibWF0Y2hcIiwgXCJtaXhlZFwiLCBcIm5hbWVzcGFjZVwiLFxuICAgIFwibmV2ZXJcIiwgXCJuZXdcIiwgXCJudWxsXCIsIFwib2JqZWN0XCIsIFwib3JcIiwgXCJwYXJlbnRcIiwgXCJwcmludFwiLCBcInByaXZhdGVcIiwgXCJwcm90ZWN0ZWRcIiwgXCJwdWJsaWNcIiwgXCJyZWFkb25seVwiLCBcInJlcXVpcmVcIixcbiAgICBcInJlcXVpcmVfb25jZVwiLCBcInJldHVyblwiLCBcInNlbGZcIiwgXCJzdGF0aWNcIiwgXCJzd2l0Y2hcIiwgXCJ0aHJvd1wiLCBcInRyYWl0XCIsIFwidHJ1ZVwiLCBcInRyeVwiLCBcInVuc2V0XCIsIFwidXNlXCIsIFwidmFyXCIsXG4gICAgXCJ2b2lkXCIsIFwid2hpbGVcIiwgXCJ4b3JcIiwgXCJ5aWVsZFwiXG4gIF0pLFxuICBydWJ5OiBuZXcgU2V0KFtcbiAgICBcIkJFR0lOXCIsIFwiRU5EXCIsIFwiX19FTkNPRElOR19fXCIsIFwiX19FTkRfX1wiLCBcIl9fRklMRV9fXCIsIFwiX19MSU5FX19cIiwgXCJhbGlhc1wiLCBcImFuZFwiLCBcImJlZ2luXCIsIFwiYnJlYWtcIiwgXCJjYXNlXCIsXG4gICAgXCJjbGFzc1wiLCBcImRlZlwiLCBcImRlZmluZWQ/XCIsIFwiZG9cIiwgXCJlbHNlXCIsIFwiZWxzaWZcIiwgXCJlbmRcIiwgXCJlbnN1cmVcIiwgXCJmYWxzZVwiLCBcImZvclwiLCBcImlmXCIsIFwiaW5cIiwgXCJtb2R1bGVcIixcbiAgICBcIm5leHRcIiwgXCJuaWxcIiwgXCJub3RcIiwgXCJvclwiLCBcInJlZG9cIiwgXCJyZXNjdWVcIiwgXCJyZXRyeVwiLCBcInJldHVyblwiLCBcInNlbGZcIiwgXCJzdXBlclwiLCBcInRoZW5cIiwgXCJ0cnVlXCIsIFwidW5kZWZcIixcbiAgICBcInVubGVzc1wiLCBcInVudGlsXCIsIFwid2hlblwiLCBcIndoaWxlXCIsIFwieWllbGRcIlxuICBdKSxcbiAgdHlwZXNjcmlwdDogbmV3IFNldChbXG4gICAgXCJhYnN0cmFjdFwiLCBcImFueVwiLCBcImFzXCIsIFwiYXNzZXJ0c1wiLCBcImFzeW5jXCIsIFwiYXdhaXRcIiwgXCJib29sZWFuXCIsIFwiYnJlYWtcIiwgXCJjYXNlXCIsIFwiY2F0Y2hcIiwgXCJjbGFzc1wiLCBcImNvbnN0XCIsXG4gICAgXCJjb25zdHJ1Y3RvclwiLCBcImNvbnRpbnVlXCIsIFwiZGVidWdnZXJcIiwgXCJkZWNsYXJlXCIsIFwiZGVmYXVsdFwiLCBcImRlbGV0ZVwiLCBcImRvXCIsIFwiZWxzZVwiLCBcImVudW1cIiwgXCJleHBvcnRcIiwgXCJleHRlbmRzXCIsXG4gICAgXCJmYWxzZVwiLCBcImZpbmFsbHlcIiwgXCJmb3JcIiwgXCJmcm9tXCIsIFwiZnVuY3Rpb25cIiwgXCJnZXRcIiwgXCJpZlwiLCBcImltcGxlbWVudHNcIiwgXCJpbXBvcnRcIiwgXCJpblwiLCBcImluZmVyXCIsIFwiaW5zdGFuY2VvZlwiLFxuICAgIFwiaW50ZXJmYWNlXCIsIFwiaXNcIiwgXCJrZXlvZlwiLCBcImxldFwiLCBcIm1vZHVsZVwiLCBcIm5hbWVzcGFjZVwiLCBcIm5ldmVyXCIsIFwibmV3XCIsIFwibnVsbFwiLCBcIm51bWJlclwiLCBcIm9iamVjdFwiLCBcIm9mXCIsXG4gICAgXCJvdmVycmlkZVwiLCBcInBhY2thZ2VcIiwgXCJwcml2YXRlXCIsIFwicHJvdGVjdGVkXCIsIFwicHVibGljXCIsIFwicmVhZG9ubHlcIiwgXCJyZXF1aXJlXCIsIFwicmV0dXJuXCIsIFwic2F0aXNmaWVzXCIsIFwic2V0XCIsXG4gICAgXCJzdGF0aWNcIiwgXCJzdHJpbmdcIiwgXCJzdXBlclwiLCBcInN3aXRjaFwiLCBcInN5bWJvbFwiLCBcInRoaXNcIiwgXCJ0aHJvd1wiLCBcInRydWVcIiwgXCJ0cnlcIiwgXCJ0eXBlXCIsIFwidHlwZW9mXCIsIFwidW5kZWZpbmVkXCIsXG4gICAgXCJ1bmlxdWVcIiwgXCJ1bmtub3duXCIsIFwidXNpbmdcIiwgXCJ2YXJcIiwgXCJ2b2lkXCIsIFwid2hpbGVcIiwgXCJ3aXRoXCIsIFwieWllbGRcIlxuICBdKVxufVxuXG5jb25zdCBwaHBJbnZhbGlkUGFyYW1ldGVyQmluZGluZ3MgPSBuZXcgU2V0KFtcbiAgXCJHTE9CQUxTXCIsIFwiX0NPT0tJRVwiLCBcIl9FTlZcIiwgXCJfRklMRVNcIiwgXCJfR0VUXCIsIFwiX1BPU1RcIiwgXCJfUkVRVUVTVFwiLCBcIl9TRVJWRVJcIiwgXCJfU0VTU0lPTlwiLCBcInRoaXNcIlxuXSlcbmNvbnN0IHBocEludmFsaWRBc3NpZ25lZEJpbmRpbmdzID0gbmV3IFNldChbXCJHTE9CQUxTXCIsIFwidGhpc1wiXSlcblxuLyoqXG4gKiBWYWxpZGF0ZXMgYW4gaWRlbnRpZmllciBhZ2FpbnN0IHRoZSB0YXJnZXQgYmFja2VuZCdzIGRlbGliZXJhdGVseSBuYXJyb3cgbGV4aWNhbCBjb250cmFjdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gbGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3Vua25vd259IG5hbWUgLSBDYW5kaWRhdGUgc2VtYW50aWMgaWRlbnRpZmllci5cbiAqIEBwYXJhbSB7c3RyaW5nfSByb2xlIC0gSWRlbnRpZmllciByb2xlIGZvciBkaWFnbm9zdGljcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU291cmNlTG9jYXRpb24gfCB1bmRlZmluZWR9IGxvY2F0aW9uIC0gT3JpZ2luYXRpbmcgbG9jYXRpb24uXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGFyZ2V0SWRlbnRpZmllcihsYW5ndWFnZSwgbmFtZSwgcm9sZSwgbG9jYXRpb24pIHtcbiAgaWYgKHR5cGVvZiBuYW1lICE9IFwic3RyaW5nXCIpIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7cm9sZX0gaWRlbnRpZmllcmAsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IHJlc2VydmVkTmFtZSA9IGxhbmd1YWdlID09IFwicGhwXCIgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOiBuYW1lXG5cbiAgaWYgKCFpZGVudGlmaWVyUGF0dGVybnNbbGFuZ3VhZ2VdLnRlc3QobmFtZSkgfHwgcmVzZXJ2ZWRXb3Jkc1tsYW5ndWFnZV0uaGFzKHJlc2VydmVkTmFtZSkpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke3JvbGV9IGlkZW50aWZpZXIgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYSBiaW5kaW5nIGlkZW50aWZpZXIgYWdhaW5zdCB0YXJnZXQgcmVzdHJpY3Rpb25zIGJleW9uZCBnZW5lcmFsIGlkZW50aWZpZXIgc3ludGF4LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBsYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gbmFtZSAtIENhbmRpZGF0ZSBzZW1hbnRpYyBpZGVudGlmaWVyLlxuICogQHBhcmFtIHtzdHJpbmd9IHJvbGUgLSBCaW5kaW5nIHJvbGUgZm9yIGRpYWdub3N0aWNzLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5Tb3VyY2VMb2NhdGlvbiB8IHVuZGVmaW5lZH0gbG9jYXRpb24gLSBPcmlnaW5hdGluZyBsb2NhdGlvbi5cbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVUYXJnZXRCaW5kaW5nSWRlbnRpZmllcihsYW5ndWFnZSwgbmFtZSwgcm9sZSwgbG9jYXRpb24pIHtcbiAgdmFsaWRhdGVUYXJnZXRJZGVudGlmaWVyKGxhbmd1YWdlLCBuYW1lLCByb2xlLCBsb2NhdGlvbilcblxuICBjb25zdCBpbnZhbGlkVHlwZVNjcmlwdEJpbmRpbmcgPSBsYW5ndWFnZSA9PSBcInR5cGVzY3JpcHRcIiAmJiAobmFtZSA9PSBcImFyZ3VtZW50c1wiIHx8IG5hbWUgPT0gXCJldmFsXCIpXG4gIGNvbnN0IGludmFsaWRQaHBWYXJpYWJsZSA9IGxhbmd1YWdlID09IFwicGhwXCIgJiYgdHlwZW9mIG5hbWUgPT0gXCJzdHJpbmdcIiAmJlxuICAgICgocm9sZSA9PSBcInBhcmFtZXRlclwiICYmIHBocEludmFsaWRQYXJhbWV0ZXJCaW5kaW5ncy5oYXMobmFtZSkpIHx8XG4gICAgICAoKHJvbGUgPT0gXCJsb2NhbFwiIHx8IHJvbGUgPT0gXCJhc3NpZ25tZW50IHRhcmdldFwiKSAmJiBwaHBJbnZhbGlkQXNzaWduZWRCaW5kaW5ncy5oYXMobmFtZSkpKVxuICBjb25zdCBpbnZhbGlkUnVieUJpbmRpbmcgPSBsYW5ndWFnZSA9PSBcInJ1YnlcIiAmJiB0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiICYmIC9eX1sxLTldJC91LnRlc3QobmFtZSlcblxuICBpZiAoaW52YWxpZFR5cGVTY3JpcHRCaW5kaW5nIHx8IGludmFsaWRQaHBWYXJpYWJsZSB8fCBpbnZhbGlkUnVieUJpbmRpbmcpIHtcbiAgICB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke3JvbGV9IGlkZW50aWZpZXIgJyR7bmFtZX0nYCwgbG9jYXRpb24pXG4gIH1cbn1cbiJdfQ==
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaWRlbnRpZmllcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYmFja2VuZHMvaWRlbnRpZmllcnMuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGtCQUFrQixDQUFBO0FBRXRELDhFQUE4RTtBQUM5RSxNQUFNLGtCQUFrQixHQUFHO0lBQ3pCLElBQUksRUFBRSw2QkFBNkI7SUFDbkMsVUFBVSxFQUFFLDZCQUE2QjtJQUN6QyxHQUFHLEVBQUUsMkJBQTJCO0lBQ2hDLE1BQU0sRUFBRSwrQ0FBK0M7SUFDdkQsSUFBSSxFQUFFLHdCQUF3QjtJQUM5QixVQUFVLEVBQUUsNkJBQTZCO0NBQzFDLENBQUE7QUFFRCxtRkFBbUY7QUFDbkYsTUFBTSxhQUFhLEdBQUc7SUFDcEIsSUFBSSxFQUFFLElBQUksR0FBRyxDQUFDO1FBQ1osR0FBRyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVO1FBQzVHLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsS0FBSztRQUM1RyxNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsS0FBSztRQUN6RyxZQUFZLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxRQUFRO1FBQ3pHLFFBQVEsRUFBRSxV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Q0FBQyxDQUFDLElBQUksSUFBSSxXQUFXLElBQUksMkJBQTJCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdELENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxJQUFJLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0YsTUFBTSxrQkFBa0IsR0FBRyxRQUFRLElBQUksTUFBTSxJQUFJLE9BQU8sSUFBSSxJQUFJLFFBQVEsSUFBSSxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO0lBRWxHLElBQUksd0JBQXdCLElBQUksa0JBQWtCLElBQUksa0JBQWtCLEVBQUUsQ0FBQztRQUN6RSxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLGdCQUFnQixJQUFJLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUMzRSxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3Vuc3VwcG9ydGVkQ2FwYWJpbGl0eX0gZnJvbSBcIi4uL2RpYWdub3N0aWMuanNcIlxuXG4vKiogQHR5cGUge1JlY29yZDxpbXBvcnQoXCIuLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlLCBSZWdFeHA+fSAqL1xuY29uc3QgaWRlbnRpZmllclBhdHRlcm5zID0ge1xuICBqYXZhOiAvXltBLVphLXpfJF1bQS1aYS16MC05XyRdKiQvdSxcbiAgamF2YXNjcmlwdDogL15bQS1aYS16XyRdW0EtWmEtejAtOV8kXSokL3UsXG4gIHBocDogL15bQS1aYS16X11bQS1aYS16MC05X10qJC91LFxuICBweXRob246IC9eKD86X3xcXHB7WElEX1N0YXJ0fSkoPzpffFxccHtYSURfQ29udGludWV9KSokL3UsXG4gIHJ1Ynk6IC9eW2Etel9dW0EtWmEtejAtOV9dKiQvdSxcbiAgdHlwZXNjcmlwdDogL15bQS1aYS16XyRdW0EtWmEtejAtOV8kXSokL3Vcbn1cblxuLyoqIEB0eXBlIHtSZWNvcmQ8aW1wb3J0KFwiLi4vc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZSwgU2V0PHN0cmluZz4+fSAqL1xuY29uc3QgcmVzZXJ2ZWRXb3JkcyA9IHtcbiAgamF2YTogbmV3IFNldChbXG4gICAgXCJfXCIsIFwiYWJzdHJhY3RcIiwgXCJhc3NlcnRcIiwgXCJib29sZWFuXCIsIFwiYnJlYWtcIiwgXCJieXRlXCIsIFwiY2FzZVwiLCBcImNhdGNoXCIsIFwiY2hhclwiLCBcImNsYXNzXCIsIFwiY29uc3RcIiwgXCJjb250aW51ZVwiLFxuICAgIFwiZGVmYXVsdFwiLCBcImRvXCIsIFwiZG91YmxlXCIsIFwiZWxzZVwiLCBcImVudW1cIiwgXCJleHBvcnRzXCIsIFwiZXh0ZW5kc1wiLCBcImZhbHNlXCIsIFwiZmluYWxcIiwgXCJmaW5hbGx5XCIsIFwiZmxvYXRcIiwgXCJmb3JcIixcbiAgICBcImdvdG9cIiwgXCJpZlwiLCBcImltcGxlbWVudHNcIiwgXCJpbXBvcnRcIiwgXCJpbnN0YW5jZW9mXCIsIFwiaW50XCIsIFwiaW50ZXJmYWNlXCIsIFwibG9uZ1wiLCBcIm1vZHVsZVwiLCBcIm5hdGl2ZVwiLCBcIm5ld1wiLFxuICAgIFwibm9uLXNlYWxlZFwiLCBcIm51bGxcIiwgXCJvcGVuXCIsIFwib3BlbnNcIiwgXCJwYWNrYWdlXCIsIFwicGVybWl0c1wiLCBcInByaXZhdGVcIiwgXCJwcm90ZWN0ZWRcIiwgXCJwcm92aWRlc1wiLCBcInB1YmxpY1wiLFxuICAgIFwicmVjb3JkXCIsIFwicmVxdWlyZXNcIiwgXCJyZXR1cm5cIiwgXCJzZWFsZWRcIiwgXCJzaG9ydFwiLCBcInN0YXRpY1wiLCBcInN0cmljdGZwXCIsIFwic3VwZXJcIiwgXCJzd2l0Y2hcIiwgXCJzeW5jaHJvbml6ZWRcIixcbiAgICBcInRoaXNcIiwgXCJ0aHJvd1wiLCBcInRocm93c1wiLCBcInRvXCIsIFwidHJhbnNpZW50XCIsIFwidHJhbnNpdGl2ZVwiLCBcInRydWVcIiwgXCJ0cnlcIiwgXCJ1c2VzXCIsIFwidmFyXCIsIFwidm9pZFwiLCBcInZvbGF0aWxlXCIsXG4gICAgXCJ3aGVuXCIsIFwid2hpbGVcIiwgXCJ3aXRoXCIsIFwieWllbGRcIlxuICBdKSxcbiAgamF2YXNjcmlwdDogbmV3IFNldChbXG4gICAgXCJhd2FpdFwiLCBcImJyZWFrXCIsIFwiY2FzZVwiLCBcImNhdGNoXCIsIFwiY2xhc3NcIiwgXCJjb25zdFwiLCBcImNvbnRpbnVlXCIsIFwiZGVidWdnZXJcIiwgXCJkZWZhdWx0XCIsIFwiZGVsZXRlXCIsIFwiZG9cIiwgXCJlbHNlXCIsXG4gICAgXCJlbnVtXCIsIFwiZXhwb3J0XCIsIFwiZXh0ZW5kc1wiLCBcImZhbHNlXCIsIFwiZmluYWxseVwiLCBcImZvclwiLCBcImZ1bmN0aW9uXCIsIFwiaWZcIiwgXCJpbXBsZW1lbnRzXCIsIFwiaW1wb3J0XCIsIFwiaW5cIixcbiAgICBcImluc3RhbmNlb2ZcIiwgXCJpbnRlcmZhY2VcIiwgXCJsZXRcIiwgXCJuZXdcIiwgXCJudWxsXCIsIFwicGFja2FnZVwiLCBcInByaXZhdGVcIiwgXCJwcm90ZWN0ZWRcIiwgXCJwdWJsaWNcIiwgXCJyZXR1cm5cIiwgXCJzdGF0aWNcIixcbiAgICBcInN1cGVyXCIsIFwic3dpdGNoXCIsIFwidGhpc1wiLCBcInRocm93XCIsIFwidHJ1ZVwiLCBcInRyeVwiLCBcInR5cGVvZlwiLCBcInZhclwiLCBcInZvaWRcIiwgXCJ3aGlsZVwiLCBcIndpdGhcIiwgXCJ5aWVsZFwiXG4gIF0pLFxuICBwaHA6IG5ldyBTZXQoW1xuICAgIFwiX19oYWx0X2NvbXBpbGVyXCIsIFwiYWJzdHJhY3RcIiwgXCJhbmRcIiwgXCJhcnJheVwiLCBcImFzXCIsIFwiYnJlYWtcIiwgXCJjYWxsYWJsZVwiLCBcImNhc2VcIiwgXCJjYXRjaFwiLCBcImNsYXNzXCIsIFwiY2xvbmVcIixcbiAgICBcImNvbnN0XCIsIFwiY29udGludWVcIiwgXCJkZWNsYXJlXCIsIFwiZGVmYXVsdFwiLCBcImRpZVwiLCBcImRvXCIsIFwiZWNob1wiLCBcImVsc2VcIiwgXCJlbHNlaWZcIiwgXCJlbXB0eVwiLCBcImVuZGRlY2xhcmVcIixcbiAgICBcImVuZGZvclwiLCBcImVuZGZvcmVhY2hcIiwgXCJlbmRpZlwiLCBcImVuZHN3aXRjaFwiLCBcImVuZHdoaWxlXCIsIFwiZW51bVwiLCBcImV2YWxcIiwgXCJleGl0XCIsIFwiZXh0ZW5kc1wiLCBcImZhbHNlXCIsIFwiZmluYWxcIixcbiAgICBcImZpbmFsbHlcIiwgXCJmblwiLCBcImZvclwiLCBcImZvcmVhY2hcIiwgXCJmcm9tXCIsIFwiZnVuY3Rpb25cIiwgXCJnbG9iYWxcIiwgXCJnb3RvXCIsIFwiaWZcIiwgXCJpbXBsZW1lbnRzXCIsIFwiaW5jbHVkZVwiLFxuICAgIFwiaW5jbHVkZV9vbmNlXCIsIFwiaW5zdGFuY2VvZlwiLCBcImluc3RlYWRvZlwiLCBcImludGVyZmFjZVwiLCBcImlzc2V0XCIsIFwiaXRlcmFibGVcIiwgXCJsaXN0XCIsIFwibWF0Y2hcIiwgXCJtaXhlZFwiLCBcIm5hbWVzcGFjZVwiLFxuICAgIFwibmV2ZXJcIiwgXCJuZXdcIiwgXCJudWxsXCIsIFwib2JqZWN0XCIsIFwib3JcIiwgXCJwYXJlbnRcIiwgXCJwcmludFwiLCBcInByaXZhdGVcIiwgXCJwcm90ZWN0ZWRcIiwgXCJwdWJsaWNcIiwgXCJyZWFkb25seVwiLCBcInJlcXVpcmVcIixcbiAgICBcInJlcXVpcmVfb25jZVwiLCBcInJldHVyblwiLCBcInNlbGZcIiwgXCJzdGF0aWNcIiwgXCJzd2l0Y2hcIiwgXCJ0aHJvd1wiLCBcInRyYWl0XCIsIFwidHJ1ZVwiLCBcInRyeVwiLCBcInVuc2V0XCIsIFwidXNlXCIsIFwidmFyXCIsXG4gICAgXCJ2b2lkXCIsIFwid2hpbGVcIiwgXCJ4b3JcIiwgXCJ5aWVsZFwiXG4gIF0pLFxuICBweXRob246IG5ldyBTZXQoW1xuICAgIFwiRmFsc2VcIiwgXCJOb25lXCIsIFwiVHJ1ZVwiLCBcImFuZFwiLCBcImFzXCIsIFwiYXNzZXJ0XCIsIFwiYXN5bmNcIiwgXCJhd2FpdFwiLCBcImJvb2xcIiwgXCJicmVha1wiLCBcImNhc2VcIiwgXCJjbGFzc1wiLFxuICAgIFwiY29udGludWVcIiwgXCJkZWZcIiwgXCJkZWxcIiwgXCJlbGlmXCIsIFwiZWxzZVwiLCBcImV4Y2VwdFwiLCBcImV4ZWNcIiwgXCJmaW5hbGx5XCIsIFwiZm9yXCIsIFwiZnJvbVwiLCBcImdsb2JhbFwiLCBcImlmXCIsXG4gICAgXCJpbXBvcnRcIiwgXCJpblwiLCBcImludFwiLCBcImlzXCIsIFwibGFtYmRhXCIsIFwibWF0Y2hcIiwgXCJub25sb2NhbFwiLCBcIm5vdFwiLCBcIm9yXCIsIFwicGFzc1wiLCBcInByaW50XCIsXG4gICAgXCJyYWlzZVwiLCBcInJldHVyblwiLCBcInN0clwiLCBcInRyeVwiLCBcInR5cGVcIiwgXCJ3aGlsZVwiLCBcIndpdGhcIiwgXCJ5aWVsZFwiLCBcIl9cIiwgXCJfX2RlYnVnX19cIlxuICBdKSxcbiAgcnVieTogbmV3IFNldChbXG4gICAgXCJCRUdJTlwiLCBcIkVORFwiLCBcIl9fRU5DT0RJTkdfX1wiLCBcIl9fRU5EX19cIiwgXCJfX0ZJTEVfX1wiLCBcIl9fTElORV9fXCIsIFwiYWxpYXNcIiwgXCJhbmRcIiwgXCJiZWdpblwiLCBcImJyZWFrXCIsIFwiY2FzZVwiLFxuICAgIFwiY2xhc3NcIiwgXCJkZWZcIiwgXCJkZWZpbmVkP1wiLCBcImRvXCIsIFwiZWxzZVwiLCBcImVsc2lmXCIsIFwiZW5kXCIsIFwiZW5zdXJlXCIsIFwiZmFsc2VcIiwgXCJmb3JcIiwgXCJpZlwiLCBcImluXCIsIFwibW9kdWxlXCIsXG4gICAgXCJuZXh0XCIsIFwibmlsXCIsIFwibm90XCIsIFwib3JcIiwgXCJyZWRvXCIsIFwicmVzY3VlXCIsIFwicmV0cnlcIiwgXCJyZXR1cm5cIiwgXCJzZWxmXCIsIFwic3VwZXJcIiwgXCJ0aGVuXCIsIFwidHJ1ZVwiLCBcInVuZGVmXCIsXG4gICAgXCJ1bmxlc3NcIiwgXCJ1bnRpbFwiLCBcIndoZW5cIiwgXCJ3aGlsZVwiLCBcInlpZWxkXCJcbiAgXSksXG4gIHR5cGVzY3JpcHQ6IG5ldyBTZXQoW1xuICAgIFwiYWJzdHJhY3RcIiwgXCJhbnlcIiwgXCJhc1wiLCBcImFzc2VydHNcIiwgXCJhc3luY1wiLCBcImF3YWl0XCIsIFwiYm9vbGVhblwiLCBcImJyZWFrXCIsIFwiY2FzZVwiLCBcImNhdGNoXCIsIFwiY2xhc3NcIiwgXCJjb25zdFwiLFxuICAgIFwiY29uc3RydWN0b3JcIiwgXCJjb250aW51ZVwiLCBcImRlYnVnZ2VyXCIsIFwiZGVjbGFyZVwiLCBcImRlZmF1bHRcIiwgXCJkZWxldGVcIiwgXCJkb1wiLCBcImVsc2VcIiwgXCJlbnVtXCIsIFwiZXhwb3J0XCIsIFwiZXh0ZW5kc1wiLFxuICAgIFwiZmFsc2VcIiwgXCJmaW5hbGx5XCIsIFwiZm9yXCIsIFwiZnJvbVwiLCBcImZ1bmN0aW9uXCIsIFwiZ2V0XCIsIFwiaWZcIiwgXCJpbXBsZW1lbnRzXCIsIFwiaW1wb3J0XCIsIFwiaW5cIiwgXCJpbmZlclwiLCBcImluc3RhbmNlb2ZcIixcbiAgICBcImludGVyZmFjZVwiLCBcImlzXCIsIFwia2V5b2ZcIiwgXCJsZXRcIiwgXCJtb2R1bGVcIiwgXCJuYW1lc3BhY2VcIiwgXCJuZXZlclwiLCBcIm5ld1wiLCBcIm51bGxcIiwgXCJudW1iZXJcIiwgXCJvYmplY3RcIiwgXCJvZlwiLFxuICAgIFwib3ZlcnJpZGVcIiwgXCJwYWNrYWdlXCIsIFwicHJpdmF0ZVwiLCBcInByb3RlY3RlZFwiLCBcInB1YmxpY1wiLCBcInJlYWRvbmx5XCIsIFwicmVxdWlyZVwiLCBcInJldHVyblwiLCBcInNhdGlzZmllc1wiLCBcInNldFwiLFxuICAgIFwic3RhdGljXCIsIFwic3RyaW5nXCIsIFwic3VwZXJcIiwgXCJzd2l0Y2hcIiwgXCJzeW1ib2xcIiwgXCJ0aGlzXCIsIFwidGhyb3dcIiwgXCJ0cnVlXCIsIFwidHJ5XCIsIFwidHlwZVwiLCBcInR5cGVvZlwiLCBcInVuZGVmaW5lZFwiLFxuICAgIFwidW5pcXVlXCIsIFwidW5rbm93blwiLCBcInVzaW5nXCIsIFwidmFyXCIsIFwidm9pZFwiLCBcIndoaWxlXCIsIFwid2l0aFwiLCBcInlpZWxkXCJcbiAgXSlcbn1cblxuY29uc3QgcGhwSW52YWxpZFBhcmFtZXRlckJpbmRpbmdzID0gbmV3IFNldChbXG4gIFwiR0xPQkFMU1wiLCBcIl9DT09LSUVcIiwgXCJfRU5WXCIsIFwiX0ZJTEVTXCIsIFwiX0dFVFwiLCBcIl9QT1NUXCIsIFwiX1JFUVVFU1RcIiwgXCJfU0VSVkVSXCIsIFwiX1NFU1NJT05cIiwgXCJ0aGlzXCJcbl0pXG5jb25zdCBwaHBJbnZhbGlkQXNzaWduZWRCaW5kaW5ncyA9IG5ldyBTZXQoW1wiR0xPQkFMU1wiLCBcInRoaXNcIl0pXG5cbi8qKlxuICogVmFsaWRhdGVzIGFuIGlkZW50aWZpZXIgYWdhaW5zdCB0aGUgdGFyZ2V0IGJhY2tlbmQncyBkZWxpYmVyYXRlbHkgbmFycm93IGxleGljYWwgY29udHJhY3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHt1bmtub3dufSBuYW1lIC0gQ2FuZGlkYXRlIHNlbWFudGljIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9sZSAtIElkZW50aWZpZXIgcm9sZSBmb3IgZGlhZ25vc3RpY3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIE9yaWdpbmF0aW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIG5hbWUsIHJvbGUsIGxvY2F0aW9uKSB7XG4gIGlmICh0eXBlb2YgbmFtZSAhPSBcInN0cmluZ1wiKSB1bnN1cHBvcnRlZENhcGFiaWxpdHkobGFuZ3VhZ2UsIGAke3JvbGV9IGlkZW50aWZpZXJgLCBsb2NhdGlvbilcblxuICBjb25zdCByZXNlcnZlZE5hbWUgPSBsYW5ndWFnZSA9PSBcInBocFwiID8gbmFtZS50b0xvd2VyQ2FzZSgpIDogbmFtZVxuXG4gIGlmICghaWRlbnRpZmllclBhdHRlcm5zW2xhbmd1YWdlXS50ZXN0KG5hbWUpIHx8IHJlc2VydmVkV29yZHNbbGFuZ3VhZ2VdLmhhcyhyZXNlcnZlZE5hbWUpIHx8XG4gICAgbGFuZ3VhZ2UgPT0gXCJweXRob25cIiAmJiBuYW1lLm5vcm1hbGl6ZShcIk5GS0NcIikgIT0gbmFtZSkge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7cm9sZX0gaWRlbnRpZmllciAnJHtuYW1lfSdgLCBsb2NhdGlvbilcbiAgfVxufVxuXG4vKipcbiAqIFZhbGlkYXRlcyBhIGJpbmRpbmcgaWRlbnRpZmllciBhZ2FpbnN0IHRhcmdldCByZXN0cmljdGlvbnMgYmV5b25kIGdlbmVyYWwgaWRlbnRpZmllciBzeW50YXguXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHt1bmtub3dufSBuYW1lIC0gQ2FuZGlkYXRlIHNlbWFudGljIGlkZW50aWZpZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gcm9sZSAtIEJpbmRpbmcgcm9sZSBmb3IgZGlhZ25vc3RpY3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4uL3NlbWFudGljL3R5cGVzLmpzXCIpLlNvdXJjZUxvY2F0aW9uIHwgdW5kZWZpbmVkfSBsb2NhdGlvbiAtIE9yaWdpbmF0aW5nIGxvY2F0aW9uLlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRhcmdldEJpbmRpbmdJZGVudGlmaWVyKGxhbmd1YWdlLCBuYW1lLCByb2xlLCBsb2NhdGlvbikge1xuICB2YWxpZGF0ZVRhcmdldElkZW50aWZpZXIobGFuZ3VhZ2UsIG5hbWUsIHJvbGUsIGxvY2F0aW9uKVxuXG4gIGNvbnN0IGludmFsaWRUeXBlU2NyaXB0QmluZGluZyA9IGxhbmd1YWdlID09IFwidHlwZXNjcmlwdFwiICYmIChuYW1lID09IFwiYXJndW1lbnRzXCIgfHwgbmFtZSA9PSBcImV2YWxcIilcbiAgY29uc3QgaW52YWxpZFBocFZhcmlhYmxlID0gbGFuZ3VhZ2UgPT0gXCJwaHBcIiAmJiB0eXBlb2YgbmFtZSA9PSBcInN0cmluZ1wiICYmXG4gICAgKChyb2xlID09IFwicGFyYW1ldGVyXCIgJiYgcGhwSW52YWxpZFBhcmFtZXRlckJpbmRpbmdzLmhhcyhuYW1lKSkgfHxcbiAgICAgICgocm9sZSA9PSBcImxvY2FsXCIgfHwgcm9sZSA9PSBcImFzc2lnbm1lbnQgdGFyZ2V0XCIpICYmIHBocEludmFsaWRBc3NpZ25lZEJpbmRpbmdzLmhhcyhuYW1lKSkpXG4gIGNvbnN0IGludmFsaWRSdWJ5QmluZGluZyA9IGxhbmd1YWdlID09IFwicnVieVwiICYmIHR5cGVvZiBuYW1lID09IFwic3RyaW5nXCIgJiYgL15fWzEtOV0kL3UudGVzdChuYW1lKVxuXG4gIGlmIChpbnZhbGlkVHlwZVNjcmlwdEJpbmRpbmcgfHwgaW52YWxpZFBocFZhcmlhYmxlIHx8IGludmFsaWRSdWJ5QmluZGluZykge1xuICAgIHVuc3VwcG9ydGVkQ2FwYWJpbGl0eShsYW5ndWFnZSwgYCR7cm9sZX0gaWRlbnRpZmllciAnJHtuYW1lfSdgLCBsb2NhdGlvbilcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/index.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/backends/index.js"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,EAAC,QAAQ,EAAE,MAAM,EAAC,EAJ9C;IAA+D,QAAQ,EAA/D,OAAO,sBAAsB,EAAE,gBAAgB,CACvD;IAA6D,MAAM,EAA3D,OAAO,sBAAsB,EAAE,cAAc,CACrD;CAE8C,GAFpC,MAAM,CAIlB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,EAAC,QAAQ,EAAE,QAAQ,EAAE,YAAqB,EAAE,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAC,EARnH;IAA+D,QAAQ,EAA/D,OAAO,sBAAsB,EAAE,gBAAgB,CACvD;IAA6D,MAAM,EAA3D,OAAO,sBAAsB,EAAE,cAAc,CACrD;IAAuB,QAAQ,AAA/B,CACA,EADQ,MAAM,CACd;IAA+C,YAAY,AAA3D,CACA,EADQ,MAAM,GAAG,UAAU,GAAG,QAAQ,CACtC;IAAuB,iBAAiB,AAAxC,CACA,EADQ,MAAM,CACd;IAAkH,OAAO,AAAzH,CACA,EADQ;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,OAAO,sBAAsB,EAAE,gBAAgB,CAAA;KAAC,EAAE,CACzG;CAEmH,GAFzG,OAAO,sBAAsB,EAAE,iBAAiB,CAsD5D"}
|