occam-verify-cli 1.0.852 → 1.0.857
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/context/file/nominal.js +18 -3
- package/lib/context/liminal.js +101 -102
- package/lib/context/mnemic.js +511 -0
- package/lib/context.js +23 -11
- package/lib/element/assertion/contained.js +8 -8
- package/lib/element/assertion/defined.js +6 -6
- package/lib/element/assertion/satisfies.js +4 -4
- package/lib/element/assertion/type.js +5 -4
- package/lib/element/assumption/metaLevel.js +7 -7
- package/lib/element/assumption.js +23 -15
- package/lib/element/combinator.js +4 -4
- package/lib/element/conclusion.js +4 -4
- package/lib/element/constructor.js +4 -4
- package/lib/element/declaration/combinator.js +4 -4
- package/lib/element/declaration/complexType.js +3 -3
- package/lib/element/declaration/constructor.js +6 -4
- package/lib/element/declaration/metavariable.js +7 -7
- package/lib/element/declaration/variable.js +6 -4
- package/lib/element/deduction.js +4 -4
- package/lib/element/frame.js +60 -48
- package/lib/element/judgement.js +16 -29
- package/lib/element/label.js +4 -4
- package/lib/element/metavariable.js +59 -58
- package/lib/element/proofAssertion/premise.js +4 -4
- package/lib/element/reference.js +20 -20
- package/lib/element/rule.js +4 -4
- package/lib/element/substitution/frame.js +9 -8
- package/lib/element/substitution/reference.js +7 -7
- package/lib/element/substitution/statement.js +12 -11
- package/lib/element/substitution/term.js +9 -8
- package/lib/element/topLevelAssertion.js +4 -4
- package/lib/element/topLevelMetaAssertion.js +2 -2
- package/lib/element/variable.js +8 -8
- package/lib/utilities/context.js +6 -6
- package/lib/utilities/element.js +3 -3
- package/lib/utilities/json.js +16 -16
- package/lib/utilities/string.js +7 -29
- package/lib/utilities/substitutions.js +6 -6
- package/package.json +1 -1
- package/src/context/file/nominal.js +24 -2
- package/src/context/liminal.js +116 -117
- package/src/context/{ephemeral.js → mnemic.js} +38 -40
- package/src/context.js +32 -12
- package/src/element/assertion/contained.js +7 -7
- package/src/element/assertion/defined.js +5 -5
- package/src/element/assertion/satisfies.js +3 -4
- package/src/element/assertion/type.js +5 -4
- package/src/element/assumption/metaLevel.js +6 -8
- package/src/element/assumption.js +28 -17
- package/src/element/combinator.js +3 -4
- package/src/element/conclusion.js +3 -4
- package/src/element/constructor.js +3 -4
- package/src/element/declaration/combinator.js +3 -4
- package/src/element/declaration/complexType.js +2 -2
- package/src/element/declaration/constructor.js +7 -4
- package/src/element/declaration/metavariable.js +6 -8
- package/src/element/declaration/variable.js +7 -4
- package/src/element/deduction.js +3 -4
- package/src/element/frame.js +81 -64
- package/src/element/judgement.js +21 -43
- package/src/element/label.js +3 -4
- package/src/element/metavariable.js +66 -73
- package/src/element/proofAssertion/premise.js +3 -4
- package/src/element/reference.js +21 -25
- package/src/element/rule.js +3 -3
- package/src/element/substitution/frame.js +7 -7
- package/src/element/substitution/reference.js +4 -6
- package/src/element/substitution/statement.js +9 -10
- package/src/element/substitution/term.js +7 -7
- package/src/element/topLevelAssertion.js +3 -3
- package/src/element/topLevelMetaAssertion.js +2 -2
- package/src/element/variable.js +7 -8
- package/src/utilities/context.js +9 -9
- package/src/utilities/element.js +3 -3
- package/src/utilities/json.js +9 -9
- package/src/utilities/string.js +11 -40
- package/src/utilities/substitutions.js +3 -3
- package/lib/context/ephemeral.js +0 -513
package/lib/context/liminal.js
CHANGED
|
@@ -19,93 +19,93 @@ function _interop_require_default(obj) {
|
|
|
19
19
|
}
|
|
20
20
|
const { find, first } = _necessary.arrayUtilities;
|
|
21
21
|
class LiminalContext extends _context.default {
|
|
22
|
-
constructor(context,
|
|
22
|
+
constructor(context, derivedSubstitutions){
|
|
23
23
|
super(context);
|
|
24
|
-
this.
|
|
24
|
+
this.derivedSubstitutions = derivedSubstitutions;
|
|
25
25
|
}
|
|
26
|
-
|
|
27
|
-
let
|
|
26
|
+
getDerivedSubstitutions(nested = true) {
|
|
27
|
+
let derivedSubstitutions;
|
|
28
28
|
if (nested) {
|
|
29
29
|
const context = this.getContext();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
...this.
|
|
33
|
-
...
|
|
30
|
+
derivedSubstitutions = context.getDerivedSubstitutions();
|
|
31
|
+
derivedSubstitutions = [
|
|
32
|
+
...this.derivedSubstitutions,
|
|
33
|
+
...derivedSubstitutions
|
|
34
34
|
];
|
|
35
35
|
} else {
|
|
36
|
-
|
|
36
|
+
derivedSubstitutions = this.derivedSubstitutions;
|
|
37
37
|
}
|
|
38
|
-
return
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
let
|
|
42
|
-
const
|
|
43
|
-
if (
|
|
44
|
-
const
|
|
45
|
-
|
|
38
|
+
return derivedSubstitutions;
|
|
39
|
+
}
|
|
40
|
+
getSoleDerivedSubstitution(nested = true) {
|
|
41
|
+
let soleDerivedSubstitution = null;
|
|
42
|
+
const derivedSubstitutions = this.getDerivedSubstitutions(nested), derivedSubstitutionsLength = derivedSubstitutions.length;
|
|
43
|
+
if (derivedSubstitutionsLength === 1) {
|
|
44
|
+
const firstDerivedSubstitution = first(derivedSubstitutions);
|
|
45
|
+
soleDerivedSubstitution = firstDerivedSubstitution; ///
|
|
46
46
|
}
|
|
47
|
-
return
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
let
|
|
51
|
-
const
|
|
52
|
-
if (
|
|
53
|
-
const
|
|
54
|
-
if (
|
|
55
|
-
|
|
47
|
+
return soleDerivedSubstitution;
|
|
48
|
+
}
|
|
49
|
+
getSoleNonTrivialDerivedSubstitution(nested = true) {
|
|
50
|
+
let soleNonTrivialDerivedSubstitution = null;
|
|
51
|
+
const soleDerivedSubstitution = this.getSoleDerivedSubstitution(nested);
|
|
52
|
+
if (soleDerivedSubstitution !== null) {
|
|
53
|
+
const soleDerivedSubstitutionNonTrivial = soleDerivedSubstitution.isNonTrivial();
|
|
54
|
+
if (soleDerivedSubstitutionNonTrivial) {
|
|
55
|
+
soleNonTrivialDerivedSubstitution = soleDerivedSubstitution; ///
|
|
56
56
|
}
|
|
57
57
|
}
|
|
58
|
-
return
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
const context = this,
|
|
62
|
-
context.trace(`Adding the '${
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
if (
|
|
58
|
+
return soleNonTrivialDerivedSubstitution;
|
|
59
|
+
}
|
|
60
|
+
addDerivedSubstitution(derivedSubstitution) {
|
|
61
|
+
const context = this, derivedSubstitutionA = derivedSubstitution, derivedSubstitutionString = derivedSubstitution.getString();
|
|
62
|
+
context.trace(`Adding the '${derivedSubstitutionString}' derivedSubstitution to the liminal context...`);
|
|
63
|
+
const derivedSubstitutionB = this.derivedSubstitutions.find((derivedSubstitution)=>{
|
|
64
|
+
const derivedSubstitutionB = derivedSubstitution, derivedSubstitutionAEqualToDerivedSubstitutionB = derivedSubstitutionA.isEqualTo(derivedSubstitutionB);
|
|
65
|
+
if (derivedSubstitutionAEqualToDerivedSubstitutionB) {
|
|
66
66
|
return true;
|
|
67
67
|
}
|
|
68
68
|
}) || null;
|
|
69
|
-
if (
|
|
70
|
-
context.debug(`The '${
|
|
69
|
+
if (derivedSubstitutionB !== null) {
|
|
70
|
+
context.debug(`The '${derivedSubstitutionString}' derivedSubstitution has already been added to the liminal context.`);
|
|
71
71
|
} else {
|
|
72
|
-
this.
|
|
72
|
+
this.derivedSubstitutions.push(derivedSubstitution);
|
|
73
73
|
}
|
|
74
|
-
context.debug(`...added the '${
|
|
74
|
+
context.debug(`...added the '${derivedSubstitutionString}' derivedSubstitution to the liminal context.`);
|
|
75
75
|
}
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
this.
|
|
76
|
+
addDerivedSubstitutions(derivedSubstitutions) {
|
|
77
|
+
derivedSubstitutions.forEach((derivedSubstitution)=>{
|
|
78
|
+
this.addDerivedSubstitution(derivedSubstitution);
|
|
79
79
|
});
|
|
80
80
|
}
|
|
81
|
-
|
|
82
|
-
const context = this,
|
|
81
|
+
resolveDerivedSubstitutions() {
|
|
82
|
+
const context = this, derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions);
|
|
83
83
|
metavariableNodes.forEach((metavariableNode)=>{
|
|
84
|
-
const
|
|
85
|
-
|
|
86
|
-
const
|
|
84
|
+
const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode);
|
|
85
|
+
complexDerivedSubstitutions.forEach((complexDerivedSubstitution)=>{
|
|
86
|
+
const derivedSubstitution = complexDerivedSubstitution, resolved = derivedSubstitution.isResolved();
|
|
87
87
|
if (!resolved) {
|
|
88
|
-
|
|
88
|
+
derivedSubstitution.resolve(context);
|
|
89
89
|
}
|
|
90
90
|
});
|
|
91
91
|
});
|
|
92
92
|
}
|
|
93
|
-
|
|
94
|
-
const
|
|
95
|
-
const
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
93
|
+
areDerivedSubstitutionsResolved() {
|
|
94
|
+
const derivedSubstitutions = this.getDerivedSubstitutions(), metavariableNodes = (0, _substitutions.metavariableNodesFromDerivedSubstitutions)(derivedSubstitutions), resolved = metavariableNodes.every((metavariableNode)=>{
|
|
95
|
+
const complexDerivedSubstitutions = this.findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode), complexDerivedSubstitutionsResolved = complexDerivedSubstitutions.every((complexDerivedSubstitution)=>{
|
|
96
|
+
const complexDerivedSubstitutionResolved = complexDerivedSubstitution.isResolved();
|
|
97
|
+
if (complexDerivedSubstitutionResolved) {
|
|
98
98
|
return true;
|
|
99
99
|
}
|
|
100
100
|
});
|
|
101
|
-
if (
|
|
101
|
+
if (complexDerivedSubstitutionsResolved) {
|
|
102
102
|
return true;
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
105
|
return resolved;
|
|
106
106
|
}
|
|
107
107
|
isEmpty() {
|
|
108
|
-
const
|
|
108
|
+
const derivedSubstitutionsLength = this.derivedSubstitutions.length, empty = derivedSubstitutionsLength === 0;
|
|
109
109
|
return empty;
|
|
110
110
|
}
|
|
111
111
|
qualify(assumption, metaLevelAssumption) {
|
|
@@ -114,10 +114,10 @@ class LiminalContext extends _context.default {
|
|
|
114
114
|
if (empty) {
|
|
115
115
|
qualifies = true;
|
|
116
116
|
} else {
|
|
117
|
-
const nested = false,
|
|
118
|
-
if (
|
|
119
|
-
const {
|
|
120
|
-
if (
|
|
117
|
+
const nested = false, soleDerivedSubstitution = this.getSoleDerivedSubstitution(nested);
|
|
118
|
+
if (soleDerivedSubstitution !== null) {
|
|
119
|
+
const { ReferenceDerivedSubstitution } = _elements.default, context = this, referenceDerivedSubstitution = ReferenceDerivedSubstitution.fromAssumptionAndMetaLevelAssumption(assumption, metaLevelAssumption, context), soleDerivedSubstitutionCompares = referenceDerivedSubstitution.compareDerivedSubstitution(soleDerivedSubstitution);
|
|
120
|
+
if (soleDerivedSubstitutionCompares) {
|
|
121
121
|
qualifies = true;
|
|
122
122
|
}
|
|
123
123
|
}
|
|
@@ -129,81 +129,80 @@ class LiminalContext extends _context.default {
|
|
|
129
129
|
context = this.getContext();
|
|
130
130
|
}
|
|
131
131
|
context.debug(`Committing the limiinal context`);
|
|
132
|
-
context.
|
|
132
|
+
context.addDerivedSubstitutions(this.derivedSubstitutions);
|
|
133
133
|
}
|
|
134
|
-
|
|
135
|
-
const
|
|
136
|
-
return
|
|
134
|
+
findDerivedSubstitution(callback) {
|
|
135
|
+
const derivedSubstitutions = this.getDerivedSubstitutions(), derivedSubstitution = derivedSubstitutions.find(callback);
|
|
136
|
+
return derivedSubstitution;
|
|
137
137
|
}
|
|
138
|
-
|
|
139
|
-
let
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
return
|
|
138
|
+
findDerivedSubstitutions(callback, nested = true) {
|
|
139
|
+
let derivedSubstitutions;
|
|
140
|
+
derivedSubstitutions = this.getDerivedSubstitutions(nested);
|
|
141
|
+
derivedSubstitutions = find(derivedSubstitutions, callback); ///
|
|
142
|
+
return derivedSubstitutions;
|
|
143
143
|
}
|
|
144
|
-
|
|
145
|
-
const
|
|
146
|
-
const variableNodeMatches =
|
|
144
|
+
findDerivedSubstitutionByVariableNode(variableNode) {
|
|
145
|
+
const derivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
|
|
146
|
+
const variableNodeMatches = derivedSubstitution.matchVariableNode(variableNode);
|
|
147
147
|
if (variableNodeMatches) {
|
|
148
148
|
return true;
|
|
149
149
|
}
|
|
150
150
|
}) || null;
|
|
151
|
-
return
|
|
151
|
+
return derivedSubstitution;
|
|
152
152
|
}
|
|
153
|
-
|
|
154
|
-
const
|
|
155
|
-
return
|
|
153
|
+
findDerivedSubstitutionByMetavariableNode(metavariableNode) {
|
|
154
|
+
const simpleDerivedSubstitution = this.findSimpleDerivedSubstitutionByMetavariableNode(metavariableNode), derivedSubstitution = simpleDerivedSubstitution; ///
|
|
155
|
+
return derivedSubstitution;
|
|
156
156
|
}
|
|
157
|
-
|
|
158
|
-
const
|
|
159
|
-
const
|
|
160
|
-
if (
|
|
161
|
-
const
|
|
157
|
+
findSimpleDerivedSubstitutionByMetavariableNode(metavariableNode) {
|
|
158
|
+
const simpleDerivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
|
|
159
|
+
const derivedSubstitutionSimple = derivedSubstitution.isSimple();
|
|
160
|
+
if (derivedSubstitutionSimple) {
|
|
161
|
+
const simpleDerivedSubstitution = derivedSubstitution, metavariableNodeMatches = simpleDerivedSubstitution.matchMetavariableNode(metavariableNode);
|
|
162
162
|
if (metavariableNodeMatches) {
|
|
163
163
|
return true;
|
|
164
164
|
}
|
|
165
165
|
}
|
|
166
166
|
}) || null;
|
|
167
|
-
return
|
|
167
|
+
return simpleDerivedSubstitution;
|
|
168
168
|
}
|
|
169
|
-
|
|
170
|
-
const
|
|
171
|
-
const
|
|
172
|
-
if (
|
|
173
|
-
const
|
|
169
|
+
findComplexDerivedSubstitutionsByMetavariableNode(metavariableNode) {
|
|
170
|
+
const complexDerivedSubstitution = this.findDerivedSubstitutions((derivedSubstitution)=>{
|
|
171
|
+
const derivedSubstitutionComplex = derivedSubstitution.isComplex();
|
|
172
|
+
if (derivedSubstitutionComplex) {
|
|
173
|
+
const complexDerivedSubstitution = derivedSubstitution, metavariableNodeMatches = complexDerivedSubstitution.matchMetavariableNode(metavariableNode);
|
|
174
174
|
if (metavariableNodeMatches) {
|
|
175
175
|
return true;
|
|
176
176
|
}
|
|
177
177
|
}
|
|
178
178
|
}) || null;
|
|
179
|
-
return
|
|
179
|
+
return complexDerivedSubstitution;
|
|
180
180
|
}
|
|
181
|
-
|
|
182
|
-
const
|
|
183
|
-
|
|
184
|
-
const metavariableNodeMatches =
|
|
181
|
+
findDerivedSubstitutionByMetavariableNodeAndSubstitution(metavariableNode, derivedSubstitution) {
|
|
182
|
+
const derivedSubstitutionA = derivedSubstitution; ///
|
|
183
|
+
derivedSubstitution = this.findDerivedSubstitution((derivedSubstitution)=>{
|
|
184
|
+
const metavariableNodeMatches = derivedSubstitution.matchMetavariableNode(metavariableNode);
|
|
185
185
|
if (metavariableNodeMatches) {
|
|
186
|
-
const
|
|
187
|
-
if (
|
|
186
|
+
const derivedSubstitutionB = derivedSubstitution, derivedSubstitutionBEqualToDerivedSubstitutionA = derivedSubstitutionB.isEqualTo(derivedSubstitutionA);
|
|
187
|
+
if (derivedSubstitutionBEqualToDerivedSubstitutionA) {
|
|
188
188
|
return true;
|
|
189
189
|
}
|
|
190
190
|
}
|
|
191
191
|
}) || null;
|
|
192
|
-
return
|
|
192
|
+
return derivedSubstitution;
|
|
193
193
|
}
|
|
194
|
-
|
|
195
|
-
const
|
|
196
|
-
return
|
|
194
|
+
isDerivedSubstitutionPresentByMetavariableNode(metavariableNode) {
|
|
195
|
+
const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNode(metavariableNode), derivedSubstitutionPresent = derivedSubstitution !== null;
|
|
196
|
+
return derivedSubstitutionPresent;
|
|
197
197
|
}
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
return substitutionPresent;
|
|
198
|
+
isDerivedSubstitutionPresentByMetavariableNodeAndSubstitution(metavariableNode, substitution) {
|
|
199
|
+
const derivedSubstitution = this.findDerivedSubstitutionByMetavariableNodeAndSubstitution(metavariableNode, substitution), derivedSubstitutionPresent = derivedSubstitution !== null;
|
|
200
|
+
return derivedSubstitutionPresent;
|
|
202
201
|
}
|
|
203
202
|
static fromNothing(context) {
|
|
204
|
-
const
|
|
203
|
+
const derivedSubstitutions = [], liminalContext = new LiminalContext(context, derivedSubstitutions);
|
|
205
204
|
return liminalContext;
|
|
206
205
|
}
|
|
207
206
|
}
|
|
208
207
|
|
|
209
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTm9kZXNGcm9tU3Vic3RpdHV0aW9ucyB9IGZyb20gXCIuLi91dGlsaXRpZXMvc3Vic3RpdHV0aW9uc1wiO1xuXG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vY29udGV4dFwiO1xuaW1wb3J0IGVsZW1lbnRzIGZyb20gXCIuLi9lbGVtZW50c1wiO1xuXG5jb25zdCB7IGZpbmQsIGZpcnN0IH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGltaW5hbENvbnRleHQgZXh0ZW5kcyBDb250ZXh0IHtcbiAgY29uc3RydWN0b3IoY29udGV4dCwgc3Vic3RpdHV0aW9ucykge1xuICAgIHN1cGVyKGNvbnRleHQpO1xuXG4gICAgdGhpcy5zdWJzdGl0dXRpb25zID0gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFN1YnN0aXR1dGlvbnMobmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzdWJzdGl0dXRpb25zO1xuXG4gICAgaWYgKG5lc3RlZCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICBzdWJzdGl0dXRpb25zID0gY29udGV4dC5nZXRTdWJzdGl0dXRpb25zKCk7XG5cbiAgICAgIHN1YnN0aXR1dGlvbnMgPSBbIC8vL1xuICAgICAgICAuLi50aGlzLnN1YnN0aXR1dGlvbnMsXG4gICAgICAgIC4uLnN1YnN0aXR1dGlvbnNcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic3RpdHV0aW9ucyA9IHRoaXMuc3Vic3RpdHV0aW9ucztcbiAgICB9XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGdldFNvbGVTdWJzdGl0dXRpb24obmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzb2xlU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldFN1YnN0aXR1dGlvbnMobmVzdGVkKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25zTGVuZ3RoID0gc3Vic3RpdHV0aW9ucy5sZW5ndGg7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3RTdWJzdGl0dXRpb24gPSBmaXJzdChzdWJzdGl0dXRpb25zKTtcblxuICAgICAgc29sZVN1YnN0aXR1dGlvbiA9IGZpcnN0U3Vic3RpdHV0aW9uOyAvLy9cbiAgICB9XG5cbiAgICByZXR1cm4gc29sZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGdldFNvbGVOb25Ucml2aWFsU3Vic3RpdHV0aW9uKG5lc3RlZCA9IHRydWUpIHtcbiAgICBsZXQgc29sZU5vblRyaXZpYWxTdWJzdGl0dXRpb24gPSBudWxsO1xuXG4gICAgY29uc3Qgc29sZVN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZVN1YnN0aXR1dGlvbihuZXN0ZWQpO1xuXG4gICAgaWYgKHNvbGVTdWJzdGl0dXRpb24gIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IHNvbGVTdWJzdGl0dXRpb25Ob25Ucml2aWFsID0gc29sZVN1YnN0aXR1dGlvbi5pc05vblRyaXZpYWwoKTtcblxuICAgICAgaWYgKHNvbGVTdWJzdGl0dXRpb25Ob25Ucml2aWFsKSB7XG4gICAgICAgIHNvbGVOb25Ucml2aWFsU3Vic3RpdHV0aW9uID0gc29sZVN1YnN0aXR1dGlvbjsgIC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb2xlTm9uVHJpdmlhbFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGFkZFN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgY29udGV4dC50cmFjZShgQWRkaW5nIHRoZSAnJHtzdWJzdGl0dXRpb25TdHJpbmd9JyBzdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uQiA9IHRoaXMuc3Vic3RpdHV0aW9ucy5maW5kKChzdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbkIgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgc3Vic3RpdHV0aW9uQUVxdWFsVG9TdWJzdGl0dXRpb25CID0gc3Vic3RpdHV0aW9uQS5pc0VxdWFsVG8oc3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIGlmIChzdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIGhhcyBhbHJlYWR5IGJlZW4gYWRkZWQgdG8gdGhlIGxpbWluYWwgY29udGV4dC5gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zdWJzdGl0dXRpb25zLnB1c2goc3Vic3RpdHV0aW9uKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGAuLi5hZGRlZCB0aGUgJyR7c3Vic3RpdHV0aW9uU3RyaW5nfScgc3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGRTdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpIHtcbiAgICBzdWJzdGl0dXRpb25zLmZvckVhY2goKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgdGhpcy5hZGRTdWJzdGl0dXRpb24oc3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc29sdmVTdWJzdGl0dXRpb25zKCkge1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLCAvLy9cbiAgICAgICAgICBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21TdWJzdGl0dXRpb25zKHN1YnN0aXR1dGlvbnMpO1xuXG4gICAgbWV0YXZhcmlhYmxlTm9kZXMuZm9yRWFjaCgobWV0YXZhcmlhYmxlTm9kZSkgPT4ge1xuICAgICAgY29uc3QgY29tcGxleFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4U3Vic3RpdHV0aW9uc0J5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgY29tcGxleFN1YnN0aXR1dGlvbnMuZm9yRWFjaCgoY29tcGxleFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBjb21wbGV4U3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgcmVzb2x2ZWQgPSBzdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgICBzdWJzdGl0dXRpb24ucmVzb2x2ZShjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICBhcmVTdWJzdGl0dXRpb25zUmVzb2x2ZWQoKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVzID0gbWV0YXZhcmlhYmxlTm9kZXNGcm9tU3Vic3RpdHV0aW9ucyhzdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICByZXNvbHZlZCA9IG1ldGF2YXJpYWJsZU5vZGVzLmV2ZXJ5KChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4U3Vic3RpdHV0aW9ucyA9IHRoaXMuZmluZENvbXBsZXhTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgICAgICAgICAgY29tcGxleFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbXBsZXhTdWJzdGl0dXRpb25zLmV2ZXJ5KChjb21wbGV4U3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBsZXhTdWJzdGl0dXRpb25SZXNvbHZlZCA9IGNvbXBsZXhTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21wbGV4U3Vic3RpdHV0aW9uUmVzb2x2ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmIChjb21wbGV4U3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zTGVuZ3RoID0gdGhpcy5zdWJzdGl0dXRpb25zLmxlbmd0aCxcbiAgICAgICAgICBlbXB0eSA9IChzdWJzdGl0dXRpb25zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIHF1YWxpZnkoYXNzdW1wdGlvbiwgbWV0YUxldmVsQXNzdW1wdGlvbikge1xuICAgIGxldCBxdWFsaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCk7XG5cbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5lc3RlZCA9IGZhbHNlLFxuICAgICAgICAgICAgc29sZVN1YnN0aXR1dGlvbiA9IHRoaXMuZ2V0U29sZVN1YnN0aXR1dGlvbihuZXN0ZWQpO1xuXG4gICAgICBpZiAoc29sZVN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IFJlZmVyZW5jZVN1YnN0aXR1dGlvbiB9ID0gZWxlbWVudHMsXG4gICAgICAgICAgICAgIGNvbnRleHQgPSB0aGlzLFxuICAgICAgICAgICAgICByZWZlcmVuY2VTdWJzdGl0dXRpb24gPSBSZWZlcmVuY2VTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9uKGFzc3VtcHRpb24sIG1ldGFMZXZlbEFzc3VtcHRpb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzb2xlU3Vic3RpdHV0aW9uQ29tcGFyZXMgPSByZWZlcmVuY2VTdWJzdGl0dXRpb24uY29tcGFyZVN1YnN0aXR1dGlvbihzb2xlU3Vic3RpdHV0aW9uKTtcblxuICAgICAgICBpZiAoc29sZVN1YnN0aXR1dGlvbkNvbXBhcmVzKSB7XG4gICAgICAgICAgcXVhbGlmaWVzID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBxdWFsaWZpZXM7XG4gIH1cblxuICBjb21taXQoY29udGV4dCkge1xuICAgIGlmIChjb250ZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnRleHQgPSB0aGlzLmdldENvbnRleHQoKTtcbiAgICB9XG5cbiAgICBjb250ZXh0LmRlYnVnKGBDb21taXR0aW5nIHRoZSBsaW1paW5hbCBjb250ZXh0YCk7XG5cbiAgICBjb250ZXh0LmFkZFN1YnN0aXR1dGlvbnModGhpcy5zdWJzdGl0dXRpb25zKTtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb24oY2FsbGJhY2spIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gdGhpcy5nZXRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5maW5kKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9ucyhjYWxsYmFjaywgbmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzdWJzdGl0dXRpb25zO1xuXG4gICAgc3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0U3Vic3RpdHV0aW9ucyhuZXN0ZWQpO1xuXG4gICAgc3Vic3RpdHV0aW9ucyA9IGZpbmQoc3Vic3RpdHV0aW9ucywgY2FsbGJhY2spOyAgLy8vXG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9ucztcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaFZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAodmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZVN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZFNpbXBsZVN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb24gPSBzaW1wbGVTdWJzdGl0dXRpb247ICAvLy9cblxuICAgIHJldHVybiBzdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU2ltcGxlU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb24oKHN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uU2ltcGxlID0gc3Vic3RpdHV0aW9uLmlzU2ltcGxlKCk7XG5cbiAgICAgIGlmIChzdWJzdGl0dXRpb25TaW1wbGUpIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlU3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gc2ltcGxlU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2ltcGxlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZENvbXBsZXhTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBjb21wbGV4U3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9ucygoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb25Db21wbGV4ID0gc3Vic3RpdHV0aW9uLmlzQ29tcGxleCgpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uQ29tcGxleCkge1xuICAgICAgICBjb25zdCBjb21wbGV4U3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uLCAgLy8vXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gY29tcGxleFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGNvbXBsZXhTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbikge1xuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb247IC8vL1xuXG4gICAgc3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uKChzdWJzdGl0dXRpb24pID0+IHsgIC8vL1xuICAgICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgY29uc3Qgc3Vic3RpdHV0aW9uQiA9IHN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICAgIHN1YnN0aXR1dGlvbkJFcXVhbFRvU3Vic3RpdHV0aW9uQSA9IHN1YnN0aXR1dGlvbkIuaXNFcXVhbFRvKHN1YnN0aXR1dGlvbkEpO1xuXG4gICAgICAgIGlmIChzdWJzdGl0dXRpb25CRXF1YWxUb1N1YnN0aXR1dGlvbkEpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgaXNTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uUHJlc2VudCA9IChzdWJzdGl0dXRpb24gIT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblByZXNlbnQ7XG4gIH1cblxuICBpc1N1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uKSB7XG4gICAgc3Vic3RpdHV0aW9uID0gdGhpcy5maW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbik7ICAvLy9cblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvblByZXNlbnQgPSAoc3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25QcmVzZW50O1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKGNvbnRleHQpIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gW10sXG4gICAgICAgICAgbGltaW5hbENvbnRleHQgPSBuZXcgTGltaW5hbENvbnRleHQoY29udGV4dCwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbGltaW5hbENvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJMaW1pbmFsQ29udGV4dCIsImZpbmQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJzdWJzdGl0dXRpb25zIiwiZ2V0U3Vic3RpdHV0aW9ucyIsIm5lc3RlZCIsImdldENvbnRleHQiLCJnZXRTb2xlU3Vic3RpdHV0aW9uIiwic29sZVN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbnNMZW5ndGgiLCJsZW5ndGgiLCJmaXJzdFN1YnN0aXR1dGlvbiIsImdldFNvbGVOb25Ucml2aWFsU3Vic3RpdHV0aW9uIiwic29sZU5vblRyaXZpYWxTdWJzdGl0dXRpb24iLCJzb2xlU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCIsImlzTm9uVHJpdmlhbCIsImFkZFN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbiIsInN1YnN0aXR1dGlvbkEiLCJzdWJzdGl0dXRpb25TdHJpbmciLCJnZXRTdHJpbmciLCJ0cmFjZSIsInN1YnN0aXR1dGlvbkIiLCJzdWJzdGl0dXRpb25BRXF1YWxUb1N1YnN0aXR1dGlvbkIiLCJpc0VxdWFsVG8iLCJkZWJ1ZyIsInB1c2giLCJhZGRTdWJzdGl0dXRpb25zIiwiZm9yRWFjaCIsInJlc29sdmVTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZXMiLCJtZXRhdmFyaWFibGVOb2Rlc0Zyb21TdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZSIsImNvbXBsZXhTdWJzdGl0dXRpb25zIiwiZmluZENvbXBsZXhTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlIiwiY29tcGxleFN1YnN0aXR1dGlvbiIsInJlc29sdmVkIiwiaXNSZXNvbHZlZCIsInJlc29sdmUiLCJhcmVTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJldmVyeSIsImNvbXBsZXhTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJjb21wbGV4U3Vic3RpdHV0aW9uUmVzb2x2ZWQiLCJpc0VtcHR5IiwiZW1wdHkiLCJxdWFsaWZ5IiwiYXNzdW1wdGlvbiIsIm1ldGFMZXZlbEFzc3VtcHRpb24iLCJxdWFsaWZpZXMiLCJSZWZlcmVuY2VTdWJzdGl0dXRpb24iLCJlbGVtZW50cyIsInJlZmVyZW5jZVN1YnN0aXR1dGlvbiIsImZyb21Bc3N1bXB0aW9uQW5kTWV0YUxldmVsQXNzdW1wdGlvbiIsInNvbGVTdWJzdGl0dXRpb25Db21wYXJlcyIsImNvbXBhcmVTdWJzdGl0dXRpb24iLCJjb21taXQiLCJ1bmRlZmluZWQiLCJmaW5kU3Vic3RpdHV0aW9uIiwiY2FsbGJhY2siLCJmaW5kU3Vic3RpdHV0aW9ucyIsImZpbmRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZSIsInZhcmlhYmxlTm9kZU1hdGNoZXMiLCJtYXRjaFZhcmlhYmxlTm9kZSIsImZpbmRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJzaW1wbGVTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlIiwic3Vic3RpdHV0aW9uU2ltcGxlIiwiaXNTaW1wbGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsInN1YnN0aXR1dGlvbkNvbXBsZXgiLCJpc0NvbXBsZXgiLCJmaW5kU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uQkVxdWFsVG9TdWJzdGl0dXRpb25BIiwiaXNTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlIiwic3Vic3RpdHV0aW9uUHJlc2VudCIsImlzU3Vic3RpdHV0aW9uUHJlc2VudEJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbiIsImZyb21Ob3RoaW5nIiwibGltaW5hbENvbnRleHQiXSwibWFwcGluZ3MiOiJBQUFBOzs7OytCQVVBOzs7ZUFBcUJBOzs7MkJBUlU7K0JBQ29CO2dFQUUvQjtpRUFDQzs7Ozs7O0FBRXJCLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUUsR0FBR0MseUJBQWM7QUFFdkIsTUFBTUgsdUJBQXVCSSxnQkFBTztJQUNqRCxZQUFZQyxPQUFPLEVBQUVDLGFBQWEsQ0FBRTtRQUNsQyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxhQUFhLEdBQUdBO0lBQ3ZCO0lBRUFDLGlCQUFpQkMsU0FBUyxJQUFJLEVBQUU7UUFDOUIsSUFBSUY7UUFFSixJQUFJRSxRQUFRO1lBQ1YsTUFBTUgsVUFBVSxJQUFJLENBQUNJLFVBQVU7WUFFL0JILGdCQUFnQkQsUUFBUUUsZ0JBQWdCO1lBRXhDRCxnQkFBZ0I7bUJBQ1gsSUFBSSxDQUFDQSxhQUFhO21CQUNsQkE7YUFDSjtRQUNILE9BQU87WUFDTEEsZ0JBQWdCLElBQUksQ0FBQ0EsYUFBYTtRQUNwQztRQUVBLE9BQU9BO0lBQ1Q7SUFFQUksb0JBQW9CRixTQUFTLElBQUksRUFBRTtRQUNqQyxJQUFJRyxtQkFBbUI7UUFFdkIsTUFBTUwsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNDLFNBQ3RDSSxzQkFBc0JOLGNBQWNPLE1BQU07UUFFaEQsSUFBSUQsd0JBQXdCLEdBQUc7WUFDN0IsTUFBTUUsb0JBQW9CWixNQUFNSTtZQUVoQ0ssbUJBQW1CRyxtQkFBbUIsR0FBRztRQUMzQztRQUVBLE9BQU9IO0lBQ1Q7SUFFQUksOEJBQThCUCxTQUFTLElBQUksRUFBRTtRQUMzQyxJQUFJUSw2QkFBNkI7UUFFakMsTUFBTUwsbUJBQW1CLElBQUksQ0FBQ0QsbUJBQW1CLENBQUNGO1FBRWxELElBQUlHLHFCQUFxQixNQUFNO1lBQzdCLE1BQU1NLDZCQUE2Qk4saUJBQWlCTyxZQUFZO1lBRWhFLElBQUlELDRCQUE0QjtnQkFDOUJELDZCQUE2Qkwsa0JBQW1CLEdBQUc7WUFDckQ7UUFDRjtRQUVBLE9BQU9LO0lBQ1Q7SUFFQUcsZ0JBQWdCQyxZQUFZLEVBQUU7UUFDNUIsTUFBTWYsVUFBVSxJQUFJLEVBQ2RnQixnQkFBZ0JELGNBQ2hCRSxxQkFBcUJGLGFBQWFHLFNBQVM7UUFFakRsQixRQUFRbUIsS0FBSyxDQUFDLENBQUMsWUFBWSxFQUFFRixtQkFBbUIsd0NBQXdDLENBQUM7UUFFekYsTUFBTUcsZ0JBQWdCLElBQUksQ0FBQ25CLGFBQWEsQ0FBQ0wsSUFBSSxDQUFDLENBQUNtQjtZQUM3QyxNQUFNSyxnQkFBZ0JMLGNBQ2hCTSxvQ0FBb0NMLGNBQWNNLFNBQVMsQ0FBQ0Y7WUFFbEUsSUFBSUMsbUNBQW1DO2dCQUNyQyxPQUFPO1lBQ1Q7UUFDRixNQUFNO1FBRU4sSUFBSUQsa0JBQWtCLE1BQU07WUFDMUJwQixRQUFRdUIsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFTixtQkFBbUIsNkRBQTZELENBQUM7UUFDekcsT0FBTztZQUNMLElBQUksQ0FBQ2hCLGFBQWEsQ0FBQ3VCLElBQUksQ0FBQ1Q7UUFDMUI7UUFFQWYsUUFBUXVCLEtBQUssQ0FBQyxDQUFDLGNBQWMsRUFBRU4sbUJBQW1CLHNDQUFzQyxDQUFDO0lBQzNGO0lBRUFRLGlCQUFpQnhCLGFBQWEsRUFBRTtRQUM5QkEsY0FBY3lCLE9BQU8sQ0FBQyxDQUFDWDtZQUNyQixJQUFJLENBQUNELGVBQWUsQ0FBQ0M7UUFDdkI7SUFDRjtJQUVBWSx1QkFBdUI7UUFDckIsTUFBTTNCLFVBQVUsSUFBSSxFQUNkQyxnQkFBZ0IsSUFBSSxDQUFDQyxnQkFBZ0IsSUFDckMwQixvQkFBb0JDLElBQUFBLGlEQUFrQyxFQUFDNUI7UUFFN0QyQixrQkFBa0JGLE9BQU8sQ0FBQyxDQUFDSTtZQUN6QixNQUFNQyx1QkFBdUIsSUFBSSxDQUFDQywwQ0FBMEMsQ0FBQ0Y7WUFFN0VDLHFCQUFxQkwsT0FBTyxDQUFDLENBQUNPO2dCQUM1QixNQUFNbEIsZUFBZWtCLHFCQUNmQyxXQUFXbkIsYUFBYW9CLFVBQVU7Z0JBRXhDLElBQUksQ0FBQ0QsVUFBVTtvQkFDYm5CLGFBQWFxQixPQUFPLENBQUNwQztnQkFDdkI7WUFDRjtRQUNGO0lBQ0Y7SUFFQXFDLDJCQUEyQjtRQUN6QixNQUFNcEMsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQWdCLElBQ3JDMEIsb0JBQW9CQyxJQUFBQSxpREFBa0MsRUFBQzVCLGdCQUN2RGlDLFdBQVdOLGtCQUFrQlUsS0FBSyxDQUFDLENBQUNSO1lBQ2xDLE1BQU1DLHVCQUF1QixJQUFJLENBQUNDLDBDQUEwQyxDQUFDRixtQkFDdkVTLCtCQUErQlIscUJBQXFCTyxLQUFLLENBQUMsQ0FBQ0w7Z0JBQ3pELE1BQU1PLDhCQUE4QlAsb0JBQW9CRSxVQUFVO2dCQUVsRSxJQUFJSyw2QkFBNkI7b0JBQy9CLE9BQU87Z0JBQ1Q7WUFDRjtZQUVOLElBQUlELDhCQUE4QjtnQkFDaEMsT0FBTztZQUNUO1FBQ0Y7UUFFTixPQUFPTDtJQUNUO0lBRUFPLFVBQVU7UUFDUixNQUFNbEMsc0JBQXNCLElBQUksQ0FBQ04sYUFBYSxDQUFDTyxNQUFNLEVBQy9Da0MsUUFBU25DLHdCQUF3QjtRQUV2QyxPQUFPbUM7SUFDVDtJQUVBQyxRQUFRQyxVQUFVLEVBQUVDLG1CQUFtQixFQUFFO1FBQ3ZDLElBQUlDLFlBQVk7UUFFaEIsTUFBTUosUUFBUSxJQUFJLENBQUNELE9BQU87UUFFMUIsSUFBSUMsT0FBTztZQUNUSSxZQUFZO1FBQ2QsT0FBTztZQUNMLE1BQU0zQyxTQUFTLE9BQ1RHLG1CQUFtQixJQUFJLENBQUNELG1CQUFtQixDQUFDRjtZQUVsRCxJQUFJRyxxQkFBcUIsTUFBTTtnQkFDN0IsTUFBTSxFQUFFeUMscUJBQXFCLEVBQUUsR0FBR0MsaUJBQVEsRUFDcENoRCxVQUFVLElBQUksRUFDZGlELHdCQUF3QkYsc0JBQXNCRyxvQ0FBb0MsQ0FBQ04sWUFBWUMscUJBQXFCN0MsVUFDcEhtRCwyQkFBMkJGLHNCQUFzQkcsbUJBQW1CLENBQUM5QztnQkFFM0UsSUFBSTZDLDBCQUEwQjtvQkFDNUJMLFlBQVk7Z0JBQ2Q7WUFDRjtRQUNGO1FBRUEsT0FBT0E7SUFDVDtJQUVBTyxPQUFPckQsT0FBTyxFQUFFO1FBQ2QsSUFBSUEsWUFBWXNELFdBQVc7WUFDekJ0RCxVQUFVLElBQUksQ0FBQ0ksVUFBVTtRQUMzQjtRQUVBSixRQUFRdUIsS0FBSyxDQUFDLENBQUMsK0JBQStCLENBQUM7UUFFL0N2QixRQUFReUIsZ0JBQWdCLENBQUMsSUFBSSxDQUFDeEIsYUFBYTtJQUM3QztJQUVBc0QsaUJBQWlCQyxRQUFRLEVBQUU7UUFDekIsTUFBTXZELGdCQUFnQixJQUFJLENBQUNDLGdCQUFnQixJQUNyQ2EsZUFBZWQsY0FBY0wsSUFBSSxDQUFDNEQ7UUFFeEMsT0FBT3pDO0lBQ1Q7SUFFQTBDLGtCQUFrQkQsUUFBUSxFQUFFckQsU0FBUyxJQUFJLEVBQUU7UUFDekMsSUFBSUY7UUFFSkEsZ0JBQWdCLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUNDO1FBRXRDRixnQkFBZ0JMLEtBQUtLLGVBQWV1RCxXQUFZLEdBQUc7UUFFbkQsT0FBT3ZEO0lBQ1Q7SUFFQXlELCtCQUErQkMsWUFBWSxFQUFFO1FBQzNDLE1BQU01QyxlQUFlLElBQUksQ0FBQ3dDLGdCQUFnQixDQUFDLENBQUN4QztZQUMxQyxNQUFNNkMsc0JBQXNCN0MsYUFBYThDLGlCQUFpQixDQUFDRjtZQUUzRCxJQUFJQyxxQkFBcUI7Z0JBQ3ZCLE9BQU87WUFDVDtRQUNGLE1BQU07UUFFTixPQUFPN0M7SUFDVDtJQUVBK0MsbUNBQW1DaEMsZ0JBQWdCLEVBQUU7UUFDbkQsTUFBTWlDLHFCQUFxQixJQUFJLENBQUNDLHdDQUF3QyxDQUFDbEMsbUJBQ25FZixlQUFlZ0Qsb0JBQXFCLEdBQUc7UUFFN0MsT0FBT2hEO0lBQ1Q7SUFFQWlELHlDQUF5Q2xDLGdCQUFnQixFQUFFO1FBQ3pELE1BQU1pQyxxQkFBcUIsSUFBSSxDQUFDUixnQkFBZ0IsQ0FBQyxDQUFDeEM7WUFDaEQsTUFBTWtELHFCQUFxQmxELGFBQWFtRCxRQUFRO1lBRWhELElBQUlELG9CQUFvQjtnQkFDdEIsTUFBTUYscUJBQXFCaEQsY0FDckJvRCwwQkFBMEJKLG1CQUFtQksscUJBQXFCLENBQUN0QztnQkFFekUsSUFBSXFDLHlCQUF5QjtvQkFDM0IsT0FBTztnQkFDVDtZQUNGO1FBQ0YsTUFBTTtRQUVOLE9BQU9KO0lBQ1Q7SUFFQS9CLDJDQUEyQ0YsZ0JBQWdCLEVBQUU7UUFDM0QsTUFBTUcsc0JBQXNCLElBQUksQ0FBQ3dCLGlCQUFpQixDQUFDLENBQUMxQztZQUNsRCxNQUFNc0Qsc0JBQXNCdEQsYUFBYXVELFNBQVM7WUFFbEQsSUFBSUQscUJBQXFCO2dCQUN2QixNQUFNcEMsc0JBQXNCbEIsY0FDdEJvRCwwQkFBMEJsQyxvQkFBb0JtQyxxQkFBcUIsQ0FBQ3RDO2dCQUUxRSxJQUFJcUMseUJBQXlCO29CQUMzQixPQUFPO2dCQUNUO1lBQ0Y7UUFDRixNQUFNO1FBRU4sT0FBT2xDO0lBQ1Q7SUFFQXNDLGtEQUFrRHpDLGdCQUFnQixFQUFFZixZQUFZLEVBQUU7UUFDaEYsTUFBTUMsZ0JBQWdCRCxjQUFjLEdBQUc7UUFFdkNBLGVBQWUsSUFBSSxDQUFDd0MsZ0JBQWdCLENBQUMsQ0FBQ3hDO1lBQ3BDLE1BQU1vRCwwQkFBMEJwRCxhQUFhcUQscUJBQXFCLENBQUN0QztZQUVuRSxJQUFJcUMseUJBQXlCO2dCQUMzQixNQUFNL0MsZ0JBQWdCTCxjQUNoQnlELG9DQUFvQ3BELGNBQWNFLFNBQVMsQ0FBQ047Z0JBRWxFLElBQUl3RCxtQ0FBbUM7b0JBQ3JDLE9BQU87Z0JBQ1Q7WUFDRjtRQUNGLE1BQU07UUFFTixPQUFPekQ7SUFDVDtJQUVBMEQsd0NBQXdDM0MsZ0JBQWdCLEVBQUU7UUFDeEQsTUFBTWYsZUFBZSxJQUFJLENBQUMrQyxrQ0FBa0MsQ0FBQ2hDLG1CQUN2RDRDLHNCQUF1QjNELGlCQUFpQjtRQUU5QyxPQUFPMkQ7SUFDVDtJQUVBQyx1REFBdUQ3QyxnQkFBZ0IsRUFBRWYsWUFBWSxFQUFFO1FBQ3JGQSxlQUFlLElBQUksQ0FBQ3dELGlEQUFpRCxDQUFDekMsa0JBQWtCZixlQUFnQixHQUFHO1FBRTNHLE1BQU0yRCxzQkFBdUIzRCxpQkFBaUI7UUFFOUMsT0FBTzJEO0lBQ1Q7SUFFQSxPQUFPRSxZQUFZNUUsT0FBTyxFQUFFO1FBQzFCLE1BQU1DLGdCQUFnQixFQUFFLEVBQ2xCNEUsaUJBQWlCLElBQUlsRixlQUFlSyxTQUFTQztRQUVuRCxPQUFPNEU7SUFDVDtBQUNGIn0=
|
|
208
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb250ZXh0L2xpbWluYWwuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuaW1wb3J0IHsgbWV0YXZhcmlhYmxlTm9kZXNGcm9tRGVyaXZlZFN1YnN0aXR1dGlvbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL3N1YnN0aXR1dGlvbnNcIjtcblxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL2NvbnRleHRcIjtcbmltcG9ydCBlbGVtZW50cyBmcm9tIFwiLi4vZWxlbWVudHNcIjtcblxuY29uc3QgeyBmaW5kLCBmaXJzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpbWluYWxDb250ZXh0IGV4dGVuZHMgQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlcml2ZWRTdWJzdGl0dXRpb25zKSB7XG4gICAgc3VwZXIoY29udGV4dCk7XG5cbiAgICB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zID0gZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gIH1cblxuICBnZXREZXJpdmVkU3Vic3RpdHV0aW9ucyhuZXN0ZWQgPSB0cnVlKSB7XG4gICAgbGV0IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuXG4gICAgaWYgKG5lc3RlZCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXG4gICAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGNvbnRleHQuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKTtcblxuICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbIC8vL1xuICAgICAgICAuLi50aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLFxuICAgICAgICAuLi5kZXJpdmVkU3Vic3RpdHV0aW9uc1xuICAgICAgXVxuICAgIH0gZWxzZSB7XG4gICAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZ2V0U29sZURlcml2ZWRTdWJzdGl0dXRpb24obmVzdGVkID0gdHJ1ZSkge1xuICAgIGxldCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMobmVzdGVkKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IGRlcml2ZWRTdWJzdGl0dXRpb25zLmxlbmd0aDtcblxuICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgZmlyc3REZXJpdmVkU3Vic3RpdHV0aW9uID0gZmlyc3QoZGVyaXZlZFN1YnN0aXR1dGlvbnMpO1xuXG4gICAgICBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbjsgLy8vXG4gICAgfVxuXG4gICAgcmV0dXJuIHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uKG5lc3RlZCA9IHRydWUpIHtcbiAgICBsZXQgc29sZU5vblRyaXZpYWxEZXJpdmVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5nZXRTb2xlRGVyaXZlZFN1YnN0aXR1dGlvbihuZXN0ZWQpO1xuXG4gICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbk5vblRyaXZpYWwgPSBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbi5pc05vblRyaXZpYWwoKTtcblxuICAgICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCkge1xuICAgICAgICBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb24gPSBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbjsgIC8vL1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb2xlTm9uVHJpdmlhbERlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBhZGREZXJpdmVkU3Vic3RpdHV0aW9uKGRlcml2ZWRTdWJzdGl0dXRpb24pIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbkEgPSBkZXJpdmVkU3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgIGNvbnRleHQudHJhY2UoYEFkZGluZyB0aGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWRTdWJzdGl0dXRpb24gdG8gdGhlIGxpbWluYWwgY29udGV4dC4uLmApO1xuXG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkIgPSB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLmZpbmQoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25CID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgLy8vXG4gICAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQiA9IGRlcml2ZWRTdWJzdGl0dXRpb25BLmlzRXF1YWxUbyhkZXJpdmVkU3Vic3RpdHV0aW9uQik7XG5cbiAgICAgIGlmIChkZXJpdmVkU3Vic3RpdHV0aW9uQUVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBjb250ZXh0LmRlYnVnKGBUaGUgJyR7ZGVyaXZlZFN1YnN0aXR1dGlvblN0cmluZ30nIGRlcml2ZWRTdWJzdGl0dXRpb24gaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgbGltaW5hbCBjb250ZXh0LmApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlcml2ZWRTdWJzdGl0dXRpb25zLnB1c2goZGVyaXZlZFN1YnN0aXR1dGlvbik7XG4gICAgfVxuXG4gICAgY29udGV4dC5kZWJ1ZyhgLi4uYWRkZWQgdGhlICcke2Rlcml2ZWRTdWJzdGl0dXRpb25TdHJpbmd9JyBkZXJpdmVkU3Vic3RpdHV0aW9uIHRvIHRoZSBsaW1pbmFsIGNvbnRleHQuYCk7XG4gIH1cblxuICBhZGREZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucykge1xuICAgIGRlcml2ZWRTdWJzdGl0dXRpb25zLmZvckVhY2goKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIHRoaXMuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbihkZXJpdmVkU3Vic3RpdHV0aW9uKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlc29sdmVEZXJpdmVkU3Vic3RpdHV0aW9ucygpIHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcywgLy8vXG4gICAgICAgICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZXMgPSBtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyhkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICBtZXRhdmFyaWFibGVOb2Rlcy5mb3JFYWNoKChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucy5mb3JFYWNoKChjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICByZXNvbHZlZCA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNSZXNvbHZlZCgpO1xuXG4gICAgICAgIGlmICghcmVzb2x2ZWQpIHtcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uLnJlc29sdmUoY29udGV4dCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCgpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IHRoaXMuZ2V0RGVyaXZlZFN1YnN0aXR1dGlvbnMoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlcyA9IG1ldGF2YXJpYWJsZU5vZGVzRnJvbURlcml2ZWRTdWJzdGl0dXRpb25zKGRlcml2ZWRTdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICByZXNvbHZlZCA9IG1ldGF2YXJpYWJsZU5vZGVzLmV2ZXJ5KChtZXRhdmFyaWFibGVOb2RlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgICAgICAgICBjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9ucy5ldmVyeSgoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLmlzUmVzb2x2ZWQoKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25SZXNvbHZlZCkge1xuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uc1Jlc29sdmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCA9IHRoaXMuZGVyaXZlZFN1YnN0aXR1dGlvbnMubGVuZ3RoLFxuICAgICAgICAgIGVtcHR5ID0gKGRlcml2ZWRTdWJzdGl0dXRpb25zTGVuZ3RoID09PSAwKTtcblxuICAgIHJldHVybiBlbXB0eTtcbiAgfVxuXG4gIHF1YWxpZnkoYXNzdW1wdGlvbiwgbWV0YUxldmVsQXNzdW1wdGlvbikge1xuICAgIGxldCBxdWFsaWZpZXMgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVtcHR5ID0gdGhpcy5pc0VtcHR5KCk7XG5cbiAgICBpZiAoZW1wdHkpIHtcbiAgICAgIHF1YWxpZmllcyA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IG5lc3RlZCA9IGZhbHNlLFxuICAgICAgICAgICAgc29sZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uKG5lc3RlZCk7XG5cbiAgICAgIGlmIChzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24gfSA9IGVsZW1lbnRzLFxuICAgICAgICAgICAgICBjb250ZXh0ID0gdGhpcyxcbiAgICAgICAgICAgICAgcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IFJlZmVyZW5jZURlcml2ZWRTdWJzdGl0dXRpb24uZnJvbUFzc3VtcHRpb25BbmRNZXRhTGV2ZWxBc3N1bXB0aW9uKGFzc3VtcHRpb24sIG1ldGFMZXZlbEFzc3VtcHRpb24sIGNvbnRleHQpLFxuICAgICAgICAgICAgICBzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbkNvbXBhcmVzID0gcmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbi5jb21wYXJlRGVyaXZlZFN1YnN0aXR1dGlvbihzb2xlRGVyaXZlZFN1YnN0aXR1dGlvbik7XG5cbiAgICAgICAgaWYgKHNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXMpIHtcbiAgICAgICAgICBxdWFsaWZpZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHF1YWxpZmllcztcbiAgfVxuXG4gIGNvbW1pdChjb250ZXh0KSB7XG4gICAgaWYgKGNvbnRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuICAgIH1cblxuICAgIGNvbnRleHQuZGVidWcoYENvbW1pdHRpbmcgdGhlIGxpbWlpbmFsIGNvbnRleHRgKTtcblxuICAgIGNvbnRleHQuYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnModGhpcy5kZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbihjYWxsYmFjaykge1xuICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25zID0gdGhpcy5nZXREZXJpdmVkU3Vic3RpdHV0aW9ucygpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBkZXJpdmVkU3Vic3RpdHV0aW9ucy5maW5kKGNhbGxiYWNrKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25zKGNhbGxiYWNrLCBuZXN0ZWQgPSB0cnVlKSB7XG4gICAgbGV0IGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuXG4gICAgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSB0aGlzLmdldERlcml2ZWRTdWJzdGl0dXRpb25zKG5lc3RlZCk7XG5cbiAgICBkZXJpdmVkU3Vic3RpdHV0aW9ucyA9IGZpbmQoZGVyaXZlZFN1YnN0aXR1dGlvbnMsIGNhbGxiYWNrKTsgIC8vL1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb25zO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeVZhcmlhYmxlTm9kZSh2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGRlcml2ZWRTdWJzdGl0dXRpb24ubWF0Y2hWYXJpYWJsZU5vZGUodmFyaWFibGVOb2RlKTtcblxuICAgICAgaWYgKHZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSkgfHwgbnVsbDtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IHNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uOyAgLy8vXG5cbiAgICByZXR1cm4gZGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRTaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbigoZGVyaXZlZFN1YnN0aXR1dGlvbikgPT4ge1xuICAgICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvblNpbXBsZSA9IGRlcml2ZWRTdWJzdGl0dXRpb24uaXNTaW1wbGUoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25TaW1wbGUpIHtcbiAgICAgICAgY29uc3Qgc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gc2ltcGxlRGVyaXZlZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGZpbmRDb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnNCeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkge1xuICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMoKGRlcml2ZWRTdWJzdGl0dXRpb24pID0+IHtcbiAgICAgIGNvbnN0IGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4ID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5pc0NvbXBsZXgoKTtcblxuICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uID0gZGVyaXZlZFN1YnN0aXR1dGlvbiwgIC8vL1xuICAgICAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IGNvbXBsZXhEZXJpdmVkU3Vic3RpdHV0aW9uLm1hdGNoTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgICAgICBpZiAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pIHx8IG51bGw7XG5cbiAgICByZXR1cm4gY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbihtZXRhdmFyaWFibGVOb2RlLCBkZXJpdmVkU3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbkEgPSBkZXJpdmVkU3Vic3RpdHV0aW9uOyAvLy9cblxuICAgIGRlcml2ZWRTdWJzdGl0dXRpb24gPSB0aGlzLmZpbmREZXJpdmVkU3Vic3RpdHV0aW9uKChkZXJpdmVkU3Vic3RpdHV0aW9uKSA9PiB7ICAvLy9cbiAgICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gZGVyaXZlZFN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uQiA9IGRlcml2ZWRTdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uQkVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQSA9IGRlcml2ZWRTdWJzdGl0dXRpb25CLmlzRXF1YWxUbyhkZXJpdmVkU3Vic3RpdHV0aW9uQSk7XG5cbiAgICAgICAgaWYgKGRlcml2ZWRTdWJzdGl0dXRpb25CRXF1YWxUb0Rlcml2ZWRTdWJzdGl0dXRpb25BKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSB8fCBudWxsO1xuXG4gICAgcmV0dXJuIGRlcml2ZWRTdWJzdGl0dXRpb247XG4gIH1cblxuICBpc0Rlcml2ZWRTdWJzdGl0dXRpb25QcmVzZW50QnlNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBkZXJpdmVkU3Vic3RpdHV0aW9uID0gdGhpcy5maW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5TWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IChkZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIGlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uKSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbiA9IHRoaXMuZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24obWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uKSxcbiAgICAgICAgICBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCA9IChkZXJpdmVkU3Vic3RpdHV0aW9uICE9PSBudWxsKTtcblxuICAgIHJldHVybiBkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTm90aGluZyhjb250ZXh0KSB7XG4gICAgY29uc3QgZGVyaXZlZFN1YnN0aXR1dGlvbnMgPSBbXSxcbiAgICAgICAgICBsaW1pbmFsQ29udGV4dCA9IG5ldyBMaW1pbmFsQ29udGV4dChjb250ZXh0LCBkZXJpdmVkU3Vic3RpdHV0aW9ucyk7XG5cbiAgICByZXR1cm4gbGltaW5hbENvbnRleHQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJMaW1pbmFsQ29udGV4dCIsImZpbmQiLCJmaXJzdCIsImFycmF5VXRpbGl0aWVzIiwiQ29udGV4dCIsImNvbnRleHQiLCJkZXJpdmVkU3Vic3RpdHV0aW9ucyIsImdldERlcml2ZWRTdWJzdGl0dXRpb25zIiwibmVzdGVkIiwiZ2V0Q29udGV4dCIsImdldFNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwic29sZURlcml2ZWRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uc0xlbmd0aCIsImxlbmd0aCIsImZpcnN0RGVyaXZlZFN1YnN0aXR1dGlvbiIsImdldFNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbiIsInNvbGVOb25Ucml2aWFsRGVyaXZlZFN1YnN0aXR1dGlvbiIsInNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uTm9uVHJpdmlhbCIsImlzTm9uVHJpdmlhbCIsImFkZERlcml2ZWRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uIiwiZGVyaXZlZFN1YnN0aXR1dGlvbkEiLCJkZXJpdmVkU3Vic3RpdHV0aW9uU3RyaW5nIiwiZ2V0U3RyaW5nIiwidHJhY2UiLCJkZXJpdmVkU3Vic3RpdHV0aW9uQiIsImRlcml2ZWRTdWJzdGl0dXRpb25BRXF1YWxUb0Rlcml2ZWRTdWJzdGl0dXRpb25CIiwiaXNFcXVhbFRvIiwiZGVidWciLCJwdXNoIiwiYWRkRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJmb3JFYWNoIiwicmVzb2x2ZURlcml2ZWRTdWJzdGl0dXRpb25zIiwibWV0YXZhcmlhYmxlTm9kZXMiLCJtZXRhdmFyaWFibGVOb2Rlc0Zyb21EZXJpdmVkU3Vic3RpdHV0aW9ucyIsIm1ldGF2YXJpYWJsZU5vZGUiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJmaW5kQ29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zQnlNZXRhdmFyaWFibGVOb2RlIiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb24iLCJyZXNvbHZlZCIsImlzUmVzb2x2ZWQiLCJyZXNvbHZlIiwiYXJlRGVyaXZlZFN1YnN0aXR1dGlvbnNSZXNvbHZlZCIsImV2ZXJ5IiwiY29tcGxleERlcml2ZWRTdWJzdGl0dXRpb25zUmVzb2x2ZWQiLCJjb21wbGV4RGVyaXZlZFN1YnN0aXR1dGlvblJlc29sdmVkIiwiaXNFbXB0eSIsImVtcHR5IiwicXVhbGlmeSIsImFzc3VtcHRpb24iLCJtZXRhTGV2ZWxBc3N1bXB0aW9uIiwicXVhbGlmaWVzIiwiUmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImVsZW1lbnRzIiwicmVmZXJlbmNlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImZyb21Bc3N1bXB0aW9uQW5kTWV0YUxldmVsQXNzdW1wdGlvbiIsInNvbGVEZXJpdmVkU3Vic3RpdHV0aW9uQ29tcGFyZXMiLCJjb21wYXJlRGVyaXZlZFN1YnN0aXR1dGlvbiIsImNvbW1pdCIsInVuZGVmaW5lZCIsImZpbmREZXJpdmVkU3Vic3RpdHV0aW9uIiwiY2FsbGJhY2siLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbnMiLCJmaW5kRGVyaXZlZFN1YnN0aXR1dGlvbkJ5VmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlIiwidmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoVmFyaWFibGVOb2RlIiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJzaW1wbGVEZXJpdmVkU3Vic3RpdHV0aW9uIiwiZmluZFNpbXBsZURlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uU2ltcGxlIiwiaXNTaW1wbGUiLCJtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZSIsImRlcml2ZWRTdWJzdGl0dXRpb25Db21wbGV4IiwiaXNDb21wbGV4IiwiZmluZERlcml2ZWRTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24iLCJkZXJpdmVkU3Vic3RpdHV0aW9uQkVxdWFsVG9EZXJpdmVkU3Vic3RpdHV0aW9uQSIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGUiLCJkZXJpdmVkU3Vic3RpdHV0aW9uUHJlc2VudCIsImlzRGVyaXZlZFN1YnN0aXR1dGlvblByZXNlbnRCeU1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb24iLCJmcm9tTm90aGluZyIsImxpbWluYWxDb250ZXh0Il0sIm1hcHBpbmdzIjoiQUFBQTs7OzsrQkFVQTs7O2VBQXFCQTs7OzJCQVJVOytCQUMyQjtnRUFFdEM7aUVBQ0M7Ozs7OztBQUVyQixNQUFNLEVBQUVDLElBQUksRUFBRUMsS0FBSyxFQUFFLEdBQUdDLHlCQUFjO0FBRXZCLE1BQU1ILHVCQUF1QkksZ0JBQU87SUFDakQsWUFBWUMsT0FBTyxFQUFFQyxvQkFBb0IsQ0FBRTtRQUN6QyxLQUFLLENBQUNEO1FBRU4sSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0E7SUFDOUI7SUFFQUMsd0JBQXdCQyxTQUFTLElBQUksRUFBRTtRQUNyQyxJQUFJRjtRQUVKLElBQUlFLFFBQVE7WUFDVixNQUFNSCxVQUFVLElBQUksQ0FBQ0ksVUFBVTtZQUUvQkgsdUJBQXVCRCxRQUFRRSx1QkFBdUI7WUFFdERELHVCQUF1QjttQkFDbEIsSUFBSSxDQUFDQSxvQkFBb0I7bUJBQ3pCQTthQUNKO1FBQ0gsT0FBTztZQUNMQSx1QkFBdUIsSUFBSSxDQUFDQSxvQkFBb0I7UUFDbEQ7UUFFQSxPQUFPQTtJQUNUO0lBRUFJLDJCQUEyQkYsU0FBUyxJQUFJLEVBQUU7UUFDeEMsSUFBSUcsMEJBQTBCO1FBRTlCLE1BQU1MLHVCQUF1QixJQUFJLENBQUND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
|