occam-verify-cli 1.0.126 → 1.0.128
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 +4 -4
- package/lib/context/local.js +4 -4
- package/lib/dom/assertion/contained.js +22 -12
- package/lib/dom/assertion/defined.js +22 -12
- package/lib/dom/assertion/property.js +3 -3
- package/lib/dom/assertion/subproof.js +3 -26
- package/lib/dom/assertion/type.js +4 -8
- package/lib/dom/axiom.js +13 -5
- package/lib/dom/combinator.js +2 -10
- package/lib/dom/conjecture.js +4 -4
- package/lib/dom/constructor/bracketed.js +3 -3
- package/lib/dom/constructor.js +17 -21
- package/lib/dom/declaration.js +14 -8
- package/lib/dom/derivation.js +10 -2
- package/lib/dom/frame.js +29 -25
- package/lib/dom/judgement.js +9 -11
- package/lib/dom/lemma.js +4 -4
- package/lib/dom/metaLemma.js +4 -4
- package/lib/dom/metaType.js +14 -4
- package/lib/dom/metatheorem.js +4 -4
- package/lib/dom/metavariable.js +39 -7
- package/lib/dom/procedureCall.js +9 -5
- package/lib/dom/property.js +30 -18
- package/lib/dom/propertyRelation.js +212 -0
- package/lib/dom/reference.js +8 -8
- package/lib/dom/statement.js +40 -16
- package/lib/dom/term.js +52 -14
- package/lib/dom/theorem.js +4 -4
- package/lib/dom/type.js +33 -29
- package/lib/dom/variable.js +19 -8
- package/lib/index.js +3 -3
- package/lib/verifier/topLevel.js +6 -6
- package/package.json +1 -1
- package/src/context/file.js +4 -3
- package/src/context/local.js +4 -3
- package/src/dom/assertion/contained.js +23 -11
- package/src/dom/assertion/defined.js +23 -11
- package/src/dom/assertion/property.js +3 -7
- package/src/dom/assertion/subproof.js +3 -44
- package/src/dom/assertion/type.js +6 -17
- package/src/dom/axiom.js +3 -3
- package/src/dom/combinator.js +1 -8
- package/src/dom/conjecture.js +1 -1
- package/src/dom/constructor/bracketed.js +3 -4
- package/src/dom/constructor.js +17 -17
- package/src/dom/declaration.js +20 -14
- package/src/dom/derivation.js +12 -3
- package/src/dom/frame.js +33 -36
- package/src/dom/judgement.js +7 -22
- package/src/dom/lemma.js +1 -1
- package/src/dom/metaLemma.js +1 -1
- package/src/dom/metaType.js +16 -6
- package/src/dom/metatheorem.js +1 -1
- package/src/dom/metavariable.js +35 -15
- package/src/dom/procedureCall.js +15 -13
- package/src/dom/property.js +49 -32
- package/src/dom/{relation/property.js → propertyRelation.js} +9 -10
- package/src/dom/reference.js +6 -6
- package/src/dom/statement.js +50 -15
- package/src/dom/term.js +69 -24
- package/src/dom/theorem.js +1 -1
- package/src/dom/type.js +48 -51
- package/src/dom/variable.js +33 -35
- package/src/index.js +1 -1
- package/src/verifier/topLevel.js +10 -5
- package/lib/dom/relation/property.js +0 -212
package/src/dom/variable.js
CHANGED
|
@@ -54,6 +54,10 @@ export default domAssigned(class Variable {
|
|
|
54
54
|
this.type = type;
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
setProvisional(provisional) {
|
|
58
|
+
this.provisional = provisional;
|
|
59
|
+
}
|
|
60
|
+
|
|
57
61
|
isEqualTo(variable) {
|
|
58
62
|
const variableString = variable.getString(),
|
|
59
63
|
equalTo = (variableString === this.string);
|
|
@@ -224,16 +228,9 @@ export default domAssigned(class Variable {
|
|
|
224
228
|
const termVariableNode = termVariableNodeQuery(termNode);
|
|
225
229
|
|
|
226
230
|
if (termVariableNode !== null) {
|
|
227
|
-
const variableNode = termVariableNode
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
string = context.nodeAsString(node),
|
|
231
|
-
name = variableName, ///
|
|
232
|
-
type = null,
|
|
233
|
-
provisional = null,
|
|
234
|
-
propertyRelations = [];
|
|
235
|
-
|
|
236
|
-
variable = new Variable(string, node, name, type, provisional, propertyRelations);
|
|
231
|
+
const variableNode = termVariableNode; ///
|
|
232
|
+
|
|
233
|
+
variable = variableFromVariableNode(variableNode, context);
|
|
237
234
|
}
|
|
238
235
|
|
|
239
236
|
return variable;
|
|
@@ -243,15 +240,7 @@ export default domAssigned(class Variable {
|
|
|
243
240
|
let variable = null;
|
|
244
241
|
|
|
245
242
|
if (variableNode !== null) {
|
|
246
|
-
|
|
247
|
-
variableName = variableNameFromVariableNode(variableNode),
|
|
248
|
-
string = context.nodeAsString(node),
|
|
249
|
-
name = variableName, ///
|
|
250
|
-
type = null,
|
|
251
|
-
provisional = null,
|
|
252
|
-
propertyRelations = [];
|
|
253
|
-
|
|
254
|
-
variable = new Variable(string, node, name, type, provisional, propertyRelations);
|
|
243
|
+
variable = variableFromVariableNode(variableNode, context);
|
|
255
244
|
}
|
|
256
245
|
|
|
257
246
|
return variable;
|
|
@@ -261,14 +250,9 @@ export default domAssigned(class Variable {
|
|
|
261
250
|
let variable = null;
|
|
262
251
|
|
|
263
252
|
if (variableNode !== null) {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
name = variableName, ///
|
|
268
|
-
provisional = null,
|
|
269
|
-
propertyRelations = [];
|
|
270
|
-
|
|
271
|
-
variable = new Variable(string, node, name, type, provisional, propertyRelations);
|
|
253
|
+
variable = variableFromVariableNode(variableNode, context);
|
|
254
|
+
|
|
255
|
+
variable.setType(type);
|
|
272
256
|
}
|
|
273
257
|
|
|
274
258
|
return variable;
|
|
@@ -278,15 +262,15 @@ export default domAssigned(class Variable {
|
|
|
278
262
|
const { Type } = dom,
|
|
279
263
|
variableDeclarationVariableNode = variableDeclarationVariableNodeQuery(variableDeclarationNode),
|
|
280
264
|
variableNode = variableDeclarationVariableNode, ///
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
node = variableNode, ///
|
|
285
|
-
name = variableName, ///
|
|
265
|
+
localContext = LocalContext.fromFileContext(fileContext),
|
|
266
|
+
context = localContext, ///
|
|
267
|
+
variable = variableFromVariableNode(variableNode, context),
|
|
286
268
|
type = Type.fromVariableDeclarationNode(variableDeclarationNode, fileContext),
|
|
287
|
-
provisional = provisionalFromVariableDeclarationNode(variableDeclarationNode, fileContext)
|
|
288
|
-
|
|
289
|
-
|
|
269
|
+
provisional = provisionalFromVariableDeclarationNode(variableDeclarationNode, fileContext);
|
|
270
|
+
|
|
271
|
+
variable.setType(type);
|
|
272
|
+
|
|
273
|
+
variable.setProvisional(provisional);
|
|
290
274
|
|
|
291
275
|
return variable;
|
|
292
276
|
}
|
|
@@ -314,6 +298,20 @@ export default domAssigned(class Variable {
|
|
|
314
298
|
}
|
|
315
299
|
});
|
|
316
300
|
|
|
301
|
+
function variableFromVariableNode(variableNode, context) {
|
|
302
|
+
const { Variable } = dom,
|
|
303
|
+
node = variableNode, ///
|
|
304
|
+
variableName = variableNameFromVariableNode(variableNode),
|
|
305
|
+
string = context.nodeAsString(node),
|
|
306
|
+
name = variableName, ///
|
|
307
|
+
type = null,
|
|
308
|
+
provisional = null,
|
|
309
|
+
propertyRelations = [],
|
|
310
|
+
variable = new Variable(string, node, name, type, provisional, propertyRelations);
|
|
311
|
+
|
|
312
|
+
return variable;
|
|
313
|
+
}
|
|
314
|
+
|
|
317
315
|
function stringFromNameAndPropertyRelations(name, propertyRelations) {
|
|
318
316
|
const propertyRelationsString = propertyRelations.reduce((propertyRelationsString, propertyRelation) => {
|
|
319
317
|
const propertyRelationString = propertyRelation.getString();
|
package/src/index.js
CHANGED
|
@@ -37,7 +37,7 @@ import SubDerivation from "./dom/subDerivation";
|
|
|
37
37
|
import TypeAssertion from "./dom/assertion/type";
|
|
38
38
|
import TypeDeclaration from "./dom/declaration/type";
|
|
39
39
|
import DefinedAssertion from "./dom/assertion/defined";
|
|
40
|
-
import PropertyRelation from "./dom/
|
|
40
|
+
import PropertyRelation from "./dom/propertyRelation";
|
|
41
41
|
import SubproofAssertion from "./dom/assertion/subproof";
|
|
42
42
|
import PropertyAssertion from "./dom/assertion/property";
|
|
43
43
|
import ContainedAssertion from "./dom/assertion/contained";
|
package/src/verifier/topLevel.js
CHANGED
|
@@ -67,7 +67,8 @@ class TopLevelVerifier extends Verifier {
|
|
|
67
67
|
nodeQuery: lemmaNodeQuery,
|
|
68
68
|
verify: (lemmaNode, fileContext) => {
|
|
69
69
|
const { Lemma } = dom,
|
|
70
|
-
|
|
70
|
+
node = lemmaNode, ///
|
|
71
|
+
lemma = Lemma.fromNode(node, fileContext),
|
|
71
72
|
lemmaVerified = lemma.verify();
|
|
72
73
|
|
|
73
74
|
return lemmaVerified;
|
|
@@ -77,7 +78,8 @@ class TopLevelVerifier extends Verifier {
|
|
|
77
78
|
nodeQuery: theoremNodeQuery,
|
|
78
79
|
verify: (theoremNode, fileContext) => {
|
|
79
80
|
const { Theorem } = dom,
|
|
80
|
-
|
|
81
|
+
node = theoremNode, ///
|
|
82
|
+
theorem = Theorem.fromNode(node, fileContext),
|
|
81
83
|
theoremVerified = theorem.verify();
|
|
82
84
|
|
|
83
85
|
return theoremVerified;
|
|
@@ -87,7 +89,8 @@ class TopLevelVerifier extends Verifier {
|
|
|
87
89
|
nodeQuery: metaLemmaNodeQuery,
|
|
88
90
|
verify: (metaLemmaNode, fileContext) => {
|
|
89
91
|
const { MetaLemma } = dom,
|
|
90
|
-
|
|
92
|
+
node = metaLemmaNode, ///
|
|
93
|
+
metaLemma = MetaLemma.fromNode(node, fileContext),
|
|
91
94
|
metaLemmaVerified = metaLemma.verify();
|
|
92
95
|
|
|
93
96
|
return metaLemmaVerified;
|
|
@@ -97,7 +100,8 @@ class TopLevelVerifier extends Verifier {
|
|
|
97
100
|
nodeQuery: conjectureNodeQuery,
|
|
98
101
|
verify: (conjectureNode, fileContext) => {
|
|
99
102
|
const { Conjecture } = dom,
|
|
100
|
-
|
|
103
|
+
node = conjectureNode, ///
|
|
104
|
+
conjecture = Conjecture.fromNode(node, fileContext),
|
|
101
105
|
conjectureVerified = conjecture.verify();
|
|
102
106
|
|
|
103
107
|
return conjectureVerified;
|
|
@@ -107,7 +111,8 @@ class TopLevelVerifier extends Verifier {
|
|
|
107
111
|
nodeQuery: metatheoremNodeQuery,
|
|
108
112
|
verify: (metatheoremNode, fileContext) => {
|
|
109
113
|
const { Metatheorem } = dom,
|
|
110
|
-
|
|
114
|
+
node = metatheoremNode, ///
|
|
115
|
+
metatheorem = Metatheorem.fromNode(node, fileContext),
|
|
111
116
|
metatheoremVerified = metatheorem.verify();
|
|
112
117
|
|
|
113
118
|
return metatheoremVerified;
|
|
@@ -1,212 +0,0 @@
|
|
|
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 _default;
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
var _dom = /*#__PURE__*/ _interop_require_wildcard(require("../../dom"));
|
|
12
|
-
var _query = require("../../utilities/query");
|
|
13
|
-
function _class_call_check(instance, Constructor) {
|
|
14
|
-
if (!(instance instanceof Constructor)) {
|
|
15
|
-
throw new TypeError("Cannot call a class as a function");
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
function _defineProperties(target, props) {
|
|
19
|
-
for(var i = 0; i < props.length; i++){
|
|
20
|
-
var descriptor = props[i];
|
|
21
|
-
descriptor.enumerable = descriptor.enumerable || false;
|
|
22
|
-
descriptor.configurable = true;
|
|
23
|
-
if ("value" in descriptor) descriptor.writable = true;
|
|
24
|
-
Object.defineProperty(target, descriptor.key, descriptor);
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function _create_class(Constructor, protoProps, staticProps) {
|
|
28
|
-
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
29
|
-
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
30
|
-
return Constructor;
|
|
31
|
-
}
|
|
32
|
-
function _define_property(obj, key, value) {
|
|
33
|
-
if (key in obj) {
|
|
34
|
-
Object.defineProperty(obj, key, {
|
|
35
|
-
value: value,
|
|
36
|
-
enumerable: true,
|
|
37
|
-
configurable: true,
|
|
38
|
-
writable: true
|
|
39
|
-
});
|
|
40
|
-
} else {
|
|
41
|
-
obj[key] = value;
|
|
42
|
-
}
|
|
43
|
-
return obj;
|
|
44
|
-
}
|
|
45
|
-
function _getRequireWildcardCache(nodeInterop) {
|
|
46
|
-
if (typeof WeakMap !== "function") return null;
|
|
47
|
-
var cacheBabelInterop = new WeakMap();
|
|
48
|
-
var cacheNodeInterop = new WeakMap();
|
|
49
|
-
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
50
|
-
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
51
|
-
})(nodeInterop);
|
|
52
|
-
}
|
|
53
|
-
function _interop_require_wildcard(obj, nodeInterop) {
|
|
54
|
-
if (!nodeInterop && obj && obj.__esModule) {
|
|
55
|
-
return obj;
|
|
56
|
-
}
|
|
57
|
-
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
58
|
-
return {
|
|
59
|
-
default: obj
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
var cache = _getRequireWildcardCache(nodeInterop);
|
|
63
|
-
if (cache && cache.has(obj)) {
|
|
64
|
-
return cache.get(obj);
|
|
65
|
-
}
|
|
66
|
-
var newObj = {
|
|
67
|
-
__proto__: null
|
|
68
|
-
};
|
|
69
|
-
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
70
|
-
for(var key in obj){
|
|
71
|
-
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
72
|
-
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
73
|
-
if (desc && (desc.get || desc.set)) {
|
|
74
|
-
Object.defineProperty(newObj, key, desc);
|
|
75
|
-
} else {
|
|
76
|
-
newObj[key] = obj[key];
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
newObj.default = obj;
|
|
81
|
-
if (cache) {
|
|
82
|
-
cache.set(obj, newObj);
|
|
83
|
-
}
|
|
84
|
-
return newObj;
|
|
85
|
-
}
|
|
86
|
-
var _PropertyRelation;
|
|
87
|
-
var termNodeQuery = (0, _query.nodeQuery)("/propertyRelation/term"), propertyNodeQuery = (0, _query.nodeQuery)("/propertyRelation/property");
|
|
88
|
-
var _default = (0, _dom.domAssigned)((_PropertyRelation = /*#__PURE__*/ function() {
|
|
89
|
-
function PropertyRelation(string, node, tokens, property, term) {
|
|
90
|
-
_class_call_check(this, PropertyRelation);
|
|
91
|
-
this.string = string;
|
|
92
|
-
this.node = node;
|
|
93
|
-
this.tokens = tokens;
|
|
94
|
-
this.property = property;
|
|
95
|
-
this.term = term;
|
|
96
|
-
}
|
|
97
|
-
_create_class(PropertyRelation, [
|
|
98
|
-
{
|
|
99
|
-
key: "getString",
|
|
100
|
-
value: function getString() {
|
|
101
|
-
return this.string;
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
{
|
|
105
|
-
key: "getNode",
|
|
106
|
-
value: function getNode() {
|
|
107
|
-
return this.node;
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
key: "getTokens",
|
|
112
|
-
value: function getTokens() {
|
|
113
|
-
return this.tokens;
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
key: "getProperty",
|
|
118
|
-
value: function getProperty() {
|
|
119
|
-
return this.property;
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
key: "getTerm",
|
|
124
|
-
value: function getTerm() {
|
|
125
|
-
return this.term;
|
|
126
|
-
}
|
|
127
|
-
},
|
|
128
|
-
{
|
|
129
|
-
key: "getType",
|
|
130
|
-
value: function getType() {
|
|
131
|
-
return this.property.getType();
|
|
132
|
-
}
|
|
133
|
-
},
|
|
134
|
-
{
|
|
135
|
-
key: "isEqualTo",
|
|
136
|
-
value: function isEqualTo(propertyRelation) {
|
|
137
|
-
var propertyRelationString = propertyRelation.getString(), equalTo = propertyRelationString === this.string;
|
|
138
|
-
return equalTo;
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
{
|
|
142
|
-
key: "verify",
|
|
143
|
-
value: function verify(context) {
|
|
144
|
-
var verified = false;
|
|
145
|
-
var propertyRelationString = this.string; ///
|
|
146
|
-
context.trace("Verifying the '".concat(propertyRelationString, "' property relation..."));
|
|
147
|
-
var termVerified = this.verifyTerm(context);
|
|
148
|
-
if (termVerified) {
|
|
149
|
-
var propertyVerified = this.verifyProperty(context);
|
|
150
|
-
verified = propertyVerified;
|
|
151
|
-
}
|
|
152
|
-
if (verified) {
|
|
153
|
-
context.debug("...verified the '".concat(propertyRelationString, "' property relation."));
|
|
154
|
-
}
|
|
155
|
-
return verified;
|
|
156
|
-
}
|
|
157
|
-
},
|
|
158
|
-
{
|
|
159
|
-
key: "verifyTerm",
|
|
160
|
-
value: function verifyTerm(context) {
|
|
161
|
-
var termVerified;
|
|
162
|
-
var termString = this.term.getString(), propertyRelationString = this.string; ///
|
|
163
|
-
context.trace("Verifying the '".concat(propertyRelationString, "' property relation's '").concat(termString, "' term..."));
|
|
164
|
-
termVerified = this.term.verify(context, function() {
|
|
165
|
-
var verifiedAhead = true;
|
|
166
|
-
return verifiedAhead;
|
|
167
|
-
});
|
|
168
|
-
if (termVerified) {
|
|
169
|
-
context.debug("...verified the '".concat(propertyRelationString, "' property relation's '").concat(termString, "' term."));
|
|
170
|
-
}
|
|
171
|
-
return termVerified;
|
|
172
|
-
}
|
|
173
|
-
},
|
|
174
|
-
{
|
|
175
|
-
key: "verifyProperty",
|
|
176
|
-
value: function verifyProperty(context) {
|
|
177
|
-
var propertyVerified;
|
|
178
|
-
var propertyString = this.property.getString(), propertyRelationString = this.string; ///
|
|
179
|
-
context.trace("Verifying the '".concat(propertyRelationString, "' property relation's '").concat(propertyString, "' property..."));
|
|
180
|
-
var variableType = this.term.getType(), propertyNames = this.property.getNames(), variableTypeProperties = variableType.getProperties(), variableTypeProperty = variableTypeProperties.find(function(variableTypeProperty) {
|
|
181
|
-
var propertyNamesMatch = variableTypeProperty.matchPropertyNames(propertyNames);
|
|
182
|
-
if (propertyNamesMatch) {
|
|
183
|
-
return true;
|
|
184
|
-
}
|
|
185
|
-
}) || null;
|
|
186
|
-
if (variableTypeProperty === null) {
|
|
187
|
-
var variableString = this.term.getString(), variableTypeName = variableType.getName();
|
|
188
|
-
context.debug("The '".concat(propertyNames, "' property is not a property of the '").concat(variableString, "' variable's '").concat(variableTypeName, "' type."));
|
|
189
|
-
} else {
|
|
190
|
-
var type = variableType;
|
|
191
|
-
this.property.setType(type);
|
|
192
|
-
propertyVerified = true;
|
|
193
|
-
}
|
|
194
|
-
if (propertyVerified) {
|
|
195
|
-
context.debug("...verified the '".concat(propertyRelationString, "' property relation's '").concat(propertyString, "' property."));
|
|
196
|
-
}
|
|
197
|
-
return propertyVerified;
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
], [
|
|
201
|
-
{
|
|
202
|
-
key: "fromPropertyRelationNode",
|
|
203
|
-
value: function fromPropertyRelationNode(propertyRelationNode, context) {
|
|
204
|
-
var Term = _dom.default.Term, Property = _dom.default.Property, node = propertyRelationNode, string = context.nodeAsString(node), tokens = context.nodeAsTokens(node), propertyNode = propertyNodeQuery(propertyRelationNode), termNode = termNodeQuery(propertyRelationNode), property = Property.fromPropertyNode(propertyNode, context), term = Term.fromTermNode(termNode, context), propertyRelation = new PropertyRelation(string, node, tokens, property, term);
|
|
205
|
-
return propertyRelation;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
]);
|
|
209
|
-
return PropertyRelation;
|
|
210
|
-
}(), _define_property(_PropertyRelation, "name", "PropertyRelation"), _PropertyRelation));
|
|
211
|
-
|
|
212
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9kb20vcmVsYXRpb24vcHJvcGVydHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uLy4uL2RvbVwiO1xuXG5pbXBvcnQgeyBub2RlUXVlcnkgfSBmcm9tIFwiLi4vLi4vdXRpbGl0aWVzL3F1ZXJ5XCI7XG5pbXBvcnQgeyBkb21Bc3NpZ25lZCB9IGZyb20gXCIuLi8uLi9kb21cIjtcblxuY29uc3QgdGVybU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9wcm9wZXJ0eVJlbGF0aW9uL3Rlcm1cIiksXG4gICAgICBwcm9wZXJ0eU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9wcm9wZXJ0eVJlbGF0aW9uL3Byb3BlcnR5XCIpO1xuXG5leHBvcnQgZGVmYXVsdCBkb21Bc3NpZ25lZChjbGFzcyBQcm9wZXJ0eVJlbGF0aW9uIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCBub2RlLCB0b2tlbnMsIHByb3BlcnR5LCB0ZXJtKSB7XG4gICAgdGhpcy5zdHJpbmcgPSBzdHJpbmc7XG4gICAgdGhpcy5ub2RlID0gbm9kZTtcbiAgICB0aGlzLnRva2VucyA9IHRva2VucztcbiAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHk7XG4gICAgdGhpcy50ZXJtID0gdGVybTtcbiAgfVxuXG4gIGdldFN0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5zdHJpbmc7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgZ2V0UHJvcGVydHkoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvcGVydHk7XG4gIH1cblxuICBnZXRUZXJtKCkge1xuICAgIHJldHVybiB0aGlzLnRlcm07XG4gIH1cblxuICBnZXRUeXBlKCkgeyByZXR1cm4gdGhpcy5wcm9wZXJ0eS5nZXRUeXBlKCk7IH1cblxuICBpc0VxdWFsVG8ocHJvcGVydHlSZWxhdGlvbikge1xuICAgIGNvbnN0IHByb3BlcnR5UmVsYXRpb25TdHJpbmcgPSBwcm9wZXJ0eVJlbGF0aW9uLmdldFN0cmluZygpLFxuICAgICAgICAgIGVxdWFsVG8gPSAocHJvcGVydHlSZWxhdGlvblN0cmluZyA9PT0gdGhpcy5zdHJpbmcpO1xuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICB2ZXJpZnkoY29udGV4dCkge1xuICAgIGxldCB2ZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgY29uc3QgcHJvcGVydHlSZWxhdGlvblN0cmluZyA9IHRoaXMuc3RyaW5nOyAvLy9cblxuICAgIGNvbnRleHQudHJhY2UoYFZlcmlmeWluZyB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uLi4uYCk7XG5cbiAgICBjb25zdCB0ZXJtVmVyaWZpZWQgPSB0aGlzLnZlcmlmeVRlcm0oY29udGV4dCk7XG5cbiAgICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eVZlcmlmaWVkID0gdGhpcy52ZXJpZnlQcm9wZXJ0eShjb250ZXh0KTtcblxuICAgICAgdmVyaWZpZWQgPSBwcm9wZXJ0eVZlcmlmaWVkO1xuICAgIH1cblxuICAgIGlmICh2ZXJpZmllZCkge1xuICAgICAgY29udGV4dC5kZWJ1ZyhgLi4udmVyaWZpZWQgdGhlICcke3Byb3BlcnR5UmVsYXRpb25TdHJpbmd9JyBwcm9wZXJ0eSByZWxhdGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZWQ7XG4gIH1cblxuICB2ZXJpZnlUZXJtKGNvbnRleHQpIHtcbiAgICBsZXQgdGVybVZlcmlmaWVkO1xuXG4gICAgY29uc3QgdGVybVN0cmluZyA9IHRoaXMudGVybS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nfScgcHJvcGVydHkgcmVsYXRpb24ncyAnJHt0ZXJtU3RyaW5nfScgdGVybS4uLmApO1xuXG4gICAgdGVybVZlcmlmaWVkID0gdGhpcy50ZXJtLnZlcmlmeShjb250ZXh0LCAoKSA9PiB7XG4gICAgICBjb25zdCB2ZXJpZmllZEFoZWFkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZlcmlmaWVkQWhlYWQ7XG4gICAgfSk7XG5cbiAgICBpZiAodGVybVZlcmlmaWVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uJ3MgJyR7dGVybVN0cmluZ30nIHRlcm0uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRlcm1WZXJpZmllZDtcbiAgfVxuXG4gIHZlcmlmeVByb3BlcnR5KGNvbnRleHQpIHtcbiAgICBsZXQgcHJvcGVydHlWZXJpZmllZDtcblxuICAgIGNvbnN0IHByb3BlcnR5U3RyaW5nID0gdGhpcy5wcm9wZXJ0eS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nID0gdGhpcy5zdHJpbmc7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgVmVyaWZ5aW5nIHRoZSAnJHtwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nfScgcHJvcGVydHkgcmVsYXRpb24ncyAnJHtwcm9wZXJ0eVN0cmluZ30nIHByb3BlcnR5Li4uYCk7XG5cbiAgICBjb25zdCB2YXJpYWJsZVR5cGUgPSB0aGlzLnRlcm0uZ2V0VHlwZSgpLFxuICAgICAgICAgIHByb3BlcnR5TmFtZXMgPSB0aGlzLnByb3BlcnR5LmdldE5hbWVzKCksXG4gICAgICAgICAgdmFyaWFibGVUeXBlUHJvcGVydGllcyA9IHZhcmlhYmxlVHlwZS5nZXRQcm9wZXJ0aWVzKCksXG4gICAgICAgICAgdmFyaWFibGVUeXBlUHJvcGVydHkgPSB2YXJpYWJsZVR5cGVQcm9wZXJ0aWVzLmZpbmQoKHZhcmlhYmxlVHlwZVByb3BlcnR5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eU5hbWVzTWF0Y2ggPSB2YXJpYWJsZVR5cGVQcm9wZXJ0eS5tYXRjaFByb3BlcnR5TmFtZXMocHJvcGVydHlOYW1lcyk7XG5cbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eU5hbWVzTWF0Y2gpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIGlmICh2YXJpYWJsZVR5cGVQcm9wZXJ0eSA9PT0gbnVsbCkge1xuICAgICAgY29uc3QgdmFyaWFibGVTdHJpbmcgPSB0aGlzLnRlcm0uZ2V0U3RyaW5nKCksXG4gICAgICAgICAgICB2YXJpYWJsZVR5cGVOYW1lID0gdmFyaWFibGVUeXBlLmdldE5hbWUoKTtcblxuICAgICAgY29udGV4dC5kZWJ1ZyhgVGhlICcke3Byb3BlcnR5TmFtZXN9JyBwcm9wZXJ0eSBpcyBub3QgYSBwcm9wZXJ0eSBvZiB0aGUgJyR7dmFyaWFibGVTdHJpbmd9JyB2YXJpYWJsZSdzICcke3ZhcmlhYmxlVHlwZU5hbWV9JyB0eXBlLmApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB0eXBlID0gdmFyaWFibGVUeXBlO1xuXG4gICAgICB0aGlzLnByb3BlcnR5LnNldFR5cGUodHlwZSk7XG5cbiAgICAgIHByb3BlcnR5VmVyaWZpZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIGlmIChwcm9wZXJ0eVZlcmlmaWVkKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGAuLi52ZXJpZmllZCB0aGUgJyR7cHJvcGVydHlSZWxhdGlvblN0cmluZ30nIHByb3BlcnR5IHJlbGF0aW9uJ3MgJyR7cHJvcGVydHlTdHJpbmd9JyBwcm9wZXJ0eS5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvcGVydHlWZXJpZmllZDtcbiAgfVxuXG4gIHN0YXRpYyBuYW1lID0gXCJQcm9wZXJ0eVJlbGF0aW9uXCI7XG5cbiAgc3RhdGljIGZyb21Qcm9wZXJ0eVJlbGF0aW9uTm9kZShwcm9wZXJ0eVJlbGF0aW9uTm9kZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgVGVybSwgUHJvcGVydHkgfSA9IGRvbSxcbiAgICAgICAgICBub2RlID0gcHJvcGVydHlSZWxhdGlvbk5vZGUsICAvLy9cbiAgICAgICAgICBzdHJpbmcgPSBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKSxcbiAgICAgICAgICB0b2tlbnMgPSBjb250ZXh0Lm5vZGVBc1Rva2Vucyhub2RlKSxcbiAgICAgICAgICBwcm9wZXJ0eU5vZGUgPSBwcm9wZXJ0eU5vZGVRdWVyeShwcm9wZXJ0eVJlbGF0aW9uTm9kZSksXG4gICAgICAgICAgdGVybU5vZGUgPSB0ZXJtTm9kZVF1ZXJ5KHByb3BlcnR5UmVsYXRpb25Ob2RlKSxcbiAgICAgICAgICBwcm9wZXJ0eSA9IFByb3BlcnR5LmZyb21Qcm9wZXJ0eU5vZGUocHJvcGVydHlOb2RlLCBjb250ZXh0KSxcbiAgICAgICAgICB0ZXJtID0gVGVybS5mcm9tVGVybU5vZGUodGVybU5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgIHByb3BlcnR5UmVsYXRpb24gPSBuZXcgUHJvcGVydHlSZWxhdGlvbihzdHJpbmcsIG5vZGUsIHRva2VucywgcHJvcGVydHksIHRlcm0pO1xuXG4gICAgcmV0dXJuIHByb3BlcnR5UmVsYXRpb247XG4gIH1cbn0pO1xuIl0sIm5hbWVzIjpbInRlcm1Ob2RlUXVlcnkiLCJub2RlUXVlcnkiLCJwcm9wZXJ0eU5vZGVRdWVyeSIsImRvbUFzc2lnbmVkIiwiUHJvcGVydHlSZWxhdGlvbiIsInN0cmluZyIsIm5vZGUiLCJ0b2tlbnMiLCJwcm9wZXJ0eSIsInRlcm0iLCJnZXRTdHJpbmciLCJnZXROb2RlIiwiZ2V0VG9rZW5zIiwiZ2V0UHJvcGVydHkiLCJnZXRUZXJtIiwiZ2V0VHlwZSIsImlzRXF1YWxUbyIsInByb3BlcnR5UmVsYXRpb24iLCJwcm9wZXJ0eVJlbGF0aW9uU3RyaW5nIiwiZXF1YWxUbyIsInZlcmlmeSIsImNvbnRleHQiLCJ2ZXJpZmllZCIsInRyYWNlIiwidGVybVZlcmlmaWVkIiwidmVyaWZ5VGVybSIsInByb3BlcnR5VmVyaWZpZWQiLCJ2ZXJpZnlQcm9wZXJ0eSIsImRlYnVnIiwidGVybVN0cmluZyIsInZlcmlmaWVkQWhlYWQiLCJwcm9wZXJ0eVN0cmluZyIsInZhcmlhYmxlVHlwZSIsInByb3BlcnR5TmFtZXMiLCJnZXROYW1lcyIsInZhcmlhYmxlVHlwZVByb3BlcnRpZXMiLCJnZXRQcm9wZXJ0aWVzIiwidmFyaWFibGVUeXBlUHJvcGVydHkiLCJmaW5kIiwicHJvcGVydHlOYW1lc01hdGNoIiwibWF0Y2hQcm9wZXJ0eU5hbWVzIiwidmFyaWFibGVTdHJpbmciLCJ2YXJpYWJsZVR5cGVOYW1lIiwiZ2V0TmFtZSIsInR5cGUiLCJzZXRUeXBlIiwiZnJvbVByb3BlcnR5UmVsYXRpb25Ob2RlIiwicHJvcGVydHlSZWxhdGlvbk5vZGUiLCJUZXJtIiwiZG9tIiwiUHJvcGVydHkiLCJub2RlQXNTdHJpbmciLCJub2RlQXNUb2tlbnMiLCJwcm9wZXJ0eU5vZGUiLCJ0ZXJtTm9kZSIsImZyb21Qcm9wZXJ0eU5vZGUiLCJmcm9tVGVybU5vZGUiLCJuYW1lIl0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFVQTs7O2VBQUE7OzsyREFSZ0I7cUJBRVU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUcxQixJQUFNQSxnQkFBZ0JDLElBQUFBLGdCQUFTLEVBQUMsMkJBQzFCQyxvQkFBb0JELElBQUFBLGdCQUFTLEVBQUM7SUFFcEMsV0FBZUUsSUFBQUEsZ0JBQVcscUNBQUM7YUFBTUMsaUJBQ25CQyxNQUFNLEVBQUVDLElBQUksRUFBRUMsTUFBTSxFQUFFQyxRQUFRLEVBQUVDLElBQUk7Z0NBRGpCTDtRQUU3QixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLElBQUksR0FB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
|