occam-verify-cli 1.0.584 → 1.0.602
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/ephemeral.js +74 -2
- package/lib/context/file/nominal.js +11 -9
- package/lib/context/liminal.js +161 -24
- package/lib/context/literal.js +8 -2
- package/lib/context/scoped.js +4 -28
- package/lib/context/synthetic.js +146 -0
- package/lib/context.js +184 -1
- package/lib/element/assertion/contained.js +21 -15
- package/lib/element/assertion/defined.js +45 -65
- package/lib/element/assertion/property.js +25 -19
- package/lib/element/assertion/satisfies.js +14 -8
- package/lib/element/assertion/subproof.js +12 -6
- package/lib/element/assertion.js +47 -1
- package/lib/element/assumption.js +12 -12
- package/lib/element/conclusion.js +2 -2
- package/lib/element/deduction.js +2 -2
- package/lib/element/frame.js +61 -29
- package/lib/element/judgement.js +7 -1
- package/lib/element/label.js +8 -8
- package/lib/element/metavariable.js +71 -59
- package/lib/element/procedureCall.js +3 -4
- package/lib/element/proof.js +43 -35
- package/lib/element/proofAssertion/premise.js +122 -97
- package/lib/element/proofAssertion/step.js +162 -115
- package/lib/element/proofAssertion/supposition.js +157 -118
- package/lib/element/proofAssertion.js +3 -3
- package/lib/element/reference.js +40 -7
- package/lib/element/rule.js +227 -95
- package/lib/element/signature.js +2 -1
- package/lib/element/statement.js +67 -34
- package/lib/element/substitution/frame.js +36 -16
- package/lib/element/substitution/reference.js +36 -16
- package/lib/element/substitution/statement.js +94 -55
- package/lib/element/substitution/term.js +36 -16
- package/lib/element/substitution.js +54 -17
- package/lib/element/substitutions.js +4 -276
- package/lib/element/term.js +60 -31
- package/lib/element/topLevelAssertion/axiom.js +13 -4
- package/lib/element/topLevelAssertion/conjecture.js +7 -2
- package/lib/element/topLevelAssertion/theorem.js +7 -2
- package/lib/element/topLevelAssertion.js +201 -134
- package/lib/element/topLevelMetaAssertion.js +310 -51
- package/lib/element/variable.js +15 -6
- package/lib/node/substitution/statement.js +33 -1
- package/lib/process/unify.js +6 -6
- package/lib/utilities/context.js +10 -25
- package/lib/utilities/element.js +34 -9
- package/lib/utilities/statement.js +1 -8
- package/lib/utilities/string.js +12 -1
- package/lib/utilities/substitutions.js +42 -16
- package/lib/utilities/unification.js +3 -1
- package/lib/utilities/validation.js +2 -2
- package/package.json +4 -4
- package/src/context/ephemeral.js +73 -1
- package/src/context/file/nominal.js +14 -11
- package/src/context/liminal.js +180 -25
- package/src/context/literal.js +3 -1
- package/src/context/scoped.js +3 -35
- package/src/context/synthetic.js +49 -0
- package/src/context.js +176 -0
- package/src/element/assertion/contained.js +28 -20
- package/src/element/assertion/defined.js +62 -34
- package/src/element/assertion/property.js +27 -19
- package/src/element/assertion/satisfies.js +15 -7
- package/src/element/assertion/subproof.js +13 -5
- package/src/element/assertion.js +35 -0
- package/src/element/assumption.js +5 -5
- package/src/element/conclusion.js +2 -4
- package/src/element/deduction.js +2 -4
- package/src/element/frame.js +71 -39
- package/src/element/judgement.js +2 -0
- package/src/element/label.js +4 -4
- package/src/element/metavariable.js +94 -75
- package/src/element/procedureCall.js +2 -2
- package/src/element/proof.js +6 -6
- package/src/element/proofAssertion/premise.js +101 -69
- package/src/element/proofAssertion/step.js +79 -39
- package/src/element/proofAssertion/supposition.js +141 -115
- package/src/element/proofAssertion.js +2 -2
- package/src/element/reference.js +52 -10
- package/src/element/rule.js +138 -76
- package/src/element/signature.js +2 -0
- package/src/element/statement.js +76 -45
- package/src/element/substitution/frame.js +44 -15
- package/src/element/substitution/reference.js +44 -15
- package/src/element/substitution/statement.js +124 -72
- package/src/element/substitution/term.js +43 -15
- package/src/element/substitution.js +55 -18
- package/src/element/substitutions.js +1 -258
- package/src/element/term.js +65 -34
- package/src/element/topLevelAssertion/axiom.js +1 -1
- package/src/element/topLevelAssertion/conjecture.js +1 -1
- package/src/element/topLevelAssertion/theorem.js +1 -1
- package/src/element/topLevelAssertion.js +128 -48
- package/src/element/topLevelMetaAssertion.js +86 -32
- package/src/element/variable.js +15 -5
- package/src/node/substitution/statement.js +33 -0
- package/src/process/unify.js +6 -8
- package/src/utilities/context.js +9 -8
- package/src/utilities/element.js +37 -10
- package/src/utilities/statement.js +0 -7
- package/src/utilities/string.js +14 -0
- package/src/utilities/substitutions.js +59 -17
- package/src/utilities/unification.js +4 -0
- package/src/utilities/validation.js +3 -1
|
@@ -11,6 +11,7 @@ Object.defineProperty(exports, "default", {
|
|
|
11
11
|
var _occamlanguages = require("occam-languages");
|
|
12
12
|
var _proofAssertion = /*#__PURE__*/ _interop_require_default(require("../proofAssertion"));
|
|
13
13
|
var _elements = require("../../elements");
|
|
14
|
+
var _unification = require("../../utilities/unification");
|
|
14
15
|
var _context = require("../../utilities/context");
|
|
15
16
|
var _statement = require("../../utilities/statement");
|
|
16
17
|
function _assert_this_initialized(self) {
|
|
@@ -286,11 +287,91 @@ var _default = (0, _elements.define)((_Step = /*#__PURE__*/ function(ProofAssert
|
|
|
286
287
|
return comparesToTermAndPropertyRelation;
|
|
287
288
|
}
|
|
288
289
|
},
|
|
290
|
+
{
|
|
291
|
+
key: "validate",
|
|
292
|
+
value: function validate(assignments, context) {
|
|
293
|
+
var validates = false;
|
|
294
|
+
var stepString = this.getString(); ///
|
|
295
|
+
context.trace("Validating the '".concat(stepString, "' step..."));
|
|
296
|
+
var statement = this.getStatement();
|
|
297
|
+
if (statement !== null) {
|
|
298
|
+
var referenceValidates = this.validateReference(context);
|
|
299
|
+
if (referenceValidates) {
|
|
300
|
+
var satisfiesAssertioValidates = this.validateSatisfiesAssertion(context);
|
|
301
|
+
if (satisfiesAssertioValidates) {
|
|
302
|
+
var statementValidates = this.validateStatement(assignments, context);
|
|
303
|
+
if (statementValidates) {
|
|
304
|
+
validates = true;
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
} else {
|
|
309
|
+
context.debug("Unable to validate the '".concat(stepString, "' step because it is nonsense."));
|
|
310
|
+
}
|
|
311
|
+
if (validates) {
|
|
312
|
+
context.debug("...validate the '".concat(stepString, "' step."));
|
|
313
|
+
}
|
|
314
|
+
return validates;
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
key: "validateReference",
|
|
319
|
+
value: function validateReference(context) {
|
|
320
|
+
var referenceValidates = true;
|
|
321
|
+
if (this.reference !== null) {
|
|
322
|
+
var stepString = this.getString(), referenceString = this.reference.getString();
|
|
323
|
+
context.trace("Validating the '".concat(stepString, "' step's '").concat(referenceString, "' reference... "));
|
|
324
|
+
referenceValidates = this.reference.validate(context);
|
|
325
|
+
if (referenceValidates) {
|
|
326
|
+
context.debug("...validated the '".concat(stepString, "' step's '").concat(referenceString, "' reference. "));
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
return referenceValidates;
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
key: "validateSatisfiesAssertion",
|
|
334
|
+
value: function validateSatisfiesAssertion(context) {
|
|
335
|
+
var satisfiesAssertionValidates = true; ///
|
|
336
|
+
if (this.satisfiesAssertion !== null) {
|
|
337
|
+
var stepString = this.getString(), satisfiesAssertion = this.satisfiesAssertion.getString();
|
|
338
|
+
context.trace("Validating the '".concat(stepString, "' step's '").concat(satisfiesAssertion, "' satisfies assertion... "));
|
|
339
|
+
var stated = true, assignments = null;
|
|
340
|
+
satisfiesAssertionValidates = this.satisfiesAssertion.validate(assignments, stated, context);
|
|
341
|
+
if (satisfiesAssertionValidates) {
|
|
342
|
+
context.debug("...validating the '".concat(stepString, "' step's '").concat(satisfiesAssertion, "' satisfies assertion. "));
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
return satisfiesAssertionValidates;
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
key: "unifyWithSatisfiesAssertion",
|
|
350
|
+
value: function unifyWithSatisfiesAssertion(satisfiesAssertion, context) {
|
|
351
|
+
var unifiesWithSatisfiesAssertion = false;
|
|
352
|
+
var stepString = this.getString(), satisfiesAssertionString = satisfiesAssertion.getString();
|
|
353
|
+
context.trace("Unifying the '".concat(stepString, "' step with the '").concat(satisfiesAssertionString, "' satisfies assertion..."));
|
|
354
|
+
var reference = satisfiesAssertion.getReference(), axiom = context.findAxiomByReference(reference);
|
|
355
|
+
if (axiom !== null) {
|
|
356
|
+
var step = this, substitutions = [], stepUnifies = axiom.unifyStep(step, substitutions, context);
|
|
357
|
+
if (stepUnifies) {
|
|
358
|
+
var substitutionsCompare = satisfiesAssertion.compareSubstitutions(substitutions, context);
|
|
359
|
+
if (substitutionsCompare) {
|
|
360
|
+
unifiesWithSatisfiesAssertion = true;
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
if (unifiesWithSatisfiesAssertion) {
|
|
365
|
+
context.debug("...unified the '".concat(stepString, "' step with the '").concat(satisfiesAssertionString, "' satisfies assertion."));
|
|
366
|
+
}
|
|
367
|
+
return unifiesWithSatisfiesAssertion;
|
|
368
|
+
}
|
|
369
|
+
},
|
|
289
370
|
{
|
|
290
371
|
key: "verify",
|
|
291
372
|
value: function verify(assignments, context) {
|
|
292
373
|
return _async_to_generator(function() {
|
|
293
|
-
var _this, verifies, stepString
|
|
374
|
+
var _this, verifies, stepString;
|
|
294
375
|
return _ts_generator(this, function(_state) {
|
|
295
376
|
switch(_state.label){
|
|
296
377
|
case 0:
|
|
@@ -304,165 +385,131 @@ var _default = (0, _elements.define)((_Step = /*#__PURE__*/ function(ProofAssert
|
|
|
304
385
|
_state.sent();
|
|
305
386
|
stepString = this.getString(); ///
|
|
306
387
|
context.trace("Verifying the '".concat(stepString, "' step..."));
|
|
307
|
-
|
|
308
|
-
|
|
388
|
+
return [
|
|
389
|
+
4,
|
|
309
390
|
(0, _context.asyncAttempt)(function(context) {
|
|
310
391
|
return _async_to_generator(function() {
|
|
311
|
-
var
|
|
392
|
+
var validates, unifies;
|
|
312
393
|
return _ts_generator(this, function(_state) {
|
|
313
394
|
switch(_state.label){
|
|
314
395
|
case 0:
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
if (!referenceValidates) return [
|
|
396
|
+
validates = this.validate(assignments, context);
|
|
397
|
+
if (!validates) return [
|
|
318
398
|
3,
|
|
319
399
|
2
|
|
320
400
|
];
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
2
|
|
401
|
+
return [
|
|
402
|
+
4,
|
|
403
|
+
this.unify(context)
|
|
325
404
|
];
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
405
|
+
case 1:
|
|
406
|
+
unifies = _state.sent();
|
|
407
|
+
if (unifies) {
|
|
408
|
+
this.setContext(context);
|
|
409
|
+
verifies = true;
|
|
410
|
+
}
|
|
411
|
+
_state.label = 2;
|
|
412
|
+
case 2:
|
|
413
|
+
return [
|
|
329
414
|
2
|
|
330
415
|
];
|
|
331
|
-
|
|
416
|
+
}
|
|
417
|
+
});
|
|
418
|
+
}).call(_this);
|
|
419
|
+
}, context)
|
|
420
|
+
];
|
|
421
|
+
case 2:
|
|
422
|
+
_state.sent();
|
|
423
|
+
if (verifies) {
|
|
424
|
+
context.debug("...verified the '".concat(stepString, "' step."));
|
|
425
|
+
}
|
|
426
|
+
return [
|
|
427
|
+
2,
|
|
428
|
+
verifies
|
|
429
|
+
];
|
|
430
|
+
}
|
|
431
|
+
});
|
|
432
|
+
}).call(this);
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
key: "unify",
|
|
437
|
+
value: function unify(context) {
|
|
438
|
+
return _async_to_generator(function() {
|
|
439
|
+
var unifies, stepString, statement, reference, satisfiesAssertion, statementUnifies;
|
|
440
|
+
return _ts_generator(this, function(_state) {
|
|
441
|
+
switch(_state.label){
|
|
442
|
+
case 0:
|
|
443
|
+
unifies = false;
|
|
444
|
+
stepString = this.getString(); ///
|
|
445
|
+
context.trace("Unifying the '".concat(stepString, "' step..."));
|
|
446
|
+
statement = this.getStatement(), reference = this.getReference(), satisfiesAssertion = this.getSatisfiesAssertion();
|
|
447
|
+
return [
|
|
448
|
+
4,
|
|
449
|
+
(0, _context.asyncLiminally)(function(context) {
|
|
450
|
+
return _async_to_generator(function() {
|
|
451
|
+
var statementUnifies;
|
|
452
|
+
return _ts_generator(this, function(_state) {
|
|
453
|
+
switch(_state.label){
|
|
454
|
+
case 0:
|
|
332
455
|
return [
|
|
333
456
|
4,
|
|
334
|
-
(
|
|
457
|
+
asyncSome(_unification.unifyStatements, function(unifyStatement) {
|
|
335
458
|
return _async_to_generator(function() {
|
|
336
|
-
var
|
|
459
|
+
var statementUnifies;
|
|
337
460
|
return _ts_generator(this, function(_state) {
|
|
338
461
|
switch(_state.label){
|
|
339
462
|
case 0:
|
|
340
|
-
_this = this;
|
|
341
463
|
return [
|
|
342
464
|
4,
|
|
343
|
-
|
|
344
|
-
return _async_to_generator(function() {
|
|
345
|
-
var statementUnifies;
|
|
346
|
-
return _ts_generator(this, function(_state) {
|
|
347
|
-
switch(_state.label){
|
|
348
|
-
case 0:
|
|
349
|
-
return [
|
|
350
|
-
4,
|
|
351
|
-
unifyStatement(statement, reference, satisfiesAssertion, context)
|
|
352
|
-
];
|
|
353
|
-
case 1:
|
|
354
|
-
statementUnifies = _state.sent();
|
|
355
|
-
if (statementUnifies) {
|
|
356
|
-
this.setContext(context);
|
|
357
|
-
return [
|
|
358
|
-
2,
|
|
359
|
-
true
|
|
360
|
-
];
|
|
361
|
-
}
|
|
362
|
-
return [
|
|
363
|
-
2
|
|
364
|
-
];
|
|
365
|
-
}
|
|
366
|
-
});
|
|
367
|
-
}).call(_this);
|
|
368
|
-
})
|
|
465
|
+
unifyStatement(statement, reference, satisfiesAssertion, context)
|
|
369
466
|
];
|
|
370
467
|
case 1:
|
|
371
468
|
statementUnifies = _state.sent();
|
|
469
|
+
if (statementUnifies) {
|
|
470
|
+
return [
|
|
471
|
+
2,
|
|
472
|
+
true
|
|
473
|
+
];
|
|
474
|
+
}
|
|
372
475
|
return [
|
|
373
|
-
2
|
|
374
|
-
statementUnifies
|
|
476
|
+
2
|
|
375
477
|
];
|
|
376
478
|
}
|
|
377
479
|
});
|
|
378
|
-
})
|
|
379
|
-
}
|
|
480
|
+
})();
|
|
481
|
+
})
|
|
380
482
|
];
|
|
381
483
|
case 1:
|
|
382
484
|
statementUnifies = _state.sent();
|
|
383
|
-
if (statementUnifies) {
|
|
384
|
-
verifies = true;
|
|
385
|
-
}
|
|
386
|
-
_state.label = 2;
|
|
387
|
-
case 2:
|
|
388
485
|
return [
|
|
389
486
|
2,
|
|
390
|
-
|
|
487
|
+
statementUnifies
|
|
391
488
|
];
|
|
392
489
|
}
|
|
393
490
|
});
|
|
394
|
-
})
|
|
395
|
-
}, context)
|
|
396
|
-
|
|
397
|
-
|
|
491
|
+
})();
|
|
492
|
+
}, context)
|
|
493
|
+
];
|
|
494
|
+
case 1:
|
|
495
|
+
statementUnifies = _state.sent();
|
|
496
|
+
if (statementUnifies) {
|
|
497
|
+
unifies = true;
|
|
398
498
|
}
|
|
399
|
-
if (
|
|
400
|
-
context.debug("...
|
|
499
|
+
if (unifies) {
|
|
500
|
+
context.debug("...unified the '".concat(stepString, "' step."));
|
|
401
501
|
}
|
|
402
502
|
return [
|
|
403
503
|
2,
|
|
404
|
-
|
|
504
|
+
unifies
|
|
405
505
|
];
|
|
406
506
|
}
|
|
407
507
|
});
|
|
408
508
|
}).call(this);
|
|
409
509
|
}
|
|
410
|
-
},
|
|
411
|
-
{
|
|
412
|
-
key: "validateReference",
|
|
413
|
-
value: function validateReference(context) {
|
|
414
|
-
var referenceValidates = true;
|
|
415
|
-
if (this.reference !== null) {
|
|
416
|
-
var stepString = this.getString(), referenceString = this.reference.getString();
|
|
417
|
-
context.trace("Validating the '".concat(stepString, "' step's '").concat(referenceString, "' reference... "));
|
|
418
|
-
referenceValidates = this.reference.validate(context);
|
|
419
|
-
if (referenceValidates) {
|
|
420
|
-
context.debug("...validated the '".concat(stepString, "' step's '").concat(referenceString, "' reference. "));
|
|
421
|
-
}
|
|
422
|
-
}
|
|
423
|
-
return referenceValidates;
|
|
424
|
-
}
|
|
425
|
-
},
|
|
426
|
-
{
|
|
427
|
-
key: "validateSatisfiesAssertion",
|
|
428
|
-
value: function validateSatisfiesAssertion(context) {
|
|
429
|
-
var satisfiesAssertionValidates = true; ///
|
|
430
|
-
if (this.satisfiesAssertion !== null) {
|
|
431
|
-
var stepString = this.getString(), satisfiesAssertion = this.satisfiesAssertion.getString();
|
|
432
|
-
context.trace("Validating the '".concat(stepString, "' step's '").concat(satisfiesAssertion, "' satisfies assertion... "));
|
|
433
|
-
var stated = true, assignments = null;
|
|
434
|
-
satisfiesAssertionValidates = this.satisfiesAssertion.validate(assignments, stated, context);
|
|
435
|
-
if (satisfiesAssertionValidates) {
|
|
436
|
-
context.debug("...validating the '".concat(stepString, "' step's '").concat(satisfiesAssertion, "' satisfies assertion. "));
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
return satisfiesAssertionValidates;
|
|
440
|
-
}
|
|
441
|
-
},
|
|
442
|
-
{
|
|
443
|
-
key: "unifyWithSatisfiesAssertion",
|
|
444
|
-
value: function unifyWithSatisfiesAssertion(satisfiesAssertion, context) {
|
|
445
|
-
var unifiesWithSatisfiesAssertion = false;
|
|
446
|
-
var stepString = this.getString(), satisfiesAssertionString = satisfiesAssertion.getString();
|
|
447
|
-
context.trace("Unifying the '".concat(stepString, "' step with the '").concat(satisfiesAssertionString, "' satisfies assertion..."));
|
|
448
|
-
var reference = satisfiesAssertion.getReference(), axiom = context.findAxiomByReference(reference);
|
|
449
|
-
if (axiom !== null) {
|
|
450
|
-
var step = this, substitutions = [], stepUnifies = axiom.unifyStep(step, substitutions, context);
|
|
451
|
-
if (stepUnifies) {
|
|
452
|
-
var substitutionsCompare = satisfiesAssertion.compareSubstitutions(substitutions, context);
|
|
453
|
-
if (substitutionsCompare) {
|
|
454
|
-
unifiesWithSatisfiesAssertion = true;
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
if (unifiesWithSatisfiesAssertion) {
|
|
459
|
-
context.debug("...unified the '".concat(stepString, "' step with the '").concat(satisfiesAssertionString, "' satisfies assertion."));
|
|
460
|
-
}
|
|
461
|
-
return unifiesWithSatisfiesAssertion;
|
|
462
|
-
}
|
|
463
510
|
}
|
|
464
511
|
]);
|
|
465
512
|
return Step;
|
|
466
513
|
}(_proofAssertion.default), _define_property(_Step, "name", "Step"), _Step));
|
|
467
514
|
|
|
468
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3N0ZXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFByb29mQXNzZXJ0aW9uIGZyb20gXCIuLi9wcm9vZkFzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IGFzeW5jQXR0ZW1wdCwgYXN5bmNMaW1pbmFsbHkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVtZW50XCI7XG5cbmNvbnN0IHsgYXN5bmNTb21lIH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdGVwIGV4dGVuZHMgUHJvb2ZBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB0aGlzLnNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbjtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2U7XG4gIH1cblxuICBnZXRTYXRpc2ZpZXNBc3NlcnRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2F0aXNmaWVzQXNzZXJ0aW9uO1xuICB9XG5cbiAgaXNTYXRpc2ZpZWQoKSB7XG4gICAgY29uc3Qgc2F0aXNmaWVkID0gKHRoaXMuc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzYXRpc2ZpZWQ7XG4gIH1cblxuICBpc1F1YWxpZmllZCgpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSAodGhpcy5yZWZlcmVuY2UgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHF1YWxpZmllZDtcbiAgfVxuXG4gIGlzU3RhdGVkKCkge1xuICAgIGNvbnN0IHF1YWxpZmllZCA9IHRoaXMuaXNRdWFsaWZpZWQoKSxcbiAgICAgICAgICBzdGF0ZWQgPSBxdWFsaWZpZWQ7IC8vL1xuXG4gICAgcmV0dXJuIHN0YXRlZDtcbiAgfVxuXG4gIGNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbi5jb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbiwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbjtcbiAgfVxuXG4gIGFzeW5jIHZlcmlmeShhc3NpZ25tZW50cywgY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgYXdhaXQgdGhpcy5icmVhayhjb250ZXh0KTtcblxuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBhc3luY0F0dGVtcHQoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0KTtcblxuICAgICAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICAgICAgY29uc3Qgc2F0aXNmaWVzQXNzZXJ0aW9WYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlU2F0aXNmaWVzQXNzZXJ0aW9uKGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHNhdGlzZmllc0Fzc2VydGlvVmFsaWRhdGVzKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50KGFzc2lnbm1lbnRzLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlcykge1xuICAgICAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSB0aGlzLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgICAgICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb24gPSB0aGlzLmdldFNhdGlzZmllc0Fzc2VydGlvbigpLFxuICAgICAgICAgICAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVzID0gYXdhaXQgYXN5bmNMaW1pbmFsbHkoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnRVbmlmaWVzID0gYXdhaXQgYXN5bmNTb21lKGFzeW5jICh1bmlmeVN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RhdGVtZW50VW5pZmllcyA9IGF3YWl0IHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldENvbnRleHQoY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RhdGVtZW50VW5pZmllcztcbiAgICAgICAgICAgICAgICAgICAgfSwgY29udGV4dCk7XG5cbiAgICAgICAgICAgICAgaWYgKHN0YXRlbWVudFVuaWZpZXMpIHtcbiAgICAgICAgICAgICAgICB2ZXJpZmllcyA9IHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdmVyaWZpZXM7XG4gICAgICB9LCBjb250ZXh0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgVW5hYmxlIHRvIHZlcmlmeSB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYmVjYXVzZSBpdCBpcyBub25zZW5zZS5gKTtcbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICB2YWxpZGF0ZVJlZmVyZW5jZShjb250ZXh0KSB7XG4gICAgbGV0IHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRydWU7XG5cbiAgICBpZiAodGhpcy5yZWZlcmVuY2UgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAgLy8vXG4gICAgICAgICAgICByZWZlcmVuY2VTdHJpbmcgPSB0aGlzLnJlZmVyZW5jZS5nZXRTdHJpbmcoKTtcblxuICAgICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAncyAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuLi4gYCk7XG5cbiAgICAgIHJlZmVyZW5jZVZhbGlkYXRlcyA9IHRoaXMucmVmZXJlbmNlLnZhbGlkYXRlKGNvbnRleHQpO1xuXG4gICAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAncyAnJHtyZWZlcmVuY2VTdHJpbmd9JyByZWZlcmVuY2UuIGApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZWZlcmVuY2VWYWxpZGF0ZXM7XG4gIH1cblxuICB2YWxpZGF0ZVNhdGlzZmllc0Fzc2VydGlvbihjb250ZXh0KSB7XG4gICAgbGV0IHNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyA9IHRydWU7ICAvLy9cblxuICAgIGlmICh0aGlzLnNhdGlzZmllc0Fzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHRoaXMuc2F0aXNmaWVzQXNzZXJ0aW9uLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCdzICcke3NhdGlzZmllc0Fzc2VydGlvbn0nIHNhdGlzZmllcyBhc3NlcnRpb24uLi4gYCk7XG5cbiAgICAgIGNvbnN0IHN0YXRlZCA9IHRydWUsXG4gICAgICAgICAgICBhc3NpZ25tZW50cyA9IG51bGw7XG5cbiAgICAgIHNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyA9IHRoaXMuc2F0aXNmaWVzQXNzZXJ0aW9uLnZhbGlkYXRlKGFzc2lnbm1lbnRzLCBzdGF0ZWQsIGNvbnRleHQpO1xuXG4gICAgICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7c2F0aXNmaWVzQXNzZXJ0aW9ufScgc2F0aXNmaWVzIGFzc2VydGlvbi4gYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcztcbiAgfVxuXG4gIHVuaWZ5V2l0aFNhdGlzZmllc0Fzc2VydGlvbihzYXRpc2ZpZXNBc3NlcnRpb24sIGNvbnRleHQpIHtcbiAgICBsZXQgdW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpLCAvLy9cbiAgICAgICAgICBzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmcgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nfScgc2F0aXNmaWVzIGFzc2VydGlvbi4uLmApO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgIGF4aW9tID0gY29udGV4dC5maW5kQXhpb21CeVJlZmVyZW5jZShyZWZlcmVuY2UpO1xuXG4gICAgaWYgKGF4aW9tICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwID0gdGhpcywgIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9ucyA9IFtdLFxuICAgICAgICAgICAgc3RlcFVuaWZpZXMgPSBheGlvbS51bmlmeVN0ZXAoc3RlcCwgc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICAgIGlmIChzdGVwVW5pZmllcykge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25zQ29tcGFyZSA9IHNhdGlzZmllc0Fzc2VydGlvbi5jb21wYXJlU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uc0NvbXBhcmUpIHtcbiAgICAgICAgICB1bmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwIHdpdGggdGhlICcke3NhdGlzZmllc0Fzc2VydGlvblN0cmluZ30nIHNhdGlzZmllcyBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN0ZXBcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImFzeW5jU29tZSIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImRlZmluZSIsIlN0ZXAiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsImdldFJlZmVyZW5jZSIsImdldFNhdGlzZmllc0Fzc2VydGlvbiIsImlzU2F0aXNmaWVkIiwic2F0aXNmaWVkIiwiaXNRdWFsaWZpZWQiLCJxdWFsaWZpZWQiLCJpc1N0YXRlZCIsInN0YXRlZCIsImNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbiIsInRlcm0iLCJwcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwiZ2V0U3RhdGVtZW50IiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2ZXJpZnkiLCJhc3NpZ25tZW50cyIsInZlcmlmaWVzIiwic3RlcFN0cmluZyIsImJyZWFrIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJhc3luY0F0dGVtcHQiLCJyZWZlcmVuY2VWYWxpZGF0ZXMiLCJzYXRpc2ZpZXNBc3NlcnRpb1ZhbGlkYXRlcyIsInN0YXRlbWVudFZhbGlkYXRlcyIsInN0YXRlbWVudFVuaWZpZXMiLCJ2YWxpZGF0ZVJlZmVyZW5jZSIsInZhbGlkYXRlU2F0aXNmaWVzQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJhc3luY0xpbWluYWxseSIsInVuaWZ5U3RhdGVtZW50Iiwic2V0Q29udGV4dCIsImRlYnVnIiwicmVmZXJlbmNlU3RyaW5nIiwidmFsaWRhdGUiLCJzYXRpc2ZpZXNBc3NlcnRpb25WYWxpZGF0ZXMiLCJ1bmlmeVdpdGhTYXRpc2ZpZXNBc3NlcnRpb24iLCJ1bmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiIsInNhdGlzZmllc0Fzc2VydGlvblN0cmluZyIsImF4aW9tIiwiZmluZEF4aW9tQnlSZWZlcmVuY2UiLCJzdGVwIiwic3Vic3RpdHV0aW9ucyIsInN0ZXBVbmlmaWVzIiwidW5pZnlTdGVwIiwic3Vic3RpdHV0aW9uc0NvbXBhcmUiLCJjb21wYXJlU3Vic3RpdHV0aW9ucyIsIlByb29mQXNzZXJ0aW9uIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBWUE7OztlQUFBOzs7OEJBVnNDO3FFQUVYO3dCQUVKO3VCQUNzQjt5QkFDRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
|
|
515
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50L3Byb29mQXNzZXJ0aW9uL3N0ZXAuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IFByb29mQXNzZXJ0aW9uIGZyb20gXCIuLi9wcm9vZkFzc2VydGlvblwiO1xuXG5pbXBvcnQgeyBkZWZpbmUgfSBmcm9tIFwiLi4vLi4vZWxlbWVudHNcIjtcbmltcG9ydCB7IHVuaWZ5U3RhdGVtZW50cyB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvdW5pZmljYXRpb25cIjtcbmltcG9ydCB7IGFzeW5jQXR0ZW1wdCwgYXN5bmNMaW1pbmFsbHkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi8uLi91dGlsaXRpZXMvc3RhdGVtZW50XCI7XG5cbmNvbnN0IHsgYXN5bmNTb21lIH0gPSBhc3luY2hyb25vdXNVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmluZShjbGFzcyBTdGVwIGV4dGVuZHMgUHJvb2ZBc3NlcnRpb24ge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCwgcmVmZXJlbmNlLCBzYXRpc2ZpZXNBc3NlcnRpb24pIHtcbiAgICBzdXBlcihjb250ZXh0LCBzdHJpbmcsIG5vZGUsIHN0YXRlbWVudCk7XG5cbiAgICB0aGlzLnJlZmVyZW5jZSA9IHJlZmVyZW5jZTtcbiAgICB0aGlzLnNhdGlzZmllc0Fzc2VydGlvbiA9IHNhdGlzZmllc0Fzc2VydGlvbjtcbiAgfVxuXG4gIGdldFJlZmVyZW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZWZlcmVuY2U7XG4gIH1cblxuICBnZXRTYXRpc2ZpZXNBc3NlcnRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc2F0aXNmaWVzQXNzZXJ0aW9uO1xuICB9XG5cbiAgaXNTYXRpc2ZpZWQoKSB7XG4gICAgY29uc3Qgc2F0aXNmaWVkID0gKHRoaXMuc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzYXRpc2ZpZWQ7XG4gIH1cblxuICBpc1F1YWxpZmllZCgpIHtcbiAgICBjb25zdCBxdWFsaWZpZWQgPSAodGhpcy5yZWZlcmVuY2UgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHF1YWxpZmllZDtcbiAgfVxuXG4gIGlzU3RhdGVkKCkge1xuICAgIGNvbnN0IHF1YWxpZmllZCA9IHRoaXMuaXNRdWFsaWZpZWQoKSxcbiAgICAgICAgICBzdGF0ZWQgPSBxdWFsaWZpZWQ7IC8vL1xuXG4gICAgcmV0dXJuIHN0YXRlZDtcbiAgfVxuXG4gIGNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbih0ZXJtLCBwcm9wZXJ0eVJlbGF0aW9uLCBjb250ZXh0KSB7XG4gICAgbGV0IGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbiA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IHByb3BlcnR5QXNzZXJ0aW9uRnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gICAgaWYgKHByb3BlcnR5QXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb21wYXJlc1RvVGVybUFuZFByb3BlcnR5UmVsYXRpb24gPSBwcm9wZXJ0eUFzc2VydGlvbi5jb21wYXJlVGVybUFuZFByb3BlcnR5UmVsYXRpb24odGVybSwgcHJvcGVydHlSZWxhdGlvbiwgY29udGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbXBhcmVzVG9UZXJtQW5kUHJvcGVydHlSZWxhdGlvbjtcbiAgfVxuXG4gIHZhbGlkYXRlKGFzc2lnbm1lbnRzLCBjb250ZXh0KSB7XG4gICAgbGV0IHZhbGlkYXRlcyA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCk7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAuLi5gKTtcblxuICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuZ2V0U3RhdGVtZW50KCk7XG5cbiAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICBjb25zdCByZWZlcmVuY2VWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlUmVmZXJlbmNlKGNvbnRleHQpO1xuXG4gICAgICBpZiAocmVmZXJlbmNlVmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IHNhdGlzZmllc0Fzc2VydGlvVmFsaWRhdGVzID0gdGhpcy52YWxpZGF0ZVNhdGlzZmllc0Fzc2VydGlvbihjb250ZXh0KTtcblxuICAgICAgICBpZiAoc2F0aXNmaWVzQXNzZXJ0aW9WYWxpZGF0ZXMpIHtcbiAgICAgICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXMgPSB0aGlzLnZhbGlkYXRlU3RhdGVtZW50KGFzc2lnbm1lbnRzLCBjb250ZXh0KTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXMpIHtcbiAgICAgICAgICAgIHZhbGlkYXRlcyA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYFVuYWJsZSB0byB2YWxpZGF0ZSB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgYmVjYXVzZSBpdCBpcyBub25zZW5zZS5gKTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZSB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlUmVmZXJlbmNlKGNvbnRleHQpIHtcbiAgICBsZXQgcmVmZXJlbmNlVmFsaWRhdGVzID0gdHJ1ZTtcblxuICAgIGlmICh0aGlzLnJlZmVyZW5jZSAhPT0gbnVsbCkge1xuICAgICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksICAvLy9cbiAgICAgICAgICAgIHJlZmVyZW5jZVN0cmluZyA9IHRoaXMucmVmZXJlbmNlLmdldFN0cmluZygpO1xuXG4gICAgICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCdzICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4uLiBgKTtcblxuICAgICAgcmVmZXJlbmNlVmFsaWRhdGVzID0gdGhpcy5yZWZlcmVuY2UudmFsaWRhdGUoY29udGV4dCk7XG5cbiAgICAgIGlmIChyZWZlcmVuY2VWYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCdzICcke3JlZmVyZW5jZVN0cmluZ30nIHJlZmVyZW5jZS4gYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlZmVyZW5jZVZhbGlkYXRlcztcbiAgfVxuXG4gIHZhbGlkYXRlU2F0aXNmaWVzQXNzZXJ0aW9uKGNvbnRleHQpIHtcbiAgICBsZXQgc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzID0gdHJ1ZTsgIC8vL1xuXG4gICAgaWYgKHRoaXMuc2F0aXNmaWVzQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGVwU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKSwgIC8vL1xuICAgICAgICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uID0gdGhpcy5zYXRpc2ZpZXNBc3NlcnRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwJ3MgJyR7c2F0aXNmaWVzQXNzZXJ0aW9ufScgc2F0aXNmaWVzIGFzc2VydGlvbi4uLiBgKTtcblxuICAgICAgY29uc3Qgc3RhdGVkID0gdHJ1ZSxcbiAgICAgICAgICAgIGFzc2lnbm1lbnRzID0gbnVsbDtcblxuICAgICAgc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzID0gdGhpcy5zYXRpc2ZpZXNBc3NlcnRpb24udmFsaWRhdGUoYXNzaWdubWVudHMsIHN0YXRlZCwgY29udGV4dCk7XG5cbiAgICAgIGlmIChzYXRpc2ZpZXNBc3NlcnRpb25WYWxpZGF0ZXMpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGluZyB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAncyAnJHtzYXRpc2ZpZXNBc3NlcnRpb259JyBzYXRpc2ZpZXMgYXNzZXJ0aW9uLiBgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc2F0aXNmaWVzQXNzZXJ0aW9uVmFsaWRhdGVzO1xuICB9XG5cbiAgdW5pZnlXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uKHNhdGlzZmllc0Fzc2VydGlvbiwgY29udGV4dCkge1xuICAgIGxldCB1bmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFN0cmluZyA9IHRoaXMuZ2V0U3RyaW5nKCksIC8vL1xuICAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvblN0cmluZyA9IHNhdGlzZmllc0Fzc2VydGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcCB3aXRoIHRoZSAnJHtzYXRpc2ZpZXNBc3NlcnRpb25TdHJpbmd9JyBzYXRpc2ZpZXMgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgICBjb25zdCByZWZlcmVuY2UgPSBzYXRpc2ZpZXNBc3NlcnRpb24uZ2V0UmVmZXJlbmNlKCksXG4gICAgICAgICAgYXhpb20gPSBjb250ZXh0LmZpbmRBeGlvbUJ5UmVmZXJlbmNlKHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoYXhpb20gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLCAgLy8vXG4gICAgICAgICAgICBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgICBzdGVwVW5pZmllcyA9IGF4aW9tLnVuaWZ5U3RlcChzdGVwLCBzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgICAgaWYgKHN0ZXBVbmlmaWVzKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNDb21wYXJlID0gc2F0aXNmaWVzQXNzZXJ0aW9uLmNvbXBhcmVTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMsIGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25zQ29tcGFyZSkge1xuICAgICAgICAgIHVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1bmlmaWVzV2l0aFNhdGlzZmllc0Fzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udW5pZmllZCB0aGUgJyR7c3RlcFN0cmluZ30nIHN0ZXAgd2l0aCB0aGUgJyR7c2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nfScgc2F0aXNmaWVzIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5pZmllc1dpdGhTYXRpc2ZpZXNBc3NlcnRpb247XG4gIH1cblxuICBhc3luYyB2ZXJpZnkoYXNzaWdubWVudHMsIGNvbnRleHQpIHtcbiAgICBsZXQgdmVyaWZpZXMgPSBmYWxzZTtcblxuICAgIGF3YWl0IHRoaXMuYnJlYWsoY29udGV4dCk7XG5cbiAgICBjb25zdCBzdGVwU3RyaW5nID0gdGhpcy5nZXRTdHJpbmcoKTsgLy8vXG5cbiAgICBjb250ZXh0LnRyYWNlKGBWZXJpZnlpbmcgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLi4uYCk7XG5cbiAgICBhd2FpdCBhc3luY0F0dGVtcHQoYXN5bmMgKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHZhbGlkYXRlcyA9IHRoaXMudmFsaWRhdGUoYXNzaWdubWVudHMsIGNvbnRleHQpO1xuXG4gICAgICBpZiAodmFsaWRhdGVzKSB7XG4gICAgICAgIGNvbnN0IHVuaWZpZXMgPSBhd2FpdCB0aGlzLnVuaWZ5KGNvbnRleHQpO1xuXG4gICAgICAgIGlmICh1bmlmaWVzKSB7XG4gICAgICAgICAgdGhpcy5zZXRDb250ZXh0KGNvbnRleHQpO1xuXG4gICAgICAgICAgdmVyaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodmVyaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZlcmlmaWVkIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICBhc3luYyB1bmlmeShjb250ZXh0KSB7XG4gICAgbGV0IHVuaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN0ZXBTdHJpbmcgPSB0aGlzLmdldFN0cmluZygpOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGVwU3RyaW5nfScgc3RlcC4uLmApO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgICByZWZlcmVuY2UgPSB0aGlzLmdldFJlZmVyZW5jZSgpLFxuICAgICAgICAgIHNhdGlzZmllc0Fzc2VydGlvbiA9IHRoaXMuZ2V0U2F0aXNmaWVzQXNzZXJ0aW9uKCksXG4gICAgICAgICAgc3RhdGVtZW50VW5pZmllcyA9IGF3YWl0IGFzeW5jTGltaW5hbGx5KGFzeW5jIChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZW1lbnRVbmlmaWVzID0gYXdhaXQgYXN5bmNTb21lKHVuaWZ5U3RhdGVtZW50cywgYXN5bmMgKHVuaWZ5U3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHN0YXRlbWVudFVuaWZpZXMgPSBhd2FpdCB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHJlZmVyZW5jZSwgc2F0aXNmaWVzQXNzZXJ0aW9uLCBjb250ZXh0KTtcblxuICAgICAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZXM7XG4gICAgICAgICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgdW5pZmllcyA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHVuaWZpZXMpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0ZXBTdHJpbmd9JyBzdGVwLmApO1xuICAgIH1cblxuICAgIHJldHVybiB1bmlmaWVzO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIlN0ZXBcIjtcbn0pO1xuIl0sIm5hbWVzIjpbImFzeW5jU29tZSIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImRlZmluZSIsIlN0ZXAiLCJjb250ZXh0Iiwic3RyaW5nIiwibm9kZSIsInN0YXRlbWVudCIsInJlZmVyZW5jZSIsInNhdGlzZmllc0Fzc2VydGlvbiIsImdldFJlZmVyZW5jZSIsImdldFNhdGlzZmllc0Fzc2VydGlvbiIsImlzU2F0aXNmaWVkIiwic2F0aXNmaWVkIiwiaXNRdWFsaWZpZWQiLCJxdWFsaWZpZWQiLCJpc1N0YXRlZCIsInN0YXRlZCIsImNvbXBhcmVUZXJtQW5kUHJvcGVydHlSZWxhdGlvbiIsInRlcm0iLCJwcm9wZXJ0eVJlbGF0aW9uIiwiY29tcGFyZXNUb1Rlcm1BbmRQcm9wZXJ0eVJlbGF0aW9uIiwiZ2V0U3RhdGVtZW50IiwicHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbkZyb21TdGF0ZW1lbnQiLCJ2YWxpZGF0ZSIsImFzc2lnbm1lbnRzIiwidmFsaWRhdGVzIiwic3RlcFN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwicmVmZXJlbmNlVmFsaWRhdGVzIiwidmFsaWRhdGVSZWZlcmVuY2UiLCJzYXRpc2ZpZXNBc3NlcnRpb1ZhbGlkYXRlcyIsInZhbGlkYXRlU2F0aXNmaWVzQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzIiwidmFsaWRhdGVTdGF0ZW1lbnQiLCJkZWJ1ZyIsInJlZmVyZW5jZVN0cmluZyIsInNhdGlzZmllc0Fzc2VydGlvblZhbGlkYXRlcyIsInVuaWZ5V2l0aFNhdGlzZmllc0Fzc2VydGlvbiIsInVuaWZpZXNXaXRoU2F0aXNmaWVzQXNzZXJ0aW9uIiwic2F0aXNmaWVzQXNzZXJ0aW9uU3RyaW5nIiwiYXhpb20iLCJmaW5kQXhpb21CeVJlZmVyZW5jZSIsInN0ZXAiLCJzdWJzdGl0dXRpb25zIiwic3RlcFVuaWZpZXMiLCJ1bmlmeVN0ZXAiLCJzdWJzdGl0dXRpb25zQ29tcGFyZSIsImNvbXBhcmVTdWJzdGl0dXRpb25zIiwidmVyaWZ5IiwidmVyaWZpZXMiLCJicmVhayIsImFzeW5jQXR0ZW1wdCIsInVuaWZpZXMiLCJ1bmlmeSIsInNldENvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiYXN5bmNMaW1pbmFsbHkiLCJ1bmlmeVN0YXRlbWVudHMiLCJ1bmlmeVN0YXRlbWVudCIsIlByb29mQXNzZXJ0aW9uIiwibmFtZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7K0JBYUE7OztlQUFBOzs7OEJBWHNDO3FFQUVYO3dCQUVKOzJCQUNTO3VCQUNhO3lCQUNFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFL0MsSUFB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
|