occam-verify-cli 0.0.1067 → 0.0.1069

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.
Files changed (137) hide show
  1. package/bin/action/verify.js +3 -2
  2. package/lib/assertion/contained.js +2 -2
  3. package/lib/assertion/defined.js +2 -2
  4. package/lib/assertion/subproof.js +3 -3
  5. package/lib/assignment/judgement.js +3 -3
  6. package/lib/axiom.js +11 -6
  7. package/lib/combinator.js +9 -9
  8. package/lib/conclusion.js +13 -10
  9. package/lib/conjecture.js +11 -6
  10. package/lib/consequent.js +13 -10
  11. package/lib/constructor.js +9 -9
  12. package/lib/context/file.js +34 -126
  13. package/lib/context/local.js +16 -5
  14. package/lib/context/release.js +2 -3
  15. package/lib/declaration.js +96 -2
  16. package/lib/equivalence.js +2 -2
  17. package/lib/frame.js +179 -98
  18. package/lib/index.js +22 -6
  19. package/lib/judgement.js +84 -5
  20. package/lib/label.js +12 -8
  21. package/lib/lemma.js +12 -12
  22. package/lib/metaLemma.js +120 -8
  23. package/lib/metaType.js +24 -3
  24. package/lib/metatheorem.js +145 -9
  25. package/lib/metavariable.js +128 -43
  26. package/lib/mixins/statement/qualified/unify.js +6 -10
  27. package/lib/mixins/statement/unify.js +4 -19
  28. package/lib/mixins/statement/verify.js +13 -13
  29. package/lib/mixins/term/unify.js +2 -2
  30. package/lib/premise.js +21 -13
  31. package/lib/reference.js +17 -17
  32. package/lib/rule.js +28 -40
  33. package/lib/statement/unqualified.js +34 -9
  34. package/lib/statement.js +7 -5
  35. package/lib/substitution/frameForMetavariable.js +75 -70
  36. package/lib/substitution/statementForMetavariable.js +83 -42
  37. package/lib/substitution/termForVariable.js +65 -68
  38. package/lib/substitution.js +46 -43
  39. package/lib/substitutions.js +52 -40
  40. package/lib/supposition.js +15 -11
  41. package/lib/term.js +6 -11
  42. package/lib/theorem.js +11 -6
  43. package/lib/topLevelAssertion.js +24 -42
  44. package/lib/type.js +5 -12
  45. package/lib/unifier/intrinsicLevel.js +4 -4
  46. package/lib/unifier/metaLevel.js +11 -7
  47. package/lib/unifier/metavariable.js +6 -6
  48. package/lib/unifier/statementWithCombinator.js +16 -16
  49. package/lib/unifier/termWithConstructor.js +7 -7
  50. package/lib/utilities/brackets.js +10 -10
  51. package/lib/utilities/json.js +493 -0
  52. package/lib/utilities/node.js +26 -19
  53. package/lib/utilities/release.js +53 -0
  54. package/lib/utilities/releaseContext.js +4 -15
  55. package/lib/utilities/tokens.js +8 -1
  56. package/lib/variable.js +14 -15
  57. package/lib/verifier/topLevel.js +5 -5
  58. package/package.json +1 -1
  59. package/src/assertion/contained.js +1 -1
  60. package/src/assertion/defined.js +1 -1
  61. package/src/assertion/subproof.js +2 -3
  62. package/src/assignment/judgement.js +3 -4
  63. package/src/axiom.js +14 -6
  64. package/src/combinator.js +12 -13
  65. package/src/conclusion.js +16 -13
  66. package/src/conjecture.js +14 -6
  67. package/src/consequent.js +16 -13
  68. package/src/constructor.js +11 -13
  69. package/src/context/file.js +94 -202
  70. package/src/context/local.js +8 -6
  71. package/src/context/release.js +2 -3
  72. package/src/declaration.js +126 -45
  73. package/src/equivalence.js +2 -2
  74. package/src/frame.js +225 -141
  75. package/src/index.js +17 -1
  76. package/src/judgement.js +109 -3
  77. package/src/label.js +15 -10
  78. package/src/lemma.js +17 -10
  79. package/src/metaLemma.js +102 -1
  80. package/src/metaType.js +29 -3
  81. package/src/metatheorem.js +143 -2
  82. package/src/metavariable.js +189 -66
  83. package/src/mixins/statement/qualified/unify.js +7 -19
  84. package/src/mixins/statement/unify.js +3 -25
  85. package/src/mixins/statement/verify.js +15 -13
  86. package/src/mixins/term/unify.js +1 -1
  87. package/src/premise.js +31 -16
  88. package/src/reference.js +18 -18
  89. package/src/rule.js +40 -58
  90. package/src/statement/unqualified.js +41 -11
  91. package/src/statement.js +6 -3
  92. package/src/substitution/frameForMetavariable.js +85 -98
  93. package/src/substitution/statementForMetavariable.js +109 -45
  94. package/src/substitution/termForVariable.js +83 -94
  95. package/src/substitution.js +36 -34
  96. package/src/substitutions.js +53 -46
  97. package/src/supposition.js +22 -14
  98. package/src/term.js +5 -15
  99. package/src/theorem.js +14 -6
  100. package/src/topLevelAssertion.js +38 -64
  101. package/src/type.js +5 -20
  102. package/src/unifier/intrinsicLevel.js +4 -3
  103. package/src/unifier/metaLevel.js +19 -7
  104. package/src/unifier/metavariable.js +5 -5
  105. package/src/unifier/statementWithCombinator.js +19 -19
  106. package/src/unifier/termWithConstructor.js +7 -7
  107. package/src/utilities/brackets.js +5 -5
  108. package/src/utilities/json.js +551 -0
  109. package/src/utilities/node.js +28 -23
  110. package/src/{verify → utilities}/release.js +5 -1
  111. package/src/utilities/releaseContext.js +2 -2
  112. package/src/utilities/tokens.js +10 -0
  113. package/src/variable.js +18 -19
  114. package/src/verifier/topLevel.js +6 -4
  115. package/lib/argument.js +0 -106
  116. package/lib/metaTypes.js +0 -19
  117. package/lib/unify/metavariableWithFrame.js +0 -40
  118. package/lib/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -31
  119. package/lib/unify/statementWithSttaemetnGivenEquivalences.js +0 -45
  120. package/lib/verify/declaration.js +0 -83
  121. package/lib/verify/frame.js +0 -120
  122. package/lib/verify/judgement.js +0 -88
  123. package/lib/verify/metaLemma.js +0 -49
  124. package/lib/verify/metatheorem.js +0 -48
  125. package/lib/verify/metavariableGivenMetaType.js +0 -44
  126. package/lib/verify/release.js +0 -50
  127. package/src/argument.js +0 -79
  128. package/src/metaTypes.js +0 -11
  129. package/src/unify/metavariableWithFrame.js +0 -40
  130. package/src/unify/simpleSubstitutionStatementWithComplexSubstitutionStatement.js +0 -27
  131. package/src/unify/statementWithSttaemetnGivenEquivalences.js +0 -51
  132. package/src/verify/declaration.js +0 -113
  133. package/src/verify/frame.js +0 -157
  134. package/src/verify/judgement.js +0 -127
  135. package/src/verify/metaLemma.js +0 -72
  136. package/src/verify/metatheorem.js +0 -67
  137. package/src/verify/metavariableGivenMetaType.js +0 -45
