occam-furtle 2.0.279 → 2.0.282
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/README.md +0 -11
- package/lib/constants.js +29 -1
- package/lib/context/block.js +15 -1
- package/lib/context/file.js +127 -50
- package/lib/element/assignment/array.js +186 -0
- package/lib/element/assignment/object.js +244 -0
- package/lib/element/assignment/variable.js +144 -0
- package/lib/element/assignments/variable.js +158 -0
- package/lib/element/block/return.js +198 -0
- package/lib/element/comparison.js +179 -0
- package/lib/element/declaration/procedure.js +139 -0
- package/lib/{dom → element}/error.js +12 -4
- package/lib/element/every.js +179 -0
- package/lib/element/expression/bitwise.js +186 -0
- package/lib/element/expression/bracketed.js +149 -0
- package/lib/element/expression/negated.js +166 -0
- package/lib/element/expression.js +578 -0
- package/lib/element/expressions.js +210 -0
- package/lib/{dom → element}/label.js +4 -4
- package/lib/element/parameter/named.js +198 -0
- package/lib/element/parameter.js +165 -0
- package/lib/element/parameters/named.js +220 -0
- package/lib/element/parameters.js +198 -0
- package/lib/element/procedure/anonymous.js +181 -0
- package/lib/element/procedure.js +212 -0
- package/lib/element/procedureCall.js +166 -0
- package/lib/element/query/node.js +186 -0
- package/lib/element/query/nodes.js +179 -0
- package/lib/element/reduce.js +181 -0
- package/lib/element/reference.js +138 -0
- package/lib/element/some.js +179 -0
- package/lib/element/statement/return.js +138 -0
- package/lib/element/step.js +154 -0
- package/lib/element/ternary.js +171 -0
- package/lib/element/variable.js +279 -0
- package/lib/elements.js +27 -0
- package/lib/index.js +10 -2
- package/lib/log.js +202 -0
- package/lib/preamble.js +32 -32
- package/lib/process/verify.js +289 -0
- package/lib/utilities/context.js +46 -5
- package/package.json +3 -1
- package/src/constants.js +16 -0
- package/src/context/block.js +10 -0
- package/src/context/file.js +96 -54
- package/src/{dom → element}/assignment/array.js +6 -6
- package/src/{dom → element}/assignment/object.js +8 -8
- package/src/{dom → element}/assignment/variable.js +4 -4
- package/src/{dom → element}/assignments/variable.js +5 -5
- package/src/{dom → element}/block/return.js +5 -5
- package/src/{dom → element}/comparison.js +5 -5
- package/src/{dom → element}/declaration/procedure.js +22 -4
- package/src/{dom → element}/error.js +13 -4
- package/src/{dom → element}/every.js +6 -6
- package/src/{dom → element}/expression/bitwise.js +5 -5
- package/src/{dom → element}/expression/bracketed.js +4 -4
- package/src/{dom → element}/expression/negated.js +5 -5
- package/src/{dom → element}/expression.js +4 -4
- package/src/{dom → element}/expressions.js +6 -6
- package/src/{dom → element}/label.js +4 -4
- package/src/{dom → element}/parameter/named.js +4 -4
- package/src/{dom → element}/parameter.js +4 -4
- package/src/{dom → element}/parameters/named.js +5 -5
- package/src/{dom → element}/parameters.js +5 -5
- package/src/{dom → element}/procedure/anonymous.js +4 -4
- package/src/{dom → element}/procedure.js +5 -5
- package/src/{dom → element}/procedureCall.js +4 -4
- package/src/{dom → element}/query/node.js +5 -5
- package/src/{dom → element}/query/nodes.js +5 -5
- package/src/{dom → element}/reduce.js +5 -5
- package/src/{dom → element}/reference.js +4 -4
- package/src/{dom → element}/some.js +6 -6
- package/src/{dom → element}/statement/return.js +4 -4
- package/src/{dom → element}/step.js +4 -4
- package/src/{dom → element}/ternary.js +4 -4
- package/src/{dom → element}/variable.js +5 -5
- package/src/elements.js +13 -0
- package/src/index.js +5 -1
- package/src/log.js +139 -0
- package/src/preamble.js +31 -31
- package/src/process/verify.js +157 -0
- package/src/utilities/context.js +45 -2
- package/test/Free and bound variables.ftl +112 -0
- package/test/context/file.js +127 -0
- package/{src/example → test}/context/release.js +60 -12
- package/test/helpers/constants.js +17 -0
- package/{src/example/utilities → test/helpers}/expressions.js +8 -4
- package/{src/example/utilities → test/helpers}/furtle.js +8 -4
- package/{src/example/utilities → test/helpers}/grammar.js +8 -4
- package/{src/example/utilities → test/helpers}/nominal.js +10 -5
- package/{src/example/utilities → test/helpers}/procedure.js +6 -2
- package/test/main.js +55 -0
- package/example/Free and bound variables.ftl +0 -75
- package/lib/dom/assignment/array.js +0 -186
- package/lib/dom/assignment/object.js +0 -244
- package/lib/dom/assignment/variable.js +0 -144
- package/lib/dom/assignments/variable.js +0 -158
- package/lib/dom/block/return.js +0 -198
- package/lib/dom/comparison.js +0 -179
- package/lib/dom/declaration/procedure.js +0 -125
- package/lib/dom/every.js +0 -179
- package/lib/dom/expression/bitwise.js +0 -186
- package/lib/dom/expression/bracketed.js +0 -149
- package/lib/dom/expression/negated.js +0 -166
- package/lib/dom/expression.js +0 -578
- package/lib/dom/expressions.js +0 -210
- package/lib/dom/parameter/named.js +0 -198
- package/lib/dom/parameter.js +0 -165
- package/lib/dom/parameters/named.js +0 -220
- package/lib/dom/parameters.js +0 -198
- package/lib/dom/procedure/anonymous.js +0 -181
- package/lib/dom/procedure.js +0 -212
- package/lib/dom/procedureCall.js +0 -166
- package/lib/dom/query/node.js +0 -186
- package/lib/dom/query/nodes.js +0 -179
- package/lib/dom/reduce.js +0 -181
- package/lib/dom/reference.js +0 -138
- package/lib/dom/some.js +0 -179
- package/lib/dom/statement/return.js +0 -138
- package/lib/dom/step.js +0 -154
- package/lib/dom/ternary.js +0 -171
- package/lib/dom/variable.js +0 -279
- package/lib/dom.js +0 -27
- package/lib/example/context/file.js +0 -130
- package/lib/example/context/release.js +0 -160
- package/lib/example/utilities/expressions.js +0 -29
- package/lib/example/utilities/furtle.js +0 -19
- package/lib/example/utilities/grammar.js +0 -26
- package/lib/example/utilities/nominal.js +0 -25
- package/lib/example/utilities/procedure.js +0 -18
- package/src/dom.js +0 -13
- package/src/example/context/file.js +0 -69
- /package/{example → test}/customGrammars.json +0 -0
package/README.md
CHANGED
|
@@ -88,17 +88,6 @@ You can also clone the repository with [Git](https://git-scm.com/)...
|
|
|
88
88
|
|
|
89
89
|
npm install
|
|
90
90
|
|
|
91
|
-
## Example
|
|
92
|
-
|
|
93
|
-
The example runs directly on Node:
|
|
94
|
-
|
|
95
|
-
```
|
|
96
|
-
node example.js
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
The `Free and bound variables.ftl` file in the `example/` directory can be changed and the example can be rebuilt, see below.
|
|
100
|
-
Obviously one thing to try is changing the value of the `free` variable.
|
|
101
|
-
|
|
102
91
|
## Building
|
|
103
92
|
|
|
104
93
|
Automation is done with [npm scripts](https://docs.npmjs.com/misc/scripts), have a look at the `package.json` file. The pertinent commands are:
|
package/lib/constants.js
CHANGED
|
@@ -15,6 +15,9 @@ _export(exports, {
|
|
|
15
15
|
get DISJUNCTION () {
|
|
16
16
|
return DISJUNCTION;
|
|
17
17
|
},
|
|
18
|
+
get DOUBLE_SPACE () {
|
|
19
|
+
return DOUBLE_SPACE;
|
|
20
|
+
},
|
|
18
21
|
get EMPTY_STRING () {
|
|
19
22
|
return EMPTY_STRING;
|
|
20
23
|
},
|
|
@@ -27,12 +30,24 @@ _export(exports, {
|
|
|
27
30
|
get FUNCTION () {
|
|
28
31
|
return FUNCTION;
|
|
29
32
|
},
|
|
33
|
+
get LEVELS () {
|
|
34
|
+
return LEVELS;
|
|
35
|
+
},
|
|
36
|
+
get LEVEL_MAXIMUM_LENGTH () {
|
|
37
|
+
return LEVEL_MAXIMUM_LENGTH;
|
|
38
|
+
},
|
|
39
|
+
get LINE_INDEX_MAXIMUM_LENGTH () {
|
|
40
|
+
return LINE_INDEX_MAXIMUM_LENGTH;
|
|
41
|
+
},
|
|
30
42
|
get NOT_EQUAL_TO () {
|
|
31
43
|
return NOT_EQUAL_TO;
|
|
32
44
|
},
|
|
33
45
|
get NULL () {
|
|
34
46
|
return NULL;
|
|
35
47
|
},
|
|
48
|
+
get SINGLE_SPACE () {
|
|
49
|
+
return SINGLE_SPACE;
|
|
50
|
+
},
|
|
36
51
|
get TRUE () {
|
|
37
52
|
return TRUE;
|
|
38
53
|
},
|
|
@@ -40,6 +55,15 @@ _export(exports, {
|
|
|
40
55
|
return UNDERSCORE;
|
|
41
56
|
}
|
|
42
57
|
});
|
|
58
|
+
var _necessary = require("necessary");
|
|
59
|
+
var TRACE_LEVEL = _necessary.levels.TRACE_LEVEL, DEBUG_LEVEL = _necessary.levels.DEBUG_LEVEL, INFO_LEVEL = _necessary.levels.INFO_LEVEL, WARNING_LEVEL = _necessary.levels.WARNING_LEVEL, ERROR_LEVEL = _necessary.levels.ERROR_LEVEL;
|
|
60
|
+
var LEVELS = [
|
|
61
|
+
TRACE_LEVEL,
|
|
62
|
+
DEBUG_LEVEL,
|
|
63
|
+
INFO_LEVEL,
|
|
64
|
+
WARNING_LEVEL,
|
|
65
|
+
ERROR_LEVEL
|
|
66
|
+
];
|
|
43
67
|
var NULL = "null";
|
|
44
68
|
var TRUE = "true";
|
|
45
69
|
var FALSE = "false";
|
|
@@ -49,6 +73,10 @@ var UNDERSCORE = "_";
|
|
|
49
73
|
var CONJUNCTION = "&&";
|
|
50
74
|
var DISJUNCTION = "||";
|
|
51
75
|
var EMPTY_STRING = "";
|
|
76
|
+
var SINGLE_SPACE = " ";
|
|
77
|
+
var DOUBLE_SPACE = " ";
|
|
52
78
|
var NOT_EQUAL_TO = "!=";
|
|
79
|
+
var LEVEL_MAXIMUM_LENGTH = 7;
|
|
80
|
+
var LINE_INDEX_MAXIMUM_LENGTH = 4;
|
|
53
81
|
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb25zdGFudHMuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGxldmVscyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuY29uc3QgeyBUUkFDRV9MRVZFTCwgREVCVUdfTEVWRUwsIElORk9fTEVWRUwsIFdBUk5JTkdfTEVWRUwsIEVSUk9SX0xFVkVMIH0gPSBsZXZlbHM7XG5cbmV4cG9ydCBjb25zdCBMRVZFTFMgPSBbXG4gIFRSQUNFX0xFVkVMLFxuICBERUJVR19MRVZFTCxcbiAgSU5GT19MRVZFTCxcbiAgV0FSTklOR19MRVZFTCxcbiAgRVJST1JfTEVWRUxcbl07XG5cbmV4cG9ydCBjb25zdCBOVUxMID0gXCJudWxsXCI7XG5leHBvcnQgY29uc3QgVFJVRSA9IFwidHJ1ZVwiO1xuZXhwb3J0IGNvbnN0IEZBTFNFID0gXCJmYWxzZVwiO1xuZXhwb3J0IGNvbnN0IEZVTkNUSU9OID0gXCJmdW5jdGlvblwiO1xuZXhwb3J0IGNvbnN0IEVRVUFMX1RPID0gXCI9PVwiO1xuZXhwb3J0IGNvbnN0IFVOREVSU0NPUkUgPSBcIl9cIjtcbmV4cG9ydCBjb25zdCBDT05KVU5DVElPTiA9IFwiJiZcIjtcbmV4cG9ydCBjb25zdCBESVNKVU5DVElPTiA9IFwifHxcIjtcbmV4cG9ydCBjb25zdCBFTVBUWV9TVFJJTkcgPSBcIlwiO1xuZXhwb3J0IGNvbnN0IFNJTkdMRV9TUEFDRSA9IFwiIFwiO1xuZXhwb3J0IGNvbnN0IERPVUJMRV9TUEFDRSA9IFwiICBcIjtcbmV4cG9ydCBjb25zdCBOT1RfRVFVQUxfVE8gPSBcIiE9XCI7XG5leHBvcnQgY29uc3QgTEVWRUxfTUFYSU1VTV9MRU5HVEggPSA3O1xuZXhwb3J0IGNvbnN0IExJTkVfSU5ERVhfTUFYSU1VTV9MRU5HVEggPSA0O1xuIl0sIm5hbWVzIjpbIkNPTkpVTkNUSU9OIiwiRElTSlVOQ1RJT04iLCJET1VCTEVfU1BBQ0UiLCJFTVBUWV9TVFJJTkciLCJFUVVBTF9UTyIsIkZBTFNFIiwiRlVOQ1RJT04iLCJMRVZFTFMiLCJMRVZFTF9NQVhJTVVNX0xFTkdUSCIsIkxJTkVfSU5ERVhfTUFYSU1VTV9MRU5HVEgiLCJOT1RfRVFVQUxfVE8iLCJOVUxMIiwiU0lOR0xFX1NQQUNFIiwiVFJVRSIsIlVOREVSU0NPUkUiLCJUUkFDRV9MRVZFTCIsImxldmVscyIsIkRFQlVHX0xFVkVMIiwiSU5GT19MRVZFTCIsIldBUk5JTkdfTEVWRUwiLCJFUlJPUl9MRVZFTCJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBb0JhQTtlQUFBQTs7UUFDQUM7ZUFBQUE7O1FBR0FDO2VBQUFBOztRQUZBQztlQUFBQTs7UUFKQUM7ZUFBQUE7O1FBRkFDO2VBQUFBOztRQUNBQztlQUFBQTs7UUFYQUM7ZUFBQUE7O1FBb0JBQztlQUFBQTs7UUFDQUM7ZUFBQUE7O1FBRkFDO2VBQUFBOztRQVhBQztlQUFBQTs7UUFTQUM7ZUFBQUE7O1FBUkFDO2VBQUFBOztRQUlBQztlQUFBQTs7O3lCQWpCVTtBQUV2QixJQUFRQyxjQUFxRUMsaUJBQU0sQ0FBM0VELGFBQWFFLGNBQXdERCxpQkFBTSxDQUE5REMsYUFBYUMsYUFBMkNGLGlCQUFNLENBQWpERSxZQUFZQyxnQkFBK0JILGlCQUFNLENBQXJDRyxlQUFlQyxjQUFnQkosaUJBQU0sQ0FBdEJJO0FBRXRELElBQU1iLFNBQVM7SUFDcEJRO0lBQ0FFO0lBQ0FDO0lBQ0FDO0lBQ0FDO0NBQ0Q7QUFFTSxJQUFNVCxPQUFPO0FBQ2IsSUFBTUUsT0FBTztBQUNiLElBQU1SLFFBQVE7QUFDZCxJQUFNQyxXQUFXO0FBQ2pCLElBQU1GLFdBQVc7QUFDakIsSUFBTVUsYUFBYTtBQUNuQixJQUFNZCxjQUFjO0FBQ3BCLElBQU1DLGNBQWM7QUFDcEIsSUFBTUUsZUFBZTtBQUNyQixJQUFNUyxlQUFlO0FBQ3JCLElBQU1WLGVBQWU7QUFDckIsSUFBTVEsZUFBZTtBQUNyQixJQUFNRix1QkFBdUI7QUFDN0IsSUFBTUMsNEJBQTRCIn0=
|
package/lib/context/block.js
CHANGED
|
@@ -96,6 +96,20 @@ var BlockContext = /*#__PURE__*/ function() {
|
|
|
96
96
|
context.trace("Added the '".concat(variableString, "' variable to the context."));
|
|
97
97
|
this.variables.push(variable);
|
|
98
98
|
}
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
key: "getFileContext",
|
|
102
|
+
value: function getFileContext() {
|
|
103
|
+
return this.context.getFileContext();
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
key: "getDepth",
|
|
108
|
+
value: function getDepth() {
|
|
109
|
+
var depth = this.context.getDepth();
|
|
110
|
+
depth++;
|
|
111
|
+
return depth;
|
|
112
|
+
}
|
|
99
113
|
}
|
|
100
114
|
], [
|
|
101
115
|
{
|
|
@@ -109,4 +123,4 @@ var BlockContext = /*#__PURE__*/ function() {
|
|
|
109
123
|
return BlockContext;
|
|
110
124
|
}();
|
|
111
125
|
|
|
112
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
126
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2Jsb2NrLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcblxuaW1wb3J0IEV4Y2VwdGlvbiBmcm9tIFwiLi4vZXhjZXB0aW9uXCI7XG5cbmltcG9ydCB7IGNoYWluQ29udGV4dCB9IGZyb20gXCIuLi91dGlsaXRpZXMvY29udGV4dFwiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCbG9ja0NvbnRleHQge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0LCB2YXJpYWJsZXMpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMudmFyaWFibGVzID0gdmFyaWFibGVzO1xuXG4gICAgcmV0dXJuIGNoYWluQ29udGV4dCh0aGlzKTtcbiAgfVxuXG4gIGdldENvbnRleHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dDtcbiAgfVxuXG4gIGdldFZhcmlhYmxlcyhuZXN0ZWQgPSB0cnVlKSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gW107XG5cbiAgICBwdXNoKHZhcmlhYmxlcywgdGhpcy52YXJpYWJsZXMpO1xuXG4gICAgaWYgKG5lc3RlZCkge1xuICAgICAgY29uc3QgY29udGV4dFZhcmlhYmxlcyA9IHRoaXMuY29udGV4dC5nZXRWYXJpYWJsZXMoKTtcblxuICAgICAgcHVzaCh2YXJpYWJsZXMsIGNvbnRleHRWYXJpYWJsZXMpO1xuICAgIH1cblxuICAgIHJldHVybiB2YXJpYWJsZXM7XG4gIH1cblxuICBmaW5kVmFyaWFibGVCeVZhcmlhYmxlTmFtZSh2YXJpYWJsZU5hbWUsIG5lc3RlZCA9IHRydWUpIHtcbiAgICBjb25zdCB2YXJpYWJsZXMgPSB0aGlzLmdldFZhcmlhYmxlcyhuZXN0ZWQpLFxuICAgICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGVzLmZpbmQoKHZhcmlhYmxlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YXJpYWJsZU5hbWVNYXRjaGVzID0gdmFyaWFibGUubWF0Y2hWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lKTtcblxuICAgICAgICAgICAgaWYgKHZhcmlhYmxlTmFtZU1hdGNoZXMpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiB2YXJpYWJsZTtcbiAgfVxuXG4gIGlzVmFyaWFibGVQcmVzZW50QnlWYXJpYWJsZU5hbWUodmFyaWFibGVOYW1lLCBuZXN0ZWQgPSB0cnVlKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB0aGlzLmZpbmRWYXJpYWJsZUJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSwgbmVzdGVkKSxcbiAgICAgICAgICB2YXJpYWJsZVByZXNlbnQgPSAodmFyaWFibGUgIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHZhcmlhYmxlUHJlc2VudDtcbiAgfVxuXG4gIGFkZFZhcmlhYmxlKHZhcmlhYmxlKSB7XG4gICAgY29uc3QgbmVzdGVkID0gZmFsc2UsXG4gICAgICAgICAgdmFyaWFibGVOYW1lID0gdmFyaWFibGUuZ2V0TmFtZSgpLFxuICAgICAgICAgIHZhcmlhYmxlU3RyaW5nID0gdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgICAgdmFyaWFibGVQcmVzZW50ID0gdGhpcy5pc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lKHZhcmlhYmxlTmFtZSwgbmVzdGVkKTtcblxuICAgIGlmICh2YXJpYWJsZVByZXNlbnQpIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgVGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgaXMgYWxyZWFkeSBwcmVzZW50LidgLFxuICAgICAgICAgICAgZXhjZXB0aW9uID0gRXhjZXB0aW9uLmZyb21NZXNzYWdlKG1lc3NhZ2UpO1xuXG4gICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkZWQgdGhlICcke3ZhcmlhYmxlU3RyaW5nfScgdmFyaWFibGUgdG8gdGhlIGNvbnRleHQuYCk7XG5cbiAgICB0aGlzLnZhcmlhYmxlcy5wdXNoKHZhcmlhYmxlKTtcbiAgfVxuXG4gIGdldEZpbGVDb250ZXh0KCkgeyByZXR1cm4gdGhpcy5jb250ZXh0LmdldEZpbGVDb250ZXh0KCk7IH1cblxuICBnZXREZXB0aCgpIHtcbiAgICBsZXQgZGVwdGggPSB0aGlzLmNvbnRleHQuZ2V0RGVwdGgoKTtcblxuICAgIGRlcHRoKys7XG5cbiAgICByZXR1cm4gZGVwdGg7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZhcmlhYmxlcyh2YXJpYWJsZXMsIGNvbnRleHQpIHtcbiAgICBjb25zdCBibG9ja0NvbnRleHQgPSBuZXcgQmxvY2tDb250ZXh0KGNvbnRleHQsIHZhcmlhYmxlcyk7XG5cbiAgICByZXR1cm4gYmxvY2tDb250ZXh0O1xuICB9XG59XG4iXSwibmFtZXMiOlsiQmxvY2tDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiY29udGV4dCIsInZhcmlhYmxlcyIsImNoYWluQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRWYXJpYWJsZXMiLCJuZXN0ZWQiLCJjb250ZXh0VmFyaWFibGVzIiwiZmluZFZhcmlhYmxlQnlWYXJpYWJsZU5hbWUiLCJ2YXJpYWJsZU5hbWUiLCJ2YXJpYWJsZSIsImZpbmQiLCJ2YXJpYWJsZU5hbWVNYXRjaGVzIiwibWF0Y2hWYXJpYWJsZU5hbWUiLCJpc1ZhcmlhYmxlUHJlc2VudEJ5VmFyaWFibGVOYW1lIiwidmFyaWFibGVQcmVzZW50IiwiYWRkVmFyaWFibGUiLCJnZXROYW1lIiwidmFyaWFibGVTdHJpbmciLCJnZXRTdHJpbmciLCJtZXNzYWdlIiwiZXhjZXB0aW9uIiwiRXhjZXB0aW9uIiwiZnJvbU1lc3NhZ2UiLCJ0cmFjZSIsImdldEZpbGVDb250ZXh0IiwiZ2V0RGVwdGgiLCJkZXB0aCIsImZyb21WYXJpYWJsZXMiLCJibG9ja0NvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBVXFCQTs7O3lCQVJVO2dFQUVUO3VCQUVPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTdCLElBQU0sQUFBRUMsT0FBU0MseUJBQWMsQ0FBdkJEO0FBRU8sSUFBQSxBQUFNRCw2QkFBTjthQUFNQSxhQUNQRyxPQUFPLEVBQUVDLFNBQVM7Z0NBRFhKO1FBRWpCLElBQUksQ0FBQ0csT0FBTyxHQUFHQTtRQUNmLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUVqQixPQUFPQyxJQUFBQSxxQkFBWSxFQUFDLElBQUk7O2tCQUxQTDs7WUFRbkJNLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0gsT0FBTztZQUNyQjs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQTtvQkFBYUMsU0FBQUEsaUVBQVM7Z0JBQ3BCLElBQU1KLFlBQVksRUFBRTtnQkFFcEJILEtBQUtHLFdBQVcsSUFBSSxDQUFDQSxTQUFTO2dCQUU5QixJQUFJSSxRQUFRO29CQUNWLElBQU1DLG1CQUFtQixJQUFJLENBQUNOLE9BQU8sQ0FBQ0ksWUFBWTtvQkFFbEROLEtBQUtHLFdBQVdLO2dCQUNsQjtnQkFFQSxPQUFPTDtZQUNUOzs7WUFFQU0sS0FBQUE7bUJBQUFBLFNBQUFBLDJCQUEyQkMsWUFBWTtvQkFBRUgsU0FBQUEsaUVBQVM7Z0JBQ2hELElBQU1KLFlBQVksSUFBSSxDQUFDRyxZQUFZLENBQUNDLFNBQzlCSSxXQUFXUixVQUFVUyxJQUFJLENBQUMsU0FBQ0Q7b0JBQ3pCLElBQU1FLHNCQUFzQkYsU0FBU0csaUJBQWlCLENBQUNKO29CQUV2RCxJQUFJRyxxQkFBcUI7d0JBQ3ZCLE9BQU87b0JBQ1Q7Z0JBQ0YsTUFBTTtnQkFFWixPQUFPRjtZQUNUOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBLGdDQUFnQ0wsWUFBWTtvQkFBRUgsU0FBQUEsaUVBQVM7Z0JBQ3JELElBQU1JLFdBQVcsSUFBSSxDQUFDRiwwQkFBMEIsQ0FBQ0MsY0FBY0gsU0FDekRTLGtCQUFtQkwsYUFBYTtnQkFFdEMsT0FBT0s7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxZQUFZTixRQUFRO2dCQUNsQixJQUFNSixTQUFTLE9BQ1RHLGVBQWVDLFNBQVNPLE9BQU8sSUFDL0JDLGlCQUFpQlIsU0FBU1MsU0FBUyxJQUNuQ0osa0JBQWtCLElBQUksQ0FBQ0QsK0JBQStCLENBQUNMLGNBQWNIO2dCQUUzRSxJQUFJUyxpQkFBaUI7b0JBQ25CLElBQU1LLFVBQVUsQUFBQyxRQUFzQixPQUFmRixnQkFBZSxvQ0FDakNHLFlBQVlDLGtCQUFTLENBQUNDLFdBQVcsQ0FBQ0g7b0JBRXhDLE1BQU1DO2dCQUNSO2dCQUVBLElBQU1wQixVQUFVLElBQUksRUFBRSxHQUFHO2dCQUV6QkEsUUFBUXVCLEtBQUssQ0FBQyxBQUFDLGNBQTRCLE9BQWZOLGdCQUFlO2dCQUUzQyxJQUFJLENBQUNoQixTQUFTLENBQUNILElBQUksQ0FBQ1c7WUFDdEI7OztZQUVBZSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQW1CLE9BQU8sSUFBSSxDQUFDeEIsT0FBTyxDQUFDd0IsY0FBYztZQUFJOzs7WUFFekRDLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFJQyxRQUFRLElBQUksQ0FBQzFCLE9BQU8sQ0FBQ3lCLFFBQVE7Z0JBRWpDQztnQkFFQSxPQUFPQTtZQUNUOzs7O1lBRU9DLEtBQUFBO21CQUFQLFNBQU9BLGNBQWMxQixTQUFTLEVBQUVELE9BQU87Z0JBQ3JDLElBQU00QixlQUFlLElBN0VKL0IsYUE2RXFCRyxTQUFTQztnQkFFL0MsT0FBTzJCO1lBQ1Q7OztXQWhGbUIvQiJ9
|
package/lib/context/file.js
CHANGED
|
@@ -10,10 +10,18 @@ Object.defineProperty(exports, "default", {
|
|
|
10
10
|
});
|
|
11
11
|
var _necessary = require("necessary");
|
|
12
12
|
var _occamgrammars = require("occam-grammars");
|
|
13
|
-
var
|
|
14
|
-
var
|
|
15
|
-
var _context = require("../utilities/context");
|
|
13
|
+
var _constants = require("../constants");
|
|
14
|
+
var _verify = require("../process/verify");
|
|
16
15
|
var _string = require("../utilities/string");
|
|
16
|
+
var _context = require("../utilities/context");
|
|
17
|
+
function _array_like_to_array(arr, len) {
|
|
18
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
19
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
20
|
+
return arr2;
|
|
21
|
+
}
|
|
22
|
+
function _array_with_holes(arr) {
|
|
23
|
+
if (Array.isArray(arr)) return arr;
|
|
24
|
+
}
|
|
17
25
|
function _class_call_check(instance, Constructor) {
|
|
18
26
|
if (!(instance instanceof Constructor)) {
|
|
19
27
|
throw new TypeError("Cannot call a class as a function");
|
|
@@ -33,19 +41,52 @@ function _create_class(Constructor, protoProps, staticProps) {
|
|
|
33
41
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
34
42
|
return Constructor;
|
|
35
43
|
}
|
|
36
|
-
function
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
44
|
+
function _iterable_to_array_limit(arr, i) {
|
|
45
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
46
|
+
if (_i == null) return;
|
|
47
|
+
var _arr = [];
|
|
48
|
+
var _n = true;
|
|
49
|
+
var _d = false;
|
|
50
|
+
var _s, _e;
|
|
51
|
+
try {
|
|
52
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
53
|
+
_arr.push(_s.value);
|
|
54
|
+
if (i && _arr.length === i) break;
|
|
55
|
+
}
|
|
56
|
+
} catch (err) {
|
|
57
|
+
_d = true;
|
|
58
|
+
_e = err;
|
|
59
|
+
} finally{
|
|
60
|
+
try {
|
|
61
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
62
|
+
} finally{
|
|
63
|
+
if (_d) throw _e;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return _arr;
|
|
67
|
+
}
|
|
68
|
+
function _non_iterable_rest() {
|
|
69
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
70
|
+
}
|
|
71
|
+
function _sliced_to_array(arr, i) {
|
|
72
|
+
return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
|
|
40
73
|
}
|
|
41
|
-
|
|
74
|
+
function _unsupported_iterable_to_array(o, minLen) {
|
|
75
|
+
if (!o) return;
|
|
76
|
+
if (typeof o === "string") return _array_like_to_array(o, minLen);
|
|
77
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
78
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
79
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
80
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
|
|
81
|
+
}
|
|
82
|
+
var push = _necessary.arrayUtilities.push, furtleLexerFromNothing = _occamgrammars.lexersUtilities.furtleLexerFromNothing, furtleParserFromNothing = _occamgrammars.parsersUtilities.furtleParserFromNothing, _LEVELS = _sliced_to_array(_constants.LEVELS, 5), TRACE_LEVEL = _LEVELS[0], DEBUG_LEVEL = _LEVELS[1], INFO_LEVEL = _LEVELS[2], WARNING_LEVEL = _LEVELS[3], ERROR_LEVEL = _LEVELS[4];
|
|
42
83
|
var furtleLexer = furtleLexerFromNothing(), furtleParser = furtleParserFromNothing();
|
|
43
|
-
var errorNodesQuery = (0, _query.nodesQuery)("/document/error"), procedureDeclarationNodesQuery = (0, _query.nodesQuery)("/document/procedureDeclaration");
|
|
44
84
|
var FileContext = /*#__PURE__*/ function() {
|
|
45
|
-
function FileContext(context, filePath, node, tokens, procedures) {
|
|
85
|
+
function FileContext(context, filePath, lineIndex, node, tokens, procedures) {
|
|
46
86
|
_class_call_check(this, FileContext);
|
|
47
87
|
this.context = context;
|
|
48
88
|
this.filePath = filePath;
|
|
89
|
+
this.lineIndex = lineIndex;
|
|
49
90
|
this.node = node;
|
|
50
91
|
this.tokens = tokens;
|
|
51
92
|
this.procedures = procedures;
|
|
@@ -64,6 +105,12 @@ var FileContext = /*#__PURE__*/ function() {
|
|
|
64
105
|
return this.filePath;
|
|
65
106
|
}
|
|
66
107
|
},
|
|
108
|
+
{
|
|
109
|
+
key: "getLineIndex",
|
|
110
|
+
value: function getLineIndex() {
|
|
111
|
+
return this.lineIndex;
|
|
112
|
+
}
|
|
113
|
+
},
|
|
67
114
|
{
|
|
68
115
|
key: "getNode",
|
|
69
116
|
value: function getNode() {
|
|
@@ -207,6 +254,14 @@ var FileContext = /*#__PURE__*/ function() {
|
|
|
207
254
|
return metavariables;
|
|
208
255
|
}
|
|
209
256
|
},
|
|
257
|
+
{
|
|
258
|
+
key: "addProcedure",
|
|
259
|
+
value: function addProcedure(procedure) {
|
|
260
|
+
var procedureString = procedure.getString();
|
|
261
|
+
this.procedures.push(procedure);
|
|
262
|
+
this.debug("Added the '".concat(procedureString, "' procedure to the context."));
|
|
263
|
+
}
|
|
264
|
+
},
|
|
210
265
|
{
|
|
211
266
|
key: "getVariables",
|
|
212
267
|
value: function getVariables() {
|
|
@@ -214,19 +269,6 @@ var FileContext = /*#__PURE__*/ function() {
|
|
|
214
269
|
return variables;
|
|
215
270
|
}
|
|
216
271
|
},
|
|
217
|
-
{
|
|
218
|
-
key: "addProcedures",
|
|
219
|
-
value: function addProcedures() {
|
|
220
|
-
var _this = this;
|
|
221
|
-
var context = this; ///
|
|
222
|
-
var ProcedureDeclaration = _dom.default.ProcedureDeclaration, procedureDeclarationNodes = procedureDeclarationNodesQuery(this.node);
|
|
223
|
-
procedureDeclarationNodes.forEach(function(procedureDeclarationNode) {
|
|
224
|
-
var procedureDeclaration = ProcedureDeclaration.fromProcedureDeclarationNode(procedureDeclarationNode, context), procedure = procedureDeclaration.getProcedure(), procedureString = procedure.getString();
|
|
225
|
-
_this.debug("Adding the '".concat(procedureString, "' procedure."));
|
|
226
|
-
_this.procedures.push(procedure);
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
},
|
|
230
272
|
{
|
|
231
273
|
key: "nodeAsString",
|
|
232
274
|
value: function nodeAsString(node) {
|
|
@@ -244,61 +286,83 @@ var FileContext = /*#__PURE__*/ function() {
|
|
|
244
286
|
{
|
|
245
287
|
key: "trace",
|
|
246
288
|
value: function trace(message) {
|
|
247
|
-
|
|
289
|
+
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
290
|
+
var level = TRACE_LEVEL;
|
|
291
|
+
this.writeToLog(level, message, node);
|
|
248
292
|
}
|
|
249
293
|
},
|
|
250
294
|
{
|
|
251
295
|
key: "debug",
|
|
252
296
|
value: function debug(message) {
|
|
253
|
-
|
|
297
|
+
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
298
|
+
var level = DEBUG_LEVEL;
|
|
299
|
+
this.writeToLog(level, message, node);
|
|
254
300
|
}
|
|
255
301
|
},
|
|
256
302
|
{
|
|
257
303
|
key: "info",
|
|
258
304
|
value: function info(message) {
|
|
259
|
-
|
|
305
|
+
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
306
|
+
var level = INFO_LEVEL;
|
|
307
|
+
this.writeToLog(level, message, node);
|
|
260
308
|
}
|
|
261
309
|
},
|
|
262
310
|
{
|
|
263
311
|
key: "warning",
|
|
264
312
|
value: function warning(message) {
|
|
265
|
-
|
|
313
|
+
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
314
|
+
var level = WARNING_LEVEL;
|
|
315
|
+
this.writeToLog(level, message, node);
|
|
266
316
|
}
|
|
267
317
|
},
|
|
268
318
|
{
|
|
269
319
|
key: "error",
|
|
270
320
|
value: function error(message) {
|
|
271
|
-
|
|
321
|
+
var node = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : null;
|
|
322
|
+
var level = ERROR_LEVEL;
|
|
323
|
+
this.writeToLog(level, message, node);
|
|
324
|
+
}
|
|
325
|
+
},
|
|
326
|
+
{
|
|
327
|
+
key: "writeToLog",
|
|
328
|
+
value: function writeToLog(level, message, node) {
|
|
329
|
+
var lineIndex = (0, _context.lineIndexFromNodeAndTokens)(node, this.tokens, this.lineIndex), filePath = lineIndex === null ? this.filePath : null;
|
|
330
|
+
this.context.writeToLog(level, message, filePath, lineIndex);
|
|
331
|
+
this.lineIndex = lineIndex;
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
{
|
|
335
|
+
key: "getFileContext",
|
|
336
|
+
value: function getFileContext() {
|
|
337
|
+
var fileContext = this; ///
|
|
338
|
+
return fileContext;
|
|
339
|
+
}
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
key: "getDepth",
|
|
343
|
+
value: function getDepth() {
|
|
344
|
+
var depth = this.context.getDepth();
|
|
345
|
+
depth++;
|
|
346
|
+
return depth;
|
|
272
347
|
}
|
|
273
348
|
},
|
|
274
349
|
{
|
|
275
350
|
key: "verify",
|
|
276
351
|
value: function verify() {
|
|
277
|
-
var
|
|
278
|
-
this.debug("Verifying the '".concat(this.filePath, "' file..."));
|
|
352
|
+
var verifies = false;
|
|
279
353
|
this.prepare();
|
|
280
354
|
if (this.node === null) {
|
|
281
355
|
this.warning("Unable to verify the '".concat(this.filePath, "' file because it cannot be parsed."));
|
|
282
356
|
} else {
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
this.
|
|
289
|
-
this.clear();
|
|
357
|
+
this.debug("Verifying the '".concat(this.filePath, "' file..."));
|
|
358
|
+
var context = this, fileNode = this.node; ///
|
|
359
|
+
verifies = (0, _verify.verifyFile)(fileNode, context);
|
|
360
|
+
verifies ? this.complete() : this.clear();
|
|
361
|
+
if (verifies) {
|
|
362
|
+
this.info("...verified the '".concat(this.filePath, "' file."));
|
|
290
363
|
}
|
|
291
364
|
}
|
|
292
|
-
|
|
293
|
-
this.info("...verified the '".concat(this.filePath, "' file."));
|
|
294
|
-
}
|
|
295
|
-
return verified;
|
|
296
|
-
}
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
key: "clear",
|
|
300
|
-
value: function clear() {
|
|
301
|
-
this.procedures = [];
|
|
365
|
+
return verifies;
|
|
302
366
|
}
|
|
303
367
|
},
|
|
304
368
|
{
|
|
@@ -312,6 +376,19 @@ var FileContext = /*#__PURE__*/ function() {
|
|
|
312
376
|
this.node = parser.parse(this.tokens);
|
|
313
377
|
}
|
|
314
378
|
},
|
|
379
|
+
{
|
|
380
|
+
key: "clear",
|
|
381
|
+
value: function clear() {
|
|
382
|
+
this.lineIndex = null;
|
|
383
|
+
this.procedures = [];
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
key: "complete",
|
|
388
|
+
value: function complete() {
|
|
389
|
+
this.lineIndex = null;
|
|
390
|
+
}
|
|
391
|
+
},
|
|
315
392
|
{
|
|
316
393
|
key: "initialise",
|
|
317
394
|
value: function initialise(json) {
|
|
@@ -336,14 +413,14 @@ var FileContext = /*#__PURE__*/ function() {
|
|
|
336
413
|
{
|
|
337
414
|
key: "fromFile",
|
|
338
415
|
value: function fromFile(file, context) {
|
|
339
|
-
var filePath = file.getPath(), tokens = null, node = null, procedures = [], fileContext = new FileContext(context, filePath, node, tokens, procedures);
|
|
416
|
+
var filePath = file.getPath(), lineIndex = null, tokens = null, node = null, procedures = [], fileContext = new FileContext(context, filePath, lineIndex, node, tokens, procedures);
|
|
340
417
|
return fileContext;
|
|
341
418
|
}
|
|
342
419
|
},
|
|
343
420
|
{
|
|
344
421
|
key: "fromFilePath",
|
|
345
422
|
value: function fromFilePath(filePath, context) {
|
|
346
|
-
var tokens = null, node = null, procedures = null, fileContext = new FileContext(context, filePath, node, tokens, procedures);
|
|
423
|
+
var lineIndex = null, tokens = null, node = null, procedures = null, fileContext = new FileContext(context, filePath, lineIndex, node, tokens, procedures);
|
|
347
424
|
return fileContext;
|
|
348
425
|
}
|
|
349
426
|
}
|
|
@@ -351,4 +428,4 @@ var FileContext = /*#__PURE__*/ function() {
|
|
|
351
428
|
return FileContext;
|
|
352
429
|
}();
|
|
353
430
|
|
|
354
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2ZpbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbGV4ZXJzVXRpbGl0aWVzLCBwYXJzZXJzVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXJzXCI7XG5cbmltcG9ydCBkb20gZnJvbSBcIi4uL2RvbVwiO1xuXG5pbXBvcnQgeyBub2Rlc1F1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgY2hhaW5Db250ZXh0IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5pbXBvcnQgeyBub2RlQXNTdHJpbmcsIG5vZGVzQXNTdHJpbmcgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N0cmluZ1wiO1xuXG5jb25zdCB7IHB1c2ggfSA9IGFycmF5VXRpbGl0aWVzLFxuICAgICAgeyBmdXJ0bGVMZXhlckZyb21Ob3RoaW5nIH0gPSBsZXhlcnNVdGlsaXRpZXMsXG4gICAgICB7IGZ1cnRsZVBhcnNlckZyb21Ob3RoaW5nIH0gPSBwYXJzZXJzVXRpbGl0aWVzO1xuXG5jb25zdCBmdXJ0bGVMZXhlciA9IGZ1cnRsZUxleGVyRnJvbU5vdGhpbmcoKSxcbiAgICAgIGZ1cnRsZVBhcnNlciA9IGZ1cnRsZVBhcnNlckZyb21Ob3RoaW5nKCk7XG5cbmNvbnN0IGVycm9yTm9kZXNRdWVyeSA9IG5vZGVzUXVlcnkoXCIvZG9jdW1lbnQvZXJyb3JcIiksXG4gICAgICBwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGVzUXVlcnkgPSBub2Rlc1F1ZXJ5KFwiL2RvY3VtZW50L3Byb2NlZHVyZURlY2xhcmF0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGZpbGVQYXRoLCBub2RlLCB0b2tlbnMsIHByb2NlZHVyZXMpIHtcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgIHRoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMudG9rZW5zID0gdG9rZW5zO1xuICAgIHRoaXMucHJvY2VkdXJlcyA9IHByb2NlZHVyZXM7XG5cbiAgICByZXR1cm4gY2hhaW5Db250ZXh0KHRoaXMpO1xuICB9XG5cbiAgZ2V0Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0O1xuICB9XG5cbiAgZ2V0RmlsZVBhdGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZmlsZVBhdGg7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgZ2V0TGV4ZXIoKSB7XG4gICAgY29uc3QgbGV4ZXIgPSBmdXJ0bGVMZXhlcjsgIC8vL1xuXG4gICAgcmV0dXJuIGxleGVyO1xuICB9XG5cbiAgZ2V0UGFyc2VyKCkge1xuICAgIGNvbnN0IHBhcnNlciA9IGZ1cnRsZVBhcnNlcjsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIGdldExhYmVscyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBbXTtcblxuICAgIHJldHVybiBsYWJlbHM7XG4gIH1cblxuICBnZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZ2V0UnVsZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbXVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgZ2V0QXhpb21zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IFtdO1xuXG4gICAgcmV0dXJuIGF4aW9tcztcbiAgfVxuXG4gIGdldExlbW1hcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsZW1tYXMgPSBbXTtcblxuICAgIHJldHVybiBsZW1tYXM7XG4gIH1cblxuICBnZXRUaGVvcmVtcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0aGVvcmVtcyA9IFtdO1xuXG4gICAgcmV0dXJuIHRoZW9yZW1zO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVzID0gW107XG5cbiAgICBwdXNoKHByb2NlZHVyZXMsIHRoaXMucHJvY2VkdXJlcyk7XG5cbiAgICBpZiAoaW5jbHVkZVJlbGVhc2UpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0UHJvY2VkdXJlcyA9IHRoaXMuY29udGV4dC5nZXRQcm9jZWR1cmVzKCk7XG5cbiAgICAgIHB1c2gocHJvY2VkdXJlcywgcmVsZWFzZUNvbnRleHRQcm9jZWR1cmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlcztcbiAgfVxuXG4gIGdldE1ldGFMZW1tYXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbWV0YUxlbW1hcyA9IFtdO1xuXG4gICAgcmV0dXJuIG1ldGFMZW1tYXM7XG4gIH1cblxuICBnZXRDb25qZWN0dXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25qZWN0dXJlcyA9IFtdO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29tYmluYXRvcnMgPSBbXTtcblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldFR5cGVQcmVmaXhlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlUHJlZml4ZXMgPSBbXTtcblxuICAgIHJldHVybiB0eXBlUHJlZml4ZXM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uc3RydWN0b3JzID0gW107XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgZ2V0TWV0YXRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1ldGF0aGVvcmVtcyA9IFtdO1xuXG4gICAgcmV0dXJuIG1ldGF0aGVvcmVtcztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IFtdO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBnZXRWYXJpYWJsZXMoKSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gW107XG5cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgYWRkUHJvY2VkdXJlcygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpczsgLy8vXG5cbiAgICBjb25zdCB7IFByb2NlZHVyZURlY2xhcmF0aW9uIH0gPSBkb20sXG4gICAgICAgICAgcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2RlcyA9IHByb2NlZHVyZURlY2xhcmF0aW9uTm9kZXNRdWVyeSh0aGlzLm5vZGUpO1xuXG4gICAgcHJvY2VkdXJlRGVjbGFyYXRpb25Ob2Rlcy5mb3JFYWNoKChwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUpID0+IHtcbiAgICAgIGNvbnN0IHByb2NlZHVyZURlY2xhcmF0aW9uID0gUHJvY2VkdXJlRGVjbGFyYXRpb24uZnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZShwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICAgICAgcHJvY2VkdXJlID0gcHJvY2VkdXJlRGVjbGFyYXRpb24uZ2V0UHJvY2VkdXJlKCksXG4gICAgICAgICAgICBwcm9jZWR1cmVTdHJpbmcgPSBwcm9jZWR1cmUuZ2V0U3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuZGVidWcoYEFkZGluZyB0aGUgJyR7cHJvY2VkdXJlU3RyaW5nfScgcHJvY2VkdXJlLmApO1xuXG4gICAgICB0aGlzLnByb2NlZHVyZXMucHVzaChwcm9jZWR1cmUpO1xuICAgIH0pO1xuICB9XG5cbiAgbm9kZUFzU3RyaW5nKG5vZGUpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBub2RlQXNTdHJpbmcobm9kZSwgdGhpcy50b2tlbnMpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIG5vZGVzQXNTdHJpbmcobm9kZXMpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBub2Rlc0FzU3RyaW5nKG5vZGVzLCB0aGlzLnRva2Vucyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgdHJhY2UobWVzc2FnZSkgeyB0aGlzLmNvbnRleHQudHJhY2UobWVzc2FnZSwgdGhpcy5maWxlUGF0aCk7IH1cblxuICBkZWJ1ZyhtZXNzYWdlKSB7IHRoaXMuY29udGV4dC5kZWJ1ZyhtZXNzYWdlLCB0aGlzLmZpbGVQYXRoKTsgfVxuXG4gIGluZm8obWVzc2FnZSkgeyB0aGlzLmNvbnRleHQuaW5mbyhtZXNzYWdlLCB0aGlzLmZpbGVQYXRoKTsgfVxuXG4gIHdhcm5pbmcobWVzc2FnZSkgeyB0aGlzLmNvbnRleHQud2FybmluZyhtZXNzYWdlLCB0aGlzLmZpbGVQYXRoKTsgfVxuXG4gIGVycm9yKG1lc3NhZ2UpIHsgdGhpcy5jb250ZXh0LmVycm9yKG1lc3NhZ2UsIHRoaXMuZmlsZVBhdGgpOyB9XG5cbiAgdmVyaWZ5KCkge1xuICAgIGxldCB2ZXJpZmllZCA9IGZhbHNlO1xuXG4gICAgdGhpcy5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAnJHt0aGlzLmZpbGVQYXRofScgZmlsZS4uLmApO1xuXG4gICAgdGhpcy5wcmVwYXJlKCk7XG5cbiAgICBpZiAodGhpcy5ub2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLndhcm5pbmcoYFVuYWJsZSB0byB2ZXJpZnkgdGhlICcke3RoaXMuZmlsZVBhdGh9JyBmaWxlIGJlY2F1c2UgaXQgY2Fubm90IGJlIHBhcnNlZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXJyb3JOb2RlcyA9IGVycm9yTm9kZXNRdWVyeSh0aGlzLm5vZGUpLFxuICAgICAgICAgICAgZXJyb3JOb2Rlc0xlbmd0aCA9IGVycm9yTm9kZXMubGVuZ3RoO1xuXG4gICAgICBpZiAoZXJyb3JOb2Rlc0xlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aGlzLmFkZFByb2NlZHVyZXMoKTtcblxuICAgICAgICB2ZXJpZmllZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLndhcm5pbmcoYFRoZSAnJHt0aGlzLmZpbGVQYXRofScgZmlsZSBjYW5ub3QgYmUgdmVyaWZpZWQgYmVjYXVzZSB0aGVyZSBhcmUgZXJyb3JzLmApO1xuXG4gICAgICAgIHRoaXMuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodmVyaWZpZWQpIHtcbiAgICAgIHRoaXMuaW5mbyhgLi4udmVyaWZpZWQgdGhlICcke3RoaXMuZmlsZVBhdGh9JyBmaWxlLmApO1xuICAgIH1cblxuICAgIHJldHVybiB2ZXJpZmllZDtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMucHJvY2VkdXJlcyA9IFtdO1xuICB9XG5cbiAgcHJlcGFyZSgpIHtcbiAgICBpZiAodGhpcy50b2tlbnMgIT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBmaWxlID0gdGhpcy5maW5kRmlsZSh0aGlzLmZpbGVQYXRoKSxcbiAgICAgICAgICBsZXhlciA9IHRoaXMuZ2V0TGV4ZXIoKSxcbiAgICAgICAgICBwYXJzZXIgPSB0aGlzLmdldFBhcnNlcigpLFxuICAgICAgICAgIGNvbnRlbnQgPSBmaWxlLmdldENvbnRlbnQoKTtcblxuICAgIHRoaXMudG9rZW5zID0gbGV4ZXIudG9rZW5pc2UoY29udGVudCk7XG5cbiAgICB0aGlzLm5vZGUgPSBwYXJzZXIucGFyc2UodGhpcy50b2tlbnMpO1xuICB9XG5cbiAgaW5pdGlhbGlzZShqc29uKSB7XG4gICAgY29uc3QgeyBjb250ZW50IH0gPSBqc29uLFxuICAgICAgICAgIGxleGVyID0gdGhpcy5nZXRMZXhlcigpLFxuICAgICAgICAgIHBhcnNlciA9IHRoaXMuZ2V0UGFyc2VyKCk7XG5cbiAgICB0aGlzLnRva2VucyA9IGxleGVyLnRva2VuaXNlKGNvbnRlbnQpO1xuXG4gICAgdGhpcy5ub2RlID0gcGFyc2VyLnBhcnNlKHRoaXMudG9rZW5zKTtcblxuICAgIHRoaXMuY2xlYXIoKTtcblxuICAgIHRoaXMuYWRkUHJvY2VkdXJlcygpO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbmRGaWxlKHRoaXMuZmlsZVBhdGgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gdGhpcy5maWxlUGF0aCwgLy8vXG4gICAgICAgICAgY29udGVudCA9IGZpbGUuZ2V0Q29udGVudCgpLFxuICAgICAgICAgIGpzb24gPSB7XG4gICAgICAgICAgICBmaWxlUGF0aCxcbiAgICAgICAgICAgIGNvbnRlbnRcbiAgICAgICAgICB9O1xuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBzdGF0aWMgZnJvbUZpbGUoZmlsZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGZpbGVQYXRoID0gZmlsZS5nZXRQYXRoKCksXG4gICAgICAgICAgdG9rZW5zID0gbnVsbCxcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBwcm9jZWR1cmVzID0gW10sXG4gICAgICAgICAgZmlsZUNvbnRleHQgPSBuZXcgRmlsZUNvbnRleHQoY29udGV4dCwgZmlsZVBhdGgsIG5vZGUsIHRva2VucywgcHJvY2VkdXJlcyk7XG5cbiAgICByZXR1cm4gZmlsZUNvbnRleHQ7XG4gIH1cblxuICBzdGF0aWMgZnJvbUZpbGVQYXRoKGZpbGVQYXRoLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdG9rZW5zID0gbnVsbCxcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBwcm9jZWR1cmVzID0gbnVsbCxcbiAgICAgICAgICBmaWxlQ29udGV4dCA9IG5ldyBGaWxlQ29udGV4dChjb250ZXh0LCBmaWxlUGF0aCwgbm9kZSwgdG9rZW5zLCBwcm9jZWR1cmVzKTtcblxuICAgIHJldHVybiBmaWxlQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkZpbGVDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiZnVydGxlTGV4ZXJGcm9tTm90aGluZyIsImxleGVyc1V0aWxpdGllcyIsImZ1cnRsZVBhcnNlckZyb21Ob3RoaW5nIiwicGFyc2Vyc1V0aWxpdGllcyIsImZ1cnRsZUxleGVyIiwiZnVydGxlUGFyc2VyIiwiZXJyb3JOb2Rlc1F1ZXJ5Iiwibm9kZXNRdWVyeSIsInByb2NlZHVyZURlY2xhcmF0aW9uTm9kZXNRdWVyeSIsImNvbnRleHQiLCJmaWxlUGF0aCIsIm5vZGUiLCJ0b2tlbnMiLCJwcm9jZWR1cmVzIiwiY2hhaW5Db250ZXh0IiwiZ2V0Q29udGV4dCIsImdldEZpbGVQYXRoIiwiZ2V0Tm9kZSIsImdldFRva2VucyIsImdldExleGVyIiwibGV4ZXIiLCJnZXRQYXJzZXIiLCJwYXJzZXIiLCJnZXRMYWJlbHMiLCJpbmNsdWRlUmVsZWFzZSIsImxhYmVscyIsImdldFR5cGVzIiwidHlwZXMiLCJnZXRSdWxlcyIsInJ1bGVzIiwiZ2V0QXhpb21zIiwiYXhpb21zIiwiZ2V0TGVtbWFzIiwibGVtbWFzIiwiZ2V0VGhlb3JlbXMiLCJ0aGVvcmVtcyIsImdldFByb2NlZHVyZXMiLCJyZWxlYXNlQ29udGV4dFByb2NlZHVyZXMiLCJnZXRNZXRhTGVtbWFzIiwibWV0YUxlbW1hcyIsImdldENvbmplY3R1cmVzIiwiY29uamVjdHVyZXMiLCJnZXRDb21iaW5hdG9ycyIsImNvbWJpbmF0b3JzIiwiZ2V0VHlwZVByZWZpeGVzIiwidHlwZVByZWZpeGVzIiwiZ2V0Q29uc3RydWN0b3JzIiwiY29uc3RydWN0b3JzIiwiZ2V0TWV0YXRoZW9yZW1zIiwibWV0YXRoZW9yZW1zIiwiZ2V0TWV0YXZhcmlhYmxlcyIsIm1ldGF2YXJpYWJsZXMiLCJnZXRWYXJpYWJsZXMiLCJ2YXJpYWJsZXMiLCJhZGRQcm9jZWR1cmVzIiwiUHJvY2VkdXJlRGVjbGFyYXRpb24iLCJkb20iLCJwcm9jZWR1cmVEZWNsYXJhdGlvbk5vZGVzIiwiZm9yRWFjaCIsInByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInByb2NlZHVyZURlY2xhcmF0aW9uIiwiZnJvbVByb2NlZHVyZURlY2xhcmF0aW9uTm9kZSIsInByb2NlZHVyZSIsImdldFByb2NlZHVyZSIsInByb2NlZHVyZVN0cmluZyIsImdldFN0cmluZyIsImRlYnVnIiwibm9kZUFzU3RyaW5nIiwic3RyaW5nIiwibm9kZXNBc1N0cmluZyIsIm5vZGVzIiwidHJhY2UiLCJtZXNzYWdlIiwiaW5mbyIsIndhcm5pbmciLCJlcnJvciIsInZlcmlmeSIsInZlcmlmaWVkIiwicHJlcGFyZSIsImVycm9yTm9kZXMiLCJlcnJvck5vZGVzTGVuZ3RoIiwibGVuZ3RoIiwiY2xlYXIiLCJmaWxlIiwiZmluZEZpbGUiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRva2VuaXNlIiwicGFyc2UiLCJpbml0aWFsaXNlIiwianNvbiIsInRvSlNPTiIsImZyb21GaWxlIiwiZ2V0UGF0aCIsImZpbGVDb250ZXh0IiwiZnJvbUZpbGVQYXRoIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQXFCcUJBOzs7eUJBbkJVOzZCQUNtQjswREFFbEM7cUJBRVc7dUJBQ0U7c0JBQ2U7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFNUMsSUFBTSxBQUFFQyxPQUFTQyx5QkFBYyxDQUF2QkQsTUFDRixBQUFFRSx5QkFBMkJDLDhCQUFlLENBQTFDRCx3QkFDRixBQUFFRSwwQkFBNEJDLCtCQUFnQixDQUE1Q0Q7QUFFUixJQUFNRSxjQUFjSiwwQkFDZEssZUFBZUg7QUFFckIsSUFBTUksa0JBQWtC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
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2ZpbGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbGV4ZXJzVXRpbGl0aWVzLCBwYXJzZXJzVXRpbGl0aWVzIH0gZnJvbSBcIm9jY2FtLWdyYW1tYXJzXCI7XG5cbmltcG9ydCB7IExFVkVMUyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHZlcmlmeUZpbGUgfSBmcm9tIFwiLi4vcHJvY2Vzcy92ZXJpZnlcIjtcbmltcG9ydCB7IG5vZGVBc1N0cmluZywgbm9kZXNBc1N0cmluZyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5pbXBvcnQgeyBjaGFpbkNvbnRleHQsIGxpbmVJbmRleEZyb21Ob2RlQW5kVG9rZW5zIH0gZnJvbSBcIi4uL3V0aWxpdGllcy9jb250ZXh0XCI7XG5cbmNvbnN0IHsgcHVzaCB9ID0gYXJyYXlVdGlsaXRpZXMsXG4gICAgICB7IGZ1cnRsZUxleGVyRnJvbU5vdGhpbmcgfSA9IGxleGVyc1V0aWxpdGllcyxcbiAgICAgIHsgZnVydGxlUGFyc2VyRnJvbU5vdGhpbmcgfSA9IHBhcnNlcnNVdGlsaXRpZXMsXG4gICAgICBbIFRSQUNFX0xFVkVMLCBERUJVR19MRVZFTCwgSU5GT19MRVZFTCwgV0FSTklOR19MRVZFTCwgRVJST1JfTEVWRUwgXSA9IExFVkVMUztcblxuY29uc3QgZnVydGxlTGV4ZXIgPSBmdXJ0bGVMZXhlckZyb21Ob3RoaW5nKCksXG4gICAgICBmdXJ0bGVQYXJzZXIgPSBmdXJ0bGVQYXJzZXJGcm9tTm90aGluZygpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGaWxlQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGZpbGVQYXRoLCBsaW5lSW5kZXgsIG5vZGUsIHRva2VucywgcHJvY2VkdXJlcykge1xuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgdGhpcy5maWxlUGF0aCA9IGZpbGVQYXRoO1xuICAgIHRoaXMubGluZUluZGV4ID0gbGluZUluZGV4O1xuICAgIHRoaXMubm9kZSA9IG5vZGU7XG4gICAgdGhpcy50b2tlbnMgPSB0b2tlbnM7XG4gICAgdGhpcy5wcm9jZWR1cmVzID0gcHJvY2VkdXJlcztcblxuICAgIHJldHVybiBjaGFpbkNvbnRleHQodGhpcyk7XG4gIH1cblxuICBnZXRDb250ZXh0KCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQ7XG4gIH1cblxuICBnZXRGaWxlUGF0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWxlUGF0aDtcbiAgfVxuXG4gIGdldExpbmVJbmRleCgpIHtcbiAgICByZXR1cm4gdGhpcy5saW5lSW5kZXg7XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXRUb2tlbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5zO1xuICB9XG5cbiAgZ2V0TGV4ZXIoKSB7XG4gICAgY29uc3QgbGV4ZXIgPSBmdXJ0bGVMZXhlcjsgIC8vL1xuXG4gICAgcmV0dXJuIGxleGVyO1xuICB9XG5cbiAgZ2V0UGFyc2VyKCkge1xuICAgIGNvbnN0IHBhcnNlciA9IGZ1cnRsZVBhcnNlcjsgIC8vL1xuXG4gICAgcmV0dXJuIHBhcnNlcjtcbiAgfVxuXG4gIGdldExhYmVscyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsYWJlbHMgPSBbXTtcblxuICAgIHJldHVybiBsYWJlbHM7XG4gIH1cblxuICBnZXRUeXBlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlcyA9IFtdO1xuXG4gICAgcmV0dXJuIHR5cGVzO1xuICB9XG5cbiAgZ2V0UnVsZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgcnVsZXMgPSBbXVxuXG4gICAgcmV0dXJuIHJ1bGVzO1xuICB9XG5cbiAgZ2V0QXhpb21zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IGF4aW9tcyA9IFtdO1xuXG4gICAgcmV0dXJuIGF4aW9tcztcbiAgfVxuXG4gIGdldExlbW1hcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBsZW1tYXMgPSBbXTtcblxuICAgIHJldHVybiBsZW1tYXM7XG4gIH1cblxuICBnZXRUaGVvcmVtcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0aGVvcmVtcyA9IFtdO1xuXG4gICAgcmV0dXJuIHRoZW9yZW1zO1xuICB9XG5cbiAgZ2V0UHJvY2VkdXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBwcm9jZWR1cmVzID0gW107XG5cbiAgICBwdXNoKHByb2NlZHVyZXMsIHRoaXMucHJvY2VkdXJlcyk7XG5cbiAgICBpZiAoaW5jbHVkZVJlbGVhc2UpIHtcbiAgICAgIGNvbnN0IHJlbGVhc2VDb250ZXh0UHJvY2VkdXJlcyA9IHRoaXMuY29udGV4dC5nZXRQcm9jZWR1cmVzKCk7XG5cbiAgICAgIHB1c2gocHJvY2VkdXJlcywgcmVsZWFzZUNvbnRleHRQcm9jZWR1cmVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvY2VkdXJlcztcbiAgfVxuXG4gIGdldE1ldGFMZW1tYXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbWV0YUxlbW1hcyA9IFtdO1xuXG4gICAgcmV0dXJuIG1ldGFMZW1tYXM7XG4gIH1cblxuICBnZXRDb25qZWN0dXJlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCBjb25qZWN0dXJlcyA9IFtdO1xuXG4gICAgcmV0dXJuIGNvbmplY3R1cmVzO1xuICB9XG5cbiAgZ2V0Q29tYmluYXRvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29tYmluYXRvcnMgPSBbXTtcblxuICAgIHJldHVybiBjb21iaW5hdG9ycztcbiAgfVxuXG4gIGdldFR5cGVQcmVmaXhlcyhpbmNsdWRlUmVsZWFzZSA9IHRydWUpIHtcbiAgICBjb25zdCB0eXBlUHJlZml4ZXMgPSBbXTtcblxuICAgIHJldHVybiB0eXBlUHJlZml4ZXM7XG4gIH1cblxuICBnZXRDb25zdHJ1Y3RvcnMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgY29uc3RydWN0b3JzID0gW107XG5cbiAgICByZXR1cm4gY29uc3RydWN0b3JzO1xuICB9XG5cbiAgZ2V0TWV0YXRoZW9yZW1zKGluY2x1ZGVSZWxlYXNlID0gdHJ1ZSkge1xuICAgIGNvbnN0IG1ldGF0aGVvcmVtcyA9IFtdO1xuXG4gICAgcmV0dXJuIG1ldGF0aGVvcmVtcztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZXMoaW5jbHVkZVJlbGVhc2UgPSB0cnVlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlcyA9IFtdO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZXM7XG4gIH1cblxuICBhZGRQcm9jZWR1cmUocHJvY2VkdXJlKSB7XG4gICAgY29uc3QgcHJvY2VkdXJlU3RyaW5nID0gcHJvY2VkdXJlLmdldFN0cmluZygpO1xuXG4gICAgdGhpcy5wcm9jZWR1cmVzLnB1c2gocHJvY2VkdXJlKTtcblxuICAgIHRoaXMuZGVidWcoYEFkZGVkIHRoZSAnJHtwcm9jZWR1cmVTdHJpbmd9JyBwcm9jZWR1cmUgdG8gdGhlIGNvbnRleHQuYCk7XG4gIH1cblxuICBnZXRWYXJpYWJsZXMoKSB7XG4gICAgY29uc3QgdmFyaWFibGVzID0gW107XG5cbiAgICByZXR1cm4gdmFyaWFibGVzO1xuICB9XG5cbiAgbm9kZUFzU3RyaW5nKG5vZGUpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBub2RlQXNTdHJpbmcobm9kZSwgdGhpcy50b2tlbnMpO1xuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIG5vZGVzQXNTdHJpbmcobm9kZXMpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBub2Rlc0FzU3RyaW5nKG5vZGVzLCB0aGlzLnRva2Vucyk7XG5cbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG5cbiAgdHJhY2UobWVzc2FnZSwgbm9kZSA9IG51bGwpIHtcbiAgICBjb25zdCBsZXZlbCA9IFRSQUNFX0xFVkVMO1xuXG4gICAgdGhpcy53cml0ZVRvTG9nKGxldmVsLCBtZXNzYWdlLCBub2RlKTtcbiAgfVxuXG4gIGRlYnVnKG1lc3NhZ2UsIG5vZGUgPSBudWxsKSB7XG4gICAgY29uc3QgbGV2ZWwgPSBERUJVR19MRVZFTDtcblxuICAgIHRoaXMud3JpdGVUb0xvZyhsZXZlbCwgbWVzc2FnZSwgbm9kZSk7XG4gIH1cblxuICBpbmZvKG1lc3NhZ2UsIG5vZGUgPSBudWxsKSB7XG4gICAgY29uc3QgbGV2ZWwgPSBJTkZPX0xFVkVMO1xuXG4gICAgdGhpcy53cml0ZVRvTG9nKGxldmVsLCBtZXNzYWdlLCBub2RlKTtcbiAgfVxuXG4gIHdhcm5pbmcobWVzc2FnZSwgbm9kZSA9IG51bGwpIHtcbiAgICBjb25zdCBsZXZlbCA9IFdBUk5JTkdfTEVWRUw7XG5cbiAgICB0aGlzLndyaXRlVG9Mb2cobGV2ZWwsIG1lc3NhZ2UsIG5vZGUpO1xuICB9XG5cbiAgZXJyb3IobWVzc2FnZSwgbm9kZSA9IG51bGwpIHtcbiAgICBjb25zdCBsZXZlbCA9IEVSUk9SX0xFVkVMO1xuXG4gICAgdGhpcy53cml0ZVRvTG9nKGxldmVsLCBtZXNzYWdlLCBub2RlKTtcbiAgfVxuXG4gIHdyaXRlVG9Mb2cobGV2ZWwsIG1lc3NhZ2UsIG5vZGUpIHtcbiAgICBjb25zdCBsaW5lSW5kZXggPSBsaW5lSW5kZXhGcm9tTm9kZUFuZFRva2Vucyhub2RlLCB0aGlzLnRva2VucywgdGhpcy5saW5lSW5kZXgpLFxuICAgICAgICAgIGZpbGVQYXRoID0gKGxpbmVJbmRleCA9PT0gbnVsbCkgP1xuICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbGVQYXRoIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBudWxsO1xuXG4gICAgdGhpcy5jb250ZXh0LndyaXRlVG9Mb2cobGV2ZWwsIG1lc3NhZ2UsIGZpbGVQYXRoLCBsaW5lSW5kZXgpO1xuXG4gICAgdGhpcy5saW5lSW5kZXggPSBsaW5lSW5kZXg7XG4gIH1cblxuICBnZXRGaWxlQ29udGV4dCgpIHtcbiAgICBjb25zdCBmaWxlQ29udGV4dCA9IHRoaXM7IC8vL1xuXG4gICAgcmV0dXJuIGZpbGVDb250ZXh0O1xuICB9XG5cbiAgZ2V0RGVwdGgoKSB7XG4gICAgbGV0IGRlcHRoID0gdGhpcy5jb250ZXh0LmdldERlcHRoKCk7XG5cbiAgICBkZXB0aCsrO1xuXG4gICAgcmV0dXJuIGRlcHRoO1xuICB9XG5cbiAgdmVyaWZ5KCkge1xuICAgIGxldCB2ZXJpZmllcyA9IGZhbHNlO1xuXG4gICAgdGhpcy5wcmVwYXJlKCk7XG5cbiAgICBpZiAodGhpcy5ub2RlID09PSBudWxsKSB7XG4gICAgICB0aGlzLndhcm5pbmcoYFVuYWJsZSB0byB2ZXJpZnkgdGhlICcke3RoaXMuZmlsZVBhdGh9JyBmaWxlIGJlY2F1c2UgaXQgY2Fubm90IGJlIHBhcnNlZC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZWJ1ZyhgVmVyaWZ5aW5nIHRoZSAnJHt0aGlzLmZpbGVQYXRofScgZmlsZS4uLmApO1xuXG4gICAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgICBmaWxlTm9kZSA9IHRoaXMubm9kZTsgLy8vXG5cbiAgICAgIHZlcmlmaWVzID0gdmVyaWZ5RmlsZShmaWxlTm9kZSwgY29udGV4dCk7XG5cbiAgICAgIHZlcmlmaWVzID9cbiAgICAgICAgdGhpcy5jb21wbGV0ZSgpIDpcbiAgICAgICAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICAgIGlmICh2ZXJpZmllcykge1xuICAgICAgICB0aGlzLmluZm8oYC4uLnZlcmlmaWVkIHRoZSAnJHt0aGlzLmZpbGVQYXRofScgZmlsZS5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdmVyaWZpZXM7XG4gIH1cblxuICBwcmVwYXJlKCkge1xuICAgIGlmICh0aGlzLnRva2VucyAhPT0gbnVsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbGUgPSB0aGlzLmZpbmRGaWxlKHRoaXMuZmlsZVBhdGgpLFxuICAgICAgICAgIGxleGVyID0gdGhpcy5nZXRMZXhlcigpLFxuICAgICAgICAgIHBhcnNlciA9IHRoaXMuZ2V0UGFyc2VyKCksXG4gICAgICAgICAgY29udGVudCA9IGZpbGUuZ2V0Q29udGVudCgpO1xuXG4gICAgdGhpcy50b2tlbnMgPSBsZXhlci50b2tlbmlzZShjb250ZW50KTtcblxuICAgIHRoaXMubm9kZSA9IHBhcnNlci5wYXJzZSh0aGlzLnRva2Vucyk7XG4gIH1cblxuICBjbGVhcigpIHtcbiAgICB0aGlzLmxpbmVJbmRleCA9IG51bGw7XG5cbiAgICB0aGlzLnByb2NlZHVyZXMgPSBbXTtcbiAgfVxuXG4gIGNvbXBsZXRlKCkge1xuICAgIHRoaXMubGluZUluZGV4ID0gbnVsbDtcbiAgfVxuXG4gIGluaXRpYWxpc2UoanNvbikge1xuICAgIGNvbnN0IHsgY29udGVudCB9ID0ganNvbixcbiAgICAgICAgICBsZXhlciA9IHRoaXMuZ2V0TGV4ZXIoKSxcbiAgICAgICAgICBwYXJzZXIgPSB0aGlzLmdldFBhcnNlcigpO1xuXG4gICAgdGhpcy50b2tlbnMgPSBsZXhlci50b2tlbmlzZShjb250ZW50KTtcblxuICAgIHRoaXMubm9kZSA9IHBhcnNlci5wYXJzZSh0aGlzLnRva2Vucyk7XG5cbiAgICB0aGlzLmNsZWFyKCk7XG5cbiAgICB0aGlzLmFkZFByb2NlZHVyZXMoKTtcbiAgfVxuXG4gIHRvSlNPTigpIHtcbiAgICBjb25zdCBmaWxlID0gdGhpcy5maW5kRmlsZSh0aGlzLmZpbGVQYXRoKSxcbiAgICAgICAgICBmaWxlUGF0aCA9IHRoaXMuZmlsZVBhdGgsIC8vL1xuICAgICAgICAgIGNvbnRlbnQgPSBmaWxlLmdldENvbnRlbnQoKSxcbiAgICAgICAgICBqc29uID0ge1xuICAgICAgICAgICAgZmlsZVBhdGgsXG4gICAgICAgICAgICBjb250ZW50XG4gICAgICAgICAgfTtcblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GaWxlKGZpbGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCBmaWxlUGF0aCA9IGZpbGUuZ2V0UGF0aCgpLFxuICAgICAgICAgIGxpbmVJbmRleCA9IG51bGwsXG4gICAgICAgICAgdG9rZW5zID0gbnVsbCxcbiAgICAgICAgICBub2RlID0gbnVsbCxcbiAgICAgICAgICBwcm9jZWR1cmVzID0gW10sXG4gICAgICAgICAgZmlsZUNvbnRleHQgPSBuZXcgRmlsZUNvbnRleHQoY29udGV4dCwgZmlsZVBhdGgsIGxpbmVJbmRleCwgbm9kZSwgdG9rZW5zLCBwcm9jZWR1cmVzKTtcblxuICAgIHJldHVybiBmaWxlQ29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tRmlsZVBhdGgoZmlsZVBhdGgsIGNvbnRleHQpIHtcbiAgICBjb25zdCBsaW5lSW5kZXggPSBudWxsLFxuICAgICAgICAgIHRva2VucyA9IG51bGwsXG4gICAgICAgICAgbm9kZSA9IG51bGwsXG4gICAgICAgICAgcHJvY2VkdXJlcyA9IG51bGwsXG4gICAgICAgICAgZmlsZUNvbnRleHQgPSBuZXcgRmlsZUNvbnRleHQoY29udGV4dCwgZmlsZVBhdGgsIGxpbmVJbmRleCwgbm9kZSwgdG9rZW5zLCBwcm9jZWR1cmVzKTtcblxuICAgIHJldHVybiBmaWxlQ29udGV4dDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkZpbGVDb250ZXh0IiwicHVzaCIsImFycmF5VXRpbGl0aWVzIiwiZnVydGxlTGV4ZXJGcm9tTm90aGluZyIsImxleGVyc1V0aWxpdGllcyIsImZ1cnRsZVBhcnNlckZyb21Ob3RoaW5nIiwicGFyc2Vyc1V0aWxpdGllcyIsIkxFVkVMUyIsIlRSQUNFX0xFVkVMIiwiREVCVUdfTEVWRUwiLCJJTkZPX0xFVkVMIiwiV0FSTklOR19MRVZFTCIsIkVSUk9SX0xFVkVMIiwiZnVydGxlTGV4ZXIiLCJmdXJ0bGVQYXJzZXIiLCJjb250ZXh0IiwiZmlsZVBhdGgiLCJsaW5lSW5kZXgiLCJub2RlIiwidG9rZW5zIiwicHJvY2VkdXJlcyIsImNoYWluQ29udGV4dCIsImdldENvbnRleHQiLCJnZXRGaWxlUGF0aCIsImdldExpbmVJbmRleCIsImdldE5vZGUiLCJnZXRUb2tlbnMiLCJnZXRMZXhlciIsImxleGVyIiwiZ2V0UGFyc2VyIiwicGFyc2VyIiwiZ2V0TGFiZWxzIiwiaW5jbHVkZVJlbGVhc2UiLCJsYWJlbHMiLCJnZXRUeXBlcyIsInR5cGVzIiwiZ2V0UnVsZXMiLCJydWxlcyIsImdldEF4aW9tcyIsImF4aW9tcyIsImdldExlbW1hcyIsImxlbW1hcyIsImdldFRoZW9yZW1zIiwidGhlb3JlbXMiLCJnZXRQcm9jZWR1cmVzIiwicmVsZWFzZUNvbnRleHRQcm9jZWR1cmVzIiwiZ2V0TWV0YUxlbW1hcyIsIm1ldGFMZW1tYXMiLCJnZXRDb25qZWN0dXJlcyIsImNvbmplY3R1cmVzIiwiZ2V0Q29tYmluYXRvcnMiLCJjb21iaW5hdG9ycyIsImdldFR5cGVQcmVmaXhlcyIsInR5cGVQcmVmaXhlcyIsImdldENvbnN0cnVjdG9ycyIsImNvbnN0cnVjdG9ycyIsImdldE1ldGF0aGVvcmVtcyIsIm1ldGF0aGVvcmVtcyIsImdldE1ldGF2YXJpYWJsZXMiLCJtZXRhdmFyaWFibGVzIiwiYWRkUHJvY2VkdXJlIiwicHJvY2VkdXJlIiwicHJvY2VkdXJlU3RyaW5nIiwiZ2V0U3RyaW5nIiwiZGVidWciLCJnZXRWYXJpYWJsZXMiLCJ2YXJpYWJsZXMiLCJub2RlQXNTdHJpbmciLCJzdHJpbmciLCJub2Rlc0FzU3RyaW5nIiwibm9kZXMiLCJ0cmFjZSIsIm1lc3NhZ2UiLCJsZXZlbCIsIndyaXRlVG9Mb2ciLCJpbmZvIiwid2FybmluZyIsImVycm9yIiwibGluZUluZGV4RnJvbU5vZGVBbmRUb2tlbnMiLCJnZXRGaWxlQ29udGV4dCIsImZpbGVDb250ZXh0IiwiZ2V0RGVwdGgiLCJkZXB0aCIsInZlcmlmeSIsInZlcmlmaWVzIiwicHJlcGFyZSIsImZpbGVOb2RlIiwidmVyaWZ5RmlsZSIsImNvbXBsZXRlIiwiY2xlYXIiLCJmaWxlIiwiZmluZEZpbGUiLCJjb250ZW50IiwiZ2V0Q29udGVudCIsInRva2VuaXNlIiwicGFyc2UiLCJpbml0aWFsaXNlIiwianNvbiIsImFkZFByb2NlZHVyZXMiLCJ0b0pTT04iLCJmcm9tRmlsZSIsImdldFBhdGgiLCJmcm9tRmlsZVBhdGgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBa0JxQkE7Ozt5QkFoQlU7NkJBQ21CO3lCQUUzQjtzQkFDSTtzQkFDaUI7dUJBQ2E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV6RCxJQUFNLEFBQUVDLE9BQVNDLHlCQUFjLENBQXZCRCxNQUNGLEFBQUVFLHlCQUEyQkMsOEJBQWUsQ0FBMUNELHdCQUNGLEFBQUVFLDBCQUE0QkMsK0JBQWdCLENBQTVDRCx5QkFDcUVFLDJCQUFBQSxpQkFBTSxNQUEzRUMsY0FBcUVELFlBQXhERSxjQUF3REYsWUFBM0NHLGFBQTJDSCxZQUEvQkksZ0JBQStCSixZQUFoQkssY0FBZ0JMO0FBRTdFLElBQU1NLGNBQWNWLDBCQUNkVyxlQUFlVDtBQUVOLElBQUEsQUFBTUwsNEJBQU47YUFBTUEsWUFDUGUsT0FBTyxFQUFFQyxRQUFRLEVBQUVDLFNBQVMsRUFBRUMsSUFBSSxFQUFFQyxNQUFNLEVBQUVDLFVBQVU7Z0NBRC9DcEI7UUFFakIsSUFBSSxDQUFDZSxPQUFPLEdBQUdBO1FBQ2YsSUFBSSxDQUFDQyxRQUFRLEdBQUdBO1FBQ2hCLElBQUksQ0FBQ0MsU0FBUyxHQUFHQTtRQUNqQixJQUFJLENBQUNDLElBQUksR0FBR0E7UUFDWixJQUFJLENBQUNDLE1BQU0sR0FBR0E7UUFDZCxJQUFJLENBQUNDLFVBQVUsR0FBR0E7UUFFbEIsT0FBT0MsSUFBQUEscUJBQVksRUFBQyxJQUFJOztrQkFUUHJCOztZQVluQnNCLEtBQUFBO21CQUFBQSxT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
|