occam-directed-graphs 3.0.15 → 3.0.19
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/example.js +77 -50
- package/lib/directedGraph.js +23 -17
- package/package.json +4 -4
- package/src/directedGraph.js +2 -0
package/lib/directedGraph.js
CHANGED
|
@@ -57,8 +57,8 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
57
57
|
},
|
|
58
58
|
{
|
|
59
59
|
key: "getImmediatePredecessorVertexNamesByVertexName",
|
|
60
|
-
value: function getImmediatePredecessorVertexNamesByVertexName(vertexName
|
|
61
|
-
var includeCyclicEdges =
|
|
60
|
+
value: function getImmediatePredecessorVertexNamesByVertexName(vertexName) {
|
|
61
|
+
var includeCyclicEdges = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
62
62
|
var immediatePredecessorVertexNames = this.directedAcyclicGraph.getImmediatePredecessorVertexNamesByVertexName(vertexName);
|
|
63
63
|
if (includeCyclicEdges) {
|
|
64
64
|
this.cyclicEdges.forEach(function(cyclicEdge) {
|
|
@@ -74,8 +74,8 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
74
74
|
},
|
|
75
75
|
{
|
|
76
76
|
key: "getImmediateSuccessorVertexNamesByVertexName",
|
|
77
|
-
value: function getImmediateSuccessorVertexNamesByVertexName(vertexName
|
|
78
|
-
var includeCyclicEdges =
|
|
77
|
+
value: function getImmediateSuccessorVertexNamesByVertexName(vertexName) {
|
|
78
|
+
var includeCyclicEdges = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
79
79
|
var immediateSuccessorVertexNames = this.directedAcyclicGraph.getImmediateSuccessorVertexNamesByVertexName(vertexName);
|
|
80
80
|
if (includeCyclicEdges) {
|
|
81
81
|
this.cyclicEdges.forEach(function(cyclicEdge) {
|
|
@@ -165,6 +165,12 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
165
165
|
return firstCycle;
|
|
166
166
|
}
|
|
167
167
|
},
|
|
168
|
+
{
|
|
169
|
+
key: "getVertexNames",
|
|
170
|
+
value: function getVertexNames() {
|
|
171
|
+
return this.directedAcyclicGraph.getVertexNames();
|
|
172
|
+
}
|
|
173
|
+
},
|
|
168
174
|
{
|
|
169
175
|
key: "getOrderedVertexNames",
|
|
170
176
|
value: function getOrderedVertexNames() {
|
|
@@ -233,8 +239,8 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
233
239
|
},
|
|
234
240
|
{
|
|
235
241
|
key: "removeEdge",
|
|
236
|
-
value: function removeEdge(edge
|
|
237
|
-
var removeStrandedVertices =
|
|
242
|
+
value: function removeEdge(edge) {
|
|
243
|
+
var removeStrandedVertices = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
238
244
|
var cyclicEdgesIncludesEdge = (0, _edge1).checkEdgesIncludesEdge(edge, this.cyclicEdges), edgePresent = this.directedAcyclicGraph.isEdgePresent(edge), edgeCyclic = cyclicEdgesIncludesEdge; ///
|
|
239
245
|
if (false) {
|
|
240
246
|
///
|
|
@@ -258,8 +264,8 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
258
264
|
},
|
|
259
265
|
{
|
|
260
266
|
key: "removeEdges",
|
|
261
|
-
value: function removeEdges(edges
|
|
262
|
-
var removeStrandedVertices =
|
|
267
|
+
value: function removeEdges(edges) {
|
|
268
|
+
var removeStrandedVertices = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
263
269
|
var _this = this;
|
|
264
270
|
edges.forEach(function(edge) {
|
|
265
271
|
return _this.removeEdge(edge, removeStrandedVertices);
|
|
@@ -275,16 +281,16 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
275
281
|
},
|
|
276
282
|
{
|
|
277
283
|
key: "removeEdgeByVertexNames",
|
|
278
|
-
value: function removeEdgeByVertexNames(sourceVertexName, targetVertexName
|
|
279
|
-
var removeStrandedVertices =
|
|
284
|
+
value: function removeEdgeByVertexNames(sourceVertexName, targetVertexName) {
|
|
285
|
+
var removeStrandedVertices = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : false;
|
|
280
286
|
var edge = _edge.default.fromSourceVertexNameAndTargetVertexName(sourceVertexName, targetVertexName);
|
|
281
287
|
this.removeEdge(edge, removeStrandedVertices);
|
|
282
288
|
}
|
|
283
289
|
},
|
|
284
290
|
{
|
|
285
291
|
key: "removeEdgesByTargetVertexName",
|
|
286
|
-
value: function removeEdgesByTargetVertexName(targetVertexName
|
|
287
|
-
var removeStrandedVertices =
|
|
292
|
+
value: function removeEdgesByTargetVertexName(targetVertexName) {
|
|
293
|
+
var removeStrandedVertices = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
288
294
|
var cyclicEdges = (0, _edge1).edgesByTargetVertexName(targetVertexName, this.cyclicEdges), edges = this.directedAcyclicGraph.getEdgesByTargetVertexName(targetVertexName);
|
|
289
295
|
this.removeEdges(cyclicEdges, removeStrandedVertices);
|
|
290
296
|
this.removeEdges(edges, removeStrandedVertices);
|
|
@@ -292,8 +298,8 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
292
298
|
},
|
|
293
299
|
{
|
|
294
300
|
key: "removeEdgesBySourceVertexName",
|
|
295
|
-
value: function removeEdgesBySourceVertexName(sourceVertexName
|
|
296
|
-
var removeStrandedVertices =
|
|
301
|
+
value: function removeEdgesBySourceVertexName(sourceVertexName) {
|
|
302
|
+
var removeStrandedVertices = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : false;
|
|
297
303
|
var cyclicEdges = (0, _edge1).edgesBySourceVertexName(sourceVertexName, this.cyclicEdges), edges = this.directedAcyclicGraph.getEdgesBySourceVertexName(sourceVertexName);
|
|
298
304
|
this.removeEdges(cyclicEdges, removeStrandedVertices);
|
|
299
305
|
this.removeEdges(edges, removeStrandedVertices);
|
|
@@ -309,7 +315,7 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
309
315
|
{
|
|
310
316
|
key: "filterCyclicEdges",
|
|
311
317
|
value: function filterCyclicEdges() {
|
|
312
|
-
var _this = this
|
|
318
|
+
var _this = this;
|
|
313
319
|
filter(this.cyclicEdges, function(cyclicEdge) {
|
|
314
320
|
var sourceVertexName = cyclicEdge.getSourceVertexName(), targetVertexName = cyclicEdge.getTargetVertexName(), sourceVertexPresent = _this.isVertexPresentByVertexName(sourceVertexName), targetVertexPresent = _this.isVertexPresentByVertexName(targetVertexName);
|
|
315
321
|
if (sourceVertexPresent && targetVertexPresent) {
|
|
@@ -317,7 +323,7 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
317
323
|
}
|
|
318
324
|
});
|
|
319
325
|
filter(this.cyclicEdges, function(cyclicEdge) {
|
|
320
|
-
var edge = cyclicEdge, success =
|
|
326
|
+
var edge = cyclicEdge, success = _this.directedAcyclicGraph.addEdge(edge);
|
|
321
327
|
if (!success) {
|
|
322
328
|
return true;
|
|
323
329
|
}
|
|
@@ -362,4 +368,4 @@ var DirectedGraph = /*#__PURE__*/ function() {
|
|
|
362
368
|
}();
|
|
363
369
|
exports.default = DirectedGraph;
|
|
364
370
|
|
|
365
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RlZEdyYXBoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gXCJvY2NhbS1rYWhuXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IERpcmVjdGVkQWN5Y2xpY0dyYXBoIH0gZnJvbSBcIm9jY2FtLXBlYXJjZS1rZWxseVwiO1xuXG5pbXBvcnQgRWRnZSBmcm9tIFwiLi9lZGdlXCI7XG5pbXBvcnQgQ3ljbGUgZnJvbSBcIi4vY3ljbGVcIjtcbmltcG9ydCBQYXJ0aWFsQ3ljbGUgZnJvbSBcIi4vcGFydGlhbEN5Y2xlXCI7XG5cbmltcG9ydCB7IHZlcnRleE5hbWVzRnJvbVZlcnRleExpdGVyYWxzLCBmb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2ggfSBmcm9tIFwiLi91dGlsaXRpZXMvdmVydGV4XCI7XG5pbXBvcnQgeyBlZGdlc0Zyb21WZXJ0ZXhMaXRlcmFscywgY2hlY2tFZGdlc0luY2x1ZGVzRWRnZSwgcmVtb3ZlRWRnZUZyb21FZGdlcywgZWRnZXNCeVNvdXJjZVZlcnRleE5hbWUsIGVkZ2VzQnlUYXJnZXRWZXJ0ZXhOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VkZ2VcIjtcblxuY29uc3QgeyBmaXJzdCwgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlyZWN0ZWRHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKGN5Y2xpY0VkZ2VzLCBkaXJlY3RlZEFjeWNsaWNHcmFwaCkge1xuICAgIHRoaXMuY3ljbGljRWRnZXMgPSBjeWNsaWNFZGdlcztcblxuICAgIHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGggPSBkaXJlY3RlZEFjeWNsaWNHcmFwaDtcbiAgfVxuXG4gIGdldEN5Y2xpY0VkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLmN5Y2xpY0VkZ2VzO1xuICB9XG5cbiAgZ2V0RGlyZWN0ZWRBY3ljbGljR3JhcGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGg7XG4gIH1cblxuICBnZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIGluY2x1ZGVDeWNsaWNFZGdlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguZ2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgIGlmIChpbmNsdWRlQ3ljbGljRWRnZXMpIHtcbiAgICAgIHRoaXMuY3ljbGljRWRnZXMuZm9yRWFjaCgoY3ljbGljRWRnZSkgPT4ge1xuICAgICAgICBjb25zdCBjeWNsaWNFZGdlVGFyZ2V0VmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpO1xuXG4gICAgICAgIGlmIChjeWNsaWNFZGdlVGFyZ2V0VmVydGV4TmFtZSA9PT0gdmVydGV4TmFtZSkge1xuICAgICAgICAgIGNvbnN0IGN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICAgICAgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZVNvdXJjZVZlcnRleE5hbWU7ICAvLy9cblxuICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMucHVzaChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIGluY2x1ZGVDeWNsaWNFZGdlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMgPSB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpO1xuXG4gICAgaWYgKGluY2x1ZGVDeWNsaWNFZGdlcykge1xuICAgICAgdGhpcy5jeWNsaWNFZGdlcy5mb3JFYWNoKChjeWNsaWNFZGdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCk7XG5cbiAgICAgICAgaWYgKGN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lID09PSB2ZXJ0ZXhOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWUgPSBjeWNsaWNFZGdlLmdldFRhcmdldFZlcnRleE5hbWUoKSxcbiAgICAgICAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWU7ICAvLy9cblxuICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzLnB1c2goaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldFByZWRlY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUodmVydGV4TmFtZSkgeyByZXR1cm4gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpOyB9XG5cbiAgZ2V0U3VjY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUodmVydGV4TmFtZSkgeyByZXR1cm4gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTsgfVxuXG4gIGFyZUN5Y2xlc1ByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSkge1xuICAgIGxldCBjeWNsZXNQcmVzZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdCB2ZXJ0ZXhQcmVzZW50ID0gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICBpZiAodmVydGV4UHJlc2VudCkge1xuICAgICAgY29uc3QgZmlyc3RDeWNsZSA9IHRoaXMuZ2V0Rmlyc3RDeWNsZUJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgICAgY3ljbGVzUHJlc2VudCA9IChmaXJzdEN5Y2xlICE9PSBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3ljbGVzUHJlc2VudDtcbiAgfVxuXG4gIGlzVmVydGV4UHJlc2VudEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7IHJldHVybiB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmlzVmVydGV4UHJlc2VudEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTsgfVxuXG4gIGdldEZpcnN0Q3ljbGVCeVZlcnRleE5hbWUodmVydGV4TmFtZSkge1xuICAgIGxldCBmaXJzdEN5Y2xlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSxcbiAgICAgICAgICBjeWNsaWNFZGdlcyA9IHRoaXMuY3ljbGljRWRnZXMuc2xpY2UoKSwgLy8vXG4gICAgICAgICAgcGFydGlhbEN5Y2xlcyA9IFtdLFxuICAgICAgICAgIGN5Y2xlcyA9IFtdO1xuXG4gICAgZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKHZlcnRleCwgKHZpc2l0ZWRWZXJ0ZXgsIGdldFByZWRlY2Vzc29yVmVydGljZXMpID0+IHtcbiAgICAgIGNvbnN0IHZpc2l0ZWRWZXJ0ZXhOYW1lID0gdmlzaXRlZFZlcnRleC5nZXROYW1lKCksXG4gICAgICAgICAgICBzb3VyY2VWZXJ0ZXhOYW1lID0gdmlzaXRlZFZlcnRleE5hbWU7IC8vL1xuXG4gICAgICBmaWx0ZXIoY3ljbGljRWRnZXMsIChjeWNsaWNFZGdlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBjeWNsaWNFZGdlLm1hdGNoU291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKTtcblxuICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgIGNvbnN0IHByZWRlY2Vzc29yVmVydGljZXMgPSBnZXRQcmVkZWNlc3NvclZlcnRpY2VzKCksXG4gICAgICAgICAgICAgICAgcGFydGlhbEN5Y2xlID0gIFBhcnRpYWxDeWNsZS5mcm9tQ3ljbGljRWRnZUFuZFByZWRlY2Vzc29yVmVydGljZXMoY3ljbGljRWRnZSwgcHJlZGVjZXNzb3JWZXJ0aWNlcyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcGFydGlhbEN5Y2xlcy5wdXNoKHBhcnRpYWxDeWNsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjeWNsaWNFZGdlc0xlbmd0aCA9IGN5Y2xpY0VkZ2VzLmxlbmd0aCxcbiAgICAgICAgICAgIHRlcm1pbmF0ZSA9IChjeWNsaWNFZGdlc0xlbmd0aCA9PT0gMCk7XG5cbiAgICAgIHJldHVybiB0ZXJtaW5hdGU7XG4gICAgfSk7XG5cbiAgICBwYXJ0aWFsQ3ljbGVzLnNvbWUoKHBhcnRpYWxDeWNsZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0VmVydGV4TmFtZSA9IHBhcnRpYWxDeWNsZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICB0YXJnZXRWZXJ0ZXggPSB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldFZlcnRleEJ5VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKHRhcmdldFZlcnRleCwgKHZpc2l0ZWRWZXJ0ZXgsIGdldFByZWRlY2Vzc29yVmVydGljZXMpID0+IHtcbiAgICAgICAgY29uc3QgdmlzaXRlZFZlcnRleE5hbWUgPSB2aXNpdGVkVmVydGV4LmdldE5hbWUoKTtcblxuICAgICAgICBpZiAodmlzaXRlZFZlcnRleE5hbWUgPT09IHZlcnRleE5hbWUpIHtcbiAgICAgICAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRpY2VzID0gZ2V0UHJlZGVjZXNzb3JWZXJ0aWNlcygpLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NvclZlcnRpY2VzID0gcHJlZGVjZXNzb3JWZXJ0aWNlcywgIC8vL1xuICAgICAgICAgICAgICAgIGN5Y2xlID0gQ3ljbGUuZnJvbVZlcnRleE5hbWVQYXJ0aWFsQ3ljbGVBbmRTdWNjZXNzb3JWZXJ0aWNlcyh2ZXJ0ZXhOYW1lLCBwYXJ0aWFsQ3ljbGUsIHN1Y2Nlc3NvclZlcnRpY2VzKTtcblxuICAgICAgICAgIGN5Y2xlcy5wdXNoKGN5Y2xlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN5Y2xlc0xlbmd0aCA9IGN5Y2xlcy5sZW5ndGgsXG4gICAgICAgICAgICAgIHRlcm1pbmF0ZSA9IChjeWNsZXNMZW5ndGggPiAwKTtcblxuICAgICAgICByZXR1cm4gdGVybWluYXRlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjeWNsZXNMZW5ndGggPSBjeWNsZXMubGVuZ3RoO1xuICAgIFxuICAgIGlmIChjeWNsZXNMZW5ndGggPiAwKSB7XG4gICAgICBmaXJzdEN5Y2xlID0gZmlyc3QoY3ljbGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RDeWNsZTtcbiAgfVxuXG4gIGdldEZpcnN0Q3ljbGUoKSB7XG4gICAgY29uc3QgZmlyc3RDeWNsaWNFZGdlID0gZmlyc3QodGhpcy5jeWNsaWNFZGdlcyksXG4gICAgICAgICAgY3ljbGljRWRnZSA9IGZpcnN0Q3ljbGljRWRnZSwgLy8vXG4gICAgICAgICAgc291cmNlVmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2UuZ2V0U291cmNlVmVydGV4TmFtZSgpLFxuICAgICAgICAgIHZlcnRleE5hbWUgPSBzb3VyY2VWZXJ0ZXhOYW1lLCAgLy8vXG4gICAgICAgICAgZmlyc3RDeWNsZSA9IHRoaXMuZ2V0Rmlyc3RDeWNsZUJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgIHJldHVybiBmaXJzdEN5Y2xlO1xuICB9XG5cbiAgZ2V0T3JkZXJlZFZlcnRleE5hbWVzKCkgeyByZXR1cm4gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRPcmRlcmVkVmVydGV4TmFtZXMoKTsgfVxuXG4gIGFyZUN5Y2xlc1ByZXNlbnQoKSB7XG4gICAgY29uc3QgY3ljbGljRWRnZXNMZW5ndGggPSB0aGlzLmN5Y2xpY0VkZ2VzLmxlbmd0aCxcbiAgICAgICAgICBjeWNsZXNQcmVzZW50ID0gKGN5Y2xpY0VkZ2VzTGVuZ3RoID4gMCk7XG5cbiAgICByZXR1cm4gY3ljbGVzUHJlc2VudDtcbiAgfVxuXG4gIGFkZFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguYWRkVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpOyB9XG5cbiAgYWRkVmVydGljZXNCeVZlcnRleE5hbWVzKHZlcnRleE5hbWVzKSB7XG4gICAgdmVydGV4TmFtZXMuZm9yRWFjaCgodmVydGV4TmFtZSkgPT4gdGhpcy5hZGRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSkpO1xuICB9XG5cbiAgcmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHtcbiAgICB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLnJlbW92ZVZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgIHRoaXMuZmlsdGVyQ3ljbGljRWRnZXMoKTtcbiAgfVxuXG4gIHJlbW92ZVZlcnRpY2VzQnlWZXJ0ZXhOYW1lcyh2ZXJ0ZXhOYW1lcykge1xuICAgIHZlcnRleE5hbWVzLmZvckVhY2goKHZlcnRleE5hbWUpID0+IHRoaXMucmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpKTtcbiAgfVxuXG4gIGFkZEVkZ2UoZWRnZSkge1xuICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmFkZEVkZ2UoZWRnZSk7XG4gICAgXG4gICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICBjb25zdCBjeWNsaWNFZGdlc0luY2x1ZGVzRWRnZSA9IGNoZWNrRWRnZXNJbmNsdWRlc0VkZ2UoZWRnZSwgdGhpcy5jeWNsaWNFZGdlcyk7XG5cbiAgICAgIGlmICghY3ljbGljRWRnZXNJbmNsdWRlc0VkZ2UpIHtcbiAgICAgICAgY29uc3QgY3ljbGljRWRnZSA9IGVkZ2U7ICAvLy9cblxuICAgICAgICB0aGlzLmN5Y2xpY0VkZ2VzLnB1c2goY3ljbGljRWRnZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIFxuICBhZGRFZGdlcyhlZGdlcykge1xuICAgIGVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHRoaXMuYWRkRWRnZShlZGdlKSk7XG4gIH1cblxuICByZW1vdmVFZGdlKGVkZ2UsIHJlbW92ZVN0cmFuZGVkVmVydGljZXMgPSBmYWxzZSkge1xuICAgIGNvbnN0IGN5Y2xpY0VkZ2VzSW5jbHVkZXNFZGdlID0gY2hlY2tFZGdlc0luY2x1ZGVzRWRnZShlZGdlLCB0aGlzLmN5Y2xpY0VkZ2VzKSxcbiAgICAgICAgICBlZGdlUHJlc2VudCA9IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguaXNFZGdlUHJlc2VudChlZGdlKSxcbiAgICAgICAgICBlZGdlQ3ljbGljID0gY3ljbGljRWRnZXNJbmNsdWRlc0VkZ2U7IC8vL1xuXG4gICAgaWYgKGZhbHNlKSB7XG4gICAgICAvLy9cbiAgICB9IGVsc2UgaWYgKGVkZ2VDeWNsaWMpIHtcbiAgICAgIGNvbnN0IGN5Y2xpY0VkZ2UgPSBlZGdlOyAgLy8vXG5cbiAgICAgIHJlbW92ZUVkZ2VGcm9tRWRnZXMoY3ljbGljRWRnZSwgdGhpcy5jeWNsaWNFZGdlcyk7XG4gICAgfSBlbHNlIGlmIChlZGdlUHJlc2VudCkge1xuICAgICAgdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5yZW1vdmVFZGdlKGVkZ2UpO1xuXG4gICAgICBpZiAocmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcykge1xuICAgICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gZWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICAgIHRhcmdldFZlcnRleE5hbWUgPSBlZGdlLmdldFRhcmdldFZlcnRleE5hbWUoKSxcbiAgICAgICAgICAgICAgc291cmNlVmVydGV4ID0gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSksXG4gICAgICAgICAgICAgIHRhcmdldFZlcnRleCA9IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpLFxuICAgICAgICAgICAgICBzb3VyY2VWZXJ0ZXhTdHJhbmRlZCA9IHNvdXJjZVZlcnRleC5pc1N0cmFuZGVkKCksXG4gICAgICAgICAgICAgIHRhcmdldFZlcnRleFN0cmFuZGVkID0gdGFyZ2V0VmVydGV4LmlzU3RyYW5kZWQoKTtcblxuICAgICAgICBpZiAoc291cmNlVmVydGV4U3RyYW5kZWQpIHtcbiAgICAgICAgICB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLnJlbW92ZVZlcnRleEJ5VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0YXJnZXRWZXJ0ZXhTdHJhbmRlZCkge1xuICAgICAgICAgIHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGgucmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5maWx0ZXJDeWNsaWNFZGdlcygpO1xuICB9XG5cbiAgcmVtb3ZlRWRnZXMoZWRnZXMsIHJlbW92ZVN0cmFuZGVkVmVydGljZXMgPSBmYWxzZSkge1xuICAgIGVkZ2VzLmZvckVhY2goKGVkZ2UpID0+IHRoaXMucmVtb3ZlRWRnZShlZGdlLCByZW1vdmVTdHJhbmRlZFZlcnRpY2VzKSk7XG4gIH1cblxuICBhZGRFZGdlQnlWZXJ0ZXhOYW1lcyhzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lKSB7XG4gICAgY29uc3QgZWRnZSA9IEVkZ2UuZnJvbVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgdGhpcy5hZGRFZGdlKGVkZ2UpO1xuICB9XG5cbiAgcmVtb3ZlRWRnZUJ5VmVydGV4TmFtZXMoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSwgcmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgZWRnZSA9IEVkZ2UuZnJvbVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgdGhpcy5yZW1vdmVFZGdlKGVkZ2UsIHJlbW92ZVN0cmFuZGVkVmVydGljZXMpO1xuICB9XG5cbiAgcmVtb3ZlRWRnZXNCeVRhcmdldFZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSwgcmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3ljbGljRWRnZXMgPSBlZGdlc0J5VGFyZ2V0VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lLCB0aGlzLmN5Y2xpY0VkZ2VzKSxcbiAgICAgICAgICBlZGdlcyA9IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguZ2V0RWRnZXNCeVRhcmdldFZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICB0aGlzLnJlbW92ZUVkZ2VzKGN5Y2xpY0VkZ2VzLCByZW1vdmVTdHJhbmRlZFZlcnRpY2VzKTtcblxuICAgIHRoaXMucmVtb3ZlRWRnZXMoZWRnZXMsIHJlbW92ZVN0cmFuZGVkVmVydGljZXMpO1xuICB9XG5cbiAgcmVtb3ZlRWRnZXNCeVNvdXJjZVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSwgcmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3ljbGljRWRnZXMgPSBlZGdlc0J5U291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCB0aGlzLmN5Y2xpY0VkZ2VzKSxcbiAgICAgICAgICBlZGdlcyA9IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguZ2V0RWRnZXNCeVNvdXJjZVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSk7XG5cbiAgICB0aGlzLnJlbW92ZUVkZ2VzKGN5Y2xpY0VkZ2VzLCByZW1vdmVTdHJhbmRlZFZlcnRpY2VzKTtcblxuICAgIHRoaXMucmVtb3ZlRWRnZXMoZWRnZXMsIHJlbW92ZVN0cmFuZGVkVmVydGljZXMpO1xuICB9XG5cbiAgcmVtb3ZlQWxsRWRnZXNBbmRWZXJ0aWNlcygpIHtcbiAgICB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoID0gRGlyZWN0ZWRBY3ljbGljR3JhcGguZnJvbU5vdGhpbmcoKTtcblxuICAgIHRoaXMuY3ljbGljRWRnZXMgPSBbXTtcbiAgfVxuXG4gIGZpbHRlckN5Y2xpY0VkZ2VzKCkge1xuICAgIGZpbHRlcih0aGlzLmN5Y2xpY0VkZ2VzLCAoY3ljbGljRWRnZSkgPT4ge1xuICAgICAgY29uc3Qgc291cmNlVmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2UuZ2V0U291cmNlVmVydGV4TmFtZSgpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpLFxuICAgICAgICAgICAgc291cmNlVmVydGV4UHJlc2VudCA9IHRoaXMuaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpLFxuICAgICAgICAgICAgdGFyZ2V0VmVydGV4UHJlc2VudCA9IHRoaXMuaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUpO1xuXG4gICAgICBpZiAoc291cmNlVmVydGV4UHJlc2VudCAmJiB0YXJnZXRWZXJ0ZXhQcmVzZW50KSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZmlsdGVyKHRoaXMuY3ljbGljRWRnZXMsIChjeWNsaWNFZGdlKSA9PiB7XG4gICAgICBjb25zdCBlZGdlID0gY3ljbGljRWRnZSwgIC8vL1xuICAgICAgICAgICAgc3VjY2VzcyA9IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguYWRkRWRnZShlZGdlKTtcblxuICAgICAgaWYgKCFzdWNjZXNzKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGZyb21Ob3RoaW5nKCkge1xuICAgIGNvbnN0IGN5Y2xpY0VkZ2VzID0gW10sXG4gICAgICAgICAgZGlyZWN0ZWRBY3ljbGljR3JhcGggPSBEaXJlY3RlZEFjeWNsaWNHcmFwaC5mcm9tTm90aGluZygpLFxuICAgICAgICAgIGRpcmVjdGVkR3JhcGggPSBuZXcgRGlyZWN0ZWRHcmFwaChjeWNsaWNFZGdlcywgZGlyZWN0ZWRBY3ljbGljR3JhcGgpO1xuICAgIFxuICAgIHJldHVybiBkaXJlY3RlZEdyYXBoOyAgICBcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVmVydGV4TGl0ZXJhbHModmVydGV4TGl0ZXJhbHMpIHtcbiAgICBjb25zdCB2ZXJ0ZXhOYW1lcyA9IHZlcnRleE5hbWVzRnJvbVZlcnRleExpdGVyYWxzKHZlcnRleExpdGVyYWxzKSxcbiAgICAgICAgICBlZGdlcyA9IGVkZ2VzRnJvbVZlcnRleExpdGVyYWxzKHZlcnRleExpdGVyYWxzKSxcbiAgICAgICAgICBkaXJlY3RlZEdyYXBoID0gRGlyZWN0ZWRHcmFwaC5mcm9tVmVydGV4TmFtZXNBbmRFZGdlcyh2ZXJ0ZXhOYW1lcywgZWRnZXMpO1xuXG4gICAgcmV0dXJuIGRpcmVjdGVkR3JhcGg7XG4gIH1cblxuICBzdGF0aWMgZnJvbVZlcnRleE5hbWVzQW5kRWRnZXModmVydGV4TmFtZXMsIGVkZ2VzKSB7XG4gICAgbGV0IGRpcmVjdGVkR3JhcGg7XG5cbiAgICBjb25zdCBncmFwaCA9IEdyYXBoLmZyb21WZXJ0ZXhOYW1lc0FuZEVkZ2VzKHZlcnRleE5hbWVzLCBlZGdlcyksXG4gICAgICAgICAgY3ljbGVzUHJlc2VudCA9IGdyYXBoLmFyZUN5Y2xlc1ByZXNlbnQoKTtcblxuICAgIGlmIChjeWNsZXNQcmVzZW50KSB7XG4gICAgICBjb25zdCBjeWNsaWNFZGdlcyA9IFtdLFxuICAgICAgICAgICAgZGlyZWN0ZWRBY3ljbGljR3JhcGggPSBEaXJlY3RlZEFjeWNsaWNHcmFwaC5mcm9tVmVydGV4TmFtZXModmVydGV4TmFtZXMpO1xuXG4gICAgICBkaXJlY3RlZEdyYXBoID0gbmV3IERpcmVjdGVkR3JhcGgoY3ljbGljRWRnZXMsIGRpcmVjdGVkQWN5Y2xpY0dyYXBoKTtcblxuICAgICAgZWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4gZGlyZWN0ZWRHcmFwaC5hZGRFZGdlKGVkZ2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgb3JkZXJlZFZlcnRpY2VzID0gZ3JhcGguZ2V0T3JkZXJlZFZlcnRpY2VzKCksXG4gICAgICAgICAgICBjeWNsaWNFZGdlcyA9IFtdLFxuICAgICAgICAgICAgZGlyZWN0ZWRBY3ljbGljR3JhcGggPSBEaXJlY3RlZEFjeWNsaWNHcmFwaC5mcm9tT3JkZXJlZFZlcnRpY2VzKG9yZGVyZWRWZXJ0aWNlcyk7XG5cbiAgICAgIGRpcmVjdGVkR3JhcGggPSBuZXcgRGlyZWN0ZWRHcmFwaChjeWNsaWNFZGdlcywgZGlyZWN0ZWRBY3ljbGljR3JhcGgpO1xuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3RlZEdyYXBoO1xuICB9XG59XG4iXSwibmFtZXMiOlsiZmlyc3QiLCJmaWx0ZXIiLCJEaXJlY3RlZEdyYXBoIiwiY3ljbGljRWRnZXMiLCJkaXJlY3RlZEFjeWNsaWNHcmFwaCIsImdldEN5Y2xpY0VkZ2VzIiwiZ2V0RGlyZWN0ZWRBY3ljbGljR3JhcGgiLCJnZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lIiwidmVydGV4TmFtZSIsImluY2x1ZGVDeWNsaWNFZGdlcyIsImltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJmb3JFYWNoIiwiY3ljbGljRWRnZSIsImN5Y2xpY0VkZ2VUYXJnZXRWZXJ0ZXhOYW1lIiwiZ2V0VGFyZ2V0VmVydGV4TmFtZSIsImN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lIiwiZ2V0U291cmNlVmVydGV4TmFtZSIsImltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZSIsInB1c2giLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsImltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZSIsImdldFByZWRlY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUiLCJnZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsImFyZUN5Y2xlc1ByZXNlbnRCeVZlcnRleE5hbWUiLCJjeWNsZXNQcmVzZW50IiwidmVydGV4UHJlc2VudCIsImlzVmVydGV4UHJlc2VudEJ5VmVydGV4TmFtZSIsImZpcnN0Q3ljbGUiLCJnZXRGaXJzdEN5Y2xlQnlWZXJ0ZXhOYW1lIiwidmVydGV4IiwiZ2V0VmVydGV4QnlWZXJ0ZXhOYW1lIiwic2xpY2UiLCJwYXJ0aWFsQ3ljbGVzIiwiY3ljbGVzIiwidmlzaXRlZFZlcnRleCIsImdldFByZWRlY2Vzc29yVmVydGljZXMiLCJ2aXNpdGVkVmVydGV4TmFtZSIsImdldE5hbWUiLCJzb3VyY2VWZXJ0ZXhOYW1lIiwibWF0Y2hlcyIsIm1hdGNoU291cmNlVmVydGV4TmFtZSIsInByZWRlY2Vzc29yVmVydGljZXMiLCJwYXJ0aWFsQ3ljbGUiLCJmcm9tQ3ljbGljRWRnZUFuZFByZWRlY2Vzc29yVmVydGljZXMiLCJjeWNsaWNFZGdlc0xlbmd0aCIsImxlbmd0aCIsInRlcm1pbmF0ZSIsInNvbWUiLCJ0YXJnZXRWZXJ0ZXhOYW1lIiwidGFyZ2V0VmVydGV4Iiwic3VjY2Vzc29yVmVydGljZXMiLCJjeWNsZSIsImZyb21WZXJ0ZXhOYW1lUGFydGlhbEN5Y2xlQW5kU3VjY2Vzc29yVmVydGljZXMiLCJjeWNsZXNMZW5ndGgiLCJnZXRGaXJzdEN5Y2xlIiwiZmlyc3RDeWNsaWNFZGdlIiwiZ2V0T3JkZXJlZFZlcnRleE5hbWVzIiwiYXJlQ3ljbGVzUHJlc2VudCIsImFkZFZlcnRleEJ5VmVydGV4TmFtZSIsImFkZFZlcnRpY2VzQnlWZXJ0ZXhOYW1lcyIsInZlcnRleE5hbWVzIiwicmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lIiwiZmlsdGVyQ3ljbGljRWRnZXMiLCJyZW1vdmVWZXJ0aWNlc0J5VmVydGV4TmFtZXMiLCJhZGRFZGdlIiwiZWRnZSIsInN1Y2Nlc3MiLCJjeWNsaWNFZGdlc0luY2x1ZGVzRWRnZSIsImFkZEVkZ2VzIiwiZWRnZXMiLCJyZW1vdmVFZGdlIiwicmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyIsImVkZ2VQcmVzZW50IiwiaXNFZGdlUHJlc2VudCIsImVkZ2VDeWNsaWMiLCJzb3VyY2VWZXJ0ZXgiLCJzb3VyY2VWZXJ0ZXhTdHJhbmRlZCIsImlzU3RyYW5kZWQiLCJ0YXJnZXRWZXJ0ZXhTdHJhbmRlZCIsInJlbW92ZUVkZ2VzIiwiYWRkRWRnZUJ5VmVydGV4TmFtZXMiLCJmcm9tU291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUiLCJyZW1vdmVFZGdlQnlWZXJ0ZXhOYW1lcyIsInJlbW92ZUVkZ2VzQnlUYXJnZXRWZXJ0ZXhOYW1lIiwiZ2V0RWRnZXNCeVRhcmdldFZlcnRleE5hbWUiLCJyZW1vdmVFZGdlc0J5U291cmNlVmVydGV4TmFtZSIsImdldEVkZ2VzQnlTb3VyY2VWZXJ0ZXhOYW1lIiwicmVtb3ZlQWxsRWRnZXNBbmRWZXJ0aWNlcyIsImZyb21Ob3RoaW5nIiwic291cmNlVmVydGV4UHJlc2VudCIsInRhcmdldFZlcnRleFByZXNlbnQiLCJkaXJlY3RlZEdyYXBoIiwiZnJvbVZlcnRleExpdGVyYWxzIiwidmVydGV4TGl0ZXJhbHMiLCJmcm9tVmVydGV4TmFtZXNBbmRFZGdlcyIsImdyYXBoIiwiZnJvbVZlcnRleE5hbWVzIiwib3JkZXJlZFZlcnRpY2VzIiwiZ2V0T3JkZXJlZFZlcnRpY2VzIiwiZnJvbU9yZGVyZWRWZXJ0aWNlcyJdLCJtYXBwaW5ncyI6IkFBQUEsQ0FBWTs7Ozs7QUFFVSxHQUFZLENBQVosVUFBWTtBQUNILEdBQVcsQ0FBWCxVQUFXO0FBQ0wsR0FBb0IsQ0FBcEIsaUJBQW9CO0FBRXhDLEdBQVEsQ0FBUixLQUFRO0FBQ1AsR0FBUyxDQUFULE1BQVM7QUFDRixHQUFnQixDQUFoQixhQUFnQjtBQUUrQixHQUFvQixDQUFwQixPQUFvQjtBQUMyQyxHQUFrQixDQUFsQixNQUFrQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV6SixHQUFLLENBQUdBLEtBQUssR0FWa0IsVUFBVyxnQkFVbENBLEtBQUssRUFBRUMsTUFBTSxHQVZVLFVBQVcsZ0JBVTNCQSxNQUFNO0lBRUFDLGFBQWEsaUJBQW5CLFFBQVE7YUFBRkEsYUFBYSxDQUNwQkMsV0FBVyxFQUFFQyxvQkFBb0I7OEJBRDFCRixhQUFhO1FBRTlCLElBQUksQ0FBQ0MsV0FBVyxHQUFHQSxXQUFXO1FBRTlCLElBQUksQ0FBQ0Msb0JBQW9CLEdBQUdBLG9CQUFvQjs7aUJBSi9CRixhQUFhOztZQU9oQ0csR0FBYyxFQUFkQSxDQUFjO21CQUFkQSxRQUFRLENBQVJBLGNBQWMsR0FBRyxDQUFDO2dCQUNoQixNQUFNLENBQUMs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
|
|
371
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9kaXJlY3RlZEdyYXBoLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBHcmFwaCB9IGZyb20gXCJvY2NhbS1rYWhuXCI7XG5pbXBvcnQgeyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCJuZWNlc3NhcnlcIjtcbmltcG9ydCB7IERpcmVjdGVkQWN5Y2xpY0dyYXBoIH0gZnJvbSBcIm9jY2FtLXBlYXJjZS1rZWxseVwiO1xuXG5pbXBvcnQgRWRnZSBmcm9tIFwiLi9lZGdlXCI7XG5pbXBvcnQgQ3ljbGUgZnJvbSBcIi4vY3ljbGVcIjtcbmltcG9ydCBQYXJ0aWFsQ3ljbGUgZnJvbSBcIi4vcGFydGlhbEN5Y2xlXCI7XG5cbmltcG9ydCB7IHZlcnRleE5hbWVzRnJvbVZlcnRleExpdGVyYWxzLCBmb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2ggfSBmcm9tIFwiLi91dGlsaXRpZXMvdmVydGV4XCI7XG5pbXBvcnQgeyBlZGdlc0Zyb21WZXJ0ZXhMaXRlcmFscywgY2hlY2tFZGdlc0luY2x1ZGVzRWRnZSwgcmVtb3ZlRWRnZUZyb21FZGdlcywgZWRnZXNCeVNvdXJjZVZlcnRleE5hbWUsIGVkZ2VzQnlUYXJnZXRWZXJ0ZXhOYW1lIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2VkZ2VcIjtcblxuY29uc3QgeyBmaXJzdCwgZmlsdGVyIH0gPSBhcnJheVV0aWxpdGllcztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlyZWN0ZWRHcmFwaCB7XG4gIGNvbnN0cnVjdG9yKGN5Y2xpY0VkZ2VzLCBkaXJlY3RlZEFjeWNsaWNHcmFwaCkge1xuICAgIHRoaXMuY3ljbGljRWRnZXMgPSBjeWNsaWNFZGdlcztcblxuICAgIHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGggPSBkaXJlY3RlZEFjeWNsaWNHcmFwaDtcbiAgfVxuXG4gIGdldEN5Y2xpY0VkZ2VzKCkge1xuICAgIHJldHVybiB0aGlzLmN5Y2xpY0VkZ2VzO1xuICB9XG5cbiAgZ2V0RGlyZWN0ZWRBY3ljbGljR3JhcGgoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGg7XG4gIH1cblxuICBnZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIGluY2x1ZGVDeWNsaWNFZGdlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguZ2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgIGlmIChpbmNsdWRlQ3ljbGljRWRnZXMpIHtcbiAgICAgIHRoaXMuY3ljbGljRWRnZXMuZm9yRWFjaCgoY3ljbGljRWRnZSkgPT4ge1xuICAgICAgICBjb25zdCBjeWNsaWNFZGdlVGFyZ2V0VmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpO1xuXG4gICAgICAgIGlmIChjeWNsaWNFZGdlVGFyZ2V0VmVydGV4TmFtZSA9PT0gdmVydGV4TmFtZSkge1xuICAgICAgICAgIGNvbnN0IGN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICAgICAgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZVNvdXJjZVZlcnRleE5hbWU7ICAvLy9cblxuICAgICAgICAgIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMucHVzaChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUsIGluY2x1ZGVDeWNsaWNFZGdlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMgPSB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpO1xuXG4gICAgaWYgKGluY2x1ZGVDeWNsaWNFZGdlcykge1xuICAgICAgdGhpcy5jeWNsaWNFZGdlcy5mb3JFYWNoKChjeWNsaWNFZGdlKSA9PiB7XG4gICAgICAgIGNvbnN0IGN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCk7XG5cbiAgICAgICAgaWYgKGN5Y2xpY0VkZ2VTb3VyY2VWZXJ0ZXhOYW1lID09PSB2ZXJ0ZXhOYW1lKSB7XG4gICAgICAgICAgY29uc3QgY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWUgPSBjeWNsaWNFZGdlLmdldFRhcmdldFZlcnRleE5hbWUoKSxcbiAgICAgICAgICAgICAgICBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWU7ICAvLy9cblxuICAgICAgICAgIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzLnB1c2goaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldFByZWRlY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUodmVydGV4TmFtZSkgeyByZXR1cm4gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRQcmVkZWNlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpOyB9XG5cbiAgZ2V0U3VjY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUodmVydGV4TmFtZSkgeyByZXR1cm4gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTsgfVxuXG4gIGFyZUN5Y2xlc1ByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSkge1xuICAgIGxldCBjeWNsZXNQcmVzZW50ID0gZmFsc2U7XG5cbiAgICBjb25zdCB2ZXJ0ZXhQcmVzZW50ID0gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7XG5cbiAgICBpZiAodmVydGV4UHJlc2VudCkge1xuICAgICAgY29uc3QgZmlyc3RDeWNsZSA9IHRoaXMuZ2V0Rmlyc3RDeWNsZUJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgICAgY3ljbGVzUHJlc2VudCA9IChmaXJzdEN5Y2xlICE9PSBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3ljbGVzUHJlc2VudDtcbiAgfVxuXG4gIGlzVmVydGV4UHJlc2VudEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSB7IHJldHVybiB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmlzVmVydGV4UHJlc2VudEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTsgfVxuXG4gIGdldEZpcnN0Q3ljbGVCeVZlcnRleE5hbWUodmVydGV4TmFtZSkge1xuICAgIGxldCBmaXJzdEN5Y2xlID0gbnVsbDtcbiAgICBcbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSxcbiAgICAgICAgICBjeWNsaWNFZGdlcyA9IHRoaXMuY3ljbGljRWRnZXMuc2xpY2UoKSwgLy8vXG4gICAgICAgICAgcGFydGlhbEN5Y2xlcyA9IFtdLFxuICAgICAgICAgIGN5Y2xlcyA9IFtdO1xuXG4gICAgZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKHZlcnRleCwgKHZpc2l0ZWRWZXJ0ZXgsIGdldFByZWRlY2Vzc29yVmVydGljZXMpID0+IHtcbiAgICAgIGNvbnN0IHZpc2l0ZWRWZXJ0ZXhOYW1lID0gdmlzaXRlZFZlcnRleC5nZXROYW1lKCksXG4gICAgICAgICAgICBzb3VyY2VWZXJ0ZXhOYW1lID0gdmlzaXRlZFZlcnRleE5hbWU7IC8vL1xuXG4gICAgICBmaWx0ZXIoY3ljbGljRWRnZXMsIChjeWNsaWNFZGdlKSA9PiB7XG4gICAgICAgIGNvbnN0IG1hdGNoZXMgPSBjeWNsaWNFZGdlLm1hdGNoU291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKTtcblxuICAgICAgICBpZiAobWF0Y2hlcykge1xuICAgICAgICAgIGNvbnN0IHByZWRlY2Vzc29yVmVydGljZXMgPSBnZXRQcmVkZWNlc3NvclZlcnRpY2VzKCksXG4gICAgICAgICAgICAgICAgcGFydGlhbEN5Y2xlID0gIFBhcnRpYWxDeWNsZS5mcm9tQ3ljbGljRWRnZUFuZFByZWRlY2Vzc29yVmVydGljZXMoY3ljbGljRWRnZSwgcHJlZGVjZXNzb3JWZXJ0aWNlcyk7XG4gICAgICAgICAgXG4gICAgICAgICAgcGFydGlhbEN5Y2xlcy5wdXNoKHBhcnRpYWxDeWNsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBjeWNsaWNFZGdlc0xlbmd0aCA9IGN5Y2xpY0VkZ2VzLmxlbmd0aCxcbiAgICAgICAgICAgIHRlcm1pbmF0ZSA9IChjeWNsaWNFZGdlc0xlbmd0aCA9PT0gMCk7XG5cbiAgICAgIHJldHVybiB0ZXJtaW5hdGU7XG4gICAgfSk7XG5cbiAgICBwYXJ0aWFsQ3ljbGVzLnNvbWUoKHBhcnRpYWxDeWNsZSkgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0VmVydGV4TmFtZSA9IHBhcnRpYWxDeWNsZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICB0YXJnZXRWZXJ0ZXggPSB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldFZlcnRleEJ5VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgICAgZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKHRhcmdldFZlcnRleCwgKHZpc2l0ZWRWZXJ0ZXgsIGdldFByZWRlY2Vzc29yVmVydGljZXMpID0+IHtcbiAgICAgICAgY29uc3QgdmlzaXRlZFZlcnRleE5hbWUgPSB2aXNpdGVkVmVydGV4LmdldE5hbWUoKTtcblxuICAgICAgICBpZiAodmlzaXRlZFZlcnRleE5hbWUgPT09IHZlcnRleE5hbWUpIHtcbiAgICAgICAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRpY2VzID0gZ2V0UHJlZGVjZXNzb3JWZXJ0aWNlcygpLFxuICAgICAgICAgICAgICAgIHN1Y2Nlc3NvclZlcnRpY2VzID0gcHJlZGVjZXNzb3JWZXJ0aWNlcywgIC8vL1xuICAgICAgICAgICAgICAgIGN5Y2xlID0gQ3ljbGUuZnJvbVZlcnRleE5hbWVQYXJ0aWFsQ3ljbGVBbmRTdWNjZXNzb3JWZXJ0aWNlcyh2ZXJ0ZXhOYW1lLCBwYXJ0aWFsQ3ljbGUsIHN1Y2Nlc3NvclZlcnRpY2VzKTtcblxuICAgICAgICAgIGN5Y2xlcy5wdXNoKGN5Y2xlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN5Y2xlc0xlbmd0aCA9IGN5Y2xlcy5sZW5ndGgsXG4gICAgICAgICAgICAgIHRlcm1pbmF0ZSA9IChjeWNsZXNMZW5ndGggPiAwKTtcblxuICAgICAgICByZXR1cm4gdGVybWluYXRlO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCBjeWNsZXNMZW5ndGggPSBjeWNsZXMubGVuZ3RoO1xuICAgIFxuICAgIGlmIChjeWNsZXNMZW5ndGggPiAwKSB7XG4gICAgICBmaXJzdEN5Y2xlID0gZmlyc3QoY3ljbGVzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmlyc3RDeWNsZTtcbiAgfVxuXG4gIGdldEZpcnN0Q3ljbGUoKSB7XG4gICAgY29uc3QgZmlyc3RDeWNsaWNFZGdlID0gZmlyc3QodGhpcy5jeWNsaWNFZGdlcyksXG4gICAgICAgICAgY3ljbGljRWRnZSA9IGZpcnN0Q3ljbGljRWRnZSwgLy8vXG4gICAgICAgICAgc291cmNlVmVydGV4TmFtZSA9IGN5Y2xpY0VkZ2UuZ2V0U291cmNlVmVydGV4TmFtZSgpLFxuICAgICAgICAgIHZlcnRleE5hbWUgPSBzb3VyY2VWZXJ0ZXhOYW1lLCAgLy8vXG4gICAgICAgICAgZmlyc3RDeWNsZSA9IHRoaXMuZ2V0Rmlyc3RDeWNsZUJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKTtcblxuICAgIHJldHVybiBmaXJzdEN5Y2xlO1xuICB9XG5cbiAgZ2V0VmVydGV4TmFtZXMoKSB7IHJldHVybiB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldFZlcnRleE5hbWVzKCk7IH1cblxuICBnZXRPcmRlcmVkVmVydGV4TmFtZXMoKSB7IHJldHVybiB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldE9yZGVyZWRWZXJ0ZXhOYW1lcygpOyB9XG5cbiAgYXJlQ3ljbGVzUHJlc2VudCgpIHtcbiAgICBjb25zdCBjeWNsaWNFZGdlc0xlbmd0aCA9IHRoaXMuY3ljbGljRWRnZXMubGVuZ3RoLFxuICAgICAgICAgIGN5Y2xlc1ByZXNlbnQgPSAoY3ljbGljRWRnZXNMZW5ndGggPiAwKTtcblxuICAgIHJldHVybiBjeWNsZXNQcmVzZW50O1xuICB9XG5cbiAgYWRkVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpIHsgdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5hZGRWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSk7IH1cblxuICBhZGRWZXJ0aWNlc0J5VmVydGV4TmFtZXModmVydGV4TmFtZXMpIHtcbiAgICB2ZXJ0ZXhOYW1lcy5mb3JFYWNoKCh2ZXJ0ZXhOYW1lKSA9PiB0aGlzLmFkZFZlcnRleEJ5VmVydGV4TmFtZSh2ZXJ0ZXhOYW1lKSk7XG4gIH1cblxuICByZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSkge1xuICAgIHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGgucmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHZlcnRleE5hbWUpO1xuXG4gICAgdGhpcy5maWx0ZXJDeWNsaWNFZGdlcygpO1xuICB9XG5cbiAgcmVtb3ZlVmVydGljZXNCeVZlcnRleE5hbWVzKHZlcnRleE5hbWVzKSB7XG4gICAgdmVydGV4TmFtZXMuZm9yRWFjaCgodmVydGV4TmFtZSkgPT4gdGhpcy5yZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUodmVydGV4TmFtZSkpO1xuICB9XG5cbiAgYWRkRWRnZShlZGdlKSB7XG4gICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGguYWRkRWRnZShlZGdlKTtcbiAgICBcbiAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGN5Y2xpY0VkZ2VzSW5jbHVkZXNFZGdlID0gY2hlY2tFZGdlc0luY2x1ZGVzRWRnZShlZGdlLCB0aGlzLmN5Y2xpY0VkZ2VzKTtcblxuICAgICAgaWYgKCFjeWNsaWNFZGdlc0luY2x1ZGVzRWRnZSkge1xuICAgICAgICBjb25zdCBjeWNsaWNFZGdlID0gZWRnZTsgIC8vL1xuXG4gICAgICAgIHRoaXMuY3ljbGljRWRnZXMucHVzaChjeWNsaWNFZGdlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgXG4gIGFkZEVkZ2VzKGVkZ2VzKSB7XG4gICAgZWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4gdGhpcy5hZGRFZGdlKGVkZ2UpKTtcbiAgfVxuXG4gIHJlbW92ZUVkZ2UoZWRnZSwgcmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyA9IGZhbHNlKSB7XG4gICAgY29uc3QgY3ljbGljRWRnZXNJbmNsdWRlc0VkZ2UgPSBjaGVja0VkZ2VzSW5jbHVkZXNFZGdlKGVkZ2UsIHRoaXMuY3ljbGljRWRnZXMpLFxuICAgICAgICAgIGVkZ2VQcmVzZW50ID0gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5pc0VkZ2VQcmVzZW50KGVkZ2UpLFxuICAgICAgICAgIGVkZ2VDeWNsaWMgPSBjeWNsaWNFZGdlc0luY2x1ZGVzRWRnZTsgLy8vXG5cbiAgICBpZiAoZmFsc2UpIHtcbiAgICAgIC8vL1xuICAgIH0gZWxzZSBpZiAoZWRnZUN5Y2xpYykge1xuICAgICAgY29uc3QgY3ljbGljRWRnZSA9IGVkZ2U7ICAvLy9cblxuICAgICAgcmVtb3ZlRWRnZUZyb21FZGdlcyhjeWNsaWNFZGdlLCB0aGlzLmN5Y2xpY0VkZ2VzKTtcbiAgICB9IGVsc2UgaWYgKGVkZ2VQcmVzZW50KSB7XG4gICAgICB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLnJlbW92ZUVkZ2UoZWRnZSk7XG5cbiAgICAgIGlmIChyZW1vdmVTdHJhbmRlZFZlcnRpY2VzKSB7XG4gICAgICAgIGNvbnN0IHNvdXJjZVZlcnRleE5hbWUgPSBlZGdlLmdldFNvdXJjZVZlcnRleE5hbWUoKSxcbiAgICAgICAgICAgICAgdGFyZ2V0VmVydGV4TmFtZSA9IGVkZ2UuZ2V0VGFyZ2V0VmVydGV4TmFtZSgpLFxuICAgICAgICAgICAgICBzb3VyY2VWZXJ0ZXggPSB0aGlzLmRpcmVjdGVkQWN5Y2xpY0dyYXBoLmdldFZlcnRleEJ5VmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKSxcbiAgICAgICAgICAgICAgdGFyZ2V0VmVydGV4ID0gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSksXG4gICAgICAgICAgICAgIHNvdXJjZVZlcnRleFN0cmFuZGVkID0gc291cmNlVmVydGV4LmlzU3RyYW5kZWQoKSxcbiAgICAgICAgICAgICAgdGFyZ2V0VmVydGV4U3RyYW5kZWQgPSB0YXJnZXRWZXJ0ZXguaXNTdHJhbmRlZCgpO1xuXG4gICAgICAgIGlmIChzb3VyY2VWZXJ0ZXhTdHJhbmRlZCkge1xuICAgICAgICAgIHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGgucmVtb3ZlVmVydGV4QnlWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRhcmdldFZlcnRleFN0cmFuZGVkKSB7XG4gICAgICAgICAgdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5yZW1vdmVWZXJ0ZXhCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmZpbHRlckN5Y2xpY0VkZ2VzKCk7XG4gIH1cblxuICByZW1vdmVFZGdlcyhlZGdlcywgcmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyA9IGZhbHNlKSB7XG4gICAgZWRnZXMuZm9yRWFjaCgoZWRnZSkgPT4gdGhpcy5yZW1vdmVFZGdlKGVkZ2UsIHJlbW92ZVN0cmFuZGVkVmVydGljZXMpKTtcbiAgfVxuXG4gIGFkZEVkZ2VCeVZlcnRleE5hbWVzKHNvdXJjZVZlcnRleE5hbWUsIHRhcmdldFZlcnRleE5hbWUpIHtcbiAgICBjb25zdCBlZGdlID0gRWRnZS5mcm9tU291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICB0aGlzLmFkZEVkZ2UoZWRnZSk7XG4gIH1cblxuICByZW1vdmVFZGdlQnlWZXJ0ZXhOYW1lcyhzb3VyY2VWZXJ0ZXhOYW1lLCB0YXJnZXRWZXJ0ZXhOYW1lLCByZW1vdmVTdHJhbmRlZFZlcnRpY2VzID0gZmFsc2UpIHtcbiAgICBjb25zdCBlZGdlID0gRWRnZS5mcm9tU291cmNlVmVydGV4TmFtZUFuZFRhcmdldFZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSwgdGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICB0aGlzLnJlbW92ZUVkZ2UoZWRnZSwgcmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyk7XG4gIH1cblxuICByZW1vdmVFZGdlc0J5VGFyZ2V0VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lLCByZW1vdmVTdHJhbmRlZFZlcnRpY2VzID0gZmFsc2UpIHtcbiAgICBjb25zdCBjeWNsaWNFZGdlcyA9IGVkZ2VzQnlUYXJnZXRWZXJ0ZXhOYW1lKHRhcmdldFZlcnRleE5hbWUsIHRoaXMuY3ljbGljRWRnZXMpLFxuICAgICAgICAgIGVkZ2VzID0gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRFZGdlc0J5VGFyZ2V0VmVydGV4TmFtZSh0YXJnZXRWZXJ0ZXhOYW1lKTtcblxuICAgIHRoaXMucmVtb3ZlRWRnZXMoY3ljbGljRWRnZXMsIHJlbW92ZVN0cmFuZGVkVmVydGljZXMpO1xuXG4gICAgdGhpcy5yZW1vdmVFZGdlcyhlZGdlcywgcmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyk7XG4gIH1cblxuICByZW1vdmVFZGdlc0J5U291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lLCByZW1vdmVTdHJhbmRlZFZlcnRpY2VzID0gZmFsc2UpIHtcbiAgICBjb25zdCBjeWNsaWNFZGdlcyA9IGVkZ2VzQnlTb3VyY2VWZXJ0ZXhOYW1lKHNvdXJjZVZlcnRleE5hbWUsIHRoaXMuY3ljbGljRWRnZXMpLFxuICAgICAgICAgIGVkZ2VzID0gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5nZXRFZGdlc0J5U291cmNlVmVydGV4TmFtZShzb3VyY2VWZXJ0ZXhOYW1lKTtcblxuICAgIHRoaXMucmVtb3ZlRWRnZXMoY3ljbGljRWRnZXMsIHJlbW92ZVN0cmFuZGVkVmVydGljZXMpO1xuXG4gICAgdGhpcy5yZW1vdmVFZGdlcyhlZGdlcywgcmVtb3ZlU3RyYW5kZWRWZXJ0aWNlcyk7XG4gIH1cblxuICByZW1vdmVBbGxFZGdlc0FuZFZlcnRpY2VzKCkge1xuICAgIHRoaXMuZGlyZWN0ZWRBY3ljbGljR3JhcGggPSBEaXJlY3RlZEFjeWNsaWNHcmFwaC5mcm9tTm90aGluZygpO1xuXG4gICAgdGhpcy5jeWNsaWNFZGdlcyA9IFtdO1xuICB9XG5cbiAgZmlsdGVyQ3ljbGljRWRnZXMoKSB7XG4gICAgZmlsdGVyKHRoaXMuY3ljbGljRWRnZXMsIChjeWNsaWNFZGdlKSA9PiB7XG4gICAgICBjb25zdCBzb3VyY2VWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZS5nZXRTb3VyY2VWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICB0YXJnZXRWZXJ0ZXhOYW1lID0gY3ljbGljRWRnZS5nZXRUYXJnZXRWZXJ0ZXhOYW1lKCksXG4gICAgICAgICAgICBzb3VyY2VWZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUoc291cmNlVmVydGV4TmFtZSksXG4gICAgICAgICAgICB0YXJnZXRWZXJ0ZXhQcmVzZW50ID0gdGhpcy5pc1ZlcnRleFByZXNlbnRCeVZlcnRleE5hbWUodGFyZ2V0VmVydGV4TmFtZSk7XG5cbiAgICAgIGlmIChzb3VyY2VWZXJ0ZXhQcmVzZW50ICYmIHRhcmdldFZlcnRleFByZXNlbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBmaWx0ZXIodGhpcy5jeWNsaWNFZGdlcywgKGN5Y2xpY0VkZ2UpID0+IHtcbiAgICAgIGNvbnN0IGVkZ2UgPSBjeWNsaWNFZGdlLCAgLy8vXG4gICAgICAgICAgICBzdWNjZXNzID0gdGhpcy5kaXJlY3RlZEFjeWNsaWNHcmFwaC5hZGRFZGdlKGVkZ2UpO1xuXG4gICAgICBpZiAoIXN1Y2Nlc3MpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZnJvbU5vdGhpbmcoKSB7XG4gICAgY29uc3QgY3ljbGljRWRnZXMgPSBbXSxcbiAgICAgICAgICBkaXJlY3RlZEFjeWNsaWNHcmFwaCA9IERpcmVjdGVkQWN5Y2xpY0dyYXBoLmZyb21Ob3RoaW5nKCksXG4gICAgICAgICAgZGlyZWN0ZWRHcmFwaCA9IG5ldyBEaXJlY3RlZEdyYXBoKGN5Y2xpY0VkZ2VzLCBkaXJlY3RlZEFjeWNsaWNHcmFwaCk7XG4gICAgXG4gICAgcmV0dXJuIGRpcmVjdGVkR3JhcGg7ICAgIFxuICB9XG5cbiAgc3RhdGljIGZyb21WZXJ0ZXhMaXRlcmFscyh2ZXJ0ZXhMaXRlcmFscykge1xuICAgIGNvbnN0IHZlcnRleE5hbWVzID0gdmVydGV4TmFtZXNGcm9tVmVydGV4TGl0ZXJhbHModmVydGV4TGl0ZXJhbHMpLFxuICAgICAgICAgIGVkZ2VzID0gZWRnZXNGcm9tVmVydGV4TGl0ZXJhbHModmVydGV4TGl0ZXJhbHMpLFxuICAgICAgICAgIGRpcmVjdGVkR3JhcGggPSBEaXJlY3RlZEdyYXBoLmZyb21WZXJ0ZXhOYW1lc0FuZEVkZ2VzKHZlcnRleE5hbWVzLCBlZGdlcyk7XG5cbiAgICByZXR1cm4gZGlyZWN0ZWRHcmFwaDtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tVmVydGV4TmFtZXNBbmRFZGdlcyh2ZXJ0ZXhOYW1lcywgZWRnZXMpIHtcbiAgICBsZXQgZGlyZWN0ZWRHcmFwaDtcblxuICAgIGNvbnN0IGdyYXBoID0gR3JhcGguZnJvbVZlcnRleE5hbWVzQW5kRWRnZXModmVydGV4TmFtZXMsIGVkZ2VzKSxcbiAgICAgICAgICBjeWNsZXNQcmVzZW50ID0gZ3JhcGguYXJlQ3ljbGVzUHJlc2VudCgpO1xuXG4gICAgaWYgKGN5Y2xlc1ByZXNlbnQpIHtcbiAgICAgIGNvbnN0IGN5Y2xpY0VkZ2VzID0gW10sXG4gICAgICAgICAgICBkaXJlY3RlZEFjeWNsaWNHcmFwaCA9IERpcmVjdGVkQWN5Y2xpY0dyYXBoLmZyb21WZXJ0ZXhOYW1lcyh2ZXJ0ZXhOYW1lcyk7XG5cbiAgICAgIGRpcmVjdGVkR3JhcGggPSBuZXcgRGlyZWN0ZWRHcmFwaChjeWNsaWNFZGdlcywgZGlyZWN0ZWRBY3ljbGljR3JhcGgpO1xuXG4gICAgICBlZGdlcy5mb3JFYWNoKChlZGdlKSA9PiBkaXJlY3RlZEdyYXBoLmFkZEVkZ2UoZWRnZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBvcmRlcmVkVmVydGljZXMgPSBncmFwaC5nZXRPcmRlcmVkVmVydGljZXMoKSxcbiAgICAgICAgICAgIGN5Y2xpY0VkZ2VzID0gW10sXG4gICAgICAgICAgICBkaXJlY3RlZEFjeWNsaWNHcmFwaCA9IERpcmVjdGVkQWN5Y2xpY0dyYXBoLmZyb21PcmRlcmVkVmVydGljZXMob3JkZXJlZFZlcnRpY2VzKTtcblxuICAgICAgZGlyZWN0ZWRHcmFwaCA9IG5ldyBEaXJlY3RlZEdyYXBoKGN5Y2xpY0VkZ2VzLCBkaXJlY3RlZEFjeWNsaWNHcmFwaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGVkR3JhcGg7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJmaXJzdCIsImZpbHRlciIsIkRpcmVjdGVkR3JhcGgiLCJjeWNsaWNFZGdlcyIsImRpcmVjdGVkQWN5Y2xpY0dyYXBoIiwiZ2V0Q3ljbGljRWRnZXMiLCJnZXREaXJlY3RlZEFjeWNsaWNHcmFwaCIsImdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXNCeVZlcnRleE5hbWUiLCJ2ZXJ0ZXhOYW1lIiwiaW5jbHVkZUN5Y2xpY0VkZ2VzIiwiaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsImZvckVhY2giLCJjeWNsaWNFZGdlIiwiY3ljbGljRWRnZVRhcmdldFZlcnRleE5hbWUiLCJnZXRUYXJnZXRWZXJ0ZXhOYW1lIiwiY3ljbGljRWRnZVNvdXJjZVZlcnRleE5hbWUiLCJnZXRTb3VyY2VWZXJ0ZXhOYW1lIiwiaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lIiwicHVzaCIsImdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZXMiLCJpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lIiwiZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lc0J5VmVydGV4TmFtZSIsImdldFN1Y2Nlc3NvclZlcnRleE5hbWVzQnlWZXJ0ZXhOYW1lIiwiYXJlQ3ljbGVzUHJlc2VudEJ5VmVydGV4TmFtZSIsImN5Y2xlc1ByZXNlbnQiLCJ2ZXJ0ZXhQcmVzZW50IiwiaXNWZXJ0ZXhQcmVzZW50QnlWZXJ0ZXhOYW1lIiwiZmlyc3RDeWNsZSIsImdldEZpcnN0Q3ljbGVCeVZlcnRleE5hbWUiLCJ2ZXJ0ZXgiLCJnZXRWZXJ0ZXhCeVZlcnRleE5hbWUiLCJzbGljZSIsInBhcnRpYWxDeWNsZXMiLCJjeWNsZXMiLCJ2aXNpdGVkVmVydGV4IiwiZ2V0UHJlZGVjZXNzb3JWZXJ0aWNlcyIsInZpc2l0ZWRWZXJ0ZXhOYW1lIiwiZ2V0TmFtZSIsInNvdXJjZVZlcnRleE5hbWUiLCJtYXRjaGVzIiwibWF0Y2hTb3VyY2VWZXJ0ZXhOYW1lIiwicHJlZGVjZXNzb3JWZXJ0aWNlcyIsInBhcnRpYWxDeWNsZSIsImZyb21DeWNsaWNFZGdlQW5kUHJlZGVjZXNzb3JWZXJ0aWNlcyIsImN5Y2xpY0VkZ2VzTGVuZ3RoIiwibGVuZ3RoIiwidGVybWluYXRlIiwic29tZSIsInRhcmdldFZlcnRleE5hbWUiLCJ0YXJnZXRWZXJ0ZXgiLCJzdWNjZXNzb3JWZXJ0aWNlcyIsImN5Y2xlIiwiZnJvbVZlcnRleE5hbWVQYXJ0aWFsQ3ljbGVBbmRTdWNjZXNzb3JWZXJ0aWNlcyIsImN5Y2xlc0xlbmd0aCIsImdldEZpcnN0Q3ljbGUiLCJmaXJzdEN5Y2xpY0VkZ2UiLCJnZXRWZXJ0ZXhOYW1lcyIsImdldE9yZGVyZWRWZXJ0ZXhOYW1lcyIsImFyZUN5Y2xlc1ByZXNlbnQiLCJhZGRWZXJ0ZXhCeVZlcnRleE5hbWUiLCJhZGRWZXJ0aWNlc0J5VmVydGV4TmFtZXMiLCJ2ZXJ0ZXhOYW1lcyIsInJlbW92ZVZlcnRleEJ5VmVydGV4TmFtZSIsImZpbHRlckN5Y2xpY0VkZ2VzIiwicmVtb3ZlVmVydGljZXNCeVZlcnRleE5hbWVzIiwiYWRkRWRnZSIsImVkZ2UiLCJzdWNjZXNzIiwiY3ljbGljRWRnZXNJbmNsdWRlc0VkZ2UiLCJhZGRFZGdlcyIsImVkZ2VzIiwicmVtb3ZlRWRnZSIsInJlbW92ZVN0cmFuZGVkVmVydGljZXMiLCJlZGdlUHJlc2VudCIsImlzRWRnZVByZXNlbnQiLCJlZGdlQ3ljbGljIiwic291cmNlVmVydGV4Iiwic291cmNlVmVydGV4U3RyYW5kZWQiLCJpc1N0cmFuZGVkIiwidGFyZ2V0VmVydGV4U3RyYW5kZWQiLCJyZW1vdmVFZGdlcyIsImFkZEVkZ2VCeVZlcnRleE5hbWVzIiwiZnJvbVNvdXJjZVZlcnRleE5hbWVBbmRUYXJnZXRWZXJ0ZXhOYW1lIiwicmVtb3ZlRWRnZUJ5VmVydGV4TmFtZXMiLCJyZW1vdmVFZGdlc0J5VGFyZ2V0VmVydGV4TmFtZSIsImdldEVkZ2VzQnlUYXJnZXRWZXJ0ZXhOYW1lIiwicmVtb3ZlRWRnZXNCeVNvdXJjZVZlcnRleE5hbWUiLCJnZXRFZGdlc0J5U291cmNlVmVydGV4TmFtZSIsInJlbW92ZUFsbEVkZ2VzQW5kVmVydGljZXMiLCJmcm9tTm90aGluZyIsInNvdXJjZVZlcnRleFByZXNlbnQiLCJ0YXJnZXRWZXJ0ZXhQcmVzZW50IiwiZGlyZWN0ZWRHcmFwaCIsImZyb21WZXJ0ZXhMaXRlcmFscyIsInZlcnRleExpdGVyYWxzIiwiZnJvbVZlcnRleE5hbWVzQW5kRWRnZXMiLCJncmFwaCIsImZyb21WZXJ0ZXhOYW1lcyIsIm9yZGVyZWRWZXJ0aWNlcyIsImdldE9yZGVyZWRWZXJ0aWNlcyIsImZyb21PcmRlcmVkVmVydGljZXMiXSwibWFwcGluZ3MiOiJBQUFBLENBQVk7Ozs7O0FBRVUsR0FBWSxDQUFaLFVBQVk7QUFDSCxHQUFXLENBQVgsVUFBVztBQUNMLEdBQW9CLENBQXBCLGlCQUFvQjtBQUV4QyxHQUFRLENBQVIsS0FBUTtBQUNQLEdBQVMsQ0FBVCxNQUFTO0FBQ0YsR0FBZ0IsQ0FBaEIsYUFBZ0I7QUFFK0IsR0FBb0IsQ0FBcEIsT0FBb0I7QUFDMkMsR0FBa0IsQ0FBbEIsTUFBa0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFekosR0FBSyxDQUFHQSxLQUFLLEdBVmtCLFVBQVcsZ0JBVWxDQSxLQUFLLEVBQUVDLE1BQU0sR0FWVSxVQUFXLGdCQVUzQkEsTUFBTTtJQUVBQyxhQUFhLGlCQUFuQixRQUFRO2FBQUZBLGFBQWEsQ0FDcEJDLFdBQVcsRUFBRUMsb0JBQW9COzhCQUQxQkYsYUFBYTtRQUU5QixJQUFJLENBQUNDLFdBQVcsR0FBR0EsV0FBVztRQUU5QixJQUFJLENBQUNDLG9CQUFvQixHQUFHQSxv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
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-directed-graphs",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.19",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-directed-graphs",
|
|
7
7
|
"description": "Directed graphs comprised of directed acyclic graphs together with cycles.",
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
"url": "https://github.com/djalbat/occam-directed-graphs"
|
|
11
11
|
},
|
|
12
12
|
"dependencies": {
|
|
13
|
-
"necessary": "^
|
|
14
|
-
"occam-kahn": "^4.0.
|
|
15
|
-
"occam-pearce-kelly": "^4.0.
|
|
13
|
+
"necessary": "^10.0.5",
|
|
14
|
+
"occam-kahn": "^4.0.20",
|
|
15
|
+
"occam-pearce-kelly": "^4.0.17"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@swc/core": "^1.2.50",
|
package/src/directedGraph.js
CHANGED
|
@@ -158,6 +158,8 @@ export default class DirectedGraph {
|
|
|
158
158
|
return firstCycle;
|
|
159
159
|
}
|
|
160
160
|
|
|
161
|
+
getVertexNames() { return this.directedAcyclicGraph.getVertexNames(); }
|
|
162
|
+
|
|
161
163
|
getOrderedVertexNames() { return this.directedAcyclicGraph.getOrderedVertexNames(); }
|
|
162
164
|
|
|
163
165
|
areCyclesPresent() {
|