occam-verify-cli 1.0.708 → 1.0.713

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.
Files changed (49) hide show
  1. package/lib/element/assertion/property.js +8 -5
  2. package/lib/element/assertion/satisfies.js +7 -3
  3. package/lib/element/combinator.js +20 -20
  4. package/lib/element/conclusion.js +8 -8
  5. package/lib/element/constructor.js +21 -21
  6. package/lib/element/declaration/combinator.js +10 -10
  7. package/lib/element/declaration/constructor.js +10 -10
  8. package/lib/element/deduction.js +8 -8
  9. package/lib/element/frame.js +19 -7
  10. package/lib/element/metavariable.js +1 -1
  11. package/lib/element/proofAssertion/premise.js +29 -24
  12. package/lib/element/proofAssertion/step.js +13 -12
  13. package/lib/element/proofAssertion/supposition.js +30 -25
  14. package/lib/element/reference.js +3 -6
  15. package/lib/element/rule.js +2 -2
  16. package/lib/element/signature.js +7 -7
  17. package/lib/element/statement.js +5 -3
  18. package/lib/element/term.js +8 -9
  19. package/lib/pass/zip.js +23 -0
  20. package/lib/process/unify.js +11 -21
  21. package/lib/process/validate.js +116 -2
  22. package/lib/process/verify.js +6 -125
  23. package/lib/utilities/context.js +1 -9
  24. package/lib/utilities/validation.js +6 -6
  25. package/package.json +1 -1
  26. package/src/element/assertion/property.js +8 -4
  27. package/src/element/assertion/satisfies.js +8 -2
  28. package/src/element/combinator.js +19 -19
  29. package/src/element/conclusion.js +8 -8
  30. package/src/element/constructor.js +21 -20
  31. package/src/element/declaration/combinator.js +9 -9
  32. package/src/element/declaration/constructor.js +9 -9
  33. package/src/element/deduction.js +8 -8
  34. package/src/element/frame.js +26 -7
  35. package/src/element/metavariable.js +0 -1
  36. package/src/element/proofAssertion/premise.js +43 -33
  37. package/src/element/proofAssertion/step.js +15 -13
  38. package/src/element/proofAssertion/supposition.js +44 -34
  39. package/src/element/reference.js +5 -9
  40. package/src/element/rule.js +1 -1
  41. package/src/element/signature.js +6 -6
  42. package/src/element/statement.js +4 -2
  43. package/src/element/term.js +9 -10
  44. package/src/pass/zip.js +19 -0
  45. package/src/process/unify.js +4 -34
  46. package/src/process/validate.js +161 -1
  47. package/src/process/verify.js +2 -166
  48. package/src/utilities/context.js +0 -9
  49. package/src/utilities/validation.js +5 -5
@@ -2,27 +2,16 @@
2
2
  Object.defineProperty(exports, "__esModule", {
3
3
  value: true
4
4
  });
