occam-nominal 1.0.310 → 1.0.317
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/liminal.js +17 -15
- package/lib/context/phaneric.js +3 -3
- package/lib/context.js +3 -3
- package/lib/element/assertion/contained.js +19 -17
- package/lib/element/assertion/defined.js +16 -14
- package/lib/element/conclusion.js +10 -11
- package/lib/element/declaration/variable.js +2 -2
- package/lib/element/deduction.js +7 -7
- package/lib/element/equality.js +3 -3
- package/lib/element/frame.js +8 -3
- package/lib/element/goal.js +7 -8
- package/lib/element/judgement.js +8 -10
- package/lib/element/metavariable.js +44 -40
- package/lib/element/proof.js +2 -2
- package/lib/element/proofAssertion/premise.js +17 -21
- package/lib/element/proofAssertion/step.js +5 -5
- package/lib/element/proofAssertion/supposition.js +39 -35
- package/lib/element/rule.js +24 -22
- package/lib/element/statement.js +56 -32
- package/lib/element/substitution/frame.js +71 -62
- package/lib/element/substitution/reference.js +21 -21
- package/lib/element/substitution/statement.js +81 -98
- package/lib/element/substitution/term.js +76 -67
- package/lib/element/substitution.js +5 -5
- package/lib/element/term.js +2 -2
- package/lib/element/topLevelAssertion/axiom.js +4 -5
- package/lib/element/topLevelAssertion/conjecture.js +3 -3
- package/lib/element/topLevelAssertion/lemma.js +3 -3
- package/lib/element/topLevelAssertion/theorem.js +3 -3
- package/lib/element/topLevelAssertion.js +59 -69
- package/lib/node/metavariable.js +18 -1
- package/lib/process/unify.js +5 -7
- package/lib/process/validation.js +5 -2
- package/lib/utilities/element.js +34 -56
- package/package.json +2 -2
- package/src/context/liminal.js +18 -16
- package/src/context/phaneric.js +3 -3
- package/src/context.js +2 -2
- package/src/element/assertion/contained.js +19 -18
- package/src/element/assertion/defined.js +16 -16
- package/src/element/conclusion.js +9 -11
- package/src/element/declaration/variable.js +1 -1
- package/src/element/deduction.js +6 -6
- package/src/element/equality.js +2 -2
- package/src/element/frame.js +10 -2
- package/src/element/goal.js +6 -8
- package/src/element/judgement.js +7 -11
- package/src/element/metavariable.js +56 -52
- package/src/element/proof.js +1 -1
- package/src/element/proofAssertion/premise.js +17 -25
- package/src/element/proofAssertion/step.js +4 -4
- package/src/element/proofAssertion/supposition.js +44 -43
- package/src/element/rule.js +27 -25
- package/src/element/statement.js +71 -41
- package/src/element/substitution/frame.js +88 -82
- package/src/element/substitution/reference.js +30 -32
- package/src/element/substitution/statement.js +97 -132
- package/src/element/substitution/term.js +95 -89
- package/src/element/substitution.js +6 -6
- package/src/element/term.js +1 -1
- package/src/element/topLevelAssertion/axiom.js +3 -5
- package/src/element/topLevelAssertion/conjecture.js +2 -2
- package/src/element/topLevelAssertion/lemma.js +2 -2
- package/src/element/topLevelAssertion/theorem.js +2 -2
- package/src/element/topLevelAssertion.js +61 -80
- package/src/node/metavariable.js +28 -1
- package/src/process/unify.js +7 -16
- package/src/process/validation.js +5 -4
- package/src/utilities/element.js +49 -64
package/lib/node/metavariable.js
CHANGED
|
@@ -11,6 +11,23 @@ Object.defineProperty(exports, "default", {
|
|
|
11
11
|
const _occamlanguages = require("occam-languages");
|
|
12
12
|
const _ruleNames = require("../ruleNames");
|
|
13
13
|
class MetavariableNode extends _occamlanguages.NonTerminalNode {
|
|
14
|
+
getSiblingSubstitutionNode() {
|
|
15
|
+
let siblingSubstitutionNode = null;
|
|
16
|
+
const parentStatementNode = this.getParentStatementNode();
|
|
17
|
+
if (parentStatementNode !== null) {
|
|
18
|
+
const substitutionNode = parentStatementNode.getSubstitutionNode();
|
|
19
|
+
siblingSubstitutionNode = substitutionNode; ///
|
|
20
|
+
}
|
|
21
|
+
return siblingSubstitutionNode;
|
|
22
|
+
}
|
|
23
|
+
getParentStatementNode() {
|
|
24
|
+
let parentStatementNode = null;
|
|
25
|
+
const parentNode = this.getParentNode(), parentNodeRuleName = parentNode.getRuleName();
|
|
26
|
+
if (parentNodeRuleName === _ruleNames.STATEMENT_RULE_NAME) {
|
|
27
|
+
parentStatementNode = parentNode; ///
|
|
28
|
+
}
|
|
29
|
+
return parentStatementNode;
|
|
30
|
+
}
|
|
14
31
|
getMetavariableName() {
|
|
15
32
|
let metavariableName;
|
|
16
33
|
this.someChildNode((childNode)=>{
|
|
@@ -36,4 +53,4 @@ class MetavariableNode extends _occamlanguages.NonTerminalNode {
|
|
|
36
53
|
}
|
|
37
54
|
}
|
|
38
55
|
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9ub2RlL21ldGF2YXJpYWJsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IHsgTm9uVGVybWluYWxOb2RlIH0gZnJvbSBcIm9jY2FtLWxhbmd1YWdlc1wiO1xuXG5pbXBvcnQgeyBURVJNX1JVTEVfTkFNRSwgVFlQRV9SVUxFX05BTUUsIFNUQVRFTUVOVF9SVUxFX05BTUUgfSBmcm9tIFwiLi4vcnVsZU5hbWVzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldGF2YXJpYWJsZU5vZGUgZXh0ZW5kcyBOb25UZXJtaW5hbE5vZGUge1xuICBnZXRTaWJsaW5nU3Vic3RpdHV0aW9uTm9kZSgpIHtcbiAgICBsZXQgc2libGluZ1N1YnN0aXR1dGlvbk5vZGUgPSBudWxsO1xuXG4gICAgY29uc3QgcGFyZW50U3RhdGVtZW50Tm9kZSA9IHRoaXMuZ2V0UGFyZW50U3RhdGVtZW50Tm9kZSgpO1xuXG4gICAgaWYgKHBhcmVudFN0YXRlbWVudE5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGUgPSBwYXJlbnRTdGF0ZW1lbnROb2RlLmdldFN1YnN0aXR1dGlvbk5vZGUoKTtcblxuICAgICAgc2libGluZ1N1YnN0aXR1dGlvbk5vZGUgPSBzdWJzdGl0dXRpb25Ob2RlOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc2libGluZ1N1YnN0aXR1dGlvbk5vZGU7XG4gIH1cblxuICBnZXRQYXJlbnRTdGF0ZW1lbnROb2RlKCkge1xuICAgIGxldCBwYXJlbnRTdGF0ZW1lbnROb2RlID0gbnVsbDtcblxuICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLmdldFBhcmVudE5vZGUoKSxcbiAgICAgICAgICBwYXJlbnROb2RlUnVsZU5hbWUgPSBwYXJlbnROb2RlLmdldFJ1bGVOYW1lKCk7XG5cbiAgICBpZiAocGFyZW50Tm9kZVJ1bGVOYW1lID09PSBTVEFURU1FTlRfUlVMRV9OQU1FKSB7XG4gICAgICBwYXJlbnRTdGF0ZW1lbnROb2RlID0gcGFyZW50Tm9kZTsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcmVudFN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOYW1lKCkge1xuICAgIGxldCBtZXRhdmFyaWFibGVOYW1lO1xuXG4gICAgdGhpcy5zb21lQ2hpbGROb2RlKChjaGlsZE5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGNoaWxkTm9kZVRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gICAgICBpZiAoY2hpbGROb2RlVGVybWluYWxOb2RlKSB7XG4gICAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IGNoaWxkTm9kZSwgLy8vXG4gICAgICAgICAgICAgIGNvbnRlbnQgPSB0ZXJtaW5hbE5vZGUuZ2V0Q29udGVudCgpO1xuXG4gICAgICAgIG1ldGF2YXJpYWJsZU5hbWUgPSBjb250ZW50OyAvLy9cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lO1xuICB9XG5cbiAgZ2V0VGVybU5vZGUoKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBURVJNX1JVTEVfTkFNRSxcbiAgICAgICAgICB0ZXJtTm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5UnVsZU5hbWUocnVsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHRlcm1Ob2RlO1xuICB9XG5cbiAgZ2V0VHlwZU5vZGUoKSB7XG4gICAgY29uc3QgcnVsZU5hbWUgPSBUWVBFX1JVTEVfTkFNRSxcbiAgICAgICAgICB0eXBlTm9kZSA9IHRoaXMuZ2V0Tm9kZUJ5UnVsZU5hbWUocnVsZU5hbWUpO1xuXG4gICAgcmV0dXJuIHR5cGVOb2RlO1xuICB9XG5cbiAgc3RhdGljIGZyb21SdWxlTmFtZUNoaWxkTm9kZXNPcGFjaXR5QW5kUHJlY2VkZW5jZShydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSkgeyByZXR1cm4gTm9uVGVybWluYWxOb2RlLmZyb21SdWxlTmFtZUNoaWxkTm9kZXNPcGFjaXR5QW5kUHJlY2VkZW5jZShNZXRhdmFyaWFibGVOb2RlLCBydWxlTmFtZSwgY2hpbGROb2Rlcywgb3BhY2l0eSwgcHJlY2VkZW5jZSk7IH1cbn1cbiJdLCJuYW1lcyI6WyJNZXRhdmFyaWFibGVOb2RlIiwiTm9uVGVybWluYWxOb2RlIiwiZ2V0U2libGluZ1N1YnN0aXR1dGlvbk5vZGUiLCJzaWJsaW5nU3Vic3RpdHV0aW9uTm9kZSIsInBhcmVudFN0YXRlbWVudE5vZGUiLCJnZXRQYXJlbnRTdGF0ZW1lbnROb2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsImdldFN1YnN0aXR1dGlvbk5vZGUiLCJwYXJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsInBhcmVudE5vZGVSdWxlTmFtZSIsImdldFJ1bGVOYW1lIiwiU1RBVEVNRU5UX1JVTEVfTkFNRSIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwic29tZUNoaWxkTm9kZSIsImNoaWxkTm9kZSIsImNoaWxkTm9kZVRlcm1pbmFsTm9kZSIsImlzVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwiY29udGVudCIsImdldENvbnRlbnQiLCJnZXRUZXJtTm9kZSIsInJ1bGVOYW1lIiwiVEVSTV9SVUxFX05BTUUiLCJ0ZXJtTm9kZSIsImdldE5vZGVCeVJ1bGVOYW1lIiwiZ2V0VHlwZU5vZGUiLCJUWVBFX1JVTEVfTkFNRSIsInR5cGVOb2RlIiwiZnJvbVJ1bGVOYW1lQ2hpbGROb2Rlc09wYWNpdHlBbmRQcmVjZWRlbmNlIiwiY2hpbGROb2RlcyIsIm9wYWNpdHkiLCJwcmVjZWRlbmNlIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFNQTs7O2VBQXFCQTs7O2dDQUpXOzJCQUVvQztBQUVyRCxNQUFNQSx5QkFBeUJDLCtCQUFlO0lBQzNEQyw2QkFBNkI7UUFDM0IsSUFBSUMsMEJBQTBCO1FBRTlCLE1BQU1DLHNCQUFzQixJQUFJLENBQUNDLHNCQUFzQjtRQUV2RCxJQUFJRCx3QkFBd0IsTUFBTTtZQUNoQyxNQUFNRSxtQkFBbUJGLG9CQUFvQkcsbUJBQW1CO1lBRWhFSiwwQkFBMEJHLGtCQUFrQixHQUFHO1FBQ2pEO1FBRUEsT0FBT0g7SUFDVDtJQUVBRSx5QkFBeUI7UUFDdkIsSUFBSUQsc0JBQXNCO1FBRTFCLE1BQU1JLGFBQWEsSUFBSSxDQUFDQyxhQUFhLElBQy9CQyxxQkFBcUJGLFdBQVdHLFdBQVc7UUFFakQsSUFBSUQsdUJBQXVCRSw4QkFBbUIsRUFBRTtZQUM5Q1Isc0JBQXNCSSxZQUFZLEdBQUc7UUFDdkM7UUFFQSxPQUFPSjtJQUNUO0lBRUFTLHNCQUFzQjtRQUNwQixJQUFJQztRQUVKLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUNDO1lBQ2xCLE1BQU1DLHdCQUF3QkQsVUFBVUUsY0FBYztZQUV0RCxJQUFJRCx1QkFBdUI7Z0JBQ3pCLE1BQU1FLGVBQWVILFdBQ2ZJLFVBQVVELGFBQWFFLFVBQVU7Z0JBRXZDUCxtQkFBbUJNLFNBQVMsR0FBRztnQkFFL0IsT0FBTztZQUNUO1FBQ0Y7UUFFQSxPQUFPTjtJQUNUO0lBRUFRLGNBQWM7UUFDWixNQUFNQyxXQUFXQyx5QkFBYyxFQUN6QkMsV0FBVyxJQUFJLENBQUNDLGlCQUFpQixDQUFDSDtRQUV4QyxPQUFPRTtJQUNUO0lBRUFFLGNBQWM7UUFDWixNQUFNSixXQUFXSyx5QkFBYyxFQUN6QkMsV0FBVyxJQUFJLENBQUNILGlCQUFpQixDQUFDSDtRQUV4QyxPQUFPTTtJQUNUO0lBRUEsT0FBT0MsMkNBQTJDUCxRQUFRLEVBQUVRLFVBQVUsRUFBRUMsT0FBTyxFQUFFQyxVQUFVLEVBQUU7UUFBRSxPQUFPaEMsK0JBQWUsQ0FBQzZCLDBDQUEwQyxDQUFDOUIsa0JBQWtCdUIsVUFBVVEsWUFBWUMsU0FBU0M7SUFBYTtBQUNqTyJ9
|
package/lib/process/unify.js
CHANGED
|
@@ -149,15 +149,13 @@ class MetaLevelPass extends _occamlanguages.ContinuationZipPass {
|
|
|
149
149
|
generalNodeQuery: statementMetavariableNodeQuery,
|
|
150
150
|
specificNodeQuery: statementNodeQuery,
|
|
151
151
|
run: (generalStatementMetavariableNode, specificStatementNode, generalContext, specificContext, continuation)=>{
|
|
152
|
-
|
|
152
|
+
const statementNode = specificStatementNode, metavariableNode = generalStatementMetavariableNode;
|
|
153
|
+
let context;
|
|
153
154
|
context = generalContext; ///
|
|
154
|
-
const
|
|
155
|
-
statementNode = metavariableNodeParentNode; ///
|
|
156
|
-
const substitutionNode = statementNode.getSubstitutionNode(), substitution = substitutionNode !== null ? context.findSubstitutionBySubstitutionNode(substitutionNode) : null;
|
|
155
|
+
const metavariable = context.findMetavariableByMetavariableNode(metavariableNode);
|
|
157
156
|
context = specificContext; ///
|
|
158
|
-
statementNode = specificStatementNode; ///
|
|
159
157
|
const statement = context.findStatementByStatementNode(statementNode);
|
|
160
|
-
metavariable.unifyStatement(statement,
|
|
158
|
+
metavariable.unifyStatement(statement, generalContext, specificContext, (statementUnifies)=>{
|
|
161
159
|
let success = false;
|
|
162
160
|
if (statementUnifies) {
|
|
163
161
|
success = true;
|
|
@@ -384,4 +382,4 @@ function unifyMetavariableIntrinsically(generalMetavariable, specificMetavariabl
|
|
|
384
382
|
return intrinsicMetavariablePass.run(generalNode, specificNode, generalContext, specificContext, continuation);
|
|
385
383
|
}
|
|
386
384
|
|
|
387
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgQ29udGludWF0aW9uWmlwUGFzcyBhcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENvbnRpbnVhdGlvblppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvY29udGludWF0aW9uWmlwXCI7XG5cbmltcG9ydCB7IHJlY29uY2lsZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUsIFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSB9IGZyb20gXCIuLi9tZXRhVHlwZU5hbWVzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBmcmFtZUZyb21GcmFtZU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZVwiKSxcbiAgICAgIHNpZ25hdHVyZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zaWduYXR1cmVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXNzdW1wdGlvbi9tZXRhdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdHJpY3QgPSBmYWxzZTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RyaWN0LCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEdlbmVyYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhTGV2ZWxQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzc0Jhc2Uge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgY29udGV4dCxcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlOyAgLy8vXG5cbiAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAocmVmZXJlbmNlVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBjb250ZXh0LFxuICAgICAgICAgICAgc3RhdGVtZW50Tm9kZTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsU3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlID0gbWV0YXZhcmlhYmxlTm9kZS5nZXRQYXJlbnROb2RlKCk7XG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlOyAvLy9cblxuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3RhdGVtZW50Tm9kZS5nZXRTdWJzdGl0dXRpb25Ob2RlKCksXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dC5maW5kU3Vic3RpdHV0aW9uQnlTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGw7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgc3RhdGVtZW50Tm9kZSA9IHNwZWNpZmljU3RhdGVtZW50Tm9kZTsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb24sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChzdGF0ZW1lbnRVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IGZyYW1lTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGZyYW1lTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNGcmFtZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCBmcmFtZU5vZGUgPSBzcGVjaWZpY0ZyYW1lTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsRnJhbWVNZXRhdmFyaWFibGVOb2RlO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlID0gY29udGV4dC5maW5kTWV0YXZhcmlhYmxlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCBmcmFtZSA9IGNvbnRleHQuZmluZEZyYW1lQnlGcmFtZU5vZGUoZnJhbWVOb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlGcmFtZShmcmFtZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKGZyYW1lVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoZnJhbWVVbmlmaWVzKSB7XG4gICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzaWduYXR1cmVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc2lnbmF0dXJlTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFNpZ25hdHVyZU5vZGUsIHNwZWNpZmljU2lnbmF0dXJlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgZ2VuZXJhbFNpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShnZW5lcmFsU2lnbmF0dXJlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHNwZWNpZmljU2lnbmF0dXJlID0gY29udGV4dC5maW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlKHNwZWNpZmljU2lnbmF0dXJlTm9kZSk7XG5cbiAgICAgICAgcmVjb25jaWxlKChjb250ZXh0KSA9PiB7XG4gICAgICAgICAgZ2VuZXJhbFNpZ25hdHVyZS51bmlmeVNpZ25hdHVyZShzcGVjaWZpY1NpZ25hdHVyZSwgY29udGV4dCwgKHNpZ25hdHVyZVVuaWZpZXMpID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChzaWduYXR1cmVVbmlmaWVzKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCBjb250ZXh0KVxuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgQ29tYmluYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbE1ldGFUeXBlTm9kZSwgc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gU1RBVEVNRU5UX01FVEFfVFlQRV9OQU1FKTtcblxuICAgICAgICBpZiAobWV0YVR5cGVOYW1lU3RhdGVtZW50TWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHN0YXRlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoc3RhdGVtZW50KSA9PiB7XG4gICAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc3RhdGVtZW50ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBtZXRhVHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxNZXRhVHlwZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgbWV0YVR5cGVOb2RlID0gZ2VuZXJhbE1ldGFUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZSA9IG1ldGFUeXBlTm9kZS5nZXRNZXRhVHlwZU5hbWUoKSxcbiAgICAgICAgICAgICAgbWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUgPSAobWV0YVR5cGVOYW1lID09PSBGUkFNRV9NRVRBX1RZUEVfTkFNRSk7XG5cbiAgICAgICAgaWYgKG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lTm9kZSA9IHNwZWNpZmljRnJhbWVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgZnJhbWUgPSBmcmFtZUZyb21GcmFtZU5vZGUoZnJhbWVOb2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIGZyYW1lLnZhbGlkYXRlKGNvbnRleHQsIChmcmFtZSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGZyYW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0eXBlTm9kZSA9IGdlbmVyYWxUeXBlTm9kZSwgLy8vXG4gICAgICAgICAgICAgIHRlcm1Ob2RlID0gc3BlY2lmaWNUZXJtTm9kZSwgLy8vXG4gICAgICAgICAgICAgIG5vbWluYWxUeXBlTmFtZSA9IHR5cGVOb2RlLmdldE5vbWluYWxUeXBlTmFtZSgpO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQuZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZShub21pbmFsVHlwZU5hbWUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gdGVybUZyb21UZXJtTm9kZSh0ZXJtTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgdGVybS52YWxpZGF0ZUdpdmVuVHlwZSh0eXBlLCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUeXBlTm9kZSwgc3BlY2lmaWNUZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0ZXJtID0gY29udGV4dC5maW5kVGVybUJ5VGVybU5vZGUodGVybU5vZGUpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZSA9IHRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgICAgICB0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUgPSB0ZXJtVHlwZS5pc0VxdWFsVG9PclN1YlR5cGVPZih0eXBlKTtcblxuICAgICAgICBpZiAodGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlKSB7XG4gICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgSW50cmluc2ljVGVybVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBJbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IHRlcm1WYXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBjb25zdCB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICB2YXJpYWJsZU5vZGUgPSBnZW5lcmFsVGVybVZhcmlhYmxlTm9kZTsgLy8vXG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB2YXJpYWJsZSA9IGNvbnRleHQuZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKTtcblxuICAgICAgICB2YXJpYWJsZS51bmlmeVRlcm0odGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgKHRlcm1VbmlmaWVzKSA9PiB7XG4gICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jb25zdCBtZXRhTGV2ZWxQYXNzID0gbmV3IE1ldGFMZXZlbFBhc3MoKSxcbiAgICAgIHByb3BlcnR5UGFzcyA9IG5ldyBQcm9wZXJ0eVBhc3MoKSxcbiAgICAgIGdlbmVyYXRvclBhc3MgPSBuZXcgR2VuZXJhdG9yUGFzcygpLFxuICAgICAgY29tYmluYXRvclBhc3MgPSBuZXcgQ29tYmluYXRvclBhc3MoKSxcbiAgICAgIGNvbnN0cnVjdG9yUGFzcyA9IG5ldyBDb25zdHJ1Y3RvclBhc3MoKSxcbiAgICAgIG1ldGF2YXJpYWJsZVBhc3MgPSBuZXcgTWV0YXZhcmlhYmxlUGFzcygpLFxuICAgICAgaW50cmluc2ljVGVybVBhc3MgPSBuZXcgSW50cmluc2ljVGVybVBhc3MoKSxcbiAgICAgIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MgPSBuZXcgSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcygpO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnQoZ2VuZXJhbFN0YXRlbWVudCwgc3BlY2lmaWNTdGF0ZW1lbnQsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsU3RhdGVtZW50Tm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1N0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudC5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGU7ICAvLy9cblxuICByZXR1cm4gbWV0YUxldmVsUGFzcy5ydW4oZ2VuZXJhbE5vZGUsIHNwZWNpZmljTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5TWV0YXZhcmlhYmxlKGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpO1xuXG4gIHJldHVybiBtZXRhdmFyaWFibGVQYXNzLnJ1bihnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSwgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtV2l0aFByb3BlcnR5KHRlcm0sIHByb3BlcnR5LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgcHJvcGVydHlUZXJtID0gcHJvcGVydHkuZ2V0VGVybSgpLFxuICAgICAgICBwcm9wZXJ0eVRlcm1Ob2RlID0gcHJvcGVydHlUZXJtLmdldE5vZGUoKTtcblxuICByZXR1cm4gcHJvcGVydHlQYXNzLnJ1bihwcm9wZXJ0eVRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3IodGVybSwgZ2VuZXJhdG9yLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgdGVybU5vZGUgPSB0ZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhdG9yVGVybSA9IGdlbmVyYXRvci5nZXRUZXJtKCksXG4gICAgICAgIGdlbmVyYXRvclRlcm1Ob2RlID0gZ2VuZXJhdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGdlbmVyYXRvclBhc3MucnVuKGdlbmVyYXRvclRlcm1Ob2RlLCB0ZXJtTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3Rvcih0ZXJtLCBjb25zdHJ1Y3RvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybSA9IGNvbnN0cnVjdG9yLmdldFRlcm0oKSxcbiAgICAgICAgY29uc3RydWN0b3JUZXJtTm9kZSA9IGNvbnN0cnVjdG9yVGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGNvbnN0cnVjdG9yUGFzcy5ydW4oY29uc3RydWN0b3JUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yKHN0YXRlbWVudCwgY29tYmluYXRvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBjb21iaW5hdG9yU3RhdGVtZW50ID0gY29tYmluYXRvci5nZXRTdGF0ZW1lbnQoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudE5vZGUgPSBjb21iaW5hdG9yU3RhdGVtZW50LmdldE5vZGUoKTtcblxuICByZXR1cm4gY29tYmluYXRvclBhc3MucnVuKGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlUZXJtSW50cmluc2ljYWxseShnZW5lcmFsVGVybSwgc3BlY2lmaWNUZXJtLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbFRlcm1Ob2RlID0gZ2VuZXJhbFRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY1Rlcm1Ob2RlID0gc3BlY2lmaWNUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgZ2VuZXJhbE5vZGUgPSBnZW5lcmFsVGVybU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlOyAvLy9cblxuICByZXR1cm4gaW50cmluc2ljVGVybVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkoZ2VuZXJhbE1ldGF2YXJpYWJsZSwgc3BlY2lmaWNNZXRhdmFyaWFibGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIC8vL1xuICAgICAgICBzcGVjaWZpY05vZGUgPSBzcGVjaWZpY01ldGF2YXJpYWJsZU5vZGU7XG5cbiAgcmV0dXJuIGludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG4iXSwibmFtZXMiOlsidW5pZnlNZXRhdmFyaWFibGUiLCJ1bmlmeU1ldGF2YXJpYWJsZUludHJpbnNpY2FsbHkiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3IiLCJ1bmlmeVRlcm1JbnRyaW5zaWNhbGx5IiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aEdlbmVyYXRvciIsInVuaWZ5VGVybVdpdGhQcm9wZXJ0eSIsIm5vZGVRdWVyeSIsInF1ZXJ5VXRpbGl0aWVzIiwidHlwZU5vZGVRdWVyeSIsInRlcm1Ob2RlUXVlcnkiLCJmcmFtZU5vZGVRdWVyeSIsIm1ldGFUeXBlTm9kZVF1ZXJ5Iiwic2lnbmF0dXJlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50Tm9kZVF1ZXJ5IiwidGVybVZhcmlhYmxlTm9kZVF1ZXJ5IiwiZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnkiLCJhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiUHJvcGVydHlQYXNzIiwiQ29udGludWF0aW9uWmlwUGFzcyIsIm1hcHMiLCJnZW5lcmFsTm9kZVF1ZXJ5Iiwic3BlY2lmaWNOb2RlUXVlcnkiLCJydW4iLCJnZW5lcmFsVHlwZU5vZGUiLCJzcGVjaWZpY1Rlcm1Ob2RlIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJjb250aW51YXRpb24iLCJ0eXBlTm9kZSIsInRlcm1Ob2RlIiwibm9taW5hbFR5cGVOYW1lIiwiZ2V0Tm9taW5hbFR5cGVOYW1lIiwiY29udGV4dCIsInR5cGUiLCJmaW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lIiwidGVybSIsInRlcm1Gcm9tVGVybU5vZGUiLCJzdHJpY3QiLCJ2YWxpZGF0ZUdpdmVuVHlwZSIsInN1Y2Nlc3MiLCJHZW5lcmF0b3JQYXNzIiwiQ29uc3RydWN0b3JQYXNzIiwiTWV0YUxldmVsUGFzcyIsIkNvbnRpbnVhdGlvblppcFBhc3NCYXNlIiwiZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInJlZmVyZW5jZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJmaW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlIiwibWV0YXZhcmlhYmxlIiwiZ2V0TWV0YXZhcmlhYmxlIiwidW5pZnlSZWZlcmVuY2UiLCJyZWZlcmVuY2VVbmlmaWVzIiwiZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY1N0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwiZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVQYXJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsInN1YnN0aXR1dGlvbk5vZGUiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZFN1YnN0aXR1dGlvbkJ5U3Vic3RpdHV0aW9uTm9kZSIsInN0YXRlbWVudCIsImZpbmRTdGF0ZW1lbnRCeVN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnRVbmlmaWVzIiwiZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljRnJhbWVOb2RlIiwiZnJhbWVOb2RlIiwiZnJhbWUiLCJmaW5kRnJhbWVCeUZyYW1lTm9kZSIsInVuaWZ5RnJhbWUiLCJmcmFtZVVuaWZpZXMiLCJnZW5lcmFsVGVybVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5vZGUiLCJmaW5kVGVybUJ5VGVybU5vZGUiLCJ1bmlmeVRlcm0iLCJ0ZXJtVW5pZmllcyIsImdlbmVyYWxTaWduYXR1cmVOb2RlIiwic3BlY2lmaWNTaWduYXR1cmVOb2RlIiwiZ2VuZXJhbFNpZ25hdHVyZSIsImZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUiLCJzcGVjaWZpY1NpZ25hdHVyZSIsInJlY29uY2lsZSIsInVuaWZ5U2lnbmF0dXJlIiwic2lnbmF0dXJlVW5pZmllcyIsIkNvbWJpbmF0b3JQYXNzIiwiZ2VuZXJhbE1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTm9kZSIsIm1ldGFUeXBlTmFtZSIsImdldE1ldGFUeXBlTmFtZSIsIm1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSIsIlNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSIsInN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIiwidmFsaWRhdGUiLCJtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSIsIkZSQU1FX01FVEFfVFlQRV9OQU1FIiwiZnJhbWVGcm9tRnJhbWVOb2RlIiwiTWV0YXZhcmlhYmxlUGFzcyIsInRlcm1UeXBlIiwiZ2V0VHlwZSIsInRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSIsImlzRXF1YWxUb09yU3ViVHlwZU9mIiwiSW50cmluc2ljVGVybVBhc3MiLCJJbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIiwibWV0YUxldmVsUGFzcyIsInByb3BlcnR5UGFzcyIsImdlbmVyYXRvclBhc3MiLCJjb21iaW5hdG9yUGFzcyIsImNvbnN0cnVjdG9yUGFzcyIsIm1ldGF2YXJpYWJsZVBhc3MiLCJpbnRyaW5zaWNUZXJtUGFzcyIsImludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MiLCJnZW5lcmFsU3RhdGVtZW50Iiwic3BlY2lmaWNTdGF0ZW1lbnQiLCJnZW5lcmFsU3RhdGVtZW50Tm9kZSIsImdldE5vZGUiLCJnZW5lcmFsTm9kZSIsInNwZWNpZmljTm9kZSIsImdlbmVyYWxNZXRhdmFyaWFibGUiLCJzcGVjaWZpY01ldGF2YXJpYWJsZSIsImdlbmVyYWxNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlIiwicHJvcGVydHkiLCJwcm9wZXJ0eVRlcm0iLCJnZXRUZXJtIiwicHJvcGVydHlUZXJtTm9kZSIsImdlbmVyYXRvciIsImdlbmVyYXRvclRlcm0iLCJnZW5lcmF0b3JUZXJtTm9kZSIsImNvbnN0cnVjdG9yIiwiY29uc3RydWN0b3JUZXJtIiwiY29uc3RydWN0b3JUZXJtTm9kZSIsImNvbWJpbmF0b3IiLCJjb21iaW5hdG9yU3RhdGVtZW50IiwiZ2V0U3RhdGVtZW50IiwiY29tYmluYXRvclN0YXRlbWVudE5vZGUiLCJnZW5lcmFsVGVybSIsInNwZWNpZmljVGVybSIsImdlbmVyYWxUZXJtTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBNmVnQkE7ZUFBQUE7O1FBZ0RBQztlQUFBQTs7UUF6REFDO2VBQUFBOztRQXdDQUM7ZUFBQUE7O1FBUUFDO2VBQUFBOztRQWhCQUM7ZUFBQUE7O1FBUkFDO2VBQUFBOztRQVJBQztlQUFBQTs7OzRCQWxmZTtnQ0FDZ0M7d0VBRS9CO3lCQUVOOytCQUNxQzt5QkFDa0I7Ozs7OztBQUVqRixNQUFNLEVBQUVDLFNBQVMsRUFBRSxHQUFHQywwQkFBYztBQUVwQyxNQUFNQyxnQkFBZ0JGLFVBQVUsVUFDMUJHLGdCQUFnQkgsVUFBVSxVQUMxQkksaUJBQWlCSixVQUFVLFdB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
|
|
385
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3VuaWZ5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBxdWVyeVV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1xdWVyeVwiO1xuaW1wb3J0IHsgQ29udGludWF0aW9uWmlwUGFzcyBhcyBDb250aW51YXRpb25aaXBQYXNzQmFzZSB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IENvbnRpbnVhdGlvblppcFBhc3MgZnJvbSBcIi4uL3Bhc3MvY29udGludWF0aW9uWmlwXCI7XG5cbmltcG9ydCB7IHJlY29uY2lsZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuaW1wb3J0IHsgRlJBTUVfTUVUQV9UWVBFX05BTUUsIFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSB9IGZyb20gXCIuLi9tZXRhVHlwZU5hbWVzXCI7XG5pbXBvcnQgeyB0ZXJtRnJvbVRlcm1Ob2RlLCBmcmFtZUZyb21GcmFtZU5vZGUsIHN0YXRlbWVudEZyb21TdGF0ZW1lbnROb2RlIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9lbGVtZW50XCI7XG5cbmNvbnN0IHsgbm9kZVF1ZXJ5IH0gPSBxdWVyeVV0aWxpdGllcztcblxuY29uc3QgdHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90eXBlXCIpLFxuICAgICAgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJtXCIpLFxuICAgICAgZnJhbWVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWVcIiksXG4gICAgICBtZXRhVHlwZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhVHlwZVwiKSxcbiAgICAgIHNpZ25hdHVyZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zaWduYXR1cmVcIiksXG4gICAgICBzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50XCIpLFxuICAgICAgdGVybVZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3Rlcm0vdmFyaWFibGUhXCIpLFxuICAgICAgZnJhbWVNZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZnJhbWUvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvYXNzdW1wdGlvbi9tZXRhdmFyaWFibGUhXCIpO1xuXG5jbGFzcyBQcm9wZXJ0eVBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgICAgICAgICBzdHJpY3QgPSBmYWxzZTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgc3RyaWN0LCBjb250ZXh0LCAodGVybSkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEdlbmVyYXRvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBDb25zdHJ1Y3RvclBhc3MgZXh0ZW5kcyBDb250aW51YXRpb25aaXBQYXNzIHtcbiAgc3RhdGljIG1hcHMgPSBbXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBpZiAodHlwZSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICAgIGNvbnN0IHRlcm0gPSB0ZXJtRnJvbVRlcm1Ob2RlKHRlcm1Ob2RlLCBjb250ZXh0KTtcblxuICAgICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gY29udGludWF0aW9uKHN1Y2Nlc3MpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICBdO1xufVxuXG5jbGFzcyBNZXRhTGV2ZWxQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzc0Jhc2Uge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBhc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IGFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgY29udGV4dCxcbiAgICAgICAgICAgIHJlZmVyZW5jZSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbEFzc3VtcHRpb25NZXRhdmFyaWFibGVOb2RlOyAgLy8vXG5cbiAgICAgICAgcmVmZXJlbmNlID0gY29udGV4dC5maW5kUmVmZXJlbmNlQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IHJlZmVyZW5jZS5nZXRNZXRhdmFyaWFibGUoKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIHJlZmVyZW5jZSA9IGNvbnRleHQuZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlSZWZlcmVuY2UocmVmZXJlbmNlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAocmVmZXJlbmNlVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAocmVmZXJlbmNlVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBzdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogc3RhdGVtZW50Tm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzcGVjaWZpY1N0YXRlbWVudE5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbFN0YXRlbWVudE1ldGF2YXJpYWJsZU5vZGU7XG5cbiAgICAgICAgbGV0IGNvbnRleHQ7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCBtZXRhdmFyaWFibGUgPSBjb250ZXh0LmZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHN0YXRlbWVudCA9IGNvbnRleHQuZmluZFN0YXRlbWVudEJ5U3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgICAgICBtZXRhdmFyaWFibGUudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCAoc3RhdGVtZW50VW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAoc3RhdGVtZW50VW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiBmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiBmcmFtZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljRnJhbWVOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgZnJhbWVOb2RlID0gc3BlY2lmaWNGcmFtZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbEZyYW1lTWV0YXZhcmlhYmxlTm9kZTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZSA9IGNvbnRleHQuZmluZE1ldGF2YXJpYWJsZUJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgZnJhbWUgPSBjb250ZXh0LmZpbmRGcmFtZUJ5RnJhbWVOb2RlKGZyYW1lTm9kZSk7XG5cbiAgICAgICAgbWV0YXZhcmlhYmxlLnVuaWZ5RnJhbWUoZnJhbWUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIChmcmFtZVVuaWZpZXMpID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKGZyYW1lVW5pZmllcykge1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0ZXJtVmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh0ZXJtVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogc2lnbmF0dXJlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHNpZ25hdHVyZU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxTaWduYXR1cmVOb2RlLCBzcGVjaWZpY1NpZ25hdHVyZU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IGdlbmVyYWxTaWduYXR1cmUgPSBjb250ZXh0LmZpbmRTaWduYXR1cmVCeVNpZ25hdHVyZU5vZGUoZ2VuZXJhbFNpZ25hdHVyZU5vZGUpO1xuXG4gICAgICAgIGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQ7ICAvLy9cblxuICAgICAgICBjb25zdCBzcGVjaWZpY1NpZ25hdHVyZSA9IGNvbnRleHQuZmluZFNpZ25hdHVyZUJ5U2lnbmF0dXJlTm9kZShzcGVjaWZpY1NpZ25hdHVyZU5vZGUpO1xuXG4gICAgICAgIHJlY29uY2lsZSgoY29udGV4dCkgPT4ge1xuICAgICAgICAgIGdlbmVyYWxTaWduYXR1cmUudW5pZnlTaWduYXR1cmUoc3BlY2lmaWNTaWduYXR1cmUsIGNvbnRleHQsIChzaWduYXR1cmVVbmlmaWVzKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoc2lnbmF0dXJlVW5pZmllcykge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY29udGV4dClcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIENvbWJpbmF0b3JQYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzcyB7XG4gIHN0YXRpYyBtYXBzID0gW1xuICAgIHtcbiAgICAgIGdlbmVyYWxOb2RlUXVlcnk6IG1ldGFUeXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHN0YXRlbWVudE5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxNZXRhVHlwZU5vZGUsIHNwZWNpZmljU3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTm9kZSA9IGdlbmVyYWxNZXRhVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSA9IChtZXRhVHlwZU5hbWUgPT09IFNUQVRFTUVOVF9NRVRBX1RZUEVfTkFNRSk7XG5cbiAgICAgICAgaWYgKG1ldGFUeXBlTmFtZVN0YXRlbWVudE1ldGFUeXBlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgICBzdGF0ZW1lbnROb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgc3RhdGVtZW50ID0gc3RhdGVtZW50RnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBzdGF0ZW1lbnQudmFsaWRhdGUoY29udGV4dCwgKHN0YXRlbWVudCkgPT4ge1xuICAgICAgICAgICAgbGV0IHN1Y2Nlc3MgPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKHN0YXRlbWVudCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogbWV0YVR5cGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogZnJhbWVOb2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsTWV0YVR5cGVOb2RlLCBzcGVjaWZpY0ZyYW1lTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldGFUeXBlTm9kZSA9IGdlbmVyYWxNZXRhVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICBtZXRhVHlwZU5hbWUgPSBtZXRhVHlwZU5vZGUuZ2V0TWV0YVR5cGVOYW1lKCksXG4gICAgICAgICAgICAgIG1ldGFUeXBlTmFtZUZyYW1lTWV0YVR5cGVOYW1lID0gKG1ldGFUeXBlTmFtZSA9PT0gRlJBTUVfTUVUQV9UWVBFX05BTUUpO1xuXG4gICAgICAgIGlmIChtZXRhVHlwZU5hbWVGcmFtZU1ldGFUeXBlTmFtZSkge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBzcGVjaWZpY0NvbnRleHQsICAvLy9cbiAgICAgICAgICAgICAgICBmcmFtZU5vZGUgPSBzcGVjaWZpY0ZyYW1lTm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgIGZyYW1lID0gZnJhbWVGcm9tRnJhbWVOb2RlKGZyYW1lTm9kZSwgY29udGV4dCk7XG5cbiAgICAgICAgICBmcmFtZS52YWxpZGF0ZShjb250ZXh0LCAoZnJhbWUpID0+IHtcbiAgICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICAgIGlmIChmcmFtZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICBzdWNjZXNzID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gICAge1xuICAgICAgZ2VuZXJhbE5vZGVRdWVyeTogdHlwZU5vZGVRdWVyeSxcbiAgICAgIHNwZWNpZmljTm9kZVF1ZXJ5OiB0ZXJtTm9kZVF1ZXJ5LFxuICAgICAgcnVuOiAoZ2VuZXJhbFR5cGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdHlwZU5vZGUgPSBnZW5lcmFsVHlwZU5vZGUsIC8vL1xuICAgICAgICAgICAgICB0ZXJtTm9kZSA9IHNwZWNpZmljVGVybU5vZGUsIC8vL1xuICAgICAgICAgICAgICBub21pbmFsVHlwZU5hbWUgPSB0eXBlTm9kZS5nZXROb21pbmFsVHlwZU5hbWUoKTtcblxuICAgICAgICBsZXQgY29udGV4dDtcblxuICAgICAgICBjb250ZXh0ID0gZ2VuZXJhbENvbnRleHQ7IC8vL1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0LmZpbmRUeXBlQnlOb21pbmFsVHlwZU5hbWUobm9taW5hbFR5cGVOYW1lKTtcblxuICAgICAgICBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0OyAgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IHRlcm1Gcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpO1xuXG4gICAgICAgIHRlcm0udmFsaWRhdGVHaXZlblR5cGUodHlwZSwgY29udGV4dCwgKHRlcm0pID0+IHtcbiAgICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgICAgaWYgKHRlcm0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgTWV0YXZhcmlhYmxlUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0eXBlTm9kZVF1ZXJ5LFxuICAgICAgc3BlY2lmaWNOb2RlUXVlcnk6IHRlcm1Ob2RlUXVlcnksXG4gICAgICBydW46IChnZW5lcmFsVHlwZU5vZGUsIHNwZWNpZmljVGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgICAgICBsZXQgc3VjY2VzcyA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnN0IHR5cGVOb2RlID0gZ2VuZXJhbFR5cGVOb2RlLCAvLy9cbiAgICAgICAgICAgICAgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9taW5hbFR5cGVOYW1lID0gdHlwZU5vZGUuZ2V0Tm9taW5hbFR5cGVOYW1lKCk7XG5cbiAgICAgICAgY29udGV4dCA9IGdlbmVyYWxDb250ZXh0OyAvLy9cblxuICAgICAgICBjb25zdCB0eXBlID0gY29udGV4dC5maW5kVHlwZUJ5Tm9taW5hbFR5cGVOYW1lKG5vbWluYWxUeXBlTmFtZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdGVybSA9IGNvbnRleHQuZmluZFRlcm1CeVRlcm1Ob2RlKHRlcm1Ob2RlKSxcbiAgICAgICAgICAgICAgdGVybVR5cGUgPSB0ZXJtLmdldFR5cGUoKSxcbiAgICAgICAgICAgICAgdGVybVR5cGVFcXVhbFRvT3JTdWJUeXBlT2ZHaXZlblR5cGVUeXBlID0gdGVybVR5cGUuaXNFcXVhbFRvT3JTdWJUeXBlT2YodHlwZSk7XG5cbiAgICAgICAgaWYgKHRlcm1UeXBlRXF1YWxUb09yU3ViVHlwZU9mR2l2ZW5UeXBlVHlwZSkge1xuICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdWNjZXNzKTtcbiAgICAgIH1cbiAgICB9XG4gIF07XG59XG5cbmNsYXNzIEludHJpbnNpY1Rlcm1QYXNzIGV4dGVuZHMgQ29udGludWF0aW9uWmlwUGFzc0Jhc2Uge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0ZXJtVmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh0ZXJtVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY2xhc3MgSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcyBleHRlbmRzIENvbnRpbnVhdGlvblppcFBhc3Mge1xuICBzdGF0aWMgbWFwcyA9IFtcbiAgICB7XG4gICAgICBnZW5lcmFsTm9kZVF1ZXJ5OiB0ZXJtVmFyaWFibGVOb2RlUXVlcnksXG4gICAgICBzcGVjaWZpY05vZGVRdWVyeTogdGVybU5vZGVRdWVyeSxcbiAgICAgIHJ1bjogKGdlbmVyYWxUZXJtVmFyaWFibGVOb2RlLCBzcGVjaWZpY1Rlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pID0+IHtcbiAgICAgICAgY29uc3QgdGVybU5vZGUgPSBzcGVjaWZpY1Rlcm1Ob2RlLCAvLy9cbiAgICAgICAgICAgICAgdmFyaWFibGVOb2RlID0gZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGU7IC8vL1xuXG4gICAgICAgIGxldCBjb250ZXh0O1xuXG4gICAgICAgIGNvbnRleHQgPSBnZW5lcmFsQ29udGV4dDsgLy8vXG5cbiAgICAgICAgY29uc3QgdmFyaWFibGUgPSBjb250ZXh0LmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlKHZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dDsgIC8vL1xuXG4gICAgICAgIGNvbnN0IHRlcm0gPSBjb250ZXh0LmZpbmRUZXJtQnlUZXJtTm9kZSh0ZXJtTm9kZSk7XG5cbiAgICAgICAgdmFyaWFibGUudW5pZnlUZXJtKHRlcm0sIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsICh0ZXJtVW5pZmllcykgPT4ge1xuICAgICAgICAgIGxldCBzdWNjZXNzID0gZmFsc2U7XG5cbiAgICAgICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgICAgIHN1Y2Nlc3MgPSB0cnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBjb250aW51YXRpb24oc3VjY2Vzcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgXTtcbn1cblxuY29uc3QgbWV0YUxldmVsUGFzcyA9IG5ldyBNZXRhTGV2ZWxQYXNzKCksXG4gICAgICBwcm9wZXJ0eVBhc3MgPSBuZXcgUHJvcGVydHlQYXNzKCksXG4gICAgICBnZW5lcmF0b3JQYXNzID0gbmV3IEdlbmVyYXRvclBhc3MoKSxcbiAgICAgIGNvbWJpbmF0b3JQYXNzID0gbmV3IENvbWJpbmF0b3JQYXNzKCksXG4gICAgICBjb25zdHJ1Y3RvclBhc3MgPSBuZXcgQ29uc3RydWN0b3JQYXNzKCksXG4gICAgICBtZXRhdmFyaWFibGVQYXNzID0gbmV3IE1ldGF2YXJpYWJsZVBhc3MoKSxcbiAgICAgIGludHJpbnNpY1Rlcm1QYXNzID0gbmV3IEludHJpbnNpY1Rlcm1QYXNzKCksXG4gICAgICBpbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzID0gbmV3IEludHJpbnNpY01ldGF2YXJpYWJsZVBhc3MoKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50KGdlbmVyYWxTdGF0ZW1lbnQsIHNwZWNpZmljU3RhdGVtZW50LCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbFN0YXRlbWVudE5vZGUgPSBnZW5lcmFsU3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNTdGF0ZW1lbnROb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxTdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNTdGF0ZW1lbnROb2RlOyAgLy8vXG5cbiAgcmV0dXJuIG1ldGFMZXZlbFBhc3MucnVuKGdlbmVyYWxOb2RlLCBzcGVjaWZpY05vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeU1ldGF2YXJpYWJsZShnZW5lcmFsTWV0YXZhcmlhYmxlLCBzcGVjaWZpY01ldGF2YXJpYWJsZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlID0gZ2VuZXJhbE1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgIHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSA9IHNwZWNpZmljTWV0YXZhcmlhYmxlLmdldE5vZGUoKTtcblxuICByZXR1cm4gbWV0YXZhcmlhYmxlUGFzcy5ydW4oZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhQcm9wZXJ0eSh0ZXJtLCBwcm9wZXJ0eSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIHByb3BlcnR5VGVybSA9IHByb3BlcnR5LmdldFRlcm0oKSxcbiAgICAgICAgcHJvcGVydHlUZXJtTm9kZSA9IHByb3BlcnR5VGVybS5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIHByb3BlcnR5UGFzcy5ydW4ocHJvcGVydHlUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVRlcm1XaXRoR2VuZXJhdG9yKHRlcm0sIGdlbmVyYXRvciwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHRlcm1Ob2RlID0gdGVybS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYXRvclRlcm0gPSBnZW5lcmF0b3IuZ2V0VGVybSgpLFxuICAgICAgICBnZW5lcmF0b3JUZXJtTm9kZSA9IGdlbmVyYXRvclRlcm0uZ2V0Tm9kZSgpO1xuXG4gIHJldHVybiBnZW5lcmF0b3JQYXNzLnJ1bihnZW5lcmF0b3JUZXJtTm9kZSwgdGVybU5vZGUsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3IodGVybSwgY29uc3RydWN0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB0ZXJtTm9kZSA9IHRlcm0uZ2V0Tm9kZSgpLFxuICAgICAgICBjb25zdHJ1Y3RvclRlcm0gPSBjb25zdHJ1Y3Rvci5nZXRUZXJtKCksXG4gICAgICAgIGNvbnN0cnVjdG9yVGVybU5vZGUgPSBjb25zdHJ1Y3RvclRlcm0uZ2V0Tm9kZSgpO1xuXG4gIHJldHVybiBjb25zdHJ1Y3RvclBhc3MucnVuKGNvbnN0cnVjdG9yVGVybU5vZGUsIHRlcm1Ob2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbWJpbmF0b3IsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgY29tYmluYXRvclN0YXRlbWVudCA9IGNvbWJpbmF0b3IuZ2V0U3RhdGVtZW50KCksXG4gICAgICAgIGNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlID0gY29tYmluYXRvclN0YXRlbWVudC5nZXROb2RlKCk7XG5cbiAgcmV0dXJuIGNvbWJpbmF0b3JQYXNzLnJ1bihjb21iaW5hdG9yU3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50Tm9kZSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybUludHJpbnNpY2FsbHkoZ2VuZXJhbFRlcm0sIHNwZWNpZmljVGVybSwgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IGdlbmVyYWxUZXJtTm9kZSA9IGdlbmVyYWxUZXJtLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNUZXJtTm9kZSA9IHNwZWNpZmljVGVybS5nZXROb2RlKCksXG4gICAgICAgIGdlbmVyYWxOb2RlID0gZ2VuZXJhbFRlcm1Ob2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNUZXJtTm9kZTsgLy8vXG5cbiAgcmV0dXJuIGludHJpbnNpY1Rlcm1QYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5KGdlbmVyYWxNZXRhdmFyaWFibGUsIHNwZWNpZmljTWV0YXZhcmlhYmxlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgZ2VuZXJhbE1ldGF2YXJpYWJsZU5vZGUgPSBnZW5lcmFsTWV0YXZhcmlhYmxlLmdldE5vZGUoKSxcbiAgICAgICAgc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGUuZ2V0Tm9kZSgpLFxuICAgICAgICBnZW5lcmFsTm9kZSA9IGdlbmVyYWxNZXRhdmFyaWFibGVOb2RlLCAvLy9cbiAgICAgICAgc3BlY2lmaWNOb2RlID0gc3BlY2lmaWNNZXRhdmFyaWFibGVOb2RlO1xuXG4gIHJldHVybiBpbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzLnJ1bihnZW5lcmFsTm9kZSwgc3BlY2lmaWNOb2RlLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuIl0sIm5hbWVzIjpbInVuaWZ5TWV0YXZhcmlhYmxlIiwidW5pZnlNZXRhdmFyaWFibGVJbnRyaW5zaWNhbGx5IiwidW5pZnlTdGF0ZW1lbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9yIiwidW5pZnlUZXJtSW50cmluc2ljYWxseSIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvciIsInVuaWZ5VGVybVdpdGhHZW5lcmF0b3IiLCJ1bmlmeVRlcm1XaXRoUHJvcGVydHkiLCJub2RlUXVlcnkiLCJxdWVyeVV0aWxpdGllcyIsInR5cGVOb2RlUXVlcnkiLCJ0ZXJtTm9kZVF1ZXJ5IiwiZnJhbWVOb2RlUXVlcnkiLCJtZXRhVHlwZU5vZGVRdWVyeSIsInNpZ25hdHVyZU5vZGVRdWVyeSIsInN0YXRlbWVudE5vZGVRdWVyeSIsInRlcm1WYXJpYWJsZU5vZGVRdWVyeSIsImZyYW1lTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5Iiwic3RhdGVtZW50TWV0YXZhcmlhYmxlTm9kZVF1ZXJ5IiwiYXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsIlByb3BlcnR5UGFzcyIsIkNvbnRpbnVhdGlvblppcFBhc3MiLCJtYXBzIiwiZ2VuZXJhbE5vZGVRdWVyeSIsInNwZWNpZmljTm9kZVF1ZXJ5IiwicnVuIiwiZ2VuZXJhbFR5cGVOb2RlIiwic3BlY2lmaWNUZXJtTm9kZSIsImdlbmVyYWxDb250ZXh0Iiwic3BlY2lmaWNDb250ZXh0IiwiY29udGludWF0aW9uIiwidHlwZU5vZGUiLCJ0ZXJtTm9kZSIsIm5vbWluYWxUeXBlTmFtZSIsImdldE5vbWluYWxUeXBlTmFtZSIsImNvbnRleHQiLCJ0eXBlIiwiZmluZFR5cGVCeU5vbWluYWxUeXBlTmFtZSIsInRlcm0iLCJ0ZXJtRnJvbVRlcm1Ob2RlIiwic3RyaWN0IiwidmFsaWRhdGVHaXZlblR5cGUiLCJzdWNjZXNzIiwiR2VuZXJhdG9yUGFzcyIsIkNvbnN0cnVjdG9yUGFzcyIsIk1ldGFMZXZlbFBhc3MiLCJDb250aW51YXRpb25aaXBQYXNzQmFzZSIsImdlbmVyYWxBc3N1bXB0aW9uTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljQXNzdW1wdGlvbk1ldGF2YXJpYWJsZU5vZGUiLCJyZWZlcmVuY2UiLCJtZXRhdmFyaWFibGVOb2RlIiwiZmluZFJlZmVyZW5jZUJ5TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZSIsImdldE1ldGF2YXJpYWJsZSIsInVuaWZ5UmVmZXJlbmNlIiwicmVmZXJlbmNlVW5pZmllcyIsImdlbmVyYWxTdGF0ZW1lbnRNZXRhdmFyaWFibGVOb2RlIiwic3BlY2lmaWNTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImZpbmRNZXRhdmFyaWFibGVCeU1ldGF2YXJpYWJsZU5vZGUiLCJzdGF0ZW1lbnQiLCJmaW5kU3RhdGVtZW50QnlTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50VW5pZmllcyIsImdlbmVyYWxGcmFtZU1ldGF2YXJpYWJsZU5vZGUiLCJzcGVjaWZpY0ZyYW1lTm9kZSIsImZyYW1lTm9kZSIsImZyYW1lIiwiZmluZEZyYW1lQnlGcmFtZU5vZGUiLCJ1bmlmeUZyYW1lIiwiZnJhbWVVbmlmaWVzIiwiZ2VuZXJhbFRlcm1WYXJpYWJsZU5vZGUiLCJ2YXJpYWJsZU5vZGUiLCJ2YXJpYWJsZSIsImZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOb2RlIiwiZmluZFRlcm1CeVRlcm1Ob2RlIiwidW5pZnlUZXJtIiwidGVybVVuaWZpZXMiLCJnZW5lcmFsU2lnbmF0dXJlTm9kZSIsInNwZWNpZmljU2lnbmF0dXJlTm9kZSIsImdlbmVyYWxTaWduYXR1cmUiLCJmaW5kU2lnbmF0dXJlQnlTaWduYXR1cmVOb2RlIiwic3BlY2lmaWNTaWduYXR1cmUiLCJyZWNvbmNpbGUiLCJ1bmlmeVNpZ25hdHVyZSIsInNpZ25hdHVyZVVuaWZpZXMiLCJDb21iaW5hdG9yUGFzcyIsImdlbmVyYWxNZXRhVHlwZU5vZGUiLCJtZXRhVHlwZU5vZGUiLCJtZXRhVHlwZU5hbWUiLCJnZXRNZXRhVHlwZU5hbWUiLCJtZXRhVHlwZU5hbWVTdGF0ZW1lbnRNZXRhVHlwZU5hbWUiLCJTVEFURU1FTlRfTUVUQV9UWVBFX05BTUUiLCJzdGF0ZW1lbnRGcm9tU3RhdGVtZW50Tm9kZSIsInZhbGlkYXRlIiwibWV0YVR5cGVOYW1lRnJhbWVNZXRhVHlwZU5hbWUiLCJGUkFNRV9NRVRBX1RZUEVfTkFNRSIsImZyYW1lRnJvbUZyYW1lTm9kZSIsIk1ldGF2YXJpYWJsZVBhc3MiLCJ0ZXJtVHlwZSIsImdldFR5cGUiLCJ0ZXJtVHlwZUVxdWFsVG9PclN1YlR5cGVPZkdpdmVuVHlwZVR5cGUiLCJpc0VxdWFsVG9PclN1YlR5cGVPZiIsIkludHJpbnNpY1Rlcm1QYXNzIiwiSW50cmluc2ljTWV0YXZhcmlhYmxlUGFzcyIsIm1ldGFMZXZlbFBhc3MiLCJwcm9wZXJ0eVBhc3MiLCJnZW5lcmF0b3JQYXNzIiwiY29tYmluYXRvclBhc3MiLCJjb25zdHJ1Y3RvclBhc3MiLCJtZXRhdmFyaWFibGVQYXNzIiwiaW50cmluc2ljVGVybVBhc3MiLCJpbnRyaW5zaWNNZXRhdmFyaWFibGVQYXNzIiwiZ2VuZXJhbFN0YXRlbWVudCIsInNwZWNpZmljU3RhdGVtZW50IiwiZ2VuZXJhbFN0YXRlbWVudE5vZGUiLCJnZXROb2RlIiwiZ2VuZXJhbE5vZGUiLCJzcGVjaWZpY05vZGUiLCJnZW5lcmFsTWV0YXZhcmlhYmxlIiwic3BlY2lmaWNNZXRhdmFyaWFibGUiLCJnZW5lcmFsTWV0YXZhcmlhYmxlTm9kZSIsInNwZWNpZmljTWV0YXZhcmlhYmxlTm9kZSIsInByb3BlcnR5IiwicHJvcGVydHlUZXJtIiwiZ2V0VGVybSIsInByb3BlcnR5VGVybU5vZGUiLCJnZW5lcmF0b3IiLCJnZW5lcmF0b3JUZXJtIiwiZ2VuZXJhdG9yVGVybU5vZGUiLCJjb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9yVGVybSIsImNvbnN0cnVjdG9yVGVybU5vZGUiLCJjb21iaW5hdG9yIiwiY29tYmluYXRvclN0YXRlbWVudCIsImdldFN0YXRlbWVudCIsImNvbWJpbmF0b3JTdGF0ZW1lbnROb2RlIiwiZ2VuZXJhbFRlcm0iLCJzcGVjaWZp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
|
|
@@ -111,9 +111,12 @@ function validateStatementAsMetavariable(statement, context, continuation) {
|
|
|
111
111
|
const statementValidatesAsMetavariable = false;
|
|
112
112
|
return continuation(statementValidatesAsMetavariable);
|
|
113
113
|
}
|
|
114
|
-
const
|
|
114
|
+
const substitution = statement.getSubstitution();
|
|
115
115
|
if (substitution === null) {
|
|
116
116
|
const statementValidatesAsMetavariable = true;
|
|
117
|
+
if (statementValidatesAsMetavariable) {
|
|
118
|
+
context.debug(`...validated the '${statementString}' statement as a metavariable.`);
|
|
119
|
+
}
|
|
117
120
|
return continuation(statementValidatesAsMetavariable);
|
|
118
121
|
}
|
|
119
122
|
substitution.validate(context, (substitution)=>{
|
|
@@ -332,4 +335,4 @@ const validateStatements = [
|
|
|
332
335
|
validateStatementAsSignatureAssertion
|
|
333
336
|
];
|
|
334
337
|
|
|
335
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZhbGlkYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UsIGRlc2NlbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZywgYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9pbnN0YW5jZVwiO1xuXG5jb25zdCB7IHNvbWUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gIGlmICh2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICB2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0LCAodmFyaWFibGUpID0+IHtcbiAgICBpZiAodmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZS5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgICAgcHJvdmlzaW9uYWxseVN0cmluZyA9IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgY29udGV4dC50cmFjZShgU2V0dGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0ncyB0eXBlIHRvIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSR7cHJvdmlzaW9uYWxseVN0cmluZ30uYCk7XG5cbiAgICB0ZXJtLnNldFR5cGUodHlwZSk7XG5cbiAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcblxuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEdlbmVyYXRvcnModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzO1xuXG4gIGNvbnN0IGdlbmVyYXRvcnMgPSBjb250ZXh0LmdldEdlbmVyYXRvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzID0gc29tZShnZW5lcmF0b3JzLCAoZ2VuZXJhdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciA9IGZhbHNlO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtVW5pZmllcyA9IGdlbmVyYXRvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgY29udGludWF0aW9uKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgIHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3IpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG5cbiAgY29uc3QgY29uc3RydWN0b3JzID0gY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMgPSBzb21lKGNvbnN0cnVjdG9ycywgKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgICBjaG9vc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1VbmlmaWVzID0gY29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuLi5gKTtcblxuICBjb25zdCBzdHJpY3QgPSB0cnVlOyAgLy8vXG5cbiAgbWV0YXZhcmlhYmxlLnZhbGlkYXRlKHN0cmljdCwgY29udGV4dCwgKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGlmIChtZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHsgVGVybVN1YnN0aXR1dGlvbiwgRnJhbWVTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgIGZyYW1lU3Vic3RpdHV0aW9uID0gRnJhbWVTdWJzdGl0dXRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpLFxuICAgICAgICAgIHRlcm1TdWJzdGl0dXRpb24gPSBUZXJtU3Vic3RpdHV0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSAodGVybVN1YnN0aXR1dGlvbiB8fCBmcmFtZVN1YnN0aXR1dGlvbik7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uID09PSBudWxsKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpO1xuICAgIH1cblxuICAgIHN1YnN0aXR1dGlvbi52YWxpZGF0ZShjb250ZXh0LCAoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSBmYWxzZTtcblxuICAgICAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSkge1xuICAgICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIG1ldGF2YXJpYWJsZS5gKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXNBc01ldGF2YXJpYWJsZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyhzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBjb21iaW5hdG9ycyA9IGNvbnRleHQuZ2V0Q29tYmluYXRvcnMoKTtcblxuICByZXR1cm4gc29tZShjb21iaW5hdG9ycywgKGNvbWJpbmF0b3IsIGNvbnRpbnVhdGlvbikgPT4ge1xuICAgIGRlc2NlbmQoKGNvbnRleHQpID0+IHtcbiAgICAgIHJldHVybiBjb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKTtcbiAgICB9LCBjb250ZXh0KTtcbiAgfSwgY29udGludWF0aW9uKTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcihzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCBicmFja2V0ZWRDb21iaW5hdG9yID0gYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nKCk7XG5cbiAgcmV0dXJuIGJyYWNrZXRlZENvbWJpbmF0b3IudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBFcXVhbGl0eSB9ID0gZWxlbWVudHMsXG4gICAgICAgIGVxdWFsaXR5ID0gRXF1YWxpdHkuZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChlcXVhbGl0eSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSk7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5Li4uYCk7XG5cbiAgZXF1YWxpdHkudmFsaWRhdGUoY29udGV4dCwgKGVxdWFsaXR5KSA9PiB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSBmYWxzZTtcblxuICAgIGlmIChlcXVhbGl0eSAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGFuIGVxdWFsaXR5LmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgSnVkZ2VtZW50IH0gPSBlbGVtZW50cyxcbiAgICAgICAganVkZ2VtZW50ID0gSnVkZ2VtZW50LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoanVkZ2VtZW50ID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQpO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC4uLmApO1xuXG4gIGp1ZGdlbWVudC52YWxpZGF0ZShjb250ZXh0LCAoanVkZ2VtZW50KSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgICBpZiAoanVkZ2VtZW50ICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGp1ZGdlbWVudC5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgVHlwZUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHR5cGVBc3NlcnRpb24gPSBUeXBlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAodHlwZUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHZhbGlkYXRlc1N0YXRlbWVudEFzVHlwZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgdHlwZUFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAodHlwZUFzc2VydGlvbikgPT4ge1xuICAgIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmICh0eXBlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgdHlwZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBEZWZpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgZGVmaW5lZEFzc2VydGlvbiA9IERlZmluZWRBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChkZWZpbmVkQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICBkZWZpbmVkQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChkZWZpbmVkQXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKGRlZmluZWRBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBkZWZpbmVkIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzUHJvcGVydHlBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBQcm9wZXJ0eUFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHByb3BlcnR5QXNzZXJ0aW9uID0gUHJvcGVydHlBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChwcm9wZXJ0eUFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgcHJvcGVydHlBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCwgKHByb3BlcnR5QXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChwcm9wZXJ0eUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgcHJvcGVydHkgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNQcm9wZXJ0eUFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBTdWJwcm9vZkFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIHN1YnByb29mQXNzZXJ0aW9uID0gU3VicHJvb2ZBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzdWJwcm9vZkFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi4uLmApO1xuXG4gIHN1YnByb29mQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChzdWJwcm9vZkFzc2VydGlvbikgPT4ge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHN1YnByb29mIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgQ29udGFpbmVkQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgY29udGFpbmVkQXNzZXJ0aW9uID0gQ29udGFpbmVkQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgY29udGFpbmVkIGFzc2VydGlvbi4uLmApO1xuXG4gIGNvbnRhaW5lZEFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAoY29udGFpbmVkQXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoY29udGFpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb24oc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgeyBTaWduYXR1cmVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzaWduYXR1cmVBc3NlcnRpb24gPSBTaWduYXR1cmVBc3NlcnRpb24uZnJvbVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpO1xuXG4gIGlmIChzaWduYXR1cmVBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICBjb25zdCB2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzaWduYXR1cmUgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgc2lnbmF0dXJlQXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChzaWduYXR1cmVBc3NlcnRpb24pID0+IHtcbiAgICBsZXQgdmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChzaWduYXR1cmVBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICBjb250aW51YXRpb24odmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBsZXQgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcztcblxuICBjb25zdCBwcm9wZXJ0aWVzID0gY29udGV4dC5nZXRQcm9wZXJ0aWVzKCk7XG5cbiAgdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcyA9IHNvbWUocHJvcGVydGllcywgKHByb3BlcnR5KSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aFByb3BlcnR5ID0gZmFsc2U7XG5cbiAgICBjaG9vc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1VbmlmaWVzID0gcHJvcGVydHkudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICB0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoUHJvcGVydGllcztcbn1cblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVGVybXMgPSBbXG4gIHZhbGlkYXRlVGVybUFzVmFyaWFibGUsXG4gIHVuaWZ5VGVybVdpdGhHZW5lcmF0b3JzLFxuICB1bmlmeVRlcm1XaXRoQ29uc3RydWN0b3JzLFxuICB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3Jcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVN0YXRlbWVudHMgPSBbXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUsXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbWJpbmF0b3JzLFxuICB1bmlmeVN0YXRlbWVudFdpdGhCcmFja2V0ZWRDb21iaW5hdG9yLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHksXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQsXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb25cbl07XG4iXSwibmFtZXMiOlsidW5pZnlUZXJtV2l0aFByb3BlcnRpZXMiLCJ2YWxpZGF0ZVN0YXRlbWVudHMiLCJ2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlIiwidmFsaWRhdGVUZXJtcyIsInNvbWUiLCJjb250aW51YXRpb25VdGlsaXRpZXMiLCJ0ZXJtIiwiY29udGV4dCIsImNvbnRpbnVhdGlvbiIsIlZhcmlhYmxlIiwiZWxlbWVudHMiLCJ2YXJpYWJsZSIsImZyb21UZXJtIiwidGVybVZhbGlkYXRlc0FzVmFyaWFibGUiLCJ0ZXJtU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJ2YWxpZGF0ZSIsInR5cGUiLCJnZXRUeXBlIiwidHlwZVN0cmluZyIsInByb3Zpc2lvbmFsIiwiaXNQcm92aXNpb25hbCIsInByb3Zpc2lvbmFsbHlTdHJpbmciLCJwcm92aXNpb25hbGx5U3RyaW5nRnJvbVByb3Zpc2lvbmFsIiwic2V0VHlwZSIsInNldFByb3Zpc2lvbmFsIiwiZGVidWciLCJ1bmlmeVRlcm1XaXRoR2VuZXJhdG9ycyIsInRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvcnMiLCJnZW5lcmF0b3JzIiwiZ2V0R2VuZXJhdG9ycyIsImdlbmVyYXRvciIsInRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciIsImNob29zZSIsInRlcm1VbmlmaWVzIiwidW5pZnlUZXJtIiwiY29tbWl0IiwidW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3IiLCJ1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJ0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yIiwiYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZyIsInZhbGlkYXRlU3RhdGVtZW50QXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnQiLCJNZXRhdmFyaWFibGUiLCJtZXRhdmFyaWFibGUiLCJmcm9tU3RhdGVtZW50Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUiLCJzdGF0ZW1lbnRTdHJpbmciLCJzdHJpY3QiLCJUZXJtU3Vic3RpdHV0aW9uIiwiRnJhbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN1YnN0aXR1dGlvbiIsInRlcm1TdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJ1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9yIiwiZGVzY2VuZCIsInVuaWZ5U3RhdGVtZW50IiwidW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvciIsImJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yRnJvbU5vdGhpbmciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRXF1YWxpdHkiLCJFcXVhbGl0eSIsImVxdWFsaXR5Iiwic3RhdGVtZW50VmFsaWRhdGVzQXNFcXVhbGl0eSIsInZhbGlkYXRlU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJKdWRnZW1lbnQiLCJqdWRnZW1lbnQiLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCIsInZhbGlkYXRlU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwiVHlwZUFzc2VydGlvbiIsInR5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsIkRlZmluZWRBc3NlcnRpb24iLCJkZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uIiwiUHJvcGVydHlBc3NlcnRpb24iLCJwcm9wZXJ0eUFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU3VicHJvb2ZBc3NlcnRpb24iLCJTdWJwcm9vZkFzc2VydGlvbiIsInN1YnByb29mQXNzZXJ0aW9uIiwic3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJDb250YWluZWRBc3NlcnRpb24iLCJjb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNTaWduYXR1cmVBc3NlcnRpb24iLCJTaWduYXR1cmVBc3NlcnRpb24iLCJzaWduYXR1cmVBc3NlcnRpb24iLCJ2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiIsInRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXMiLCJwcm9wZXJ0aWVzIiwiZ2V0UHJvcGVydGllcyIsInByb3BlcnR5IiwidGVybVVuaWZpZXNXaXRoUHJvcGVydHkiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQWdhZ0JBO2VBQUFBOztRQWlDSEM7ZUFBQUE7O1FBcmJHQztlQUFBQTs7UUE4YUhDO2VBQUFBOzs7Z0NBeGJ5QjtpRUFFakI7eUJBRVc7d0JBQ21COzBCQUM2Qjs7Ozs7O0FBRWhGLE1BQU0sRUFBRUMsSUFBSSxFQUFFLEdBQUdDLHFDQUFxQjtBQUUvQixTQUFTSCx1QkFBdUJJLElBQUksRUFBRUMsT0FBTyxFQUFFQyxZQUFZO0lBQ2hFLE1BQU0sRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGlCQUFRLEVBQ3ZCQyxXQUFXRixTQUFTRyxRQUFRLENBQUNOLE1BQU1DO0lBRXpDLElBQUlJLGFBQWEsTUFBTTtRQUNyQixNQUFNRSwwQkFBMEI7UUFFaEMsT0FBT0wsYUFBYUs7SUFDdEI7SUFFQSxNQUFNQyxhQUFhUixLQUFLUyxTQUFTO0lBRWpDUixRQUFRUyxLQUFLLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRUYsV0FBVyx1QkFBdUIsQ0FBQztJQUVwRUgsU0FBU00sUUFBUSxDQUFDVixTQUFTLENBQUNJO1FBQzFCLElBQUlBLGFBQWEsTUFBTTtZQUNyQixNQUFNRSwwQkFBMEI7WUFFaEMsT0FBT0wsYUFBYUs7UUFDdEI7UUFFQSxNQUFNSyxPQUFPUCxTQUFTUSxPQUFPLElBQ3ZCQyxhQUFhRixLQUFLSCxT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
|
|
338
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wcm9jZXNzL3ZhbGlkYXRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGNvbnRpbnVhdGlvblV0aWxpdGllcyB9IGZyb20gXCJvY2NhbS1sYW5ndWFnZXNcIjtcblxuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5pbXBvcnQgeyBjaG9vc2UsIGRlc2NlbmQgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2NvbnRleHRcIjtcbmltcG9ydCB7IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgYnJhY2tldGVkQ29uc3RydWN0b3JGcm9tTm90aGluZywgYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9pbnN0YW5jZVwiO1xuXG5jb25zdCB7IHNvbWUgfSA9IGNvbnRpbnVhdGlvblV0aWxpdGllcztcblxuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlVGVybUFzVmFyaWFibGUodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgVmFyaWFibGUgfSA9IGVsZW1lbnRzLFxuICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21UZXJtKHRlcm0sIGNvbnRleHQpO1xuXG4gIGlmICh2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IHRlcm1TdHJpbmcgPSB0ZXJtLmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3Rlcm1TdHJpbmd9JyB0ZXJtIGFzIGEgdmFyaWFibGUuLi5gKTtcblxuICB2YXJpYWJsZS52YWxpZGF0ZShjb250ZXh0LCAodmFyaWFibGUpID0+IHtcbiAgICBpZiAodmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHR5cGUgPSB2YXJpYWJsZS5nZXRUeXBlKCksXG4gICAgICAgICAgdHlwZVN0cmluZyA9IHR5cGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgcHJvdmlzaW9uYWwgPSB2YXJpYWJsZS5pc1Byb3Zpc2lvbmFsKCksXG4gICAgICAgICAgcHJvdmlzaW9uYWxseVN0cmluZyA9IHByb3Zpc2lvbmFsbHlTdHJpbmdGcm9tUHJvdmlzaW9uYWwocHJvdmlzaW9uYWwpO1xuXG4gICAgY29udGV4dC50cmFjZShgU2V0dGluZyB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0ncyB0eXBlIHRvIHRoZSAnJHt0eXBlU3RyaW5nfScgdHlwZSR7cHJvdmlzaW9uYWxseVN0cmluZ30uYCk7XG5cbiAgICB0ZXJtLnNldFR5cGUodHlwZSk7XG5cbiAgICB0ZXJtLnNldFByb3Zpc2lvbmFsKHByb3Zpc2lvbmFsKTtcblxuICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7dGVybVN0cmluZ30nIHRlcm0gYXMgYSB2YXJpYWJsZS5gKTtcblxuICAgIGNvbnN0IHRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlID0gdHJ1ZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odGVybVZhbGlkYXRlc0FzVmFyaWFibGUpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlUZXJtV2l0aEdlbmVyYXRvcnModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzO1xuXG4gIGNvbnN0IGdlbmVyYXRvcnMgPSBjb250ZXh0LmdldEdlbmVyYXRvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzID0gc29tZShnZW5lcmF0b3JzLCAoZ2VuZXJhdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciA9IGZhbHNlO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtVW5pZmllcyA9IGdlbmVyYXRvci51bmlmeVRlcm0odGVybSwgY29udGV4dCwgY29udGludWF0aW9uKTtcblxuICAgICAgaWYgKHRlcm1VbmlmaWVzKSB7XG4gICAgICAgIHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3IpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aEdlbmVyYXRvcnM7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnModGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnM7XG5cbiAgY29uc3QgY29uc3RydWN0b3JzID0gY29udGV4dC5nZXRDb25zdHJ1Y3RvcnMoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMgPSBzb21lKGNvbnN0cnVjdG9ycywgKGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yID0gZmFsc2U7XG5cbiAgICBjaG9vc2UoKGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1VbmlmaWVzID0gY29uc3RydWN0b3IudW5pZnlUZXJtKHRlcm0sIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG5cbiAgICAgIGlmICh0ZXJtVW5pZmllcykge1xuICAgICAgICB0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvciA9IHRydWU7XG5cbiAgICAgICAgY29udGV4dC5jb21taXQoKTtcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0KTtcblxuICAgIGlmICh0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3Rvcikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gdGVybVVuaWZpZXNXaXRoQ29uc3RydWN0b3JzO1xufVxuXG5mdW5jdGlvbiB1bmlmeVRlcm1XaXRoQnJhY2tldGVkQ29uc3RydWN0b3IodGVybSwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGxldCB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvcjtcblxuICBjb25zdCBicmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmcoKTtcblxuICB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3RvciA9IGJyYWNrZXRlZENvbnN0cnVjdG9yLnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuXG4gIHJldHVybiB0ZXJtVW5pZmllc1dpdGhCcmFja2V0ZWRDb25zdHJ1Y3Rvcjtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc01ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB7IE1ldGF2YXJpYWJsZSB9ID0gZWxlbWVudHMsXG4gICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKG1ldGF2YXJpYWJsZSA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuLi5gKTtcblxuICBjb25zdCBzdHJpY3QgPSB0cnVlOyAgLy8vXG5cbiAgbWV0YXZhcmlhYmxlLnZhbGlkYXRlKHN0cmljdCwgY29udGV4dCwgKG1ldGF2YXJpYWJsZSkgPT4ge1xuICAgIGlmIChtZXRhdmFyaWFibGUgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpO1xuICAgIH1cblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbiA9IHN0YXRlbWVudC5nZXRTdWJzdGl0dXRpb24oKTtcblxuICAgIGlmIChzdWJzdGl0dXRpb24gPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gdHJ1ZTtcblxuICAgICAgaWYgKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKSB7XG4gICAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgbWV0YXZhcmlhYmxlLmApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlKTtcbiAgICB9XG5cbiAgICBzdWJzdGl0dXRpb24udmFsaWRhdGUoY29udGV4dCwgKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgbGV0IHN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlID0gZmFsc2U7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgICAgc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpIHtcbiAgICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBtZXRhdmFyaWFibGUuYCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBjb250aW51YXRpb24oc3RhdGVtZW50VmFsaWRhdGVzQXNNZXRhdmFyaWFibGUpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMoc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgY29tYmluYXRvcnMgPSBjb250ZXh0LmdldENvbWJpbmF0b3JzKCk7XG5cbiAgcmV0dXJuIHNvbWUoY29tYmluYXRvcnMsIChjb21iaW5hdG9yLCBjb250aW51YXRpb24pID0+IHtcbiAgICBkZXNjZW5kKChjb250ZXh0KSA9PiB7XG4gICAgICByZXR1cm4gY29tYmluYXRvci51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbik7XG4gICAgfSwgY29udGV4dCk7XG4gIH0sIGNvbnRpbnVhdGlvbik7XG59XG5cbmZ1bmN0aW9uIHVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3Ioc3RhdGVtZW50LCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgY29uc3QgYnJhY2tldGVkQ29tYmluYXRvciA9IGJyYWNrZXRlZENvbWJpbmF0b3JGcm9tTm90aGluZygpO1xuXG4gIHJldHVybiBicmFja2V0ZWRDb21iaW5hdG9yLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5KHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgRXF1YWxpdHkgfSA9IGVsZW1lbnRzLFxuICAgICAgICBlcXVhbGl0eSA9IEVxdWFsaXR5LmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZXF1YWxpdHkgPT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS4uLmApO1xuXG4gIGVxdWFsaXR5LnZhbGlkYXRlKGNvbnRleHQsIChlcXVhbGl0eSkgPT4ge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5ID0gZmFsc2U7XG5cbiAgICBpZiAoZXF1YWxpdHkgIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc0VxdWFsaXR5KSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhbiBlcXVhbGl0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0p1ZGdlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB7IEp1ZGdlbWVudCB9ID0gZWxlbWVudHMsXG4gICAgICAgIGp1ZGdlbWVudCA9IEp1ZGdlbWVudC5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGp1ZGdlbWVudCA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50ID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHZhbGlkYXRlc1N0YXRlbWVudEFzSnVkZ2VtZW50KTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuLi5gKTtcblxuICBqdWRnZW1lbnQudmFsaWRhdGUoY29udGV4dCwgKGp1ZGdlbWVudCkgPT4ge1xuICAgIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCA9IGZhbHNlO1xuXG4gICAgaWYgKGp1ZGdlbWVudCAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBqdWRnZW1lbnQuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc0p1ZGdlbWVudCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbihzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB7IFR5cGVBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICB0eXBlQXNzZXJ0aW9uID0gVHlwZUFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKHR5cGVBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICBjb25zdCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc1R5cGVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSB0eXBlIGFzc2VydGlvbi4uLmApO1xuXG4gIHR5cGVBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCwgKHR5cGVBc3NlcnRpb24pID0+IHtcbiAgICBsZXQgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAodHlwZUFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAodmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHR5cGUgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250aW51YXRpb24odmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhdGVtZW50QXNEZWZpbmVkQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgRGVmaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGRlZmluZWRBc3NlcnRpb24gPSBEZWZpbmVkQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoZGVmaW5lZEFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGRlZmluZWQgYXNzZXJ0aW9uLi4uYCk7XG5cbiAgZGVmaW5lZEFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAoZGVmaW5lZEFzc2VydGlvbikgPT4ge1xuICAgIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGlmIChkZWZpbmVkQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnZhbGlkYXRlZCB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgZGVmaW5lZCBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1Byb3BlcnR5QXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgUHJvcGVydHlBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBwcm9wZXJ0eUFzc2VydGlvbiA9IFByb3BlcnR5QXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAocHJvcGVydHlBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi4uLmApO1xuXG4gIHByb3BlcnR5QXNzZXJ0aW9uLnZhbGlkYXRlKGNvbnRleHQsIChwcm9wZXJ0eUFzc2VydGlvbikgPT4ge1xuICAgIGxldCBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAocHJvcGVydHlBc3NlcnRpb24gIT09IG51bGwpIHtcbiAgICAgIHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHByb3BlcnR5IGFzc2VydGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzUHJvcGVydHlBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgU3VicHJvb2ZBc3NlcnRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICBzdWJwcm9vZkFzc2VydGlvbiA9IFN1YnByb29mQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc3VicHJvb2ZBc3NlcnRpb24gPT09IG51bGwpIHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgcmV0dXJuIGNvbnRpbnVhdGlvbihzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uKTtcbiAgfVxuXG4gIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKTtcblxuICBjb250ZXh0LnRyYWNlKGBWYWxpZGF0aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uLi5gKTtcblxuICBzdWJwcm9vZkFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAoc3VicHJvb2ZBc3NlcnRpb24pID0+IHtcbiAgICBsZXQgc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKHN1YnByb29mQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICBzdGF0ZW1lbnRWYWxpZGF0ZXNBc1N1YnByb29mQXNzZXJ0aW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGVtZW50VmFsaWRhdGVzQXNTdWJwcm9vZkFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBzdWJwcm9vZiBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uKHN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbihzdGF0ZW1lbnQsIGNvbnRleHQsIGNvbnRpbnVhdGlvbikge1xuICBjb25zdCB7IENvbnRhaW5lZEFzc2VydGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgIGNvbnRhaW5lZEFzc2VydGlvbiA9IENvbnRhaW5lZEFzc2VydGlvbi5mcm9tU3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCk7XG5cbiAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiA9PT0gbnVsbCkge1xuICAgIGNvbnN0IHZhbGlkYXRlc1N0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBjb250aW51YXRpb24odmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24pO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpO1xuXG4gIGNvbnRleHQudHJhY2UoYFZhbGlkYXRpbmcgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIGNvbnRhaW5lZCBhc3NlcnRpb24uLi5gKTtcblxuICBjb250YWluZWRBc3NlcnRpb24udmFsaWRhdGUoY29udGV4dCwgKGNvbnRhaW5lZEFzc2VydGlvbikgPT4ge1xuICAgIGxldCB2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbiA9IGZhbHNlO1xuXG4gICAgaWYgKGNvbnRhaW5lZEFzc2VydGlvbiAhPT0gbnVsbCkge1xuICAgICAgdmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24gPSB0cnVlO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbikge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmFsaWRhdGVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgYXMgYSBjb250YWluZWQgYXNzZXJ0aW9uLmApO1xuICAgIH1cblxuICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNTdGF0ZW1lbnRBc0NvbnRhaW5lZEFzc2VydGlvbik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVN0YXRlbWVudEFzU2lnbmF0dXJlQXNzZXJ0aW9uKHN0YXRlbWVudCwgY29udGV4dCwgY29udGludWF0aW9uKSB7XG4gIGNvbnN0IHsgU2lnbmF0dXJlQXNzZXJ0aW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgc2lnbmF0dXJlQXNzZXJ0aW9uID0gU2lnbmF0dXJlQXNzZXJ0aW9uLmZyb21TdGF0ZW1lbnQoc3RhdGVtZW50LCBjb250ZXh0KTtcblxuICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uID09PSBudWxsKSB7XG4gICAgY29uc3QgdmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24gPSBmYWxzZTtcblxuICAgIGNvbnRpbnVhdGlvbih2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdGF0ZW1lbnRTdHJpbmcgPSBzdGF0ZW1lbnQuZ2V0U3RyaW5nKCk7XG5cbiAgY29udGV4dC50cmFjZShgVmFsaWRhdGluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IGFzIGEgc2lnbmF0dXJlIGFzc2VydGlvbi4uLmApO1xuXG4gIHNpZ25hdHVyZUFzc2VydGlvbi52YWxpZGF0ZShjb250ZXh0LCAoc2lnbmF0dXJlQXNzZXJ0aW9uKSA9PiB7XG4gICAgbGV0IHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uID0gZmFsc2U7XG5cbiAgICBpZiAoc2lnbmF0dXJlQXNzZXJ0aW9uICE9PSBudWxsKSB7XG4gICAgICB2YWxpZGF0ZXNBU3RhdGVtZW50c1NpZ25hdHVyZUFzc2VydGlvbiA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52YWxpZGF0ZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCBhcyBhIHNpZ25hdHVyZSBhc3NlcnRpb24uYCk7XG4gICAgfVxuXG4gICAgY29udGludWF0aW9uKHZhbGlkYXRlc0FTdGF0ZW1lbnRzU2lnbmF0dXJlQXNzZXJ0aW9uKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bmlmeVRlcm1XaXRoUHJvcGVydGllcyh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pIHtcbiAgbGV0IHRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXM7XG5cbiAgY29uc3QgcHJvcGVydGllcyA9IGNvbnRleHQuZ2V0UHJvcGVydGllcygpO1xuXG4gIHRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXMgPSBzb21lKHByb3BlcnRpZXMsIChwcm9wZXJ0eSkgPT4ge1xuICAgIGxldCB0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0eSA9IGZhbHNlO1xuXG4gICAgY2hvb3NlKChjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtVW5pZmllcyA9IHByb3BlcnR5LnVuaWZ5VGVybSh0ZXJtLCBjb250ZXh0LCBjb250aW51YXRpb24pO1xuXG4gICAgICBpZiAodGVybVVuaWZpZXMpIHtcbiAgICAgICAgdGVybVVuaWZpZXNXaXRoUHJvcGVydHkgPSB0cnVlO1xuXG4gICAgICAgIGNvbnRleHQuY29tbWl0KCk7XG4gICAgICB9XG4gICAgfSwgY29udGV4dCk7XG5cbiAgICBpZiAodGVybVVuaWZpZXNXaXRoUHJvcGVydHkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRlcm1VbmlmaWVzV2l0aFByb3BlcnRpZXM7XG59XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZVRlcm1zID0gW1xuICB2YWxpZGF0ZVRlcm1Bc1ZhcmlhYmxlLFxuICB1bmlmeVRlcm1XaXRoR2VuZXJhdG9ycyxcbiAgdW5pZnlUZXJtV2l0aENvbnN0cnVjdG9ycyxcbiAgdW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yXG5dO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVTdGF0ZW1lbnRzID0gW1xuICB2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlLFxuICB1bmlmeVN0YXRlbWVudFdpdGhDb21iaW5hdG9ycyxcbiAgdW5pZnlTdGF0ZW1lbnRXaXRoQnJhY2tldGVkQ29tYmluYXRvcixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50LFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24sXG4gIHZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbixcbiAgdmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uLFxuICB2YWxpZGF0ZVN0YXRlbWVudEFzU2lnbmF0dXJlQXNzZXJ0aW9uXG5dO1xuIl0sIm5hbWVzIjpbInVuaWZ5VGVybVdpdGhQcm9wZXJ0aWVzIiwidmFsaWRhdGVTdGF0ZW1lbnRzIiwidmFsaWRhdGVUZXJtQXNWYXJpYWJsZSIsInZhbGlkYXRlVGVybXMiLCJzb21lIiwiY29udGludWF0aW9uVXRpbGl0aWVzIiwidGVybSIsImNvbnRleHQiLCJjb250aW51YXRpb24iLCJWYXJpYWJsZSIsImVsZW1lbnRzIiwidmFyaWFibGUiLCJmcm9tVGVybSIsInRlcm1WYWxpZGF0ZXNBc1ZhcmlhYmxlIiwidGVybVN0cmluZyIsImdldFN0cmluZyIsInRyYWNlIiwidmFsaWRhdGUiLCJ0eXBlIiwiZ2V0VHlwZSIsInR5cGVTdHJpbmciLCJwcm92aXNpb25hbCIsImlzUHJvdmlzaW9uYWwiLCJwcm92aXNpb25hbGx5U3RyaW5nIiwicHJvdmlzaW9uYWxseVN0cmluZ0Zyb21Qcm92aXNpb25hbCIsInNldFR5cGUiLCJzZXRQcm92aXNpb25hbCIsImRlYnVnIiwidW5pZnlUZXJtV2l0aEdlbmVyYXRvcnMiLCJ0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3JzIiwiZ2VuZXJhdG9ycyIsImdldEdlbmVyYXRvcnMiLCJnZW5lcmF0b3IiLCJ0ZXJtVW5pZmllc1dpdGhHZW5lcmF0b3IiLCJjaG9vc2UiLCJ0ZXJtVW5pZmllcyIsInVuaWZ5VGVybSIsImNvbW1pdCIsInVuaWZ5VGVybVdpdGhDb25zdHJ1Y3RvcnMiLCJ0ZXJtVW5pZmllc1dpdGhDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvcnMiLCJnZXRDb25zdHJ1Y3RvcnMiLCJjb25zdHJ1Y3RvciIsInRlcm1VbmlmaWVzV2l0aENvbnN0cnVjdG9yIiwidW5pZnlUZXJtV2l0aEJyYWNrZXRlZENvbnN0cnVjdG9yIiwidGVybVVuaWZpZXNXaXRoQnJhY2tldGVkQ29uc3RydWN0b3IiLCJicmFja2V0ZWRDb25zdHJ1Y3RvciIsImJyYWNrZXRlZENvbnN0cnVjdG9yRnJvbU5vdGhpbmciLCJ2YWxpZGF0ZVN0YXRlbWVudEFzTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50IiwiTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwiZnJvbVN0YXRlbWVudCIsInN0YXRlbWVudFZhbGlkYXRlc0FzTWV0YXZhcmlhYmxlIiwic3RhdGVtZW50U3RyaW5nIiwic3RyaWN0Iiwic3Vic3RpdHV0aW9uIiwiZ2V0U3Vic3RpdHV0aW9uIiwidW5pZnlTdGF0ZW1lbnRXaXRoQ29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldENvbWJpbmF0b3JzIiwiY29tYmluYXRvciIsImRlc2NlbmQiLCJ1bmlmeVN0YXRlbWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aEJyYWNrZXRlZENvbWJpbmF0b3IiLCJicmFja2V0ZWRDb21iaW5hdG9yIiwiYnJhY2tldGVkQ29tYmluYXRvckZyb21Ob3RoaW5nIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0VxdWFsaXR5IiwiRXF1YWxpdHkiLCJlcXVhbGl0eSIsInN0YXRlbWVudFZhbGlkYXRlc0FzRXF1YWxpdHkiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzSnVkZ2VtZW50IiwiSnVkZ2VtZW50IiwianVkZ2VtZW50IiwidmFsaWRhdGVzU3RhdGVtZW50QXNKdWRnZW1lbnQiLCJ2YWxpZGF0ZVN0YXRlbWVudEFzVHlwZUFzc2VydGlvbiIsIlR5cGVBc3NlcnRpb24iLCJ0eXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNUeXBlQXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc0RlZmluZWRBc3NlcnRpb24iLCJEZWZpbmVkQXNzZXJ0aW9uIiwiZGVmaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlc1N0YXRlbWVudEFzRGVmaW5lZEFzc2VydGlvbiIsInZhbGlkYXRlU3RhdGVtZW50QXNQcm9wZXJ0eUFzc2VydGlvbiIsIlByb3BlcnR5QXNzZXJ0aW9uIiwicHJvcGVydHlBc3NlcnRpb24iLCJzdGF0ZW1lbnRWYWxpZGF0ZXNBc1Byb3BlcnR5QXNzZXJ0aW9uIiwidmFsaWRhdGVTdGF0ZW1lbnRBc1N1YnByb29mQXNzZXJ0aW9uIiwiU3VicHJvb2ZBc3NlcnRpb24iLCJzdWJwcm9vZkFzc2VydGlvbiIsInN0YXRlbWVudFZhbGlkYXRlc0FzU3VicHJvb2ZBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzQ29udGFpbmVkQXNzZXJ0aW9uIiwiQ29udGFpbmVkQXNzZXJ0aW9uIiwiY29udGFpbmVkQXNzZXJ0aW9uIiwidmFsaWRhdGVzU3RhdGVtZW50QXNDb250YWluZWRBc3NlcnRpb24iLCJ2YWxpZGF0ZVN0YXRlbWVudEFzU2lnbmF0dXJlQXNzZXJ0aW9uIiwiU2lnbmF0dXJlQXNzZXJ0aW9uIiwic2lnbmF0dXJlQXNzZXJ0aW9uIiwidmFsaWRhdGVzQVN0YXRlbWVudHNTaWduYXR1cmVBc3NlcnRpb24iLCJ0ZXJtVW5pZmllc1dpdGhQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsImdldFByb3BlcnRpZXMiLCJwcm9wZXJ0eSIsInRlcm1VbmlmaWVzV2l0aFByb3BlcnR5Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7UUFpYWdCQTtlQUFBQTs7UUFpQ0hDO2VBQUFBOztRQXRiR0M7ZUFBQUE7O1FBK2FIQztlQUFBQTs7O2dDQXpieUI7aUVBRWpCO3lCQUVXO3dCQUNtQjswQkFDNkI7Ozs7OztBQUVoRixNQUFNLEVBQUVDLElBQUksRUFBRSxHQUFHQyxxQ0FBcUI7QUFFL0IsU0FBU0gsdUJBQXVCSSxJQUFJLEVBQUVDLE9BQU8sRUFBRUMsWUFBWTtJQUNoRSxNQUFNLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxpQkFBUSxFQUN2QkMsV0FBV0YsU0FBU0csUUFBUSxDQUFDTixNQUFNQztJQUV6QyxJQUFJSSxhQUFhLE1BQU07UUFDckIsTUFBTUUsMEJBQTBCO1FBRWhDLE9BQU9MLGFBQWFLO0lBQ3RCO0lBRUEsTUFBTUMsYUFBYVIsS0FBS1MsU0FBUztJQUVqQ1IsUUFBUVMsS0FBSyxDQUFDLENBQUMsZ0JBQWdCLEVBQUVGLFdBQVcsdUJBQXVCLENBQUM7SUFFcEVILFNBQVNNLFFBQVEsQ0FBQ1YsU0FBUyxDQUFDSTtRQUMxQixJQUFJQSxhQUFhLE1BQU07WUFDckIsTUFBTUUsMEJBQTBCO1lBRWhDLE9BQU9MLGFBQWFLO1FBQ3RCO1FBRUEsTUFBTUssT0FBT1AsU0FBU1EsT0FBTyxJQUN2QkMsYUFBYUYsS0FBS0gsU0FBUyxJQUMzQk0sY0FBY1YsU0FBU1csYUFBYSxJQUNwQ0Msc0JBQXNCQyxJQUFBQSwwQ0FBa0MsRUFBQ0g7UUFFL0RkLFFBQVFTLEtBQUssQ0FBQyxDQUFDLGFBQWEsRUFBRUYsV0FBVyxzQkFBc0IsRUFBRU0sV0FBVyxNQUFNLEVBQUVHLG9CQUFvQixDQUFDLENB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
|