occam-verify-cli 0.0.492 → 0.0.495

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.
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "default", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return MetaAntecedent;
9
+ }
10
+ });
11
+ var _metaSubstitution = /*#__PURE__*/ _interopRequireDefault(require("./metaSubstitution"));
12
+ var _array = require("./utilities/array");
13
+ var _string = require("./utilities/string");
14
+ var _query = require("./utilities/query");
15
+ var _ruleNames = require("./ruleNames");
16
+ function _arrayLikeToArray(arr, len) {
17
+ if (len == null || len > arr.length) len = arr.length;
18
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
19
+ return arr2;
20
+ }
21
+ function _arrayWithoutHoles(arr) {
22
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
23
+ }
24
+ function _classCallCheck(instance, Constructor) {
25
+ if (!(instance instanceof Constructor)) {
26
+ throw new TypeError("Cannot call a class as a function");
27
+ }
28
+ }
29
+ function _defineProperties(target, props) {
30
+ for(var i = 0; i < props.length; i++){
31
+ var descriptor = props[i];
32
+ descriptor.enumerable = descriptor.enumerable || false;
33
+ descriptor.configurable = true;
34
+ if ("value" in descriptor) descriptor.writable = true;
35
+ Object.defineProperty(target, descriptor.key, descriptor);
36
+ }
37
+ }
38
+ function _createClass(Constructor, protoProps, staticProps) {
39
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
40
+ if (staticProps) _defineProperties(Constructor, staticProps);
41
+ return Constructor;
42
+ }
43
+ function _interopRequireDefault(obj) {
44
+ return obj && obj.__esModule ? obj : {
45
+ default: obj
46
+ };
47
+ }
48
+ function _iterableToArray(iter) {
49
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
50
+ }
51
+ function _nonIterableSpread() {
52
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
53
+ }
54
+ function _toConsumableArray(arr) {
55
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
56
+ }
57
+ function _unsupportedIterableToArray(o, minLen) {
58
+ if (!o) return;
59
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
60
+ var n = Object.prototype.toString.call(o).slice(8, -1);
61
+ if (n === "Object" && o.constructor) n = o.constructor.name;
62
+ if (n === "Map" || n === "Set") return Array.from(n);
63
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
64
+ }
65
+ var metastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproofAssertion/metastatement"), metaSubproofAssertionNodeQuery = (0, _query.nodeQuery)("/metastatement/metaSubproofAssertion!"), unqualifiedMetastatementMetastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproof/unqualifiedMetastatement/metastatement!"), qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery = (0, _query.nodeQuery)("/metaSubproof/subDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
66
+ var MetaAntecedent = /*#__PURE__*/ function() {
67
+ function MetaAntecedent(metastatementNode) {
68
+ _classCallCheck(this, MetaAntecedent);
69
+ this.metastatementNode = metastatementNode;
70
+ }
71
+ _createClass(MetaAntecedent, [
72
+ {
73
+ key: "getMetastatementNode",
74
+ value: function getMetastatementNode() {
75
+ return this.metastatementNode;
76
+ }
77
+ },
78
+ {
79
+ key: "matchSubproofNode",
80
+ value: function matchSubproofNode(metaSubproofNode, metaSubstitutions) {
81
+ var metaSubproofNodeMatches = false;
82
+ var metaSubproofAssertionNode = metaSubproofAssertionNodeQuery(this.metastatementNode);
83
+ if (metaSubproofAssertionNode !== null) {
84
+ var metaSubproofAssertionMetastatementNodes = metastatementNodesQuery(metaSubproofAssertionNode), unqualifiedMetastatementMetastatementNodes = unqualifiedMetastatementMetastatementNodesQuery(metaSubproofNode), qualifiedOrUnqualifiedMetastatementMetastatementNode = qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery(metaSubproofNode), metastatementNodes = _toConsumableArray(unqualifiedMetastatementMetastatementNodes).concat([
85
+ qualifiedOrUnqualifiedMetastatementMetastatementNode
86
+ ]), metastatementNodesLength = metastatementNodes.length, metaSubproofAssertionMetastatementNodesLength = metaSubproofAssertionMetastatementNodes.length;
87
+ if (metastatementNodesLength === metaSubproofAssertionMetastatementNodesLength) {
88
+ metaSubproofNodeMatches = metaSubproofAssertionMetastatementNodes.every(function(metaSubproofAssertionMetastatementNode, index) {
89
+ var metastatementNode = metastatementNodes[index], nonTerminalNode = metastatementNode, metaAntecedentNonTerminalNode = metaSubproofAssertionMetastatementNode, metaAntecedentNonTerminalNodeMatches = matchMetaAntecedentNonTerminalNode(metaAntecedentNonTerminalNode, nonTerminalNode, metaSubstitutions);
90
+ if (metaAntecedentNonTerminalNodeMatches) {
91
+ return true;
92
+ }
93
+ });
94
+ }
95
+ }
96
+ return metaSubproofNodeMatches;
97
+ }
98
+ },
99
+ {
100
+ key: "matchMetastatementNode",
101
+ value: function matchMetastatementNode(metastatementNode, metaSubstitutions) {
102
+ var nonTerminalNode = metastatementNode, metaAntecedentNonTerminalNode = this.metastatementNode, metaAntecedentNonTerminalNodeMatches = matchMetaAntecedentNonTerminalNode(metaAntecedentNonTerminalNode, nonTerminalNode, metaSubstitutions), metastatementNodeMatches = metaAntecedentNonTerminalNodeMatches; ///
103
+ return metastatementNodeMatches;
104
+ }
105
+ },
106
+ {
107
+ key: "toJSON",
108
+ value: function toJSON() {
109
+ var metastatementString = (0, _string.nodeAsString)(this.metastatementNode), metastatement = metastatementString, json = {
110
+ metastatement: metastatement
111
+ };
112
+ return json;
113
+ }
114
+ }
115
+ ], [
116
+ {
117
+ key: "fromJSON",
118
+ value: function fromJSON(json, releaseContext) {
119
+ var metastatement = json.metastatement, metastatementString = metastatement, metastatementNode = (0, _string.metastatementNodeFromMetastatementString)(metastatementString, releaseContext), metaAntecedent = new MetaAntecedent(metastatementNode);
120
+ return metaAntecedent;
121
+ }
122
+ },
123
+ {
124
+ key: "fromMetastatementNode",
125
+ value: function fromMetastatementNode(metastatementNode) {
126
+ var metaAntecedent = new MetaAntecedent(metastatementNode);
127
+ return metaAntecedent;
128
+ }
129
+ }
130
+ ]);
131
+ return MetaAntecedent;
132
+ }();
133
+ function matchMetaAntecedentNode(metaAntecedentNode, node, metaSubstitutions) {
134
+ var metaAntecedentNodeMatches = false;
135
+ var nodeTerminalNode = node.isTerminalNode(), ruleNodeTerminalNode = metaAntecedentNode.isTerminalNode();
136
+ if (nodeTerminalNode === ruleNodeTerminalNode) {
137
+ if (nodeTerminalNode) {
138
+ var terminalNode = node, metaAntecedentTerminalNode = metaAntecedentNode, metaAntecedentTerminalNodeMatches = matchMetaAntecedentTerminalNode(metaAntecedentTerminalNode, terminalNode, metaSubstitutions);
139
+ metaAntecedentNodeMatches = metaAntecedentTerminalNodeMatches; ///
140
+ } else {
141
+ var nonTerminalNode = node, metaAntecedentNonTerminalNode = metaAntecedentNode, metaAntecedentNonTerminalNodeMatches = matchMetaAntecedentNonTerminalNode(metaAntecedentNonTerminalNode, nonTerminalNode, metaSubstitutions);
142
+ metaAntecedentNodeMatches = metaAntecedentNonTerminalNodeMatches; ///
143
+ }
144
+ }
145
+ return metaAntecedentNodeMatches;
146
+ }
147
+ function matchMetaAntecedentNodes(metaAntecedentNodes, nodes, metaSubstitutions) {
148
+ var metaAntecedentNodesMatches = false;
149
+ var nodesLength = nodes.length, metaAntecedentNodesLength = metaAntecedentNodes.length;
150
+ if (nodesLength === metaAntecedentNodesLength) {
151
+ metaAntecedentNodesMatches = nodes.every(function(node, index) {
152
+ var metaAntecedentNode = metaAntecedentNodes[index], metaAntecedentNodeMatches = matchMetaAntecedentNode(metaAntecedentNode, node, metaSubstitutions);
153
+ if (metaAntecedentNodeMatches) {
154
+ return true;
155
+ }
156
+ });
157
+ }
158
+ return metaAntecedentNodesMatches;
159
+ }
160
+ function matchMetaAntecedentMetavariable(metaAntecedentMetavariableNode, nodes, metaSubstitutions) {
161
+ var metaAntecedentMetavariableMatches;
162
+ var metaAntecedentMetavariableName = (0, _query.metavariableNameFromMetavariableNode)(metaAntecedentMetavariableNode), metaSubstitution = metaSubstitutions.find(function(metaSubstitution) {
163
+ var metavariableName = metaSubstitution.getMetavariableName();
164
+ if (metavariableName === metaAntecedentMetavariableName) {
165
+ return true;
166
+ }
167
+ }) || null;
168
+ if (metaSubstitution !== null) {
169
+ var metaSubstitutionNodesMatch = metaSubstitution.matchNodes(nodes);
170
+ metaAntecedentMetavariableMatches = metaSubstitutionNodesMatch; ///
171
+ } else {
172
+ var metavariableName = metaAntecedentMetavariableName, metaSubstitution1 = _metaSubstitution.default.fromMetavariableNameAndNodes(metavariableName, nodes);
173
+ metaSubstitutions.push(metaSubstitution1);
174
+ metaAntecedentMetavariableMatches = true;
175
+ }
176
+ return metaAntecedentMetavariableMatches;
177
+ }
178
+ function matchMetaAntecedentTerminalNode(metaAntecedentTerminalNode, terminalNode, metaSubstitutions) {
179
+ var matches = metaAntecedentTerminalNode.match(terminalNode), metaAntecedentTerminalNodeMatches = matches;
180
+ return metaAntecedentTerminalNodeMatches;
181
+ }
182
+ function matchMetaAntecedentNonTerminalNode(metaAntecedentNonTerminalNode, nonTerminalNode, metaSubstitutions) {
183
+ var metaAntecedentNonTerminalNodeMatches = false;
184
+ var ruleName = nonTerminalNode.getRuleName(), metaAntecedentRuleName = metaAntecedentNonTerminalNode.getRuleName(); ///
185
+ if (ruleName === metaAntecedentRuleName) {
186
+ var childNodes = nonTerminalNode.getChildNodes(), metaAntecedentChildNodes = metaAntecedentNonTerminalNode.getChildNodes(), nodes = childNodes, metaAntecedentNodes = metaAntecedentChildNodes, metaAntecedentChildNodesMatches = matchMetaAntecedentNodes(metaAntecedentNodes, nodes, metaSubstitutions);
187
+ metaAntecedentNonTerminalNodeMatches = metaAntecedentChildNodesMatches; ///
188
+ if (!metaAntecedentNonTerminalNodeMatches) {
189
+ var ruleNameMetastatementRuleName = ruleName === _ruleNames.METASTATEMENT_RULE_NAME;
190
+ if (ruleNameMetastatementRuleName) {
191
+ var metastatementNode = nonTerminalNode, metaAntecedentMetastatementNode = metaAntecedentNonTerminalNode, metaAntecedentMetastatementNodeMatches = matchMetaAntecedentMetastatementNode(metaAntecedentMetastatementNode, metastatementNode, metaSubstitutions);
192
+ metaAntecedentNonTerminalNodeMatches = metaAntecedentMetastatementNodeMatches; ///
193
+ }
194
+ }
195
+ }
196
+ return metaAntecedentNonTerminalNodeMatches;
197
+ }
198
+ function matchMetaAntecedentMetastatementNode(metaAntecedentMetastatementNode, metastatementNode, metaSubstitutions) {
199
+ var metaAntecedentMetastatementNodeMatches = false;
200
+ var metaAntecedentNonTerminalNode = metaAntecedentMetastatementNode, metaAntecedentChildNodes = metaAntecedentNonTerminalNode.getChildNodes(), metaAntecedentChildNodesLength = metaAntecedentChildNodes.length;
201
+ if (metaAntecedentChildNodesLength === 1) {
202
+ var firstMetaAntecedentChildNode = (0, _array.first)(metaAntecedentChildNodes), metaAntecedentChildNode = firstMetaAntecedentChildNode, metaAntecedentChildNodeNonTerminalNode = metaAntecedentChildNode.isNonTerminalNode();
203
+ if (metaAntecedentChildNodeNonTerminalNode) {
204
+ var metaAntecedentNonTerminalChildNode = metaAntecedentChildNode, metaAntecedentNonTerminalChildNodeRuleName = metaAntecedentNonTerminalChildNode.getRuleName(), metaAntecedentNonTerminalChildNodeRuleNameMetavariableRuleName = metaAntecedentNonTerminalChildNodeRuleName === _ruleNames.METAVARIABLE_RULE_NAME;
205
+ if (metaAntecedentNonTerminalChildNodeRuleNameMetavariableRuleName) {
206
+ var metaAntecedentMetavariableNode = metaAntecedentNonTerminalChildNode, nonTerminalNode = metastatementNode, childNodes = nonTerminalNode.getChildNodes(), nodes = childNodes, metaAntecedentMetavariableMatches = matchMetaAntecedentMetavariable(metaAntecedentMetavariableNode, nodes, metaSubstitutions);
207
+ metaAntecedentMetastatementNodeMatches = metaAntecedentMetavariableMatches; ///
208
+ }
209
+ }
210
+ }
211
+ return metaAntecedentMetastatementNodeMatches;
212
+ }
213
+
214
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tZXRhQW50ZWNlZGVudC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcblxuaW1wb3J0IE1ldGFTdWJzdGl0dXRpb24gZnJvbSBcIi4vbWV0YVN1YnN0aXR1dGlvblwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBNRVRBVkFSSUFCTEVfUlVMRV9OQU1FLCBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSB9IGZyb20gXCIuL3J1bGVOYW1lc1wiO1xuXG5jb25zdCBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvbWV0YVN1YnByb29mQXNzZXJ0aW9uL21ldGFzdGF0ZW1lbnRcIiksXG4gICAgICBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXN0YXRlbWVudC9tZXRhU3VicHJvb2ZBc3NlcnRpb24hXCIpLFxuICAgICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL21ldGFTdWJwcm9vZi91bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQvbWV0YXN0YXRlbWVudCFcIiksXG4gICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YVN1YnByb29mL3N1YkRlcml2YXRpb24vcXVhbGlmaWVkTWV0YXN0YXRlbWVudHx1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRbLTFdL21ldGFzdGF0ZW1lbnQhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRhQW50ZWNlZGVudCB7XG4gIGNvbnN0cnVjdG9yKG1ldGFzdGF0ZW1lbnROb2RlKSB7XG4gICAgdGhpcy5tZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlO1xuICB9XG5cbiAgZ2V0TWV0YXN0YXRlbWVudE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBtYXRjaFN1YnByb29mTm9kZShtZXRhU3VicHJvb2ZOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICAgIGxldCBtZXRhU3VicHJvb2ZOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSh0aGlzLm1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIGlmIChtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXMgPSBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeShtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlcyA9IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5KG1ldGFTdWJwcm9vZk5vZGUpLFxuICAgICAgICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZSA9IHF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVRdWVyeShtZXRhU3VicHJvb2ZOb2RlKSxcbiAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlcyA9IFtcbiAgICAgICAgICAgICAgLi4udW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzLFxuICAgICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoID0gbWV0YXN0YXRlbWVudE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChtZXRhc3RhdGVtZW50Tm9kZXNMZW5ndGggPT09IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCkge1xuICAgICAgICBtZXRhU3VicHJvb2ZOb2RlTWF0Y2hlcyA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlcy5ldmVyeSgobWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZSA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlKG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWV0YVN1YnByb29mTm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGFzdGF0ZW1lbnROb2RlKG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGUgPSB0aGlzLm1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZShtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbWV0YXN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyh0aGlzLm1ldGFzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhc3RhdGVtZW50ID0gbWV0YXN0YXRlbWVudFN0cmluZywgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnRcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgcmVsZWFzZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IG1ldGFzdGF0ZW1lbnQgfSA9IGpzb24sXG4gICAgICAgICAgbWV0YXN0YXRlbWVudFN0cmluZyA9IG1ldGFzdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcobWV0YXN0YXRlbWVudFN0cmluZywgcmVsZWFzZUNvbnRleHQpLFxuICAgICAgICAgIG1ldGFBbnRlY2VkZW50ID0gbmV3IE1ldGFBbnRlY2VkZW50KG1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBtZXRhQW50ZWNlZGVudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBtZXRhQW50ZWNlZGVudCA9IG5ldyBNZXRhQW50ZWNlZGVudChtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gbWV0YUFudGVjZWRlbnQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhQW50ZWNlZGVudE5vZGUobWV0YUFudGVjZWRlbnROb2RlLCBub2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgbWV0YUFudGVjZWRlbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgICAgIHJ1bGVOb2RlVGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnROb2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUgPT09IHJ1bGVOb2RlVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIG1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnROb2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudFRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlKG1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlLCB0ZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgbWV0YUFudGVjZWRlbnROb2RlTWF0Y2hlcyA9IG1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlTWF0Y2hlczsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnROb2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaE1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlKG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgbWV0YUFudGVjZWRlbnROb2RlTWF0Y2hlcyA9IG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1ldGFBbnRlY2VkZW50Tm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoTWV0YUFudGVjZWRlbnROb2RlcyhtZXRhQW50ZWNlZGVudE5vZGVzLCBub2RlcywgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IG1ldGFBbnRlY2VkZW50Tm9kZXNNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIG1ldGFBbnRlY2VkZW50Tm9kZXNMZW5ndGggPSBtZXRhQW50ZWNlZGVudE5vZGVzLmxlbmd0aDtcblxuICBpZiAobm9kZXNMZW5ndGggPT09IG1ldGFBbnRlY2VkZW50Tm9kZXNMZW5ndGgpIHtcbiAgICBtZXRhQW50ZWNlZGVudE5vZGVzTWF0Y2hlcyA9IG5vZGVzLmV2ZXJ5KChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgbWV0YUFudGVjZWRlbnROb2RlID0gbWV0YUFudGVjZWRlbnROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vZGVNYXRjaGVzID0gbWF0Y2hNZXRhQW50ZWNlZGVudE5vZGUobWV0YUFudGVjZWRlbnROb2RlLCBub2RlLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIGlmIChtZXRhQW50ZWNlZGVudE5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFBbnRlY2VkZW50Tm9kZXNNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlKG1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlTm9kZSwgbm9kZXMsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBtZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZU1hdGNoZXM7XG5cbiAgY29uc3QgbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKG1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIG1ldGFTdWJzdGl0dXRpb24gPSBtZXRhU3Vic3RpdHV0aW9ucy5maW5kKChtZXRhU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGFTdWJzdGl0dXRpb24uZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5hbWUgPT09IG1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KSB8fCBudWxsO1xuXG4gIGlmIChtZXRhU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgbWV0YVN1YnN0aXR1dGlvbk5vZGVzTWF0Y2ggPSBtZXRhU3Vic3RpdHV0aW9uLm1hdGNoTm9kZXMobm9kZXMpO1xuXG4gICAgbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVNYXRjaGVzID0gbWV0YVN1YnN0aXR1dGlvbk5vZGVzTWF0Y2g7ICAvLy9cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOYW1lLCAvLy9cbiAgICAgICAgICBtZXRhU3Vic3RpdHV0aW9uID0gTWV0YVN1YnN0aXR1dGlvbi5mcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE5vZGVzKG1ldGF2YXJpYWJsZU5hbWUsIG5vZGVzKTtcblxuICAgIG1ldGFTdWJzdGl0dXRpb25zLnB1c2gobWV0YVN1YnN0aXR1dGlvbik7XG5cbiAgICBtZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZU1hdGNoZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIG1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hNZXRhQW50ZWNlZGVudFRlcm1pbmFsTm9kZShtZXRhQW50ZWNlZGVudFRlcm1pbmFsTm9kZSwgdGVybWluYWxOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBtYXRjaGVzID0gbWV0YUFudGVjZWRlbnRUZXJtaW5hbE5vZGUubWF0Y2godGVybWluYWxOb2RlKSxcbiAgICAgICAgbWV0YUFudGVjZWRlbnRUZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hlcztcblxuICByZXR1cm4gbWV0YUFudGVjZWRlbnRUZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlKG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICBjb25zdCBydWxlTmFtZSA9IG5vblRlcm1pbmFsTm9kZS5nZXRSdWxlTmFtZSgpLFxuICAgICAgICBtZXRhQW50ZWNlZGVudFJ1bGVOYW1lID0gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKTsgLy8vXG5cbiAgaWYgKHJ1bGVOYW1lID09PSBtZXRhQW50ZWNlZGVudFJ1bGVOYW1lKSB7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnRDaGlsZE5vZGVzID0gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICAgIG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnROb2RlcyA9IG1ldGFBbnRlY2VkZW50Q2hpbGROb2RlcywgLy8vXG4gICAgICAgICAgbWV0YUFudGVjZWRlbnRDaGlsZE5vZGVzTWF0Y2hlcyA9IG1hdGNoTWV0YUFudGVjZWRlbnROb2RlcyhtZXRhQW50ZWNlZGVudE5vZGVzLCBub2RlcywgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWV0YUFudGVjZWRlbnRDaGlsZE5vZGVzTWF0Y2hlczsgLy8vXG5cbiAgICBpZiAoIW1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlTWF0Y2hlcykge1xuICAgICAgY29uc3QgcnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKHJ1bGVOYW1lTWV0YXN0YXRlbWVudFJ1bGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGFBbnRlY2VkZW50TWV0YXN0YXRlbWVudE5vZGUgPSBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1hdGNoTWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZShtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhc3RhdGVtZW50Tm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgIG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1ldGFBbnRlY2VkZW50TWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzOyAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE1ldGFBbnRlY2VkZW50TWV0YXN0YXRlbWVudE5vZGUobWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZSwgbWV0YXN0YXRlbWVudE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICBtZXRhQW50ZWNlZGVudENoaWxkTm9kZXMgPSBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIG1ldGFBbnRlY2VkZW50Q2hpbGROb2Rlc0xlbmd0aCA9IG1ldGFBbnRlY2VkZW50Q2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG1ldGFBbnRlY2VkZW50Q2hpbGROb2Rlc0xlbmd0aCA9PT0gMSkge1xuICAgIGNvbnN0IGZpcnN0TWV0YUFudGVjZWRlbnRDaGlsZE5vZGUgPSBmaXJzdChtZXRhQW50ZWNlZGVudENoaWxkTm9kZXMpLFxuICAgICAgICAgIG1ldGFBbnRlY2VkZW50Q2hpbGROb2RlID0gZmlyc3RNZXRhQW50ZWNlZGVudENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIG1ldGFBbnRlY2VkZW50Q2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gbWV0YUFudGVjZWRlbnRDaGlsZE5vZGUuaXNOb25UZXJtaW5hbE5vZGUoKTtcblxuICAgIGlmIChtZXRhQW50ZWNlZGVudENoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbENoaWxkTm9kZSA9IG1ldGFBbnRlY2VkZW50Q2hpbGROb2RlLCAgLy8vXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUgPSBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSA9IChtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUgPT09IE1FVEFWQVJJQUJMRV9SVUxFX05BTUUpO1xuXG4gICAgICBpZiAobWV0YUFudGVjZWRlbnROb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOb2RlID0gbWV0YUFudGVjZWRlbnROb25UZXJtaW5hbENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgICBjaGlsZE5vZGVzID0gbm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgbWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVNYXRjaGVzID0gbWF0Y2hNZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZShtZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZU5vZGUsIG5vZGVzLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgbWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtZXRhQW50ZWNlZGVudE1ldGF2YXJpYWJsZU1hdGNoZXM7IC8vL1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbn1cbiJdLCJuYW1lcyI6WyJNZXRhQW50ZWNlZGVudCIsIm1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5IiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5IiwibWV0YXN0YXRlbWVudE5vZGUiLCJnZXRNZXRhc3RhdGVtZW50Tm9kZSIsIm1hdGNoU3VicHJvb2ZOb2RlIiwibWV0YVN1YnByb29mTm9kZSIsIm1ldGFTdWJzdGl0dXRpb25zIiwibWV0YVN1YnByb29mTm9kZU1hdGNoZXMiLCJtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzIiwidW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzIiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlcyIsIm1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImxlbmd0aCIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImV2ZXJ5IiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUiLCJpbmRleCIsIm5vblRlcm1pbmFsTm9kZSIsIm1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxOb2RlIiwibWV0YUFudGVjZWRlbnROb25UZXJtaW5hbE5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsTm9kZSIsIm1hdGNoTWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJ0b0pTT04iLCJtZXRhc3RhdGVtZW50U3RyaW5nIiwibm9kZUFzU3RyaW5nIiwibWV0YXN0YXRlbWVudCIsImpzb24iLCJmcm9tSlNPTiIsInJlbGVhc2VDb250ZXh0IiwibWV0YXN0YXRlbWVudE5vZGVGcm9tTWV0YXN0YXRlbWVudFN0cmluZyIsIm1ldGFBbnRlY2VkZW50IiwiZnJvbU1ldGFzdGF0ZW1lbnROb2RlIiwibWF0Y2hNZXRhQW50ZWNlZGVudE5vZGUiLCJtZXRhQW50ZWNlZGVudE5vZGUiLCJub2RlIiwibWV0YUFudGVjZWRlbnROb2RlTWF0Y2hlcyIsIm5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsInJ1bGVOb2RlVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwibWV0YUFudGVjZWRlbnRUZXJtaW5hbE5vZGUiLCJtZXRhQW50ZWNlZGVudFRlcm1pbmFsTm9kZU1hdGNoZXMiLCJtYXRjaE1ldGFBbnRlY2VkZW50VGVybWluYWxOb2RlIiwibWF0Y2hNZXRhQW50ZWNlZGVudE5vZGVzIiwibWV0YUFudGVjZWRlbnROb2RlcyIsIm5vZGVzIiwibWV0YUFudGVjZWRlbnROb2Rlc01hdGNoZXMiLCJub2Rlc0xlbmd0aCIsIm1ldGFBbnRlY2VkZW50Tm9kZXNMZW5ndGgiLCJtYXRjaE1ldGFBbnRlY2VkZW50TWV0YXZhcmlhYmxlIiwibWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOb2RlIiwibWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVNYXRjaGVzIiwibWV0YUFudGVjZWRlbnRNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwibWV0YVN1YnN0aXR1dGlvbiIsImZpbmQiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoIiwibWF0Y2hOb2RlcyIsIk1ldGFTdWJzdGl0dXRpb24iLCJmcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE5vZGVzIiwicHVzaCIsIm1hdGNoZXMiLCJtYXRjaCIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJtZXRhQW50ZWNlZGVudFJ1bGVOYW1lIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJtZXRhQW50ZWNlZGVudENoaWxkTm9kZXMiLCJtZXRhQW50ZWNlZGVudENoaWxkTm9kZXNNYXRjaGVzIiwicnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUiLCJNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSIsIm1ldGFBbnRlY2VkZW50TWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhQW50ZWNlZGVudE1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YUFudGVjZWRlbnRNZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFBbnRlY2VkZW50Q2hpbGROb2Rlc0xlbmd0aCIsImZpcnN0TWV0YUFudGVjZWRlbnRDaGlsZE5vZGUiLCJmaXJzdCIsIm1ldGFBbnRlY2VkZW50Q2hpbGROb2RlIiwibWV0YUFudGVjZWRlbnRDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUiLCJpc05vblRlcm1pbmFsTm9kZSIsIm1ldGFBbnRlY2VkZW50Tm9uVGVybWluYWxDaGlsZE5vZGUiLCJtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUiLCJtZXRhQW50ZWNlZGVudE5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSIsIk1FVEFWQVJJQUJMRV9SVUxFX05BTUUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBZ0JxQkE7OztxRUFkUTtxQkFFUDtzQkFDTztxQkFDUzt5QkFHMEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWhFLElBQU1DLDBCQUEwQkMsSUFBQUEsaUJBQVUsRUFBQyx5Q0FDckNDLGlDQUFpQ0MsSUFBQUEsZ0JBQVMsRUFBQywwQ0FDM0NDLGtEQUFrREgsSUFBQUEsaUJBQVUsRUFBQywwREFDN0RJLDREQUE0REYsSUFBQUEsZ0JBQVMsRUFBQztBQUU3RCxJQUFBLEFBQU1KLCtCQTZFbEIsQUE3RVk7YUFBTUEsZUFDUE8saUJBQWlCOzhCQURWUDtRQUVqQixJQUFJLENBQUNPLGlCQUFpQixHQUFHQTs7aUJBRlJQOztZQUtuQlEsS0FBQUE7bUJBQUFBLFNBQUFBLHVCQUF1QjtnQkFDckIsT0FBTyxJQUFJLENBQUNELGlCQUFpQjtZQUMv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
package/lib/premise.js CHANGED
@@ -63,7 +63,7 @@ function _unsupportedIterableToArray(o, minLen) {
63
63
  if (n === "Map" || n === "Set") return Array.from(n);
64
64
  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
65
65
  }
66
- var metastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproofAssertion/metastatement"), metaSubproofAssertionNodeQuery = (0, _query.nodeQuery)("/metastatement/metaSubproofAssertion!"), unqualifiedStatementStatementNodesQuery = (0, _query.nodesQuery)("/subproof/unqualifiedStatement/statement!"), unqualifiedMetastatementMetastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproof/unqualifiedMetastatement/metastatement!"), qualifiedOrUnqualifiedStatementStatementNodeQuery = (0, _query.nodeQuery)("/subproof/subDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!"), qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery = (0, _query.nodeQuery)("/metaSubproof/metaSubDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
66
+ var metastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproofAssertion/metastatement"), metaSubproofAssertionNodeQuery = (0, _query.nodeQuery)("/metastatement/metaSubproofAssertion!"), unqualifiedStatementStatementNodesQuery = (0, _query.nodesQuery)("/subproof/antecedent/unqualifiedStatement!/statement!"), unqualifiedMetastatementMetastatementNodesQuery = (0, _query.nodesQuery)("/metaSubproof/metaAntecedent/unqualifiedMetastatement!/metastatement!"), qualifiedOrUnqualifiedStatementStatementNodeQuery = (0, _query.nodeQuery)("/subproof/subDerivation/qualifiedStatement|unqualifiedStatement[-1]/statement!"), qualifiedOrUnqualifiedMetastatementMetastatementNodeQuery = (0, _query.nodeQuery)("/metaSubproof/metaSubDerivation/qualifiedMetastatement|unqualifiedMetastatement[-1]/metastatement!");
67
67
  var Premise = /*#__PURE__*/ function() {
68
68
  function Premise(metastatementNode) {
69
69
  _classCallCheck(this, Premise);
@@ -322,4 +322,4 @@ function metaMatchPremiseMetastatementNode(premiseMetastatementNode, metastateme
322
322
  return premiseMetastatementNodeMatches;
323
323
  }
324
324
 
325
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVtaXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuL3N1YnN0aXR1dGlvblwiO1xuaW1wb3J0IE1ldGFTdWJzdGl0dXRpb24gZnJvbSBcIi4vbWV0YVN1YnN0aXR1dGlvblwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBTVEFURU1FTlRfUlVMRV9OQU1FLCBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSwgTUVUQVZBUklBQkxFX1JVTEVfTkFNRSB9IGZyb20gXCIuL3J1bGVOYW1lc1wiO1xuXG5jb25zdCBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvbWV0YVN1YnByb29mQXNzZXJ0aW9uL21ldGFzdGF0ZW1lbnRcIiksXG4gICAgICBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXN0YXRlbWVudC9tZXRhU3VicHJvb2ZBc3NlcnRpb24hXCIpLFxuICAgICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi9zdWJwcm9vZi91bnF1YWxpZmllZFN0YXRlbWVudC9zdGF0ZW1lbnQhXCIpLFxuICAgICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL21ldGFTdWJwcm9vZi91bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQvbWV0YXN0YXRlbWVudCFcIiksXG4gICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N1YnByb29mL3N1YkRlcml2YXRpb24vcXVhbGlmaWVkU3RhdGVtZW50fHVucXVhbGlmaWVkU3RhdGVtZW50Wy0xXS9zdGF0ZW1lbnQhXCIpLFxuICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGFTdWJwcm9vZi9tZXRhU3ViRGVyaXZhdGlvbi9xdWFsaWZpZWRNZXRhc3RhdGVtZW50fHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudFstMV0vbWV0YXN0YXRlbWVudCFcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZW1pc2Uge1xuICBjb25zdHJ1Y3RvcihtZXRhc3RhdGVtZW50Tm9kZSkge1xuICAgIHRoaXMubWV0YXN0YXRlbWVudE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIGdldE1ldGFzdGF0ZW1lbnROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGFzdGF0ZW1lbnROb2RlO1xuICB9XG5cbiAgbWF0Y2hTdWJwcm9vZk5vZGUoc3VicHJvb2ZOb2RlLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgbGV0IHN1YnByb29mTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSh0aGlzLm1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIGlmIChzdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlcyA9IG1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5KHN1YnByb29mQXNzZXJ0aW9uTm9kZSksXG4gICAgICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGVzID0gdW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2Rlc1F1ZXJ5KHN1YnByb29mTm9kZSksXG4gICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZSA9IHF1YWxpZmllZE9yVW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlUXVlcnkoc3VicHJvb2ZOb2RlKSxcbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGVzID0gW1xuICAgICAgICAgICAgICAuLi51bnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGVzLFxuICAgICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIHN0YXRlbWVudE5vZGVzTGVuZ3RoID0gc3RhdGVtZW50Tm9kZXMubGVuZ3RoLFxuICAgICAgICAgICAgbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKHN0YXRlbWVudE5vZGVzTGVuZ3RoID09PSBtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXNMZW5ndGgpIHtcbiAgICAgICAgc3VicHJvb2ZOb2RlTWF0Y2hlcyA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlcy5ldmVyeSgobWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3RhdGVtZW50Tm9kZSA9IHN0YXRlbWVudE5vZGVzW2luZGV4XSxcbiAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZShwcmVtaXNlTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgICAgaWYgKHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdWJwcm9vZk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZSA9IHRoaXMubWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZShwcmVtaXNlTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIHN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIHN0YXRlbWVudE5vZGVNYXRjaGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXM7IC8vL1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhU3VicHJvb2ZOb2RlKG1ldGFTdWJwcm9vZk5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gICAgbGV0IG1ldGFTdWJwcm9vZk5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZVF1ZXJ5KHRoaXMubWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgaWYgKG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlcyA9IG1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5KG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzID0gdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkobWV0YVN1YnByb29mTm9kZSksXG4gICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlID0gcXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5KG1ldGFTdWJwcm9vZk5vZGUpLFxuICAgICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGVzID0gW1xuICAgICAgICAgICAgICAuLi51bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZXMsXG4gICAgICAgICAgICAgIHF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZXNMZW5ndGggPSBtZXRhc3RhdGVtZW50Tm9kZXMubGVuZ3RoLFxuICAgICAgICAgICAgbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzLmxlbmd0aDtcblxuICAgICAgaWYgKG1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCA9PT0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoKSB7XG4gICAgICAgIG1ldGFTdWJwcm9vZk5vZGVNYXRjaGVzID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzLmV2ZXJ5KChtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXN0YXRlbWVudE5vZGVzW2luZGV4XSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vblRlcm1pbmFsTm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlLCAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGUgPSBtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtZXRhTWF0Y2hQcmVtaXNlTm9uVGVybWluYWxOb2RlKHByZW1pc2VOb25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG1ldGFTdWJwcm9vZk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhc3RhdGVtZW50Tm9kZShtZXRhc3RhdGVtZW50Tm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGUgPSB0aGlzLm1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtZXRhTWF0Y2hQcmVtaXNlTm9uVGVybWluYWxOb2RlKHByZW1pc2VOb25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbWV0YXN0YXRlbWVudFN0cmluZyA9IG5vZGVBc1N0cmluZyh0aGlzLm1ldGFzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgICBtZXRhc3RhdGVtZW50ID0gbWV0YXN0YXRlbWVudFN0cmluZywgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnRcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oanNvbiwgcmVsZWFzZUNvbnRleHQpIHtcbiAgICBjb25zdCB7IG1ldGFzdGF0ZW1lbnQgfSA9IGpzb24sXG4gICAgICAgICAgbWV0YXN0YXRlbWVudFN0cmluZyA9IG1ldGFzdGF0ZW1lbnQsICAvLy9cbiAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcobWV0YXN0YXRlbWVudFN0cmluZywgcmVsZWFzZUNvbnRleHQpLFxuICAgICAgICAgIHByZW1pc2UgPSBuZXcgUHJlbWlzZShtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gcHJlbWlzZTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgICBjb25zdCBwcmVtaXNlID0gbmV3IFByZW1pc2UobWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF0Y2hQcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgbm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICBsZXQgcHJlbWlzZU5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICBydWxlTm9kZVRlcm1pbmFsTm9kZSA9IHByZW1pc2VOb2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUgPT09IHJ1bGVOb2RlVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHByZW1pc2VUZXJtaW5hbE5vZGUgPSBwcmVtaXNlTm9kZSwgIC8vL1xuICAgICAgICAgICAgcHJlbWlzZVRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaFByZW1pc2VUZXJtaW5hbE5vZGUocHJlbWlzZVRlcm1pbmFsTm9kZSwgdGVybWluYWxOb2RlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgcHJlbWlzZU5vZGVNYXRjaGVzID0gcHJlbWlzZVRlcm1pbmFsTm9kZU1hdGNoZXM7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlID0gcHJlbWlzZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hQcmVtaXNlTm9uVGVybWluYWxOb2RlKHByZW1pc2VOb25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHByZW1pc2VOb2RlTWF0Y2hlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJlbWlzZU5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaFByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIG5vZGVzLCBzdWJzdGl0dXRpb25zKSB7XG4gIGxldCBwcmVtaXNlTm9kZXNNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIHByZW1pc2VOb2Rlc0xlbmd0aCA9IHByZW1pc2VOb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSBwcmVtaXNlTm9kZXNMZW5ndGgpIHtcbiAgICBwcmVtaXNlTm9kZXNNYXRjaGVzID0gbm9kZXMuZXZlcnkoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwcmVtaXNlTm9kZSA9IHByZW1pc2VOb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICBwcmVtaXNlTm9kZU1hdGNoZXMgPSBtYXRjaFByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBub2RlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgaWYgKHByZW1pc2VOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwcmVtaXNlTm9kZXNNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaFByZW1pc2VUZXJtaW5hbE5vZGUocHJlbWlzZVRlcm1pbmFsTm9kZSwgdGVybWluYWxOb2RlLCBzdWJzdGl0dXRpb25zKSB7XG4gIGNvbnN0IG1hdGNoZXMgPSBwcmVtaXNlVGVybWluYWxOb2RlLm1hdGNoKHRlcm1pbmFsTm9kZSksXG4gICAgICAgIHByZW1pc2VUZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hlcztcblxuICByZXR1cm4gcHJlbWlzZVRlcm1pbmFsTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZShwcmVtaXNlTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgcHJlbWlzZU5vZGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICBydWxlTmFtZVN0YXRlbWVudFJ1bGVOYW1lID0gKHJ1bGVOYW1lID09PSBTVEFURU1FTlRfUlVMRV9OQU1FKSxcbiAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lTWV0YXN0YXRlbWVudFJ1bGVOYW1lID0gKHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUpO1xuXG4gIGlmIChydWxlTmFtZVN0YXRlbWVudFJ1bGVOYW1lICYmIHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZU1ldGFzdGF0ZW1lbnRSdWxlTmFtZSkge1xuICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBub25UZXJtaW5hbE5vZGUsICAvLy9cbiAgICAgICAgICBwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IG1hdGNoUHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlKHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICBpZiAocHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcykge1xuICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc01hdGNoZXMgPSBtYXRjaFByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIG5vZGVzLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc01hdGNoZXM7IC8vL1xuICAgIH1cbiAgfSBlbHNlIGlmIChydWxlTmFtZSA9PT0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNNYXRjaGVzID0gbWF0Y2hQcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBub2Rlcywgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTWF0Y2hlczsgLy8vXG4gIH1cblxuICByZXR1cm4gcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoUHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUocHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUsIHN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHByZW1pc2VNZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcblxuICBjb25zdCBwcmVtaXNlTWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIHN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZmluZCgoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHN1YnN0aXR1dGlvbi5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTmFtZSA9PT0gcHJlbWlzZU1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAoc3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZXNNYXRjaCA9IHN1YnN0aXR1dGlvbi5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb25Ob2Rlc01hdGNoOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHByZW1pc2VNZXRhdmFyaWFibGVOYW1lLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBTdWJzdGl0dXRpb24uZnJvbU1ldGF2YXJpYWJsZU5hbWVBbmRTdGF0ZW1lbnROb2RlKG1ldGF2YXJpYWJsZU5hbWUsIHN0YXRlbWVudE5vZGUpO1xuXG4gICAgc3Vic3RpdHV0aW9ucy5wdXNoKHN1YnN0aXR1dGlvbik7XG5cbiAgICBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHByZW1pc2VNZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hQcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUocHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlLCBzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zKSB7XG4gIGxldCBwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3QgcHJlbWlzZU5vblRlcm1pbmFsTm9kZSA9IHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc0xlbmd0aCA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLmxlbmd0aDtcblxuICBpZiAocHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdFByZW1pc2VDaGlsZE5vZGUgPSBmaXJzdChwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyksXG4gICAgICAgICAgcHJlbWlzZUNoaWxkTm9kZSA9IGZpcnN0UHJlbWlzZUNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBwcmVtaXNlQ2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAocHJlbWlzZUNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgcHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlID0gcHJlbWlzZUNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUgPSBwcmVtaXNlTm9uVGVybWluYWxDaGlsZE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUgPSAocHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUgPT09IE1FVEFWQVJJQUJMRV9SVUxFX05BTUUpO1xuXG4gICAgICBpZiAocHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSkge1xuICAgICAgICBjb25zdCBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZSA9IHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBwcmVtaXNlTWV0YVZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtYXRjaFByZW1pc2VNZXRhdmFyaWFibGVOb2RlKHByZW1pc2VNZXRhdmFyaWFibGVOb2RlLCBzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICBwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gcHJlbWlzZU1ldGFWYXJpYWJsZU5vZGVNYXRjaGVzOyAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIG5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBwcmVtaXNlTm9kZU1hdGNoZXMgPSBmYWxzZTtcblxuICBjb25zdCBub2RlVGVybWluYWxOb2RlID0gbm9kZS5pc1Rlcm1pbmFsTm9kZSgpLFxuICAgICAgICBydWxlTm9kZVRlcm1pbmFsTm9kZSA9IHByZW1pc2VOb2RlLmlzVGVybWluYWxOb2RlKCk7XG5cbiAgaWYgKG5vZGVUZXJtaW5hbE5vZGUgPT09IHJ1bGVOb2RlVGVybWluYWxOb2RlKSB7XG4gICAgaWYgKG5vZGVUZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGUsICAvLy9cbiAgICAgICAgICAgIHByZW1pc2VUZXJtaW5hbE5vZGUgPSBwcmVtaXNlTm9kZSwgIC8vL1xuICAgICAgICAgICAgcHJlbWlzZVRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtZXRhTWF0Y2hQcmVtaXNlVGVybWluYWxOb2RlKHByZW1pc2VUZXJtaW5hbE5vZGUsIHRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBwcmVtaXNlTm9kZU1hdGNoZXMgPSBwcmVtaXNlVGVybWluYWxOb2RlTWF0Y2hlczsgIC8vL1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlLCAvLy9cbiAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGUgPSBwcmVtaXNlTm9kZSwgIC8vL1xuICAgICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtZXRhTWF0Y2hQcmVtaXNlTm9uVGVybWluYWxOb2RlKHByZW1pc2VOb25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBwcmVtaXNlTm9kZU1hdGNoZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZW1pc2VOb2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoUHJlbWlzZU5vZGVzKHByZW1pc2VOb2Rlcywgbm9kZXMsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBwcmVtaXNlTm9kZXNNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZXNMZW5ndGggPSBub2Rlcy5sZW5ndGgsXG4gICAgICAgIHByZW1pc2VOb2Rlc0xlbmd0aCA9IHByZW1pc2VOb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKG5vZGVzTGVuZ3RoID09PSBwcmVtaXNlTm9kZXNMZW5ndGgpIHtcbiAgICBwcmVtaXNlTm9kZXNNYXRjaGVzID0gbm9kZXMuZXZlcnkoKG5vZGUsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBwcmVtaXNlTm9kZSA9IHByZW1pc2VOb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICBwcmVtaXNlTm9kZU1hdGNoZXMgPSBtZXRhTWF0Y2hQcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgbm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBpZiAocHJlbWlzZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHByZW1pc2VOb2Rlc01hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1ldGFNYXRjaFByZW1pc2VUZXJtaW5hbE5vZGUocHJlbWlzZVRlcm1pbmFsTm9kZSwgdGVybWluYWxOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBtYXRjaGVzID0gcHJlbWlzZVRlcm1pbmFsTm9kZS5tYXRjaCh0ZXJtaW5hbE5vZGUpLFxuICAgICAgICBwcmVtaXNlVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoZXM7XG5cbiAgcmV0dXJuIHByZW1pc2VUZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtZXRhTWF0Y2hQcmVtaXNlTm9uVGVybWluYWxOb2RlKHByZW1pc2VOb25UZXJtaW5hbE5vZGUsIG5vblRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3QgcnVsZU5hbWUgPSBub25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgY2hpbGROb2RlcyA9IG5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgbm9kZXMgPSBjaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgcHJlbWlzZU5vZGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMsIC8vL1xuICAgICAgICBydWxlTmFtZU1ldGFzdGF0ZW1lbnRSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUpLFxuICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlUnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUgPSAocHJlbWlzZU5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lID09PSBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSk7XG5cbiAgaWYgKHJ1bGVOYW1lTWV0YXN0YXRlbWVudFJ1bGVOYW1lICYmIHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZU1ldGFzdGF0ZW1lbnRSdWxlTmFtZSkge1xuICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtZXRhTWF0Y2hQcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUocHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhc3RhdGVtZW50Tm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpO1xuXG4gICAgaWYgKHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZU5vZGVzKHByZW1pc2VOb2Rlcywgbm9kZXMsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc01hdGNoZXM7IC8vL1xuICAgIH1cbiAgfSBlbHNlIGlmIChydWxlTmFtZSA9PT0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lKSB7XG4gICAgY29uc3QgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZU5vZGVzKHByZW1pc2VOb2Rlcywgbm9kZXMsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNNYXRjaGVzOyAvLy9cbiAgfVxuXG4gIHJldHVybiBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoUHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUocHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUsIG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgcHJlbWlzZU1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzO1xuXG4gIGNvbnN0IHByZW1pc2VNZXRhdmFyaWFibGVOYW1lID0gbWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlKHByZW1pc2VNZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgbWV0YVN1YnN0aXR1dGlvbiA9IG1ldGFTdWJzdGl0dXRpb25zLmZpbmQoKG1ldGFTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gbWV0YVN1YnN0aXR1dGlvbi5nZXRNZXRhdmFyaWFibGVOYW1lKCk7XG5cbiAgICAgICAgICBpZiAobWV0YXZhcmlhYmxlTmFtZSA9PT0gcHJlbWlzZU1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSkgfHwgbnVsbDtcblxuICBpZiAobWV0YVN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoID0gbWV0YVN1YnN0aXR1dGlvbi5tYXRjaE1ldGFzdGF0ZW1lbnROb2RlKG1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIHByZW1pc2VNZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IG1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoOyAgLy8vXG4gIH0gZWxzZSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHByZW1pc2VNZXRhdmFyaWFibGVOYW1lLCAvLy9cbiAgICAgICAgICBtZXRhU3Vic3RpdHV0aW9uID0gTWV0YVN1YnN0aXR1dGlvbi5mcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE1ldGFzdGF0ZW1lbnROb2RlKG1ldGF2YXJpYWJsZU5hbWUsIG1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIG1ldGFTdWJzdGl0dXRpb25zLnB1c2gobWV0YVN1YnN0aXR1dGlvbik7XG5cbiAgICBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIHByZW1pc2VNZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoUHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlKHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSwgbWV0YXN0YXRlbWVudE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3QgcHJlbWlzZU5vblRlcm1pbmFsTm9kZSA9IHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc0xlbmd0aCA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLmxlbmd0aDtcblxuICBpZiAocHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNMZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBmaXJzdFByZW1pc2VDaGlsZE5vZGUgPSBmaXJzdChwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyksXG4gICAgICAgICAgcHJlbWlzZUNoaWxkTm9kZSA9IGZpcnN0UHJlbWlzZUNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUgPSBwcmVtaXNlQ2hpbGROb2RlLmlzTm9uVGVybWluYWxOb2RlKCk7XG5cbiAgICBpZiAocHJlbWlzZUNoaWxkTm9kZU5vblRlcm1pbmFsTm9kZSkge1xuICAgICAgY29uc3QgcHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlID0gcHJlbWlzZUNoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUgPSBwcmVtaXNlTm9uVGVybWluYWxDaGlsZE5vZGUuZ2V0UnVsZU5hbWUoKSxcbiAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUgPSAocHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWUgPT09IE1FVEFWQVJJQUJMRV9SVUxFX05BTUUpO1xuXG4gICAgICBpZiAocHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSkge1xuICAgICAgICBjb25zdCBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZSA9IHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZSwgIC8vL1xuICAgICAgICAgICAgICBwcmVtaXNlTWV0YVZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhTWF0Y2hQcmVtaXNlTWV0YXZhcmlhYmxlTm9kZShwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZSwgbWV0YXN0YXRlbWVudE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgICBwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gcHJlbWlzZU1ldGFWYXJpYWJsZU5vZGVNYXRjaGVzOyAvLy9cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbn1cbiJdLCJuYW1lcyI6WyJQcmVtaXNlIiwibWV0YXN0YXRlbWVudE5vZGVzUXVlcnkiLCJub2Rlc1F1ZXJ5IiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2Rlc1F1ZXJ5IiwidW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkiLCJxdWFsaWZpZWRPclVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZVF1ZXJ5IiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZVF1ZXJ5IiwibWV0YXN0YXRlbWVudE5vZGUiLCJnZXRNZXRhc3RhdGVtZW50Tm9kZSIsIm1hdGNoU3VicHJvb2ZOb2RlIiwic3VicHJvb2ZOb2RlIiwic3Vic3RpdHV0aW9ucyIsInN1YnByb29mTm9kZU1hdGNoZXMiLCJzdWJwcm9vZkFzc2VydGlvbk5vZGUiLCJtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXMiLCJ1bnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGVzIiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlcyIsInN0YXRlbWVudE5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoIiwiZXZlcnkiLCJtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZSIsImluZGV4Iiwic3RhdGVtZW50Tm9kZSIsIm5vblRlcm1pbmFsTm9kZSIsInByZW1pc2VOb25UZXJtaW5hbE5vZGUiLCJwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyIsIm1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZSIsIm1hdGNoU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhU3VicHJvb2ZOb2RlIiwibWV0YVN1YnByb29mTm9kZSIsIm1ldGFTdWJzdGl0dXRpb25zIiwibWV0YVN1YnByb29mTm9kZU1hdGNoZXMiLCJtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwidW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzIiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlcyIsIm1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsIm1ldGFNYXRjaFByZW1pc2VOb25UZXJtaW5hbE5vZGUiLCJtYXRjaE1ldGFzdGF0ZW1lbnROb2RlIiwibWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzIiwidG9KU09OIiwibWV0YXN0YXRlbWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsIm1ldGFzdGF0ZW1lbnQiLCJqc29uIiwiZnJvbUpTT04iLCJyZWxlYXNlQ29udGV4dCIsIm1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmciLCJwcmVtaXNlIiwiZnJvbU1ldGFzdGF0ZW1lbnROb2RlIiwibWF0Y2hQcmVtaXNlTm9kZSIsInByZW1pc2VOb2RlIiwibm9kZSIsInByZW1pc2VOb2RlTWF0Y2hlcyIsIm5vZGVUZXJtaW5hbE5vZGUiLCJpc1Rlcm1pbmFsTm9kZSIsInJ1bGVOb2RlVGVybWluYWxOb2RlIiwidGVybWluYWxOb2RlIiwicHJlbWlzZVRlcm1pbmFsTm9kZSIsInByZW1pc2VUZXJtaW5hbE5vZGVNYXRjaGVzIiwibWF0Y2hQcmVtaXNlVGVybWluYWxOb2RlIiwibWF0Y2hQcmVtaXNlTm9kZXMiLCJwcmVtaXNlTm9kZXMiLCJub2RlcyIsInByZW1pc2VOb2Rlc01hdGNoZXMiLCJub2Rlc0xlbmd0aCIsInByZW1pc2VOb2Rlc0xlbmd0aCIsIm1hdGNoZXMiLCJtYXRjaCIsInJ1bGVOYW1lIiwiZ2V0UnVsZU5hbWUiLCJjaGlsZE5vZGVzIiwiZ2V0Q2hpbGROb2RlcyIsInByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSIsInByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzIiwicnVsZU5hbWVTdGF0ZW1lbnRSdWxlTmFtZSIsIlNUQVRFTUVOVF9SVUxFX05BTUUiLCJwcmVtaXNlTm9uVGVybWluYWxOb2RlUnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUiLCJNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSIsInByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSIsInByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMiLCJtYXRjaFByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSIsInByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTWF0Y2hlcyIsIm1hdGNoUHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUiLCJwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZSIsInByZW1pc2VNZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsInByZW1pc2VNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZUZyb21NZXRhdmFyaWFibGVOb2RlIiwic3Vic3RpdHV0aW9uIiwiZmluZCIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXRNZXRhdmFyaWFibGVOYW1lIiwic3Vic3RpdHV0aW9uTm9kZXNNYXRjaCIsIlN1YnN0aXR1dGlvbiIsImZyb21NZXRhdmFyaWFibGVOYW1lQW5kU3RhdGVtZW50Tm9kZSIsInB1c2giLCJwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc0xlbmd0aCIsImZpcnN0UHJlbWlzZUNoaWxkTm9kZSIsImZpcnN0IiwicHJlbWlzZUNoaWxkTm9kZSIsInByZW1pc2VDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUiLCJpc05vblRlcm1pbmFsTm9kZSIsInByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZSIsInByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lIiwicHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlUnVsZU5hbWVNZXRhdmFyaWFibGVSdWxlTmFtZSIsIk1FVEFWQVJJQUJMRV9SVUxFX05BTUUiLCJwcmVtaXNlTWV0YVZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtZXRhTWF0Y2hQcmVtaXNlTm9kZSIsIm1ldGFNYXRjaFByZW1pc2VUZXJtaW5hbE5vZGUiLCJtZXRhTWF0Y2hQcmVtaXNlTm9kZXMiLCJydWxlTmFtZU1ldGFzdGF0ZW1lbnRSdWxlTmFtZSIsIm1ldGFNYXRjaFByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFNYXRjaFByZW1pc2VNZXRhdmFyaWFibGVOb2RlIiwibWV0YVN1YnN0aXR1dGlvbiIsIm1ldGFTdWJzdGl0dXRpb25Ob2Rlc01hdGNoIiwiTWV0YVN1YnN0aXR1dGlvbiIsImZyb21NZXRhdmFyaWFibGVOYW1lQW5kTWV0YXN0YXRlbWVudE5vZGUiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBbUJxQkE7OztpRUFqQkk7cUVBQ0k7cUJBRVA7c0JBQ087cUJBQ1M7eUJBRytDOzs7Ozs7Ozs7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
325
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmVtaXNlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuL3N1YnN0aXR1dGlvblwiO1xuaW1wb3J0IE1ldGFTdWJzdGl0dXRpb24gZnJvbSBcIi4vbWV0YVN1YnN0aXR1dGlvblwiO1xuXG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuaW1wb3J0IHsgbm9kZUFzU3RyaW5nIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUgfSBmcm9tIFwiLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IG1ldGFzdGF0ZW1lbnROb2RlRnJvbU1ldGFzdGF0ZW1lbnRTdHJpbmcgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBTVEFURU1FTlRfUlVMRV9OQU1FLCBNRVRBU1RBVEVNRU5UX1JVTEVfTkFNRSwgTUVUQVZBUklBQkxFX1JVTEVfTkFNRSB9IGZyb20gXCIuL3J1bGVOYW1lc1wiO1xuXG5jb25zdCBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvbWV0YVN1YnByb29mQXNzZXJ0aW9uL21ldGFzdGF0ZW1lbnRcIiksXG4gICAgICBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvbWV0YXN0YXRlbWVudC9tZXRhU3VicHJvb2ZBc3NlcnRpb24hXCIpLFxuICAgICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi9zdWJwcm9vZi9hbnRlY2VkZW50L3VucXVhbGlmaWVkU3RhdGVtZW50IS9zdGF0ZW1lbnQhXCIpLFxuICAgICAgdW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL21ldGFTdWJwcm9vZi9tZXRhQW50ZWNlZGVudC91bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnQhL21ldGFzdGF0ZW1lbnQhXCIpLFxuICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdWJwcm9vZi9zdWJEZXJpdmF0aW9uL3F1YWxpZmllZFN0YXRlbWVudHx1bnF1YWxpZmllZFN0YXRlbWVudFstMV0vc3RhdGVtZW50IVwiKSxcbiAgICAgIHF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9tZXRhU3VicHJvb2YvbWV0YVN1YkRlcml2YXRpb24vcXVhbGlmaWVkTWV0YXN0YXRlbWVudHx1bnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRbLTFdL21ldGFzdGF0ZW1lbnQhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQcmVtaXNlIHtcbiAgY29uc3RydWN0b3IobWV0YXN0YXRlbWVudE5vZGUpIHtcbiAgICB0aGlzLm1ldGFzdGF0ZW1lbnROb2RlID0gbWV0YXN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRNZXRhc3RhdGVtZW50Tm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhc3RhdGVtZW50Tm9kZTtcbiAgfVxuXG4gIG1hdGNoU3VicHJvb2ZOb2RlKHN1YnByb29mTm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICAgIGxldCBzdWJwcm9vZk5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdWJwcm9vZkFzc2VydGlvbk5vZGUgPSBtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlUXVlcnkodGhpcy5tZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBpZiAoc3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXMgPSBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeShzdWJwcm9vZkFzc2VydGlvbk5vZGUpLFxuICAgICAgICAgICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlcyA9IHVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZXNRdWVyeShzdWJwcm9vZk5vZGUpLFxuICAgICAgICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGUgPSBxdWFsaWZpZWRPclVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZVF1ZXJ5KHN1YnByb29mTm9kZSksXG4gICAgICAgICAgICBzdGF0ZW1lbnROb2RlcyA9IFtcbiAgICAgICAgICAgICAgLi4udW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlcyxcbiAgICAgICAgICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGVcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBzdGF0ZW1lbnROb2Rlc0xlbmd0aCA9IHN0YXRlbWVudE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChzdGF0ZW1lbnROb2Rlc0xlbmd0aCA9PT0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoKSB7XG4gICAgICAgIHN1YnByb29mTm9kZU1hdGNoZXMgPSBtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXMuZXZlcnkoKG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlLCBpbmRleCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgbm9uVGVybWluYWxOb2RlID0gc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZSA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaFByZW1pc2VOb25UZXJtaW5hbE5vZGUocHJlbWlzZU5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlLCBzdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAgIGlmIChwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3VicHJvb2ZOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGUgPSB0aGlzLm1ldGFzdGF0ZW1lbnROb2RlLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaFByZW1pc2VOb25UZXJtaW5hbE5vZGUocHJlbWlzZU5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlLCBzdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzOyAvLy9cblxuICAgIHJldHVybiBzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YVN1YnByb29mTm9kZShtZXRhU3VicHJvb2ZOb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICAgIGxldCBtZXRhU3VicHJvb2ZOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gICAgY29uc3QgbWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZSA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSh0aGlzLm1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIGlmIChtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBtZXRhU3VicHJvb2ZBc3NlcnRpb25NZXRhc3RhdGVtZW50Tm9kZXMgPSBtZXRhc3RhdGVtZW50Tm9kZXNRdWVyeShtZXRhU3VicHJvb2ZBc3NlcnRpb25Ob2RlKSxcbiAgICAgICAgICAgIHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlcyA9IHVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5KG1ldGFTdWJwcm9vZk5vZGUpLFxuICAgICAgICAgICAgcXVhbGlmaWVkT3JVbnF1YWxpZmllZE1ldGFzdGF0ZW1lbnRNZXRhc3RhdGVtZW50Tm9kZSA9IHF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVRdWVyeShtZXRhU3VicHJvb2ZOb2RlKSxcbiAgICAgICAgICAgIG1ldGFzdGF0ZW1lbnROb2RlcyA9IFtcbiAgICAgICAgICAgICAgLi4udW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVzLFxuICAgICAgICAgICAgICBxdWFsaWZpZWRPclVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGVzTGVuZ3RoID0gbWV0YXN0YXRlbWVudE5vZGVzLmxlbmd0aCxcbiAgICAgICAgICAgIG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlcy5sZW5ndGg7XG5cbiAgICAgIGlmIChtZXRhc3RhdGVtZW50Tm9kZXNMZW5ndGggPT09IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCkge1xuICAgICAgICBtZXRhU3VicHJvb2ZOb2RlTWF0Y2hlcyA9IG1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlcy5ldmVyeSgobWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZSA9IG1ldGFzdGF0ZW1lbnROb2Rlc1tpbmRleF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25UZXJtaW5hbE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZSwgLy8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlID0gbWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZShwcmVtaXNlTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtZXRhU3VicHJvb2ZOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXN0YXRlbWVudE5vZGUobWV0YXN0YXRlbWVudE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlID0gdGhpcy5tZXRhc3RhdGVtZW50Tm9kZSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZShwcmVtaXNlTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICBtZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG5cbiAgICByZXR1cm4gbWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IG1ldGFzdGF0ZW1lbnRTdHJpbmcgPSBub2RlQXNTdHJpbmcodGhpcy5tZXRhc3RhdGVtZW50Tm9kZSksXG4gICAgICAgICAgbWV0YXN0YXRlbWVudCA9IG1ldGFzdGF0ZW1lbnRTdHJpbmcsIC8vL1xuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBtZXRhc3RhdGVtZW50XG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21KU09OKGpzb24sIHJlbGVhc2VDb250ZXh0KSB7XG4gICAgY29uc3QgeyBtZXRhc3RhdGVtZW50IH0gPSBqc29uLFxuICAgICAgICAgIG1ldGFzdGF0ZW1lbnRTdHJpbmcgPSBtZXRhc3RhdGVtZW50LCAgLy8vXG4gICAgICAgICAgbWV0YXN0YXRlbWVudE5vZGUgPSBtZXRhc3RhdGVtZW50Tm9kZUZyb21NZXRhc3RhdGVtZW50U3RyaW5nKG1ldGFzdGF0ZW1lbnRTdHJpbmcsIHJlbGVhc2VDb250ZXh0KSxcbiAgICAgICAgICBwcmVtaXNlID0gbmV3IFByZW1pc2UobWV0YXN0YXRlbWVudE5vZGUpO1xuXG4gICAgcmV0dXJuIHByZW1pc2U7XG4gIH1cblxuICBzdGF0aWMgZnJvbU1ldGFzdGF0ZW1lbnROb2RlKG1ldGFzdGF0ZW1lbnROb2RlKSB7XG4gICAgY29uc3QgcHJlbWlzZSA9IG5ldyBQcmVtaXNlKG1ldGFzdGF0ZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBwcmVtaXNlO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1hdGNoUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIG5vZGUsIHN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHByZW1pc2VOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVUZXJtaW5hbE5vZGUgPSBub2RlLmlzVGVybWluYWxOb2RlKCksXG4gICAgcnVsZU5vZGVUZXJtaW5hbE5vZGUgPSBwcmVtaXNlTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBydWxlTm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICBwcmVtaXNlVGVybWluYWxOb2RlID0gcHJlbWlzZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHByZW1pc2VUZXJtaW5hbE5vZGVNYXRjaGVzID0gbWF0Y2hQcmVtaXNlVGVybWluYWxOb2RlKHByZW1pc2VUZXJtaW5hbE5vZGUsIHRlcm1pbmFsTm9kZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHByZW1pc2VOb2RlTWF0Y2hlcyA9IHByZW1pc2VUZXJtaW5hbE5vZGVNYXRjaGVzOyAgLy8vXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5vblRlcm1pbmFsTm9kZSA9IG5vZGUsIC8vL1xuICAgICAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZSA9IHByZW1pc2VOb2RlLCAgLy8vXG4gICAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZShwcmVtaXNlTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBwcmVtaXNlTm9kZU1hdGNoZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlczsgLy8vXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZW1pc2VOb2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hQcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBub2Rlcywgc3Vic3RpdHV0aW9ucykge1xuICBsZXQgcHJlbWlzZU5vZGVzTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBwcmVtaXNlTm9kZXNMZW5ndGggPSBwcmVtaXNlTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gcHJlbWlzZU5vZGVzTGVuZ3RoKSB7XG4gICAgcHJlbWlzZU5vZGVzTWF0Y2hlcyA9IG5vZGVzLmV2ZXJ5KChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcHJlbWlzZU5vZGUgPSBwcmVtaXNlTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgcHJlbWlzZU5vZGVNYXRjaGVzID0gbWF0Y2hQcmVtaXNlTm9kZShwcmVtaXNlTm9kZSwgbm9kZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIGlmIChwcmVtaXNlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gcHJlbWlzZU5vZGVzTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWF0Y2hQcmVtaXNlVGVybWluYWxOb2RlKHByZW1pc2VUZXJtaW5hbE5vZGUsIHRlcm1pbmFsTm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICBjb25zdCBtYXRjaGVzID0gcHJlbWlzZVRlcm1pbmFsTm9kZS5tYXRjaCh0ZXJtaW5hbE5vZGUpLFxuICAgICAgICBwcmVtaXNlVGVybWluYWxOb2RlTWF0Y2hlcyA9IG1hdGNoZXM7XG5cbiAgcmV0dXJuIHByZW1pc2VUZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaFByZW1pc2VOb25UZXJtaW5hbE5vZGUocHJlbWlzZU5vblRlcm1pbmFsTm9kZSwgbm9uVGVybWluYWxOb2RlLCBzdWJzdGl0dXRpb25zKSB7XG4gIGxldCBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgIHByZW1pc2VOb2RlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgcnVsZU5hbWVTdGF0ZW1lbnRSdWxlTmFtZSA9IChydWxlTmFtZSA9PT0gU1RBVEVNRU5UX1JVTEVfTkFNRSksXG4gICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZU1ldGFzdGF0ZW1lbnRSdWxlTmFtZSA9IChwcmVtaXNlTm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPT09IE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FKTtcblxuICBpZiAocnVsZU5hbWVTdGF0ZW1lbnRSdWxlTmFtZSAmJiBwcmVtaXNlTm9uVGVybWluYWxOb2RlUnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gbm9uVGVybWluYWxOb2RlLCAgLy8vXG4gICAgICAgICAgcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSBtYXRjaFByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZShwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUsIHN0YXRlbWVudE5vZGUsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgaWYgKHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXMpIHtcbiAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNNYXRjaGVzID0gbWF0Y2hQcmVtaXNlTm9kZXMocHJlbWlzZU5vZGVzLCBub2Rlcywgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNNYXRjaGVzOyAvLy9cbiAgICB9XG4gIH0gZWxzZSBpZiAocnVsZU5hbWUgPT09IHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSkge1xuICAgIGNvbnN0IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTWF0Y2hlcyA9IG1hdGNoUHJlbWlzZU5vZGVzKHByZW1pc2VOb2Rlcywgbm9kZXMsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc01hdGNoZXM7IC8vL1xuICB9XG5cbiAgcmV0dXJuIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaFByZW1pc2VNZXRhdmFyaWFibGVOb2RlKHByZW1pc2VNZXRhdmFyaWFibGVOb2RlLCBzdGF0ZW1lbnROb2RlLCBzdWJzdGl0dXRpb25zKSB7XG4gIGxldCBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG5cbiAgY29uc3QgcHJlbWlzZU1ldGF2YXJpYWJsZU5hbWUgPSBtZXRhdmFyaWFibGVOYW1lRnJvbU1ldGF2YXJpYWJsZU5vZGUocHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICBzdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmQoKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBzdWJzdGl0dXRpb24uZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5hbWUgPT09IHByZW1pc2VNZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKHN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGVzTWF0Y2ggPSBzdWJzdGl0dXRpb24ubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpO1xuXG4gICAgcHJlbWlzZU1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gc3Vic3RpdHV0aW9uTm9kZXNNYXRjaDsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBwcmVtaXNlTWV0YXZhcmlhYmxlTmFtZSwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gU3Vic3RpdHV0aW9uLmZyb21NZXRhdmFyaWFibGVOYW1lQW5kU3RhdGVtZW50Tm9kZShtZXRhdmFyaWFibGVOYW1lLCBzdGF0ZW1lbnROb2RlKTtcblxuICAgIHN1YnN0aXR1dGlvbnMucHVzaChzdWJzdGl0dXRpb24pO1xuXG4gICAgcHJlbWlzZU1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1hdGNoUHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlKHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSwgc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICBsZXQgcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHByZW1pc2VOb25UZXJtaW5hbE5vZGUgPSBwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNMZW5ndGggPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RQcmVtaXNlQ2hpbGROb2RlID0gZmlyc3QocHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMpLFxuICAgICAgICAgIHByZW1pc2VDaGlsZE5vZGUgPSBmaXJzdFByZW1pc2VDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwcmVtaXNlQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gcHJlbWlzZUNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKHByZW1pc2VDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZSA9IHByZW1pc2VDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lID0gcHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxDaGlsZE5vZGVSdWxlTmFtZU1ldGF2YXJpYWJsZVJ1bGVOYW1lID0gKHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lID09PSBNRVRBVkFSSUFCTEVfUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUgPSBwcmVtaXNlTm9uVGVybWluYWxDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgcHJlbWlzZU1ldGFWYXJpYWJsZU5vZGVNYXRjaGVzID0gbWF0Y2hQcmVtaXNlTWV0YXZhcmlhYmxlTm9kZShwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZSwgc3RhdGVtZW50Tm9kZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHByZW1pc2VNZXRhVmFyaWFibGVOb2RlTWF0Y2hlczsgLy8vXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1ldGFNYXRjaFByZW1pc2VOb2RlKHByZW1pc2VOb2RlLCBub2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgcHJlbWlzZU5vZGVNYXRjaGVzID0gZmFsc2U7XG5cbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKSxcbiAgICAgICAgcnVsZU5vZGVUZXJtaW5hbE5vZGUgPSBwcmVtaXNlTm9kZS5pc1Rlcm1pbmFsTm9kZSgpO1xuXG4gIGlmIChub2RlVGVybWluYWxOb2RlID09PSBydWxlTm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGlmIChub2RlVGVybWluYWxOb2RlKSB7XG4gICAgICBjb25zdCB0ZXJtaW5hbE5vZGUgPSBub2RlLCAgLy8vXG4gICAgICAgICAgICBwcmVtaXNlVGVybWluYWxOb2RlID0gcHJlbWlzZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHByZW1pc2VUZXJtaW5hbE5vZGVNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZVRlcm1pbmFsTm9kZShwcmVtaXNlVGVybWluYWxOb2RlLCB0ZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgcHJlbWlzZU5vZGVNYXRjaGVzID0gcHJlbWlzZVRlcm1pbmFsTm9kZU1hdGNoZXM7ICAvLy9cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgbm9uVGVybWluYWxOb2RlID0gbm9kZSwgLy8vXG4gICAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlID0gcHJlbWlzZU5vZGUsICAvLy9cbiAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZShwcmVtaXNlTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgcHJlbWlzZU5vZGVNYXRjaGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXM7IC8vL1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmVtaXNlTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1ldGFNYXRjaFByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIG5vZGVzLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgcHJlbWlzZU5vZGVzTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IG5vZGVzTGVuZ3RoID0gbm9kZXMubGVuZ3RoLFxuICAgICAgICBwcmVtaXNlTm9kZXNMZW5ndGggPSBwcmVtaXNlTm9kZXMubGVuZ3RoO1xuXG4gIGlmIChub2Rlc0xlbmd0aCA9PT0gcHJlbWlzZU5vZGVzTGVuZ3RoKSB7XG4gICAgcHJlbWlzZU5vZGVzTWF0Y2hlcyA9IG5vZGVzLmV2ZXJ5KChub2RlLCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgcHJlbWlzZU5vZGUgPSBwcmVtaXNlTm9kZXNbaW5kZXhdLFxuICAgICAgICAgICAgcHJlbWlzZU5vZGVNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZU5vZGUocHJlbWlzZU5vZGUsIG5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgICAgaWYgKHByZW1pc2VOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBwcmVtaXNlTm9kZXNNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtZXRhTWF0Y2hQcmVtaXNlVGVybWluYWxOb2RlKHByZW1pc2VUZXJtaW5hbE5vZGUsIHRlcm1pbmFsTm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHByZW1pc2VUZXJtaW5hbE5vZGUubWF0Y2godGVybWluYWxOb2RlKSxcbiAgICAgICAgcHJlbWlzZVRlcm1pbmFsTm9kZU1hdGNoZXMgPSBtYXRjaGVzO1xuXG4gIHJldHVybiBwcmVtaXNlVGVybWluYWxOb2RlTWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbWV0YU1hdGNoUHJlbWlzZU5vblRlcm1pbmFsTm9kZShwcmVtaXNlTm9uVGVybWluYWxOb2RlLCBub25UZXJtaW5hbE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKSB7XG4gIGxldCBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHJ1bGVOYW1lID0gbm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIGNoaWxkTm9kZXMgPSBub25UZXJtaW5hbE5vZGUuZ2V0Q2hpbGROb2RlcygpLFxuICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlUnVsZU5hbWUgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZS5nZXRDaGlsZE5vZGVzKCksXG4gICAgICAgIG5vZGVzID0gY2hpbGROb2RlcywgLy8vXG4gICAgICAgIHByZW1pc2VOb2RlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzLCAvLy9cbiAgICAgICAgcnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUgPSAocnVsZU5hbWUgPT09IE1FVEFTVEFURU1FTlRfUlVMRV9OQU1FKSxcbiAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lTWV0YXN0YXRlbWVudFJ1bGVOYW1lID0gKHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSA9PT0gTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUpO1xuXG4gIGlmIChydWxlTmFtZU1ldGFzdGF0ZW1lbnRSdWxlTmFtZSAmJiBwcmVtaXNlTm9uVGVybWluYWxOb2RlUnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUpIHtcbiAgICBjb25zdCBtZXRhc3RhdGVtZW50Tm9kZSA9IG5vblRlcm1pbmFsTm9kZSwgIC8vL1xuICAgICAgICAgIHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGUsICAvLy9cbiAgICAgICAgICBwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlKHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZSwgbWV0YXN0YXRlbWVudE5vZGUsIG1ldGFTdWJzdGl0dXRpb25zKTtcblxuICAgIGlmIChwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzKSB7XG4gICAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTWF0Y2hlcyA9IG1ldGFNYXRjaFByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIG5vZGVzLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgIHByZW1pc2VOb25UZXJtaW5hbE5vZGVNYXRjaGVzID0gcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNNYXRjaGVzOyAvLy9cbiAgICB9XG4gIH0gZWxzZSBpZiAocnVsZU5hbWUgPT09IHByZW1pc2VOb25UZXJtaW5hbE5vZGVSdWxlTmFtZSkge1xuICAgIGNvbnN0IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTWF0Y2hlcyA9IG1ldGFNYXRjaFByZW1pc2VOb2RlcyhwcmVtaXNlTm9kZXMsIG5vZGVzLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBwcmVtaXNlTm9uVGVybWluYWxOb2RlTWF0Y2hlcyA9IHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTWF0Y2hlczsgLy8vXG4gIH1cblxuICByZXR1cm4gcHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1ldGFNYXRjaFByZW1pc2VNZXRhdmFyaWFibGVOb2RlKHByZW1pc2VNZXRhdmFyaWFibGVOb2RlLCBtZXRhc3RhdGVtZW50Tm9kZSwgbWV0YVN1YnN0aXR1dGlvbnMpIHtcbiAgbGV0IHByZW1pc2VNZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcblxuICBjb25zdCBwcmVtaXNlTWV0YXZhcmlhYmxlTmFtZSA9IG1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZShwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgIG1ldGFTdWJzdGl0dXRpb24gPSBtZXRhU3Vic3RpdHV0aW9ucy5maW5kKChtZXRhU3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IG1ldGFTdWJzdGl0dXRpb24uZ2V0TWV0YXZhcmlhYmxlTmFtZSgpO1xuXG4gICAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5hbWUgPT09IHByZW1pc2VNZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pIHx8IG51bGw7XG5cbiAgaWYgKG1ldGFTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBtZXRhU3Vic3RpdHV0aW9uTm9kZXNNYXRjaCA9IG1ldGFTdWJzdGl0dXRpb24ubWF0Y2hNZXRhc3RhdGVtZW50Tm9kZShtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBtZXRhU3Vic3RpdHV0aW9uTm9kZXNNYXRjaDsgIC8vL1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSBwcmVtaXNlTWV0YXZhcmlhYmxlTmFtZSwgLy8vXG4gICAgICAgICAgbWV0YVN1YnN0aXR1dGlvbiA9IE1ldGFTdWJzdGl0dXRpb24uZnJvbU1ldGF2YXJpYWJsZU5hbWVBbmRNZXRhc3RhdGVtZW50Tm9kZShtZXRhdmFyaWFibGVOYW1lLCBtZXRhc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBtZXRhU3Vic3RpdHV0aW9ucy5wdXNoKG1ldGFTdWJzdGl0dXRpb24pO1xuXG4gICAgcHJlbWlzZU1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZU1hdGNoZXM7XG59XG5cbmZ1bmN0aW9uIG1ldGFNYXRjaFByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZShwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUsIG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhU3Vic3RpdHV0aW9ucykge1xuICBsZXQgcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IGZhbHNlO1xuXG4gIGNvbnN0IHByZW1pc2VOb25UZXJtaW5hbE5vZGUgPSBwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUsICAvLy9cbiAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMgPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlLmdldENoaWxkTm9kZXMoKSxcbiAgICAgICAgcHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNMZW5ndGggPSBwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlcy5sZW5ndGg7XG5cbiAgaWYgKHByZW1pc2VOb25UZXJtaW5hbE5vZGVDaGlsZE5vZGVzTGVuZ3RoID09PSAxKSB7XG4gICAgY29uc3QgZmlyc3RQcmVtaXNlQ2hpbGROb2RlID0gZmlyc3QocHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXMpLFxuICAgICAgICAgIHByZW1pc2VDaGlsZE5vZGUgPSBmaXJzdFByZW1pc2VDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICBwcmVtaXNlQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlID0gcHJlbWlzZUNoaWxkTm9kZS5pc05vblRlcm1pbmFsTm9kZSgpO1xuXG4gICAgaWYgKHByZW1pc2VDaGlsZE5vZGVOb25UZXJtaW5hbE5vZGUpIHtcbiAgICAgIGNvbnN0IHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZSA9IHByZW1pc2VDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgIHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lID0gcHJlbWlzZU5vblRlcm1pbmFsQ2hpbGROb2RlLmdldFJ1bGVOYW1lKCksXG4gICAgICAgICAgICBwcmVtaXNlTm9uVGVybWluYWxDaGlsZE5vZGVSdWxlTmFtZU1ldGF2YXJpYWJsZVJ1bGVOYW1lID0gKHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lID09PSBNRVRBVkFSSUFCTEVfUlVMRV9OQU1FKTtcblxuICAgICAgaWYgKHByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUpIHtcbiAgICAgICAgY29uc3QgcHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUgPSBwcmVtaXNlTm9uVGVybWluYWxDaGlsZE5vZGUsICAvLy9cbiAgICAgICAgICAgICAgcHJlbWlzZU1ldGFWYXJpYWJsZU5vZGVNYXRjaGVzID0gbWV0YU1hdGNoUHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUocHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUsIG1ldGFzdGF0ZW1lbnROb2RlLCBtZXRhU3Vic3RpdHV0aW9ucyk7XG5cbiAgICAgICAgcHJlbWlzZU1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHByZW1pc2VNZXRhVmFyaWFibGVOb2RlTWF0Y2hlczsgLy8vXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZW1pc2VNZXRhc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG59XG4iXSwibmFtZXMiOlsiUHJlbWlzZSIsIm1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk5vZGVRdWVyeSIsIm5vZGVRdWVyeSIsInVucXVhbGlmaWVkU3RhdGVtZW50U3RhdGVtZW50Tm9kZXNRdWVyeSIsInVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2Rlc1F1ZXJ5IiwicXVhbGlmaWVkT3JVbnF1YWxpZmllZFN0YXRlbWVudFN0YXRlbWVudE5vZGVRdWVyeSIsInF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGVRdWVyeSIsIm1ldGFzdGF0ZW1lbnROb2RlIiwiZ2V0TWV0YXN0YXRlbWVudE5vZGUiLCJtYXRjaFN1YnByb29mTm9kZSIsInN1YnByb29mTm9kZSIsInN1YnN0aXR1dGlvbnMiLCJzdWJwcm9vZk5vZGVNYXRjaGVzIiwic3VicHJvb2ZBc3NlcnRpb25Ob2RlIiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGVzIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlcyIsInF1YWxpZmllZE9yVW5xdWFsaWZpZWRTdGF0ZW1lbnRTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZXMiLCJzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImxlbmd0aCIsIm1ldGFTdWJwcm9vZkFzc2VydGlvbk1ldGFzdGF0ZW1lbnROb2Rlc0xlbmd0aCIsImV2ZXJ5IiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTWV0YXN0YXRlbWVudE5vZGUiLCJpbmRleCIsInN0YXRlbWVudE5vZGUiLCJub25UZXJtaW5hbE5vZGUiLCJwcmVtaXNlTm9uVGVybWluYWxOb2RlIiwicHJlbWlzZU5vblRlcm1pbmFsTm9kZU1hdGNoZXMiLCJtYXRjaFByZW1pc2VOb25UZXJtaW5hbE5vZGUiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YVN1YnByb29mTm9kZSIsIm1ldGFTdWJwcm9vZk5vZGUiLCJtZXRhU3Vic3RpdHV0aW9ucyIsIm1ldGFTdWJwcm9vZk5vZGVNYXRjaGVzIiwibWV0YVN1YnByb29mQXNzZXJ0aW9uTm9kZSIsInVucXVhbGlmaWVkTWV0YXN0YXRlbWVudE1ldGFzdGF0ZW1lbnROb2RlcyIsInF1YWxpZmllZE9yVW5xdWFsaWZpZWRNZXRhc3RhdGVtZW50TWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhc3RhdGVtZW50Tm9kZXMiLCJtZXRhc3RhdGVtZW50Tm9kZXNMZW5ndGgiLCJtZXRhTWF0Y2hQcmVtaXNlTm9uVGVybWluYWxOb2RlIiwibWF0Y2hNZXRhc3RhdGVtZW50Tm9kZSIsIm1ldGFzdGF0ZW1lbnROb2RlTWF0Y2hlcyIsInRvSlNPTiIsIm1ldGFzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJtZXRhc3RhdGVtZW50IiwianNvbiIsImZyb21KU09OIiwicmVsZWFzZUNvbnRleHQiLCJtZXRhc3RhdGVtZW50Tm9kZUZyb21NZXRhc3RhdGVtZW50U3RyaW5nIiwicHJlbWlzZSIsImZyb21NZXRhc3RhdGVtZW50Tm9kZSIsIm1hdGNoUHJlbWlzZU5vZGUiLCJwcmVtaXNlTm9kZSIsIm5vZGUiLCJwcmVtaXNlTm9kZU1hdGNoZXMiLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJydWxlTm9kZVRlcm1pbmFsTm9kZSIsInRlcm1pbmFsTm9kZSIsInByZW1pc2VUZXJtaW5hbE5vZGUiLCJwcmVtaXNlVGVybWluYWxOb2RlTWF0Y2hlcyIsIm1hdGNoUHJlbWlzZVRlcm1pbmFsTm9kZSIsIm1hdGNoUHJlbWlzZU5vZGVzIiwicHJlbWlzZU5vZGVzIiwibm9kZXMiLCJwcmVtaXNlTm9kZXNNYXRjaGVzIiwibm9kZXNMZW5ndGgiLCJwcmVtaXNlTm9kZXNMZW5ndGgiLCJtYXRjaGVzIiwibWF0Y2giLCJydWxlTmFtZSIsImdldFJ1bGVOYW1lIiwiY2hpbGROb2RlcyIsImdldENoaWxkTm9kZXMiLCJwcmVtaXNlTm9uVGVybWluYWxOb2RlUnVsZU5hbWUiLCJwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2RlcyIsInJ1bGVOYW1lU3RhdGVtZW50UnVsZU5hbWUiLCJTVEFURU1FTlRfUlVMRV9OQU1FIiwicHJlbWlzZU5vblRlcm1pbmFsTm9kZVJ1bGVOYW1lTWV0YXN0YXRlbWVudFJ1bGVOYW1lIiwiTUVUQVNUQVRFTUVOVF9SVUxFX05BTUUiLCJwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUiLCJwcmVtaXNlTWV0YXN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hQcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUiLCJwcmVtaXNlTm9uVGVybWluYWxOb2RlQ2hpbGROb2Rlc01hdGNoZXMiLCJtYXRjaFByZW1pc2VNZXRhdmFyaWFibGVOb2RlIiwicHJlbWlzZU1ldGF2YXJpYWJsZU5vZGUiLCJwcmVtaXNlTWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMiLCJwcmVtaXNlTWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWVGcm9tTWV0YXZhcmlhYmxlTm9kZSIsInN1YnN0aXR1dGlvbiIsImZpbmQiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsInN1YnN0aXR1dGlvbk5vZGVzTWF0Y2giLCJTdWJzdGl0dXRpb24iLCJmcm9tTWV0YXZhcmlhYmxlTmFtZUFuZFN0YXRlbWVudE5vZGUiLCJwdXNoIiwicHJlbWlzZU5vblRlcm1pbmFsTm9kZUNoaWxkTm9kZXNMZW5ndGgiLCJmaXJzdFByZW1pc2VDaGlsZE5vZGUiLCJmaXJzdCIsInByZW1pc2VDaGlsZE5vZGUiLCJwcmVtaXNlQ2hpbGROb2RlTm9uVGVybWluYWxOb2RlIiwiaXNOb25UZXJtaW5hbE5vZGUiLCJwcmVtaXNlTm9uVGVybWluYWxDaGlsZE5vZGUiLCJwcmVtaXNlTm9uVGVybWluYWxDaGlsZE5vZGVSdWxlTmFtZSIsInByZW1pc2VOb25UZXJtaW5hbENoaWxkTm9kZVJ1bGVOYW1lTWV0YXZhcmlhYmxlUnVsZU5hbWUiLCJNRVRBVkFSSUFCTEVfUlVMRV9OQU1FIiwicHJlbWlzZU1ldGFWYXJpYWJsZU5vZGVNYXRjaGVzIiwibWV0YU1hdGNoUHJlbWlzZU5vZGUiLCJtZXRhTWF0Y2hQcmVtaXNlVGVybWluYWxOb2RlIiwibWV0YU1hdGNoUHJlbWlzZU5vZGVzIiwicnVsZU5hbWVNZXRhc3RhdGVtZW50UnVsZU5hbWUiLCJtZXRhTWF0Y2hQcmVtaXNlTWV0YXN0YXRlbWVudE5vZGUiLCJtZXRhTWF0Y2hQcmVtaXNlTWV0YXZhcmlhYmxlTm9kZSIsIm1ldGFTdWJzdGl0dXRpb24iLCJtZXRhU3Vic3RpdHV0aW9uTm9kZXNNYXRjaCIsIk1ldGFTdWJzdGl0dXRpb24iLCJmcm9tTWV0YXZhcmlhYmxlTmFtZUFuZE1ldGFzdGF0ZW1lbnROb2RlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQW1CcUJBOzs7aUVBakJJO3FFQUNJO3FCQUVQ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
@@ -48,7 +48,7 @@ function _unsupportedIterableToArray(o, minLen) {
48
48
  function createReleaseContext(dependency, dependentNames, context, callback) {
49
49
  var releaseContextMap = context.releaseContextMap, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName] || null;
50
50
  if (releaseContext !== null) {
51
- var error = null;
51
+ var error = checkReleaseMatchesDependency(dependency, dependentNames, releaseContext);
52
52
  callback(error);
53
53
  return;
54
54
  }
@@ -63,10 +63,9 @@ function createReleaseContext(dependency, dependentNames, context, callback) {
63
63
  callback(_$error);
64
64
  return;
65
65
  }
66
- var releaseMatchesDependency = checkReleaseMatchesDependency(dependency, dependentNames, releaseContext, context);
67
- if (!releaseMatchesDependency) {
68
- var version = releaseContext.getVersion(), versionString = version.toString(), lastDependentName = (0, _array.last)(dependentNames), dependentName = lastDependentName, dependencyName = dependency.getName(), shortenedVersion = dependency.getShortedVersion(), shortenedVersionString = shortenedVersion.toString(), _$error1 = "Version mismatch: '".concat(dependentName, "' requires '").concat(dependencyName, "' to be version ").concat(shortenedVersionString, ".0 or higher but version ").concat(versionString, " has been supplied.");
69
- callback(_$error1);
66
+ error = checkReleaseMatchesDependency(dependency, dependentNames, releaseContext);
67
+ if (error !== null) {
68
+ callback(error);
70
69
  return;
71
70
  }
72
71
  releaseContextMap[releaseName] = releaseContext;
@@ -104,19 +103,27 @@ var _default = {
104
103
  initialiseReleaseContext: initialiseReleaseContext
105
104
  };
106
105
  function checkCyclicDependencyExists(dependency, dependentNames) {
106
+ var error = null;
107
107
  var dependencyName = dependency.getName(), dependentNamesIncludesDependencyName = dependentNames.includes(dependencyName), cyclicDependencyExists = dependentNamesIncludesDependencyName; ///
108
- return cyclicDependencyExists;
108
+ if (cyclicDependencyExists) {
109
+ var firstDependentName = first(dependentNames), dependencyNames = _toConsumableArray(dependentNames).concat([
110
+ firstDependentName
111
+ ]), dependencyNamesString = dependencyNames.join("' -> '");
112
+ error = "There is a cyclic dependency: '".concat(dependencyNamesString, "'.");
113
+ }
114
+ return error;
109
115
  }
110
- function checkReleaseMatchesDependency(dependency, dependentNames, releaseContext, context) {
111
- var releaseMatchesDependency = true;
116
+ function checkReleaseMatchesDependency(dependency, dependentNames, releaseContext) {
117
+ var error = null;
112
118
  var entries = releaseContext.getEntries(), shortenedVersion = dependency.getShortedVersion();
113
119
  if (shortenedVersion !== null) {
114
120
  var entriesMatchShortenedVersion = entries.matchShortenedVersion(shortenedVersion);
115
121
  if (!entriesMatchShortenedVersion) {
116
- releaseMatchesDependency = false;
122
+ var version = releaseContext.getVersion(), versionString = version.toString(), lastDependentName = (0, _array.last)(dependentNames), dependentName = lastDependentName, dependencyName = dependency.getName(), shortenedVersion1 = dependency.getShortedVersion(), shortenedVersionString = shortenedVersion1.toString();
123
+ error = "Version mismatch: '".concat(dependentName, "' requires '").concat(dependencyName, "' to be version ").concat(shortenedVersionString, ".0 or higher but version ").concat(versionString, " has been supplied.");
117
124
  }
118
125
  }
119
- return releaseMatchesDependency;
126
+ return error;
120
127
  }
121
128
  function createDependencyReleaseContexts(dependency, dependentNames, context, callback) {
122
129
  var releaseContextMap = context.releaseContextMap, dependencyName = dependency.getName(), releaseName = dependencyName, releaseContext = releaseContextMap[releaseName], dependencies = releaseContext.getDependencies();
@@ -124,11 +131,8 @@ function createDependencyReleaseContexts(dependency, dependentNames, context, ca
124
131
  dependencyName
125
132
  ]); ///
126
133
  dependencies.asynchronousForEachDependency(function(dependency, next, done) {
127
- var cyclicDependencyExists = checkCyclicDependencyExists(dependency, dependentNames);
128
- if (cyclicDependencyExists) {
129
- var firstDependentName = first(dependentNames), dependencyNames = _toConsumableArray(dependentNames).concat([
130
- firstDependentName
131
- ]), dependencyNamesString = dependencyNames.join("' -> '"), error = "There is a cyclic dependency: '".concat(dependencyNamesString, "'.");
134
+ var error = checkCyclicDependencyExists(dependency, dependentNames);
135
+ if (error !== null) {
132
136
  callback(error);
133
137
  return;
134
138
  }
@@ -162,4 +166,4 @@ function retrieveDependencyReleaseContexts(dependency, context) {
162
166
  return dependencyReleaseContexts;
163
167
  }
164
168
 
165
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcmVsZWFzZUNvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dE1hcCB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBkZXBlbmRlbmN5TmFtZSwgLy8vXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdIHx8IG51bGw7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZXJyb3IgPSBudWxsO1xuXG4gICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5QW5kRGVwZW5kZW50TmFtZXMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeUFuZERlcGVuZGVudE5hbWVzKGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCAoZXJyb3IsIHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVsZWFzZUNvbnRleHQgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gYFRoZSAnJHtyZWxlYXNlTmFtZX0nIHBhY2thZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQuYDtcblxuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3koZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIHJlbGVhc2VDb250ZXh0LCBjb250ZXh0KTtcblxuICAgIGlmICghcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KSAge1xuICAgICAgY29uc3QgdmVyc2lvbiA9IHJlbGVhc2VDb250ZXh0LmdldFZlcnNpb24oKSxcbiAgICAgICAgICAgIHZlcnNpb25TdHJpbmcgPSB2ZXJzaW9uLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBsYXN0RGVwZW5kZW50TmFtZSA9IGxhc3QoZGVwZW5kZW50TmFtZXMpLFxuICAgICAgICAgICAgZGVwZW5kZW50TmFtZSA9IGxhc3REZXBlbmRlbnROYW1lLCAgLy8vXG4gICAgICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICAgICAgc2hvcnRlbmVkVmVyc2lvbiA9IGRlcGVuZGVuY3kuZ2V0U2hvcnRlZFZlcnNpb24oKSxcbiAgICAgICAgICAgIHNob3J0ZW5lZFZlcnNpb25TdHJpbmcgPSBzaG9ydGVuZWRWZXJzaW9uLnRvU3RyaW5nKCksXG4gICAgICAgICAgICBlcnJvciA9IGBWZXJzaW9uIG1pc21hdGNoOiAnJHtkZXBlbmRlbnROYW1lfScgcmVxdWlyZXMgJyR7ZGVwZW5kZW5jeU5hbWV9JyB0byBiZSB2ZXJzaW9uICR7c2hvcnRlbmVkVmVyc2lvblN0cmluZ30uMCBvciBoaWdoZXIgYnV0IHZlcnNpb24gJHt2ZXJzaW9uU3RyaW5nfSBoYXMgYmVlbiBzdXBwbGllZC5gO1xuXG4gICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV0gPSByZWxlYXNlQ29udGV4dDtcblxuICAgIGNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMsIGNvbnRleHQsIGNhbGxiYWNrKTtcbiAgfSwgY29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0aWFsaXNlUmVsZWFzZUNvbnRleHQoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZSwgdmVyaWZpZWQsIGNvbnRleHQpIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dE1hcCB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBkZXBlbmRlbmN5TmFtZSwgLy8vXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdIHx8IG51bGw7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgaW5pdGlhbGlzZWQgPSByZWxlYXNlQ29udGV4dC5pc0luaXRpYWxpc2VkKCk7XG5cbiAgaWYgKGluaXRpYWxpc2VkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVsZWFzZUNvbnRleHRWZXJpZmllZCA9IHJlbGVhc2VDb250ZXh0LmlzVmVyaWZpZWQoKTtcblxuICBpZiAodmVyaWZpZWQpIHtcbiAgICBpZiAoIXJlbGVhc2VDb250ZXh0VmVyaWZpZWQpIHtcbiAgICAgIGNvbnN0IHsgbG9nIH0gPSBjb250ZXh0O1xuXG4gICAgICBsb2cgLmVycm9yKGBVbmFibGUgdG8gaW5pdGlhbGlzZSB0aGUgJyR7cmVsZWFzZU5hbWV9JyBkZXBlbmRlbmN5J3MgY29udGV4dCBiZWNhdXNlIGl0cyAnJHtkZXBlbmRlbnROYW1lfScgZGVwZW5kZW50IGlzIGEgcGFja2FnZS5gKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHZlcmlmaWVkID0gcmVsZWFzZUNvbnRleHRWZXJpZmllZDsgIC8vL1xuXG4gIGRlcGVuZGVudE5hbWUgPSByZWxlYXNlTmFtZTsgIC8vL1xuXG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IHJlbGVhc2VDb250ZXh0LmdldERlcGVuZGVuY2llcygpO1xuXG4gIGRlcGVuZGVuY2llcy5mb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSkgPT4ge1xuICAgIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lLCB2ZXJpZmllZCwgY29udGV4dCk7XG4gIH0pO1xuXG4gIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSByZXRyaWV2ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgcmVsZWFzZUNvbnRleHQuaW5pdGlhbGlzZShkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjcmVhdGVSZWxlYXNlQ29udGV4dCxcbiAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0XG59O1xuXG5mdW5jdGlvbiBjaGVja0N5Y2xpY0RlcGVuZGVuY3lFeGlzdHMoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMpIHtcbiAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW50TmFtZXMuaW5jbHVkZXMoZGVwZW5kZW5jeU5hbWUpLFxuICAgICAgICBjeWNsaWNEZXBlbmRlbmN5RXhpc3RzID0gZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lOyAgLy8vXG5cbiAgcmV0dXJuIGN5Y2xpY0RlcGVuZGVuY3lFeGlzdHM7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCByZWxlYXNlQ29udGV4dCwgY29udGV4dCkge1xuICBsZXQgcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5ID0gdHJ1ZTtcblxuICBjb25zdCBlbnRyaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RW50cmllcygpLFxuICAgICAgICBzaG9ydGVuZWRWZXJzaW9uID0gZGVwZW5kZW5jeS5nZXRTaG9ydGVkVmVyc2lvbigpO1xuXG4gIGlmIChzaG9ydGVuZWRWZXJzaW9uICE9PSBudWxsKSB7XG4gICAgY29uc3QgZW50cmllc01hdGNoU2hvcnRlbmVkVmVyc2lvbiA9IGVudHJpZXMubWF0Y2hTaG9ydGVuZWRWZXJzaW9uKHNob3J0ZW5lZFZlcnNpb24pO1xuXG4gICAgaWYgKCFlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uKSB7XG4gICAgICByZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCBjYWxsYmFjaykge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0TWFwIH0gPSBjb250ZXh0LFxuICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAvLy9cbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV0sXG4gICAgICAgIGRlcGVuZGVuY2llcyA9IHJlbGVhc2VDb250ZXh0LmdldERlcGVuZGVuY2llcygpO1xuXG4gIGRlcGVuZGVudE5hbWVzID0gWyAuLi5kZXBlbmRlbnROYW1lcywgZGVwZW5kZW5jeU5hbWUgXTsgIC8vL1xuXG4gIGRlcGVuZGVuY2llcy5hc3luY2hyb25vdXNGb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSwgbmV4dCwgZG9uZSkgPT4ge1xuICAgIGNvbnN0IGN5Y2xpY0RlcGVuZGVuY3lFeGlzdHMgPSBjaGVja0N5Y2xpY0RlcGVuZGVuY3lFeGlzdHMoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMpO1xuXG4gICAgaWYgKGN5Y2xpY0RlcGVuZGVuY3lFeGlzdHMpIHtcbiAgICAgIGNvbnN0IGZpcnN0RGVwZW5kZW50TmFtZSA9IGZpcnN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVuY3lOYW1lcyA9IFsgIC8vL1xuICAgICAgICAgICAgICAuLi5kZXBlbmRlbnROYW1lcyxcbiAgICAgICAgICAgICAgZmlyc3REZXBlbmRlbnROYW1lXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgZGVwZW5kZW5jeU5hbWVzU3RyaW5nID0gZGVwZW5kZW5jeU5hbWVzLmpvaW4oYCcgLT4gJ2ApLFxuICAgICAgICAgICAgZXJyb3IgPWBUaGVyZSBpcyBhIGN5Y2xpYyBkZXBlbmRlbmN5OiAnJHtkZXBlbmRlbmN5TmFtZXNTdHJpbmd9Jy5gO1xuXG4gICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCwgKGVycm9yKSA9PiB7XG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbmV4dCgpO1xuICAgIH0pO1xuICB9LCAoKSA9PiB7XG4gICAgY29uc3QgZXJyb3IgPSBudWxsO1xuXG4gICAgY2FsbGJhY2soZXJyb3IpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gcmV0cmlldmVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKGRlcGVuZGVuY3ksIGNvbnRleHQsIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSBbXSkge1xuICBjb25zdCB7IHJlbGVhc2VDb250ZXh0TWFwIH0gPSBjb250ZXh0LFxuICAgICAgICBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAvLy9cbiAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV0sXG4gICAgICAgIGRlcGVuZGVuY2llcyA9IHJlbGVhc2VDb250ZXh0LmdldERlcGVuZGVuY2llcygpO1xuXG4gIGRlcGVuZGVuY2llcy5mb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSkgPT4ge1xuICAgIGNvbnN0IGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgICAgcmVsZWFzZU5hbWUgPSBkZXBlbmRlbmN5TmFtZSwgLy8vXG4gICAgICAgICAgcmVsZWFzZUNvbnRleHQgPSByZWxlYXNlQ29udGV4dE1hcFtyZWxlYXNlTmFtZV0gfHwgbnVsbDtcblxuICAgIGlmIChyZWxlYXNlQ29udGV4dCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0ID0gZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cy5pbmNsdWRlcyhyZWxlYXNlQ29udGV4dCk7XG5cbiAgICBpZiAoZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXRyaWV2ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgY29udGV4dCwgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyk7XG5cbiAgICBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzLnB1c2gocmVsZWFzZUNvbnRleHQpO1xuICB9KTtcblxuICByZXR1cm4gZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cztcbn1cbiJdLCJuYW1lcyI6WyJjcmVhdGVSZWxlYXNlQ29udGV4dCIsImluaXRpYWxpc2VSZWxlYXNlQ29udGV4dCIsImRlcGVuZGVuY3kiLCJkZXBlbmRlbnROYW1lcyIsImNvbnRleHQiLCJjYWxsYmFjayIsInJlbGVhc2VDb250ZXh0TWFwIiwiZGVwZW5kZW5jeU5hbWUiLCJnZXROYW1lIiwicmVsZWFzZU5hbWUiLCJyZWxlYXNlQ29udGV4dCIsImVycm9yIiwicmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeUFuZERlcGVuZGVudE5hbWVzIiwicmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5IiwiY2hlY2tSZWxlYXNlTWF0Y2hlc0RlcGVuZGVuY3kiLCJ2ZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInZlcnNpb25TdHJpbmciLCJ0b1N0cmluZyIsImxhc3REZXBlbmRlbnROYW1lIiwibGFzdCIsImRlcGVuZGVudE5hbWUiLCJzaG9ydGVuZWRWZXJzaW9uIiwiZ2V0U2hvcnRlZFZlcnNpb24iLCJzaG9ydGVuZWRWZXJzaW9uU3RyaW5nIiwiY3JlYXRlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsInZlcmlmaWVkIiwiaW5pdGlhbGlzZWQiLCJpc0luaXRpYWxpc2VkIiwicmVsZWFzZUNvbnRleHRWZXJpZmllZCIsImlzVmVyaWZpZWQiLCJsb2ciLCJkZXBlbmRlbmNpZXMiLCJnZXREZXBlbmRlbmNpZXMiLCJmb3JFYWNoRGVwZW5kZW5jeSIsImRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJyZXRyaWV2ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJpbml0aWFsaXNlIiwiY2hlY2tDeWNsaWNEZXBlbmRlbmN5RXhpc3RzIiwiZGVwZW5kZW50TmFtZXNJbmNsdWRlc0RlcGVuZGVuY3lOYW1lIiwiaW5jbHVkZXMiLCJjeWNsaWNEZXBlbmRlbmN5RXhpc3RzIiwiZW50cmllcyIsImdldEVudHJpZXMiLCJlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uIiwibWF0Y2hTaG9ydGVuZWRWZXJzaW9uIiwiYXN5bmNocm9ub3VzRm9yRWFjaERlcGVuZGVuY3kiLCJuZXh0IiwiZG9uZSIsImZpcnN0RGVwZW5kZW50TmFtZSIsImZpcnN0IiwiZGVwZW5kZW5jeU5hbWVzIiwiZGVwZW5kZW5jeU5hbWVzU3RyaW5nIiwiam9pbiIsImRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHNJbmNsdWRlc1JlbGVhc2VDb250ZXh0IiwicHVzaCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBSWdCQSxvQkFBb0I7ZUFBcEJBOztJQXNEQUMsd0JBQXdCO2VBQXhCQTs7SUEyQ2hCLE9BR0U7ZUFIRjs7O3FCQW5HcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRWQsU0FBU0QscUJBQXFCRSxVQUFVLEVBQUVDLGNBQWMsRUFBRUMsT0FBTyxFQUFFQyxRQUFRLEVBQUU7SUFDbEYsSUFBTSxBQUFFQyxvQkFBc0JGLFFBQXRCRSxtQkFDRkMsaUJBQWlCTCxXQUFXTSxPQUFPLElBQ25DQyxjQUFjRixnQkFDZEcsaUJBQWlCSixpQkFBaUIsQ0FBQ0csWUFBWSxJQUFJLElBQUk7SUFFN0QsSUFBSUMsbUJBQW1CLElBQUksRUFBRTtRQUMzQixJQUFNQyxRQUFRLElBQUk7UUFFbEJOLFNBQVNNO1FBRVQ7SUFDRixDQUFDO0lBRUQsSUFBTSxBQUFFQyxnREFBa0RSLFFBQWxEUTtJQUVSQSw4Q0FBOENWLFlBQVlDLGdCQUFnQkMsU0FBUyxTQUFDTyxPQUFPRCxnQkFBbUI7UUFDNUcsSUFBSUMsT0FBTztZQUNUTixTQUFTTTtZQUVUO1FBQ0YsQ0FBQztRQUVELElBQUlELG1CQUFtQixJQUFJLEVBQUU7WUFDM0IsSUFBTUMsVUFBUSxBQUFDLFFBQW1CLE9BQVpGLGFBQVk7WUFFbENKLFNBQVNNO1lBRVQ7UUFDRixDQUFDO1FBRUQsSUFBTUUsMkJBQTJCQyw4QkFBOEJaLFlBQVlDLGdCQUFnQk8sZ0JBQWdCTjtRQUUzRyxJQUFJLENBQUNTLDBCQUEyQjtZQUM5QixJQUFNRSxVQUFVTCxlQUFlTSxVQUFVLElBQ25DQyxnQkFBZ0JG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
169
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvcmVsZWFzZUNvbnRleHQuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGxhc3QgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2FycmF5XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dE1hcCB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBkZXBlbmRlbmN5TmFtZSwgLy8vXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdIHx8IG51bGw7XG5cbiAgaWYgKHJlbGVhc2VDb250ZXh0ICE9PSBudWxsKSB7XG4gICAgY29uc3QgZXJyb3IgPSBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgcmVsZWFzZUNvbnRleHQpO1xuXG4gICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dEZyb21EZXBlbmRlbmN5QW5kRGVwZW5kZW50TmFtZXMgfSA9IGNvbnRleHQ7XG5cbiAgcmVsZWFzZUNvbnRleHRGcm9tRGVwZW5kZW5jeUFuZERlcGVuZGVudE5hbWVzKGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCAoZXJyb3IsIHJlbGVhc2VDb250ZXh0KSA9PiB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAocmVsZWFzZUNvbnRleHQgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gYFRoZSAnJHtyZWxlYXNlTmFtZX0nIHBhY2thZ2UgY291bGQgbm90IGJlIGNyZWF0ZWQuYDtcblxuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgZXJyb3IgPSBjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeShkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgcmVsZWFzZUNvbnRleHQpO1xuXG4gICAgaWYgKGVycm9yICE9PSBudWxsKSAge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdID0gcmVsZWFzZUNvbnRleHQ7XG5cbiAgICBjcmVhdGVEZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCBjYWxsYmFjayk7XG4gIH0sIGNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWUsIHZlcmlmaWVkLCBjb250ZXh0KSB7XG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgIGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VOYW1lID0gZGVwZW5kZW5jeU5hbWUsIC8vL1xuICAgICAgICByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0TWFwW3JlbGVhc2VOYW1lXSB8fCBudWxsO1xuXG4gIGlmIChyZWxlYXNlQ29udGV4dCA9PT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluaXRpYWxpc2VkID0gcmVsZWFzZUNvbnRleHQuaXNJbml0aWFsaXNlZCgpO1xuXG4gIGlmIChpbml0aWFsaXNlZCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHJlbGVhc2VDb250ZXh0VmVyaWZpZWQgPSByZWxlYXNlQ29udGV4dC5pc1ZlcmlmaWVkKCk7XG5cbiAgaWYgKHZlcmlmaWVkKSB7XG4gICAgaWYgKCFyZWxlYXNlQ29udGV4dFZlcmlmaWVkKSB7XG4gICAgICBjb25zdCB7IGxvZyB9ID0gY29udGV4dDtcblxuICAgICAgbG9nLmVycm9yKGBVbmFibGUgdG8gaW5pdGlhbGlzZSB0aGUgJyR7cmVsZWFzZU5hbWV9JyBkZXBlbmRlbmN5J3MgY29udGV4dCBiZWNhdXNlIGl0cyAnJHtkZXBlbmRlbnROYW1lfScgZGVwZW5kZW50IGlzIGEgcGFja2FnZS5gKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHZlcmlmaWVkID0gcmVsZWFzZUNvbnRleHRWZXJpZmllZDsgIC8vL1xuXG4gIGRlcGVuZGVudE5hbWUgPSByZWxlYXNlTmFtZTsgIC8vL1xuXG4gIGNvbnN0IGRlcGVuZGVuY2llcyA9IHJlbGVhc2VDb250ZXh0LmdldERlcGVuZGVuY2llcygpO1xuXG4gIGRlcGVuZGVuY2llcy5mb3JFYWNoRGVwZW5kZW5jeSgoZGVwZW5kZW5jeSkgPT4ge1xuICAgIGluaXRpYWxpc2VSZWxlYXNlQ29udGV4dChkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lLCB2ZXJpZmllZCwgY29udGV4dCk7XG4gIH0pO1xuXG4gIGNvbnN0IGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMgPSByZXRyaWV2ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgY29udGV4dCk7XG5cbiAgcmVsZWFzZUNvbnRleHQuaW5pdGlhbGlzZShkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBjcmVhdGVSZWxlYXNlQ29udGV4dCxcbiAgaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0XG59O1xuXG5mdW5jdGlvbiBjaGVja0N5Y2xpY0RlcGVuZGVuY3lFeGlzdHMoZGVwZW5kZW5jeSwgZGVwZW5kZW50TmFtZXMpIHtcbiAgbGV0IGVycm9yID0gbnVsbDtcblxuICBjb25zdCBkZXBlbmRlbmN5TmFtZSA9IGRlcGVuZGVuY3kuZ2V0TmFtZSgpLFxuICAgICAgICBkZXBlbmRlbnROYW1lc0luY2x1ZGVzRGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbnROYW1lcy5pbmNsdWRlcyhkZXBlbmRlbmN5TmFtZSksXG4gICAgICAgIGN5Y2xpY0RlcGVuZGVuY3lFeGlzdHMgPSBkZXBlbmRlbnROYW1lc0luY2x1ZGVzRGVwZW5kZW5jeU5hbWU7ICAvLy9cblxuICBpZiAoY3ljbGljRGVwZW5kZW5jeUV4aXN0cykge1xuICAgIGNvbnN0IGZpcnN0RGVwZW5kZW50TmFtZSA9IGZpcnN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICBkZXBlbmRlbmN5TmFtZXMgPSBbICAvLy9cbiAgICAgICAgICAgIC4uLmRlcGVuZGVudE5hbWVzLFxuICAgICAgICAgICAgZmlyc3REZXBlbmRlbnROYW1lXG4gICAgICAgICAgXSxcbiAgICAgICAgICBkZXBlbmRlbmN5TmFtZXNTdHJpbmcgPSBkZXBlbmRlbmN5TmFtZXMuam9pbihgJyAtPiAnYCk7XG5cbiAgICBlcnJvciA9YFRoZXJlIGlzIGEgY3ljbGljIGRlcGVuZGVuY3k6ICcke2RlcGVuZGVuY3lOYW1lc1N0cmluZ30nLmA7XG4gIH1cblxuICByZXR1cm4gZXJyb3I7XG59XG5cbmZ1bmN0aW9uIGNoZWNrUmVsZWFzZU1hdGNoZXNEZXBlbmRlbmN5KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCByZWxlYXNlQ29udGV4dCkge1xuICBsZXQgZXJyb3IgPSBudWxsO1xuXG4gIGNvbnN0IGVudHJpZXMgPSByZWxlYXNlQ29udGV4dC5nZXRFbnRyaWVzKCksXG4gICAgICAgIHNob3J0ZW5lZFZlcnNpb24gPSBkZXBlbmRlbmN5LmdldFNob3J0ZWRWZXJzaW9uKCk7XG5cbiAgaWYgKHNob3J0ZW5lZFZlcnNpb24gIT09IG51bGwpIHtcbiAgICBjb25zdCBlbnRyaWVzTWF0Y2hTaG9ydGVuZWRWZXJzaW9uID0gZW50cmllcy5tYXRjaFNob3J0ZW5lZFZlcnNpb24oc2hvcnRlbmVkVmVyc2lvbik7XG5cbiAgICBpZiAoIWVudHJpZXNNYXRjaFNob3J0ZW5lZFZlcnNpb24pIHtcbiAgICAgIGNvbnN0IHZlcnNpb24gPSByZWxlYXNlQ29udGV4dC5nZXRWZXJzaW9uKCksXG4gICAgICAgICAgICB2ZXJzaW9uU3RyaW5nID0gdmVyc2lvbi50b1N0cmluZygpLFxuICAgICAgICAgICAgbGFzdERlcGVuZGVudE5hbWUgPSBsYXN0KGRlcGVuZGVudE5hbWVzKSxcbiAgICAgICAgICAgIGRlcGVuZGVudE5hbWUgPSBsYXN0RGVwZW5kZW50TmFtZSwgIC8vL1xuICAgICAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgICAgIHNob3J0ZW5lZFZlcnNpb24gPSBkZXBlbmRlbmN5LmdldFNob3J0ZWRWZXJzaW9uKCksXG4gICAgICAgICAgICBzaG9ydGVuZWRWZXJzaW9uU3RyaW5nID0gc2hvcnRlbmVkVmVyc2lvbi50b1N0cmluZygpO1xuXG4gICAgICBlcnJvciA9IGBWZXJzaW9uIG1pc21hdGNoOiAnJHtkZXBlbmRlbnROYW1lfScgcmVxdWlyZXMgJyR7ZGVwZW5kZW5jeU5hbWV9JyB0byBiZSB2ZXJzaW9uICR7c2hvcnRlbmVkVmVyc2lvblN0cmluZ30uMCBvciBoaWdoZXIgYnV0IHZlcnNpb24gJHt2ZXJzaW9uU3RyaW5nfSBoYXMgYmVlbiBzdXBwbGllZC5gO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlcnJvcjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcywgY29udGV4dCwgY2FsbGJhY2spIHtcbiAgY29uc3QgeyByZWxlYXNlQ29udGV4dE1hcCB9ID0gY29udGV4dCxcbiAgICAgICAgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgcmVsZWFzZU5hbWUgPSBkZXBlbmRlbmN5TmFtZSwgLy8vXG4gICAgICAgIHJlbGVhc2VDb250ZXh0ID0gcmVsZWFzZUNvbnRleHRNYXBbcmVsZWFzZU5hbWVdLFxuICAgICAgICBkZXBlbmRlbmNpZXMgPSByZWxlYXNlQ29udGV4dC5nZXREZXBlbmRlbmNpZXMoKTtcblxuICBkZXBlbmRlbnROYW1lcyA9IFsgLi4uZGVwZW5kZW50TmFtZXMsIGRlcGVuZGVuY3lOYW1lIF07ICAvLy9cblxuICBkZXBlbmRlbmNpZXMuYXN5bmNocm9ub3VzRm9yRWFjaERlcGVuZGVuY3koKGRlcGVuZGVuY3ksIG5leHQsIGRvbmUpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IGNoZWNrQ3ljbGljRGVwZW5kZW5jeUV4aXN0cyhkZXBlbmRlbmN5LCBkZXBlbmRlbnROYW1lcyk7XG5cbiAgICBpZiAoZXJyb3IgIT09IG51bGwpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNyZWF0ZVJlbGVhc2VDb250ZXh0KGRlcGVuZGVuY3ksIGRlcGVuZGVudE5hbWVzLCBjb250ZXh0LCAoZXJyb3IpID0+IHtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBuZXh0KCk7XG4gICAgfSk7XG4gIH0sICgpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IG51bGw7XG5cbiAgICBjYWxsYmFjayhlcnJvcik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXRyaWV2ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMoZGVwZW5kZW5jeSwgY29udGV4dCwgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyA9IFtdKSB7XG4gIGNvbnN0IHsgcmVsZWFzZUNvbnRleHRNYXAgfSA9IGNvbnRleHQsXG4gICAgICAgIGRlcGVuZGVuY3lOYW1lID0gZGVwZW5kZW5jeS5nZXROYW1lKCksXG4gICAgICAgIHJlbGVhc2VOYW1lID0gZGVwZW5kZW5jeU5hbWUsIC8vL1xuICAgICAgICByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0TWFwW3JlbGVhc2VOYW1lXSxcbiAgICAgICAgZGVwZW5kZW5jaWVzID0gcmVsZWFzZUNvbnRleHQuZ2V0RGVwZW5kZW5jaWVzKCk7XG5cbiAgZGVwZW5kZW5jaWVzLmZvckVhY2hEZXBlbmRlbmN5KChkZXBlbmRlbmN5KSA9PiB7XG4gICAgY29uc3QgZGVwZW5kZW5jeU5hbWUgPSBkZXBlbmRlbmN5LmdldE5hbWUoKSxcbiAgICAgICAgICByZWxlYXNlTmFtZSA9IGRlcGVuZGVuY3lOYW1lLCAvLy9cbiAgICAgICAgICByZWxlYXNlQ29udGV4dCA9IHJlbGVhc2VDb250ZXh0TWFwW3JlbGVhc2VOYW1lXSB8fCBudWxsO1xuXG4gICAgaWYgKHJlbGVhc2VDb250ZXh0ID09PSBudWxsKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQgPSBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzLmluY2x1ZGVzKHJlbGVhc2VDb250ZXh0KTtcblxuICAgIGlmIChkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzSW5jbHVkZXNSZWxlYXNlQ29udGV4dCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHJpZXZlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyhkZXBlbmRlbmN5LCBjb250ZXh0LCBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzKTtcblxuICAgIGRlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMucHVzaChyZWxlYXNlQ29udGV4dCk7XG4gIH0pO1xuXG4gIHJldHVybiBkZXBlbmRlbmN5UmVsZWFzZUNvbnRleHRzO1xufVxuIl0sIm5hbWVzIjpbImNyZWF0ZVJlbGVhc2VDb250ZXh0IiwiaW5pdGlhbGlzZVJlbGVhc2VDb250ZXh0IiwiZGVwZW5kZW5jeSIsImRlcGVuZGVudE5hbWVzIiwiY29udGV4dCIsImNhbGxiYWNrIiwicmVsZWFzZUNvbnRleHRNYXAiLCJkZXBlbmRlbmN5TmFtZSIsImdldE5hbWUiLCJyZWxlYXNlTmFtZSIsInJlbGVhc2VDb250ZXh0IiwiZXJyb3IiLCJjaGVja1JlbGVhc2VNYXRjaGVzRGVwZW5kZW5jeSIsInJlbGVhc2VDb250ZXh0RnJvbURlcGVuZGVuY3lBbmREZXBlbmRlbnROYW1lcyIsImNyZWF0ZURlcGVuZGVuY3lSZWxlYXNlQ29udGV4dHMiLCJkZXBlbmRlbnROYW1lIiwidmVyaWZpZWQiLCJpbml0aWFsaXNlZCIsImlzSW5pdGlhbGlzZWQiLCJyZWxlYXNlQ29udGV4dFZlcmlmaWVkIiwiaXNWZXJpZmllZCIsImxvZyIsImRlcGVuZGVuY2llcyIsImdldERlcGVuZGVuY2llcyIsImZvckVhY2hEZXBlbmRlbmN5IiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsInJldHJpZXZlRGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0cyIsImluaXRpYWxpc2UiLCJjaGVja0N5Y2xpY0RlcGVuZGVuY3lFeGlzdHMiLCJkZXBlbmRlbnROYW1lc0luY2x1ZGVzRGVwZW5kZW5jeU5hbWUiLCJpbmNsdWRlcyIsImN5Y2xpY0RlcGVuZGVuY3lFeGlzdHMiLCJmaXJzdERlcGVuZGVudE5hbWUiLCJmaXJzdCIsImRlcGVuZGVuY3lOYW1lcyIsImRlcGVuZGVuY3lOYW1lc1N0cmluZyIsImpvaW4iLCJlbnRyaWVzIiwiZ2V0RW50cmllcyIsInNob3J0ZW5lZFZlcnNpb24iLCJnZXRTaG9ydGVkVmVyc2lvbiIsImVudHJpZXNNYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJtYXRjaFNob3J0ZW5lZFZlcnNpb24iLCJ2ZXJzaW9uIiwiZ2V0VmVyc2lvbiIsInZlcnNpb25TdHJpbmciLCJ0b1N0cmluZyIsImxhc3REZXBlbmRlbnROYW1lIiwibGFzdCIsInNob3J0ZW5lZFZlcnNpb25TdHJpbmciLCJhc3luY2hyb25vdXNGb3JFYWNoRGVwZW5kZW5jeSIsIm5leHQiLCJkb25lIiwiZGVwZW5kZW5jeVJlbGVhc2VDb250ZXh0c0luY2x1ZGVzUmVsZWFzZUNvbnRleHQiLCJwdXNoIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUFJZ0JBLG9CQUFvQjtlQUFwQkE7O0lBNkNBQyx3QkFBd0I7ZUFBeEJBOztJQTJDaEIsT0FHRTtlQUhGOzs7cUJBMUZxQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFZCxTQUFTRCxxQkFBcUJFLFVBQVUsRUFBRUMsY0FBYyxFQUFFQyxPQUFPLEVBQUVDLFFBQVEsRUFBRTtJQUNsRixJQUFNLEFBQUVDLG9CQUFzQkYsUUFBdEJFLG1CQUNGQyxpQkFBaUJMLFdBQVdNLE9BQU8sSUFDbkNDLGNBQWNGLGdCQUNkRyxpQkFBaUJKLGlCQUFpQixDQUFDRyxZQUFZLElBQUksSUFBSTtJQUU3RCxJQUFJQyxtQkFBbUIsSUFBSSxFQUFFO1FBQzNCLElBQU1DLFFBQVFDLDhCQUE4QlYsWUFBWUMsZ0JBQWdCTztRQUV4RUwsU0FBU007UUFFVDtJQUNGLENBQUM7SUFFRCxJQUFNLEFBQUVFLGdEQUFrRFQsUUFBbERTO0lBRVJBLDhDQUE4Q1gsWUFBWUMsZ0JBQWdCQyxTQUFTLFNBQUNPLE9BQU9ELGdCQUFtQjtRQUM1RyxJQUFJQyxPQUFPO1lBQ1ROLFNBQVNNO1lBRVQ7UUFDRixDQUFDO1FBRUQsSUFBSUQsbUJBQW1CLElBQUksRUFBRTtZQUMzQixJQUFNQyxVQUFRLEFBQUMsUUFBbUIsT0FBWkYsYUFBWTtZQUVsQ0osU0FBU007WUFFVDtRQUNGLENBQUM7UUFFREEsUUFBUUMsOEJBQThCVixZQUFZQyxnQkFBZ0JPO1FBRWxFLElBQUlDLFVBQVUsSUFBSSxFQUFHO1lBQ25CTixTQUFTTTtZQUVUO1FBQ0YsQ0FBQztRQUVETCxpQkFBaUIsQ0FBQ0csWUFBWSxHQUFHQztRQUVqQ0ksZ0NBQWdDWixZQUFZQyxnQkFBZ0JDLFNBQVNDO0lBQ3ZFLEdBQUdEO0FBQ0w7QUFFTyxTQUFTSCx5QkFBeUJDLFVBQVUs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