5
- function _export(target, all) {
6
- for(var name in all)Object.defineProperty(target, name, {
7
- enumerable: true,
8
- get: Object.getOwnPropertyDescriptor(all, name).get
9
- });
10
- }
11
- _export(exports, {
12
- get verifyFile () {
5
+ Object.defineProperty(exports, "verifyFile", {
6
+ enumerable: true,
7
+ get: function() {
13
8
  return verifyFile;
14
- },
15
- get verifyStatementAsCombinator () {
16
- return verifyStatementAsCombinator;
17
- },
18
- get verifyTermAsConstructor () {
19
- return verifyTermAsConstructor;
20
9
  }
21
10
  });
22
11
  const _occamlanguages = require("occam-languages");
23
12
  const _element = require("../utilities/element");
24
13
  const { nodeQuery } = _occamlanguages.queryUtilities;
25
- const ruleNodeQuery = nodeQuery("/rule"), termNodeQuery = nodeQuery("/term"), typeNodeQuery = nodeQuery("/type"), errorNodeQuery = nodeQuery("/error"), axiomNodeQuery = nodeQuery("/axiom"), lemmaNodeQuery = nodeQuery("/lemma"), sectionNodeQuery = nodeQuery("/section"), theoremNodeQuery = nodeQuery("/theorem"), metaLemmaNodeQuery = nodeQuery("/metaLemma"), statementNodeQuery = nodeQuery("/statement"), conjectureNodeQuery = nodeQuery("/conjecture"), metatheoremNodeQuery = nodeQuery("/metatheorem"), variableDeclarationNodeQuery = nodeQuery("/variableDeclaration"), combinatorDeclarationNodeQuery = nodeQuery("/combinatorDeclaration"), simpleTypeDeclarationNodeQuery = nodeQuery("/simpleTypeDeclaration"), typePrefixDeclarationNodeQuery = nodeQuery("/typePrefixDeclaration"), constructorDeclarationNodeQuery = nodeQuery("/constructorDeclaration"), complexTypeDeclarationNodeQuery = nodeQuery("/complexTypeDeclaration"), metavariableDeclarationNodeQuery = nodeQuery("/metavariableDeclaration");
14
+ const ruleNodeQuery = nodeQuery("/rule"), errorNodeQuery = nodeQuery("/error"), axiomNodeQuery = nodeQuery("/axiom"), lemmaNodeQuery = nodeQuery("/lemma"), sectionNodeQuery = nodeQuery("/section"), theoremNodeQuery = nodeQuery("/theorem"), metaLemmaNodeQuery = nodeQuery("/metaLemma"), conjectureNodeQuery = nodeQuery("/conjecture"), metatheoremNodeQuery = nodeQuery("/metatheorem"), variableDeclarationNodeQuery = nodeQuery("/variableDeclaration"), combinatorDeclarationNodeQuery = nodeQuery("/combinatorDeclaration"), simpleTypeDeclarationNodeQuery = nodeQuery("/simpleTypeDeclaration"), typePrefixDeclarationNodeQuery = nodeQuery("/typePrefixDeclaration"), constructorDeclarationNodeQuery = nodeQuery("/constructorDeclaration"), complexTypeDeclarationNodeQuery = nodeQuery("/complexTypeDeclaration"), metavariableDeclarationNodeQuery = nodeQuery("/metavariableDeclaration");
26
15
  class TopLevelPass extends _occamlanguages.AsyncPass {
27
16
  static maps = [
28
17
  {
@@ -203,99 +192,7 @@ class TopLevelPass extends _occamlanguages.AsyncPass {
203
192
  }
204
193
  ];
205
194
  }
206
- class ConbinatorPass extends _occamlanguages.SimplePass {
207
- run(statementNode, context) {
208
- let success = false;
209
- const nonTerminalNode = statementNode, childNodes = nonTerminalNode.getChildNodes(), descended = this.descend(childNodes, context);
210
- if (descended) {
211
- success = true;
212
- }
213
- return success;
214
- }
215
- static maps = [
216
- {
217
- nodeQuery: statementNodeQuery,
218
- run: (statementNode, context)=>{
219
- let success = false;
220
- let statement;
221
- const stated = true;
222
- statement = (0, _element.statementFromStatementNode)(statementNode, context);
223
- statement = statement.validate(stated, context);
224
- if (statement !== null) {
225
- success = true;
226
- }
227
- return success;
228
- }
229
- },
230
- {
231
- nodeQuery: termNodeQuery,
232
- run: (termNode, context)=>{
233
- let success = false;
234
- let term;
235
- term = (0, _element.termFromTermNode)(termNode, context);
236
- term = term.validate(context, ()=>{
237
- const validatesForwards = true;
238
- return validatesForwards;
239
- });
240
- if (term !== null) {
241
- success = true;
242
- }
243
- return success;
244
- }
245
- },
246
- {
247
- nodeQuery: typeNodeQuery,
248
- run: (typeNode, context)=>{
249
- let success = false;
250
- const nominalTypeName = typeNode.getNominalTypeName(), typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
251
- if (typePresent) {
252
- success = true;
253
- }
254
- return success;
255
- }
256
- }
257
- ];
258
- }
259
- class ConstructorPass extends _occamlanguages.SimplePass {
260
- run(termNode, context) {
261
- let success = false;
262
- const nonTerminalNode = termNode, childNodes = nonTerminalNode.getChildNodes(), descended = this.descend(childNodes, context);
263
- if (descended) {
264
- success = true;
265
- }
266
- return success;
267
- }
268
- static maps = [
269
- {
270
- nodeQuery: termNodeQuery,
271
- run: (termNode, context)=>{
272
- let success = false;
273
- let term;
274
- term = (0, _element.termFromTermNode)(termNode, context);
275
- term = term.validate(context, ()=>{
276
- const validatesForwards = true;
277
- return validatesForwards;
278
- });
279
- if (term !== null) {
280
- success = true;
281
- }
282
- return success;
283
- }
284
- },
285
- {
286
- nodeQuery: typeNodeQuery,
287
- run: (typeNode, context)=>{
288
- let success = false;
289
- const nominalTypeName = typeNode.getNominalTypeName(), typePresent = context.isTypePresentByNominalTypeName(nominalTypeName);
290
- if (typePresent) {
291
- success = true;
292
- }
293
- return success;
294
- }
295
- }
296
- ];
297
- }
298
- const topLevelPass = new TopLevelPass(), combinatorPass = new ConbinatorPass(), constructorPass = new ConstructorPass();
195
+ const topLevelPass = new TopLevelPass();
299
196
  async function verifyFile(fileNode, context) {
300
197
  let fileVerifies = false;
301
198
  const node = fileNode, sucess = await topLevelPass.run(node, context);
@@ -304,21 +201,5 @@ async function verifyFile(fileNode, context) {
304
201
  }
305
202
  return fileVerifies;
306
203
  }
307
- function verifyTermAsConstructor(term, context) {
308
- let termVerifiesAsConstructor = false;
309
- const termNode = term.getNode(), success = constructorPass.run(termNode, context);
310
- if (success) {
311
- termVerifiesAsConstructor = true;
312
- }
313
- return termVerifiesAsConstructor;
314
- }
315
- function verifyStatementAsCombinator(statement, context) {
316
- let statementVerifiesAsCombinator = false;
317
- const statementNode = statement.getNode(), success = combinatorPass.run(statementNode, context);
318
- if (success) {
319
- statementVerifiesAsCombinator = true;
320
- }
321
- return statementVerifiesAsCombinator;
322
- }
323
204
 
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZlcmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQXN5bmNQYXNzLCBTaW1wbGVQYXNzLCBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIlxuXG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvZWxlbWVudFwiO1xuaW1wb3J0IHsgcnVsZUZyb21SdWxlTm9kZSxcbiAgICAgICAgIGVycm9yRnJvbUVycm9yTm9kZSxcbiAgICAgICAgIGF4aW9tRnJvbUF4aW9tTm9kZSxcbiAgICAgICAgIGxlbW1hRnJvbUxlbW1hTm9kZSxcbiAgICAgICAgIHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUsXG4gICAgICAgICB0aGVvcmVtRnJvbVRoZW9yZW1Ob2RlLFxuICAgICAgICAgbWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUsXG4gICAgICAgICBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlLFxuICAgICAgICAgbWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlLFxuICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSxcbiAgICAgICAgIHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLFxuICAgICAgICAgdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsXG4gICAgICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSxcbiAgICAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsXG4gICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uRnJvbUNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLFxuICAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgcnVsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9ydWxlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgZXJyb3JOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZXJyb3JcIiksXG4gICAgICBheGlvbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9heGlvbVwiKSxcbiAgICAgIGxlbW1hTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2xlbW1hXCIpLFxuICAgICAgc2VjdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zZWN0aW9uXCIpLFxuICAgICAgdGhlb3JlbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90aGVvcmVtXCIpLFxuICAgICAgbWV0YUxlbW1hTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFMZW1tYVwiKSxcbiAgICAgIHN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnRcIiksXG4gICAgICBjb25qZWN0dXJlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2NvbmplY3R1cmVcIiksXG4gICAgICBtZXRhdGhlb3JlbU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhdGhlb3JlbVwiKSxcbiAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvdmFyaWFibGVEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9jb21iaW5hdG9yRGVjbGFyYXRpb25cIiksXG4gICAgICBzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc2ltcGxlVHlwZURlY2xhcmF0aW9uXCIpLFxuICAgICAgdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3R5cGVQcmVmaXhEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvY29uc3RydWN0b3JEZWNsYXJhdGlvblwiKSxcbiAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvY29tcGxleFR5cGVEZWNsYXJhdGlvblwiKSxcbiAgICAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGF2YXJpYWJsZURlY2xhcmF0aW9uXCIpO1xuXG5jbGFzcyBUb3BMZXZlbFBhc3MgZXh0ZW5kcyBBc3luY1Bhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGVycm9yTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoZXJyb3JOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgZXJyb3IgPSBlcnJvckZyb21FcnJvck5vZGUoZXJyb3JOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgZXJyb3JWZXJpZmllcyA9IGF3YWl0IGVycm9yLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChlcnJvclZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogcnVsZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKHJ1bGVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgcnVsZSA9IHJ1bGVGcm9tUnVsZU5vZGUocnVsZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBydWxlVmVyaWZpZXMgPSBhd2FpdCBydWxlLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChydWxlVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBheGlvbU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGF4aW9tTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGF4aW9tID0gYXhpb21Gcm9tQXhpb21Ob2RlKGF4aW9tTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGF4aW9tVmVyaWZpZXMgPSBhd2FpdCBheGlvbS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoYXhpb21WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGxlbW1hTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAobGVtbWFOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGVtbWEgPSBsZW1tYUZyb21MZW1tYU5vZGUobGVtbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbGVtbWFWZXJpZmllcyA9IGF3YWl0IGxlbW1hLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChsZW1tYVZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogc2VjdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgc2VjdGlvbiA9IHNlY3Rpb25Gcm9tU2VjdGlvbk5vZGUoc2VjdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzZWN0aW9uVmVyaWZpZXMgPSBhd2FpdCBzZWN0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChzZWN0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0aGVvcmVtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAodGhlb3JlbU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB0aGVvcmVtID0gdGhlb3JlbUZyb21UaGVvcmVtTm9kZSh0aGVvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHRoZW9yZW1WZXJpZmllcyA9IGF3YWl0IHRoZW9yZW0udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKHRoZW9yZW1WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IG1ldGFMZW1tYU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKG1ldGFMZW1tYU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBtZXRhTGVtbWEgPSBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZShtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbWV0YUxlbW1hVmVyaWZpZXMgPSBhd2FpdCBtZXRhTGVtbWEudmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKG1ldGFMZW1tYVZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogY29uamVjdHVyZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY29uamVjdHVyZSA9IGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUoY29uamVjdHVyZU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb25qZWN0dXJlVmVyaWZpZXMgPSBhd2FpdCBjb25qZWN0dXJlLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChjb25qZWN0dXJlVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBtZXRhdGhlb3JlbU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKG1ldGF0aGVvcmVtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1ldGF0aGVvcmVtID0gbWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlKG1ldGF0aGVvcmVtTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG1ldGF0aGVvcmVtVmVyaWZpZXMgPSBhd2FpdCBtZXRhdGhlb3JlbS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAobWV0YXRoZW9yZW1WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jICh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHZhcmlhYmxlRGVjbGFyYXRpb24gPSB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKHZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgdmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzID0gYXdhaXQgdmFyaWFibGVEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAodmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbiA9IHNpbXBsZVR5cGVEZWNsYXJhdGlvbkZyb21TaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzaW1wbGVUeXBlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IHNpbXBsZVR5cGVEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoc2ltcGxlVHlwZURlY2xhcmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jICh0eXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdHlwZVByZWZpeERlY2xhcmF0aW9uID0gdHlwZVByZWZpeERlY2xhcmF0aW9uRnJvbVR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHR5cGVQcmVmaXhEZWNsYXJhdGlvblZlcmlmaWVzID0gYXdhaXQgdHlwZVByZWZpeERlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlZml4RGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBjb21iaW5hdG9yRGVjbGFyYXRpb24gPSBjb21iaW5hdG9yRGVjbGFyYXRpb25Gcm9tQ29tYmluYXRvckRlY2xhcmF0aW9uTm9kZShjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgY29tYmluYXRvckRlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBjb21iaW5hdG9yRGVjbGFyYXRpb24udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKGNvbWJpbmF0b3JEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY29uc3RydWN0b3JEZWNsYXJhdGlvbiA9IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Gcm9tQ29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUoY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBjb21wbGV4VHlwZURlY2xhcmF0aW9uID0gY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZShjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IGNvbXBsZXhUeXBlRGVjbGFyYXRpb24udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb24gPSBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChtZXRhdmFyaWFibGVEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbmJpbmF0b3JQYXNzIGV4dGVuZHMgU2ltcGxlUGFzcyB7XG4gIHJ1bihzdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSwgLy8vXG4gICAgICAgICAgZGVzY2VuZGVkID0gdGhpcy5kZXNjZW5kKGNoaWxkTm9kZXMsIGNvbnRleHQpO1xuXG4gICAgaWYgKGRlc2NlbmRlZCkge1xuICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1Y2Nlc3M7XG4gIH1cblxuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHN0YXRlbWVudE5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgc3RhdGVtZW50O1xuXG4gICAgICAgIGNvbnN0IHN0YXRlZCA9IHRydWU7XG5cbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50LnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46ICh0ZXJtTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGxldCB0ZXJtO1xuXG4gICAgICAgIHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICB0ZXJtID0gdGVybS52YWxpZGF0ZShjb250ZXh0LCAoKSA9PiB7IC8vL1xuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlc0ZvcndhcmRzID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiB2YWxpZGF0ZXNGb3J3YXJkcztcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodHlwZU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgdHlwZVByZXNlbnQgPSBjb250ZXh0LmlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGlmICh0eXBlUHJlc2VudCkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBTaW1wbGVQYXNzIHtcbiAgcnVuKHRlcm1Ob2RlLCBjb250ZXh0KSB7XG4gICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IHRlcm1Ob2RlLCAgLy8vXG4gICAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksIC8vL1xuICAgICAgICAgIGRlc2NlbmRlZCA9IHRoaXMuZGVzY2VuZChjaGlsZE5vZGVzLCBjb250ZXh0KTtcblxuICAgIGlmIChkZXNjZW5kZWQpIHtcbiAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBzdWNjZXNzO1xuICB9XG5cbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAodGVybU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBsZXQgdGVybTtcblxuICAgICAgICB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybSA9IHRlcm0udmFsaWRhdGUoY29udGV4dCwgKCkgPT4geyAvLy9cbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHRydWU7XG5cbiAgICAgICAgICByZXR1cm4gdmFsaWRhdGVzRm9yd2FyZHM7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKHR5cGVOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3Qgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIHR5cGVQcmVzZW50ID0gY29udGV4dC5pc1R5cGVQcmVzZW50QnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZVByZXNlbnQpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY29uc3QgdG9wTGV2ZWxQYXNzID0gbmV3IFRvcExldmVsUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29uYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZlcmlmeUZpbGUoZmlsZU5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IGZpbGVWZXJpZmllcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGUgPSBmaWxlTm9kZSwgLy8vXG4gICAgICAgIHN1Y2VzcyA9IGF3YWl0IHRvcExldmVsUGFzcy5ydW4obm9kZSwgY29udGV4dCk7XG5cbiAgaWYgKHN1Y2Vzcykge1xuICAgIGZpbGVWZXJpZmllcyA9IHRydWU7XG4gIH1cblxuICByZXR1cm4gZmlsZVZlcmlmaWVzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmVyaWZ5VGVybUFzQ29uc3RydWN0b3IodGVybSwgY29udGV4dCkge1xuICBsZXQgdGVybVZlcmlmaWVzQXNDb25zdHJ1Y3RvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHN1Y2Nlc3MgPSBjb25zdHJ1Y3RvclBhc3MucnVuKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICBpZiAoc3VjY2Vzcykge1xuICAgIHRlcm1WZXJpZmllc0FzQ29uc3RydWN0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHRlcm1WZXJpZmllc0FzQ29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB2ZXJpZnlTdGF0ZW1lbnRBc0NvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWZXJpZmllc0FzQ29tYmluYXRvciA9IGZhbHNlO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzdWNjZXNzID0gY29tYmluYXRvclBhc3MucnVuKHN0YXRlbWVudE5vZGUsIGNvbnRleHQpO1xuXG4gIGlmIChzdWNjZXNzKSB7XG4gICAgc3RhdGVtZW50VmVyaWZpZXNBc0NvbWJpbmF0b3IgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZlcmlmaWVzQXNDb21iaW5hdG9yO1xufVxuIl0sIm5hbWVzIjpbInZlcmlmeUZpbGUiLCJ2ZXJpZnlTdGF0ZW1lbnRBc0NvbWJpbmF0b3IiLCJ2ZXJpZnlUZXJtQXNDb25zdHJ1Y3RvciIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwicnVsZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJ0eXBlTm9kZVF1ZXJ5IiwiZXJyb3JOb2RlUXVlcnkiLCJheGlvbU5vZGVRdWVyeSIsImxlbW1hTm9kZVF1ZXJ5Iiwic2VjdGlvbk5vZGVRdWVyeSIsInRoZW9yZW1Ob2RlUXVlcnkiLCJtZXRhTGVtbWFOb2RlUXVlcnkiLCJzdGF0ZW1lbnROb2RlUXVlcnkiLCJjb25qZWN0dXJlTm9kZVF1ZXJ5IiwibWV0YXRoZW9yZW1Ob2RlUXVlcnkiLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZVF1ZXJ5Iiwic2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGVRdWVyeSIsIlRvcExldmVsUGFzcyIsIkFzeW5jUGFzcyIsIm1hcHMiLCJydW4iLCJlcnJvck5vZGUiLCJjb250ZXh0Iiwic3VjY2VzcyIsImVycm9yIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZXJyb3JWZXJpZmllcyIsInZlcmlmeSIsInJ1bGVOb2RlIiwicnVsZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJydWxlVmVyaWZpZXMiLCJheGlvbU5vZGUiLCJheGlvbSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tVmVyaWZpZXMiLCJsZW1tYU5vZGUiLCJsZW1tYSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hVmVyaWZpZXMiLCJzZWN0aW9uTm9kZSIsInNlY3Rpb24iLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2VjdGlvblZlcmlmaWVzIiwidGhlb3JlbU5vZGUiLCJ0aGVvcmVtIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInRoZW9yZW1WZXJpZmllcyIsIm1ldGFMZW1tYU5vZGUiLCJtZXRhTGVtbWEiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZW1tYVZlcmlmaWVzIiwiY29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVWZXJpZmllcyIsIm1ldGF0aGVvcmVtTm9kZSIsIm1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXRoZW9yZW1WZXJpZmllcyIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uVmVyaWZpZXMiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25WZXJpZmllcyIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvblZlcmlmaWVzIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uVmVyaWZpZXMiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvblZlcmlmaWVzIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcyIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyIsIkNvbmJpbmF0b3JQYXNzIiwiU2ltcGxlUGFzcyIsInN0YXRlbWVudE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJjaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsImRlc2NlbmRlZCIsImRlc2NlbmQiLCJzdGF0ZW1lbnQiLCJzdGF0ZWQiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInZhbGlkYXRlIiwidGVybU5vZGUiLCJ0ZXJtIiwidGVybUZyb21UZXJtTm9kZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwidHlwZU5vZGUiLCJub21pbmFsVHlwZU5hbWUiLCJnZXROb21pbmFsVHlwZU5hbWUiLCJ0eXBlUHJlc2VudCIsImlzVHlwZVByZXNlbnRCeU5vbWluYWxUeXBlTmFtZSIsIkNvbnN0cnVjdG9yUGFzcyIsInRvcExldmVsUGFzcyIsImNvbWJpbmF0b3JQYXNzIiwiY29uc3RydWN0b3JQYXNzIiwiZmlsZU5vZGUiLCJmaWxlVmVyaWZpZXMiLCJub2RlIiwic3VjZXNzIiwidGVybVZlcmlmaWVzQXNDb25zdHJ1Y3RvciIsImdldE5vZGUiLCJzdGF0ZW1lbnRWZXJpZmllc0FzQ29tYmluYXRvciJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBeWFzQkE7ZUFBQUE7O1FBMEJOQztlQUFBQTs7UUFiQUM7ZUFBQUE7OztnQ0FwYnNDO3lCQUVPO0FBa0I3RCxNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHQyw4QkFBYztBQUVwQyxNQUFNQyxnQkFBZ0JGLFVBQVUsVUFDMUJHLGdCQUFnQkgsVUFBVSxVQUMxQkksZ0JBQWdCSixVQUFVLFVBQzFCSyxpQkFBaUJMLFVBQVUsV0FDM0JNLGlCQUFpQk4sVUFBVSxXQUMzQk8saUJBQWlCUCxVQUFVLFdBQzNCUSxtQkFBbUJSLFVBQVUsYUFDN0JTLG1CQUFtQlQsVUFBVSxhQUM3QlUscUJBQXFCVixVQUFVLGVBQy9CVyxxQkFBcUJYLFVBQVUsZUFDL0JZLHNCQUFzQlosVUFBVSxnQkFDaENhLHVCQUF1QmIsVUFBVSxpQkFDakNjLCtCQUErQmQsVUFBVSx5QkFDekNlLGlDQUFpQ2YsVUFBVSwyQkFDM0NnQixpQ0FBaUNoQixVQUFVLDJCQUMzQ2lCLGlDQUFpQ2pCLFVBQVUsMkJBQzNDa0Isa0NBQWtDbEIsVUFBVSw0QkFDNUNtQixrQ0FBa0NuQixVQUFVLDRCQUM1Q29CLG1DQUFtQ3BCLFVBQVU7QUFFbkQsTUFBTXFCLHFCQUFxQkMseUJBQVM7SUFDbEMsT0FBT0MsT0FBTztRQUNa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
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZlcmlmeS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgQXN5bmNQYXNzLCBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIlxuXG5pbXBvcnQgeyBydWxlRnJvbVJ1bGVOb2RlLFxuICAgICAgICAgZXJyb3JGcm9tRXJyb3JOb2RlLFxuICAgICAgICAgYXhpb21Gcm9tQXhpb21Ob2RlLFxuICAgICAgICAgbGVtbWFGcm9tTGVtbWFOb2RlLFxuICAgICAgICAgc2VjdGlvbkZyb21TZWN0aW9uTm9kZSxcbiAgICAgICAgIHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUsXG4gICAgICAgICBtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSxcbiAgICAgICAgIGNvbmplY3R1cmVGcm9tQ29uamVjdHVyZU5vZGUsXG4gICAgICAgICBtZXRhdGhlb3JlbUZyb21NZXRhdGhlb3JlbU5vZGUsXG4gICAgICAgICB2YXJpYWJsZURlY2xhcmF0aW9uRnJvbVZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlLFxuICAgICAgICAgc2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsXG4gICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSxcbiAgICAgICAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLFxuICAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvbkZyb21Db25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSxcbiAgICAgICAgIGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsXG4gICAgICAgICBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbkZyb21NZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGUgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2VsZW1lbnRcIjtcblxuY29uc3QgeyBub2RlUXVlcnkgfSA9IHF1ZXJ5VXRpbGl0aWVzO1xuXG5jb25zdCBydWxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3J1bGVcIiksXG4gICAgICBlcnJvck5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9lcnJvclwiKSxcbiAgICAgIGF4aW9tTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2F4aW9tXCIpLFxuICAgICAgbGVtbWFOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbGVtbWFcIiksXG4gICAgICBzZWN0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3NlY3Rpb25cIiksXG4gICAgICB0aGVvcmVtTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3RoZW9yZW1cIiksXG4gICAgICBtZXRhTGVtbWFOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YUxlbW1hXCIpLFxuICAgICAgY29uamVjdHVyZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9jb25qZWN0dXJlXCIpLFxuICAgICAgbWV0YXRoZW9yZW1Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXRoZW9yZW1cIiksXG4gICAgICB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3ZhcmlhYmxlRGVjbGFyYXRpb25cIiksXG4gICAgICBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvY29tYmluYXRvckRlY2xhcmF0aW9uXCIpLFxuICAgICAgc2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3NpbXBsZVR5cGVEZWNsYXJhdGlvblwiKSxcbiAgICAgIHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlUHJlZml4RGVjbGFyYXRpb25cIiksXG4gICAgICBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2NvbnN0cnVjdG9yRGVjbGFyYXRpb25cIiksXG4gICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2NvbXBsZXhUeXBlRGVjbGFyYXRpb25cIiksXG4gICAgICBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhdmFyaWFibGVEZWNsYXJhdGlvblwiKTtcblxuY2xhc3MgVG9wTGV2ZWxQYXNzIGV4dGVuZHMgQXN5bmNQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBlcnJvck5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGVycm9yTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGVycm9yID0gZXJyb3JGcm9tRXJyb3JOb2RlKGVycm9yTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGVycm9yVmVyaWZpZXMgPSBhd2FpdCBlcnJvci52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoZXJyb3JWZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHJ1bGVOb2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jIChydWxlTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHJ1bGUgPSBydWxlRnJvbVJ1bGVOb2RlKHJ1bGVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgcnVsZVZlcmlmaWVzID0gYXdhaXQgcnVsZS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAocnVsZVZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogYXhpb21Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jIChheGlvbU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBheGlvbSA9IGF4aW9tRnJvbUF4aW9tTm9kZShheGlvbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBheGlvbVZlcmlmaWVzID0gYXdhaXQgYXhpb20udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKGF4aW9tVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBsZW1tYU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGxlbW1hTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGxlbW1hID0gbGVtbWFGcm9tTGVtbWFOb2RlKGxlbW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGxlbW1hVmVyaWZpZXMgPSBhd2FpdCBsZW1tYS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAobGVtbWFWZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHNlY3Rpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jIChzZWN0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb24gPSBzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlKHNlY3Rpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc2VjdGlvblZlcmlmaWVzID0gYXdhaXQgc2VjdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoc2VjdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdGhlb3JlbU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKHRoZW9yZW1Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgdGhlb3JlbSA9IHRoZW9yZW1Gcm9tVGhlb3JlbU5vZGUodGhlb3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICB0aGVvcmVtVmVyaWZpZXMgPSBhd2FpdCB0aGVvcmVtLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmICh0aGVvcmVtVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBtZXRhTGVtbWFOb2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jIChtZXRhTGVtbWFOb2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbWV0YUxlbW1hID0gbWV0YUxlbW1hRnJvbU1ldGFMZW1tYU5vZGUobWV0YUxlbW1hTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG1ldGFMZW1tYVZlcmlmaWVzID0gYXdhaXQgbWV0YUxlbW1hLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChtZXRhTGVtbWFWZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGNvbmplY3R1cmVOb2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jIChjb25qZWN0dXJlTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGNvbmplY3R1cmUgPSBjb25qZWN0dXJlRnJvbUNvbmplY3R1cmVOb2RlKGNvbmplY3R1cmVOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgY29uamVjdHVyZVZlcmlmaWVzID0gYXdhaXQgY29uamVjdHVyZS52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoY29uamVjdHVyZVZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogbWV0YXRoZW9yZW1Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jIChtZXRhdGhlb3JlbU5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBtZXRhdGhlb3JlbSA9IG1ldGF0aGVvcmVtRnJvbU1ldGF0aGVvcmVtTm9kZShtZXRhdGhlb3JlbU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBtZXRhdGhlb3JlbVZlcmlmaWVzID0gYXdhaXQgbWV0YXRoZW9yZW0udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKG1ldGF0aGVvcmVtVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiB2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAodmFyaWFibGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCB2YXJpYWJsZURlY2xhcmF0aW9uID0gdmFyaWFibGVEZWNsYXJhdGlvbkZyb21WYXJpYWJsZURlY2xhcmF0aW9uTm9kZSh2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIHZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IHZhcmlhYmxlRGVjbGFyYXRpb24udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKHZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKHNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpID0+IHtcbiAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBzaW1wbGVUeXBlRGVjbGFyYXRpb24gPSBzaW1wbGVUeXBlRGVjbGFyYXRpb25Gcm9tU2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZShzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgc2ltcGxlVHlwZURlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBzaW1wbGVUeXBlRGVjbGFyYXRpb24udmVyaWZ5KCk7XG5cbiAgICAgICAgaWYgKHNpbXBsZVR5cGVEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogdHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiBhc3luYyAodHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IHR5cGVQcmVmaXhEZWNsYXJhdGlvbiA9IHR5cGVQcmVmaXhEZWNsYXJhdGlvbkZyb21UeXBlUHJlZml4RGVjbGFyYXRpb25Ob2RlKHR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICB0eXBlUHJlZml4RGVjbGFyYXRpb25WZXJpZmllcyA9IGF3YWl0IHR5cGVQcmVmaXhEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAodHlwZVByZWZpeERlY2xhcmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jIChjb21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY29tYmluYXRvckRlY2xhcmF0aW9uID0gY29tYmluYXRvckRlY2xhcmF0aW9uRnJvbUNvbWJpbmF0b3JEZWNsYXJhdGlvbk5vZGUoY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIGNvbWJpbmF0b3JEZWNsYXJhdGlvblZlcmlmaWVzID0gYXdhaXQgY29tYmluYXRvckRlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChjb21iaW5hdG9yRGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBub2RlUXVlcnk6IGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlUXVlcnksXG4gICAgICBydW46IGFzeW5jIChjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IGNvbnN0cnVjdG9yRGVjbGFyYXRpb24gPSBjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlKGNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgY29uc3RydWN0b3JEZWNsYXJhdGlvblZlcmlmaWVzID0gYXdhaXQgY29uc3RydWN0b3JEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAoY29uc3RydWN0b3JEZWNsYXJhdGlvblZlcmlmaWVzKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3VjY2VzcztcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIG5vZGVRdWVyeTogY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlLCBjb250ZXh0KSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgY29tcGxleFR5cGVEZWNsYXJhdGlvbiA9IGNvbXBsZXhUeXBlRGVjbGFyYXRpb25Gcm9tQ29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUoY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgICBjb21wbGV4VHlwZURlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBjb21wbGV4VHlwZURlY2xhcmF0aW9uLnZlcmlmeSgpO1xuXG4gICAgICAgIGlmIChjb21wbGV4VHlwZURlY2xhcmF0aW9uVmVyaWZpZXMpIHtcbiAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdWNjZXNzO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgbm9kZVF1ZXJ5OiBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGVRdWVyeSxcbiAgICAgIHJ1bjogYXN5bmMgKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCkgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uID0gbWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlKG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZURlY2xhcmF0aW9uVmVyaWZpZXMgPSBhd2FpdCBtZXRhdmFyaWFibGVEZWNsYXJhdGlvbi52ZXJpZnkoKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcykge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCB0b3BMZXZlbFBhc3MgPSBuZXcgVG9wTGV2ZWxQYXNzKCk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2ZXJpZnlGaWxlKGZpbGVOb2RlLCBjb250ZXh0KSB7XG4gIGxldCBmaWxlVmVyaWZpZXMgPSBmYWxzZTtcblxuICBjb25zdCBub2RlID0gZmlsZU5vZGUsIC8vL1xuICAgICAgICBzdWNlc3MgPSBhd2FpdCB0b3BMZXZlbFBhc3MucnVuKG5vZGUsIGNvbnRleHQpO1xuXG4gIGlmIChzdWNlc3MpIHtcbiAgICBmaWxlVmVyaWZpZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGZpbGVWZXJpZmllcztcbn1cbiJdLCJuYW1lcyI6WyJ2ZXJpZnlGaWxlIiwibm9kZVF1ZXJ5IiwicXVlcnlVdGlsaXRpZXMiLCJydWxlTm9kZVF1ZXJ5IiwiZXJyb3JOb2RlUXVlcnkiLCJheGlvbU5vZGVRdWVyeSIsImxlbW1hTm9kZVF1ZXJ5Iiwic2VjdGlvbk5vZGVRdWVyeSIsInRoZW9yZW1Ob2RlUXVlcnkiLCJtZXRhTGVtbWFOb2RlUXVlcnkiLCJjb25qZWN0dXJlTm9kZVF1ZXJ5IiwibWV0YXRoZW9yZW1Ob2RlUXVlcnkiLCJ2YXJpYWJsZURlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZVF1ZXJ5Iiwic2ltcGxlVHlwZURlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwidHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZVF1ZXJ5IiwiY29uc3RydWN0b3JEZWNsYXJhdGlvbk5vZGVRdWVyeSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25Ob2RlUXVlcnkiLCJtZXRhdmFyaWFibGVEZWNsYXJhdGlvbk5vZGVRdWVyeSIsIlRvcExldmVsUGFzcyIsIkFzeW5jUGFzcyIsIm1hcHMiLCJydW4iLCJlcnJvck5vZGUiLCJjb250ZXh0Iiwic3VjY2VzcyIsImVycm9yIiwiZXJyb3JGcm9tRXJyb3JOb2RlIiwiZXJyb3JWZXJpZmllcyIsInZlcmlmeSIsInJ1bGVOb2RlIiwicnVsZSIsInJ1bGVGcm9tUnVsZU5vZGUiLCJydWxlVmVyaWZpZXMiLCJheGlvbU5vZGUiLCJheGlvbSIsImF4aW9tRnJvbUF4aW9tTm9kZSIsImF4aW9tVmVyaWZpZXMiLCJsZW1tYU5vZGUiLCJsZW1tYSIsImxlbW1hRnJvbUxlbW1hTm9kZSIsImxlbW1hVmVyaWZpZXMiLCJzZWN0aW9uTm9kZSIsInNlY3Rpb24iLCJzZWN0aW9uRnJvbVNlY3Rpb25Ob2RlIiwic2VjdGlvblZlcmlmaWVzIiwidGhlb3JlbU5vZGUiLCJ0aGVvcmVtIiwidGhlb3JlbUZyb21UaGVvcmVtTm9kZSIsInRoZW9yZW1WZXJpZmllcyIsIm1ldGFMZW1tYU5vZGUiLCJtZXRhTGVtbWEiLCJtZXRhTGVtbWFGcm9tTWV0YUxlbW1hTm9kZSIsIm1ldGFMZW1tYVZlcmlmaWVzIiwiY29uamVjdHVyZU5vZGUiLCJjb25qZWN0dXJlIiwiY29uamVjdHVyZUZyb21Db25qZWN0dXJlTm9kZSIsImNvbmplY3R1cmVWZXJpZmllcyIsIm1ldGF0aGVvcmVtTm9kZSIsIm1ldGF0aGVvcmVtIiwibWV0YXRoZW9yZW1Gcm9tTWV0YXRoZW9yZW1Ob2RlIiwibWV0YXRoZW9yZW1WZXJpZmllcyIsInZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwidmFyaWFibGVEZWNsYXJhdGlvbiIsInZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tVmFyaWFibGVEZWNsYXJhdGlvbk5vZGUiLCJ2YXJpYWJsZURlY2xhcmF0aW9uVmVyaWZpZXMiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25Ob2RlIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uIiwic2ltcGxlVHlwZURlY2xhcmF0aW9uRnJvbVNpbXBsZVR5cGVEZWNsYXJhdGlvbk5vZGUiLCJzaW1wbGVUeXBlRGVjbGFyYXRpb25WZXJpZmllcyIsInR5cGVQcmVmaXhEZWNsYXJhdGlvbk5vZGUiLCJ0eXBlUHJlZml4RGVjbGFyYXRpb24iLCJ0eXBlUHJlZml4RGVjbGFyYXRpb25Gcm9tVHlwZVByZWZpeERlY2xhcmF0aW9uTm9kZSIsInR5cGVQcmVmaXhEZWNsYXJhdGlvblZlcmlmaWVzIiwiY29tYmluYXRvckRlY2xhcmF0aW9uTm9kZSIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbiIsImNvbWJpbmF0b3JEZWNsYXJhdGlvbkZyb21Db21iaW5hdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29tYmluYXRvckRlY2xhcmF0aW9uVmVyaWZpZXMiLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uTm9kZSIsImNvbnN0cnVjdG9yRGVjbGFyYXRpb24iLCJjb25zdHJ1Y3RvckRlY2xhcmF0aW9uRnJvbUNvbnN0cnVjdG9yRGVjbGFyYXRpb25Ob2RlIiwiY29uc3RydWN0b3JEZWNsYXJhdGlvblZlcmlmaWVzIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbk5vZGUiLCJjb21wbGV4VHlwZURlY2xhcmF0aW9uIiwiY29tcGxleFR5cGVEZWNsYXJhdGlvbkZyb21Db21wbGV4VHlwZURlY2xhcmF0aW9uTm9kZSIsImNvbXBsZXhUeXBlRGVjbGFyYXRpb25WZXJpZmllcyIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZURlY2xhcmF0aW9uIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Gcm9tTWV0YXZhcmlhYmxlRGVjbGFyYXRpb25Ob2RlIiwibWV0YXZhcmlhYmxlRGVjbGFyYXRpb25WZXJpZmllcyIsInRvcExldmVsUGFzcyIsImZpbGVOb2RlIiwiZmlsZVZlcmlmaWVzIiwibm9kZSIsInN1Y2VzcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBK1JzQkE7OztlQUFBQTs7O2dDQTdSb0I7eUJBaUI2QjtBQUV2RSxNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHQyw4QkFBYztBQUVwQyxNQUFNQyxnQkFBZ0JGLFVBQVUsVUFDMUJHLGlCQUFpQkgsVUFBVSxXQUMzQkksaUJBQWlCSixVQUFVLFdBQzNCSyxpQkFBaUJMLFVBQVUsV0FDM0JNLG1CQUFtQk4sVUFBVSxhQUM3Qk8sbUJBQW1CUCxVQUFVLGFBQzdCUSxxQkFBcUJSLFVBQVUsZUFDL0JTLHNCQUFzQlQsVUFBVSxnQkFDaENVLHVCQUF1QlYsVUFBVSxpQkFDakNXLCtCQUErQlgsVUFBVSx5QkFDekNZLGlDQUFpQ1osVUFBVSwyQkFDM0NhLGlDQUFpQ2IsVUFBVSwyQkFDM0NjLGlDQUFpQ2QsVUFBVSwyQkFDM0NlLGtDQUFrQ2YsVUFBVSw0QkFDNUNnQixrQ0FBa0NoQixVQUFVLDRCQUM1Q2lCLG1DQUFtQ2pCLFVBQVU7QUFFbkQsTUFBTWtC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
@@ -9,9 +9,6 @@ function _export(target, all) {
9
9
  });
10
10
  }
11
11
  _export(exports, {
12
- get asyncAttempt () {
13
- return asyncAttempt;
14
- },
15
12
  get asyncLiminally () {
16
13
  return asyncLiminally;
17
14
  },
@@ -66,15 +63,10 @@ async function asyncScope(innerFunction, context) {
66
63
  context = scopedContext; ///
67
64
  return await innerFunction(context);
68
65
  }
69
- async function asyncAttempt(innerFunction, context) {
70
- const ephemeralContext = _ephemeral.default.fromNothing(context);
71
- context = ephemeralContext; ///
72
- return await innerFunction(context);
73
- }
74
66
  async function asyncLiminally(innerFunction, context) {
75
67
  const liminalContext = _liminal.default.fromNothing(context);
76
68
  context = liminalContext; ///
77
69
  return await innerFunction(context);
78
70
  }
79
71
 
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNjb3BlZENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvc2NvcGVkXCI7XG5pbXBvcnQgTGltaW5hbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbGltaW5hbFwiO1xuaW1wb3J0IExpdGVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xpdGVyYWxcIjtcbmltcG9ydCBFcGhlbWVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2VwaGVtZXJhbFwiO1xuaW1wb3J0IFN5bnRoZXRpY0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvc3ludGhldGljXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRlbXB0KGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgZXBoZW1lcmFsQ29udGV4dCA9IEVwaGVtZXJhbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGVwaGVtZXJhbENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbWluYWxseShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsbHkoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaXRlcmFsQ29udGV4dCA9IExpdGVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaXRlcmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ludGhldGljYWxseShpbm5lckZ1bmN0aW9uLCBjb250ZXh0cywgY29udGV4dCkge1xuICBjb25zdCBzeW50aGV0aWNDb250ZXh0ID0gU3ludGhldGljQ29udGV4dC5mcm9tQ29udGV4dHMoY29udGV4dHMsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBzeW50aGV0aWNDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY1Njb3BlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3Qgc2NvcGVkQ29udGV4dCA9IFNjb3BlZENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IHNjb3BlZENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gYXdhaXQgaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jQXR0ZW1wdChpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGVwaGVtZXJhbENvbnRleHQgPSBFcGhlbWVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBlcGhlbWVyYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGF3YWl0IGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY0xpbWluYWxseShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGF3YWl0IGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbiJdLCJuYW1lcyI6WyJhc3luY0F0dGVtcHQiLCJhc3luY0xpbWluYWxseSIsImFzeW5jU2NvcGUiLCJhdHRlbXB0IiwibGltaW5hbGx5IiwibGl0ZXJhbGx5Iiwic3ludGhldGljYWxseSIsImlubmVyRnVuY3Rpb24iLCJjb250ZXh0IiwiZXBoZW1lcmFsQ29udGV4dCIsIkVwaGVtZXJhbENvbnRleHQiLCJmcm9tTm90aGluZyIsImxpbWluYWxDb250ZXh0IiwiTGltaW5hbENvbnRleHQiLCJsaXRlcmFsQ29udGV4dCIsIkxpdGVyYWxDb250ZXh0IiwiY29udGV4dHMiLCJzeW50aGV0aWNDb250ZXh0IiwiU3ludGhldGljQ29udGV4dCIsImZyb21Db250ZXh0cyIsInNjb3BlZENvbnRleHQiLCJTY29wZWRDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFnRHNCQTtlQUFBQTs7UUFRQUM7ZUFBQUE7O1FBaEJBQztlQUFBQTs7UUFoQ05DO2VBQUFBOztRQVFBQztlQUFBQTs7UUFRQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOzs7K0RBOUJVO2dFQUNDO2dFQUNBO2tFQUNFO2tFQUNBOzs7Ozs7QUFFdEIsU0FBU0gsUUFBUUksYUFBYSxFQUFFQyxPQUFPO0lBQzVDLE1BQU1DLG1CQUFtQkMsa0JBQWdCLENBQUNDLFdBQVcsQ0FBQ0g7SUFFdERBLFVBQVVDLGtCQUFtQixHQUFHO0lBRWhDLE9BQU9GLGNBQWNDO0FBQ3ZCO0FBRU8sU0FBU0osVUFBVUcsYUFBYSxFQUFFQyxPQUFPO0lBQzlDLE1BQU1JLGlCQUFpQkMsZ0JBQWMsQ0FBQ0YsV0FBVyxDQUFDSDtJQUVsREEsVUFBVUksZ0JBQWlCLEdBQUc7SUFFOUIsT0FBT0wsY0FBY0M7QUFDdkI7QUFFTyxTQUFTSCxVQUFVRSxhQUFhLEVBQUVDLE9BQU87SUFDOUMsTUFBTU0saUJBQWlCQyxnQkFBYyxDQUFDSixXQUFXLENBQUNIO0lBRWxEQSxVQUFVTSxnQkFBaUIsR0FBRztJQUU5QixPQUFPUCxjQUFjQztBQUN2QjtBQUVPLFNBQVNGLGNBQWNDLGFBQWEsRUFBRVMsUUFBUSxFQUFFUixPQUFPO0lBQzVELE1BQU1TLG1CQUFtQkMsa0JBQWdCLENBQUNDLFlBQVksQ0FBQ0gsVUFBVVI7SUFFakVBLFVBQVVTLGtCQUFtQixHQUFHO0lBRWhDLE9BQU9WLGNBQWNDO0FBQ3ZCO0FBRU8sZUFBZU4sV0FBV0ssYUFBYSxFQUFFQyxPQUFPO0lBQ3JELE1BQU1ZLGdCQUFnQkMsZUFBYSxDQUFDVixXQUFXLENBQUNIO0lBRWhEQSxVQUFVWSxlQUFnQixHQUFHO0lBRTdCLE9BQU8sTUFBTWIsY0FBY0M7QUFDN0I7QUFFTyxlQUFlUixhQUFhTyxhQUFhLEVBQUVDLE9BQU87SUFDdkQsTUFBTUMsbUJBQW1CQyxrQkFBZ0IsQ0FBQ0MsV0FBVyxDQUFDSDtJQUV0REEsVUFBVUMsa0JBQW1CLEdBQUc7SUFFaEMsT0FBTyxNQUFNRixjQUFjQztBQUM3QjtBQUVPLGVBQWVQLGVBQWVNLGFBQWEsRUFBRUMsT0FBTztJQUN6RCxNQUFNSSxpQkFBaUJDLGdCQUFjLENBQUNGLFdBQVcsQ0FBQ0g7SUFFbERBLFVBQVVJLGdCQUFpQixHQUFHO0lBRTlCLE9BQU8sTUFBTUwsY0FBY0M7QUFDN0IifQ==
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGV4dC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IFNjb3BlZENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvc2NvcGVkXCI7XG5pbXBvcnQgTGltaW5hbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbGltaW5hbFwiO1xuaW1wb3J0IExpdGVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xpdGVyYWxcIjtcbmltcG9ydCBFcGhlbWVyYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2VwaGVtZXJhbFwiO1xuaW1wb3J0IFN5bnRoZXRpY0NvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvc3ludGhldGljXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBhdHRlbXB0KGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgZXBoZW1lcmFsQ29udGV4dCA9IEVwaGVtZXJhbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGVwaGVtZXJhbENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxpbWluYWxseShpbm5lckZ1bmN0aW9uLCBjb250ZXh0KSB7XG4gIGNvbnN0IGxpbWluYWxDb250ZXh0ID0gTGltaW5hbENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IGxpbWluYWxDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsaXRlcmFsbHkoaW5uZXJGdW5jdGlvbiwgY29udGV4dCkge1xuICBjb25zdCBsaXRlcmFsQ29udGV4dCA9IExpdGVyYWxDb250ZXh0LmZyb21Ob3RoaW5nKGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBsaXRlcmFsQ29udGV4dDsgIC8vL1xuXG4gIHJldHVybiBpbm5lckZ1bmN0aW9uKGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3ludGhldGljYWxseShpbm5lckZ1bmN0aW9uLCBjb250ZXh0cywgY29udGV4dCkge1xuICBjb25zdCBzeW50aGV0aWNDb250ZXh0ID0gU3ludGhldGljQ29udGV4dC5mcm9tQ29udGV4dHMoY29udGV4dHMsIGNvbnRleHQpO1xuXG4gIGNvbnRleHQgPSBzeW50aGV0aWNDb250ZXh0OyAgLy8vXG5cbiAgcmV0dXJuIGlubmVyRnVuY3Rpb24oY29udGV4dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBhc3luY1Njb3BlKGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3Qgc2NvcGVkQ29udGV4dCA9IFNjb3BlZENvbnRleHQuZnJvbU5vdGhpbmcoY29udGV4dCk7XG5cbiAgY29udGV4dCA9IHNjb3BlZENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gYXdhaXQgaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFzeW5jTGltaW5hbGx5KGlubmVyRnVuY3Rpb24sIGNvbnRleHQpIHtcbiAgY29uc3QgbGltaW5hbENvbnRleHQgPSBMaW1pbmFsQ29udGV4dC5mcm9tTm90aGluZyhjb250ZXh0KTtcblxuICBjb250ZXh0ID0gbGltaW5hbENvbnRleHQ7ICAvLy9cblxuICByZXR1cm4gYXdhaXQgaW5uZXJGdW5jdGlvbihjb250ZXh0KTtcbn1cbiJdLCJuYW1lcyI6WyJhc3luY0xpbWluYWxseSIsImFzeW5jU2NvcGUiLCJhdHRlbXB0IiwibGltaW5hbGx5IiwibGl0ZXJhbGx5Iiwic3ludGhldGljYWxseSIsImlubmVyRnVuY3Rpb24iLCJjb250ZXh0IiwiZXBoZW1lcmFsQ29udGV4dCIsIkVwaGVtZXJhbENvbnRleHQiLCJmcm9tTm90aGluZyIsImxpbWluYWxDb250ZXh0IiwiTGltaW5hbENvbnRleHQiLCJsaXRlcmFsQ29udGV4dCIsIkxpdGVyYWxDb250ZXh0IiwiY29udGV4dHMiLCJzeW50aGV0aWNDb250ZXh0IiwiU3ludGhldGljQ29udGV4dCIsImZyb21Db250ZXh0cyIsInNjb3BlZENvbnRleHQiLCJTY29wZWRDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFnRHNCQTtlQUFBQTs7UUFSQUM7ZUFBQUE7O1FBaENOQztlQUFBQTs7UUFRQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQVFBQztlQUFBQTs7OytEQTlCVTtnRUFDQztnRUFDQTtrRUFDRTtrRUFDQTs7Ozs7O0FBRXRCLFNBQVNILFFBQVFJLGFBQWEsRUFBRUMsT0FBTztJQUM1QyxNQUFNQyxtQkFBbUJDLGtCQUFnQixDQUFDQyxXQUFXLENBQUNIO0lBRXREQSxVQUFVQyxrQkFBbUIsR0FBRztJQUVoQyxPQUFPRixjQUFjQztBQUN2QjtBQUVPLFNBQVNKLFVBQVVHLGFBQWEsRUFBRUMsT0FBTztJQUM5QyxNQUFNSSxpQkFBaUJDLGdCQUFjLENBQUNGLFdBQVcsQ0FBQ0g7SUFFbERBLFVBQVVJLGdCQUFpQixHQUFHO0lBRTlCLE9BQU9MLGNBQWNDO0FBQ3ZCO0FBRU8sU0FBU0gsVUFBVUUsYUFBYSxFQUFFQyxPQUFPO0lBQzlDLE1BQU1NLGlCQUFpQkMsZ0JBQWMsQ0FBQ0osV0FBVyxDQUFDSDtJQUVsREEsVUFBVU0sZ0JBQWlCLEdBQUc7SUFFOUIsT0FBT1AsY0FBY0M7QUFDdkI7QUFFTyxTQUFTRixjQUFjQyxhQUFhLEVBQUVTLFFBQVEsRUFBRVIsT0FBTztJQUM1RCxNQUFNUyxtQkFBbUJDLGtCQUFnQixDQUFDQyxZQUFZLENBQUNILFVBQVVSO0lBRWpFQSxVQUFVUyxrQkFBbUIsR0FBRztJQUVoQyxPQUFPVixjQUFjQztBQUN2QjtBQUVPLGVBQWVOLFdBQVdLLGFBQWEsRUFBRUMsT0FBTztJQUNyRCxNQUFNWSxnQkFBZ0JDLGVBQWEsQ0FBQ1YsV0FBVyxDQUFDSDtJQUVoREEsVUFBVVksZUFBZ0IsR0FBRztJQUU3QixPQUFPLE1BQU1iLGNBQWNDO0FBQzdCO0FBRU8sZUFBZVAsZUFBZU0sYUFBYSxFQUFFQyxPQUFPO0lBQ3pELE1BQU1JLGlCQUFpQkMsZ0JBQWMsQ0FBQ0YsV0FBVyxDQUFDSDtJQUVsREEsVUFBVUksZ0JBQWlCLEdBQUc7SUFFOUIsT0FBTyxNQUFNTCxjQUFjQztBQUM3QiJ9
@@ -63,14 +63,14 @@ function unifyTermWithBracketedConstructor(term, context, validateForwards) {
63
63
  return termUnifiesWithBracketedConstructor;
64
64
  }
65
65
  function validateStatementAsMetavariable(statement, stated, context) {
66
- let statementValidatesAsMetavariableAndSubstitution = false;
66
+ let statementValidatesAsMetavariable = false;
67
67
  const statementNode = statement.getNode(), metavariableNode = statementNode.getMetavariableNode();
68
68
  if (metavariableNode !== null) {
69
69
  const statementString = statement.getString();
70
70
  context.trace(`Validating the '${statementString}' statement as a metavariable...`);
71
71
  const metavariableName = metavariableNode.getMetavariableName(), metavariable = context.findMetavariableByMetavariableName(metavariableName);
72
72
  if (metavariable !== null) {
73
- statementValidatesAsMetavariableAndSubstitution = true;
73
+ statementValidatesAsMetavariable = true;
74
74
  const { TermSubstitution, FrameSubstitution } = _elements.default, frameSubstitution = FrameSubstitution.fromStatement(statement, context), termSubstitution = TermSubstitution.fromStatement(statement, context);
75
75
  let substitution;
76
76
  substitution = termSubstitution || frameSubstitution;
@@ -78,15 +78,15 @@ function validateStatementAsMetavariable(statement, stated, context) {
78
78
  const generalContext = context, specificContext = context; ///
79
79
  substitution = substitution.validate(generalContext, specificContext);
80
80
  if (substitution === null) {
81
- statementValidatesAsMetavariableAndSubstitution = false;
81
+ statementValidatesAsMetavariable = false;
82
82
  }
83
83
  }
84
84
  }
85
- if (statementValidatesAsMetavariableAndSubstitution) {
85
+ if (statementValidatesAsMetavariable) {
86
86
  context.debug(`...validated the '${statementString}' statement as a metavariable.`);
87
87
  }
88
88
  }
89
- return statementValidatesAsMetavariableAndSubstitution;
89
+ return statementValidatesAsMetavariable;
90
90
  }
91
91
  function unifyStatementWithCombinators(statement, stated, context) {
92
92
  stated = true; ///
@@ -258,4 +258,4 @@ const validateStatements = [
258
258
  validateStatementAsSatisfiesAssertion
259
259
  ];
260
260
 
261
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHZhbGlkYXRlRm9yd2FyZHMoKTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVZhbGlkYXRlc0FzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgdW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgIGlmICh1bmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcih0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uID0gZmFsc2U7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uID0gdHJ1ZTtcblxuICAgICAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uLCBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IEZyYW1lU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgbGV0IHN1YnN0aXR1dGlvbjtcblxuICAgICAgc3Vic3RpdHV0aW9uID0gKHRlcm1TdWJzdGl0dXRpb24gfHwgZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24udmFsaWRhdGUoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbjtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycygpLFxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzID0gY29tYmluYXRvcnMuc29tZSgoY29tYmluYXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29tYmluYXRvciA9IGNvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHVuaWZpZXNXaXRoQ29tYmluYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgY29uc3QgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpLFxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBsZXQgZXF1YWxpdHk7XG5cbiAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gKTtcblxuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHkudmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgbGV0IGp1ZGdlbWVudDtcblxuICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAganVkZ2VtZW50ID0ganVkZ2VtZW50LnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCB0eXBlQXNzZXJ0aW9uO1xuXG4gIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uO1xuXG4gIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uO1xuXG4gIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgc3VicHJvb2ZBc3NlcnRpb247XG5cbiAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbjtcblxuICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb247XG5cbiAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMsXG4gIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvclxuXTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50cyA9IFtcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvblxuXTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1zIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInRlcm0iLCJjb250ZXh0IiwidmFsaWRhdGVGb3J3YXJkcyIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwidGVybU5vZGUiLCJnZXROb2RlIiwidmFyaWFibGVOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwic29tZSIsImNvbnN0cnVjdG9yIiwidW5pZmllc1dpdGhDb25zdHJ1Y3RvciIsInVuaWZ5VGVybSIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSIsInN0YXRlbWVudCIsInN0YXRlZCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVtZW50U3RyaW5nIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwiVGVybVN1YnN0aXR1dGlvbiIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJmcmFtZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnQiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ2YWxpZGF0ZSIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb21iaW5hdG9ycyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwidW5pZmllc1dpdGhDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsInZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJ2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXFXYUE7ZUFBQUE7O1FBTkFDO2VBQUFBOzs7aUVBN1ZROzBCQUUyRDsyQkFRaEM7Ozs7OztBQUVoRCxTQUFTQyx1QkFBdUJDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxnQkFBZ0I7SUFDN0QsSUFBSUMsMEJBQTBCO0lBRTlCLE1BQU1DLFdBQVdKLEtBQUtLLE9BQU8sSUFDdkJDLGVBQWVGLFNBQVNHLGVBQWU7SUFFN0MsSUFBSUQsaUJBQWlCLE1BQU07UUFDekIsTUFBTUUsYUFBYVIsS0FBS1MsU0FBUztRQUVqQ1IsUUFBUVMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsdUJBQXVCLENBQUM7UUFFcEUsTUFBTUcscUJBQXFCTCxhQUFhTSxxQkFBcUIsSUFDdkRDLFdBQVdaLFFBQVFhLGdDQUFnQyxDQUFDSDtRQUUxRCxJQUFJRSxhQUFhLE1BQU07WUFDckIsTUFBTUUsT0FBT0YsU0FBU0csT0FBTztZQUU3QmhCLEtBQUtpQixPQUFP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
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvdmFsaWRhdGlvbi5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nLCBicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2luc3RhbmNlXCI7XG5pbXBvcnQgeyBlcXVhbGl0eUZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBqdWRnZW1lbnRGcm9tU3RhdGVtZW50LFxuICAgICAgICAgdHlwZUFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIHN1YnByb29mQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCxcbiAgICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbkZyb21TdGF0ZW1lbnQsXG4gICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25Gcm9tU3RhdGVtZW50IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9zdGF0ZW1lbnRcIjtcblxuZnVuY3Rpb24gdmFsaWRhdGVUZXJtQXNWYXJpYWJsZSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVmFsaWRhdGVzQXNWYXJpYWJsZSA9IGZhbHNlO1xuXG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHZhcmlhYmxlTm9kZSA9IHRlcm1Ob2RlLmdldFZhcmlhYmxlTm9kZSgpO1xuXG4gIGlmICh2YXJpYWJsZU5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCB0ZXJtU3RyaW5nID0gdGVybS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICAgIGNvbnN0IHZhcmlhYmxlSWRlbnRpZmllciA9IHZhcmlhYmxlTm9kZS5nZXRWYXJpYWJsZUlkZW50aWZpZXIoKSxcbiAgICAgICAgICB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZUlkZW50aWZpZXIodmFyaWFibGVJZGVudGlmaWVyKTtcblxuICAgIGlmICh2YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHlwZSA9IHZhcmlhYmxlLmdldFR5cGUoKTtcblxuICAgICAgdGVybS5zZXRUeXBlKHR5cGUpO1xuXG4gICAgICBjb25zdCB2YWxpZGF0ZXNGb3J3YXJkcyA9IHZhbGlkYXRlRm9yd2FyZHMoKTtcblxuICAgICAgaWYgKHZhbGlkYXRlc0ZvcndhcmRzKSB7XG4gICAgICAgIHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGVybVZhbGlkYXRlc0FzVmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGVybVZhbGlkYXRlc0FzVmFyaWFibGU7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgdmFsaWRhdGVGb3J3YXJkcykge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xuXG4gIGNvbnN0IGNvbnN0cnVjdG9ycyA9IGNvbnRleHQuZ2V0Q29uc3RydWN0b3JzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzID0gY29uc3RydWN0b3JzLnNvbWUoKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgY29uc3QgdW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICAgIGlmICh1bmlmaWVzV2l0aENvbnN0cnVjdG9yKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcih0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCB2YWxpZGF0ZUZvcndhcmRzKTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3I7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBzdGF0ZW1lbnROb2RlLmdldE1ldGF2YXJpYWJsZU5vZGUoKTtcblxuICBpZiAobWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS4uLmApO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5vZGUuZ2V0TWV0YXZhcmlhYmxlTmFtZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgIGlmIChtZXRhdmFyaWFibGUgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gdHJ1ZTtcblxuICAgICAgY29uc3QgeyBUZXJtU3Vic3RpdHV0aW9uLCBGcmFtZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICBmcmFtZVN1YnN0aXR1dGlvbiA9IEZyYW1lU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICAgICAgbGV0IHN1YnN0aXR1dGlvbjtcblxuICAgICAgc3Vic3RpdHV0aW9uID0gKHRlcm1TdWJzdGl0dXRpb24gfHwgZnJhbWVTdWJzdGl0dXRpb24pO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGdlbmVyYWxDb250ZXh0ID0gY29udGV4dCwgLy8vXG4gICAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7ICAvLy9cblxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24udmFsaWRhdGUoZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHN1YnN0aXR1dGlvbiA9PT0gbnVsbCkge1xuICAgICAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgc3RhdGVkID0gdHJ1ZTsgIC8vL1xuXG4gIGNvbnN0IGNvbWJpbmF0b3JzID0gY29udGV4dC5nZXRDb21iaW5hdG9ycygpLFxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aENvbWJpbmF0b3JzID0gY29tYmluYXRvcnMuc29tZSgoY29tYmluYXRvcikgPT4ge1xuICAgICAgICAgIGNvbnN0IHVuaWZpZXNXaXRoQ29tYmluYXRvciA9IGNvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHVuaWZpZXNXaXRoQ29tYmluYXRvcikge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhDb21iaW5hdG9ycztcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIHN0YXRlZCwgY29udGV4dCkge1xuICBzdGF0ZWQgPSB0cnVlOyAgLy8vXG5cbiAgY29uc3QgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpLFxuICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzV2l0aEJyYWNrZXRlZENvbWJpbmF0b3IgPSBicmFja2V0ZWRDb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KTtcblxuICByZXR1cm4gc3RhdGVtZW50VW5pZmllc1dpdGhCcmFja2V0ZWRDb21iaW5hdG9yO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICBsZXQgZXF1YWxpdHk7XG5cbiAgZXF1YWxpdHkgPSBlcXVhbGl0eUZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuLi5gKTtcblxuICAgIGVxdWFsaXR5ID0gZXF1YWxpdHkudmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKGVxdWFsaXR5ICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYW4gZXF1YWxpdHkuYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQoc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgbGV0IGp1ZGdlbWVudDtcblxuICBqdWRnZW1lbnQgPSBqdWRnZW1lbnRGcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gICAganVkZ2VtZW50ID0ganVkZ2VtZW50LnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChqdWRnZW1lbnQgIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEganVkZ2VtZW50LmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCB0eXBlQXNzZXJ0aW9uO1xuXG4gIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uLi5gKTtcblxuICAgIHR5cGVBc3NlcnRpb24gPSB0eXBlQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBkZWZpbmVkQXNzZXJ0aW9uO1xuXG4gIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGRlZmluZWRBc3NlcnRpb24gPSBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IHByb3BlcnR5QXNzZXJ0aW9uO1xuXG4gIHByb3BlcnR5QXNzZXJ0aW9uID0gcHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uLnZhbGlkYXRlKHN0YXRlZCwgY29udGV4dCk7ICAvLy9cblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSBmYWxzZTtcblxuICBsZXQgc3VicHJvb2ZBc3NlcnRpb247XG5cbiAgc3VicHJvb2ZBc3NlcnRpb24gPSBzdWJwcm9vZkFzc2VydGlvbkZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICAgIHN1YnByb29mQXNzZXJ0aW9uID0gc3VicHJvb2ZBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb247XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBzdGF0ZWQsIGNvbnRleHQpIHtcbiAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgbGV0IGNvbnRhaW5lZEFzc2VydGlvbjtcblxuICBjb250YWluZWRBc3NlcnRpb24gPSBjb250YWluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IGNvbnRhaW5lZEFzc2VydGlvbi52YWxpZGF0ZShzdGF0ZWQsIGNvbnRleHQpOyAgLy8vXG5cbiAgICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU2F0aXNmaWVzQXNzZXJ0aW9uKHN0YXRlbWVudCwgc3RhdGVkLCBjb250ZXh0KSB7XG4gIGxldCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gIGxldCBzYXRpc2ZpZXNBc3NlcnRpb247XG5cbiAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gc2F0aXNmaWVzQXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzYXRpc2ZpZXNBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSBzYXRpc2ZpZXNBc3NlcnRpb24udmFsaWRhdGUoc3RhdGVkLCBjb250ZXh0KTsgIC8vL1xuXG4gICAgaWYgKHNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzQVN0YXRlbWVudHNTYXRpc2ZpZXNBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzYXRpc2ZpZXMgYXNzZXJ0aW9uLmApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbjtcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMsXG4gIHVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvclxuXTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlU3RhdGVtZW50cyA9IFtcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudCxcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTdWJwcm9vZkFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1NhdGlzZmllc0Fzc2VydGlvblxuXTtcbiJdLCJuYW1lcyI6WyJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1zIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInRlcm0iLCJjb250ZXh0IiwidmFsaWRhdGVGb3J3YXJkcyIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwidGVybU5vZGUiLCJnZXROb2RlIiwidmFyaWFibGVOb2RlIiwiZ2V0VmFyaWFibGVOb2RlIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFyaWFibGVJZGVudGlmaWVyIiwiZ2V0VmFyaWFibGVJZGVudGlmaWVyIiwidmFyaWFibGUiLCJmaW5kVmFyaWFibGVCeVZhcmlhYmxlSWRlbnRpZmllciIsInR5cGUiLCJnZXRUeXBlIiwic2V0VHlwZSIsInZhbGlkYXRlc0ZvcndhcmRzIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0Q29uc3RydWN0b3JzIiwic29tZSIsImNvbnN0cnVjdG9yIiwidW5pZmllc1dpdGhDb25zdHJ1Y3RvciIsInVuaWZ5VGVybSIsInVuaWZ5VGVybVdpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZSIsInN0YXRlbWVudCIsInN0YXRlZCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50Tm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJnZXRNZXRhdmFyaWFibGVOb2RlIiwic3RhdGVtZW50U3RyaW5nIiwibWV0YXZhcmlhYmxlTmFtZSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGUiLCJmaW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOYW1lIiwiVGVybVN1YnN0aXR1dGlvbiIsIkZyYW1lU3Vic3RpdHV0aW9uIiwiZWxlbWVudHMiLCJmcmFtZVN1YnN0aXR1dGlvbiIsImZyb21TdGF0ZW1lbnQiLCJ0ZXJtU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJ2YWxpZGF0ZSIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzIiwiY29tYmluYXRvcnMiLCJnZXRDb21iaW5hdG9ycyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwidW5pZmllc1dpdGhDb21iaW5hdG9yIiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZyIsInN0YXRlbWVudFVuaWZpZXNXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsInZhbGlkYXRlU3RhdGVtZW50QXNFcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJlcXVhbGl0eSIsImVxdWFsaXR5RnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsImp1ZGdlbWVudCIsImp1ZGdlbWVudEZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsImRlZmluZWRBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiIsInByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3VicHJvb2ZBc3NlcnRpb25Gcm9tU3RhdGVtZW50IiwidmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uRnJvbVN0YXRlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNTYXRpc2ZpZXNBc3NlcnRpb24iLCJ2YWxpZGF0ZXNBU3RhdGVtZW50c1NhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvbkZyb21TdGF0ZW1lbnQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXFXYUE7ZUFBQUE7O1FBTkFDO2VBQUFBOzs7aUVBN1ZROzBCQUUyRDsyQkFRaEM7Ozs7OztBQUVoRCxTQUFTQyx1QkFBdUJDLElBQUksRUFBRUMsT0FBTyxFQUFFQyxnQkFBZ0I7SUFDN0QsSUFBSUMsMEJBQTBCO0lBRTlCLE1BQU1DLFdBQVdKLEtBQUtLLE9BQU8sSUFDdkJDLGVBQWVGLFNBQVNHLGVBQWU7SUFFN0MsSUFBSUQsaUJBQWlCLE1BQU07UUFDekIsTUFBTUUsYUFBYVIsS0FBS1MsU0FBUztRQUVqQ1IsUUFBUVMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsdUJBQXVCLENBQUM7UUFFcEUsTUFBTUcscUJBQXFCTCxhQUFhTSxxQkFBcUIsSUFDdkRDLFdBQVdaLFFBQVFhLGdDQUFnQyxDQUFDSDtRQUUxRCxJQUFJRSxhQUFhLE1BQU07WUFDckIsTUFBTUUsT0FBT0YsU0FBU0csT0FBTztZQUU3QmhCLEtBQUtpQixPQUFPLENBQUNGO1lBRWIsTUFBTUcsb0JBQW9CaEI7WUFFMUIsSUFBSWdCLG1CQUFtQjtnQkFDckJmLDBCQUEwQjtZQUM1QjtRQUNGO1FBRUEsSUFBSUEseUJBQXlC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
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "occam-verify-cli",
3
3
  "author": "James Smith",
4
- "version": "1.0.708",
4
+ "version": "1.0.713",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/occam-verify-cli",
7
7
  "description": "Occam's Verifier",
@@ -137,19 +137,23 @@ export default define(class PropertyAssertion extends Assertion {
137
137
  }
138
138
 
139
139
  validatePropertyRelation(stated, context) {
140
- let propertyRelationVerifies;
140
+ let propertyRelationValidates = false;
141
141
 
142
142
  const propertyRelationString = this.propertyRelation.getString();
143
143
 
144
144
  context.trace(`Validating the '${propertyRelationString}' property relation...`);
145
145
 
146
- propertyRelationVerifies = this.propertyRelation.validate(context);
146
+ const propertyRelation = this.propertyRelation.validate(context);
147
147
 
148
- if (propertyRelationVerifies) {
148
+ if (propertyRelation !== null) {
149
+ propertyRelationValidates = true;
150
+ }
151
+
152
+ if (propertyRelationValidates) {
149
153
  context.debug(`...validated the '${propertyRelationString}' property relation.`);
150
154
  }
151
155
 
152
- return propertyRelationVerifies;
156
+ return propertyRelationValidates;
153
157
  }
154
158
 
155
159
  validateWhenStated(context) {
@@ -77,9 +77,15 @@ export default define(class SatisfiesAssertion extends Assertion {
77
77
  }
78
78
 
79
79
  validateSignature(stated, context) {
80
- const signatureVerifies = this.signature.validate(context);
80
+ let signatureValidates = false;
81
81
 
82
- return signatureVerifies;
82
+ const signature = this.signature.validate(context);
83
+
84
+ if (signature !== null) {
85
+ signatureValidates = true;
86
+ }
87
+
88
+ return signatureValidates;
83
89
  }
84
90
 
85
91
  validateReference(stated, context) {
@@ -6,9 +6,9 @@ import { define } from "../elements";
6
6
  import { attempt, literally } from "../utilities/context";
7
7
  import { instantiateCombinator } from "../process/instantiate";
8
8
  import { ephemeralContextFromJSON } from "../utilities/json";
9
- import { verifyStatementAsCombinator } from "../process/verify";
10
9
  import { statementFromCombinatorNode } from "../utilities/element";
11
10
  import { unifyStatementWithCombinator } from "../process/unify";
11
+ import { validateStatementAsCombinator } from "../process/validate";
12
12
 
13
13
  export default define(class Combinator extends Element {
14
14
  constructor(context, string, node, statement) {
@@ -28,49 +28,49 @@ export default define(class Combinator extends Element {
28
28
  return combinatorNode;
29
29
  }
30
30
 
31
- verify(context) {
32
- let verifies = false;
31
+ validate(context) {
32
+ let validates = false;
33
33
 
34
34
  const combinatorString = this.getString(); ///
35
35
 
36
- context.trace(`Verifying the '${combinatorString}' combinator...`);
36
+ context.trace(`Validating the '${combinatorString}' combinator...`);
37
37
 
38
38
  attempt((context) => {
39
- const statementVerifies = this.verifyStatement(context);
39
+ const statementValidates = this.validateStatement(context);
40
40
 
41
- if (statementVerifies) {
41
+ if (statementValidates) {
42
42
  this.setContext(context);
43
43
 
44
- verifies = true;
44
+ validates = true;
45
45
  }
46
46
  }, context)
47
47
 
48
- if (verifies) {
49
- context.debug(`...verified the '${combinatorString}' combinator.`);
48
+ if (validates) {
49
+ context.debug(`...validated the '${combinatorString}' combinator.`);
50
50
  }
51
51
 
52
- return verifies;
52
+ return validates;
53
53
  }
54
54
 
55
- verifyStatement(context) {
56
- let statementVerifies = false;
55
+ validateStatement(context) {
56
+ let statementValidates = false;
57
57
 
58
58
  const statementString = this.statement.getString(),
59
59
  combinatorString = this.getString(); ///
60
60
 
61
- context.trace(`Verifying the '${combinatorString}' combinator's '${statementString}' statement...`);
61
+ context.trace(`Validating the '${combinatorString}' combinator's '${statementString}' statement...`);
62
62
 
63
- const statementVerifiesAsCombinator = verifyStatementAsCombinator(this.statement, context);
63
+ const statementValidatesAsCombinator = validateStatementAsCombinator(this.statement, context);
64
64
 
65
- if (statementVerifiesAsCombinator) {
66
- statementVerifies = true;
65
+ if (statementValidatesAsCombinator) {
66
+ statementValidates = true;
67
67
  }
68
68
 
69
- if (statementVerifies) {
70
- context.debug(`...verified the '${combinatorString}' combinator's '${statementString}' statement.`);
69
+ if (statementValidates) {
70
+ context.debug(`...validated the '${combinatorString}' combinator's '${statementString}' statement.`);
71
71
  }
72
72
 
73
- return statementVerifies;
73
+ return statementValidates;
74
74
  }
75
75
 
76
76
  unifyStatement(statement, stated, context) {