occam-verify-cli 0.0.1247 → 0.0.1248
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/file.js +6 -7
- package/lib/dom/constructor.js +17 -17
- package/lib/dom/declaration.js +59 -109
- package/lib/dom/label.js +3 -3
- package/lib/dom/metaLemma.js +12 -36
- package/lib/dom/metatheorem.js +11 -96
- package/lib/dom/reference.js +31 -3
- package/lib/dom/rule.js +4 -4
- package/lib/dom/topLevelAssertion.js +30 -30
- package/lib/dom/topLevelMetaAssertion.js +253 -0
- package/lib/utilities/string.js +3 -3
- package/lib/utilities/unification.js +3 -3
- package/package.json +5 -5
- package/src/context/file.js +5 -9
- package/src/dom/constructor.js +20 -20
- package/src/dom/declaration.js +75 -143
- package/src/dom/label.js +2 -2
- package/src/dom/metaLemma.js +5 -46
- package/src/dom/metatheorem.js +8 -89
- package/src/dom/reference.js +44 -2
- package/src/dom/rule.js +5 -3
- package/src/dom/topLevelAssertion.js +42 -51
- package/src/dom/topLevelMetaAssertion.js +154 -0
- package/src/utilities/string.js +2 -2
- package/src/utilities/unification.js +3 -2
|
@@ -9,18 +9,26 @@ function _export(target, all) {
|
|
|
9
9
|
});
|
|
10
10
|
}
|
|
11
11
|
_export(exports, {
|
|
12
|
+
consequentFromNode: function() {
|
|
13
|
+
return consequentFromNode;
|
|
14
|
+
},
|
|
12
15
|
default: function() {
|
|
13
16
|
return TopLevelAssertion;
|
|
14
17
|
},
|
|
15
|
-
|
|
16
|
-
return
|
|
18
|
+
labelsStringFromLabels: function() {
|
|
19
|
+
return labelsStringFromLabels;
|
|
20
|
+
},
|
|
21
|
+
proofFromNode: function() {
|
|
22
|
+
return proofFromNode;
|
|
23
|
+
},
|
|
24
|
+
suppositionsFromNode: function() {
|
|
25
|
+
return suppositionsFromNode;
|
|
17
26
|
}
|
|
18
27
|
});
|
|
19
28
|
var _necessary = require("necessary");
|
|
20
29
|
var _dom = /*#__PURE__*/ _interop_require_default(require("../dom"));
|
|
21
30
|
var _local = /*#__PURE__*/ _interop_require_default(require("../context/local"));
|
|
22
31
|
var _substitutions = /*#__PURE__*/ _interop_require_default(require("../substitutions"));
|
|
23
|
-
var _constants = require("../constants");
|
|
24
32
|
var _query = require("../utilities/query");
|
|
25
33
|
var _json = require("../utilities/json");
|
|
26
34
|
function _class_call_check(instance, Constructor) {
|
|
@@ -50,12 +58,11 @@ function _interop_require_default(obj) {
|
|
|
50
58
|
var reverse = _necessary.arrayUtilities.reverse, extract = _necessary.arrayUtilities.extract, backwardsEvery = _necessary.arrayUtilities.backwardsEvery;
|
|
51
59
|
var proofNodeQuery = (0, _query.nodeQuery)("/*/proof"), labelNodesQuery = (0, _query.nodesQuery)("/*/labels/label"), consequentNodeQuery = (0, _query.nodeQuery)("/*/consequent"), suppositionNodesQuery = (0, _query.nodesQuery)("/*/supposition");
|
|
52
60
|
var TopLevelAssertion = /*#__PURE__*/ function() {
|
|
53
|
-
function TopLevelAssertion(fileContext, string, labels,
|
|
61
|
+
function TopLevelAssertion(fileContext, string, labels, suppositions, consequent, proof) {
|
|
54
62
|
_class_call_check(this, TopLevelAssertion);
|
|
55
63
|
this.fileContext = fileContext;
|
|
56
64
|
this.string = string;
|
|
57
65
|
this.labels = labels;
|
|
58
|
-
this.substitutions = substitutions;
|
|
59
66
|
this.suppositions = suppositions;
|
|
60
67
|
this.consequent = consequent;
|
|
61
68
|
this.proof = proof;
|
|
@@ -79,12 +86,6 @@ var TopLevelAssertion = /*#__PURE__*/ function() {
|
|
|
79
86
|
return this.labels;
|
|
80
87
|
}
|
|
81
88
|
},
|
|
82
|
-
{
|
|
83
|
-
key: "getSubstitutions",
|
|
84
|
-
value: function getSubstitutions() {
|
|
85
|
-
return this.substitutions;
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
89
|
{
|
|
89
90
|
key: "getSuppositions",
|
|
90
91
|
value: function getSuppositions() {
|
|
@@ -139,7 +140,7 @@ var TopLevelAssertion = /*#__PURE__*/ function() {
|
|
|
139
140
|
if (this.proof === null) {
|
|
140
141
|
verified = true;
|
|
141
142
|
} else {
|
|
142
|
-
var proofVerified = this.proof.verify(
|
|
143
|
+
var substitutions = _substitutions.default.fromNothing(), proofVerified = this.proof.verify(substitutions, this.consequent, context);
|
|
143
144
|
verified = proofVerified; ///
|
|
144
145
|
}
|
|
145
146
|
}
|
|
@@ -240,11 +241,10 @@ var TopLevelAssertion = /*#__PURE__*/ function() {
|
|
|
240
241
|
{
|
|
241
242
|
key: "toJSON",
|
|
242
243
|
value: function toJSON() {
|
|
243
|
-
var labelsJSON = (0, _json.labelsToLabelsJSON)(this.labels), consequentJSON = (0, _json.consequentToConsequentJSON)(this.consequent), suppositionsJSON = (0, _json.suppositionsToSuppositionsJSON)(this.suppositions),
|
|
244
|
+
var labelsJSON = (0, _json.labelsToLabelsJSON)(this.labels), consequentJSON = (0, _json.consequentToConsequentJSON)(this.consequent), suppositionsJSON = (0, _json.suppositionsToSuppositionsJSON)(this.suppositions), labels = labelsJSON, consequent = consequentJSON, suppositions = suppositionsJSON, json = {
|
|
244
245
|
labels: labels,
|
|
245
246
|
consequent: consequent,
|
|
246
|
-
suppositions: suppositions
|
|
247
|
-
substitutions: substitutions
|
|
247
|
+
suppositions: suppositions
|
|
248
248
|
};
|
|
249
249
|
return json;
|
|
250
250
|
}
|
|
@@ -253,32 +253,20 @@ var TopLevelAssertion = /*#__PURE__*/ function() {
|
|
|
253
253
|
{
|
|
254
254
|
key: "fromJSON",
|
|
255
255
|
value: function fromJSON(Class, json, fileContext) {
|
|
256
|
-
var labels = (0, _json.labelsFromJSON)(json, fileContext),
|
|
256
|
+
var labels = (0, _json.labelsFromJSON)(json, fileContext), labelsString = labelsStringFromLabels(labels), suppositions = (0, _json.suppositionsFromJSON)(json, fileContext), consequent = (0, _json.consequentFromJSON)(json, fileContext), proof = null, string = labelsString, topLevelAssertion = new Class(fileContext, string, labels, suppositions, consequent, proof);
|
|
257
257
|
return topLevelAssertion;
|
|
258
258
|
}
|
|
259
259
|
},
|
|
260
260
|
{
|
|
261
261
|
key: "fromNode",
|
|
262
262
|
value: function fromNode(Class, node, fileContext) {
|
|
263
|
-
var labels = labelsFromNode(node, fileContext),
|
|
263
|
+
var labels = labelsFromNode(node, fileContext), labelsString = labelsStringFromLabels(labels), suppositions = suppositionsFromNode(node, fileContext), consequent = consequentFromNode(node, fileContext), proof = proofFromNode(node, fileContext), string = labelsString, metaLemma = new Class(fileContext, string, labels, suppositions, consequent, proof);
|
|
264
264
|
return metaLemma;
|
|
265
265
|
}
|
|
266
266
|
}
|
|
267
267
|
]);
|
|
268
268
|
return TopLevelAssertion;
|
|
269
269
|
}();
|
|
270
|
-
function stringFromLabels(labels) {
|
|
271
|
-
var string = labels.reduce(function(string, label) {
|
|
272
|
-
var labelString = label.getString();
|
|
273
|
-
string = string === _constants.EMPTY_STRING ? labelString : "".concat(string, ",").concat(labelString);
|
|
274
|
-
return string;
|
|
275
|
-
}, _constants.EMPTY_STRING);
|
|
276
|
-
return string;
|
|
277
|
-
}
|
|
278
|
-
function proofFromNode(node, fileContext) {
|
|
279
|
-
var Proof = _dom.default.Proof, proofNode = proofNodeQuery(node), proof = Proof.fromProofNode(proofNode, fileContext);
|
|
280
|
-
return proof;
|
|
281
|
-
}
|
|
282
270
|
function labelsFromNode(node, fileContext) {
|
|
283
271
|
var Label = _dom.default.Label, labelNodes = labelNodesQuery(node), labels = labelNodes.map(function(labelNode) {
|
|
284
272
|
var label = Label.fromLabelNode(labelNode, fileContext);
|
|
@@ -286,6 +274,10 @@ function labelsFromNode(node, fileContext) {
|
|
|
286
274
|
});
|
|
287
275
|
return labels;
|
|
288
276
|
}
|
|
277
|
+
function proofFromNode(node, fileContext) {
|
|
278
|
+
var Proof = _dom.default.Proof, proofNode = proofNodeQuery(node), proof = Proof.fromProofNode(proofNode, fileContext);
|
|
279
|
+
return proof;
|
|
280
|
+
}
|
|
289
281
|
function consequentFromNode(node, fileContext) {
|
|
290
282
|
var Consequent = _dom.default.Consequent, consequentNode = consequentNodeQuery(node), consequent = Consequent.fromConsequentNode(consequentNode, fileContext);
|
|
291
283
|
return consequent;
|
|
@@ -297,5 +289,13 @@ function suppositionsFromNode(node, fileContext) {
|
|
|
297
289
|
});
|
|
298
290
|
return suppositions;
|
|
299
291
|
}
|
|
292
|
+
function labelsStringFromLabels(labels) {
|
|
293
|
+
var labelsString = labels.reduce(function(labelsString, label) {
|
|
294
|
+
var labelString = label.getString();
|
|
295
|
+
labelsString = labelsString === null ? labelString : "".concat(labelsString, ",").concat(labelString);
|
|
296
|
+
return labelsString;
|
|
297
|
+
}, null);
|
|
298
|
+
return labelsString;
|
|
299
|
+
}
|
|
300
300
|
|
|
301
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vdG9wTGV2ZWxBc3NlcnRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZG9tIGZyb20gXCIuLi9kb21cIjtcbmltcG9ydCBMb2NhbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbG9jYWxcIjtcbmltcG9ydCBTdWJzdGl0dXRpb25zIGZyb20gXCIuLi9zdWJzdGl0dXRpb25zXCI7XG5cbmltcG9ydCB7IEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IG5vZGVRdWVyeSwgbm9kZXNRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgbGFiZWxzVG9MYWJlbHNKU09OLFxuICAgICAgICAgY29uc2VxdWVudEZyb21KU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zRnJvbUpTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zRnJvbUpTT04sXG4gICAgICAgICBjb25zZXF1ZW50VG9Db25zZXF1ZW50SlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSwgZXh0cmFjdCwgYmFja3dhcmRzRXZlcnkgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5jb25zdCBwcm9vZk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi8qL3Byb29mXCIpLFxuICAgICAgbGFiZWxOb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi8qL2xhYmVscy9sYWJlbFwiKSxcbiAgICAgIGNvbnNlcXVlbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvKi9jb25zZXF1ZW50XCIpLFxuICAgICAgc3VwcG9zaXRpb25Ob2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi8qL3N1cHBvc2l0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BMZXZlbEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGZpbGVDb250ZXh0LCBzdHJpbmcsIGxhYmVscywgc3Vic3RpdHV0aW9ucywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW50LCBwcm9vZikge1xuICAgIHRoaXMuZmlsZUNvbnRleHQgPSBmaWxlQ29udGV4dDtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscztcbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICAgIHRoaXMuc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zO1xuICAgIHRoaXMuY29uc2VxdWVudCA9IGNvbnNlcXVlbnQ7XG4gICAgdGhpcy5wcm9vZiA9IHByb29mO1xuICB9XG5cbiAgZ2V0RmlsZUNvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZUNvbnRleHQ7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0TGFiZWxzKCkge1xuICAgIHJldHVybiB0aGlzLmxhYmVscztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFN1cHBvc2l0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdXBwb3NpdGlvbnM7XG4gIH1cblxuICBnZXRDb25zZXF1ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnNlcXVlbnQ7XG4gIH1cblxuICBnZXRQcm9vZigpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9vZjtcbiAgfVxuXG4gIG1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7IHJldHVybiB0aGlzLmNvbnNlcXVlbnQubWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpOyB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyA9IHRoaXMubGFiZWxzLnNvbWUoKGxhYmVsKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyA9IGxhYmVsLm1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKTtcblxuICAgICAgaWYgKG1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzO1xuICB9XG5cbiAgdmVyaWZ5KCkge1xuICAgIGxldCB2ZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGFiZWxzVmVyaWZpZWQgPSB0aGlzLnZlcmlmeUxhYmVscygpO1xuXG4gICAgaWYgKGxhYmVsc1ZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KHRoaXMuZmlsZUNvbnRleHQpLFxuICAgICAgICBjb250ZXh0ID0gbG9jYWxDb250ZXh0LCAvLy9cbiAgICAgICAgc3VwcG9zaXRpb25zVmVyaWZpZWQgPSB0aGlzLnN1cHBvc2l0aW9ucy5ldmVyeSgoc3VwcG9zaXRpb24pID0+IHtcbiAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvblZlcmlmaWVkID0gc3VwcG9zaXRpb24udmVyaWZ5KGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKHN1cHBvc2l0aW9uVmVyaWZpZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgIGlmIChzdXBwb3NpdGlvbnNWZXJpZmllZCkge1xuICAgICAgICBjb25zdCBjb25zZXF1ZW50VmVyaWZpZWQgPSB0aGlzLmNvbnNlcXVlbnQudmVyaWZ5KGNvbnRleHQpO1xuXG4gICAgICAgIGlmIChjb25zZXF1ZW50VmVyaWZpZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5wcm9vZiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgdmVyaWZpZWQgPSB0cnVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwcm9vZlZlcmlmaWVkID0gdGhpcy5wcm9vZi52ZXJpZnkodGhpcy5zdWJzdGl0dXRpb25zLCB0aGlzLmNvbnNlcXVlbnQsIGNvbnRleHQpO1xuXG4gICAgICAgICAgICB2ZXJpZmllZCA9IHByb29mVmVyaWZpZWQ7IC8vL1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZDtcbiAgfVxuXG4gIHZlcmlmeUxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbHNWZXJpZmllZCA9IHRoaXMubGFiZWxzLmV2ZXJ5KChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbmFtZU9ubHkgPSB0cnVlLFxuICAgICAgICBsYWJlbFZlcmlmaWVkID0gbGFiZWwudmVyaWZ5KG5hbWVPbmx5KTtcblxuICAgICAgaWYgKGxhYmVsVmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxzVmVyaWZpZWQ7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50VW5pZmllZDtcblxuICAgIGNvbnN0IHN0YXRlbWVudFN0cmluZyA9IHN0YXRlbWVudC5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmUgPSB0aGlzLCAvLy9cbiAgICAgICAgICBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmcgPSBheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmUuZ2V0U3RyaW5nKCk7XG5cbiAgICBjb250ZXh0LnRyYWNlKGBVbmlmeWluZyB0aGUgJyR7c3RhdGVtZW50U3RyaW5nfScgc3RhdGVtZW50IHdpdGggdGhlICcke2F4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZ30nIGF4aW9tLCBsZW1tYSwgdGhlb3JlbSBvciBjb25qZWN0dXJlLi4uYCk7XG5cbiAgICBjb25zdCBzdXBwb3NpdGlvbnMgPSB0aGlzLmdldFN1cHBvc2l0aW9ucygpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0xlbmd0aCA9IHN1cHBvc2l0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25zTGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gU3Vic3RpdHV0aW9ucy5mcm9tTm90aGluZygpLFxuICAgICAgICAgICAgbG9jYWxDb250ZXh0ID0gTG9jYWxDb250ZXh0LmZyb21GaWxlQ29udGV4dCh0aGlzLmZpbGVDb250ZXh0KSxcbiAgICAgICAgICAgIGdlbmVyYWxDb250ZXh0ID0gbG9jYWxDb250ZXh0LCAgLy8vXG4gICAgICAgICAgICBzcGVjaWZpY0NvbnRleHQgPSBjb250ZXh0LCAgLy8vXG4gICAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkV2l0aENvbnNlcXVlbnQgPSB0aGlzLnVuaWZ5U3RhdGVtZW50V2l0aENvbnNlcXVlbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgc3RhdGVtZW50VW5pZmllZCA9IHN0YXRlbWVudFVuaWZpZWRXaXRoQ29uc2VxdWVudDsgIC8vL1xuICAgIH1cblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi51bmlmaWVkIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nfScgYXhpb20sIGxlbW1hLCB0aGVvcmVtIG9yIGNvbmplY3R1cmUuYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlbWVudFVuaWZpZWQ7XG4gIH1cblxuICB1bmlmeVN0YXRlbWVudFdpdGhDb25zZXF1ZW50KHN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBjb25zZXF1ZW50VW5pZmllZDtcblxuICAgIGNvbnN0IHN0YXRlbWVudFVuaWZpZWQgPSB0aGlzLmNvbnNlcXVlbnQudW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTsgIC8vL1xuXG4gICAgY29uc2VxdWVudFVuaWZpZWQgPSBzdGF0ZW1lbnRVbmlmaWVkOyAvLy9cblxuICAgIHJldHVybiBjb25zZXF1ZW50VW5pZmllZDtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50QW5kUHJvb2ZTdGVwU3VicHJvb2ZzKHN0YXRlbWVudCwgcHJvb2ZTdGVwU3VicHJvb2ZzLCBjb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudEFuZFByb29mU3RlcFN1YnByb29mc1VuaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxvY2FsQ29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tRmlsZUNvbnRleHQodGhpcy5maWxlQ29udGV4dCksXG4gICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQ7IC8vL1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IFN1YnN0aXR1dGlvbnMuZnJvbU5vdGhpbmcoKSxcbiAgICAgICAgICBzdGF0ZW1lbnRVbmlmaWVkV2l0aENvbnNlcXVlbnQgPSB0aGlzLnVuaWZ5U3RhdGVtZW50V2l0aENvbnNlcXVlbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgIGlmIChzdGF0ZW1lbnRVbmlmaWVkV2l0aENvbnNlcXVlbnQpIHtcbiAgICAgIGNvbnN0IHByb29mU3RlcFN1YnByb29mc1VuaWZpZWRXaXRoU3VwcG9zaXRpb25zID0gdGhpcy51bmlmeVByb29mU3RlcFN1YnByb29mc1dpdGhTdXBwb3NpdGlvbnMocHJvb2ZTdGVwU3VicHJvb2ZzLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgaWYgKHByb29mU3RlcFN1YnByb29mc1VuaWZpZWRXaXRoU3VwcG9zaXRpb25zKSB7XG4gICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IHN1YnN0aXR1dGlvbnMuYXJlUmVzb2x2ZWQoKTtcblxuICAgICAgICBzdGF0ZW1lbnRBbmRQcm9vZlN0ZXBTdWJwcm9vZnNVbmlmaWVkID0gc3Vic3RpdHV0aW9uc1Jlc29sdmVkOyAvLy9cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50QW5kUHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZDtcbiAgfVxuXG4gIHVuaWZ5UHJvb2ZTdGVwU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9uKHByb29mU3RlcFN1YnByb29mcywgc3VwcG9zaXRpb24sIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBsZXQgcHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbiAgPWZhbHNlO1xuXG4gICAgY29uc3QgY29udGV4dCA9IHNwZWNpZmljQ29udGV4dCwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9uVW5pZmllZEluZGVwZW5kZW50bHkgPSBzdXBwb3NpdGlvbi51bmlmeUluZGVwZW5kZW50bHkoc3Vic3RpdHV0aW9ucywgY29udGV4dCk7XG5cbiAgICBpZiAoc3VwcG9zaXRpb25VbmlmaWVkSW5kZXBlbmRlbnRseSkge1xuICAgICAgcHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbiA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHByb29mU3RlcCA9IGV4dHJhY3QocHJvb2ZTdGVwU3VicHJvb2ZzLCAocHJvb2ZTdGVwU3VicHJvb2YpID0+IHtcbiAgICAgICAgY29uc3QgcHJvb2ZTdGVwVW5pZmllZCA9IHN1cHBvc2l0aW9uLnVuaWZ5UHJvb2ZTdGVwU3VicHJvb2YocHJvb2ZTdGVwU3VicHJvb2YsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICAgIGlmIChwcm9vZlN0ZXBVbmlmaWVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pIHx8IG51bGw7XG5cbiAgICAgIGlmIChwcm9vZlN0ZXAgIT09IG51bGwpIHtcbiAgICAgICAgcHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbiA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb29mU3RlcFN1YnByb29mc1VuaWZpZWRXaXRoU3VwcG9zaXRpb247XG4gIH1cblxuICB1bmlmeVByb29mU3RlcFN1YnByb29mc1dpdGhTdXBwb3NpdGlvbnMocHJvb2ZTdGVwU3VicHJvb2ZzLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgcHJvb2ZTdGVwU3VicHJvb2ZzID0gcmV2ZXJzZShwcm9vZlN0ZXBTdWJwcm9vZnMpOyAvLy9cblxuICAgIGNvbnN0IHByb29mU3RlcFN1YnByb29mc1VuaWZpZWRXaXRoU3VwcG9zaXRpb25zID0gYmFja3dhcmRzRXZlcnkodGhpcy5zdXBwb3NpdGlvbnMsIChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgY29uc3QgcHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbiA9IHRoaXMudW5pZnlQcm9vZlN0ZXBTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb24ocHJvb2ZTdGVwU3VicHJvb2ZzLCBzdXBwb3NpdGlvbiwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgIGlmIChwcm9vZlN0ZXBTdWJwcm9vZnNVbmlmaWVkV2l0aFN1cHBvc2l0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByb29mU3RlcFN1YnByb29mc1VuaWZpZWRXaXRoU3VwcG9zaXRpb25zO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIGNvbnNlcXVlbnRKU09OID0gY29uc2VxdWVudFRvQ29uc2VxdWVudEpTT04odGhpcy5jb25zZXF1ZW50KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHRoaXMuc3VwcG9zaXRpb25zKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHRoaXMuc3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgbGFiZWxzID0gbGFiZWxzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbnNlcXVlbnQgPSBjb25zZXF1ZW50SlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgY29uc2VxdWVudCxcbiAgICAgICAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oQ2xhc3MsIGpzb24sIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIGNvbnNlcXVlbnQgPSBjb25zZXF1ZW50RnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0Zyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tTGFiZWxzKGxhYmVscyksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gbmV3IENsYXNzKGZpbGVDb250ZXh0LCBzdHJpbmcsIGxhYmVscywgc3Vic3RpdHV0aW9ucywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW50LCBwcm9vZik7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGUoQ2xhc3MsIG5vZGUsIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25zRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIGNvbnNlcXVlbnQgPSBjb25zZXF1ZW50RnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHByb29mID0gcHJvb2ZGcm9tTm9kZShub2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpLFxuICAgICAgICAgIG1ldGFMZW1tYSA9IG5ldyBDbGFzcyhmaWxlQ29udGV4dCwgc3RyaW5nLCBsYWJlbHMsIHN1YnN0aXR1dGlvbnMsIHN1cHBvc2l0aW9ucywgY29uc2VxdWVudCwgcHJvb2YpO1xuXG4gICAgcmV0dXJuIG1ldGFMZW1tYTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3Qgc3RyaW5nID0gbGFiZWxzLnJlZHVjZSgoc3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBzdHJpbmcgPSAoc3RyaW5nID09PSBFTVBUWV9TVFJJTkcpID9cbiAgICAgICAgICAgICAgIGxhYmVsU3RyaW5nOiAvLy9cbiAgICAgICAgICAgICAgICAgYCR7c3RyaW5nfSwke2xhYmVsU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9LCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIHByb29mRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgeyBQcm9vZiB9ID0gZG9tLFxuICAgICAgICBwcm9vZk5vZGUgPSBwcm9vZk5vZGVRdWVyeShub2RlKSxcbiAgICAgICAgcHJvb2YgPSBQcm9vZi5mcm9tUHJvb2ZOb2RlKHByb29mTm9kZSwgZmlsZUNvbnRleHQpO1xuXG4gIHJldHVybiBwcm9vZjtcbn1cblxuZnVuY3Rpb24gbGFiZWxzRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZG9tLFxuICAgICAgICBsYWJlbE5vZGVzID0gbGFiZWxOb2Rlc1F1ZXJ5KG5vZGUpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgZmlsZUNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5mdW5jdGlvbiBjb25zZXF1ZW50RnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgeyBDb25zZXF1ZW50IH0gPSBkb20sXG4gICAgICAgIGNvbnNlcXVlbnROb2RlID0gY29uc2VxdWVudE5vZGVRdWVyeShub2RlKSxcbiAgICAgICAgY29uc2VxdWVudCA9IENvbnNlcXVlbnQuZnJvbUNvbnNlcXVlbnROb2RlKGNvbnNlcXVlbnROb2RlLCBmaWxlQ29udGV4dCk7XG5cbiAgcmV0dXJuIGNvbnNlcXVlbnQ7XG59XG5cbmZ1bmN0aW9uIHN1cHBvc2l0aW9uc0Zyb21Ob2RlKG5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGNvbnN0IHsgU3VwcG9zaXRpb24gfSA9IGRvbSxcbiAgICAgICAgc3VwcG9zaXRpb25Ob2RlcyA9IHN1cHBvc2l0aW9uTm9kZXNRdWVyeShub2RlKSxcbiAgICAgICAgc3VwcG9zaXRpb25zID0gc3VwcG9zaXRpb25Ob2Rlcy5tYXAoKHN1cHBvc2l0aW9uTm9kZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IHN1cHBvc2l0aW9uID0gU3VwcG9zaXRpb24uZnJvbVN1cHBvc2l0aW9uTm9kZShzdXBwb3NpdGlvbk5vZGUsIGZpbGVDb250ZXh0KTtcblxuICAgICAgICAgIHJldHVybiBzdXBwb3NpdGlvbjtcbiAgICAgICAgfSk7XG5cbiAgcmV0dXJuIHN1cHBvc2l0aW9ucztcbn1cblxuIl0sIm5hbWVzIjpbIlRvcExldmVsQXNzZXJ0aW9uIiwic3RyaW5nRnJvbUxhYmVscyIsInJldmVyc2UiLCJhcnJheVV0aWxpdGllcyIsImV4dHJhY3QiLCJiYWNrd2FyZHNFdmVyeSIsInByb29mTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibGFiZWxOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsImNvbnNlcXVlbnROb2RlUXVlcnkiLCJzdXBwb3NpdGlvbk5vZGVzUXVlcnkiLCJmaWxlQ29udGV4dCIsInN0cmluZyIsImxhYmVscyIsInN1YnN0aXR1dGlvbnMiLCJzdXBwb3NpdGlvbnMiLCJjb25zZXF1ZW50IiwicHJvb2YiLCJnZXRGaWxlQ29udGV4dCIsImdldFN0cmluZyIsImdldExhYmVscyIsImdldFN1YnN0aXR1dGlvbnMiLCJnZXRTdXBwb3NpdGlvbnMiLCJnZXRDb25zZXF1ZW50IiwiZ2V0UHJvb2YiLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJzdGF0ZW1lbnROb2RlIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lIiwibWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzIiwic29tZSIsImxhYmVsIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJsYWJlbHNWZXJpZmllZCIsInZlcmlmeUxhYmVscyIsImxvY2FsQ29udGV4dCIsIkxvY2FsQ29udGV4dCIsImZyb21GaWxlQ29udGV4dCIsImNvbnRleHQiLCJzdXBwb3NpdGlvbnNWZXJpZmllZCIsImV2ZXJ5Iiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblZlcmlmaWVkIiwiY29uc2VxdWVudFZlcmlmaWVkIiwicHJvb2ZWZXJpZmllZCIsIm5hbWVPbmx5IiwibGFiZWxWZXJpZmllZCIsInVuaWZ5U3RhdGVtZW50Iiwic3RhdGVtZW50Iiwic3RhdGVtZW50VW5pZmllZCIsInN0YXRlbWVudFN0cmluZyIsImF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZSIsImF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZyIsInRyYWNlIiwic3VwcG9zaXRpb25zTGVuZ3RoIiwibGVuZ3RoIiwiU3Vic3RpdHV0aW9ucyIsImZyb21Ob3RoaW5nIiwiZ2VuZXJhbENvbnRleHQiLCJzcGVjaWZpY0NvbnRleHQiLCJzdGF0ZW1lbnRVbmlmaWVkV2l0aENvbnNlcXVlbnQiLCJ1bmlmeVN0YXRlbWVudFdpdGhDb25zZXF1ZW50IiwiZGVidWciLCJjb25zZXF1ZW50VW5pZmllZCIsInVuaWZ5U3RhdGVtZW50QW5kUHJvb2ZTdGVwU3VicHJvb2ZzIiwicHJvb2ZTdGVwU3VicHJvb2ZzIiwic3RhdGVtZW50QW5kUHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZCIsInByb29mU3RlcFN1YnByb29mc1VuaWZpZWRXaXRoU3VwcG9zaXRpb25zIiwidW5pZnlQcm9vZlN0ZXBTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb25zIiwic3Vic3RpdHV0aW9uc1Jlc29sdmVkIiwiYXJlUmVzb2x2ZWQiLCJ1bmlmeVByb29mU3RlcFN1YnByb29mc1dpdGhTdXBwb3NpdGlvbiIsInByb29mU3RlcFN1YnByb29mc1VuaWZpZWRXaXRoU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblVuaWZpZWRJbmRlcGVuZGVudGx5IiwidW5pZnlJbmRlcGVuZGVudGx5IiwicHJvb2ZTdGVwIiwicHJvb2ZTdGVwU3VicHJvb2YiLCJwcm9vZlN0ZXBVbmlmaWVkIiwidW5pZnlQcm9vZlN0ZXBTdWJwcm9vZiIsInRvSlNPTiIsImxhYmVsc0pTT04iLCJsYWJlbHNUb0xhYmVsc0pTT04iLCJjb25zZXF1ZW50SlNPTiIsImNvbnNlcXVlbnRUb0NvbnNlcXVlbnRKU09OIiwic3VwcG9zaXRpb25zSlNPTiIsInN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbnNKU09OIiwic3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04iLCJqc29uIiwiZnJvbUpTT04iLCJDbGFzcyIsImxhYmVsc0Zyb21KU09OIiwiY29uc2VxdWVudEZyb21KU09OIiwic3VwcG9zaXRpb25zRnJvbUpTT04iLCJzdWJzdGl0dXRpb25zRnJvbUpTT04iLCJ0b3BMZXZlbEFzc2VydGlvbiIsImZyb21Ob2RlIiwibm9kZSIsImxhYmVsc0Zyb21Ob2RlIiwic3VwcG9zaXRpb25zRnJvbU5vZGUiLCJjb25zZXF1ZW50RnJvbU5vZGUiLCJwcm9vZkZyb21Ob2RlIiwibWV0YUxlbW1hIiwicmVkdWNlIiwibGFiZWxTdHJpbmciLCJFTVBUWV9TVFJJTkciLCJQcm9vZiIsImRvbSIsInByb29mTm9kZSIsImZyb21Qcm9vZk5vZGUiLCJMYWJlbCIsImxhYmVsTm9kZXMiLCJtYXAiLCJsYWJlbE5vZGUiLCJmcm9tTGFiZWxOb2RlIiwiQ29uc2VxdWVudCIsImNvbnNlcXVlbnROb2RlIiwiZnJvbUNvbnNlcXVlbnROb2RlIiwiU3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvbk5vZGVzIiwic3VwcG9zaXRpb25Ob2RlIiwiZnJvbVN1cHBvc2l0aW9uTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7OztlQTBCcUJBOztJQXFQTEMsZ0JBQWdCO2VBQWhCQTs7O3lCQTdRZTswREFFZjs0REFDUztvRUFDQzt5QkFFRztxQkFDUztvQkFRVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVqRCxJQUFRQyxVQUFxQ0MseUJBQWMsQ0FBbkRELFNBQVNFLFVBQTRCRCx5QkFBYyxDQUExQ0MsU0FBU0MsaUJBQW1CRix5QkFBYyxDQUFqQ0U7QUFFMUIsSUFBTUMsaUJBQWlCQyxJQUFBQSxnQkFBUyxFQUFDLGFBQzNCQyxrQkFBa0JDLElBQUFBLGlCQUFVLEVBQUMsb0JBQzdCQyxzQkFBc0JILElBQUFBLGdCQUFTLEVBQUMsa0JBQ2hDSSx3QkFBd0JGLElBQUFBLGlCQUFVLEVBQUM7QUFFMUIsSUFBQSxBQUFNVCxrQ0FBTjthQUFNQSxrQkFDUFksV0FBVyxFQUFFQyxNQUFNLEVBQUVDLE1BQU0sRUFBRUMsYUFBYSxFQUFFQyxZQUFZLEVBQUVDLFVBQVUsRUFBRUMsS0FBSztnQ0FEcEVsQjtRQUVqQixJQUFJLENBQUNZLFdBQVcsR0FBR0E7UUFDbkIsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxNQUFNLEdBQUdBO1FBQ2QsSUFBSSxDQUFDQyxhQUFhLEdBQUdBO1FBQ3JCLElBQUksQ0FBQ0MsWUFBWSxHQUFHQTtRQUNwQixJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFDbEIsSUFB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
|
|
301
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vdG9wTGV2ZWxBc3NlcnRpb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZG9tIGZyb20gXCIuLi9kb21cIjtcbmltcG9ydCBMb2NhbENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHQvbG9jYWxcIjtcbmltcG9ydCBTdWJzdGl0dXRpb25zIGZyb20gXCIuLi9zdWJzdGl0dXRpb25zXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSwgbm9kZXNRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IGxhYmVsc0Zyb21KU09OLFxuICAgICAgICAgbGFiZWxzVG9MYWJlbHNKU09OLFxuICAgICAgICAgY29uc2VxdWVudEZyb21KU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zRnJvbUpTT04sXG4gICAgICAgICBzdWJzdGl0dXRpb25zRnJvbUpTT04sXG4gICAgICAgICBjb25zZXF1ZW50VG9Db25zZXF1ZW50SlNPTixcbiAgICAgICAgIHN1cHBvc2l0aW9uc1RvU3VwcG9zaXRpb25zSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9qc29uXCI7XG5cbmNvbnN0IHsgcmV2ZXJzZSwgZXh0cmFjdCwgYmFja3dhcmRzRXZlcnkgfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5jb25zdCBwcm9vZk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi8qL3Byb29mXCIpLFxuICAgICAgbGFiZWxOb2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi8qL2xhYmVscy9sYWJlbFwiKSxcbiAgICAgIGNvbnNlcXVlbnROb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvKi9jb25zZXF1ZW50XCIpLFxuICAgICAgc3VwcG9zaXRpb25Ob2Rlc1F1ZXJ5ID0gbm9kZXNRdWVyeShcIi8qL3N1cHBvc2l0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BMZXZlbEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGZpbGVDb250ZXh0LCBzdHJpbmcsIGxhYmVscywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW50LCBwcm9vZikge1xuICAgIHRoaXMuZmlsZUNvbnRleHQgPSBmaWxlQ29udGV4dDtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLmxhYmVscyA9IGxhYmVscztcbiAgICB0aGlzLnN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9ucztcbiAgICB0aGlzLmNvbnNlcXVlbnQgPSBjb25zZXF1ZW50O1xuICAgIHRoaXMucHJvb2YgPSBwcm9vZjtcbiAgfVxuXG4gIGdldEZpbGVDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0U3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnN0cmluZztcbiAgfVxuXG4gIGdldExhYmVscygpIHtcbiAgICByZXR1cm4gdGhpcy5sYWJlbHM7XG4gIH1cblxuICBnZXRTdXBwb3NpdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3VwcG9zaXRpb25zO1xuICB9XG5cbiAgZ2V0Q29uc2VxdWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zZXF1ZW50O1xuICB9XG5cbiAgZ2V0UHJvb2YoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvb2Y7XG4gIH1cblxuICBtYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSkgeyByZXR1cm4gdGhpcy5jb25zZXF1ZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTsgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSB0aGlzLmxhYmVscy5zb21lKChsYWJlbCkgPT4ge1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSBsYWJlbC5tYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcztcbiAgfVxuXG4gIHZlcmlmeSgpIHtcbiAgICBsZXQgdmVyaWZpZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxhYmVsc1ZlcmlmaWVkID0gdGhpcy52ZXJpZnlMYWJlbHMoKTtcblxuICAgIGlmIChsYWJlbHNWZXJpZmllZCkge1xuICAgICAgY29uc3QgbG9jYWxDb250ZXh0ID0gTG9jYWxDb250ZXh0LmZyb21GaWxlQ29udGV4dCh0aGlzLmZpbGVDb250ZXh0KSxcbiAgICAgICAgICAgIGNvbnRleHQgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICAgICAgc3VwcG9zaXRpb25zVmVyaWZpZWQgPSB0aGlzLnN1cHBvc2l0aW9ucy5ldmVyeSgoc3VwcG9zaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgY29uc3Qgc3VwcG9zaXRpb25WZXJpZmllZCA9IHN1cHBvc2l0aW9uLnZlcmlmeShjb250ZXh0KTtcblxuICAgICAgICAgICAgICBpZiAoc3VwcG9zaXRpb25WZXJpZmllZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgaWYgKHN1cHBvc2l0aW9uc1ZlcmlmaWVkKSB7XG4gICAgICAgIGNvbnN0IGNvbnNlcXVlbnRWZXJpZmllZCA9IHRoaXMuY29uc2VxdWVudC52ZXJpZnkoY29udGV4dCk7XG5cbiAgICAgICAgaWYgKGNvbnNlcXVlbnRWZXJpZmllZCkge1xuICAgICAgICAgIGlmICh0aGlzLnByb29mID09PSBudWxsKSB7XG4gICAgICAgICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgICAgICAgICBwcm9vZlZlcmlmaWVkID0gdGhpcy5wcm9vZi52ZXJpZnkoc3Vic3RpdHV0aW9ucywgdGhpcy5jb25zZXF1ZW50LCBjb250ZXh0KTtcblxuICAgICAgICAgICAgdmVyaWZpZWQgPSBwcm9vZlZlcmlmaWVkOyAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWxzVmVyaWZpZWQgPSB0aGlzLmxhYmVscy5ldmVyeSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG5hbWVPbmx5ID0gdHJ1ZSxcbiAgICAgICAgICAgIGxhYmVsVmVyaWZpZWQgPSBsYWJlbC52ZXJpZnkobmFtZU9ubHkpO1xuXG4gICAgICBpZiAobGFiZWxWZXJpZmllZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBsYWJlbHNWZXJpZmllZDtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgY29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnRVbmlmaWVkO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50U3RyaW5nID0gc3RhdGVtZW50LmdldFN0cmluZygpLFxuICAgICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZSA9IHRoaXMsIC8vL1xuICAgICAgICAgIGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZVN0cmluZyA9IGF4aW9tTGVtbWFUaGVvcmVtQ29uamVjdHVyZS5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYFVuaWZ5aW5nIHRoZSAnJHtzdGF0ZW1lbnRTdHJpbmd9JyBzdGF0ZW1lbnQgd2l0aCB0aGUgJyR7YXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nfScgYXhpb20sIGxlbW1hLCB0aGVvcmVtIG9yIGNvbmplY3R1cmUuLi5gKTtcblxuICAgIGNvbnN0IHN1cHBvc2l0aW9ucyA9IHRoaXMuZ2V0U3VwcG9zaXRpb25zKCksXG4gICAgICAgICAgc3VwcG9zaXRpb25zTGVuZ3RoID0gc3VwcG9zaXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChzdXBwb3NpdGlvbnNMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgICBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KHRoaXMuZmlsZUNvbnRleHQpLFxuICAgICAgICAgICAgZ2VuZXJhbENvbnRleHQgPSBsb2NhbENvbnRleHQsICAvLy9cbiAgICAgICAgICAgIHNwZWNpZmljQ29udGV4dCA9IGNvbnRleHQsICAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZWRXaXRoQ29uc2VxdWVudCA9IHRoaXMudW5pZnlTdGF0ZW1lbnRXaXRoQ29uc2VxdWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBzdGF0ZW1lbnRVbmlmaWVkID0gc3RhdGVtZW50VW5pZmllZFdpdGhDb25zZXF1ZW50OyAgLy8vXG4gICAgfVxuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIGNvbnRleHQuZGVidWcoYC4uLnVuaWZpZWQgdGhlICcke3N0YXRlbWVudFN0cmluZ30nIHN0YXRlbWVudCB3aXRoIHRoZSAnJHtheGlvbUxlbW1hVGhlb3JlbUNvbmplY3R1cmVTdHJpbmd9JyBheGlvbSwgbGVtbWEsIHRoZW9yZW0gb3IgY29uamVjdHVyZS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGVtZW50VW5pZmllZDtcbiAgfVxuXG4gIHVuaWZ5U3RhdGVtZW50V2l0aENvbnNlcXVlbnQoc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KSB7XG4gICAgbGV0IGNvbnNlcXVlbnRVbmlmaWVkO1xuXG4gICAgY29uc3Qgc3RhdGVtZW50VW5pZmllZCA9IHRoaXMuY29uc2VxdWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpOyAgLy8vXG5cbiAgICBjb25zZXF1ZW50VW5pZmllZCA9IHN0YXRlbWVudFVuaWZpZWQ7IC8vL1xuXG4gICAgcmV0dXJuIGNvbnNlcXVlbnRVbmlmaWVkO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnRBbmRQcm9vZlN0ZXBTdWJwcm9vZnMoc3RhdGVtZW50LCBwcm9vZlN0ZXBTdWJwcm9vZnMsIGNvbnRleHQpIHtcbiAgICBsZXQgc3RhdGVtZW50QW5kUHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbG9jYWxDb250ZXh0ID0gTG9jYWxDb250ZXh0LmZyb21GaWxlQ29udGV4dCh0aGlzLmZpbGVDb250ZXh0KSxcbiAgICAgICAgICBnZW5lcmFsQ29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgc3BlY2lmaWNDb250ZXh0ID0gY29udGV4dDsgLy8vXG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gU3Vic3RpdHV0aW9ucy5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZWRXaXRoQ29uc2VxdWVudCA9IHRoaXMudW5pZnlTdGF0ZW1lbnRXaXRoQ29uc2VxdWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZWRXaXRoQ29uc2VxdWVudCkge1xuICAgICAgY29uc3QgcHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbnMgPSB0aGlzLnVuaWZ5UHJvb2ZTdGVwU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhwcm9vZlN0ZXBTdWJwcm9vZnMsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpO1xuXG4gICAgICBpZiAocHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbnMpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uc1Jlc29sdmVkID0gc3Vic3RpdHV0aW9ucy5hcmVSZXNvbHZlZCgpO1xuXG4gICAgICAgIHN0YXRlbWVudEFuZFByb29mU3RlcFN1YnByb29mc1VuaWZpZWQgPSBzdWJzdGl0dXRpb25zUmVzb2x2ZWQ7IC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzdGF0ZW1lbnRBbmRQcm9vZlN0ZXBTdWJwcm9vZnNVbmlmaWVkO1xuICB9XG5cbiAgdW5pZnlQcm9vZlN0ZXBTdWJwcm9vZnNXaXRoU3VwcG9zaXRpb24ocHJvb2ZTdGVwU3VicHJvb2ZzLCBzdXBwb3NpdGlvbiwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCkge1xuICAgIGxldCBwcm9vZlN0ZXBTdWJwcm9vZnNVbmlmaWVkV2l0aFN1cHBvc2l0aW9uICA9ZmFsc2U7XG5cbiAgICBjb25zdCBjb250ZXh0ID0gc3BlY2lmaWNDb250ZXh0LCAgLy8vXG4gICAgICAgICAgc3VwcG9zaXRpb25VbmlmaWVkSW5kZXBlbmRlbnRseSA9IHN1cHBvc2l0aW9uLnVuaWZ5SW5kZXBlbmRlbnRseShzdWJzdGl0dXRpb25zLCBjb250ZXh0KTtcblxuICAgIGlmIChzdXBwb3NpdGlvblVuaWZpZWRJbmRlcGVuZGVudGx5KSB7XG4gICAgICBwcm9vZlN0ZXBTdWJwcm9vZnNVbmlmaWVkV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcHJvb2ZTdGVwID0gZXh0cmFjdChwcm9vZlN0ZXBTdWJwcm9vZnMsIChwcm9vZlN0ZXBTdWJwcm9vZikgPT4ge1xuICAgICAgICBjb25zdCBwcm9vZlN0ZXBVbmlmaWVkID0gc3VwcG9zaXRpb24udW5pZnlQcm9vZlN0ZXBTdWJwcm9vZihwcm9vZlN0ZXBTdWJwcm9vZiwgc3Vic3RpdHV0aW9ucywgZ2VuZXJhbENvbnRleHQsIHNwZWNpZmljQ29udGV4dCk7XG5cbiAgICAgICAgaWYgKHByb29mU3RlcFVuaWZpZWQpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSkgfHwgbnVsbDtcblxuICAgICAgaWYgKHByb29mU3RlcCAhPT0gbnVsbCkge1xuICAgICAgICBwcm9vZlN0ZXBTdWJwcm9vZnNVbmlmaWVkV2l0aFN1cHBvc2l0aW9uID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbjtcbiAgfVxuXG4gIHVuaWZ5UHJvb2ZTdGVwU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9ucyhwcm9vZlN0ZXBTdWJwcm9vZnMsIHN1YnN0aXR1dGlvbnMsIGdlbmVyYWxDb250ZXh0LCBzcGVjaWZpY0NvbnRleHQpIHtcbiAgICBwcm9vZlN0ZXBTdWJwcm9vZnMgPSByZXZlcnNlKHByb29mU3RlcFN1YnByb29mcyk7IC8vL1xuXG4gICAgY29uc3QgcHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbnMgPSBiYWNrd2FyZHNFdmVyeSh0aGlzLnN1cHBvc2l0aW9ucywgKHN1cHBvc2l0aW9uKSA9PiB7XG4gICAgICBjb25zdCBwcm9vZlN0ZXBTdWJwcm9vZnNVbmlmaWVkV2l0aFN1cHBvc2l0aW9uID0gdGhpcy51bmlmeVByb29mU3RlcFN1YnByb29mc1dpdGhTdXBwb3NpdGlvbihwcm9vZlN0ZXBTdWJwcm9vZnMsIHN1cHBvc2l0aW9uLCBzdWJzdGl0dXRpb25zLCBnZW5lcmFsQ29udGV4dCwgc3BlY2lmaWNDb250ZXh0KTtcblxuICAgICAgaWYgKHByb29mU3RlcFN1YnByb29mc1VuaWZpZWRXaXRoU3VwcG9zaXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbnM7XG4gIH1cblxuICB0b0pTT04oKSB7XG4gICAgY29uc3QgbGFiZWxzSlNPTiA9IGxhYmVsc1RvTGFiZWxzSlNPTih0aGlzLmxhYmVscyksXG4gICAgICAgICAgY29uc2VxdWVudEpTT04gPSBjb25zZXF1ZW50VG9Db25zZXF1ZW50SlNPTih0aGlzLmNvbnNlcXVlbnQpLFxuICAgICAgICAgIHN1cHBvc2l0aW9uc0pTT04gPSBzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04odGhpcy5zdXBwb3NpdGlvbnMpLFxuICAgICAgICAgIGxhYmVscyA9IGxhYmVsc0pTT04sICAvLy9cbiAgICAgICAgICBjb25zZXF1ZW50ID0gY29uc2VxdWVudEpTT04sICAvLy9cbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNKU09OLCAgLy8vXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIGxhYmVscyxcbiAgICAgICAgICAgIGNvbnNlcXVlbnQsXG4gICAgICAgICAgICBzdXBwb3NpdGlvbnNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oQ2xhc3MsIGpzb24sIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgY29uc2VxdWVudCA9IGNvbnNlcXVlbnRGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIHN0cmluZyA9IGxhYmVsc1N0cmluZywgIC8vL1xuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gbmV3IENsYXNzKGZpbGVDb250ZXh0LCBzdHJpbmcsIGxhYmVscywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW50LCBwcm9vZik7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGUoQ2xhc3MsIG5vZGUsIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tTm9kZShub2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgY29uc2VxdWVudCA9IGNvbnNlcXVlbnRGcm9tTm9kZShub2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgcHJvb2YgPSBwcm9vZkZyb21Ob2RlKG5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBzdHJpbmcgPSBsYWJlbHNTdHJpbmcsICAvLy9cbiAgICAgICAgICBtZXRhTGVtbWEgPSBuZXcgQ2xhc3MoZmlsZUNvbnRleHQsIHN0cmluZywgbGFiZWxzLCBzdXBwb3NpdGlvbnMsIGNvbnNlcXVlbnQsIHByb29mKTtcblxuICAgIHJldHVybiBtZXRhTGVtbWE7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGFiZWxzRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgeyBMYWJlbCB9ID0gZG9tLFxuICAgICAgICBsYWJlbE5vZGVzID0gbGFiZWxOb2Rlc1F1ZXJ5KG5vZGUpLFxuICAgICAgICBsYWJlbHMgPSBsYWJlbE5vZGVzLm1hcCgobGFiZWxOb2RlKSA9PiB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBMYWJlbC5mcm9tTGFiZWxOb2RlKGxhYmVsTm9kZSwgZmlsZUNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIGxhYmVsO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gbGFiZWxzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvb2ZGcm9tTm9kZShub2RlLCBmaWxlQ29udGV4dCkge1xuICBjb25zdCB7IFByb29mIH0gPSBkb20sXG4gICAgICAgIHByb29mTm9kZSA9IHByb29mTm9kZVF1ZXJ5KG5vZGUpLFxuICAgICAgICBwcm9vZiA9IFByb29mLmZyb21Qcm9vZk5vZGUocHJvb2ZOb2RlLCBmaWxlQ29udGV4dCk7XG5cbiAgcmV0dXJuIHByb29mO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29uc2VxdWVudEZyb21Ob2RlKG5vZGUsIGZpbGVDb250ZXh0KSB7XG4gIGNvbnN0IHsgQ29uc2VxdWVudCB9ID0gZG9tLFxuICAgICAgICBjb25zZXF1ZW50Tm9kZSA9IGNvbnNlcXVlbnROb2RlUXVlcnkobm9kZSksXG4gICAgICAgIGNvbnNlcXVlbnQgPSBDb25zZXF1ZW50LmZyb21Db25zZXF1ZW50Tm9kZShjb25zZXF1ZW50Tm9kZSwgZmlsZUNvbnRleHQpO1xuXG4gIHJldHVybiBjb25zZXF1ZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9zaXRpb25zRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpIHtcbiAgY29uc3QgeyBTdXBwb3NpdGlvbiB9ID0gZG9tLFxuICAgICAgICBzdXBwb3NpdGlvbk5vZGVzID0gc3VwcG9zaXRpb25Ob2Rlc1F1ZXJ5KG5vZGUpLFxuICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbk5vZGVzLm1hcCgoc3VwcG9zaXRpb25Ob2RlKSA9PiB7XG4gICAgICAgICAgY29uc3Qgc3VwcG9zaXRpb24gPSBTdXBwb3NpdGlvbi5mcm9tU3VwcG9zaXRpb25Ob2RlKHN1cHBvc2l0aW9uTm9kZSwgZmlsZUNvbnRleHQpO1xuXG4gICAgICAgICAgcmV0dXJuIHN1cHBvc2l0aW9uO1xuICAgICAgICB9KTtcblxuICByZXR1cm4gc3VwcG9zaXRpb25zO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpIHtcbiAgY29uc3QgbGFiZWxzU3RyaW5nID0gbGFiZWxzLnJlZHVjZSgobGFiZWxzU3RyaW5nLCBsYWJlbCkgPT4ge1xuICAgIGNvbnN0IGxhYmVsU3RyaW5nID0gbGFiZWwuZ2V0U3RyaW5nKCk7XG5cbiAgICBsYWJlbHNTdHJpbmcgPSAobGFiZWxzU3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWxTdHJpbmc6IC8vL1xuICAgICAgICAgICAgICAgICAgICAgICAgYCR7bGFiZWxzU3RyaW5nfSwke2xhYmVsU3RyaW5nfWA7XG5cbiAgICByZXR1cm4gbGFiZWxzU3RyaW5nO1xuICB9LCBudWxsKTtcblxuICByZXR1cm4gbGFiZWxzU3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbImNvbnNlcXVlbnRGcm9tTm9kZSIsIlRvcExldmVsQXNzZXJ0aW9uIiwibGFiZWxzU3RyaW5nRnJvbUxhYmVscyIsInByb29mRnJvbU5vZGUiLCJzdXBwb3NpdGlvbnNGcm9tTm9kZSIsInJldmVyc2UiLCJhcnJheVV0aWxpdGllcyIsImV4dHJhY3QiLCJiYWNrd2FyZHNFdmVyeSIsInByb29mTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibGFiZWxOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsImNvbnNlcXVlbnROb2RlUXVlcnkiLCJzdXBwb3NpdGlvbk5vZGVzUXVlcnkiLCJmaWxlQ29udGV4dCIsInN0cmluZyIsImxhYmVscyIsInN1cHBvc2l0aW9ucyIsImNvbnNlcXVlbnQiLCJwcm9vZiIsImdldEZpbGVDb250ZXh0IiwiZ2V0U3RyaW5nIiwiZ2V0TGFiZWxzIiwiZ2V0U3VwcG9zaXRpb25zIiwiZ2V0Q29uc2VxdWVudCIsImdldFByb29mIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsIm1hdGNoTWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyIsInNvbWUiLCJsYWJlbCIsInZlcmlmeSIsInZlcmlmaWVkIiwibGFiZWxzVmVyaWZpZWQiLCJ2ZXJpZnlMYWJlbHMiLCJsb2NhbENvbnRleHQiLCJMb2NhbENvbnRleHQiLCJmcm9tRmlsZUNvbnRleHQiLCJjb250ZXh0Iiwic3VwcG9zaXRpb25zVmVyaWZpZWQiLCJldmVyeSIsInN1cHBvc2l0aW9uIiwic3VwcG9zaXRpb25WZXJpZmllZCIsImNvbnNlcXVlbnRWZXJpZmllZCIsInN1YnN0aXR1dGlvbnMiLCJTdWJzdGl0dXRpb25zIiwiZnJvbU5vdGhpbmciLCJwcm9vZlZlcmlmaWVkIiwibmFtZU9ubHkiLCJsYWJlbFZlcmlmaWVkIiwidW5pZnlTdGF0ZW1lbnQiLCJzdGF0ZW1lbnQiLCJzdGF0ZW1lbnRVbmlmaWVkIiwic3RhdGVtZW50U3RyaW5nIiwiYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlIiwiYXhpb21MZW1tYVRoZW9yZW1Db25qZWN0dXJlU3RyaW5nIiwidHJhY2UiLCJzdXBwb3NpdGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJnZW5lcmFsQ29udGV4dCIsInNwZWNpZmljQ29udGV4dCIsInN0YXRlbWVudFVuaWZpZWRXaXRoQ29uc2VxdWVudCIsInVuaWZ5U3RhdGVtZW50V2l0aENvbnNlcXVlbnQiLCJkZWJ1ZyIsImNvbnNlcXVlbnRVbmlmaWVkIiwidW5pZnlTdGF0ZW1lbnRBbmRQcm9vZlN0ZXBTdWJwcm9vZnMiLCJwcm9vZlN0ZXBTdWJwcm9vZnMiLCJzdGF0ZW1lbnRBbmRQcm9vZlN0ZXBTdWJwcm9vZnNVbmlmaWVkIiwicHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbnMiLCJ1bmlmeVByb29mU3RlcFN1YnByb29mc1dpdGhTdXBwb3NpdGlvbnMiLCJzdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJhcmVSZXNvbHZlZCIsInVuaWZ5UHJvb2ZTdGVwU3VicHJvb2ZzV2l0aFN1cHBvc2l0aW9uIiwicHJvb2ZTdGVwU3VicHJvb2ZzVW5pZmllZFdpdGhTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uVW5pZmllZEluZGVwZW5kZW50bHkiLCJ1bmlmeUluZGVwZW5kZW50bHkiLCJwcm9vZlN0ZXAiLCJwcm9vZlN0ZXBTdWJwcm9vZiIsInByb29mU3RlcFVuaWZpZWQiLCJ1bmlmeVByb29mU3RlcFN1YnByb29mIiwidG9KU09OIiwibGFiZWxzSlNPTiIsImxhYmVsc1RvTGFiZWxzSlNPTiIsImNvbnNlcXVlbnRKU09OIiwiY29uc2VxdWVudFRvQ29uc2VxdWVudEpTT04iLCJzdXBwb3NpdGlvbnNKU09OIiwic3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OIiwianNvbiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbHNGcm9tSlNPTiIsImxhYmVsc1N0cmluZyIsInN1cHBvc2l0aW9uc0Zyb21KU09OIiwiY29uc2VxdWVudEZyb21KU09OIiwidG9wTGV2ZWxBc3NlcnRpb24iLCJmcm9tTm9kZSIsIm5vZGUiLCJsYWJlbHNGcm9tTm9kZSIsIm1ldGFMZW1tYSIsIkxhYmVsIiwiZG9tIiwibGFiZWxOb2RlcyIsIm1hcCIsImxhYmVsTm9kZSIsImZyb21MYWJlbE5vZGUiLCJQcm9vZiIsInByb29mTm9kZSIsImZyb21Qcm9vZk5vZGUiLCJDb25zZXF1ZW50IiwiY29uc2VxdWVudE5vZGUiLCJmcm9tQ29uc2VxdWVudE5vZGUiLCJTdXBwb3NpdGlvbiIsInN1cHBvc2l0aW9uTm9kZXMiLCJzdXBwb3NpdGlvbk5vZGUiLCJmcm9tU3VwcG9zaXRpb25Ob2RlIiwicmVkdWNlIiwibGFiZWxTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQTJSZ0JBLGtCQUFrQjtlQUFsQkE7OztlQWxRS0M7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
|
|
@@ -0,0 +1,253 @@
|
|
|
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 TopLevelMetaAssertion;
|
|
9
|
+
}
|
|
10
|
+
});
|
|
11
|
+
var _necessary = require("necessary");
|
|
12
|
+
var _dom = /*#__PURE__*/ _interop_require_default(require("../dom"));
|
|
13
|
+
var _local = /*#__PURE__*/ _interop_require_default(require("../context/local"));
|
|
14
|
+
var _substitutions = /*#__PURE__*/ _interop_require_default(require("../substitutions"));
|
|
15
|
+
var _topLevelAssertion = /*#__PURE__*/ _interop_require_wildcard(require("./topLevelAssertion"));
|
|
16
|
+
var _query = require("../utilities/query");
|
|
17
|
+
var _json = require("../utilities/json");
|
|
18
|
+
function _assert_this_initialized(self) {
|
|
19
|
+
if (self === void 0) {
|
|
20
|
+
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
|
|
21
|
+
}
|
|
22
|
+
return self;
|
|
23
|
+
}
|
|
24
|
+
function _call_super(_this, derived, args) {
|
|
25
|
+
derived = _get_prototype_of(derived);
|
|
26
|
+
return _possible_constructor_return(_this, _is_native_reflect_construct() ? Reflect.construct(derived, args || [], _get_prototype_of(_this).constructor) : derived.apply(_this, args));
|
|
27
|
+
}
|
|
28
|
+
function _class_call_check(instance, Constructor) {
|
|
29
|
+
if (!(instance instanceof Constructor)) {
|
|
30
|
+
throw new TypeError("Cannot call a class as a function");
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function _defineProperties(target, props) {
|
|
34
|
+
for(var i = 0; i < props.length; i++){
|
|
35
|
+
var descriptor = props[i];
|
|
36
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
37
|
+
descriptor.configurable = true;
|
|
38
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
39
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
43
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
44
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
45
|
+
return Constructor;
|
|
46
|
+
}
|
|
47
|
+
function _get_prototype_of(o) {
|
|
48
|
+
_get_prototype_of = Object.setPrototypeOf ? Object.getPrototypeOf : function getPrototypeOf(o) {
|
|
49
|
+
return o.__proto__ || Object.getPrototypeOf(o);
|
|
50
|
+
};
|
|
51
|
+
return _get_prototype_of(o);
|
|
52
|
+
}
|
|
53
|
+
function _inherits(subClass, superClass) {
|
|
54
|
+
if (typeof superClass !== "function" && superClass !== null) {
|
|
55
|
+
throw new TypeError("Super expression must either be null or a function");
|
|
56
|
+
}
|
|
57
|
+
subClass.prototype = Object.create(superClass && superClass.prototype, {
|
|
58
|
+
constructor: {
|
|
59
|
+
value: subClass,
|
|
60
|
+
writable: true,
|
|
61
|
+
configurable: true
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
if (superClass) _set_prototype_of(subClass, superClass);
|
|
65
|
+
}
|
|
66
|
+
function _interop_require_default(obj) {
|
|
67
|
+
return obj && obj.__esModule ? obj : {
|
|
68
|
+
default: obj
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
72
|
+
if (typeof WeakMap !== "function") return null;
|
|
73
|
+
var cacheBabelInterop = new WeakMap();
|
|
74
|
+
var cacheNodeInterop = new WeakMap();
|
|
75
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
76
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
77
|
+
})(nodeInterop);
|
|
78
|
+
}
|
|
79
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
80
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
81
|
+
return obj;
|
|
82
|
+
}
|
|
83
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
84
|
+
return {
|
|
85
|
+
default: obj
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
89
|
+
if (cache && cache.has(obj)) {
|
|
90
|
+
return cache.get(obj);
|
|
91
|
+
}
|
|
92
|
+
var newObj = {
|
|
93
|
+
__proto__: null
|
|
94
|
+
};
|
|
95
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
96
|
+
for(var key in obj){
|
|
97
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
98
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
99
|
+
if (desc && (desc.get || desc.set)) {
|
|
100
|
+
Object.defineProperty(newObj, key, desc);
|
|
101
|
+
} else {
|
|
102
|
+
newObj[key] = obj[key];
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
newObj.default = obj;
|
|
107
|
+
if (cache) {
|
|
108
|
+
cache.set(obj, newObj);
|
|
109
|
+
}
|
|
110
|
+
return newObj;
|
|
111
|
+
}
|
|
112
|
+
function _possible_constructor_return(self, call) {
|
|
113
|
+
if (call && (_type_of(call) === "object" || typeof call === "function")) {
|
|
114
|
+
return call;
|
|
115
|
+
}
|
|
116
|
+
return _assert_this_initialized(self);
|
|
117
|
+
}
|
|
118
|
+
function _set_prototype_of(o, p) {
|
|
119
|
+
_set_prototype_of = Object.setPrototypeOf || function setPrototypeOf(o, p) {
|
|
120
|
+
o.__proto__ = p;
|
|
121
|
+
return o;
|
|
122
|
+
};
|
|
123
|
+
return _set_prototype_of(o, p);
|
|
124
|
+
}
|
|
125
|
+
function _type_of(obj) {
|
|
126
|
+
"@swc/helpers - typeof";
|
|
127
|
+
return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
|
|
128
|
+
}
|
|
129
|
+
function _is_native_reflect_construct() {
|
|
130
|
+
try {
|
|
131
|
+
var result = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() {}));
|
|
132
|
+
} catch (_) {}
|
|
133
|
+
return (_is_native_reflect_construct = function() {
|
|
134
|
+
return !!result;
|
|
135
|
+
})();
|
|
136
|
+
}
|
|
137
|
+
var first = _necessary.arrayUtilities.first;
|
|
138
|
+
var labelNodeQuery = (0, _query.nodeQuery)("/metatheorem/label");
|
|
139
|
+
var TopLevelMetaAssertion = /*#__PURE__*/ function(TopLevelAssertion) {
|
|
140
|
+
_inherits(TopLevelMetaAssertion, TopLevelAssertion);
|
|
141
|
+
function TopLevelMetaAssertion(fileContext, string, labels, suppositions, consequent, proof, substitutions) {
|
|
142
|
+
_class_call_check(this, TopLevelMetaAssertion);
|
|
143
|
+
var _this;
|
|
144
|
+
_this = _call_super(this, TopLevelMetaAssertion, [
|
|
145
|
+
fileContext,
|
|
146
|
+
string,
|
|
147
|
+
labels,
|
|
148
|
+
suppositions,
|
|
149
|
+
consequent,
|
|
150
|
+
proof
|
|
151
|
+
]);
|
|
152
|
+
_this.substitutions = substitutions;
|
|
153
|
+
return _this;
|
|
154
|
+
}
|
|
155
|
+
_create_class(TopLevelMetaAssertion, [
|
|
156
|
+
{
|
|
157
|
+
key: "getSubstitutions",
|
|
158
|
+
value: function getSubstitutions() {
|
|
159
|
+
return this.substitutions;
|
|
160
|
+
}
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
key: "getLabel",
|
|
164
|
+
value: function getLabel() {
|
|
165
|
+
var labels = this.getLabels(), firstLabel = first(labels), label = firstLabel; ///
|
|
166
|
+
return label;
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
key: "verify",
|
|
171
|
+
value: function verify() {
|
|
172
|
+
var verified = false;
|
|
173
|
+
var labelsVerified = this.verifyLabels();
|
|
174
|
+
if (labelsVerified) {
|
|
175
|
+
var localContext = _local.default.fromFileContext(this.fileContext), context = localContext, suppositionsVerified = this.suppositions.every(function(supposition) {
|
|
176
|
+
var suppositionVerified = supposition.verify(context);
|
|
177
|
+
if (suppositionVerified) {
|
|
178
|
+
return true;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
if (suppositionsVerified) {
|
|
182
|
+
var consequentVerified = this.consequent.verify(context);
|
|
183
|
+
if (consequentVerified) {
|
|
184
|
+
if (this.proof === null) {
|
|
185
|
+
verified = true;
|
|
186
|
+
} else {
|
|
187
|
+
var proofVerified = this.proof.verify(this.substitutions, this.consequent, context);
|
|
188
|
+
verified = proofVerified; ///
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return verified;
|
|
194
|
+
}
|
|
195
|
+
},
|
|
196
|
+
{
|
|
197
|
+
key: "verifyLabels",
|
|
198
|
+
value: function verifyLabels() {
|
|
199
|
+
var labelsVerified = this.labels.every(function(label) {
|
|
200
|
+
var nameOnly = false, labelVerified = label.verify(nameOnly);
|
|
201
|
+
if (labelVerified) {
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
return labelsVerified;
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
key: "verifyWhenStated",
|
|
210
|
+
value: function verifyWhenStated(statement, reference, context) {
|
|
211
|
+
var verifiedWhenStated;
|
|
212
|
+
debugger;
|
|
213
|
+
return verifiedWhenStated;
|
|
214
|
+
}
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
key: "toJSON",
|
|
218
|
+
value: function toJSON() {
|
|
219
|
+
var labelsJSON = (0, _json.labelsToLabelsJSON)(this.labels), consequentJSON = (0, _json.consequentToConsequentJSON)(this.consequent), suppositionsJSON = (0, _json.suppositionsToSuppositionsJSON)(this.suppositions), substitutionsJSON = (0, _json.substitutionsToSubstitutionsJSON)(this.substitutions), labels = labelsJSON, consequent = consequentJSON, suppositions = suppositionsJSON, substitutions = substitutionsJSON, json = {
|
|
220
|
+
labels: labels,
|
|
221
|
+
consequent: consequent,
|
|
222
|
+
suppositions: suppositions,
|
|
223
|
+
substitutions: substitutions
|
|
224
|
+
};
|
|
225
|
+
return json;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
], [
|
|
229
|
+
{
|
|
230
|
+
key: "fromJSON",
|
|
231
|
+
value: function fromJSON(Class, json, fileContext) {
|
|
232
|
+
var labels = (0, _json.labelsFromJSON)(json, fileContext), substitutions = (0, _json.substitutionsFromJSON)(json, fileContext), labelsString = (0, _topLevelAssertion.labelsStringFromLabels)(labels), suppositions = (0, _json.suppositionsFromJSON)(json, fileContext), consequent = (0, _json.consequentFromJSON)(json, fileContext), proof = null, string = labelsString, topLevelAssertion = new Class(fileContext, string, labels, suppositions, consequent, proof, substitutions);
|
|
233
|
+
return topLevelAssertion;
|
|
234
|
+
}
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
key: "fromNode",
|
|
238
|
+
value: function fromNode(Class, node, fileContext) {
|
|
239
|
+
var labels = labelsFromNode(node, fileContext), substitutions = _substitutions.default.fromNothing(), labelsString = (0, _topLevelAssertion.labelsStringFromLabels)(labels), suppositions = (0, _topLevelAssertion.suppositionsFromNode)(node, fileContext), consequent = (0, _topLevelAssertion.consequentFromNode)(node, fileContext), proof = (0, _topLevelAssertion.proofFromNode)(node, fileContext), string = labelsString, metaLemma = new Class(fileContext, string, labels, suppositions, consequent, proof, substitutions);
|
|
240
|
+
return metaLemma;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
]);
|
|
244
|
+
return TopLevelMetaAssertion;
|
|
245
|
+
}(_topLevelAssertion.default);
|
|
246
|
+
function labelsFromNode(node, fileContext) {
|
|
247
|
+
var Label = _dom.default.Label, labelNode = labelNodeQuery(node), label = Label.fromLabelNode(labelNode, fileContext), labels = [
|
|
248
|
+
label
|
|
249
|
+
];
|
|
250
|
+
return labels;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kb20vdG9wTGV2ZWxNZXRhQXNzZXJ0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IGRvbSBmcm9tIFwiLi4vZG9tXCI7XG5pbXBvcnQgTG9jYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgU3Vic3RpdHV0aW9ucyBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IFRvcExldmVsQXNzZXJ0aW9uIGZyb20gXCIuL3RvcExldmVsQXNzZXJ0aW9uXCI7XG5cbmltcG9ydCB7IG5vZGVRdWVyeSB9IGZyb20gXCIuLi91dGlsaXRpZXMvcXVlcnlcIjtcbmltcG9ydCB7IHByb29mRnJvbU5vZGUsIGNvbnNlcXVlbnRGcm9tTm9kZSwgc3VwcG9zaXRpb25zRnJvbU5vZGUsIGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMgfSBmcm9tIFwiLi90b3BMZXZlbEFzc2VydGlvblwiO1xuaW1wb3J0IHsgbGFiZWxzRnJvbUpTT04sXG4gICAgICAgICBsYWJlbHNUb0xhYmVsc0pTT04sXG4gICAgICAgICBjb25zZXF1ZW50RnJvbUpTT04sXG4gICAgICAgICBzdXBwb3NpdGlvbnNGcm9tSlNPTixcbiAgICAgICAgIHN1YnN0aXR1dGlvbnNGcm9tSlNPTixcbiAgICAgICAgIGNvbnNlcXVlbnRUb0NvbnNlcXVlbnRKU09OLFxuICAgICAgICAgc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OLFxuICAgICAgICAgc3Vic3RpdHV0aW9uc1RvU3Vic3RpdHV0aW9uc0pTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuY29uc3QgeyBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNvbnN0IGxhYmVsTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL21ldGF0aGVvcmVtL2xhYmVsXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3BMZXZlbE1ldGFBc3NlcnRpb24gZXh0ZW5kcyBUb3BMZXZlbEFzc2VydGlvbiB7XG4gIGNvbnN0cnVjdG9yKGZpbGVDb250ZXh0LCBzdHJpbmcsIGxhYmVscywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW50LCBwcm9vZiwgc3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGZpbGVDb250ZXh0LCBzdHJpbmcsIGxhYmVscywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW50LCBwcm9vZik7XG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0TGFiZWwoKSB7XG4gICAgY29uc3QgbGFiZWxzID0gdGhpcy5nZXRMYWJlbHMoKSxcbiAgICAgICAgICBmaXJzdExhYmVsID0gZmlyc3QobGFiZWxzKSxcbiAgICAgICAgICBsYWJlbCA9IGZpcnN0TGFiZWw7IC8vL1xuXG4gICAgcmV0dXJuIGxhYmVsO1xuICB9XG5cbiAgdmVyaWZ5KCkge1xuICAgIGxldCB2ZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbGFiZWxzVmVyaWZpZWQgPSB0aGlzLnZlcmlmeUxhYmVscygpO1xuXG4gICAgaWYgKGxhYmVsc1ZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBsb2NhbENvbnRleHQgPSBMb2NhbENvbnRleHQuZnJvbUZpbGVDb250ZXh0KHRoaXMuZmlsZUNvbnRleHQpLFxuICAgICAgICAgICAgY29udGV4dCA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgICBzdXBwb3NpdGlvbnNWZXJpZmllZCA9IHRoaXMuc3VwcG9zaXRpb25zLmV2ZXJ5KChzdXBwb3NpdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBzdXBwb3NpdGlvblZlcmlmaWVkID0gc3VwcG9zaXRpb24udmVyaWZ5KGNvbnRleHQpO1xuXG4gICAgICAgICAgICAgIGlmIChzdXBwb3NpdGlvblZlcmlmaWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICBpZiAoc3VwcG9zaXRpb25zVmVyaWZpZWQpIHtcbiAgICAgICAgY29uc3QgY29uc2VxdWVudFZlcmlmaWVkID0gdGhpcy5jb25zZXF1ZW50LnZlcmlmeShjb250ZXh0KTtcblxuICAgICAgICBpZiAoY29uc2VxdWVudFZlcmlmaWVkKSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJvb2YgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZlcmlmaWVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcHJvb2ZWZXJpZmllZCA9IHRoaXMucHJvb2YudmVyaWZ5KHRoaXMuc3Vic3RpdHV0aW9ucywgdGhpcy5jb25zZXF1ZW50LCBjb250ZXh0KTtcblxuICAgICAgICAgICAgdmVyaWZpZWQgPSBwcm9vZlZlcmlmaWVkOyAvLy9cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlMYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWxzVmVyaWZpZWQgPSB0aGlzLmxhYmVscy5ldmVyeSgobGFiZWwpID0+IHtcbiAgICAgIGNvbnN0IG5hbWVPbmx5ID0gZmFsc2UsXG4gICAgICAgICAgICBsYWJlbFZlcmlmaWVkID0gbGFiZWwudmVyaWZ5KG5hbWVPbmx5KTtcblxuICAgICAgaWYgKGxhYmVsVmVyaWZpZWQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbGFiZWxzVmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlXaGVuU3RhdGVkKHN0YXRlbWVudCwgcmVmZXJlbmNlLCBjb250ZXh0KSB7XG4gICAgbGV0IHZlcmlmaWVkV2hlblN0YXRlZDtcblxuICAgIGRlYnVnZ2VyXG5cbiAgICByZXR1cm4gdmVyaWZpZWRXaGVuU3RhdGVkO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGxhYmVsc0pTT04gPSBsYWJlbHNUb0xhYmVsc0pTT04odGhpcy5sYWJlbHMpLFxuICAgICAgICAgIGNvbnNlcXVlbnRKU09OID0gY29uc2VxdWVudFRvQ29uc2VxdWVudEpTT04odGhpcy5jb25zZXF1ZW50KSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnNKU09OID0gc3VwcG9zaXRpb25zVG9TdXBwb3NpdGlvbnNKU09OKHRoaXMuc3VwcG9zaXRpb25zKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zSlNPTiA9IHN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OKHRoaXMuc3Vic3RpdHV0aW9ucyksXG4gICAgICAgICAgbGFiZWxzID0gbGFiZWxzSlNPTiwgIC8vL1xuICAgICAgICAgIGNvbnNlcXVlbnQgPSBjb25zZXF1ZW50SlNPTiwgIC8vL1xuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9uc0pTT04sICAvLy9cbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgbGFiZWxzLFxuICAgICAgICAgICAgY29uc2VxdWVudCxcbiAgICAgICAgICAgIHN1cHBvc2l0aW9ucyxcbiAgICAgICAgICAgIHN1YnN0aXR1dGlvbnNcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUpTT04oQ2xhc3MsIGpzb24sIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBzdWJzdGl0dXRpb25zRnJvbUpTT04oanNvbiwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIGxhYmVsc1N0cmluZyA9IGxhYmVsc1N0cmluZ0Zyb21MYWJlbHMobGFiZWxzKSxcbiAgICAgICAgICBzdXBwb3NpdGlvbnMgPSBzdXBwb3NpdGlvbnNGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgY29uc2VxdWVudCA9IGNvbnNlcXVlbnRGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgcHJvb2YgPSBudWxsLFxuICAgICAgICAgIHN0cmluZyA9IGxhYmVsc1N0cmluZywgIC8vL1xuICAgICAgICAgIHRvcExldmVsQXNzZXJ0aW9uID0gbmV3IENsYXNzKGZpbGVDb250ZXh0LCBzdHJpbmcsIGxhYmVscywgc3VwcG9zaXRpb25zLCBjb25zZXF1ZW50LCBwcm9vZiwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gdG9wTGV2ZWxBc3NlcnRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vZGUoQ2xhc3MsIG5vZGUsIGZpbGVDb250ZXh0KSB7XG4gICAgY29uc3QgbGFiZWxzID0gbGFiZWxzRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgbGFiZWxzU3RyaW5nID0gbGFiZWxzU3RyaW5nRnJvbUxhYmVscyhsYWJlbHMpLFxuICAgICAgICAgIHN1cHBvc2l0aW9ucyA9IHN1cHBvc2l0aW9uc0Zyb21Ob2RlKG5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBjb25zZXF1ZW50ID0gY29uc2VxdWVudEZyb21Ob2RlKG5vZGUsIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBwcm9vZiA9IHByb29mRnJvbU5vZGUobm9kZSwgZmlsZUNvbnRleHQpLFxuICAgICAgICAgIHN0cmluZyA9IGxhYmVsc1N0cmluZywgIC8vL1xuICAgICAgICAgIG1ldGFMZW1tYSA9IG5ldyBDbGFzcyhmaWxlQ29udGV4dCwgc3RyaW5nLCBsYWJlbHMsIHN1cHBvc2l0aW9ucywgY29uc2VxdWVudCwgcHJvb2YsIHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgcmV0dXJuIG1ldGFMZW1tYTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsYWJlbHNGcm9tTm9kZShub2RlLCBmaWxlQ29udGV4dCkge1xuICBjb25zdCB7IExhYmVsIH0gPSBkb20sXG4gICAgICAgIGxhYmVsTm9kZSA9IGxhYmVsTm9kZVF1ZXJ5KG5vZGUpLFxuICAgICAgICBsYWJlbCA9IExhYmVsLmZyb21MYWJlbE5vZGUobGFiZWxOb2RlLCBmaWxlQ29udGV4dCksXG4gICAgICAgIGxhYmVscyA9IFtcbiAgICAgICAgICBsYWJlbFxuICAgICAgICBdO1xuXG4gIHJldHVybiBsYWJlbHM7XG59XG4iXSwibmFtZXMiOlsiVG9wTGV2ZWxNZXRhQXNzZXJ0aW9uIiwiZmlyc3QiLCJhcnJheVV0aWxpdGllcyIsImxhYmVsTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwiZmlsZUNvbnRleHQiLCJzdHJpbmciLCJsYWJlbHMiLCJzdXBwb3NpdGlvbnMiLCJjb25zZXF1ZW50IiwicHJvb2YiLCJzdWJzdGl0dXRpb25zIiwiZ2V0U3Vic3RpdHV0aW9ucyIsImdldExhYmVsIiwiZ2V0TGFiZWxzIiwiZmlyc3RMYWJlbCIsImxhYmVsIiwidmVyaWZ5IiwidmVyaWZpZWQiLCJsYWJlbHNWZXJpZmllZCIsInZlcmlmeUxhYmVscyIsImxvY2FsQ29udGV4dCIsIkxvY2FsQ29udGV4dCIsImZyb21GaWxlQ29udGV4dCIsImNvbnRleHQiLCJzdXBwb3NpdGlvbnNWZXJpZmllZCIsImV2ZXJ5Iiwic3VwcG9zaXRpb24iLCJzdXBwb3NpdGlvblZlcmlmaWVkIiwiY29uc2VxdWVudFZlcmlmaWVkIiwicHJvb2ZWZXJpZmllZCIsIm5hbWVPbmx5IiwibGFiZWxWZXJpZmllZCIsInZlcmlmeVdoZW5TdGF0ZWQiLCJzdGF0ZW1lbnQiLCJyZWZlcmVuY2UiLCJ2ZXJpZmllZFdoZW5TdGF0ZWQiLCJ0b0pTT04iLCJsYWJlbHNKU09OIiwibGFiZWxzVG9MYWJlbHNKU09OIiwiY29uc2VxdWVudEpTT04iLCJjb25zZXF1ZW50VG9Db25zZXF1ZW50SlNPTiIsInN1cHBvc2l0aW9uc0pTT04iLCJzdXBwb3NpdGlvbnNUb1N1cHBvc2l0aW9uc0pTT04iLCJzdWJzdGl0dXRpb25zSlNPTiIsInN1YnN0aXR1dGlvbnNUb1N1YnN0aXR1dGlvbnNKU09OIiwianNvbiIsImZyb21KU09OIiwiQ2xhc3MiLCJsYWJlbHNGcm9tSlNPTiIsInN1YnN0aXR1dGlvbnNGcm9tSlNPTiIsImxhYmVsc1N0cmluZyIsImxhYmVsc1N0cmluZ0Zyb21MYWJlbHMiLCJzdXBwb3NpdGlvbnNGcm9tSlNPTiIsImNvbnNlcXVlbnRGcm9tSlNPTiIsInRvcExldmVsQXNzZXJ0aW9uIiwiZnJvbU5vZGUiLCJub2RlIiwibGFiZWxzRnJvbU5vZGUiLCJTdWJzdGl0dXRpb25zIiwiZnJvbU5vdGhpbmciLCJzdXBwb3NpdGlvbnNGcm9tTm9kZSIsImNvbnNlcXVlbnRGcm9tTm9kZSIsInByb29mRnJvbU5vZGUiLCJtZXRhTGVtbWEiLCJUb3BMZXZlbEFzc2VydGlvbiIsIkxhYmVsIiwiZG9tIiwibGFiZWxOb2RlIiwiZnJvbUxhYmVsTm9kZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUF3QnFCQTs7O3lCQXRCVTswREFFZjs0REFDUztvRUFDQzt5RUFDSTtxQkFFSjtvQkFTdUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVqRCxJQUFNLEFBQUVDLFFBQVVDLHlCQUFjLENBQXhCRDtBQUVSLElBQU1FLGlCQUFpQkMsSUFBQUEsZ0JBQVMsRUFBQztBQUVsQixJQUFBLEFBQU1KLHNDQUFOO2NBQU1BO2FBQUFBLHNCQUNQSyxXQUFXLEVBQUVDLE1BQU0sRUFBRUMsTUFBTSxFQUFFQyxZQUFZ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
|
package/lib/utilities/string.js
CHANGED
|
@@ -33,9 +33,9 @@ function nodeAsString(node, tokens) {
|
|
|
33
33
|
function nodesAsString(nodes, tokens) {
|
|
34
34
|
var string = nodes.reduce(function(string, node) {
|
|
35
35
|
var nodeString = nodeAsString(node, tokens);
|
|
36
|
-
string = string ===
|
|
36
|
+
string = string === null ? nodeString : "".concat(string, ",").concat(nodeString);
|
|
37
37
|
return string;
|
|
38
|
-
},
|
|
38
|
+
}, null);
|
|
39
39
|
return string;
|
|
40
40
|
}
|
|
41
41
|
function tokensAsString(tokens) {
|
|
@@ -74,4 +74,4 @@ function nonTerminalNodeAsTokens(nonTerminalNode, tokens) {
|
|
|
74
74
|
return tokens;
|
|
75
75
|
}
|
|
76
76
|
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlQXNTdHJpbmcobm9kZSwgdG9rZW5zKSB7XG4gIGxldCBzdHJpbmc7XG5cbiAgdG9rZW5zID0gbm9kZUFzVG9rZW5zKG5vZGUsIHRva2Vucyk7ICAvLy9cblxuICBzdHJpbmcgPSB0b2tlbnNBc1N0cmluZyh0b2tlbnMpO1xuXG4gIHN0cmluZyA9IHRyaW1TdHJpbmcoc3RyaW5nKTsgIC8vL1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc0FzU3RyaW5nKG5vZGVzLCB0b2tlbnMpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXMucmVkdWNlKChzdHJpbmcsIG5vZGUpID0+
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBub2RlQXNTdHJpbmcobm9kZSwgdG9rZW5zKSB7XG4gIGxldCBzdHJpbmc7XG5cbiAgdG9rZW5zID0gbm9kZUFzVG9rZW5zKG5vZGUsIHRva2Vucyk7ICAvLy9cblxuICBzdHJpbmcgPSB0b2tlbnNBc1N0cmluZyh0b2tlbnMpO1xuXG4gIHN0cmluZyA9IHRyaW1TdHJpbmcoc3RyaW5nKTsgIC8vL1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub2Rlc0FzU3RyaW5nKG5vZGVzLCB0b2tlbnMpIHtcbiAgY29uc3Qgc3RyaW5nID0gbm9kZXMucmVkdWNlKChzdHJpbmcsIG5vZGUpID0+IHtcbiAgICBjb25zdCBub2RlU3RyaW5nID0gbm9kZUFzU3RyaW5nKG5vZGUsIHRva2Vucyk7XG5cbiAgICBzdHJpbmcgPSAoc3RyaW5nID09PSBudWxsKSA/XG4gICAgICAgICAgICAgICBub2RlU3RyaW5nIDpcbiAgICAgICAgICAgICAgICBgJHtzdHJpbmd9LCR7bm9kZVN0cmluZ31gO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfSwgbnVsbCk7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRva2Vuc0FzU3RyaW5nKHRva2Vucykge1xuICBjb25zdCBzdHJpbmcgPSB0b2tlbnMucmVkdWNlKChzdHJpbmcsIHRva2VuKSA9PiB7XG4gICAgY29uc3QgY29udGVudCA9IHRva2VuLmdldENvbnRlbnQoKTtcblxuICAgIHN0cmluZyA9IGAke3N0cmluZ30ke2NvbnRlbnR9YDtcblxuICAgIHJldHVybiBzdHJpbmc7XG4gIH0sIEVNUFRZX1NUUklORyk7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vZGVBc1Rva2Vucyhub2RlLCB0b2tlbnMpIHtcbiAgY29uc3Qgbm9kZVRlcm1pbmFsTm9kZSA9IG5vZGUuaXNUZXJtaW5hbE5vZGUoKTtcblxuICBpZiAobm9kZVRlcm1pbmFsTm9kZSkge1xuICAgIGNvbnN0IHRlcm1pbmFsTm9kZSA9IG5vZGU7ICAvLy9cblxuICAgIHRva2VucyA9IHRlcm1pbmFsTm9kZUFzVG9rZW5zKHRlcm1pbmFsTm9kZSwgdG9rZW5zKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBub25UZXJtaW5hbE5vZGUgPSBub2RlOyAvLy9cblxuICAgIHRva2VucyA9IG5vblRlcm1pbmFsTm9kZUFzVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKTtcbiAgfVxuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIHRyaW1TdHJpbmcoc3RyaW5nKSB7XG4gIHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKC9cXHMrJC8sIEVNUFRZX1NUUklORyk7ICAvLy9cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiB0ZXJtaW5hbE5vZGVBc1Rva2Vucyh0ZXJtaW5hbE5vZGUsIHRva2Vucykge1xuICBjb25zdCBzaWduaWZpY2FudFRva2VuID0gdGVybWluYWxOb2RlLmdldFNpZ25pZmljYW50VG9rZW4oKSxcbiAgICAgICAgdG9rZW4gPSBzaWduaWZpY2FudFRva2VuOyAvLy9cblxuICB0b2tlbnMgPSBbICAvLy9cbiAgICB0b2tlblxuICBdO1xuXG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmZ1bmN0aW9uIG5vblRlcm1pbmFsTm9kZUFzVG9rZW5zKG5vblRlcm1pbmFsTm9kZSwgdG9rZW5zKSB7XG4gIGNvbnN0IGxhc3RTaWduaWZpY2FudFRva2VuSW5kZXggPSBub25UZXJtaW5hbE5vZGUuZ2V0TGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICBmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCA9IG5vblRlcm1pbmFsTm9kZS5nZXRGaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCh0b2tlbnMpLFxuICAgICAgICBzdGFydCA9IGZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4LCAvLy9cbiAgICAgICAgZW5kID0gbGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCArIDE7XG5cbiAgdG9rZW5zID0gdG9rZW5zLnNsaWNlKHN0YXJ0LCBlbmQpOyAgLy8vXG5cbiAgcmV0dXJuIHRva2Vucztcbn1cbiJdLCJuYW1lcyI6WyJub2RlQXNTdHJpbmciLCJub2RlQXNUb2tlbnMiLCJub2Rlc0FzU3RyaW5nIiwidG9rZW5zQXNTdHJpbmciLCJub2RlIiwidG9rZW5zIiwic3RyaW5nIiwidHJpbVN0cmluZyIsIm5vZGVzIiwicmVkdWNlIiwibm9kZVN0cmluZyIsInRva2VuIiwiY29udGVudCIsImdldENvbnRlbnQiLCJFTVBUWV9TVFJJTkciLCJub2RlVGVybWluYWxOb2RlIiwiaXNUZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGUiLCJ0ZXJtaW5hbE5vZGVBc1Rva2VucyIsIm5vblRlcm1pbmFsTm9kZSIsIm5vblRlcm1pbmFsTm9kZUFzVG9rZW5zIiwicmVwbGFjZSIsInNpZ25pZmljYW50VG9rZW4iLCJnZXRTaWduaWZpY2FudFRva2VuIiwibGFzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImdldExhc3RTaWduaWZpY2FudFRva2VuSW5kZXgiLCJmaXJzdFNpZ25pZmljYW50VG9rZW5JbmRleCIsImdldEZpcnN0U2lnbmlmaWNhbnRUb2tlbkluZGV4Iiwic3RhcnQiLCJlbmQiLCJzbGljZSJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBSWdCQSxZQUFZO2VBQVpBOztJQXNDQUMsWUFBWTtlQUFaQTs7SUExQkFDLGFBQWE7ZUFBYkE7O0lBY0FDLGNBQWM7ZUFBZEE7Ozt5QkE1QmE7QUFFdEIsU0FBU0gsYUFBYUksSUFBSSxFQUFFQyxNQUFNO0lBQ3ZDLElBQUlDO0lBRUpELFNBQVNKLGFBQWFHLE1BQU1DLFNBQVUsR0FBRztJQUV6Q0MsU0FBU0gsZUFBZUU7SUFFeEJDLFNBQVNDLFdBQVdELFNBQVUsR0FBRztJQUVqQyxPQUFPQTtBQUNUO0FBRU8sU0FBU0osY0FBY00sS0FBSyxFQUFFSCxNQUFNO0lBQ3pDLElBQU1DLFNBQVNFLE1BQU1DLE1BQU0sQ0FBQyxTQUFDSCxRQUFRRjtRQUNuQyxJQUFNTSxhQUFhVixhQUFhSSxNQUFNQztRQUV0Q0MsU0FBUyxBQUFDQSxXQUFXLE9BQ1ZJLGFBQ0MsQUFBQyxHQUFZQSxPQUFWSixRQUFPLEtBQWMsT0FBWEk7UUFFekIsT0FBT0o7SUFDVCxHQUFHO0lBRUgsT0FBT0E7QUFDVDtBQUVPLFNBQVNILGVBQWVFLE1BQU07SUFDbkMsSUFBTUMsU0FBU0QsT0FBT0ksTUFBTSxDQUFDLFNBQUNILFFBQVFLO1FBQ3BDLElBQU1DLFVBQVVELE1BQU1FLFVBQVU7UUFFaENQLFNBQVMsQUFBQyxHQUFXTSxPQUFUTixRQUFpQixPQUFSTTtRQUVyQixPQUFPTjtJQUNULEdBQUdRLHVCQUFZO0lBRWYsT0FBT1I7QUFDVDtBQUVPLFNBQVNMLGFBQWFHLElBQUksRUFBRUMsTUFBTTtJQUN2QyxJQUFNVSxtQkFBbUJYLEtBQUtZLGNBQWM7SUFFNUMsSUFBSUQsa0JBQWtCO1FBQ3BCLElBQU1FLGVBQWViLE1BQU8sR0FBRztRQUUvQkMsU0FBU2EscUJBQXFCRCxjQUFjWjtJQUM5QyxPQUFPO1FBQ0wsSUFBTWMsa0JBQWtCZixNQUFNLEdBQUc7UUFFakNDLFNBQVNlLHdCQUF3QkQsaUJBQWlCZDtJQUNwRDtJQUVBLE9BQU9BO0FBQ1Q7QUFFQSxTQUFTRSxXQUFXRCxNQUFNO0lBQ3hCQSxTQUFTQSxPQUFPZSxPQUFPLENBQUMsUUFBUVAsdUJBQVksR0FBSSxHQUFHO0lBRW5ELE9BQU9SO0FBQ1Q7QUFFQSxTQUFTWSxxQkFBcUJELFlBQVksRUFBRVosTUFBTTtJQUNoRCxJQUFNaUIsbUJBQW1CTCxhQUFhTSxtQkFBbUIsSUFDbkRaLFFBQVFXLGtCQUFrQixHQUFHO0lBRW5DakIsU0FBUztRQUNQTTtLQUNEO0lBRUQsT0FBT047QUFDVDtBQUVBLFNBQVNlLHdCQUF3QkQsZUFBZSxFQUFFZCxNQUFNO0lBQ3RELElBQU1tQiw0QkFBNEJMLGdCQUFnQk0sNEJBQTRCLENBQUNwQixTQUN6RXFCLDZCQUE2QlAsZ0JBQWdCUSw2QkFBNkIsQ0FBQ3RCLFNBQzNFdUIsUUFBUUYsNEJBQ1JHLE1BQU1MLDRCQUE0QjtJQUV4Q25CLFNBQVNBLE9BQU95QixLQUFLLENBQUNGLE9BQU9DLE1BQU8sR0FBRztJQUV2QyxPQUFPeEI7QUFDVCJ9
|