@@ -11,6 +11,8 @@ Object.defineProperty(exports, "default", {
11
11
  var _shim = /*#__PURE__*/ _interop_require_default(require("../shim"));
12
12
  var _substitution = /*#__PURE__*/ _interop_require_default(require("../substitution"));
13
13
  var _query = require("../utilities/query");
14
+ var _node = require("../utilities/node");
15
+ var _tokens = require("../utilities/tokens");
14
16
  function _assert_this_initialized(self) {
15
17
  if (self === void 0) {
16
18
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -89,31 +91,32 @@ function _is_native_reflect_construct() {
89
91
  return !!result;
90
92
  })();
91
93
  }
92
- var substitutionNodeQuery = (0, _query.nodeQuery)("/statement/substitution"), substitutionFrameNodeQuery = (0, _query.nodeQuery)("/substitution/frame!"), frameMetavariableNodeQuery = (0, _query.nodeQuery)("/frame/metavariable!"), substitutionMetavariableNodeQuery = (0, _query.nodeQuery)("/substitution/metavariable!");
94
+ var frameNodeQuery = (0, _query.nodeQuery)("/substitution/frame[0]"), metavariableNodeQuery = (0, _query.nodeQuery)("/substitution/frame[1]/metavariable!"), substitutionNodeQuery = (0, _query.nodeQuery)("/statement/substitution");
93
95
  var FrameForMetavariableSubstitution = /*#__PURE__*/ function(Substitution) {
94
96
  _inherits(FrameForMetavariableSubstitution, Substitution);
95
- function FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode) {
97
+ function FrameForMetavariableSubstitution(string, frame, metavariable, substitutionNode, substitutionTokens) {
96
98
  _class_call_check(this, FrameForMetavariableSubstitution);
97
99
  var _this;
98
100
  _this = _call_super(this, FrameForMetavariableSubstitution, [
99
101
  string
100
102
  ]);
101
- _this.frameNode = frameNode;
102
- _this.metavariableNode = metavariableNode;
103
+ _this.frame = frame;
104
+ _this.metavariable = metavariable;
103
105
  _this.substitutionNode = substitutionNode;
106
+ _this.substitutionTokens = substitutionTokens;
104
107
  return _this;
105
108
  }
106
109
  _create_class(FrameForMetavariableSubstitution, [
107
110
  {
108
- key: "getFrameNode",
109
- value: function getFrameNode() {
110
- return this.frameNode;
111
+ key: "getFrame",
112
+ value: function getFrame() {
113
+ return this.frame;
111
114
  }
112
115
  },
113
116
  {
114
- key: "getMetavariableNode",
115
- value: function getMetavariableNode() {
116
- return this.metavariableNode;
117
+ key: "getMetavariable",
118
+ value: function getMetavariable() {
119
+ return this.metavariable;
117
120
  }
118
121
  },
119
122
  {
@@ -123,25 +126,45 @@ var FrameForMetavariableSubstitution = /*#__PURE__*/ function(Substitution) {
123
126
  }
124
127
  },
125
128
  {
126
- key: "transformed",
127
- value: function transformed(substitutions) {
128
- var transformedSubstitution = null;
129
- var transformedFrameNode = transformFrameNode(this.frameNode, substitutions), transformedMetavariableNode = transformMetavariableNode(this.metavariableNode, substitutions);
130
- if (transformedFrameNode !== null && transformedMetavariableNode !== null) {
131
- var string = null, frameNode = transformedFrameNode, metavariableNode = transformedMetavariableNode, substitutionNode = null, frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode);
132
- transformedSubstitution = frameForMetavariableSubstitution; ///
133
- }
134
- return transformedSubstitution;
129
+ key: "getSubstitutionTokens",
130
+ value: function getSubstitutionTokens() {
131
+ return this.substitutionTokens;
132
+ }
133
+ },
134
+ {
135
+ key: "getMetavariableName",
136
+ value: function getMetavariableName() {
137
+ var metavariableName = this.metavariable.getName();
138
+ return metavariableName;
139
+ }
140
+ },
141
+ {
142
+ key: "getSubstitutionString",
143
+ value: function getSubstitutionString() {
144
+ var frameString = this.frame.getString(), metavariableString = this.metavariable.getString(), substitutionString = "[[".concat(frameString, "] for [").concat(metavariableString, "]]");
145
+ return substitutionString;
146
+ }
147
+ },
148
+ {
149
+ key: "setSubstitutionNodeAndTokens",
150
+ value: function setSubstitutionNodeAndTokens(localContext) {
151
+ var lexer = localContext.getLexer(), parser = localContext.getParser(), substitutionString = this.getSubstitutionString(), unqualifiedStatementString = (0, _node.unqualifiedStatementStringFromSubstitutionString)(substitutionString), unqualifiedStatementTokens = (0, _tokens.unqualifiedStatementTokensFromUnqualifiedStatementString)(unqualifiedStatementString, lexer), unqualifiedStatementNode = (0, _node.unqualifiedStatementNodeFromUnqualifiedStatementTokens)(unqualifiedStatementTokens, parser);
152
+ this.substitutionNode = (0, _node.substitutionNodeFromUnqualifiedStatementNode)(unqualifiedStatementNode);
153
+ this.substitutionTokens = (0, _tokens.substitutionTokensFromUnqualifiedStatementTokensAndSubstitutionNode)(unqualifiedStatementTokens, this.substitutionNode);
135
154
  }
136
155
  },
156
+ {
157
+ key: "setSubstitutionTokens",
158
+ value: function setSubstitutionTokens(localContext) {}
159
+ },
137
160
  {
138
161
  key: "isEqualTo",
139
162
  value: function isEqualTo(substitution) {
140
163
  var equalTo = false;
141
- var frameNode = substitution.getFrameNode(), metavariableNode = substitution.getMetavariableNode();
142
- if (frameNode !== null && metavariableNode !== null) {
143
- var frameNodeMatches = this.matchFrameNode(frameNode), metavariableNodeMatches = this.matchMetavariableNode(metavariableNode);
144
- equalTo = frameNodeMatches && metavariableNodeMatches;
164
+ var frameNode = substitution.getFrameNode(), metavariableName = substitution.getMetavariableName();
165
+ if (frameNode !== null && metavariableName !== null) {
166
+ var frameNodeMatches = this.matchFrameNode(frameNode), metavariableNameMatches = this.matchMetavariableName(metavariableName);
167
+ equalTo = frameNodeMatches && metavariableNameMatches;
145
168
  }
146
169
  return equalTo;
147
170
  }
@@ -149,29 +172,41 @@ var FrameForMetavariableSubstitution = /*#__PURE__*/ function(Substitution) {
149
172
  {
150
173
  key: "matchFrameNode",
151
174
  value: function matchFrameNode(frameNode) {
152
- var frameNodeMatches = this.frameNode.match(frameNode);
153
- return frameNodeMatches;
175
+ return this.frame.matchFrameNode(frameNode);
154
176
  }
155
177
  },
156
178
  {
157
- key: "matchMetavariableNode",
158
- value: function matchMetavariableNode(metavariableNode) {
159
- var metavariableNodeMatches = this.metavariableNode.match(metavariableNode);
160
- return metavariableNodeMatches;
179
+ key: "matchMetavariableName",
180
+ value: function matchMetavariableName(metavariableName) {
181
+ var metavariableNameMatches;
182
+ var metavariableNameA = metavariableName; ///
183
+ metavariableName = this.metavariable.getName();
184
+ var metavariableNameB = metavariableName; ///
185
+ metavariableNameMatches = metavariableNameA === metavariableNameB;
186
+ return metavariableNameMatches;
161
187
  }
162
188
  },
163
189
  {
164
190
  key: "matchSubstitutionNode",
165
191
  value: function matchSubstitutionNode(substitutionNode) {
166
- var substitutionNodeMatches = this.substitutionNode.match(substitutionNode);
192
+ var substitutionNodeMatches;
193
+ if (substitutionNode === null && this.substitutionNode === null) {
194
+ substitutionNodeMatches = true;
195
+ } else if (substitutionNode === null && this.substitutionNode !== null) {
196
+ substitutionNodeMatches = false;
197
+ } else if (substitutionNode !== null && this.substitutionNode === null) {
198
+ substitutionNodeMatches = false;
199
+ } else {
200
+ substitutionNodeMatches = this.substitutionNode.match(substitutionNode);
201
+ }
167
202
  return substitutionNodeMatches;
168
203
  }
169
204
  },
170
205
  {
171
- key: "matchMetavariableNodeAndSubstitutionNode",
172
- value: function matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
173
- var metavariableNodeMatches = this.matchMetavariableNode(metavariableNode), substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode), metavariableNodeAndSubstitutionNodeMatches = metavariableNodeMatches && substitutionNodeMatches;
174
- return metavariableNodeAndSubstitutionNodeMatches;
206
+ key: "matchMetavariableNameAndSubstitutionNode",
207
+ value: function matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
208
+ var metavariableNameMatches = this.matchMetavariableName(metavariableName), substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode), metavariableNameAndSubstitutionNodeMatches = metavariableNameMatches && substitutionNodeMatches;
209
+ return metavariableNameAndSubstitutionNodeMatches;
175
210
  }
176
211
  }
177
212
  ], [
@@ -181,10 +216,10 @@ var FrameForMetavariableSubstitution = /*#__PURE__*/ function(Substitution) {
181
216
  var frameForMetavariableSubstitution = null;
182
217
  var substitutionNode = substitutionNodeQuery(statementNode);
183
218
  if (substitutionNode !== null) {
184
- var substitutionFrameNode = substitutionFrameNodeQuery(substitutionNode);
185
- if (substitutionFrameNode !== null) {
186
- var Frame = _shim.default.Frame, Metavariable = _shim.default.Metavariable, substitutionMetavariableNode = substitutionMetavariableNodeQuery(substitutionNode), metavariableNode = substitutionMetavariableNode, frameNode = substitutionFrameNode, frame = Frame.fromTermNode(frameNode, localContext), variable = Metavariable.fromMetavariableNode(metavariableNode, localContext), string = stringFromFrameAndMetavariable(frame, variable, localContext);
187
- frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode);
219
+ var frameNode = frameNodeQuery(substitutionNode), metavariableNode = metavariableNodeQuery(substitutionNode);
220
+ if (frameNode !== null && metavariableNode !== null) {
221
+ var Frame = _shim.default.Frame, Metavariable = _shim.default.Metavariable, frame = Frame.fromFrameNode(frameNode, localContext), metavariable = Metavariable.fromMetavariableNode(metavariableNode, localContext), string = stringFromFrameAndMetavariable(frame, metavariable, localContext), substitutionTokens = localContext.nodeAsTokens(substitutionNode);
222
+ frameForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frame, metavariable, substitutionNode, substitutionTokens);
188
223
  }
189
224
  }
190
225
  return frameForMetavariableSubstitution;
@@ -193,46 +228,16 @@ var FrameForMetavariableSubstitution = /*#__PURE__*/ function(Substitution) {
193
228
  {
194
229
  key: "fromFrameAndMetavariable",
195
230
  value: function fromFrameAndMetavariable(frame, metavariable, localContext) {
196
- var string = stringFromFrameAndMetavariable(frame, metavariable, localContext), frameNode = frame.getNode(), metavariableNode = metavariable.getNode(), substitutionNode = null, statementForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frameNode, metavariableNode, substitutionNode);
231
+ var string = stringFromFrameAndMetavariable(frame, metavariable, localContext), substitutionNode = null, substitutionTokens = null, statementForMetavariableSubstitution = new FrameForMetavariableSubstitution(string, frame, metavariable, substitutionNode, substitutionTokens);
197
232
  return statementForMetavariableSubstitution;
198
233
  }
199
234
  }
200
235
  ]);
201
236
  return FrameForMetavariableSubstitution;
202
237
  }(_substitution.default);
203
- function transformFrameNode(frameNode, substitutions) {
204
- var transformedFrameNode = null;
205
- var frameMetavariableNode = frameMetavariableNodeQuery(frameNode);
206
- if (frameMetavariableNode !== null) {
207
- var metavariableNode = frameMetavariableNode; ///
208
- substitutions.someSubstitution(function(substitution) {
209
- var metavariableNodeMatches = substitution.matchMetavariableNode(metavariableNode);
210
- if (metavariableNodeMatches) {
211
- var _$frameNode = substitution.getFrameNode();
212
- transformedFrameNode = _$frameNode; ////
213
- return true;
214
- }
215
- });
216
- }
217
- return transformedFrameNode;
218
- }
219
- function transformMetavariableNode(metavariableNode, substitutions) {
220
- var transformedMetavariableNode = null;
221
- substitutions.someSubstitution(function(substitution) {
222
- var metavariableNodeMatches = substitution.matchMetavariableNode(metavariableNode);
223
- if (metavariableNodeMatches) {
224
- var frameNode = substitution.getFrameNode(), frameMetavariableNode = frameMetavariableNodeQuery(frameNode);
225
- if (frameMetavariableNode !== null) {
226
- transformedMetavariableNode = frameMetavariableNode; ///
227
- return true;
228
- }
229
- }
230
- });
231
- return transformedMetavariableNode;
232
- }
233
238
  function stringFromFrameAndMetavariable(frame, metavariable, localContext) {
234
239
  var frameNode = frame.getNode(), frameString = localContext.nodeAsString(frameNode), metavariableString = metavariable.getString(), string = "[[".concat(frameString, "] for [").concat(metavariableString, "]]");
235
240
  return string;
236
241
  }
237
242
 
238
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJzdGl0dXRpb24vZnJhbWVGb3JNZXRhdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBzaGltIGZyb20gXCIuLi9zaGltXCI7XG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuLi9zdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuXG5jb25zdCBzdWJzdGl0dXRpb25Ob2RlUXVlcnkgPSBub2RlUXVlcnkoXCIvc3RhdGVtZW50L3N1YnN0aXR1dGlvblwiKSxcbiAgICAgIHN1YnN0aXR1dGlvbkZyYW1lTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N1YnN0aXR1dGlvbi9mcmFtZSFcIiksXG4gICAgICBmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9mcmFtZS9tZXRhdmFyaWFibGUhXCIpLFxuICAgICAgc3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N1YnN0aXR1dGlvbi9tZXRhdmFyaWFibGUhXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgZnJhbWVOb2RlLCBtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgc3VwZXIoc3RyaW5nKTtcblxuICAgIHRoaXMuZnJhbWVOb2RlID0gZnJhbWVOb2RlO1xuICAgIHRoaXMubWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGU7XG4gICAgdGhpcy5zdWJzdGl0dXRpb25Ob2RlID0gc3Vic3RpdHV0aW9uTm9kZTtcbiAgfVxuXG4gIGdldEZyYW1lTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5mcmFtZU5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZU5vZGU7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb25Ob2RlKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnN0aXR1dGlvbk5vZGU7XG4gIH1cblxuICB0cmFuc2Zvcm1lZChzdWJzdGl0dXRpb25zKSB7XG4gICAgbGV0IHRyYW5zZm9ybWVkU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHRyYW5zZm9ybWVkRnJhbWVOb2RlID0gdHJhbnNmb3JtRnJhbWVOb2RlKHRoaXMuZnJhbWVOb2RlLCBzdWJzdGl0dXRpb25zKSxcbiAgICAgICAgICB0cmFuc2Zvcm1lZE1ldGF2YXJpYWJsZU5vZGUgPSB0cmFuc2Zvcm1NZXRhdmFyaWFibGVOb2RlKHRoaXMubWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9ucyk7XG5cbiAgICBpZiAoKHRyYW5zZm9ybWVkRnJhbWVOb2RlICE9PSBudWxsKSAmJiAodHJhbnNmb3JtZWRNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgY29uc3Qgc3RyaW5nID0gbnVsbCwgIC8vL1xuICAgICAgICAgICAgZnJhbWVOb2RlID0gdHJhbnNmb3JtZWRGcmFtZU5vZGUsIC8vL1xuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHRyYW5zZm9ybWVkTWV0YXZhcmlhYmxlTm9kZSwgLy8vXG4gICAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlID0gbnVsbCxcbiAgICAgICAgICAgIGZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uKHN0cmluZywgZnJhbWVOb2RlLCBtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgdHJhbnNmb3JtZWRTdWJzdGl0dXRpb24gPSBmcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbjsgIC8vL1xuICAgIH1cblxuICAgIHJldHVybiB0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIGlzRXF1YWxUbyhzdWJzdGl0dXRpb24pIHtcbiAgICBsZXQgZXF1YWxUbyA9IGZhbHNlO1xuXG4gICAgY29uc3QgZnJhbWVOb2RlID0gc3Vic3RpdHV0aW9uLmdldEZyYW1lTm9kZSgpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0TWV0YXZhcmlhYmxlTm9kZSgpO1xuXG4gICAgaWYgKChmcmFtZU5vZGUgIT09IG51bGwpICYmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgY29uc3QgZnJhbWVOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKSxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGVxdWFsVG8gPSAoZnJhbWVOb2RlTWF0Y2hlcyAmJiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVxdWFsVG87XG4gIH1cblxuICBtYXRjaEZyYW1lTm9kZShmcmFtZU5vZGUpIHtcbiAgICBjb25zdCBmcmFtZU5vZGVNYXRjaGVzID0gdGhpcy5mcmFtZU5vZGUubWF0Y2goZnJhbWVOb2RlKTtcblxuICAgIHJldHVybiBmcmFtZU5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMubWV0YXZhcmlhYmxlTm9kZS5tYXRjaChtZXRhdmFyaWFibGVOb2RlKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLnN1YnN0aXR1dGlvbk5vZGUubWF0Y2goc3Vic3RpdHV0aW9uTm9kZSk7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlKG1ldGF2YXJpYWJsZU5vZGUsIHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpLFxuICAgICAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzICYmIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXM7XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IGZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uID0gbnVsbDtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbk5vZGUgPSBzdWJzdGl0dXRpb25Ob2RlUXVlcnkoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkge1xuICAgICAgbGV0IHN1YnN0aXR1dGlvbkZyYW1lTm9kZSA9IHN1YnN0aXR1dGlvbkZyYW1lTm9kZVF1ZXJ5KHN1YnN0aXR1dGlvbk5vZGUpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uRnJhbWVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHsgRnJhbWUsIE1ldGF2YXJpYWJsZSB9ID0gc2hpbSxcbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uTWV0YXZhcmlhYmxlTm9kZSA9IHN1YnN0aXR1dGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeShzdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IHN1YnN0aXR1dGlvbk1ldGF2YXJpYWJsZU5vZGUsICAvLy9cbiAgICAgICAgICAgICAgZnJhbWVOb2RlID0gc3Vic3RpdHV0aW9uRnJhbWVOb2RlLCAgLy8vXG4gICAgICAgICAgICAgIGZyYW1lID0gRnJhbWUuZnJvbVRlcm1Ob2RlKGZyYW1lTm9kZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICAgICAgdmFyaWFibGUgPSBNZXRhdmFyaWFibGUuZnJvbU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICAgICAgc3RyaW5nID0gc3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCB2YXJpYWJsZSwgbG9jYWxDb250ZXh0KTtcblxuICAgICAgICBmcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbihzdHJpbmcsIGZyYW1lTm9kZSwgbWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlLCBsb2NhbENvbnRleHQpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZS5nZXROb2RlKCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZSA9IG51bGwsXG4gICAgICAgICAgc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uID0gbmV3IEZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uKHN0cmluZywgZnJhbWVOb2RlLCBtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtRnJhbWVOb2RlKGZyYW1lTm9kZSwgc3Vic3RpdHV0aW9ucykge1xuICBsZXQgdHJhbnNmb3JtZWRGcmFtZU5vZGUgPSBudWxsO1xuXG4gIGNvbnN0IGZyYW1lTWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTWV0YXZhcmlhYmxlTm9kZVF1ZXJ5KGZyYW1lTm9kZSk7XG5cbiAgaWYgKGZyYW1lTWV0YXZhcmlhYmxlTm9kZSAhPT0gbnVsbCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU1ldGF2YXJpYWJsZU5vZGU7ICAvLy9cblxuICAgIHN1YnN0aXR1dGlvbnMuc29tZVN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgICBjb25zdCBtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcyA9IHN1YnN0aXR1dGlvbi5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICAgIGlmIChtZXRhdmFyaWFibGVOb2RlTWF0Y2hlcykge1xuICAgICAgICBjb25zdCBmcmFtZU5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0RnJhbWVOb2RlKCk7XG5cbiAgICAgICAgdHJhbnNmb3JtZWRGcmFtZU5vZGUgPSBmcmFtZU5vZGU7IC8vLy9cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2Zvcm1lZEZyYW1lTm9kZTtcbn1cblxuZnVuY3Rpb24gdHJhbnNmb3JtTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBzdWJzdGl0dXRpb25zKSB7XG4gIGxldCB0cmFuc2Zvcm1lZE1ldGF2YXJpYWJsZU5vZGUgPSBudWxsO1xuXG4gIHN1YnN0aXR1dGlvbnMuc29tZVN1YnN0aXR1dGlvbigoc3Vic3RpdHV0aW9uKSA9PiB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgPSBzdWJzdGl0dXRpb24ubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpO1xuXG4gICAgaWYgKG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzKSB7XG4gICAgICBjb25zdCBmcmFtZU5vZGUgPSBzdWJzdGl0dXRpb24uZ2V0RnJhbWVOb2RlKCksXG4gICAgICAgICAgICBmcmFtZU1ldGF2YXJpYWJsZU5vZGUgPSBmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeShmcmFtZU5vZGUpO1xuXG4gICAgICBpZiAoZnJhbWVNZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSB7XG4gICAgICAgIHRyYW5zZm9ybWVkTWV0YXZhcmlhYmxlTm9kZSA9IGZyYW1lTWV0YXZhcmlhYmxlTm9kZTsgIC8vL1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkTWV0YXZhcmlhYmxlTm9kZTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlKGZyYW1lLCBtZXRhdmFyaWFibGUsIGxvY2FsQ29udGV4dCkge1xuICBjb25zdCBmcmFtZU5vZGUgPSBmcmFtZS5nZXROb2RlKCksXG4gICAgICAgIGZyYW1lU3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhmcmFtZU5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCksXG4gICAgICAgIHN0cmluZyA9IGBbWyR7ZnJhbWVTdHJpbmd9XSBmb3IgWyR7bWV0YXZhcmlhYmxlU3RyaW5nfV1dYDtcblxuICByZXR1cm4gc3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbIkZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwic3Vic3RpdHV0aW9uTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5Iiwic3Vic3RpdHV0aW9uRnJhbWVOb2RlUXVlcnkiLCJmcmFtZU1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsInN1YnN0aXR1dGlvbk1ldGF2YXJpYWJsZU5vZGVRdWVyeSIsInN0cmluZyIsImZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwiZ2V0RnJhbWVOb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsImdldFN1YnN0aXR1dGlvbk5vZGUiLCJ0cmFuc2Zvcm1lZCIsInN1YnN0aXR1dGlvbnMiLCJ0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbiIsInRyYW5zZm9ybWVkRnJhbWVOb2RlIiwidHJhbnNmb3JtRnJhbWVOb2RlIiwidHJhbnNmb3JtZWRNZXRhdmFyaWFibGVOb2RlIiwidHJhbnNmb3JtTWV0YXZhcmlhYmxlTm9kZSIsImZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwiaXNFcXVhbFRvIiwic3Vic3RpdHV0aW9uIiwiZXF1YWxUbyIsImZyYW1lTm9kZU1hdGNoZXMiLCJtYXRjaEZyYW1lTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2giLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUiLCJtZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMiLCJmcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJsb2NhbENvbnRleHQiLCJzdWJzdGl0dXRpb25GcmFtZU5vZGUiLCJGcmFtZSIsInNoaW0iLCJNZXRhdmFyaWFibGUiLCJzdWJzdGl0dXRpb25NZXRhdmFyaWFibGVOb2RlIiwiZnJhbWUiLCJmcm9tVGVybU5vZGUiLCJ2YXJpYWJsZSIsImZyb21NZXRhdmFyaWFibGVOb2RlIiwic3RyaW5nRnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwiZnJvbUZyYW1lQW5kTWV0YXZhcmlhYmxlIiwibWV0YXZhcmlhYmxlIiwiZ2V0Tm9kZSIsInN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsIlN1YnN0aXR1dGlvbiIsImZyYW1lTWV0YXZhcmlhYmxlTm9kZSIsInNvbWVTdWJzdGl0dXRpb24iLCJmcmFtZVN0cmluZyIsIm5vZGVBc1N0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyIsImdldFN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFZcUJBOzs7MkRBVko7bUVBQ1E7cUJBRUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFMUIsSUFBTUMsd0JBQXdCQyxJQUFBQSxnQkFBUyxFQUFDLDRCQUNsQ0MsNkJBQTZCRCxJQUFBQSxnQkFBUyxFQUFDLHlCQUN2Q0UsNkJBQTZCRixJQUFBQSxnQkFBUyxFQUFDLHlCQUN2Q0csb0NBQW9DSCxJQUFBQSxnQkFBUyxFQUFDO0FBRXJDLElBQUEsQUFBTUYsaURBQU47Y0FBTUE7YUFBQUEsaUNBQ1BNLE1BQU0sRUFBRUMsU0FBUyxFQUFFQyxnQkFBZ0IsRUFBRUMsZ0JBQWdCO2dDQUQ5Q1Q7O2dCQUVqQixrQkFGaUJBO1lBRVhNOztRQUVOLE1BQUtDLFNBQVMsR0FBR0E7UUFDakIsTUFBS0MsZ0JBQWdCLEdBQUdBO1FBQ3hCLE1BQUtDLGdCQUFnQixHQUFHQTs7O2tCQU5QVDs7WUFTbkJV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
243
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJzdGl0dXRpb24vZnJhbWVGb3JNZXRhdmFyaWFibGUuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCBzaGltIGZyb20gXCIuLi9zaGltXCI7XG5pbXBvcnQgU3Vic3RpdHV0aW9uIGZyb20gXCIuLi9zdWJzdGl0dXRpb25cIjtcblxuaW1wb3J0IHsgbm9kZVF1ZXJ5IH0gZnJvbSBcIi4uL3V0aWxpdGllcy9xdWVyeVwiO1xuaW1wb3J0IHsgc3Vic3RpdHV0aW9uTm9kZUZyb21VbnF1YWxpZmllZFN0YXRlbWVudE5vZGUsXG4gICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZ0Zyb21TdWJzdGl0dXRpb25TdHJpbmcsXG4gICAgICAgICB1bnF1YWxpZmllZFN0YXRlbWVudE5vZGVGcm9tVW5xdWFsaWZpZWRTdGF0ZW1lbnRUb2tlbnMgfSBmcm9tIFwiLi4vdXRpbGl0aWVzL25vZGVcIjtcbmltcG9ydCB7IHVucXVhbGlmaWVkU3RhdGVtZW50VG9rZW5zRnJvbVVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nLFxuICAgICAgICAgc3Vic3RpdHV0aW9uVG9rZW5zRnJvbVVucXVhbGlmaWVkU3RhdGVtZW50VG9rZW5zQW5kU3Vic3RpdHV0aW9uTm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvdG9rZW5zXCI7XG5cbmNvbnN0IGZyYW1lTm9kZVF1ZXJ5ID0gbm9kZVF1ZXJ5KFwiL3N1YnN0aXR1dGlvbi9mcmFtZVswXVwiKSxcbiAgICAgIG1ldGF2YXJpYWJsZU5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdWJzdGl0dXRpb24vZnJhbWVbMV0vbWV0YXZhcmlhYmxlIVwiKSxcbiAgICAgIHN1YnN0aXR1dGlvbk5vZGVRdWVyeSA9IG5vZGVRdWVyeShcIi9zdGF0ZW1lbnQvc3Vic3RpdHV0aW9uXCIpO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiBleHRlbmRzIFN1YnN0aXR1dGlvbiB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZywgZnJhbWUsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uTm9kZSwgc3Vic3RpdHV0aW9uVG9rZW5zKSB7XG4gICAgc3VwZXIoc3RyaW5nKTtcblxuICAgIHRoaXMuZnJhbWUgPSBmcmFtZTtcbiAgICB0aGlzLm1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZTtcbiAgICB0aGlzLnN1YnN0aXR1dGlvbk5vZGUgPSBzdWJzdGl0dXRpb25Ob2RlO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9uVG9rZW5zID0gc3Vic3RpdHV0aW9uVG9rZW5zO1xuICB9XG5cbiAgZ2V0RnJhbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZnJhbWU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGUoKSB7XG4gICAgcmV0dXJuIHRoaXMubWV0YXZhcmlhYmxlO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9uTm9kZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdWJzdGl0dXRpb25Ob2RlO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9uVG9rZW5zKCkge1xuICAgIHJldHVybiB0aGlzLnN1YnN0aXR1dGlvblRva2VucztcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZU5hbWUoKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZSA9IHRoaXMubWV0YXZhcmlhYmxlLmdldE5hbWUoKTtcblxuICAgIHJldHVybiBtZXRhdmFyaWFibGVOYW1lO1xuICB9XG5cbiAgZ2V0U3Vic3RpdHV0aW9uU3RyaW5nKCkge1xuICAgIGNvbnN0IGZyYW1lU3RyaW5nID0gdGhpcy5mcmFtZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXRTdHJpbmcoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSBgW1ske2ZyYW1lU3RyaW5nfV0gZm9yIFske21ldGF2YXJpYWJsZVN0cmluZ31dXWA7XG5cbiAgICByZXR1cm4gc3Vic3RpdHV0aW9uU3RyaW5nO1xuICB9XG5cbiAgc2V0U3Vic3RpdHV0aW9uTm9kZUFuZFRva2Vucyhsb2NhbENvbnRleHQpIHtcbiAgICBjb25zdCBsZXhlciA9IGxvY2FsQ29udGV4dC5nZXRMZXhlcigpLFxuICAgICAgICAgIHBhcnNlciA9IGxvY2FsQ29udGV4dC5nZXRQYXJzZXIoKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25TdHJpbmcgPSB0aGlzLmdldFN1YnN0aXR1dGlvblN0cmluZygpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nID0gdW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmdGcm9tU3Vic3RpdHV0aW9uU3RyaW5nKHN1YnN0aXR1dGlvblN0cmluZyksXG4gICAgICAgICAgdW5xdWFsaWZpZWRTdGF0ZW1lbnRUb2tlbnMgPSB1bnF1YWxpZmllZFN0YXRlbWVudFRva2Vuc0Zyb21VbnF1YWxpZmllZFN0YXRlbWVudFN0cmluZyh1bnF1YWxpZmllZFN0YXRlbWVudFN0cmluZywgbGV4ZXIpLFxuICAgICAgICAgIHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSA9IHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZUZyb21VbnF1YWxpZmllZFN0YXRlbWVudFRva2Vucyh1bnF1YWxpZmllZFN0YXRlbWVudFRva2VucywgcGFyc2VyKTtcblxuICAgIHRoaXMuc3Vic3RpdHV0aW9uTm9kZSA9IHN1YnN0aXR1dGlvbk5vZGVGcm9tVW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlKHVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSk7XG5cbiAgICB0aGlzLnN1YnN0aXR1dGlvblRva2VucyA9IHN1YnN0aXR1dGlvblRva2Vuc0Zyb21VbnF1YWxpZmllZFN0YXRlbWVudFRva2Vuc0FuZFN1YnN0aXR1dGlvbk5vZGUodW5xdWFsaWZpZWRTdGF0ZW1lbnRUb2tlbnMsIHRoaXMuc3Vic3RpdHV0aW9uTm9kZSk7XG4gIH1cblxuICBzZXRTdWJzdGl0dXRpb25Ub2tlbnMobG9jYWxDb250ZXh0KSB7XG4gIH1cblxuICBpc0VxdWFsVG8oc3Vic3RpdHV0aW9uKSB7XG4gICAgbGV0IGVxdWFsVG8gPSBmYWxzZTtcblxuICAgIGNvbnN0IGZyYW1lTm9kZSA9IHN1YnN0aXR1dGlvbi5nZXRGcmFtZU5vZGUoKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lID0gc3Vic3RpdHV0aW9uLmdldE1ldGF2YXJpYWJsZU5hbWUoKTtcblxuICAgIGlmICgoZnJhbWVOb2RlICE9PSBudWxsKSAmJiAobWV0YXZhcmlhYmxlTmFtZSAhPT0gbnVsbCkpIHtcbiAgICAgIGNvbnN0IGZyYW1lTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSksXG4gICAgICAgICAgICBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyA9IHRoaXMubWF0Y2hNZXRhdmFyaWFibGVOYW1lKG1ldGF2YXJpYWJsZU5hbWUpO1xuXG4gICAgICBlcXVhbFRvID0gKGZyYW1lTm9kZU1hdGNoZXMgJiYgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMpO1xuICAgIH1cblxuICAgIHJldHVybiBlcXVhbFRvO1xuICB9XG5cbiAgbWF0Y2hGcmFtZU5vZGUoZnJhbWVOb2RlKSB7IHJldHVybiB0aGlzLmZyYW1lLm1hdGNoRnJhbWVOb2RlKGZyYW1lTm9kZSk7IH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSkge1xuICAgIGxldCBtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcztcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWVBID0gbWV0YXZhcmlhYmxlTmFtZTsgLy8vXG5cbiAgICBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TmFtZSgpO1xuXG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZUIgPSBtZXRhdmFyaWFibGVOYW1lOyAvLy9cblxuICAgIG1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzID0gKG1ldGF2YXJpYWJsZU5hbWVBID09PSBtZXRhdmFyaWFibGVOYW1lQik7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGxldCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcblxuICAgIGlmICgoc3Vic3RpdHV0aW9uTm9kZSA9PT0gbnVsbCkgJiYgKHRoaXMuc3Vic3RpdHV0aW9uTm9kZSA9PT0gbnVsbCkpIHtcbiAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKChzdWJzdGl0dXRpb25Ob2RlID09PSBudWxsKSAmJiAodGhpcy5zdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSkge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBmYWxzZTtcbiAgICB9IGVsc2UgaWYgKChzdWJzdGl0dXRpb25Ob2RlICE9PSBudWxsKSAmJiAodGhpcy5zdWJzdGl0dXRpb25Ob2RlID09PSBudWxsKSkge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLnN1YnN0aXR1dGlvbk5vZGUubWF0Y2goc3Vic3RpdHV0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOYW1lLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSB0aGlzLm1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IChtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyAmJiBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgc3RhdGljIGZyb21TdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUsIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBmcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25Ob2RlID0gc3Vic3RpdHV0aW9uTm9kZVF1ZXJ5KHN0YXRlbWVudE5vZGUpO1xuXG4gICAgaWYgKHN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpIHtcbiAgICAgIGNvbnN0IGZyYW1lTm9kZSA9IGZyYW1lTm9kZVF1ZXJ5KHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgICAgbWV0YXZhcmlhYmxlTm9kZSA9IG1ldGF2YXJpYWJsZU5vZGVRdWVyeShzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgaWYgKChmcmFtZU5vZGUgIT09IG51bGwpICYmIChtZXRhdmFyaWFibGVOb2RlICE9PSBudWxsKSkge1xuICAgICAgICBjb25zdCB7IEZyYW1lLCBNZXRhdmFyaWFibGUgfSA9IHNoaW0sXG4gICAgICAgICAgICAgIGZyYW1lID0gRnJhbWUuZnJvbUZyYW1lTm9kZShmcmFtZU5vZGUsIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IE1ldGF2YXJpYWJsZS5mcm9tTWV0YXZhcmlhYmxlTm9kZShtZXRhdmFyaWFibGVOb2RlLCBsb2NhbENvbnRleHQpLFxuICAgICAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICAgICAgc3Vic3RpdHV0aW9uVG9rZW5zID0gbG9jYWxDb250ZXh0Lm5vZGVBc1Rva2VucyhzdWJzdGl0dXRpb25Ob2RlKTtcblxuICAgICAgICBmcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbihzdHJpbmcsIGZyYW1lLCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbk5vZGUsIHN1YnN0aXR1dGlvblRva2Vucyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgc3RhdGljIGZyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlLCBsb2NhbENvbnRleHQpIHtcbiAgICBjb25zdCBzdHJpbmcgPSBzdHJpbmdGcm9tRnJhbWVBbmRNZXRhdmFyaWFibGUoZnJhbWUsIG1ldGF2YXJpYWJsZSwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlID0gbnVsbCxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ub2tlbnMgPSBudWxsLFxuICAgICAgICAgIHN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiA9IG5ldyBGcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbihzdHJpbmcsIGZyYW1lLCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbk5vZGUsIHN1YnN0aXR1dGlvblRva2Vucyk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uO1xuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZShmcmFtZSwgbWV0YXZhcmlhYmxlLCBsb2NhbENvbnRleHQpIHtcbiAgY29uc3QgZnJhbWVOb2RlID0gZnJhbWUuZ2V0Tm9kZSgpLFxuICAgICAgICBmcmFtZVN0cmluZyA9IGxvY2FsQ29udGV4dC5ub2RlQXNTdHJpbmcoZnJhbWVOb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpLFxuICAgICAgICBzdHJpbmcgPSBgW1ske2ZyYW1lU3RyaW5nfV0gZm9yIFske21ldGF2YXJpYWJsZVN0cmluZ31dXWA7XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cbiJdLCJuYW1lcyI6WyJGcmFtZUZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsImZyYW1lTm9kZVF1ZXJ5Iiwibm9kZVF1ZXJ5IiwibWV0YXZhcmlhYmxlTm9kZVF1ZXJ5Iiwic3Vic3RpdHV0aW9uTm9kZVF1ZXJ5Iiwic3RyaW5nIiwiZnJhbWUiLCJtZXRhdmFyaWFibGUiLCJzdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uVG9rZW5zIiwiZ2V0RnJhbWUiLCJnZXRNZXRhdmFyaWFibGUiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwiZ2V0U3Vic3RpdHV0aW9uVG9rZW5zIiwiZ2V0TWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWUiLCJnZXROYW1lIiwiZ2V0U3Vic3RpdHV0aW9uU3RyaW5nIiwiZnJhbWVTdHJpbmciLCJnZXRTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciLCJzdWJzdGl0dXRpb25TdHJpbmciLCJzZXRTdWJzdGl0dXRpb25Ob2RlQW5kVG9rZW5zIiwibG9jYWxDb250ZXh0IiwibGV4ZXIiLCJnZXRMZXhlciIsInBhcnNlciIsImdldFBhcnNlciIsInVucXVhbGlmaWVkU3RhdGVtZW50U3RyaW5nIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRTdHJpbmdGcm9tU3Vic3RpdHV0aW9uU3RyaW5nIiwidW5xdWFsaWZpZWRTdGF0ZW1lbnRUb2tlbnMiLCJ1bnF1YWxpZmllZFN0YXRlbWVudFRva2Vuc0Zyb21VbnF1YWxpZmllZFN0YXRlbWVudFN0cmluZyIsInVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZSIsInVucXVhbGlmaWVkU3RhdGVtZW50Tm9kZUZyb21VbnF1YWxpZmllZFN0YXRlbWVudFRva2VucyIsInN1YnN0aXR1dGlvbk5vZGVGcm9tVW5xdWFsaWZpZWRTdGF0ZW1lbnROb2RlIiwic3Vic3RpdHV0aW9uVG9rZW5zRnJvbVVucXVhbGlmaWVkU3RhdGVtZW50VG9rZW5zQW5kU3Vic3RpdHV0aW9uTm9kZSIsInNldFN1YnN0aXR1dGlvblRva2VucyIsImlzRXF1YWxUbyIsInN1YnN0aXR1dGlvbiIsImVxdWFsVG8iLCJmcmFtZU5vZGUiLCJnZXRGcmFtZU5vZGUiLCJmcmFtZU5vZGVNYXRjaGVzIiwibWF0Y2hGcmFtZU5vZGUiLCJtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyIsIm1hdGNoTWV0YXZhcmlhYmxlTmFtZSIsIm1ldGF2YXJpYWJsZU5hbWVBIiwibWV0YXZhcmlhYmxlTmFtZUIiLCJtYXRjaFN1YnN0aXR1dGlvbk5vZGUiLCJzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsIm1hdGNoIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyIsImZyb21TdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsImZyYW1lRm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwibWV0YXZhcmlhYmxlTm9kZSIsIkZyYW1lIiwic2hpbSIsIk1ldGF2YXJpYWJsZSIsImZyb21GcmFtZU5vZGUiLCJmcm9tTWV0YXZhcmlhYmxlTm9kZSIsInN0cmluZ0Zyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsIm5vZGVBc1Rva2VucyIsImZyb21GcmFtZUFuZE1ldGF2YXJpYWJsZSIsInN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsIlN1YnN0aXR1dGlvbiIsImdldE5vZGUiLCJub2RlQXNTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBZ0JxQkE7OzsyREFkSjttRUFDUTtxQkFFQztvQkFHNkM7c0JBRWE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcEYsSUFBTUMsaUJBQWlCQyxJQUFBQSxnQkFBUyxFQUFDLDJCQUMzQkMsd0JBQXdCRCxJQUFBQSxnQkFBUyxFQUFDLHlDQUNsQ0Usd0JBQXdCRixJQUFBQSxnQkFBUyxFQUFDO0FBRXpCLElBQUEsQUFBTUYsaURBQU47Y0FBTUE7YUFBQUEsaUNBQ1BLLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxZQUFZLEVBQUVDLGdCQUFnQixFQUFFQyxrQkFBa0I7Z0NBRDFEVDs7Z0JBRWpCLGtCQUZpQkE7WUFFWEs7O1FBRU4sTUFBS0MsS0FBSyxHQUFHQTtRQUNiLE1BQUtDLFlBQVksR0FBR0E7UUFDcEIsTUFBS0MsZ0JBQWdCLEdBQUdBO1FBQ3hCLE1BQUtDLGtCQUFrQixHQUFHQTs7O2tCQVBUVDs7WUFVbkJVLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0osS0FBSztZQUNuQjs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0osWUFBWTtZQUMxQjs7O1lBRUFLLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxPQUFPLElBQUksQ0FBQ0osZ0JBQWdCO1lBQzlCOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSixrQkFBa0I7WUFDaEM7OztZQUVBSyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsbUJBQW1CLElBQUksQ0FBQ1IsWUFBWSxDQUFDUyxPQUFPO2dCQUVsRCxPQUFPRDtZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLGNBQWMsSUFBSSxDQUFDWixLQUFLLENBQUNhLFNBQVMsSUFDbENDLHFCQUFxQixJQUFJLENBQUNiLFlBQVksQ0FBQ1ksU0FBUyxJQUNoREUscUJBQXFCLEFBQUMsS0FBeUJELE9BQXJCRixhQUFZLFdBQTRCLE9BQW5CRSxvQkFBbUI7Z0JBRXhFLE9BQU9DO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEsNkJBQTZCQyxZQUFZO2dCQUN2QyxJQUFNQyxRQUFRRCxhQUFhRSxRQUFRLElBQzdCQyxTQUFTSCxhQUFhSSxTQUFTLElBQy9CTixxQkFBcUIsSUFBSSxDQUFDSixxQkFBcUIsSUFDL0NXLDZCQUE2QkMsSUFBQUEsc0RBQWdELEVBQUNSLHFCQUM5RVMsNkJBQTZCQyxJQUFBQSxnRUFBd0QsRUFBQ0gsNEJBQTRCSixRQUNsSFEsMkJBQTJCQyxJQUFBQSw0REFBc0QsRUFBQ0gsNEJBQTRCSjtnQkFFcEgsSUFBSSxDQUFDbEIsZ0JBQWdCLEdBQUcwQixJQUFBQSxrREFBNEMsRUFBQ0Y7Z0JBRXJFLElBQUksQ0FBQ3ZCLGtCQUFrQixHQUFHMEIsSUFBQUEsMkVBQW1FLEVBQUNMLDRCQUE0QixJQUFJLENBQUN0QixnQkFBZ0I7WUFDako7OztZQUVBNEIsS0FBQUE7bUJBQUFBLFNBQUFBLHNCQUFzQmIsWUFBWSxHQUNsQzs7O1lBRUFjLEtBQUFBO21CQUFBQSxTQUFBQSxVQUFVQyxZQUFZO2dCQUNwQixJQUFJQyxVQUFVO2dCQUVkLElBQU1DLFlBQVlGLGFBQWFHLFlBQVksSUFDckMxQixtQkFBbUJ1QixhQUFheEIsbUJBQW1CO2dCQUV6RCxJQUFJLEFBQUMwQixjQUFjLFFBQVV6QixxQkFBcUIsTUFBTztvQkFDdkQsSUFBTTJCLG1CQUFtQixJQUFJLENBQUNDLGNBQWMsQ0FBQ0gsWUFDdkNJLDBCQUEwQixJQUFJLENBQUNDLHFCQUFxQixDQUFDOUI7b0JBRTNEd0IsVUFBV0csb0JBQW9CRTtnQkFDakM7Z0JBRUEsT0FBT0w7WUFDVDs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQSxlQUFlSCxTQUFTO2dCQUFJLE9BQU8sSUFBSSxDQUFDbEMsS0FBSyxDQUFDcUMsY0FBYyxDQUFDSDtZQUFZOzs7WUFFekVLLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0I5QixnQkFBZ0I7Z0JBQ3BDLElBQUk2QjtnQkFFSixJQUFNRSxvQkFBb0IvQixrQkFBa0IsR0FBRztnQkFFL0NBLG1CQUFtQixJQUFJLENBQUNSLFlBQVksQ0FBQ1MsT0FBTztnQkFFNUMsSUFBTStCLG9CQUFvQmhDLGtCQUFrQixHQUFHO2dCQUUvQzZCLDBCQUEyQkUsc0JBQXNCQztnQkFFakQsT0FBT0g7WUFDVDs7O1lBRUFJLEtBQUFBO21CQUFBQSxTQUFBQSxzQkFBc0J4QyxnQkFBZ0I7Z0JBQ3BDLElBQUl5QztnQkFFSixJQUFJLEFBQUN6QyxxQkFBcUIsUUFBVSxJQUFJLENBQUNBLGdCQUFnQixLQUFLLE1BQU87b0JBQ25FeUMsMEJBQTBCO2dCQUM1QixPQUFPLElBQUksQUFBQ3pDLHFCQUFxQixRQUFVLElBQUksQ0FBQ0EsZ0JBQWdCLEtBQUssTUFBTztvQkFDMUV5QywwQkFBMEI7Z0JBQzVCLE9BQU8sSUFBSSxBQUFDekMscUJBQXFCLFFBQVUsSUFBSSxDQUFDQSxnQkFBZ0IsS0FBSyxNQUFPO29CQUMxRXlDLDBCQUEwQjtnQkFDNUIsT0FBTztvQkFDTEEsMEJBQTBCLElBQUksQ0FBQ3pDLGdCQUFnQixDQUFDMEMsS0FBSyxDQUFDMUM7Z0JBQ3hEO2dCQUVBLE9BQU95QztZQUNUOzs7WUFFQUUsS0FBQUE7bUJBQUFBLFNBQUFBLHlDQUF5Q3BDLGdCQUFnQixFQUFFUCxnQkFBZ0I7Z0JBQ3pFLElBQU1vQywwQkFBMEIsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQzlCLG1CQUNyRGtDLDBCQUEwQixJQUFJLENBQUNELHFCQUFxQixDQUFDeEMsbUJBQ3JENEMsNkNBQThDUiwyQkFBMkJLO2dCQUUvRSxPQUFPRztZQUNUOzs7O1lBRU9DLEtBQUFBO21CQUFQLFNBQU9BLGtCQUFrQkMsYUFBYSxFQUFFL0IsWUFBWTtnQkFDbEQsSUFBSWdDLG1DQUFtQztnQkFFdkMsSUFBTS9DLG1CQUFtQkosc0JBQXNCa0Q7Z0JBRS9DLElBQUk5QyxxQkFBcUIsTUFBTTtvQkFDN0IsSUFBTWdDLFlBQVl2QyxlQUFlTyxtQkFDM0JnRCxtQkFBbUJyRCxzQkFBc0JLO29CQUUvQyxJQUFJLEFBQUNnQyxjQUFjLFFBQVVnQixxQkFBcUIsTUFBTzt3QkFDdkQsSUFBUUMsUUFBd0JDLGFBQUksQ0FBNUJELE9BQU9FLGVBQWlCRCxhQUFJLENBQXJCQyxjQUNUckQsUUFBUW1ELE1BQU1HLGFBQWEsQ0FBQ3BCLFdBQVdqQixlQUN2Q2hCLGVBQWVvRCxhQUFhRSxvQkFBb0IsQ0FBQ0wsa0JBQWtCakMsZUFDbkVsQixTQUFTeUQsK0JBQStCeEQsT0FBT0MsY0FBY2dCLGVBQzdEZCxxQkFBcUJjLGFBQWF3QyxZQUFZLENBQUN2RDt3QkFFckQrQyxtQ0FBbUMsSUFoSXRCdkQsaUNBZ0kyREssUUFBUUMsT0FBT0MsY0FBY0Msa0JBQWtCQztvQkFDekg7Z0JBQ0Y7Z0JBRUEsT0FBTzhDO1lBQ1Q7OztZQUVPUyxLQUFBQTttQkFBUCxTQUFPQSx5QkFBeUIxRCxLQUFLLEVBQUVDLFlBQVksRUFBRWdCLFlBQVk7Z0JBQy9ELElBQU1sQixTQUFTeUQsK0JBQStCeEQsT0FBT0MsY0FBY2dCLGVBQzdEZixtQkFBbUIsTUFDbkJDLHFCQUFxQixNQUNyQndELHVDQUF1QyxJQTNJNUJqRSxpQ0EySWlFSyxRQUFRQyxPQUFPQyxjQUFjQyxrQkFBa0JDO2dCQUVqSSxPQUFPd0Q7WUFDVDs7O1dBOUltQmpFO0VBQXlDa0UscUJBQVk7QUFpSjFFLFNBQVNKLCtCQUErQnhELEtBQUssRUFBRUMsWUFBWSxFQUFFZ0IsWUFBWTtJQUN2RSxJQUFNaUIsWUFBWWxDLE1BQU02RCxPQUFPLElBQ3pCakQsY0FBY0ssYUFBYTZDLFlBQVksQ0FBQzVCLFlBQ3hDcEIscUJBQXFCYixhQUFhWSxTQUFTLElBQzNDZCxTQUFTLEFBQUMsS0FBeUJlLE9BQXJCRixhQUFZLFdBQTRCLE9BQW5CRSxvQkFBbUI7SUFFNUQsT0FBT2Y7QUFDVCJ9
@@ -10,8 +10,11 @@ Object.defineProperty(exports, "default", {
10
10
  });
11
11
  var _shim = /*#__PURE__*/ _interop_require_default(require("../shim"));
12
12
  var _substitution = /*#__PURE__*/ _interop_require_default(require("../substitution"));
13
+ var _local = /*#__PURE__*/ _interop_require_default(require("../context/local"));
13
14
  var _substitutions = /*#__PURE__*/ _interop_require_default(require("../substitutions"));
15
+ var _metaLevel = /*#__PURE__*/ _interop_require_default(require("../unifier/metaLevel"));
14
16
  var _brackets = require("../utilities/brackets");
17
+ var _json = require("../utilities/json");
15
18
  function _assert_this_initialized(self) {
16
19
  if (self === void 0) {
17
20
  throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
@@ -123,17 +126,10 @@ var StatementForMetavariableSubstitution = /*#__PURE__*/ function(Substitution)
123
126
  }
124
127
  },
125
128
  {
126
- key: "getStatementNode",
127
- value: function getStatementNode() {
128
- var statementNode = this.statement.getNode();
129
- return statementNode;
130
- }
131
- },
132
- {
133
- key: "getMetavariableNode",
134
- value: function getMetavariableNode() {
135
- var metavariableNode = this.metavariable.getNode();
136
- return metavariableNode;
129
+ key: "getMetavariableName",
130
+ value: function getMetavariableName() {
131
+ var metavariableName = this.metavariable.getName();
132
+ return metavariableName;
137
133
  }
138
134
  },
139
135
  {
@@ -145,59 +141,69 @@ var StatementForMetavariableSubstitution = /*#__PURE__*/ function(Substitution)
145
141
  },
146
142
  {
147
143
  key: "resolve",
148
- value: function resolve(substitutions, localContext) {
144
+ value: function resolve(substitutions, localContextA, localContextB) {
149
145
  var resolved = false;
150
146
  var substitutionString = this.string;
151
- localContext.trace("Resolving the ".concat(substitutionString, " substitution..."));
152
- var metavariableNode = this.getMetavariableNode(), simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableNode(metavariableNode);
147
+ localContextB.trace("Resolving the ".concat(substitutionString, " substitution..."));
148
+ var metavariableName = this.getMetavariableName(), simpleSubstitution = substitutions.findSimpleSubstitutionByMetavariableName(metavariableName);
153
149
  if (simpleSubstitution !== null) {
154
- var substitution = simpleSubstitution, substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, localContext);
150
+ var substitution = simpleSubstitution, substitutionResolved = substitution.resolveSubstitution(this.substitution, this.statement, substitutions, localContextA, localContextB);
155
151
  resolved = substitutionResolved; ///
156
152
  }
157
153
  if (resolved) {
158
- localContext.debug("...resolved the ".concat(substitutionString, " substitution."));
154
+ localContextB.debug("...resolved the ".concat(substitutionString, " substitution."));
159
155
  }
160
156
  return resolved;
161
157
  }
162
158
  },
163
159
  {
164
160
  key: "resolveSubstitution",
165
- value: function resolveSubstitution(substitution, statement, substitutions, localContext) {
161
+ value: function resolveSubstitution(substitution, statement, substitutions, localContextA, localContextB) {
166
162
  var substitutionResolved = false;
167
163
  var substitutionString = substitution.getString();
168
- localContext.trace("Resolving the ".concat(substitutionString, " substitution..."));
169
- var transformedSubstitution = substitution.transformed(substitutions, localContext);
170
- if (transformedSubstitution !== null) {
171
- var transformedSubstitutionString = transformedSubstitution.getString();
172
- localContext.trace("Transformed the substitution to ".concat(transformedSubstitutionString, "..."));
173
- substitutions = _substitutions.default.fromNothing(); ///
174
- var localContextA = localContext, localContextB = localContext, statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
175
- if (statementUnified) {
176
- var substitutionsLength = substitutions.getLength();
177
- if (substitutionsLength === 1) {
178
- var firstSubstitution = substitutions.getFirstSubstitution(), _$substitution = firstSubstitution, substitutionEqualToTransformedSubstitution = _$substitution.isEqualTo(transformedSubstitution);
179
- substitutionResolved = substitutionEqualToTransformedSubstitution; ///
180
- }
181
- }
164
+ localContextB.trace("Resolving the ".concat(substitutionString, " substitution..."));
165
+ var substitutionA = substitution, substitutionB = this.unifyStatement(statement, localContextB, localContextB); ///
166
+ if (substitutionB !== null) {
167
+ localContextA = localContextFromLocalContextAndSubstitution(localContextA, substitutionA); ///
168
+ localContextB = localContextFromLocalContextAndSubstitution(localContextB, substitutionB); ///
169
+ substitutions.snapshot();
170
+ var nodeA = substitutionA.getSubstitutionNode(), nodeB = substitutionB.getSubstitutionNode(), unifiedAtMetaLevel = _metaLevel.default.unify(nodeA, nodeB, substitutions, localContextA, localContextB);
171
+ unifiedAtMetaLevel ? substitutions.continue() : substitutions.rollback(localContextB);
172
+ substitutionResolved = unifiedAtMetaLevel; ///
182
173
  }
183
174
  if (substitutionResolved) {
184
- localContext.debug("...resolved the ".concat(substitutionString, " substitution."));
175
+ localContextB.debug("...resolved the ".concat(substitutionString, " substitution."));
185
176
  }
186
177
  return substitutionResolved;
187
178
  }
188
179
  },
180
+ {
181
+ key: "unifyStatement",
182
+ value: function unifyStatement(statement, localContextA, localContextB) {
183
+ var substitution = null;
184
+ var substitutions = _substitutions.default.fromNothing(), statementUnified = this.statement.unifyStatement(statement, substitutions, localContextA, localContextB);
185
+ if (statementUnified) {
186
+ var substitutionsLength = substitutions.getLength();
187
+ if (substitutionsLength === 1) {
188
+ var firstSubstitution = substitutions.getFirstSubstitution();
189
+ substitution = firstSubstitution; ///
190
+ }
191
+ }
192
+ return substitution;
193
+ }
194
+ },
189
195
  {
190
196
  key: "matchStatementNode",
191
197
  value: function matchStatementNode(statementNode) {
192
- statementNode = (0, _brackets.stripBracketsFromStatement)(statementNode); ///
198
+ statementNode = (0, _brackets.stripBracketsFromStatementNode)(statementNode); ///
193
199
  var statementNodeMatches = this.statement.matchStatementNode(statementNode);
194
200
  return statementNodeMatches;
195
201
  }
196
202
  },
197
203
  {
198
- key: "matchMetavariableNode",
199
- value: function matchMetavariableNode(metavariableNode) {
200
- return this.metavariable.matchMetavariableNode(metavariableNode);
204
+ key: "matchMetavariableName",
205
+ value: function matchMetavariableName(metavariableName) {
206
+ return this.metavariable.matchMetavariableName(metavariableName);
201
207
  }
202
208
  },
203
209
  {
@@ -217,18 +223,47 @@ var StatementForMetavariableSubstitution = /*#__PURE__*/ function(Substitution)
217
223
  }
218
224
  },
219
225
  {
220
- key: "matchMetavariableNodeAndSubstitutionNode",
221
- value: function matchMetavariableNodeAndSubstitutionNode(metavariableNode, substitutionNode) {
222
- var metavariableNodeMatches = this.matchMetavariableNode(metavariableNode), substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode), metavariableNodeAndSubstitutionNodeMatches = metavariableNodeMatches && substitutionNodeMatches;
223
- return metavariableNodeAndSubstitutionNodeMatches;
226
+ key: "matchMetavariableNameAndSubstitutionNode",
227
+ value: function matchMetavariableNameAndSubstitutionNode(metavariableName, substitutionNode) {
228
+ var metavariableNameMatches = this.matchMetavariableName(metavariableName), substitutionNodeMatches = this.matchSubstitutionNode(substitutionNode), metavariableNameAndSubstitutionNodeMatches = metavariableNameMatches && substitutionNodeMatches;
229
+ return metavariableNameAndSubstitutionNodeMatches;
230
+ }
231
+ },
232
+ {
233
+ key: "toJSON",
234
+ value: function toJSON() {
235
+ var metavariableJSON = (0, _json.metavariableToMetavariableJSON)(this.metavariable), statementJSON = (0, _json.statementToStatementJSON)(this.statement), metavariable = metavariableJSON, statement = statementJSON, string = this.string, json = {
236
+ string: string,
237
+ statement: statement,
238
+ metavariable: metavariable
239
+ };
240
+ return json;
224
241
  }
225
242
  }
226
243
  ], [
244
+ {
245
+ key: "fromJSON",
246
+ value: function fromJSON(json, fileContext) {
247
+ var string = json.string, statement = (0, _json.statementFromJSON)(json, fileContext), metavariable = (0, _json.metavariableFromJSON)(json, fileContext), substitution = null, statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statement, metavariable, substitution);
248
+ return statementForMetavariableSubstitution;
249
+ }
250
+ },
251
+ {
252
+ key: "fromStatementAndMetavariable",
253
+ value: function fromStatementAndMetavariable(statement, metavariable, localContext) {
254
+ var statementNode = statement.getNode();
255
+ statementNode = (0, _brackets.stripBracketsFromStatementNode)(statementNode); ///
256
+ var Statement = _shim.default.Statement;
257
+ statement = Statement.fromStatementNode(statementNode, localContext);
258
+ var substitution = null, string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext), statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statement, metavariable, substitution);
259
+ return statementForMetavariableSubstitution;
260
+ }
261
+ },
227
262
  {
228
263
  key: "fromStatementMetavariableAndSubstitution",
229
264
  value: function fromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
230
265
  var statementNode = statement.getNode();
231
- statementNode = (0, _brackets.stripBracketsFromStatement)(statementNode); ///
266
+ statementNode = (0, _brackets.stripBracketsFromStatementNode)(statementNode); ///
232
267
  var Statement = _shim.default.Statement;
233
268
  statement = Statement.fromStatementNode(statementNode, localContext);
234
269
  var string = stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext), statementForMetavariableSubstitution = new StatementForMetavariableSubstitution(string, statement, metavariable, substitution);
@@ -238,6 +273,12 @@ var StatementForMetavariableSubstitution = /*#__PURE__*/ function(Substitution)
238
273
  ]);
239
274
  return StatementForMetavariableSubstitution;
240
275
  }(_substitution.default);
276
+ function localContextFromLocalContextAndSubstitution(localContext, substitution) {
277
+ substitution.setSubstitutionNodeAndTokens(localContext);
278
+ var substitutionTokens = substitution.getSubstitutionTokens(), context = localContext, tokens = substitutionTokens; ///
279
+ localContext = _local.default.fromContextAndTokens(context, tokens); ///
280
+ return localContext;
281
+ }
241
282
  function stringFromStatementMetavariableAndSubstitution(statement, metavariable, substitution, localContext) {
242
283
  var string;
243
284
  var statementNode = statement.getNode(), statementString = localContext.nodeAsString(statementNode), metavariableString = metavariable.getString();
@@ -250,4 +291,4 @@ function stringFromStatementMetavariableAndSubstitution(statement, metavariable,
250
291
  return string;
251
292
  }
252
293
 
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJzdGl0dXRpb24vc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc2hpbSBmcm9tIFwiLi4vc2hpbVwiO1xuaW1wb3J0IFN1YnN0aXR1dGlvbiBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uXCI7XG5pbXBvcnQgU3Vic3RpdHV0aW9ucyBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uc1wiO1xuXG5pbXBvcnQgeyBzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudCB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKSB7XG4gICAgc3VwZXIoc3RyaW5nKTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50Tm9kZSgpIHtcbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlID0gdGhpcy5zdGF0ZW1lbnQuZ2V0Tm9kZSgpO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudE5vZGU7XG4gIH1cblxuICBnZXRNZXRhdmFyaWFibGVOb2RlKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLm1ldGF2YXJpYWJsZS5nZXROb2RlKCk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTm9kZTtcbiAgfVxuXG4gIGlzU2ltcGxlKCkge1xuICAgIGNvbnN0IHNpbXBsZSA9ICh0aGlzLnN1YnN0aXR1dGlvbiA9PT0gbnVsbCk7XG5cbiAgICByZXR1cm4gc2ltcGxlO1xuICB9XG5cbiAgcmVzb2x2ZShzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpIHtcbiAgICBsZXQgcmVzb2x2ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvblN0cmluZyA9IHRoaXMuc3RyaW5nO1xuXG4gICAgbG9jYWxDb250ZXh0LnRyYWNlKGBSZXNvbHZpbmcgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5vZGUoKSxcbiAgICAgICAgICBzaW1wbGVTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSk7XG5cbiAgICBpZiAoc2ltcGxlU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBzaW1wbGVTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgIHN1YnN0aXR1dGlvblJlc29sdmVkID0gc3Vic3RpdHV0aW9uLnJlc29sdmVTdWJzdGl0dXRpb24odGhpcy5zdWJzdGl0dXRpb24sIHRoaXMuc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHQpO1xuXG4gICAgICByZXNvbHZlZCA9IHN1YnN0aXR1dGlvblJlc29sdmVkOyAvLy9cbiAgICB9XG5cbiAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4ucmVzb2x2ZWQgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc29sdmVkO1xuICB9XG5cbiAgcmVzb2x2ZVN1YnN0aXR1dGlvbihzdWJzdGl0dXRpb24sIHN0YXRlbWVudCwgc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHN1YnN0aXR1dGlvblJlc29sdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBsb2NhbENvbnRleHQudHJhY2UoYFJlc29sdmluZyB0aGUgJHtzdWJzdGl0dXRpb25TdHJpbmd9IHN1YnN0aXR1dGlvbi4uLmApO1xuXG4gICAgY29uc3QgdHJhbnNmb3JtZWRTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24udHJhbnNmb3JtZWQoc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0KTtcblxuICAgIGlmICh0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbiAhPT0gbnVsbCkge1xuICAgICAgY29uc3QgdHJhbnNmb3JtZWRTdWJzdGl0dXRpb25TdHJpbmcgPSB0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvbi5nZXRTdHJpbmcoKTtcblxuICAgICAgbG9jYWxDb250ZXh0LnRyYWNlKGBUcmFuc2Zvcm1lZCB0aGUgc3Vic3RpdHV0aW9uIHRvICR7dHJhbnNmb3JtZWRTdWJzdGl0dXRpb25TdHJpbmd9Li4uYCk7XG5cbiAgICAgIHN1YnN0aXR1dGlvbnMgPSBTdWJzdGl0dXRpb25zLmZyb21Ob3RoaW5nKCk7ICAvLy9cblxuICAgICAgY29uc3QgbG9jYWxDb250ZXh0QSA9IGxvY2FsQ29udGV4dCwgLy8vXG4gICAgICAgICAgICBsb2NhbENvbnRleHRCID0gbG9jYWxDb250ZXh0LCAvLy9cbiAgICAgICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSB0aGlzLnN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpO1xuXG4gICAgICBpZiAoc3RhdGVtZW50VW5pZmllZCkge1xuICAgICAgICBjb25zdCBzdWJzdGl0dXRpb25zTGVuZ3RoID0gc3Vic3RpdHV0aW9ucy5nZXRMZW5ndGgoKTtcblxuICAgICAgICBpZiAoc3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICAgIGNvbnN0IGZpcnN0U3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9ucy5nZXRGaXJzdFN1YnN0aXR1dGlvbigpLFxuICAgICAgICAgICAgICAgIHN1YnN0aXR1dGlvbiA9IGZpcnN0U3Vic3RpdHV0aW9uLCAvLy9cbiAgICAgICAgICAgICAgICBzdWJzdGl0dXRpb25FcXVhbFRvVHJhbnNmb3JtZWRTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb24uaXNFcXVhbFRvKHRyYW5zZm9ybWVkU3Vic3RpdHV0aW9uKTtcblxuICAgICAgICAgIHN1YnN0aXR1dGlvblJlc29sdmVkID0gc3Vic3RpdHV0aW9uRXF1YWxUb1RyYW5zZm9ybWVkU3Vic3RpdHV0aW9uOyAgLy8vXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3Vic3RpdHV0aW9uUmVzb2x2ZWQpIHtcbiAgICAgIGxvY2FsQ29udGV4dC5kZWJ1ZyhgLi4ucmVzb2x2ZWQgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblJlc29sdmVkO1xuICB9XG5cbiAgbWF0Y2hTdGF0ZW1lbnROb2RlKHN0YXRlbWVudE5vZGUpIHtcbiAgICBzdGF0ZW1lbnROb2RlID0gc3RyaXBCcmFja2V0c0Zyb21TdGF0ZW1lbnQoc3RhdGVtZW50Tm9kZSk7IC8vL1xuXG4gICAgY29uc3Qgc3RhdGVtZW50Tm9kZU1hdGNoZXMgPSB0aGlzLnN0YXRlbWVudC5tYXRjaFN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50Tm9kZU1hdGNoZXM7XG4gIH1cblxuICBtYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSkgeyByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGUubWF0Y2hNZXRhdmFyaWFibGVOb2RlKG1ldGF2YXJpYWJsZU5vZGUpOyB9XG5cbiAgbWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpIHtcbiAgICBsZXQgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXM7XG5cbiAgICBpZiAoKHN1YnN0aXR1dGlvbk5vZGUgPT09IG51bGwpICYmICh0aGlzLnN1YnN0aXR1dGlvbiA9PT0gbnVsbCkpIHtcbiAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gdHJ1ZTtcbiAgICB9IGVsc2UgaWYgKChzdWJzdGl0dXRpb25Ob2RlID09PSBudWxsKSAmJiAodGhpcy5zdWJzdGl0dXRpb24gIT09IG51bGwpKSB7XG4gICAgICBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoKHN1YnN0aXR1dGlvbk5vZGUgIT09IG51bGwpICYmICh0aGlzLnN1YnN0aXR1dGlvbiA9PT0gbnVsbCkpIHtcbiAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gZmFsc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gdGhpcy5zdWJzdGl0dXRpb24ubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpO1xuICAgIH1cblxuICAgIHJldHVybiBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGUobWV0YXZhcmlhYmxlTm9kZSwgc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzID0gdGhpcy5tYXRjaE1ldGF2YXJpYWJsZU5vZGUobWV0YXZhcmlhYmxlTm9kZSksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLm1hdGNoU3Vic3RpdHV0aW9uTm9kZShzdWJzdGl0dXRpb25Ob2RlKSxcbiAgICAgICAgICBtZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSAobWV0YXZhcmlhYmxlTm9kZU1hdGNoZXMgJiYgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5vZGVBbmRTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKTtcblxuICAgIHN0YXRlbWVudE5vZGUgPSBzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudChzdGF0ZW1lbnROb2RlKTsgLy8vXG5cbiAgICBjb25zdCB7IFN0YXRlbWVudCB9ID0gc2hpbTtcblxuICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgY29uc3Qgc3RyaW5nID0gc3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHQpLFxuICAgICAgICAgIHN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24oc3RyaW5nLCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb247XG4gIH1cbn1cblxuZnVuY3Rpb24gc3RyaW5nRnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbihzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uLCBsb2NhbENvbnRleHQpIHtcbiAgbGV0IHN0cmluZztcblxuICBjb25zdCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKSxcbiAgICAgICAgc3RhdGVtZW50U3RyaW5nID0gbG9jYWxDb250ZXh0Lm5vZGVBc1N0cmluZyhzdGF0ZW1lbnROb2RlKSxcbiAgICAgICAgbWV0YXZhcmlhYmxlU3RyaW5nID0gbWV0YXZhcmlhYmxlLmdldFN0cmluZygpO1xuXG4gIGlmIChzdWJzdGl0dXRpb24gPT09IG51bGwpIHtcbiAgICBzdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9XWA7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gc3Vic3RpdHV0aW9uLmdldFN0cmluZygpO1xuXG4gICAgc3RyaW5nID0gYFske3N0YXRlbWVudFN0cmluZ30gZm9yICR7bWV0YXZhcmlhYmxlU3RyaW5nfSR7c3Vic3RpdHV0aW9uU3RyaW5nfV1gO1xuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn0iXSwibmFtZXMiOlsiU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIiwic3RyaW5nIiwic3RhdGVtZW50IiwibWV0YXZhcmlhYmxlIiwic3Vic3RpdHV0aW9uIiwiZ2V0U3RhdGVtZW50IiwiZ2V0TWV0YXZhcmlhYmxlIiwiZ2V0U3Vic3RpdHV0aW9uIiwiZ2V0U3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGUiLCJnZXROb2RlIiwiZ2V0TWV0YXZhcmlhYmxlTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGUiLCJpc1NpbXBsZSIsInNpbXBsZSIsInJlc29sdmUiLCJzdWJzdGl0dXRpb25zIiwibG9jYWxDb250ZXh0IiwicmVzb2x2ZWQiLCJzdWJzdGl0dXRpb25TdHJpbmciLCJ0cmFjZSIsInNpbXBsZVN1YnN0aXR1dGlvbiIsImZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5vZGUiLCJzdWJzdGl0dXRpb25SZXNvbHZlZCIsInJlc29sdmVTdWJzdGl0dXRpb24iLCJkZWJ1ZyIsImdldFN0cmluZyIsInRyYW5zZm9ybWVkU3Vic3RpdHV0aW9uIiwidHJhbnNmb3JtZWQiLCJ0cmFuc2Zvcm1lZFN1YnN0aXR1dGlvblN0cmluZyIsIlN1YnN0aXR1dGlvbnMiLCJmcm9tTm90aGluZyIsImxvY2FsQ29udGV4dEEiLCJsb2NhbENvbnRleHRCIiwic3RhdGVtZW50VW5pZmllZCIsInVuaWZ5U3RhdGVtZW50Iiwic3Vic3RpdHV0aW9uc0xlbmd0aCIsImdldExlbmd0aCIsImZpcnN0U3Vic3RpdHV0aW9uIiwiZ2V0Rmlyc3RTdWJzdGl0dXRpb24iLCJzdWJzdGl0dXRpb25FcXVhbFRvVHJhbnNmb3JtZWRTdWJzdGl0dXRpb24iLCJpc0VxdWFsVG8iLCJtYXRjaFN0YXRlbWVudE5vZGUiLCJzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudCIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOb2RlQW5kU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZU5vZGVNYXRjaGVzIiwibWV0YXZhcmlhYmxlTm9kZUFuZFN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwiZnJvbVN0YXRlbWVudE1ldGF2YXJpYWJsZUFuZFN1YnN0aXR1dGlvbiIsIlN0YXRlbWVudCIsInNoaW0iLCJmcm9tU3RhdGVtZW50Tm9kZSIsInN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24iLCJTdWJzdGl0dXRpb24iLCJzdGF0ZW1lbnRTdHJpbmciLCJub2RlQXNTdHJpbmciLCJtZXRhdmFyaWFibGVTdHJpbmciXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBUXFCQTs7OzJEQU5KO21FQUNRO29FQUNDO3dCQUVpQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUU1QixJQUFBLEFBQU1BLHFEQUFOO2NBQU1BO2FBQUFBLHFDQUNQQyxNQUFNLEVBQUVDLFNBQVMsRUFBRUMsWUFBWSxFQUFFQyxZQUFZO2dDQUR0Q0o7O2dCQUVqQixrQkFGaUJBO1lBRVhDOztRQUVOLE1BQUtDLFNBQVMsR0FBR0E7UUFDakIsTUFBS0MsWUFBWSxHQUFHQTtRQUNwQixNQUFLQyxZQUFZLEdBQUdBOzs7a0JBTkhKOztZQVNuQkssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxTQUFTO1lBQ3ZCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxZQUFZO1lBQzFCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxZQUFZO1lBQzFCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLGdCQUFnQixJQUFJLENBQUNQLFNBQVMsQ0FBQ1EsT0FBTztnQkFFNUMsT0FBT0Q7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxTQUFBQTtnQkFDRSxJQUFNQyxtQkFBbUIsSUFBSSxDQUFDVCxZQUFZLENBQUNPLE9BQU87Z0JBRWxELE9BQU9FO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMsU0FBVSxJQUFJLENBQUNWLFlBQVksS0FBSztnQkFFdEMsT0FBT1U7WUFDVDs7O1lBRUFDLEtBQUFBO21C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
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zdWJzdGl0dXRpb24vc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc2hpbSBmcm9tIFwiLi4vc2hpbVwiO1xuaW1wb3J0IFN1YnN0aXR1dGlvbiBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uXCI7XG5pbXBvcnQgTG9jYWxDb250ZXh0IGZyb20gXCIuLi9jb250ZXh0L2xvY2FsXCI7XG5pbXBvcnQgU3Vic3RpdHV0aW9ucyBmcm9tIFwiLi4vc3Vic3RpdHV0aW9uc1wiO1xuaW1wb3J0IG1ldGFMZXZlbFVuaWZpZXIgZnJvbSBcIi4uL3VuaWZpZXIvbWV0YUxldmVsXCI7XG5cbmltcG9ydCB7IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50Tm9kZSB9IGZyb20gXCIuLi91dGlsaXRpZXMvYnJhY2tldHNcIjtcbmltcG9ydCB7IHN0YXRlbWVudEZyb21KU09OLCBzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04sIG1ldGF2YXJpYWJsZUZyb21KU09OLCBtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04gfSBmcm9tIFwiLi4vdXRpbGl0aWVzL2pzb25cIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uIGV4dGVuZHMgU3Vic3RpdHV0aW9uIHtcbiAgY29uc3RydWN0b3Ioc3RyaW5nLCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKSB7XG4gICAgc3VwZXIoc3RyaW5nKTtcblxuICAgIHRoaXMuc3RhdGVtZW50ID0gc3RhdGVtZW50O1xuICAgIHRoaXMubWV0YXZhcmlhYmxlID0gbWV0YXZhcmlhYmxlO1xuICAgIHRoaXMuc3Vic3RpdHV0aW9uID0gc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0U3RhdGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLnN0YXRlbWVudDtcbiAgfVxuXG4gIGdldE1ldGF2YXJpYWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5tZXRhdmFyaWFibGU7XG4gIH1cblxuICBnZXRTdWJzdGl0dXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc3Vic3RpdHV0aW9uO1xuICB9XG5cbiAgZ2V0TWV0YXZhcmlhYmxlTmFtZSgpIHtcbiAgICBjb25zdCBtZXRhdmFyaWFibGVOYW1lID0gdGhpcy5tZXRhdmFyaWFibGUuZ2V0TmFtZSgpO1xuXG4gICAgcmV0dXJuIG1ldGF2YXJpYWJsZU5hbWU7XG4gIH1cblxuICBpc1NpbXBsZSgpIHtcbiAgICBjb25zdCBzaW1wbGUgPSAodGhpcy5zdWJzdGl0dXRpb24gPT09IG51bGwpO1xuXG4gICAgcmV0dXJuIHNpbXBsZTtcbiAgfVxuXG4gIHJlc29sdmUoc3Vic3RpdHV0aW9ucywgbG9jYWxDb250ZXh0QSwgbG9jYWxDb250ZXh0Qikge1xuICAgIGxldCByZXNvbHZlZCA9IGZhbHNlO1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uU3RyaW5nID0gdGhpcy5zdHJpbmc7XG5cbiAgICBsb2NhbENvbnRleHRCLnRyYWNlKGBSZXNvbHZpbmcgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IG1ldGF2YXJpYWJsZU5hbWUgPSB0aGlzLmdldE1ldGF2YXJpYWJsZU5hbWUoKSxcbiAgICAgICAgICBzaW1wbGVTdWJzdGl0dXRpb24gPSBzdWJzdGl0dXRpb25zLmZpbmRTaW1wbGVTdWJzdGl0dXRpb25CeU1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7XG5cbiAgICBpZiAoc2ltcGxlU3Vic3RpdHV0aW9uICE9PSBudWxsKSB7XG4gICAgICBjb25zdCBzdWJzdGl0dXRpb24gPSBzaW1wbGVTdWJzdGl0dXRpb24sICAvLy9cbiAgICAgICAgICAgIHN1YnN0aXR1dGlvblJlc29sdmVkID0gc3Vic3RpdHV0aW9uLnJlc29sdmVTdWJzdGl0dXRpb24odGhpcy5zdWJzdGl0dXRpb24sIHRoaXMuc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKTtcblxuICAgICAgcmVzb2x2ZWQgPSBzdWJzdGl0dXRpb25SZXNvbHZlZDsgLy8vXG4gICAgfVxuXG4gICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICBsb2NhbENvbnRleHRCLmRlYnVnKGAuLi5yZXNvbHZlZCB0aGUgJHtzdWJzdGl0dXRpb25TdHJpbmd9IHN1YnN0aXR1dGlvbi5gKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzb2x2ZWQ7XG4gIH1cblxuICByZXNvbHZlU3Vic3RpdHV0aW9uKHN1YnN0aXR1dGlvbiwgc3RhdGVtZW50LCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKSB7XG4gICAgbGV0IHN1YnN0aXR1dGlvblJlc29sdmVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBsb2NhbENvbnRleHRCLnRyYWNlKGBSZXNvbHZpbmcgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uLi5gKTtcblxuICAgIGNvbnN0IHN1YnN0aXR1dGlvbkEgPSBzdWJzdGl0dXRpb24sIC8vL1xuICAgICAgICAgIHN1YnN0aXR1dGlvbkIgPSB0aGlzLnVuaWZ5U3RhdGVtZW50KHN0YXRlbWVudCwgbG9jYWxDb250ZXh0QiwgbG9jYWxDb250ZXh0Qik7ICAvLy9cblxuICAgIGlmIChzdWJzdGl0dXRpb25CICE9PSBudWxsKSB7XG4gICAgICBsb2NhbENvbnRleHRBID0gbG9jYWxDb250ZXh0RnJvbUxvY2FsQ29udGV4dEFuZFN1YnN0aXR1dGlvbihsb2NhbENvbnRleHRBLCBzdWJzdGl0dXRpb25BKTsgIC8vL1xuXG4gICAgICBsb2NhbENvbnRleHRCID0gbG9jYWxDb250ZXh0RnJvbUxvY2FsQ29udGV4dEFuZFN1YnN0aXR1dGlvbihsb2NhbENvbnRleHRCLCBzdWJzdGl0dXRpb25CKTsgIC8vL1xuXG4gICAgICBzdWJzdGl0dXRpb25zLnNuYXBzaG90KCk7XG5cbiAgICAgIGNvbnN0IG5vZGVBID0gc3Vic3RpdHV0aW9uQS5nZXRTdWJzdGl0dXRpb25Ob2RlKCksICAvLy9cbiAgICAgICAgICAgIG5vZGVCID0gc3Vic3RpdHV0aW9uQi5nZXRTdWJzdGl0dXRpb25Ob2RlKCksICAvLy9cbiAgICAgICAgICAgIHVuaWZpZWRBdE1ldGFMZXZlbCA9IG1ldGFMZXZlbFVuaWZpZXIudW5pZnkobm9kZUEsIG5vZGVCLCBzdWJzdGl0dXRpb25zLCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKTtcblxuICAgICAgdW5pZmllZEF0TWV0YUxldmVsID9cbiAgICAgICAgc3Vic3RpdHV0aW9ucy5jb250aW51ZSgpIDpcbiAgICAgICAgICBzdWJzdGl0dXRpb25zLnJvbGxiYWNrKGxvY2FsQ29udGV4dEIpO1xuXG4gICAgICBzdWJzdGl0dXRpb25SZXNvbHZlZCA9IHVuaWZpZWRBdE1ldGFMZXZlbDsgIC8vL1xuICAgIH1cblxuICAgIGlmIChzdWJzdGl0dXRpb25SZXNvbHZlZCkge1xuICAgICAgbG9jYWxDb250ZXh0Qi5kZWJ1ZyhgLi4ucmVzb2x2ZWQgdGhlICR7c3Vic3RpdHV0aW9uU3RyaW5nfSBzdWJzdGl0dXRpb24uYCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvblJlc29sdmVkO1xuICB9XG5cbiAgdW5pZnlTdGF0ZW1lbnQoc3RhdGVtZW50LCBsb2NhbENvbnRleHRBLCBsb2NhbENvbnRleHRCKSB7XG4gICAgbGV0IHN1YnN0aXR1dGlvbiA9IG51bGw7XG5cbiAgICBjb25zdCBzdWJzdGl0dXRpb25zID0gU3Vic3RpdHV0aW9ucy5mcm9tTm90aGluZygpLFxuICAgICAgICAgIHN0YXRlbWVudFVuaWZpZWQgPSB0aGlzLnN0YXRlbWVudC51bmlmeVN0YXRlbWVudChzdGF0ZW1lbnQsIHN1YnN0aXR1dGlvbnMsIGxvY2FsQ29udGV4dEEsIGxvY2FsQ29udGV4dEIpO1xuXG4gICAgaWYgKHN0YXRlbWVudFVuaWZpZWQpIHtcbiAgICAgIGNvbnN0IHN1YnN0aXR1dGlvbnNMZW5ndGggPSBzdWJzdGl0dXRpb25zLmdldExlbmd0aCgpO1xuXG4gICAgICBpZiAoc3Vic3RpdHV0aW9uc0xlbmd0aCA9PT0gMSkge1xuICAgICAgICBjb25zdCBmaXJzdFN1YnN0aXR1dGlvbiA9IHN1YnN0aXR1dGlvbnMuZ2V0Rmlyc3RTdWJzdGl0dXRpb24oKTtcblxuICAgICAgICBzdWJzdGl0dXRpb24gPSBmaXJzdFN1YnN0aXR1dGlvbjsgLy8vXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIG1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKSB7XG4gICAgc3RhdGVtZW50Tm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTsgLy8vXG5cbiAgICBjb25zdCBzdGF0ZW1lbnROb2RlTWF0Y2hlcyA9IHRoaXMuc3RhdGVtZW50Lm1hdGNoU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnROb2RlTWF0Y2hlcztcbiAgfVxuXG4gIG1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSB7IHJldHVybiB0aGlzLm1ldGF2YXJpYWJsZS5tYXRjaE1ldGF2YXJpYWJsZU5hbWUobWV0YXZhcmlhYmxlTmFtZSk7IH1cblxuICBtYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSkge1xuICAgIGxldCBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcztcblxuICAgIGlmICgoc3Vic3RpdHV0aW9uTm9kZSA9PT0gbnVsbCkgJiYgKHRoaXMuc3Vic3RpdHV0aW9uID09PSBudWxsKSkge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoKHN1YnN0aXR1dGlvbk5vZGUgPT09IG51bGwpICYmICh0aGlzLnN1YnN0aXR1dGlvbiAhPT0gbnVsbCkpIHtcbiAgICAgIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzID0gZmFsc2U7XG4gICAgfSBlbHNlIGlmICgoc3Vic3RpdHV0aW9uTm9kZSAhPT0gbnVsbCkgJiYgKHRoaXMuc3Vic3RpdHV0aW9uID09PSBudWxsKSkge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3Vic3RpdHV0aW9uTm9kZU1hdGNoZXMgPSB0aGlzLnN1YnN0aXR1dGlvbi5tYXRjaFN1YnN0aXR1dGlvbk5vZGUoc3Vic3RpdHV0aW9uTm9kZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgbWF0Y2hNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uTm9kZShtZXRhdmFyaWFibGVOYW1lLCBzdWJzdGl0dXRpb25Ob2RlKSB7XG4gICAgY29uc3QgbWV0YXZhcmlhYmxlTmFtZU1hdGNoZXMgPSB0aGlzLm1hdGNoTWV0YXZhcmlhYmxlTmFtZShtZXRhdmFyaWFibGVOYW1lKSxcbiAgICAgICAgICBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IHRoaXMubWF0Y2hTdWJzdGl0dXRpb25Ob2RlKHN1YnN0aXR1dGlvbk5vZGUpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZU5hbWVBbmRTdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyA9IChtZXRhdmFyaWFibGVOYW1lTWF0Y2hlcyAmJiBzdWJzdGl0dXRpb25Ob2RlTWF0Y2hlcyk7XG5cbiAgICByZXR1cm4gbWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzO1xuICB9XG5cbiAgdG9KU09OKCkge1xuICAgIGNvbnN0IG1ldGF2YXJpYWJsZUpTT04gPSBtZXRhdmFyaWFibGVUb01ldGF2YXJpYWJsZUpTT04odGhpcy5tZXRhdmFyaWFibGUpLFxuICAgICAgICAgIHN0YXRlbWVudEpTT04gPSBzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04odGhpcy5zdGF0ZW1lbnQpLFxuICAgICAgICAgIG1ldGF2YXJpYWJsZSA9IG1ldGF2YXJpYWJsZUpTT04sICAvLy9cbiAgICAgICAgICBzdGF0ZW1lbnQgPSBzdGF0ZW1lbnRKU09OLCAgLy8vXG4gICAgICAgICAgc3RyaW5nID0gdGhpcy5zdHJpbmcsXG4gICAgICAgICAganNvbiA9IHtcbiAgICAgICAgICAgIHN0cmluZyxcbiAgICAgICAgICAgIHN0YXRlbWVudCxcbiAgICAgICAgICAgIG1ldGF2YXJpYWJsZVxuICAgICAgICAgIH07XG5cbiAgICByZXR1cm4ganNvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCkge1xuICAgIGNvbnN0IHsgc3RyaW5nIH0gPSBqc29uLFxuICAgICAgICAgIHN0YXRlbWVudCA9IHN0YXRlbWVudEZyb21KU09OKGpzb24sIGZpbGVDb250ZXh0KSxcbiAgICAgICAgICBtZXRhdmFyaWFibGUgPSBtZXRhdmFyaWFibGVGcm9tSlNPTihqc29uLCBmaWxlQ29udGV4dCksXG4gICAgICAgICAgc3Vic3RpdHV0aW9uID0gbnVsbCwgIC8vL1xuICAgICAgICAgIHN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiA9IG5ldyBTdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24oc3RyaW5nLCBzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgc3Vic3RpdHV0aW9uKTtcblxuICAgIHJldHVybiBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb247XG4gIH1cblxuICBzdGF0aWMgZnJvbVN0YXRlbWVudEFuZE1ldGF2YXJpYWJsZShzdGF0ZW1lbnQsIG1ldGF2YXJpYWJsZSwgbG9jYWxDb250ZXh0KSB7XG4gICAgbGV0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpO1xuXG4gICAgc3RhdGVtZW50Tm9kZSA9IHN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlKTsgLy8vXG5cbiAgICBjb25zdCB7IFN0YXRlbWVudCB9ID0gc2hpbTtcblxuICAgIHN0YXRlbWVudCA9IFN0YXRlbWVudC5mcm9tU3RhdGVtZW50Tm9kZShzdGF0ZW1lbnROb2RlLCBsb2NhbENvbnRleHQpO1xuXG4gICAgY29uc3Qgc3Vic3RpdHV0aW9uID0gbnVsbCxcbiAgICAgICAgICBzdHJpbmcgPSBzdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dCksXG4gICAgICAgICAgc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uID0gbmV3IFN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbihzdHJpbmcsIHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24pO1xuXG4gICAgcmV0dXJuIHN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dCkge1xuICAgIGxldCBzdGF0ZW1lbnROb2RlID0gc3RhdGVtZW50LmdldE5vZGUoKTtcblxuICAgIHN0YXRlbWVudE5vZGUgPSBzdHJpcEJyYWNrZXRzRnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSk7IC8vL1xuXG4gICAgY29uc3QgeyBTdGF0ZW1lbnQgfSA9IHNoaW07XG5cbiAgICBzdGF0ZW1lbnQgPSBTdGF0ZW1lbnQuZnJvbVN0YXRlbWVudE5vZGUoc3RhdGVtZW50Tm9kZSwgbG9jYWxDb250ZXh0KTtcblxuICAgIGNvbnN0IHN0cmluZyA9IHN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24oc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbiwgbG9jYWxDb250ZXh0KSxcbiAgICAgICAgICBzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24gPSBuZXcgU3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uKHN0cmluZywgc3RhdGVtZW50LCBtZXRhdmFyaWFibGUsIHN1YnN0aXR1dGlvbik7XG5cbiAgICByZXR1cm4gc3RhdGVtZW50Rm9yTWV0YXZhcmlhYmxlU3Vic3RpdHV0aW9uO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxvY2FsQ29udGV4dEZyb21Mb2NhbENvbnRleHRBbmRTdWJzdGl0dXRpb24obG9jYWxDb250ZXh0LCBzdWJzdGl0dXRpb24pIHtcbiAgc3Vic3RpdHV0aW9uLnNldFN1YnN0aXR1dGlvbk5vZGVBbmRUb2tlbnMobG9jYWxDb250ZXh0KTtcblxuICBjb25zdCBzdWJzdGl0dXRpb25Ub2tlbnMgPSBzdWJzdGl0dXRpb24uZ2V0U3Vic3RpdHV0aW9uVG9rZW5zKCksXG4gICAgICAgIGNvbnRleHQgPSBsb2NhbENvbnRleHQsIC8vL1xuICAgICAgICB0b2tlbnMgPSBzdWJzdGl0dXRpb25Ub2tlbnM7IC8vL1xuXG4gIGxvY2FsQ29udGV4dCA9IExvY2FsQ29udGV4dC5mcm9tQ29udGV4dEFuZFRva2Vucyhjb250ZXh0LCB0b2tlbnMpOyAvLy9cblxuICByZXR1cm4gbG9jYWxDb250ZXh0O1xufVxuXG5mdW5jdGlvbiBzdHJpbmdGcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uKHN0YXRlbWVudCwgbWV0YXZhcmlhYmxlLCBzdWJzdGl0dXRpb24sIGxvY2FsQ29udGV4dCkge1xuICBsZXQgc3RyaW5nO1xuXG4gIGNvbnN0IHN0YXRlbWVudE5vZGUgPSBzdGF0ZW1lbnQuZ2V0Tm9kZSgpLFxuICAgICAgICBzdGF0ZW1lbnRTdHJpbmcgPSBsb2NhbENvbnRleHQubm9kZUFzU3RyaW5nKHN0YXRlbWVudE5vZGUpLFxuICAgICAgICBtZXRhdmFyaWFibGVTdHJpbmcgPSBtZXRhdmFyaWFibGUuZ2V0U3RyaW5nKCk7XG5cbiAgaWYgKHN1YnN0aXR1dGlvbiA9PT0gbnVsbCkge1xuICAgIHN0cmluZyA9IGBbJHtzdGF0ZW1lbnRTdHJpbmd9IGZvciAke21ldGF2YXJpYWJsZVN0cmluZ31dYDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBzdWJzdGl0dXRpb25TdHJpbmcgPSBzdWJzdGl0dXRpb24uZ2V0U3RyaW5nKCk7XG5cbiAgICBzdHJpbmcgPSBgWyR7c3RhdGVtZW50U3RyaW5nfSBmb3IgJHttZXRhdmFyaWFibGVTdHJpbmd9JHtzdWJzdGl0dXRpb25TdHJpbmd9XWA7XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuIl0sIm5hbWVzIjpbIlN0YXRlbWVudEZvck1ldGF2YXJpYWJsZVN1YnN0aXR1dGlvbiIsInN0cmluZyIsInN0YXRlbWVudCIsIm1ldGF2YXJpYWJsZSIsInN1YnN0aXR1dGlvbiIsImdldFN0YXRlbWVudCIsImdldE1ldGF2YXJpYWJsZSIsImdldFN1YnN0aXR1dGlvbiIsImdldE1ldGF2YXJpYWJsZU5hbWUiLCJtZXRhdmFyaWFibGVOYW1lIiwiZ2V0TmFtZSIsImlzU2ltcGxlIiwic2ltcGxlIiwicmVzb2x2ZSIsInN1YnN0aXR1dGlvbnMiLCJsb2NhbENvbnRleHRBIiwibG9jYWxDb250ZXh0QiIsInJlc29sdmVkIiwic3Vic3RpdHV0aW9uU3RyaW5nIiwidHJhY2UiLCJzaW1wbGVTdWJzdGl0dXRpb24iLCJmaW5kU2ltcGxlU3Vic3RpdHV0aW9uQnlNZXRhdmFyaWFibGVOYW1lIiwic3Vic3RpdHV0aW9uUmVzb2x2ZWQiLCJyZXNvbHZlU3Vic3RpdHV0aW9uIiwiZGVidWciLCJnZXRTdHJpbmciLCJzdWJzdGl0dXRpb25BIiwic3Vic3RpdHV0aW9uQiIsInVuaWZ5U3RhdGVtZW50IiwibG9jYWxDb250ZXh0RnJvbUxvY2FsQ29udGV4dEFuZFN1YnN0aXR1dGlvbiIsInNuYXBzaG90Iiwibm9kZUEiLCJnZXRTdWJzdGl0dXRpb25Ob2RlIiwibm9kZUIiLCJ1bmlmaWVkQXRNZXRhTGV2ZWwiLCJtZXRhTGV2ZWxVbmlmaWVyIiwidW5pZnkiLCJjb250aW51ZSIsInJvbGxiYWNrIiwiU3Vic3RpdHV0aW9ucyIsImZyb21Ob3RoaW5nIiwic3RhdGVtZW50VW5pZmllZCIsInN1YnN0aXR1dGlvbnNMZW5ndGgiLCJnZXRMZW5ndGgiLCJmaXJzdFN1YnN0aXR1dGlvbiIsImdldEZpcnN0U3Vic3RpdHV0aW9uIiwibWF0Y2hTdGF0ZW1lbnROb2RlIiwic3RhdGVtZW50Tm9kZSIsInN0cmlwQnJhY2tldHNGcm9tU3RhdGVtZW50Tm9kZSIsInN0YXRlbWVudE5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lIiwibWF0Y2hTdWJzdGl0dXRpb25Ob2RlIiwic3Vic3RpdHV0aW9uTm9kZSIsInN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwibWF0Y2hNZXRhdmFyaWFibGVOYW1lQW5kU3Vic3RpdHV0aW9uTm9kZSIsIm1ldGF2YXJpYWJsZU5hbWVNYXRjaGVzIiwibWV0YXZhcmlhYmxlTmFtZUFuZFN1YnN0aXR1dGlvbk5vZGVNYXRjaGVzIiwidG9KU09OIiwibWV0YXZhcmlhYmxlSlNPTiIsIm1ldGF2YXJpYWJsZVRvTWV0YXZhcmlhYmxlSlNPTiIsInN0YXRlbWVudEpTT04iLCJzdGF0ZW1lbnRUb1N0YXRlbWVudEpTT04iLCJqc29uIiwiZnJvbUpTT04iLCJmaWxlQ29udGV4dCIsInN0YXRlbWVudEZyb21KU09OIiwibWV0YXZhcmlhYmxlRnJvbUpTT04iLCJzdGF0ZW1lbnRGb3JNZXRhdmFyaWFibGVTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50QW5kTWV0YXZhcmlhYmxlIiwibG9jYWxDb250ZXh0IiwiZ2V0Tm9kZSIsIlN0YXRlbWVudCIsInNoaW0iLCJmcm9tU3RhdGVtZW50Tm9kZSIsInN0cmluZ0Zyb21TdGF0ZW1lbnRNZXRhdmFyaWFibGVBbmRTdWJzdGl0dXRpb24iLCJmcm9tU3RhdGVtZW50TWV0YXZhcmlhYmxlQW5kU3Vic3RpdHV0aW9uIiwiU3Vic3RpdHV0aW9uIiwic2V0U3Vic3RpdHV0aW9uTm9kZUFuZFRva2VucyIsInN1YnN0aXR1dGlvblRva2VucyIsImdldFN1YnN0aXR1dGlvblRva2VucyIsImNvbnRleHQiLCJ0b2tlbnMiLCJMb2NhbENvbnRleHQiLCJmcm9tQ29udGV4dEFuZFRva2VucyIsInN0YXRlbWVudFN0cmluZyIsIm5vZGVBc1N0cmluZyIsIm1ldGF2YXJpYWJsZVN0cmluZyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7ZUFXcUJBOzs7MkRBVEo7bUVBQ1E7NERBQ0E7b0VBQ0M7Z0VBQ0c7d0JBRWtCO29CQUNtRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVuRyxJQUFBLEFBQU1BLHFEQUFOO2NBQU1BO2FBQUFBLHFDQUNQQyxNQUFNLEVBQUVDLFNBQVMsRUFBRUMsWUFBWSxFQUFFQyxZQUFZO2dDQUR0Q0o7O2dCQUVqQixrQkFGaUJBO1lBRVhDOztRQUVOLE1BQUtDLFNBQVMsR0FBR0E7UUFDakIsTUFBS0MsWUFBWSxHQUFHQTtRQUNwQixNQUFLQyxZQUFZLEdBQUdBOzs7a0JBTkhKOztZQVNuQkssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxTQUFTO1lBQ3ZCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxZQUFZO1lBQzFCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSCxZQUFZO1lBQzFCOzs7WUFFQUksS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLG1CQUFtQixJQUFJLENBQUNOLFlBQVksQ0FBQ08sT0FBTztnQkFFbEQsT0FBT0Q7WUFDVDs7O1lBRUFFLEtBQUFBO21CQUFBQSxT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