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
|
@@ -0,0 +1,578 @@
|
|
|
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 _necessary = require("necessary");
|
|
12
|
+
var _elements = /*#__PURE__*/ _interop_require_wildcard(require("../elements"));
|
|
13
|
+
var _nullNode = /*#__PURE__*/ _interop_require_default(require("../nullNode"));
|
|
14
|
+
var _query = require("../utilities/query");
|
|
15
|
+
var _constants = require("../constants");
|
|
16
|
+
var _types = require("../types");
|
|
17
|
+
function _class_call_check(instance, Constructor) {
|
|
18
|
+
if (!(instance instanceof Constructor)) {
|
|
19
|
+
throw new TypeError("Cannot call a class as a function");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
function _defineProperties(target, props) {
|
|
23
|
+
for(var i = 0; i < props.length; i++){
|
|
24
|
+
var descriptor = props[i];
|
|
25
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
26
|
+
descriptor.configurable = true;
|
|
27
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
28
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function _create_class(Constructor, protoProps, staticProps) {
|
|
32
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
33
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
34
|
+
return Constructor;
|
|
35
|
+
}
|
|
36
|
+
function _define_property(obj, key, value) {
|
|
37
|
+
if (key in obj) {
|
|
38
|
+
Object.defineProperty(obj, key, {
|
|
39
|
+
value: value,
|
|
40
|
+
enumerable: true,
|
|
41
|
+
configurable: true,
|
|
42
|
+
writable: true
|
|
43
|
+
});
|
|
44
|
+
} else {
|
|
45
|
+
obj[key] = value;
|
|
46
|
+
}
|
|
47
|
+
return obj;
|
|
48
|
+
}
|
|
49
|
+
function _interop_require_default(obj) {
|
|
50
|
+
return obj && obj.__esModule ? obj : {
|
|
51
|
+
default: obj
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function _getRequireWildcardCache(nodeInterop) {
|
|
55
|
+
if (typeof WeakMap !== "function") return null;
|
|
56
|
+
var cacheBabelInterop = new WeakMap();
|
|
57
|
+
var cacheNodeInterop = new WeakMap();
|
|
58
|
+
return (_getRequireWildcardCache = function(nodeInterop) {
|
|
59
|
+
return nodeInterop ? cacheNodeInterop : cacheBabelInterop;
|
|
60
|
+
})(nodeInterop);
|
|
61
|
+
}
|
|
62
|
+
function _interop_require_wildcard(obj, nodeInterop) {
|
|
63
|
+
if (!nodeInterop && obj && obj.__esModule) {
|
|
64
|
+
return obj;
|
|
65
|
+
}
|
|
66
|
+
if (obj === null || typeof obj !== "object" && typeof obj !== "function") {
|
|
67
|
+
return {
|
|
68
|
+
default: obj
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
var cache = _getRequireWildcardCache(nodeInterop);
|
|
72
|
+
if (cache && cache.has(obj)) {
|
|
73
|
+
return cache.get(obj);
|
|
74
|
+
}
|
|
75
|
+
var newObj = {
|
|
76
|
+
__proto__: null
|
|
77
|
+
};
|
|
78
|
+
var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;
|
|
79
|
+
for(var key in obj){
|
|
80
|
+
if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
81
|
+
var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;
|
|
82
|
+
if (desc && (desc.get || desc.set)) {
|
|
83
|
+
Object.defineProperty(newObj, key, desc);
|
|
84
|
+
} else {
|
|
85
|
+
newObj[key] = obj[key];
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
newObj.default = obj;
|
|
90
|
+
if (cache) {
|
|
91
|
+
cache.set(obj, newObj);
|
|
92
|
+
}
|
|
93
|
+
return newObj;
|
|
94
|
+
}
|
|
95
|
+
var _Expression;
|
|
96
|
+
var match = _necessary.arrayUtilities.match;
|
|
97
|
+
var numberTerminalNodeQuery = (0, _query.nodeQuery)("/expression/@number"), reduceExpressionNodeQuery = (0, _query.nodeQuery)("/reduce/expression"), primitiveTerminalNodeQuery = (0, _query.nodeQuery)("/expression/@primitive"), ternaryExpressionNodeQuery = (0, _query.nodeQuery)("/ternary/expression"), stringLiteralTerminalNodeQuery = (0, _query.nodeQuery)("/expression/@string-literal"), returnStatementExpressionNodeQuery = (0, _query.nodeQuery)("/returnStatement/expression"), variableAssignmentExpressionNodeQuery = (0, _query.nodeQuery)("/variableAssignment/expression");
|
|
98
|
+
var _default = (0, _elements.define)((_Expression = /*#__PURE__*/ function() {
|
|
99
|
+
function Expression(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, nodeQuery, nodesQuery, comparison, returnBlock, procedureCall, negatedExpression, bitwiseExpression, bracketedExpression) {
|
|
100
|
+
_class_call_check(this, Expression);
|
|
101
|
+
this.node = node;
|
|
102
|
+
this.nodes = nodes;
|
|
103
|
+
this.number = number;
|
|
104
|
+
this.string = string;
|
|
105
|
+
this.boolean = boolean;
|
|
106
|
+
this.some = some;
|
|
107
|
+
this.every = every;
|
|
108
|
+
this.reduce = reduce;
|
|
109
|
+
this.ternary = ternary;
|
|
110
|
+
this.variable = variable;
|
|
111
|
+
this.nodeQuery = nodeQuery;
|
|
112
|
+
this.nodesQuery = nodesQuery;
|
|
113
|
+
this.comparison = comparison;
|
|
114
|
+
this.returnBlock = returnBlock;
|
|
115
|
+
this.procedureCall = procedureCall;
|
|
116
|
+
this.negatedExpression = negatedExpression;
|
|
117
|
+
this.bitwiseExpression = bitwiseExpression;
|
|
118
|
+
this.bracketedExpression = bracketedExpression;
|
|
119
|
+
}
|
|
120
|
+
_create_class(Expression, [
|
|
121
|
+
{
|
|
122
|
+
key: "getNode",
|
|
123
|
+
value: function getNode() {
|
|
124
|
+
return this.node;
|
|
125
|
+
}
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
key: "getNodes",
|
|
129
|
+
value: function getNodes() {
|
|
130
|
+
return this.nodes;
|
|
131
|
+
}
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
key: "getNumber",
|
|
135
|
+
value: function getNumber() {
|
|
136
|
+
return this.number;
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
{
|
|
140
|
+
key: "getString",
|
|
141
|
+
value: function getString() {
|
|
142
|
+
return this.string;
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
key: "getBoolean",
|
|
147
|
+
value: function getBoolean() {
|
|
148
|
+
return this.boolean;
|
|
149
|
+
}
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
key: "getSome",
|
|
153
|
+
value: function getSome() {
|
|
154
|
+
return this.some;
|
|
155
|
+
}
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
key: "getEvery",
|
|
159
|
+
value: function getEvery() {
|
|
160
|
+
return this.every;
|
|
161
|
+
}
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
key: "getReduce",
|
|
165
|
+
value: function getReduce() {
|
|
166
|
+
return this.reduce;
|
|
167
|
+
}
|
|
168
|
+
},
|
|
169
|
+
{
|
|
170
|
+
key: "getTernary",
|
|
171
|
+
value: function getTernary() {
|
|
172
|
+
return this.ternay;
|
|
173
|
+
}
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
key: "getVariable",
|
|
177
|
+
value: function getVariable() {
|
|
178
|
+
return this.variable;
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
key: "getNodeQuery",
|
|
183
|
+
value: function getNodeQuery() {
|
|
184
|
+
return this.nodeQuery;
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
key: "getNodesQuery",
|
|
189
|
+
value: function getNodesQuery() {
|
|
190
|
+
return this.nodesQuery;
|
|
191
|
+
}
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
key: "getComparison",
|
|
195
|
+
value: function getComparison() {
|
|
196
|
+
return this.comparison;
|
|
197
|
+
}
|
|
198
|
+
},
|
|
199
|
+
{
|
|
200
|
+
key: "getReturnBlock",
|
|
201
|
+
value: function getReturnBlock() {
|
|
202
|
+
return this.returnBlock;
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
{
|
|
206
|
+
key: "getProcedureCall",
|
|
207
|
+
value: function getProcedureCall() {
|
|
208
|
+
return this.procedureCall;
|
|
209
|
+
}
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
key: "getNegatedExpression",
|
|
213
|
+
value: function getNegatedExpression() {
|
|
214
|
+
return this.negatedExpression;
|
|
215
|
+
}
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
key: "getBitwiseExpression",
|
|
219
|
+
value: function getBitwiseExpression() {
|
|
220
|
+
return this.bitwiseExpression;
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
key: "getBracketedExpression",
|
|
225
|
+
value: function getBracketedExpression() {
|
|
226
|
+
return this.bracketedExpression;
|
|
227
|
+
}
|
|
228
|
+
},
|
|
229
|
+
{
|
|
230
|
+
key: "getType",
|
|
231
|
+
value: function getType() {
|
|
232
|
+
var type;
|
|
233
|
+
if (false) {
|
|
234
|
+
///
|
|
235
|
+
} else if (this.node !== null) {
|
|
236
|
+
type = _types.NODE_TYPE;
|
|
237
|
+
} else if (this.nodes !== null) {
|
|
238
|
+
type = _types.NODES_TYPE;
|
|
239
|
+
} else if (this.number !== null) {
|
|
240
|
+
type = _types.NUMBER_TYPE;
|
|
241
|
+
} else if (this.string !== null) {
|
|
242
|
+
type = _types.STRING_TYPE;
|
|
243
|
+
} else if (this.boolean !== null) {
|
|
244
|
+
type = _types.BOOLEAN_TYPE;
|
|
245
|
+
} else if (this.some !== null) {
|
|
246
|
+
type = this.some.getType();
|
|
247
|
+
} else if (this.every !== null) {
|
|
248
|
+
type = this.every.getType();
|
|
249
|
+
} else if (this.reduce !== null) {
|
|
250
|
+
type = this.reduce.getType();
|
|
251
|
+
} else if (this.ternary !== null) {
|
|
252
|
+
type = this.ternary.getType();
|
|
253
|
+
} else if (this.variable !== null) {
|
|
254
|
+
type = this.variable.getType();
|
|
255
|
+
} else if (this.nodeQuery !== null) {
|
|
256
|
+
type = this.nodeQuery.getType();
|
|
257
|
+
} else if (this.nodesQuery !== null) {
|
|
258
|
+
type = this.nodesQuery.getType();
|
|
259
|
+
} else if (this.comparison !== null) {
|
|
260
|
+
type = this.comparison.getType();
|
|
261
|
+
} else if (this.returnBlock !== null) {
|
|
262
|
+
type = this.returnBlock.getType();
|
|
263
|
+
} else if (this.procedureCall !== null) {
|
|
264
|
+
type = this.procedureCall.getType();
|
|
265
|
+
} else if (this.negatedExpression !== null) {
|
|
266
|
+
type = this.negatedExpression.getType();
|
|
267
|
+
} else if (this.bitwiseExpression !== null) {
|
|
268
|
+
type = this.bitwiseExpression.getType();
|
|
269
|
+
} else if (this.bracketedExpression !== null) {
|
|
270
|
+
type = this.bracketedExpression.getType();
|
|
271
|
+
}
|
|
272
|
+
return type;
|
|
273
|
+
}
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
key: "asString",
|
|
277
|
+
value: function asString(context) {
|
|
278
|
+
var string;
|
|
279
|
+
if (false) {
|
|
280
|
+
///
|
|
281
|
+
} else if (this.node !== null) {
|
|
282
|
+
string = nodeAsString(this.node, context);
|
|
283
|
+
} else if (this.nodes !== null) {
|
|
284
|
+
string = nodesAsString(this.nodes, context);
|
|
285
|
+
} else if (this.number !== null) {
|
|
286
|
+
string = numberAsString(this.number);
|
|
287
|
+
} else if (this.string !== null) {
|
|
288
|
+
string = stringAsString(this.string);
|
|
289
|
+
} else if (this.boolean !== null) {
|
|
290
|
+
string = booleanAsString(this.boolean);
|
|
291
|
+
} else if (this.some !== null) {
|
|
292
|
+
string = this.some.getString();
|
|
293
|
+
} else if (this.every !== null) {
|
|
294
|
+
string = this.every.getString();
|
|
295
|
+
} else if (this.reduce !== null) {
|
|
296
|
+
string = this.reduce.getString();
|
|
297
|
+
} else if (this.ternary !== null) {
|
|
298
|
+
string = this.ternary.getString();
|
|
299
|
+
} else if (this.variable !== null) {
|
|
300
|
+
string = this.variable.getString();
|
|
301
|
+
} else if (this.nodeQuery !== null) {
|
|
302
|
+
string = this.nodeQuery.getString();
|
|
303
|
+
} else if (this.nodesQuery !== null) {
|
|
304
|
+
string = this.nodesQuery.getString();
|
|
305
|
+
} else if (this.comparison !== null) {
|
|
306
|
+
string = this.comparison.getString();
|
|
307
|
+
} else if (this.returnBlock !== null) {
|
|
308
|
+
string = this.returnBlock.getString();
|
|
309
|
+
} else if (this.procedureCall !== null) {
|
|
310
|
+
string = this.procedureCall.getString();
|
|
311
|
+
} else if (this.negatedExpression !== null) {
|
|
312
|
+
string = this.negatedExpression.getString();
|
|
313
|
+
} else if (this.bitwiseExpression !== null) {
|
|
314
|
+
string = this.bitwiseExpression.getString();
|
|
315
|
+
} else if (this.bracketedExpression !== null) {
|
|
316
|
+
string = this.bracketedExpression.getString();
|
|
317
|
+
}
|
|
318
|
+
return string;
|
|
319
|
+
}
|
|
320
|
+
},
|
|
321
|
+
{
|
|
322
|
+
key: "evaluate",
|
|
323
|
+
value: function evaluate(context) {
|
|
324
|
+
var expression;
|
|
325
|
+
if (false) {
|
|
326
|
+
///
|
|
327
|
+
} else if (this.node !== null || this.nodes !== null || this.number !== null || this.string !== null || this.boolean !== null) {
|
|
328
|
+
expression = this;
|
|
329
|
+
} else if (this.some !== null) {
|
|
330
|
+
expression = this.some.evaluate(context);
|
|
331
|
+
} else if (this.every !== null) {
|
|
332
|
+
expression = this.every.evaluate(context);
|
|
333
|
+
} else if (this.reduce !== null) {
|
|
334
|
+
expression = this.reduce.evaluate(context);
|
|
335
|
+
} else if (this.ternary !== null) {
|
|
336
|
+
expression = this.ternary.evaluate(context);
|
|
337
|
+
} else if (this.variable !== null) {
|
|
338
|
+
expression = this.variable.evaluate(context);
|
|
339
|
+
} else if (this.nodeQuery !== null) {
|
|
340
|
+
expression = this.nodeQuery.evaluate(context);
|
|
341
|
+
} else if (this.nodesQuery !== null) {
|
|
342
|
+
expression = this.nodesQuery.evaluate(context);
|
|
343
|
+
} else if (this.comparison !== null) {
|
|
344
|
+
expression = this.comparison.evaluate(context);
|
|
345
|
+
} else if (this.returnBlock !== null) {
|
|
346
|
+
expression = this.returnBlock.evaluate(context);
|
|
347
|
+
} else if (this.procedureCall !== null) {
|
|
348
|
+
expression = this.procedureCall.evaluate(context);
|
|
349
|
+
} else if (this.negatedExpression !== null) {
|
|
350
|
+
expression = this.negatedExpression.evaluate(context);
|
|
351
|
+
} else if (this.bitwiseExpression !== null) {
|
|
352
|
+
expression = this.bitwiseExpression.evaluate(context);
|
|
353
|
+
} else if (this.bracketedExpression !== null) {
|
|
354
|
+
expression = this.bracketedExpression.evaluate(context);
|
|
355
|
+
}
|
|
356
|
+
return expression;
|
|
357
|
+
}
|
|
358
|
+
},
|
|
359
|
+
{
|
|
360
|
+
key: "isEqualTo",
|
|
361
|
+
value: function isEqualTo(expression) {
|
|
362
|
+
var equalTo;
|
|
363
|
+
if (false) {
|
|
364
|
+
///
|
|
365
|
+
} else if (this.node !== null) {
|
|
366
|
+
var node = expression.getNode();
|
|
367
|
+
if (node === null) {
|
|
368
|
+
equalTo = false;
|
|
369
|
+
} else {
|
|
370
|
+
var nodeA = this.node, nodeB = node, nodeMatches = matchNode(nodeA, nodeB);
|
|
371
|
+
equalTo = nodeMatches; ///
|
|
372
|
+
}
|
|
373
|
+
} else if (this.nodes !== null) {
|
|
374
|
+
var nodes = expression.getNode();
|
|
375
|
+
if (nodes === null) {
|
|
376
|
+
equalTo = false;
|
|
377
|
+
} else {
|
|
378
|
+
var nodesA = this.nodes, nodesB = nodes, nodesMatch = matchNodes(nodesA, nodesB);
|
|
379
|
+
equalTo = nodesMatch; ///
|
|
380
|
+
}
|
|
381
|
+
} else if (this.number !== null) {
|
|
382
|
+
var number = expression.getNumber();
|
|
383
|
+
equalTo = this.number === number;
|
|
384
|
+
} else if (this.string !== null) {
|
|
385
|
+
var string = expression.getString();
|
|
386
|
+
equalTo = this.string === string;
|
|
387
|
+
} else if (this.boolean !== null) {
|
|
388
|
+
var boolean = expression.getBoolean();
|
|
389
|
+
equalTo = this.boolean === boolean;
|
|
390
|
+
} else {
|
|
391
|
+
debugger;
|
|
392
|
+
}
|
|
393
|
+
return equalTo;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
], [
|
|
397
|
+
{
|
|
398
|
+
key: "fromNode",
|
|
399
|
+
value: function fromNode(node, context) {
|
|
400
|
+
if (node === null) {
|
|
401
|
+
node = _nullNode.default;
|
|
402
|
+
}
|
|
403
|
+
var nodes = null, number = null, string = null, boolean = null, some = null, every = null, reduce = null, ternary = null, variable = null, _$nodeQuery = null, nodesQuery = null, comparison = null, returnBlock = null, procedureCall = null, negatedExpression = null, bitwiseExpression = null, bracketedExpression = null, expression = new Expression(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, _$nodeQuery, nodesQuery, comparison, returnBlock, procedureCall, negatedExpression, bitwiseExpression, bracketedExpression);
|
|
404
|
+
return expression;
|
|
405
|
+
}
|
|
406
|
+
},
|
|
407
|
+
{
|
|
408
|
+
key: "fromNodes",
|
|
409
|
+
value: function fromNodes(nodes, context) {
|
|
410
|
+
var node = null, number = null, string = null, boolean = null, ternary = null, some = null, every = null, reduce = null, variable = null, _$nodeQuery = null, nodesQuery = null, comparison = null, returnBlock = null, procedureCall = null, negatedExpression = null, bitwiseExpression = null, bracketedExpression = null, expression = new Expression(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, _$nodeQuery, nodesQuery, comparison, returnBlock, procedureCall, negatedExpression, bitwiseExpression, bracketedExpression);
|
|
411
|
+
return expression;
|
|
412
|
+
}
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
key: "fromString",
|
|
416
|
+
value: function fromString(string, context) {
|
|
417
|
+
var node = null, nodes = null, number = null, boolean = null, some = null, every = null, reduce = null, ternary = null, variable = null, _$nodeQuery = null, nodesQuery = null, comparison = null, returnBlock = null, procedureCall = null, negatedExpression = null, bitwiseExpression = null, bracketedExpression = null, expression = new Expression(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, _$nodeQuery, nodesQuery, comparison, returnBlock, procedureCall, negatedExpression, bitwiseExpression, bracketedExpression);
|
|
418
|
+
return expression;
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
key: "fromBoolean",
|
|
423
|
+
value: function fromBoolean(boolean, context) {
|
|
424
|
+
var node = null, nodes = null, number = null, string = null, some = null, every = null, reduce = null, ternary = null, variable = null, _$nodeQuery = null, nodesQuery = null, comparison = null, returnBlock = null, procedureCall = null, negatedExpression = null, bitwiseExpression = null, bracketedExpression = null, expression = new Expression(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, _$nodeQuery, nodesQuery, comparison, returnBlock, procedureCall, negatedExpression, bitwiseExpression, bracketedExpression);
|
|
425
|
+
return expression;
|
|
426
|
+
}
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
key: "fromExpressionNode",
|
|
430
|
+
value: function fromExpressionNode(expressionNode, context) {
|
|
431
|
+
var expression = expressionFromExpressionNode(expressionNode, context);
|
|
432
|
+
return expression;
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
{
|
|
436
|
+
key: "fromReduceNode",
|
|
437
|
+
value: function fromReduceNode(reduceNode, context) {
|
|
438
|
+
var reduceExpressionNode = reduceExpressionNodeQuery(reduceNode), expressionNode = reduceExpressionNode, expression = expressionFromExpressionNode(expressionNode, context);
|
|
439
|
+
return expression;
|
|
440
|
+
}
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
key: "fromTernaryNode",
|
|
444
|
+
value: function fromTernaryNode(ternaryNode, context) {
|
|
445
|
+
var ternaryExpressionNode = ternaryExpressionNodeQuery(ternaryNode), expressionNode = ternaryExpressionNode, expression = expressionFromExpressionNode(expressionNode, context);
|
|
446
|
+
return expression;
|
|
447
|
+
}
|
|
448
|
+
},
|
|
449
|
+
{
|
|
450
|
+
key: "fromReturnStatementNode",
|
|
451
|
+
value: function fromReturnStatementNode(returnStatementNode, context) {
|
|
452
|
+
var returnStatementExpressionNode = returnStatementExpressionNodeQuery(returnStatementNode), expressionNode = returnStatementExpressionNode, expression = expressionFromExpressionNode(expressionNode, context);
|
|
453
|
+
return expression;
|
|
454
|
+
}
|
|
455
|
+
},
|
|
456
|
+
{
|
|
457
|
+
key: "fromVariableAssignmentNode",
|
|
458
|
+
value: function fromVariableAssignmentNode(variableAssigmentNode, context) {
|
|
459
|
+
var variableAssignmentExpressionNode = variableAssignmentExpressionNodeQuery(variableAssigmentNode), expressionNode = variableAssignmentExpressionNode, expression = expressionFromExpressionNode(expressionNode, context);
|
|
460
|
+
return expression;
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
]);
|
|
464
|
+
return Expression;
|
|
465
|
+
}(), _define_property(_Expression, "name", "Expression"), _Expression));
|
|
466
|
+
function matchNode(nodeA, nodeB) {
|
|
467
|
+
var nodeMatches;
|
|
468
|
+
if (nodeA === _nullNode.default || nodeB === _nullNode.default) {
|
|
469
|
+
nodeMatches = nodeA === nodeB;
|
|
470
|
+
} else {
|
|
471
|
+
var nodeAEqualToNodeA = nodeA.isEqualTo(nodeB);
|
|
472
|
+
nodeMatches = nodeAEqualToNodeA; ///
|
|
473
|
+
}
|
|
474
|
+
return nodeMatches;
|
|
475
|
+
}
|
|
476
|
+
function matchNodes(nodesA, nodesB) {
|
|
477
|
+
var nodesMatch;
|
|
478
|
+
nodesMatch = match(nodesA, nodesB, function(nodeA, nodeB) {
|
|
479
|
+
var nodeMatches = matchNode(nodeA, nodeB);
|
|
480
|
+
if (nodeMatches) {
|
|
481
|
+
return true;
|
|
482
|
+
}
|
|
483
|
+
});
|
|
484
|
+
return nodesMatch;
|
|
485
|
+
}
|
|
486
|
+
function nodeAsString(node, context) {
|
|
487
|
+
var string;
|
|
488
|
+
var nodeString = node === _nullNode.default ? _constants.NULL : context.nodeAsString(node);
|
|
489
|
+
string = "'".concat(nodeString, "'");
|
|
490
|
+
return string;
|
|
491
|
+
}
|
|
492
|
+
function nodesAsString(nodes, context) {
|
|
493
|
+
var string;
|
|
494
|
+
var nodesString = context.nodesAsString(nodes);
|
|
495
|
+
string = "'".concat(nodesString, "'");
|
|
496
|
+
return string;
|
|
497
|
+
}
|
|
498
|
+
function numberAsString(number) {
|
|
499
|
+
var string;
|
|
500
|
+
string = "".concat(number);
|
|
501
|
+
return string;
|
|
502
|
+
}
|
|
503
|
+
function stringAsString(string) {
|
|
504
|
+
string = '"'.concat(string, '"'); ///
|
|
505
|
+
return string;
|
|
506
|
+
}
|
|
507
|
+
function booleanAsString(boolean) {
|
|
508
|
+
var string;
|
|
509
|
+
string = "'".concat(boolean, "'");
|
|
510
|
+
return string;
|
|
511
|
+
}
|
|
512
|
+
function expressionFromExpressionNode(expressionNode, context) {
|
|
513
|
+
var Some = _elements.default.Some, Every = _elements.default.Every, Reduce = _elements.default.Reduce, Expression = _elements.default.Expression, Ternary = _elements.default.Ternary, Variable = _elements.default.Variable, NodeQuery = _elements.default.NodeQuery, NodesQuery = _elements.default.NodesQuery, Comparison = _elements.default.Comparison, ReturnBlock = _elements.default.ReturnBlock, ProcedureCall = _elements.default.ProcedureCall, NegatedExpression = _elements.default.NegatedExpression, BitwiseExpression = _elements.default.BitwiseExpression, BracketedExpression = _elements.default.BracketedExpression, node = nodeFromExpressionNode(expressionNode, context), nodes = nodesFromExpressionNode(expressionNode, context), number = numberFromExpressionNode(expressionNode, context), string = stringFromExpressionNode(expressionNode, context), boolean = booleanFromExpressionNode(expressionNode, context), some = Some.fromExpressionNode(expressionNode, context), every = Every.fromExpressionNode(expressionNode, context), reduce = Reduce.fromExpressionNode(expressionNode, context), ternary = Ternary.fromExpressionNode(expressionNode, context), variable = Variable.fromExpressionNode(expressionNode, context), _$nodeQuery = NodeQuery.fromExpressionNode(expressionNode, context), nodesQuery = NodesQuery.fromExpressionNode(expressionNode, context), comparison = Comparison.fromExpressionNode(expressionNode, context), returnBlock = ReturnBlock.fromExpressionNode(expressionNode, context), procedureCall = ProcedureCall.fromExpressionNode(expressionNode, context), negatedExpression = NegatedExpression.fromExpressionNode(expressionNode, context), bitwiseExpression = BitwiseExpression.fromExpressionNode(expressionNode, context), bracketedExpression = BracketedExpression.fromExpressionNode(expressionNode, context), expression = new Expression(node, nodes, number, string, boolean, some, every, reduce, ternary, variable, _$nodeQuery, nodesQuery, comparison, returnBlock, procedureCall, negatedExpression, bitwiseExpression, bracketedExpression);
|
|
514
|
+
return expression;
|
|
515
|
+
}
|
|
516
|
+
function nodeFromExpressionNode(expressionNode, context) {
|
|
517
|
+
var node = null;
|
|
518
|
+
var primitiveTerminalNode = primitiveTerminalNodeQuery(expressionNode);
|
|
519
|
+
if (primitiveTerminalNode !== null) {
|
|
520
|
+
var primitiveTerminalNodeContent = primitiveTerminalNode.getContent();
|
|
521
|
+
switch(primitiveTerminalNodeContent){
|
|
522
|
+
case _constants.NULL:
|
|
523
|
+
{
|
|
524
|
+
node = _nullNode.default;
|
|
525
|
+
break;
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
return node;
|
|
530
|
+
}
|
|
531
|
+
function nodesFromExpressionNode(expressionNode, context) {
|
|
532
|
+
var nodes = null; ///
|
|
533
|
+
return nodes;
|
|
534
|
+
}
|
|
535
|
+
function numberFromExpressionNode(expressionNode, context) {
|
|
536
|
+
var number = null;
|
|
537
|
+
var numberTerminalNode = numberTerminalNodeQuery(expressionNode);
|
|
538
|
+
if (numberTerminalNode !== null) {
|
|
539
|
+
var numberTerminalNodeContent = numberTerminalNode.getContent();
|
|
540
|
+
number = Number(numberTerminalNodeContent);
|
|
541
|
+
}
|
|
542
|
+
return number;
|
|
543
|
+
}
|
|
544
|
+
function stringFromExpressionNode(expressionNode, context) {
|
|
545
|
+
var string = null;
|
|
546
|
+
var stringLiteralTerminalNode = stringLiteralTerminalNodeQuery(expressionNode);
|
|
547
|
+
if (stringLiteralTerminalNode !== null) {
|
|
548
|
+
var stringLiteralTerminalNodeContent = stringLiteralTerminalNode.getContent(), stringLiteral = stringLiteralTerminalNodeContent; ///
|
|
549
|
+
string = stringFromStringLiteral(stringLiteral, context);
|
|
550
|
+
}
|
|
551
|
+
return string;
|
|
552
|
+
}
|
|
553
|
+
function booleanFromExpressionNode(expressionNode, context) {
|
|
554
|
+
var boolean = null;
|
|
555
|
+
var primitiveTerminalNode = primitiveTerminalNodeQuery(expressionNode);
|
|
556
|
+
if (primitiveTerminalNode !== null) {
|
|
557
|
+
var primitiveTerminalNodeContent = primitiveTerminalNode.getContent();
|
|
558
|
+
switch(primitiveTerminalNodeContent){
|
|
559
|
+
case _constants.TRUE:
|
|
560
|
+
{
|
|
561
|
+
boolean = true;
|
|
562
|
+
break;
|
|
563
|
+
}
|
|
564
|
+
case _constants.FALSE:
|
|
565
|
+
{
|
|
566
|
+
boolean = false;
|
|
567
|
+
break;
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
return boolean;
|
|
572
|
+
}
|
|
573
|
+
function stringFromStringLiteral(stringLiteral, context) {
|
|
574
|
+
var string = stringLiteral.replace(/(^"|"$)/g, _constants.EMPTY_STRING);
|
|
575
|
+
return string;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9lbGVtZW50L2V4cHJlc3Npb24uanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgZWxlbWVudHMgZnJvbSBcIi4uL2VsZW1lbnRzXCI7XG5pbXBvcnQgbnVsbE5vZGUgZnJvbSBcIi4uL251bGxOb2RlXCI7XG5cbmltcG9ydCB7IGRlZmluZSB9IGZyb20gXCIuLi9lbGVtZW50c1wiO1xuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgTlVMTCwgVFJVRSwgRkFMU0UsIEVNUFRZX1NUUklORyB9IGZyb20gXCIuLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IE5PREVfVFlQRSwgTk9ERVNfVFlQRSwgTlVNQkVSX1RZUEUsIFNUUklOR19UWVBFLCBCT09MRUFOX1RZUEUgfSBmcm9tIFwiLi4vdHlwZXNcIjtcblxuY29uc3QgeyBtYXRjaCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmNvbnN0IG51bWJlclRlcm1pbmFsTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL2V4cHJlc3Npb24vQG51bWJlclwiKSxcbiAgICAgIHJlZHVjZUV4cHJlc3Npb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvcmVkdWNlL2V4cHJlc3Npb25cIiksXG4gICAgICBwcmltaXRpdmVUZXJtaW5hbE5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9leHByZXNzaW9uL0BwcmltaXRpdmVcIiksXG4gICAgICB0ZXJuYXJ5RXhwcmVzc2lvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi90ZXJuYXJ5L2V4cHJlc3Npb25cIiksXG4gICAgICBzdHJpbmdMaXRlcmFsVGVybWluYWxOb2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvZXhwcmVzc2lvbi9Ac3RyaW5nLWxpdGVyYWxcIiksXG4gICAgICByZXR1cm5TdGF0ZW1lbnRFeHByZXNzaW9uTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3JldHVyblN0YXRlbWVudC9leHByZXNzaW9uXCIpLFxuICAgICAgdmFyaWFibGVBc3NpZ25tZW50RXhwcmVzc2lvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi92YXJpYWJsZUFzc2lnbm1lbnQvZXhwcmVzc2lvblwiKTtcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lKGNsYXNzIEV4cHJlc3Npb24ge1xuICBjb25zdHJ1Y3Rvcihub2RlLCBub2RlcywgbnVtYmVyLCBzdHJpbmcsIGJvb2xlYW4sIHNvbWUsIGV2ZXJ5LCByZWR1Y2UsIHRlcm5hcnksIHZhcmlhYmxlLCBub2RlUXVlcnksIG5vZGVzUXVlcnksIGNvbXBhcmlzb24sIHJldHVybkJsb2NrLCBwcm9jZWR1cmVDYWxsLCBuZWdhdGVkRXhwcmVzc2lvbiwgYml0d2lzZUV4cHJlc3Npb24sIGJyYWNrZXRlZEV4cHJlc3Npb24pIHtcbiAgICB0aGlzLm5vZGUgPSBub2RlO1xuICAgIHRoaXMubm9kZXMgPSBub2RlcztcbiAgICB0aGlzLm51bWJlciA9IG51bWJlcjtcbiAgICB0aGlzLnN0cmluZyA9IHN0cmluZztcbiAgICB0aGlzLmJvb2xlYW4gPSBib29sZWFuO1xuICAgIHRoaXMuc29tZSA9IHNvbWU7XG4gICAgdGhpcy5ldmVyeSA9IGV2ZXJ5O1xuICAgIHRoaXMucmVkdWNlID0gcmVkdWNlO1xuICAgIHRoaXMudGVybmFyeSA9IHRlcm5hcnk7XG4gICAgdGhpcy52YXJpYWJsZSA9IHZhcmlhYmxlO1xuICAgIHRoaXMubm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5O1xuICAgIHRoaXMubm9kZXNRdWVyeSA9IG5vZGVzUXVlcnk7XG4gICAgdGhpcy5jb21wYXJpc29uID0gY29tcGFyaXNvbjtcbiAgICB0aGlzLnJldHVybkJsb2NrID0gcmV0dXJuQmxvY2s7XG4gICAgdGhpcy5wcm9jZWR1cmVDYWxsID0gcHJvY2VkdXJlQ2FsbDtcbiAgICB0aGlzLm5lZ2F0ZWRFeHByZXNzaW9uID0gbmVnYXRlZEV4cHJlc3Npb247XG4gICAgdGhpcy5iaXR3aXNlRXhwcmVzc2lvbiA9IGJpdHdpc2VFeHByZXNzaW9uO1xuICAgIHRoaXMuYnJhY2tldGVkRXhwcmVzc2lvbiA9IGJyYWNrZXRlZEV4cHJlc3Npb247XG4gIH1cblxuICBnZXROb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm5vZGU7XG4gIH1cblxuICBnZXROb2RlcygpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlcztcbiAgfVxuXG4gIGdldE51bWJlcigpIHtcbiAgICByZXR1cm4gdGhpcy5udW1iZXI7XG4gIH1cblxuICBnZXRTdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RyaW5nO1xuICB9XG5cbiAgZ2V0Qm9vbGVhbigpIHtcbiAgICByZXR1cm4gdGhpcy5ib29sZWFuO1xuICB9XG5cbiAgZ2V0U29tZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zb21lO1xuICB9XG5cbiAgZ2V0RXZlcnkoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlcnk7XG4gIH1cblxuICBnZXRSZWR1Y2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVkdWNlO1xuICB9XG5cbiAgZ2V0VGVybmFyeSgpIHtcbiAgICByZXR1cm4gdGhpcy50ZXJuYXk7XG4gIH1cblxuICBnZXRWYXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy52YXJpYWJsZTtcbiAgfVxuXG4gIGdldE5vZGVRdWVyeSgpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlUXVlcnk7XG4gIH1cblxuICBnZXROb2Rlc1F1ZXJ5KCkge1xuICAgIHJldHVybiB0aGlzLm5vZGVzUXVlcnk7XG4gIH1cblxuICBnZXRDb21wYXJpc29uKCkge1xuICAgIHJldHVybiB0aGlzLmNvbXBhcmlzb247XG4gIH1cblxuICBnZXRSZXR1cm5CbG9jaygpIHtcbiAgICByZXR1cm4gdGhpcy5yZXR1cm5CbG9jaztcbiAgfVxuXG4gIGdldFByb2NlZHVyZUNhbGwoKSB7XG4gICAgcmV0dXJuIHRoaXMucHJvY2VkdXJlQ2FsbDtcbiAgfVxuXG4gIGdldE5lZ2F0ZWRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLm5lZ2F0ZWRFeHByZXNzaW9uO1xuICB9XG5cbiAgZ2V0Qml0d2lzZUV4cHJlc3Npb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYml0d2lzZUV4cHJlc3Npb247XG4gIH1cblxuICBnZXRCcmFja2V0ZWRFeHByZXNzaW9uKCkge1xuICAgIHJldHVybiB0aGlzLmJyYWNrZXRlZEV4cHJlc3Npb247XG4gIH1cblxuICBnZXRUeXBlKCkge1xuICAgIGxldCB0eXBlO1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKHRoaXMubm9kZSAhPT0gbnVsbCkge1xuICAgICAgdHlwZSA9IE5PREVfVFlQRTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubm9kZXMgIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSBOT0RFU19UWVBFO1xuICAgIH0gZWxzZSBpZiAodGhpcy5udW1iZXIgIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSBOVU1CRVJfVFlQRTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuc3RyaW5nICE9PSBudWxsKSB7XG4gICAgICB0eXBlID0gU1RSSU5HX1RZUEU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJvb2xlYW4gIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSBCT09MRUFOX1RZUEU7XG4gICAgfSBlbHNlIGlmICh0aGlzLnNvbWUgIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSB0aGlzLnNvbWUuZ2V0VHlwZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ldmVyeSAhPT0gbnVsbCkge1xuICAgICAgdHlwZSA9IHRoaXMuZXZlcnkuZ2V0VHlwZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZWR1Y2UgIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSB0aGlzLnJlZHVjZS5nZXRUeXBlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnRlcm5hcnkgIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSB0aGlzLnRlcm5hcnkuZ2V0VHlwZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgdHlwZSA9IHRoaXMudmFyaWFibGUuZ2V0VHlwZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ub2RlUXVlcnkgIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSB0aGlzLm5vZGVRdWVyeS5nZXRUeXBlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5vZGVzUXVlcnkgIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSB0aGlzLm5vZGVzUXVlcnkuZ2V0VHlwZSgpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb21wYXJpc29uICE9PSBudWxsKSB7XG4gICAgICB0eXBlID0gdGhpcy5jb21wYXJpc29uLmdldFR5cGUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucmV0dXJuQmxvY2sgIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSB0aGlzLnJldHVybkJsb2NrLmdldFR5cGUoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvY2VkdXJlQ2FsbCAhPT0gbnVsbCkge1xuICAgICAgdHlwZSA9IHRoaXMucHJvY2VkdXJlQ2FsbC5nZXRUeXBlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0ZWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICB0eXBlID0gdGhpcy5uZWdhdGVkRXhwcmVzc2lvbi5nZXRUeXBlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJpdHdpc2VFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICB0eXBlID0gdGhpcy5iaXR3aXNlRXhwcmVzc2lvbi5nZXRUeXBlKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJyYWNrZXRlZEV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIHR5cGUgPSB0aGlzLmJyYWNrZXRlZEV4cHJlc3Npb24uZ2V0VHlwZSgpO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xuICB9XG5cbiAgYXNTdHJpbmcoY29udGV4dCkge1xuICAgIGxldCBzdHJpbmc7XG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAodGhpcy5ub2RlICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSBub2RlQXNTdHJpbmcodGhpcy5ub2RlLCBjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubm9kZXMgIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IG5vZGVzQXNTdHJpbmcodGhpcy5ub2RlcywgY29udGV4dCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm51bWJlciAhPT0gbnVsbCkge1xuICAgICAgc3RyaW5nID0gbnVtYmVyQXNTdHJpbmcodGhpcy5udW1iZXIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdHJpbmcgIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IHN0cmluZ0FzU3RyaW5nKHRoaXMuc3RyaW5nKVxuICAgIH0gZWxzZSBpZiAodGhpcy5ib29sZWFuICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSBib29sZWFuQXNTdHJpbmcodGhpcy5ib29sZWFuKVxuICAgIH0gZWxzZSBpZiAodGhpcy5zb21lICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSB0aGlzLnNvbWUuZ2V0U3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmV2ZXJ5ICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSB0aGlzLmV2ZXJ5LmdldFN0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZWR1Y2UgIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IHRoaXMucmVkdWNlLmdldFN0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50ZXJuYXJ5ICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSB0aGlzLnRlcm5hcnkuZ2V0U3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnZhcmlhYmxlICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSB0aGlzLnZhcmlhYmxlLmdldFN0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ub2RlUXVlcnkgIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IHRoaXMubm9kZVF1ZXJ5LmdldFN0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ub2Rlc1F1ZXJ5ICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSB0aGlzLm5vZGVzUXVlcnkuZ2V0U3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbXBhcmlzb24gIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IHRoaXMuY29tcGFyaXNvbi5nZXRTdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMucmV0dXJuQmxvY2sgIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IHRoaXMucmV0dXJuQmxvY2suZ2V0U3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb2NlZHVyZUNhbGwgIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IHRoaXMucHJvY2VkdXJlQ2FsbC5nZXRTdHJpbmcoKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMubmVnYXRlZEV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIHN0cmluZyA9IHRoaXMubmVnYXRlZEV4cHJlc3Npb24uZ2V0U3RyaW5nKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJpdHdpc2VFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSB0aGlzLmJpdHdpc2VFeHByZXNzaW9uLmdldFN0cmluZygpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5icmFja2V0ZWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBzdHJpbmcgPSB0aGlzLmJyYWNrZXRlZEV4cHJlc3Npb24uZ2V0U3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0cmluZztcbiAgfVxuXG4gIGV2YWx1YXRlKGNvbnRleHQpIHtcbiAgICBsZXQgZXhwcmVzc2lvbjtcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICgodGhpcy5ub2RlICE9PSBudWxsKSAgfHxcbiAgICAgICAgICAgICAgICh0aGlzLm5vZGVzICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgKHRoaXMubnVtYmVyICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgKHRoaXMuc3RyaW5nICE9PSBudWxsKSB8fFxuICAgICAgICAgICAgICAgKHRoaXMuYm9vbGVhbiAhPT0gbnVsbCkpIHtcbiAgICAgIGV4cHJlc3Npb24gPSB0aGlzO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zb21lICE9PSBudWxsKSB7XG4gICAgICBleHByZXNzaW9uID0gdGhpcy5zb21lLmV2YWx1YXRlKGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ldmVyeSAhPT0gbnVsbCkge1xuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMuZXZlcnkuZXZhbHVhdGUoY29udGV4dCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlZHVjZSAhPT0gbnVsbCkge1xuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMucmVkdWNlLmV2YWx1YXRlKGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy50ZXJuYXJ5ICE9PSBudWxsKSB7XG4gICAgICBleHByZXNzaW9uID0gdGhpcy50ZXJuYXJ5LmV2YWx1YXRlKGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy52YXJpYWJsZSAhPT0gbnVsbCkge1xuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMudmFyaWFibGUuZXZhbHVhdGUoY29udGV4dCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5vZGVRdWVyeSAhPT0gbnVsbCkge1xuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMubm9kZVF1ZXJ5LmV2YWx1YXRlKGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ub2Rlc1F1ZXJ5ICE9PSBudWxsKSB7XG4gICAgICBleHByZXNzaW9uID0gdGhpcy5ub2Rlc1F1ZXJ5LmV2YWx1YXRlKGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5jb21wYXJpc29uICE9PSBudWxsKSB7XG4gICAgICBleHByZXNzaW9uID0gdGhpcy5jb21wYXJpc29uLmV2YWx1YXRlKGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5yZXR1cm5CbG9jayAhPT0gbnVsbCkge1xuICAgICAgZXhwcmVzc2lvbiA9IHRoaXMucmV0dXJuQmxvY2suZXZhbHVhdGUoY29udGV4dCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb2NlZHVyZUNhbGwgIT09IG51bGwpIHtcbiAgICAgIGV4cHJlc3Npb24gPSB0aGlzLnByb2NlZHVyZUNhbGwuZXZhbHVhdGUoY29udGV4dCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLm5lZ2F0ZWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBleHByZXNzaW9uID0gdGhpcy5uZWdhdGVkRXhwcmVzc2lvbi5ldmFsdWF0ZShjb250ZXh0KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuYml0d2lzZUV4cHJlc3Npb24gIT09IG51bGwpIHtcbiAgICAgIGV4cHJlc3Npb24gPSB0aGlzLmJpdHdpc2VFeHByZXNzaW9uLmV2YWx1YXRlKGNvbnRleHQpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5icmFja2V0ZWRFeHByZXNzaW9uICE9PSBudWxsKSB7XG4gICAgICBleHByZXNzaW9uID0gdGhpcy5icmFja2V0ZWRFeHByZXNzaW9uLmV2YWx1YXRlKGNvbnRleHQpO1xuICAgIH1cblxuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgaXNFcXVhbFRvKGV4cHJlc3Npb24pIHtcbiAgICBsZXQgZXF1YWxUbztcblxuICAgIGlmIChmYWxzZSkge1xuICAgICAgLy8vXG4gICAgfSBlbHNlIGlmICh0aGlzLm5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBleHByZXNzaW9uLmdldE5vZGUoKTtcblxuICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHtcbiAgICAgICAgZXF1YWxUbyA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgbm9kZUEgPSB0aGlzLm5vZGUsICAvLy9cbiAgICAgICAgICAgICAgbm9kZUIgPSBub2RlLCAvLy9cbiAgICAgICAgICAgICAgbm9kZU1hdGNoZXMgPSBtYXRjaE5vZGUobm9kZUEsIG5vZGVCKTtcblxuICAgICAgICBlcXVhbFRvID0gbm9kZU1hdGNoZXM7ICAvLy9cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMubm9kZXMgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG5vZGVzID0gZXhwcmVzc2lvbi5nZXROb2RlKCk7XG5cbiAgICAgIGlmIChub2RlcyA9PT0gbnVsbCkge1xuICAgICAgICBlcXVhbFRvID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBub2Rlc0EgPSB0aGlzLm5vZGVzLCAgLy8vXG4gICAgICAgICAgICAgIG5vZGVzQiA9IG5vZGVzLCAvLy9cbiAgICAgICAgICAgICAgbm9kZXNNYXRjaCA9IG1hdGNoTm9kZXMobm9kZXNBLCBub2Rlc0IpO1xuXG4gICAgICAgIGVxdWFsVG8gPSBub2Rlc01hdGNoOyAvLy9cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMubnVtYmVyICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBudW1iZXIgPSBleHByZXNzaW9uLmdldE51bWJlcigpO1xuXG4gICAgICBlcXVhbFRvID0gKHRoaXMubnVtYmVyID09PSBudW1iZXIpO1xuICAgIH0gZWxzZSBpZiAodGhpcy5zdHJpbmcgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHN0cmluZyA9IGV4cHJlc3Npb24uZ2V0U3RyaW5nKCk7XG5cbiAgICAgIGVxdWFsVG8gPSAodGhpcy5zdHJpbmcgPT09IHN0cmluZyk7XG4gICAgfSBlbHNlIGlmICh0aGlzLmJvb2xlYW4gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGJvb2xlYW4gPSBleHByZXNzaW9uLmdldEJvb2xlYW4oKTtcblxuICAgICAgZXF1YWxUbyA9ICh0aGlzLmJvb2xlYW4gPT09IGJvb2xlYW4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWJ1Z2dlclxuICAgIH1cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgc3RhdGljIG5hbWUgPSBcIkV4cHJlc3Npb25cIjtcblxuICBzdGF0aWMgZnJvbU5vZGUobm9kZSwgY29udGV4dCkge1xuICAgIGlmIChub2RlID09PSBudWxsKSB7XG4gICAgICBub2RlID0gbnVsbE5vZGU7XG4gICAgfVxuXG4gICAgY29uc3Qgbm9kZXMgPSBudWxsLFxuICAgICAgICAgIG51bWJlciA9IG51bGwsXG4gICAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgICBib29sZWFuID0gbnVsbCxcbiAgICAgICAgICBzb21lID0gbnVsbCxcbiAgICAgICAgICBldmVyeSA9IG51bGwsXG4gICAgICAgICAgcmVkdWNlID0gbnVsbCxcbiAgICAgICAgICB0ZXJuYXJ5ID0gbnVsbCxcbiAgICAgICAgICB2YXJpYWJsZSA9IG51bGwsXG4gICAgICAgICAgbm9kZVF1ZXJ5ID0gbnVsbCxcbiAgICAgICAgICBub2Rlc1F1ZXJ5ID0gbnVsbCxcbiAgICAgICAgICBjb21wYXJpc29uID0gbnVsbCxcbiAgICAgICAgICByZXR1cm5CbG9jayA9IG51bGwsXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IG51bGwsXG4gICAgICAgICAgbmVnYXRlZEV4cHJlc3Npb24gPSBudWxsLFxuICAgICAgICAgIGJpdHdpc2VFeHByZXNzaW9uID0gbnVsbCxcbiAgICAgICAgICBicmFja2V0ZWRFeHByZXNzaW9uID0gbnVsbCxcbiAgICAgICAgICBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24obm9kZSwgbm9kZXMsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCB2YXJpYWJsZSwgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5LCBjb21wYXJpc29uLCByZXR1cm5CbG9jaywgcHJvY2VkdXJlQ2FsbCwgbmVnYXRlZEV4cHJlc3Npb24sIGJpdHdpc2VFeHByZXNzaW9uLCBicmFja2V0ZWRFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob2Rlcyhub2RlcywgY29udGV4dCkge1xuICAgIGNvbnN0IG5vZGUgPSBudWxsLFxuICAgICAgICAgIG51bWJlciA9IG51bGwsXG4gICAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgICBib29sZWFuID0gbnVsbCxcbiAgICAgICAgICB0ZXJuYXJ5ID0gbnVsbCxcbiAgICAgICAgICBzb21lID0gbnVsbCxcbiAgICAgICAgICBldmVyeSA9IG51bGwsXG4gICAgICAgICAgcmVkdWNlID0gbnVsbCxcbiAgICAgICAgICB2YXJpYWJsZSA9IG51bGwsXG4gICAgICAgICAgbm9kZVF1ZXJ5ID0gbnVsbCxcbiAgICAgICAgICBub2Rlc1F1ZXJ5ID0gbnVsbCxcbiAgICAgICAgICBjb21wYXJpc29uID0gbnVsbCxcbiAgICAgICAgICByZXR1cm5CbG9jayA9IG51bGwsXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IG51bGwsXG4gICAgICAgICAgbmVnYXRlZEV4cHJlc3Npb24gPSBudWxsLFxuICAgICAgICAgIGJpdHdpc2VFeHByZXNzaW9uID0gbnVsbCxcbiAgICAgICAgICBicmFja2V0ZWRFeHByZXNzaW9uID0gbnVsbCxcbiAgICAgICAgICBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24obm9kZSwgbm9kZXMsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCB2YXJpYWJsZSwgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5LCBjb21wYXJpc29uLCByZXR1cm5CbG9jaywgcHJvY2VkdXJlQ2FsbCwgbmVnYXRlZEV4cHJlc3Npb24sIGJpdHdpc2VFeHByZXNzaW9uLCBicmFja2V0ZWRFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdHJpbmcoc3RyaW5nLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgbm9kZSA9IG51bGwsXG4gICAgICAgICAgbm9kZXMgPSBudWxsLFxuICAgICAgICAgIG51bWJlciA9IG51bGwsXG4gICAgICAgICAgYm9vbGVhbiA9IG51bGwsXG4gICAgICAgICAgc29tZSA9IG51bGwsXG4gICAgICAgICAgZXZlcnkgPSBudWxsLFxuICAgICAgICAgIHJlZHVjZSA9IG51bGwsXG4gICAgICAgICAgdGVybmFyeSA9IG51bGwsXG4gICAgICAgICAgdmFyaWFibGUgPSBudWxsLFxuICAgICAgICAgIG5vZGVRdWVyeSA9IG51bGwsXG4gICAgICAgICAgbm9kZXNRdWVyeSA9IG51bGwsXG4gICAgICAgICAgY29tcGFyaXNvbiA9IG51bGwsXG4gICAgICAgICAgcmV0dXJuQmxvY2sgPSBudWxsLFxuICAgICAgICAgIHByb2NlZHVyZUNhbGwgPSBudWxsLFxuICAgICAgICAgIG5lZ2F0ZWRFeHByZXNzaW9uID0gbnVsbCxcbiAgICAgICAgICBiaXR3aXNlRXhwcmVzc2lvbiA9IG51bGwsXG4gICAgICAgICAgYnJhY2tldGVkRXhwcmVzc2lvbiA9IG51bGwsXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IG5ldyBFeHByZXNzaW9uKG5vZGUsIG5vZGVzLCBudW1iZXIsIHN0cmluZywgYm9vbGVhbiwgc29tZSwgZXZlcnksIHJlZHVjZSwgdGVybmFyeSwgdmFyaWFibGUsIG5vZGVRdWVyeSwgbm9kZXNRdWVyeSwgY29tcGFyaXNvbiwgcmV0dXJuQmxvY2ssIHByb2NlZHVyZUNhbGwsIG5lZ2F0ZWRFeHByZXNzaW9uLCBiaXR3aXNlRXhwcmVzc2lvbiwgYnJhY2tldGVkRXhwcmVzc2lvbik7XG5cbiAgICByZXR1cm4gZXhwcmVzc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tQm9vbGVhbihib29sZWFuLCBjb250ZXh0KSB7XG4gICAgY29uc3Qgbm9kZSA9IG51bGwsXG4gICAgICAgICAgbm9kZXMgPSBudWxsLFxuICAgICAgICAgIG51bWJlciA9IG51bGwsXG4gICAgICAgICAgc3RyaW5nID0gbnVsbCxcbiAgICAgICAgICBzb21lID0gbnVsbCxcbiAgICAgICAgICBldmVyeSA9IG51bGwsXG4gICAgICAgICAgcmVkdWNlID0gbnVsbCxcbiAgICAgICAgICB0ZXJuYXJ5ID0gbnVsbCxcbiAgICAgICAgICB2YXJpYWJsZSA9IG51bGwsXG4gICAgICAgICAgbm9kZVF1ZXJ5ID0gbnVsbCxcbiAgICAgICAgICBub2Rlc1F1ZXJ5ID0gbnVsbCxcbiAgICAgICAgICBjb21wYXJpc29uID0gbnVsbCxcbiAgICAgICAgICByZXR1cm5CbG9jayA9IG51bGwsXG4gICAgICAgICAgcHJvY2VkdXJlQ2FsbCA9IG51bGwsXG4gICAgICAgICAgbmVnYXRlZEV4cHJlc3Npb24gPSBudWxsLFxuICAgICAgICAgIGJpdHdpc2VFeHByZXNzaW9uID0gbnVsbCxcbiAgICAgICAgICBicmFja2V0ZWRFeHByZXNzaW9uID0gbnVsbCxcbiAgICAgICAgICBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24obm9kZSwgbm9kZXMsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCB2YXJpYWJsZSwgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5LCBjb21wYXJpc29uLCByZXR1cm5CbG9jaywgcHJvY2VkdXJlQ2FsbCwgbmVnYXRlZEV4cHJlc3Npb24sIGJpdHdpc2VFeHByZXNzaW9uLCBicmFja2V0ZWRFeHByZXNzaW9uKTtcblxuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICAgIGNvbnN0IGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21SZWR1Y2VOb2RlKHJlZHVjZU5vZGUsIGNvbnRleHQpIHtcbiAgICBjb25zdCByZWR1Y2VFeHByZXNzaW9uTm9kZSA9IHJlZHVjZUV4cHJlc3Npb25Ob2RlUXVlcnkocmVkdWNlTm9kZSksXG4gICAgICAgICAgZXhwcmVzc2lvbk5vZGUgPSByZWR1Y2VFeHByZXNzaW9uTm9kZSwgLy8vXG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpO1xuXG4gICAgcmV0dXJuIGV4cHJlc3Npb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVRlcm5hcnlOb2RlKHRlcm5hcnlOb2RlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgdGVybmFyeUV4cHJlc3Npb25Ob2RlID0gdGVybmFyeUV4cHJlc3Npb25Ob2RlUXVlcnkodGVybmFyeU5vZGUpLFxuICAgICAgICAgIGV4cHJlc3Npb25Ob2RlID0gdGVybmFyeUV4cHJlc3Npb25Ob2RlLCAvLy9cbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXhwcmVzc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tUmV0dXJuU3RhdGVtZW50Tm9kZShyZXR1cm5TdGF0ZW1lbnROb2RlLCBjb250ZXh0KSB7XG4gICAgY29uc3QgcmV0dXJuU3RhdGVtZW50RXhwcmVzc2lvbk5vZGUgPSByZXR1cm5TdGF0ZW1lbnRFeHByZXNzaW9uTm9kZVF1ZXJ5KHJldHVyblN0YXRlbWVudE5vZGUpLFxuICAgICAgICAgIGV4cHJlc3Npb25Ob2RlID0gcmV0dXJuU3RhdGVtZW50RXhwcmVzc2lvbk5vZGUsIC8vL1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KTtcblxuICAgIHJldHVybiBleHByZXNzaW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlKHZhcmlhYmxlQXNzaWdtZW50Tm9kZSwgY29udGV4dCkge1xuICAgIGNvbnN0IHZhcmlhYmxlQXNzaWdubWVudEV4cHJlc3Npb25Ob2RlID0gdmFyaWFibGVBc3NpZ25tZW50RXhwcmVzc2lvbk5vZGVRdWVyeSh2YXJpYWJsZUFzc2lnbWVudE5vZGUpLFxuICAgICAgICAgIGV4cHJlc3Npb25Ob2RlID0gdmFyaWFibGVBc3NpZ25tZW50RXhwcmVzc2lvbk5vZGUsICAvLy9cbiAgICAgICAgICBleHByZXNzaW9uID0gZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZXhwcmVzc2lvbjtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIG1hdGNoTm9kZShub2RlQSwgbm9kZUIpIHtcbiAgbGV0IG5vZGVNYXRjaGVzO1xuXG4gIGlmICgobm9kZUEgPT09IG51bGxOb2RlKSB8fCAobm9kZUIgPT09IG51bGxOb2RlKSkge1xuICAgIG5vZGVNYXRjaGVzID0gKG5vZGVBID09PSBub2RlQik7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgbm9kZUFFcXVhbFRvTm9kZUEgPSBub2RlQS5pc0VxdWFsVG8obm9kZUIpO1xuXG4gICAgbm9kZU1hdGNoZXMgPSBub2RlQUVxdWFsVG9Ob2RlQTsgIC8vL1xuICB9XG5cbiAgcmV0dXJuIG5vZGVNYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBtYXRjaE5vZGVzKG5vZGVzQSwgbm9kZXNCKSB7XG4gIGxldCBub2Rlc01hdGNoO1xuXG4gIG5vZGVzTWF0Y2ggPSBtYXRjaChub2Rlc0EsIG5vZGVzQiwgKG5vZGVBLCBub2RlQikgPT4ge1xuICAgIGNvbnN0IG5vZGVNYXRjaGVzID0gbWF0Y2hOb2RlKG5vZGVBLCBub2RlQik7XG5cbiAgICBpZiAobm9kZU1hdGNoZXMpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG5vZGVzTWF0Y2g7XG59XG5cbmZ1bmN0aW9uIG5vZGVBc1N0cmluZyhub2RlLCBjb250ZXh0KSB7XG4gIGxldCBzdHJpbmc7XG5cbiAgY29uc3Qgbm9kZVN0cmluZyAgPSAobm9kZSA9PT0gbnVsbE5vZGUpID9cbiAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0Lm5vZGVBc1N0cmluZyhub2RlKTtcblxuICBzdHJpbmcgPSBgJyR7bm9kZVN0cmluZ30nYDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBub2Rlc0FzU3RyaW5nKG5vZGVzLCBjb250ZXh0KSB7XG4gIGxldCBzdHJpbmc7XG5cbiAgY29uc3Qgbm9kZXNTdHJpbmcgPSBjb250ZXh0Lm5vZGVzQXNTdHJpbmcobm9kZXMpO1xuXG4gIHN0cmluZyA9IGAnJHtub2Rlc1N0cmluZ30nYDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBudW1iZXJBc1N0cmluZyhudW1iZXIpIHtcbiAgbGV0IHN0cmluZztcblxuICBzdHJpbmcgPSBgJHtudW1iZXJ9YDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdBc1N0cmluZyhzdHJpbmcpIHtcbiAgc3RyaW5nID0gYFwiJHtzdHJpbmd9XCJgOyAvLy9cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBib29sZWFuQXNTdHJpbmcoYm9vbGVhbikge1xuICBsZXQgc3RyaW5nO1xuXG4gIHN0cmluZyA9IGAnJHtib29sZWFufSdgO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGV4cHJlc3Npb25Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3QgeyBTb21lLCBFdmVyeSwgUmVkdWNlLCBFeHByZXNzaW9uLCBUZXJuYXJ5LCBWYXJpYWJsZSwgTm9kZVF1ZXJ5LCBOb2Rlc1F1ZXJ5LCBDb21wYXJpc29uLCBSZXR1cm5CbG9jaywgUHJvY2VkdXJlQ2FsbCwgTmVnYXRlZEV4cHJlc3Npb24sIEJpdHdpc2VFeHByZXNzaW9uLCBCcmFja2V0ZWRFeHByZXNzaW9uIH0gPSBlbGVtZW50cyxcbiAgICAgICAgbm9kZSA9IG5vZGVGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2RlcyA9IG5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgbnVtYmVyID0gbnVtYmVyRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYm9vbGVhbiA9IGJvb2xlYW5Gcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBzb21lID0gU29tZS5mcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBldmVyeSA9IEV2ZXJ5LmZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHJlZHVjZSA9IFJlZHVjZS5mcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB0ZXJuYXJ5ID0gVGVybmFyeS5mcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICB2YXJpYWJsZSA9IFZhcmlhYmxlLmZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5vZGVRdWVyeSA9IE5vZGVRdWVyeS5mcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBub2Rlc1F1ZXJ5ID0gTm9kZXNRdWVyeS5mcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBjb21wYXJpc29uID0gQ29tcGFyaXNvbi5mcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICByZXR1cm5CbG9jayA9IFJldHVybkJsb2NrLmZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIHByb2NlZHVyZUNhbGwgPSBQcm9jZWR1cmVDYWxsLmZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCksXG4gICAgICAgIG5lZ2F0ZWRFeHByZXNzaW9uID0gTmVnYXRlZEV4cHJlc3Npb24uZnJvbUV4cHJlc3Npb25Ob2RlKGV4cHJlc3Npb25Ob2RlLCBjb250ZXh0KSxcbiAgICAgICAgYml0d2lzZUV4cHJlc3Npb24gPSBCaXR3aXNlRXhwcmVzc2lvbi5mcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBicmFja2V0ZWRFeHByZXNzaW9uID0gQnJhY2tldGVkRXhwcmVzc2lvbi5mcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpLFxuICAgICAgICBleHByZXNzaW9uID0gbmV3IEV4cHJlc3Npb24obm9kZSwgbm9kZXMsIG51bWJlciwgc3RyaW5nLCBib29sZWFuLCBzb21lLCBldmVyeSwgcmVkdWNlLCB0ZXJuYXJ5LCB2YXJpYWJsZSwgbm9kZVF1ZXJ5LCBub2Rlc1F1ZXJ5LCBjb21wYXJpc29uLCByZXR1cm5CbG9jaywgcHJvY2VkdXJlQ2FsbCwgbmVnYXRlZEV4cHJlc3Npb24sIGJpdHdpc2VFeHByZXNzaW9uLCBicmFja2V0ZWRFeHByZXNzaW9uKTtcblxuICByZXR1cm4gZXhwcmVzc2lvbjtcbn1cblxuZnVuY3Rpb24gbm9kZUZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgbm9kZSA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlVGVybWluYWxOb2RlID0gcHJpbWl0aXZlVGVybWluYWxOb2RlUXVlcnkoZXhwcmVzc2lvbk5vZGUpO1xuXG4gIGlmIChwcmltaXRpdmVUZXJtaW5hbE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBwcmltaXRpdmVUZXJtaW5hbE5vZGVDb250ZW50ID0gcHJpbWl0aXZlVGVybWluYWxOb2RlLmdldENvbnRlbnQoKTtcblxuICAgIHN3aXRjaCAocHJpbWl0aXZlVGVybWluYWxOb2RlQ29udGVudCkge1xuICAgICAgY2FzZSBOVUxMOiB7XG4gICAgICAgIG5vZGUgPSBudWxsTm9kZTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn1cblxuZnVuY3Rpb24gbm9kZXNGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgY29uc3Qgbm9kZXMgPSBudWxsOyAgLy8vXG5cbiAgcmV0dXJuIG5vZGVzO1xufVxuXG5mdW5jdGlvbiBudW1iZXJGcm9tRXhwcmVzc2lvbk5vZGUoZXhwcmVzc2lvbk5vZGUsIGNvbnRleHQpIHtcbiAgbGV0IG51bWJlciA9IG51bGw7XG5cbiAgY29uc3QgbnVtYmVyVGVybWluYWxOb2RlID0gbnVtYmVyVGVybWluYWxOb2RlUXVlcnkoZXhwcmVzc2lvbk5vZGUpO1xuXG4gIGlmIChudW1iZXJUZXJtaW5hbE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBudW1iZXJUZXJtaW5hbE5vZGVDb250ZW50ID0gbnVtYmVyVGVybWluYWxOb2RlLmdldENvbnRlbnQoKTtcblxuICAgIG51bWJlciA9IE51bWJlcihudW1iZXJUZXJtaW5hbE5vZGVDb250ZW50KTtcbiAgfVxuXG4gIHJldHVybiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgc3RyaW5nID0gbnVsbDtcblxuICBjb25zdCBzdHJpbmdMaXRlcmFsVGVybWluYWxOb2RlID0gc3RyaW5nTGl0ZXJhbFRlcm1pbmFsTm9kZVF1ZXJ5KGV4cHJlc3Npb25Ob2RlKTtcblxuICBpZiAoc3RyaW5nTGl0ZXJhbFRlcm1pbmFsTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGVDb250ZW50ID0gc3RyaW5nTGl0ZXJhbFRlcm1pbmFsTm9kZS5nZXRDb250ZW50KCksXG4gICAgICAgICAgc3RyaW5nTGl0ZXJhbCA9IHN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGVDb250ZW50OyAvLy9cblxuICAgIHN0cmluZyA9IHN0cmluZ0Zyb21TdHJpbmdMaXRlcmFsKHN0cmluZ0xpdGVyYWwsIGNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxuZnVuY3Rpb24gYm9vbGVhbkZyb21FeHByZXNzaW9uTm9kZShleHByZXNzaW9uTm9kZSwgY29udGV4dCkge1xuICBsZXQgYm9vbGVhbiA9IG51bGw7XG5cbiAgY29uc3QgcHJpbWl0aXZlVGVybWluYWxOb2RlID0gcHJpbWl0aXZlVGVybWluYWxOb2RlUXVlcnkoZXhwcmVzc2lvbk5vZGUpO1xuXG4gIGlmIChwcmltaXRpdmVUZXJtaW5hbE5vZGUgIT09IG51bGwpIHtcbiAgICBjb25zdCBwcmltaXRpdmVUZXJtaW5hbE5vZGVDb250ZW50ID0gcHJpbWl0aXZlVGVybWluYWxOb2RlLmdldENvbnRlbnQoKTtcblxuICAgIHN3aXRjaCAocHJpbWl0aXZlVGVybWluYWxOb2RlQ29udGVudCkge1xuICAgICAgY2FzZSBUUlVFOiB7XG4gICAgICAgIGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEZBTFNFOiB7XG4gICAgICAgIGJvb2xlYW4gPSBmYWxzZTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gYm9vbGVhbjtcbn1cblxuZnVuY3Rpb24gc3RyaW5nRnJvbVN0cmluZ0xpdGVyYWwoc3RyaW5nTGl0ZXJhbCwgY29udGV4dCkge1xuICBjb25zdCBzdHJpbmcgPSBzdHJpbmdMaXRlcmFsLnJlcGxhY2UoLyheXCJ8XCIkKS9nLCBFTVBUWV9TVFJJTkcpO1xuXG4gIHJldHVybiBzdHJpbmc7XG59XG4iXSwibmFtZXMiOlsibWF0Y2giLCJhcnJheVV0aWxpdGllcyIsIm51bWJlclRlcm1pbmFsTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwicmVkdWNlRXhwcmVzc2lvbk5vZGVRdWVyeSIsInByaW1pdGl2ZVRlcm1pbmFsTm9kZVF1ZXJ5IiwidGVybmFyeUV4cHJlc3Npb25Ob2RlUXVlcnkiLCJzdHJpbmdMaXRlcmFsVGVybWluYWxOb2RlUXVlcnkiLCJyZXR1cm5TdGF0ZW1lbnRFeHByZXNzaW9uTm9kZVF1ZXJ5IiwidmFyaWFibGVBc3NpZ25tZW50RXhwcmVzc2lvbk5vZGVRdWVyeSIsImRlZmluZSIsIkV4cHJlc3Npb24iLCJub2RlIiwibm9kZXMiLCJudW1iZXIiLCJzdHJpbmciLCJib29sZWFuIiwic29tZSIsImV2ZXJ5IiwicmVkdWNlIiwidGVybmFyeSIsInZhcmlhYmxlIiwibm9kZXNRdWVyeSIsImNvbXBhcmlzb24iLCJyZXR1cm5CbG9jayIsInByb2NlZHVyZUNhbGwiLCJuZWdhdGVkRXhwcmVzc2lvbiIsImJpdHdpc2VFeHByZXNzaW9uIiwiYnJhY2tldGVkRXhwcmVzc2lvbiIsImdldE5vZGUiLCJnZXROb2RlcyIsImdldE51bWJlciIsImdldFN0cmluZyIsImdldEJvb2xlYW4iLCJnZXRTb21lIiwiZ2V0RXZlcnkiLCJnZXRSZWR1Y2UiLCJnZXRUZXJuYXJ5IiwidGVybmF5IiwiZ2V0VmFyaWFibGUiLCJnZXROb2RlUXVlcnkiLCJnZXROb2Rlc1F1ZXJ5IiwiZ2V0Q29tcGFyaXNvbiIsImdldFJldHVybkJsb2NrIiwiZ2V0UHJvY2VkdXJlQ2FsbCIsImdldE5lZ2F0ZWRFeHByZXNzaW9uIiwiZ2V0Qml0d2lzZUV4cHJlc3Npb24iLCJnZXRCcmFja2V0ZWRFeHByZXNzaW9uIiwiZ2V0VHlwZSIsInR5cGUiLCJOT0RFX1RZUEUiLCJOT0RFU19UWVBFIiwiTlVNQkVSX1RZUEUiLCJTVFJJTkdfVFlQRSIsIkJPT0xFQU5fVFlQRSIsImFzU3RyaW5nIiwiY29udGV4dCIsIm5vZGVBc1N0cmluZyIsIm5vZGVzQXNTdHJpbmciLCJudW1iZXJBc1N0cmluZyIsInN0cmluZ0FzU3RyaW5nIiwiYm9vbGVhbkFzU3RyaW5nIiwiZXZhbHVhdGUiLCJleHByZXNzaW9uIiwiaXNFcXVhbFRvIiwiZXF1YWxUbyIsIm5vZGVBIiwibm9kZUIiLCJub2RlTWF0Y2hlcyIsIm1hdGNoTm9kZSIsIm5vZGVzQSIsIm5vZGVzQiIsIm5vZGVzTWF0Y2giLCJtYXRjaE5vZGVzIiwiZnJvbU5vZGUiLCJudWxsTm9kZSIsImZyb21Ob2RlcyIsImZyb21TdHJpbmciLCJmcm9tQm9vbGVhbiIsImZyb21FeHByZXNzaW9uTm9kZSIsImV4cHJlc3Npb25Ob2RlIiwiZXhwcmVzc2lvbkZyb21FeHByZXNzaW9uTm9kZSIsImZyb21SZWR1Y2VOb2RlIiwicmVkdWNlTm9kZSIsInJlZHVjZUV4cHJlc3Npb25Ob2RlIiwiZnJvbVRlcm5hcnlOb2RlIiwidGVybmFyeU5vZGUiLCJ0ZXJuYXJ5RXhwcmVzc2lvbk5vZGUiLCJmcm9tUmV0dXJuU3RhdGVtZW50Tm9kZSIsInJldHVyblN0YXRlbWVudE5vZGUiLCJyZXR1cm5TdGF0ZW1lbnRFeHByZXNzaW9uTm9kZSIsImZyb21WYXJpYWJsZUFzc2lnbm1lbnROb2RlIiwidmFyaWFibGVBc3NpZ21lbnROb2RlIiwidmFyaWFibGVBc3NpZ25tZW50RXhwcmVzc2lvbk5vZGUiLCJuYW1lIiwibm9kZUFFcXVhbFRvTm9kZUEiLCJub2RlU3RyaW5nIiwiTlVMTCIsIm5vZGVzU3RyaW5nIiwiU29tZSIsImVsZW1lbnRzIiwiRXZlcnkiLCJSZWR1Y2UiLCJUZXJuYXJ5IiwiVmFyaWFibGUiLCJOb2RlUXVlcnkiLCJOb2Rlc1F1ZXJ5IiwiQ29tcGFyaXNvbiIsIlJldHVybkJsb2NrIiwiUHJvY2VkdXJlQ2FsbCIsIk5lZ2F0ZWRFeHByZXNzaW9uIiwiQml0d2lzZUV4cHJlc3Npb24iLCJCcmFja2V0ZWRFeHByZXNzaW9uIiwibm9kZUZyb21FeHByZXNzaW9uTm9kZSIsIm5vZGVzRnJvbUV4cHJlc3Npb25Ob2RlIiwibnVtYmVyRnJvbUV4cHJlc3Npb25Ob2RlIiwic3RyaW5nRnJvbUV4cHJlc3Npb25Ob2RlIiwiYm9vbGVhbkZyb21FeHByZXNzaW9uTm9kZSIsInByaW1pdGl2ZVRlcm1pbmFsTm9kZSIsInByaW1pdGl2ZVRlcm1pbmFsTm9kZUNvbnRlbnQiLCJnZXRDb250ZW50IiwibnVtYmVyVGVybWluYWxOb2RlIiwibnVtYmVyVGVybWluYWxOb2RlQ29udGVudCIsIk51bWJlciIsInN0cmluZ0xpdGVyYWxUZXJtaW5hbE5vZGUiLCJzdHJpbmdMaXRlcmFsVGVybWluYWxOb2RlQ29udGVudCIsInN0cmluZ0xpdGVyYWwiLCJzdHJpbmdGcm9tU3RyaW5nTGl0ZXJhbCIsIlRSVUUiLCJGQUxTRSIsInJlcGxhY2UiLCJFTVBUWV9TVFJJTkciXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQXNCQTs7O2VBQUE7Ozt5QkFwQitCO2dFQUVWOytEQUNBO3FCQUdLO3lCQUNzQjtxQkFDOEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTlFLElBQU0sQUFBRUEsUUFBVUMseUJBQWMsQ0FBeEJEO0FBRVIsSUFBTUUsMEJBQTBCQyxJQUFBQSxnQkFBUyxFQUFDLHdCQUNwQ0MsNEJBQTRCRCxJQUFBQSxnQkFBUyxFQUFDLHVCQUN0Q0UsNkJBQTZCRixJQUFBQSxnQkFBUyxFQUFDLDJCQUN2Q0csNkJBQTZCSCxJQUFBQSxnQkFBUyxFQUFDLHdCQUN2Q0ksaUNBQWlDSixJQUFBQSxnQkFBUyxFQUFDLGdDQUMzQ0sscUNBQXFDTCxJQUFBQSxnQkFBUyxFQUFDLGdDQUMvQ00sd0NBQXdDTixJQUFBQSxn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
|