occam-directed-graphs 3.0.36 → 3.0.41
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -49
- package/lib/cycle.js +31 -14
- package/lib/directedGraph.js +215 -201
- package/lib/index.js +9 -1
- package/lib/utilities/index.js +40 -0
- package/lib/utilities/search.js +91 -0
- package/lib/utilities/vertex.js +11 -50
- package/lib/vertex.js +88 -251
- package/package.json +7 -8
- package/src/cycle.js +8 -28
- package/src/directedGraph.js +277 -198
- package/src/index.js +2 -0
- package/src/utilities/index.js +25 -0
- package/src/utilities/search.js +69 -0
- package/src/utilities/vertex.js +6 -61
- package/src/vertex.js +92 -261
- package/test/cirectedGraph.js +589 -0
- package/bin/main.js +0 -15
- package/lib/directedAcyclicGraph.js +0 -364
- package/lib/example.js +0 -21
- package/lib/partialCycle.js +0 -102
- package/lib/utilities/edge.js +0 -65
- package/src/directedAcyclicGraph.js +0 -422
- package/src/example.js +0 -22
- package/src/partialCycle.js +0 -69
- package/src/utilities/edge.js +0 -58
package/lib/vertex.js
CHANGED
|
@@ -8,7 +8,8 @@ Object.defineProperty(exports, "default", {
|
|
|
8
8
|
return Vertex;
|
|
9
9
|
}
|
|
10
10
|
});
|
|
11
|
-
var
|
|
11
|
+
var _necessary = require("necessary");
|
|
12
|
+
var _search = require("./utilities/search");
|
|
12
13
|
function _class_call_check(instance, Constructor) {
|
|
13
14
|
if (!(instance instanceof Constructor)) {
|
|
14
15
|
throw new TypeError("Cannot call a class as a function");
|
|
@@ -28,14 +29,14 @@ function _create_class(Constructor, protoProps, staticProps) {
|
|
|
28
29
|
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
29
30
|
return Constructor;
|
|
30
31
|
}
|
|
32
|
+
var last = _necessary.arrayUtilities.last;
|
|
31
33
|
var Vertex = /*#__PURE__*/ function() {
|
|
32
|
-
function Vertex(name, index,
|
|
34
|
+
function Vertex(name, index, immediateSuccessorVertexes, immediatePredecessorVertexes) {
|
|
33
35
|
_class_call_check(this, Vertex);
|
|
34
36
|
this.name = name;
|
|
35
37
|
this.index = index;
|
|
36
|
-
this.
|
|
37
|
-
this.
|
|
38
|
-
this.immediateSuccessorVertices = immediateSuccessorVertices;
|
|
38
|
+
this.immediateSuccessorVertexes = immediateSuccessorVertexes;
|
|
39
|
+
this.immediatePredecessorVertexes = immediatePredecessorVertexes;
|
|
39
40
|
}
|
|
40
41
|
_create_class(Vertex, [
|
|
41
42
|
{
|
|
@@ -51,173 +52,83 @@ var Vertex = /*#__PURE__*/ function() {
|
|
|
51
52
|
}
|
|
52
53
|
},
|
|
53
54
|
{
|
|
54
|
-
key: "
|
|
55
|
-
value: function
|
|
56
|
-
return this.
|
|
55
|
+
key: "getImmediateSuccessorVertexes",
|
|
56
|
+
value: function getImmediateSuccessorVertexes() {
|
|
57
|
+
return this.immediateSuccessorVertexes;
|
|
57
58
|
}
|
|
58
59
|
},
|
|
59
60
|
{
|
|
60
|
-
key: "
|
|
61
|
-
value: function
|
|
62
|
-
|
|
63
|
-
return stranded;
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
{
|
|
67
|
-
key: "getImmediatePredecessorVertexNames",
|
|
68
|
-
value: function getImmediatePredecessorVertexNames() {
|
|
69
|
-
var immediatePredecessorVertexNames = this.immediatePredecessorVertices.map(function(immediatePredecessorVertex) {
|
|
70
|
-
var immediatePredecessorVertexName = immediatePredecessorVertex.getName();
|
|
71
|
-
return immediatePredecessorVertexName;
|
|
72
|
-
});
|
|
73
|
-
return immediatePredecessorVertexNames;
|
|
74
|
-
}
|
|
75
|
-
},
|
|
76
|
-
{
|
|
77
|
-
key: "getImmediateSuccessorVertexNames",
|
|
78
|
-
value: function getImmediateSuccessorVertexNames() {
|
|
79
|
-
var immediateSuccessorVertexNames = this.immediateSuccessorVertices.map(function(immediateSuccessorVertex) {
|
|
80
|
-
var immediateSuccessorVertexName = immediateSuccessorVertex.getName();
|
|
81
|
-
return immediateSuccessorVertexName;
|
|
82
|
-
});
|
|
83
|
-
return immediateSuccessorVertexNames;
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
{
|
|
87
|
-
key: "getImmediatePredecessorVertices",
|
|
88
|
-
value: function getImmediatePredecessorVertices() {
|
|
89
|
-
return this.immediatePredecessorVertices;
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
key: "getImmediateSuccessorVertices",
|
|
94
|
-
value: function getImmediateSuccessorVertices() {
|
|
95
|
-
return this.immediateSuccessorVertices;
|
|
61
|
+
key: "getImmediatePredecessorVertexes",
|
|
62
|
+
value: function getImmediatePredecessorVertexes() {
|
|
63
|
+
return this.immediatePredecessorVertexes;
|
|
96
64
|
}
|
|
97
65
|
},
|
|
98
66
|
{
|
|
99
|
-
key: "
|
|
100
|
-
value: function
|
|
101
|
-
var
|
|
102
|
-
|
|
103
|
-
var predecessorVertex = immediatePredecessorVertex, predecessorVertexName = predecessorVertex.getName();
|
|
104
|
-
predecessorVertexMap[predecessorVertexName] = predecessorVertex;
|
|
105
|
-
predecessorVertex.getPredecessorVertexMap(predecessorVertexMap);
|
|
106
|
-
});
|
|
107
|
-
return predecessorVertexMap;
|
|
108
|
-
}
|
|
109
|
-
},
|
|
110
|
-
{
|
|
111
|
-
key: "getSuccessorVertexMap",
|
|
112
|
-
value: function getSuccessorVertexMap() {
|
|
113
|
-
var successorVertexMap = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : {};
|
|
114
|
-
this.forEachImmediateSuccessorVertex(function(immediateSuccessorVertex) {
|
|
115
|
-
var successorVertex = immediateSuccessorVertex, successorVertexName = successorVertex.getName();
|
|
116
|
-
successorVertexMap[successorVertexName] = successorVertex;
|
|
117
|
-
successorVertex.getSuccessorVertexMap(successorVertexMap);
|
|
118
|
-
});
|
|
119
|
-
return successorVertexMap;
|
|
120
|
-
}
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
key: "getPredecessorVertexNames",
|
|
124
|
-
value: function getPredecessorVertexNames() {
|
|
125
|
-
var predecessorVertices = this.getPredecessorVertices(), predecessorVertexNames = predecessorVertices.map(function(predecessorVertex) {
|
|
126
|
-
var predecessorVertexName = predecessorVertex.getName();
|
|
127
|
-
return predecessorVertexName;
|
|
128
|
-
});
|
|
129
|
-
return predecessorVertexNames;
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
key: "getSuccessorVertexNames",
|
|
134
|
-
value: function getSuccessorVertexNames() {
|
|
135
|
-
var successorVertices = this.getSuccessorVertices(), successorVertexNames = successorVertices.map(function(successorVertex) {
|
|
136
|
-
var successorVertexName = successorVertex.getName();
|
|
137
|
-
return successorVertexName;
|
|
138
|
-
});
|
|
139
|
-
return successorVertexNames;
|
|
67
|
+
key: "isStranded",
|
|
68
|
+
value: function isStranded() {
|
|
69
|
+
var immediateSuccessorVertexesLength = this.immediateSuccessorVertexes.length, immediatePredecessorVertexesLength = this.immediatePredecessorVertexes.length, stranded = immediateSuccessorVertexesLength === 0 && immediatePredecessorVertexesLength === 0;
|
|
70
|
+
return stranded;
|
|
140
71
|
}
|
|
141
72
|
},
|
|
142
73
|
{
|
|
143
|
-
key: "
|
|
144
|
-
value: function
|
|
145
|
-
var
|
|
146
|
-
|
|
147
|
-
return predecessorVertex;
|
|
148
|
-
});
|
|
149
|
-
return predecessorVertices;
|
|
74
|
+
key: "isVertexReachable",
|
|
75
|
+
value: function isVertexReachable(vertex) {
|
|
76
|
+
var forwardsVisitedVertices = this.retrieveForwardsVisitedVertexes(vertex), lastForwardsVisitedVertex = last(forwardsVisitedVertices), vertexReachable = vertex === lastForwardsVisitedVertex;
|
|
77
|
+
return vertexReachable;
|
|
150
78
|
}
|
|
151
79
|
},
|
|
152
80
|
{
|
|
153
|
-
key: "
|
|
154
|
-
value: function
|
|
155
|
-
var
|
|
156
|
-
|
|
157
|
-
return successorVertex;
|
|
158
|
-
});
|
|
159
|
-
return successorVertices;
|
|
81
|
+
key: "isEdgePresentBySourceVertex",
|
|
82
|
+
value: function isEdgePresentBySourceVertex(sourceVertex) {
|
|
83
|
+
var sourceVertexImmediatePredecessorVertex = this.isVertexImmediatePredecessorVertex(sourceVertex), edgePresent = sourceVertexImmediatePredecessorVertex; ///
|
|
84
|
+
return edgePresent;
|
|
160
85
|
}
|
|
161
86
|
},
|
|
162
87
|
{
|
|
163
|
-
key: "
|
|
164
|
-
value: function
|
|
165
|
-
var
|
|
166
|
-
|
|
167
|
-
var orderedPredecessorVertices = predecessorVertices, orderedPredecessorVertexNames = (0, _vertex.vertexNamesFromVertices)(orderedPredecessorVertices);
|
|
168
|
-
return orderedPredecessorVertexNames;
|
|
88
|
+
key: "isEdgePresentByTargetVertex",
|
|
89
|
+
value: function isEdgePresentByTargetVertex(targetVertex) {
|
|
90
|
+
var targetVertexImmediateSuccessorVertex = this.isVertexImmediateSuccessorVertex(targetVertex), edgePresent = targetVertexImmediateSuccessorVertex; ///
|
|
91
|
+
return edgePresent;
|
|
169
92
|
}
|
|
170
93
|
},
|
|
171
94
|
{
|
|
172
|
-
key: "
|
|
173
|
-
value: function
|
|
174
|
-
var
|
|
175
|
-
|
|
95
|
+
key: "retrieveForwardsVisitedVertexes",
|
|
96
|
+
value: function retrieveForwardsVisitedVertexes() {
|
|
97
|
+
var vertex = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null;
|
|
98
|
+
var vertexA = vertex, visitedVertexes = this.forwardsDepthFirstSearch(function(vertex) {
|
|
99
|
+
var vertexB = vertex, terminate = vertexA === vertexB;
|
|
176
100
|
if (terminate) {
|
|
177
101
|
return true;
|
|
178
102
|
}
|
|
179
|
-
});
|
|
180
|
-
return
|
|
103
|
+
}), forwardsVisitedVertexes = visitedVertexes; ///
|
|
104
|
+
return forwardsVisitedVertexes;
|
|
181
105
|
}
|
|
182
106
|
},
|
|
183
107
|
{
|
|
184
|
-
key: "
|
|
185
|
-
value: function
|
|
186
|
-
var
|
|
187
|
-
|
|
108
|
+
key: "retrieveBackwardsVisitedVertexes",
|
|
109
|
+
value: function retrieveBackwardsVisitedVertexes() {
|
|
110
|
+
var vertex = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : null;
|
|
111
|
+
var vertexA = vertex, visitedVertexes = this.backwardsDepthFirstSearch(function(vertex) {
|
|
112
|
+
var vertexB = vertex, terminate = vertexA === vertexB;
|
|
188
113
|
if (terminate) {
|
|
189
114
|
return true;
|
|
190
115
|
}
|
|
191
|
-
});
|
|
192
|
-
return
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
{
|
|
196
|
-
key: "isVertexImmediatePredecessorVertex",
|
|
197
|
-
value: function isVertexImmediatePredecessorVertex(vertex) {
|
|
198
|
-
var vertexImmediatePredecessorVertex = this.immediatePredecessorVertices.includes(vertex);
|
|
199
|
-
return vertexImmediatePredecessorVertex;
|
|
116
|
+
}), backwardsVisitedVertexes = visitedVertexes; ///
|
|
117
|
+
return backwardsVisitedVertexes;
|
|
200
118
|
}
|
|
201
119
|
},
|
|
202
120
|
{
|
|
203
121
|
key: "isVertexImmediateSuccessorVertex",
|
|
204
122
|
value: function isVertexImmediateSuccessorVertex(vertex) {
|
|
205
|
-
var vertexImmediateSuccessorVertex = this.
|
|
123
|
+
var vertexImmediateSuccessorVertex = this.immediateSuccessorVertexes.includes(vertex);
|
|
206
124
|
return vertexImmediateSuccessorVertex;
|
|
207
125
|
}
|
|
208
126
|
},
|
|
209
127
|
{
|
|
210
|
-
key: "
|
|
211
|
-
value: function
|
|
212
|
-
var
|
|
213
|
-
return
|
|
214
|
-
}
|
|
215
|
-
},
|
|
216
|
-
{
|
|
217
|
-
key: "isEdgePresentByTargetVertex",
|
|
218
|
-
value: function isEdgePresentByTargetVertex(targetVertex) {
|
|
219
|
-
var targetVertexImmediateSuccessorVertex = this.isVertexImmediateSuccessorVertex(targetVertex), edgePresent = targetVertexImmediateSuccessorVertex; ///
|
|
220
|
-
return edgePresent;
|
|
128
|
+
key: "isVertexImmediatePredecessorVertex",
|
|
129
|
+
value: function isVertexImmediatePredecessorVertex(vertex) {
|
|
130
|
+
var vertexImmediatePredecessorVertex = this.immediatePredecessorVertexes.includes(vertex);
|
|
131
|
+
return vertexImmediatePredecessorVertex;
|
|
221
132
|
}
|
|
222
133
|
},
|
|
223
134
|
{
|
|
@@ -233,168 +144,94 @@ var Vertex = /*#__PURE__*/ function() {
|
|
|
233
144
|
}
|
|
234
145
|
},
|
|
235
146
|
{
|
|
236
|
-
key: "
|
|
237
|
-
value: function
|
|
238
|
-
this.
|
|
147
|
+
key: "setImmediateSuccessorVertexes",
|
|
148
|
+
value: function setImmediateSuccessorVertexes(immediateSuccessorVertexes) {
|
|
149
|
+
this.immediateSuccessorVertexes = immediateSuccessorVertexes;
|
|
239
150
|
}
|
|
240
151
|
},
|
|
241
152
|
{
|
|
242
|
-
key: "
|
|
243
|
-
value: function
|
|
244
|
-
this.
|
|
153
|
+
key: "setImmediatePredecessorVertexes",
|
|
154
|
+
value: function setImmediatePredecessorVertexes(immediatePredecessorVertexes) {
|
|
155
|
+
this.immediatePredecessorVertexes = immediatePredecessorVertexes;
|
|
245
156
|
}
|
|
246
157
|
},
|
|
247
158
|
{
|
|
248
|
-
key: "
|
|
249
|
-
value: function
|
|
250
|
-
|
|
251
|
-
this.immediatePredecessorVertices.splice(start, deleteCount);
|
|
252
|
-
}
|
|
253
|
-
},
|
|
254
|
-
{
|
|
255
|
-
key: "removeImmediateSuccessorVertex",
|
|
256
|
-
value: function removeImmediateSuccessorVertex(immediateSuccessorVertex) {
|
|
257
|
-
var index = this.immediateSuccessorVertices.indexOf(immediateSuccessorVertex), start = index, deleteCount = 1;
|
|
258
|
-
this.immediateSuccessorVertices.splice(start, deleteCount);
|
|
159
|
+
key: "decrementIndex",
|
|
160
|
+
value: function decrementIndex() {
|
|
161
|
+
this.index--;
|
|
259
162
|
}
|
|
260
163
|
},
|
|
261
164
|
{
|
|
262
|
-
key: "
|
|
263
|
-
value: function
|
|
264
|
-
|
|
265
|
-
this.immediatePredecessorVertices.forEach(function(immediatePredecessorVertex) {
|
|
266
|
-
return immediatePredecessorVertex.removeImmediateSuccessorVertex(immediateSuccessorVertex);
|
|
267
|
-
});
|
|
268
|
-
this.immediatePredecessorVertices = [];
|
|
165
|
+
key: "addImmediateSuccessorVertex",
|
|
166
|
+
value: function addImmediateSuccessorVertex(immediateSuccessorVertex) {
|
|
167
|
+
this.immediateSuccessorVertexes.push(immediateSuccessorVertex);
|
|
269
168
|
}
|
|
270
169
|
},
|
|
271
170
|
{
|
|
272
|
-
key: "
|
|
273
|
-
value: function
|
|
274
|
-
|
|
275
|
-
this.immediateSuccessorVertices.forEach(function(immediateSuccessorVertex) {
|
|
276
|
-
return immediateSuccessorVertex.removeImmediateSuccessorVertex(immediatePredecessorVertex);
|
|
277
|
-
});
|
|
278
|
-
this.immediateSuccessorVertices = [];
|
|
171
|
+
key: "addImmediatePredecessorVertex",
|
|
172
|
+
value: function addImmediatePredecessorVertex(immediatePredecessorVertex) {
|
|
173
|
+
this.immediatePredecessorVertexes.push(immediatePredecessorVertex);
|
|
279
174
|
}
|
|
280
175
|
},
|
|
281
176
|
{
|
|
282
|
-
key: "
|
|
283
|
-
value: function
|
|
284
|
-
this.
|
|
177
|
+
key: "removeImmediateSuccessorVertex",
|
|
178
|
+
value: function removeImmediateSuccessorVertex(immediateSuccessorVertex) {
|
|
179
|
+
var index = this.immediateSuccessorVertexes.indexOf(immediateSuccessorVertex), start = index, deleteCount = 1;
|
|
180
|
+
this.immediateSuccessorVertexes.splice(start, deleteCount);
|
|
285
181
|
}
|
|
286
182
|
},
|
|
287
183
|
{
|
|
288
|
-
key: "
|
|
289
|
-
value: function
|
|
290
|
-
this.
|
|
184
|
+
key: "removeImmediatePredecessorVertex",
|
|
185
|
+
value: function removeImmediatePredecessorVertex(immediatePredecessorVertex) {
|
|
186
|
+
var index = this.immediatePredecessorVertexes.indexOf(immediatePredecessorVertex), start = index, deleteCount = 1;
|
|
187
|
+
this.immediatePredecessorVertexes.splice(start, deleteCount);
|
|
291
188
|
}
|
|
292
189
|
},
|
|
293
190
|
{
|
|
294
191
|
key: "forwardsDepthFirstSearch",
|
|
295
192
|
value: function forwardsDepthFirstSearch(callback) {
|
|
296
|
-
var
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
visitedVertices.push(visitedVertex);
|
|
300
|
-
return terminate;
|
|
301
|
-
});
|
|
302
|
-
visitedVertices.forEach(function(visitedVertex) {
|
|
303
|
-
return visitedVertex.resetVisited();
|
|
304
|
-
});
|
|
305
|
-
return visitedVertices;
|
|
193
|
+
var vertex = this, visitedVertexes = [];
|
|
194
|
+
(0, _search.forwardsDepthFirstSearch)(vertex, callback, visitedVertexes);
|
|
195
|
+
return visitedVertexes;
|
|
306
196
|
}
|
|
307
197
|
},
|
|
308
198
|
{
|
|
309
199
|
key: "backwardsDepthFirstSearch",
|
|
310
200
|
value: function backwardsDepthFirstSearch(callback) {
|
|
311
|
-
var
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
visitedVertices.push(visitedVertex);
|
|
315
|
-
return terminate;
|
|
316
|
-
});
|
|
317
|
-
visitedVertices.forEach(function(visitedVertex) {
|
|
318
|
-
return visitedVertex.resetVisited();
|
|
319
|
-
});
|
|
320
|
-
return visitedVertices;
|
|
201
|
+
var vertex = this, visitedVertexes = [];
|
|
202
|
+
(0, _search.backwardsDepthFirstSearch)(vertex, callback, visitedVertexes);
|
|
203
|
+
return visitedVertexes;
|
|
321
204
|
}
|
|
322
205
|
},
|
|
323
206
|
{
|
|
324
|
-
key: "
|
|
325
|
-
value: function
|
|
326
|
-
|
|
327
|
-
if (this.visited === false) {
|
|
328
|
-
this.visited = true;
|
|
329
|
-
var visitedVertex = this; ///
|
|
330
|
-
terminate = callback(visitedVertex);
|
|
331
|
-
if (terminate !== true) {
|
|
332
|
-
visitedVertex.someImmediateSuccessorVertex(function(immediateSuccessorVertex) {
|
|
333
|
-
terminate = immediateSuccessorVertex.retrieveForwardsVisitedVertices(callback);
|
|
334
|
-
if (terminate) {
|
|
335
|
-
return true;
|
|
336
|
-
}
|
|
337
|
-
});
|
|
338
|
-
}
|
|
339
|
-
}
|
|
340
|
-
return terminate;
|
|
341
|
-
}
|
|
342
|
-
},
|
|
343
|
-
{
|
|
344
|
-
key: "retrieveBackwardsVisitedVertices",
|
|
345
|
-
value: function retrieveBackwardsVisitedVertices(callback) {
|
|
346
|
-
var terminate = false;
|
|
347
|
-
if (this.visited === false) {
|
|
348
|
-
this.visited = true;
|
|
349
|
-
var visitedVertex = this; ///
|
|
350
|
-
terminate = callback(visitedVertex);
|
|
351
|
-
if (terminate !== true) {
|
|
352
|
-
visitedVertex.someImmediatePredecessorVertex(function(immediatePredecessorVertex) {
|
|
353
|
-
terminate = immediatePredecessorVertex.retrieveBackwardsVisitedVertices(callback);
|
|
354
|
-
if (terminate) {
|
|
355
|
-
return true;
|
|
356
|
-
}
|
|
357
|
-
});
|
|
358
|
-
}
|
|
359
|
-
}
|
|
360
|
-
return terminate;
|
|
361
|
-
}
|
|
362
|
-
},
|
|
363
|
-
{
|
|
364
|
-
key: "forEachImmediatePredecessorVertex",
|
|
365
|
-
value: function forEachImmediatePredecessorVertex(callback) {
|
|
366
|
-
this.immediatePredecessorVertices.forEach(callback);
|
|
367
|
-
}
|
|
368
|
-
},
|
|
369
|
-
{
|
|
370
|
-
key: "forEachImmediateSuccessorVertex",
|
|
371
|
-
value: function forEachImmediateSuccessorVertex(callback) {
|
|
372
|
-
this.immediateSuccessorVertices.forEach(callback);
|
|
207
|
+
key: "someImmediateSuccessorVertex",
|
|
208
|
+
value: function someImmediateSuccessorVertex(callback) {
|
|
209
|
+
return this.immediateSuccessorVertexes.some(callback);
|
|
373
210
|
}
|
|
374
211
|
},
|
|
375
212
|
{
|
|
376
213
|
key: "someImmediatePredecessorVertex",
|
|
377
214
|
value: function someImmediatePredecessorVertex(callback) {
|
|
378
|
-
this.
|
|
215
|
+
return this.immediatePredecessorVertexes.some(callback);
|
|
379
216
|
}
|
|
380
217
|
},
|
|
381
218
|
{
|
|
382
|
-
key: "
|
|
383
|
-
value: function
|
|
384
|
-
this.
|
|
219
|
+
key: "forEachImmediateSuccessorVertex",
|
|
220
|
+
value: function forEachImmediateSuccessorVertex(callback) {
|
|
221
|
+
this.immediateSuccessorVertexes.forEach(callback);
|
|
385
222
|
}
|
|
386
223
|
},
|
|
387
224
|
{
|
|
388
|
-
key: "
|
|
389
|
-
value: function
|
|
390
|
-
this.
|
|
225
|
+
key: "forEachImmediatePredecessorVertex",
|
|
226
|
+
value: function forEachImmediatePredecessorVertex(callback) {
|
|
227
|
+
this.immediatePredecessorVertexes.forEach(callback);
|
|
391
228
|
}
|
|
392
229
|
}
|
|
393
230
|
], [
|
|
394
231
|
{
|
|
395
232
|
key: "fromNameAndIndex",
|
|
396
233
|
value: function fromNameAndIndex(name, index) {
|
|
397
|
-
var
|
|
234
|
+
var immediateSuccessorVertexes = [], immediatePredecessorVertexes = [], dependencyVertex = new Vertex(name, index, immediateSuccessorVertexes, immediatePredecessorVertexes);
|
|
398
235
|
return dependencyVertex;
|
|
399
236
|
}
|
|
400
237
|
}
|
|
@@ -402,4 +239,4 @@ var Vertex = /*#__PURE__*/ function() {
|
|
|
402
239
|
return Vertex;
|
|
403
240
|
}();
|
|
404
241
|
|
|
405
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJ0ZXguanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IHZlcnRleE5hbWVzRnJvbVZlcnRpY2VzLCBvcmRlclZlcnRpY2VzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnRleFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0ZXgge1xuICBjb25zdHJ1Y3RvcihuYW1lLCBpbmRleCwgdmlzaXRlZCwgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcywgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMpIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgICB0aGlzLnZpc2l0ZWQgPSB2aXNpdGVkO1xuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcyA9IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXM7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcyA9IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBpc1Zpc2l0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmlzaXRlZDtcbiAgfVxuXG4gIGlzU3RyYW5kZWQoKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlc0xlbmd0aCA9IHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcy5sZW5ndGgsXG4gICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXNMZW5ndGggPSB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzLmxlbmd0aCxcbiAgICAgICAgICBzdHJhbmRlZCA9ICgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlc0xlbmd0aCA9PT0gMCkgJiYgKGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzTGVuZ3RoID09PSAwKSk7XG5cbiAgICByZXR1cm4gc3RyYW5kZWQ7XG4gIH1cblxuICBnZXRJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzKCkge1xuICAgIGNvbnN0IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMgPSB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMubWFwKChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCkgPT4ge1xuICAgICAgY29uc3QgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXguZ2V0TmFtZSgpO1xuXG4gICAgICByZXR1cm4gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cblxuICBnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMubWFwKChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWUgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXguZ2V0TmFtZSgpO1xuXG4gICAgICByZXR1cm4gaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZTtcbiAgICB9KTtcblxuICAgIHJldHVybiBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzKCkge1xuICAgIHJldHVybiB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzO1xuICB9XG5cbiAgZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhNYXAocHJlZGVjZXNzb3JWZXJ0ZXhNYXAgPSB7fSkge1xuICAgIHRoaXMuZm9yRWFjaEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCkgPT4ge1xuICAgICAgY29uc3QgcHJlZGVjZXNzb3JWZXJ0ZXggPSBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCwgLy8vXG4gICAgICAgICAgICBwcmVkZWNlc3NvclZlcnRleE5hbWUgPSBwcmVkZWNlc3NvclZlcnRleC5nZXROYW1lKCk7XG5cbiAgICAgIHByZWRlY2Vzc29yVmVydGV4TWFwW3ByZWRlY2Vzc29yVmVydGV4TmFtZV0gPSBwcmVkZWNlc3NvclZlcnRleDtcblxuICAgICAgcHJlZGVjZXNzb3JWZXJ0ZXguZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhNYXAocHJlZGVjZXNzb3JWZXJ0ZXhNYXApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4TWFwO1xuICB9XG5cbiAgZ2V0U3VjY2Vzc29yVmVydGV4TWFwKHN1Y2Nlc3NvclZlcnRleE1hcCA9IHt9KSB7XG4gICAgdGhpcy5mb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IHN1Y2Nlc3NvclZlcnRleCA9IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCwgLy8vXG4gICAgICAgICAgICBzdWNjZXNzb3JWZXJ0ZXhOYW1lID0gc3VjY2Vzc29yVmVydGV4LmdldE5hbWUoKTtcblxuICAgICAgc3VjY2Vzc29yVmVydGV4TWFwW3N1Y2Nlc3NvclZlcnRleE5hbWVdID0gc3VjY2Vzc29yVmVydGV4O1xuXG4gICAgICBzdWNjZXNzb3JWZXJ0ZXguZ2V0U3VjY2Vzc29yVmVydGV4TWFwKHN1Y2Nlc3NvclZlcnRleE1hcCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gc3VjY2Vzc29yVmVydGV4TWFwO1xuICB9XG5cbiAgZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRpY2VzID0gdGhpcy5nZXRQcmVkZWNlc3NvclZlcnRpY2VzKCksXG4gICAgICAgICAgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyA9IHByZWRlY2Vzc29yVmVydGljZXMubWFwKChwcmVkZWNlc3NvclZlcnRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lID0gcHJlZGVjZXNzb3JWZXJ0ZXguZ2V0TmFtZSgpO1xuXG4gICAgICAgICAgICByZXR1cm4gcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lO1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cblxuICBnZXRTdWNjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBzdWNjZXNzb3JWZXJ0aWNlcyA9IHRoaXMuZ2V0U3VjY2Vzc29yVmVydGljZXMoKSxcbiAgICAgICAgICBzdWNjZXNzb3JWZXJ0ZXhOYW1lcyA9IHN1Y2Nlc3NvclZlcnRpY2VzLm1hcCgoc3VjY2Vzc29yVmVydGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdWNjZXNzb3JWZXJ0ZXhOYW1lID0gc3VjY2Vzc29yVmVydGV4LmdldE5hbWUoKTtcblxuICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3NvclZlcnRleE5hbWU7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gc3VjY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cblxuICBnZXRQcmVkZWNlc3NvclZlcnRpY2VzKCkge1xuICAgIGNvbnN0IHByZWRlY2Vzc29yVmVydGV4TWFwID0gdGhpcy5nZXRQcmVkZWNlc3NvclZlcnRleE1hcCgpLFxuICAgICAgICAgIHByZWRlY2Vzc29yVmVydGV4TmFtZXMgPSBPYmplY3Qua2V5cyhwcmVkZWNlc3NvclZlcnRleE1hcCksXG4gICAgICAgICAgcHJlZGVjZXNzb3JWZXJ0aWNlcyA9IHByZWRlY2Vzc29yVmVydGV4TmFtZXMubWFwKChwcmVkZWNlc3NvclZlcnRleE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByZWRlY2Vzc29yVmVydGV4ID0gcHJlZGVjZXNzb3JWZXJ0ZXhNYXBbcHJlZGVjZXNzb3JWZXJ0ZXhOYW1lXTtcblxuICAgICAgICAgICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGV4O1xuICAgICAgICAgIH0pO1xuXG4gICAgcmV0dXJuIHByZWRlY2Vzc29yVmVydGljZXM7XG4gIH1cblxuICBnZXRTdWNjZXNzb3JWZXJ0aWNlcygpIHtcbiAgICBjb25zdCBzdWNjZXNzb3JWZXJ0ZXhNYXAgPSB0aGlzLmdldFN1Y2Nlc3NvclZlcnRleE1hcCgpLFxuICAgICAgICAgIHN1Y2Nlc3NvclZlcnRleE5hbWVzID0gT2JqZWN0LmtleXMoc3VjY2Vzc29yVmVydGV4TWFwKSxcbiAgICAgICAgICBzdWNjZXNzb3JWZXJ0aWNlcyA9IHN1Y2Nlc3NvclZlcnRleE5hbWVzLm1hcCgoc3VjY2Vzc29yVmVydGV4TmFtZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3VjY2Vzc29yVmVydGV4ID0gc3VjY2Vzc29yVmVydGV4TWFwW3N1Y2Nlc3NvclZlcnRleE5hbWVdO1xuICBcbiAgICAgICAgICAgIHJldHVybiBzdWNjZXNzb3JWZXJ0ZXg7XG4gICAgICAgICAgfSk7XG5cbiAgICByZXR1cm4gc3VjY2Vzc29yVmVydGljZXM7XG4gIH1cblxuICBnZXRPcmRlcmVkUHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcygpIHtcbiAgICBjb25zdCBwcmVkZWNlc3NvclZlcnRpY2VzID0gdGhpcy5nZXRQcmVkZWNlc3NvclZlcnRpY2VzKCk7XG5cbiAgICBvcmRlclZlcnRpY2VzKHByZWRlY2Vzc29yVmVydGljZXMpO1xuXG4gICAgY29uc3Qgb3JkZXJlZFByZWRlY2Vzc29yVmVydGljZXMgPSBwcmVkZWNlc3NvclZlcnRpY2VzLCAgLy8vXG4gICAgICAgICAgb3JkZXJlZFByZWRlY2Vzc29yVmVydGV4TmFtZXMgPSB2ZXJ0ZXhOYW1lc0Zyb21WZXJ0aWNlcyhvcmRlcmVkUHJlZGVjZXNzb3JWZXJ0aWNlcyk7XG5cbiAgICByZXR1cm4gb3JkZXJlZFByZWRlY2Vzc29yVmVydGV4TmFtZXM7XG4gIH1cbiAgXG4gIHJldHJpZXZlRm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzKHNvdXJjZVZlcnRleCkge1xuICAgIGNvbnN0IGZvcndhcmRzQWZmZWN0ZWRWZXJ0aWNlcyA9IHRoaXMuZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKCh2aXNpdGVkVmVydGV4KSA9PiB7XG4gICAgICBjb25zdCB0ZXJtaW5hdGUgPSAodmlzaXRlZFZlcnRleCA9PT0gc291cmNlVmVydGV4KTtcbiAgICAgIFxuICAgICAgaWYgKHRlcm1pbmF0ZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBcbiAgICByZXR1cm4gZm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzO1xuICB9XG5cbiAgcmV0cmlldmVCYWNrd2FyZHNBZmZlY3RlZFZlcnRpY2VzKCkge1xuICAgIGNvbnN0IGJhY2t3YXJkc0FmZmVjdGVkVmVydGljZXMgPSB0aGlzLmJhY2t3YXJkc0RlcHRoRmlyc3RTZWFyY2goKHZpc2l0ZWRWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0ZSA9IGZhbHNlO1xuXG4gICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIFxuICAgIHJldHVybiBiYWNrd2FyZHNBZmZlY3RlZFZlcnRpY2VzO1xuICB9XG4gIFxuICBpc1ZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KHZlcnRleCkge1xuICAgIGNvbnN0IHZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ID0gdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzLmluY2x1ZGVzKHZlcnRleCk7XG5cbiAgICByZXR1cm4gdmVydGV4SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXg7XG4gIH1cblxuICBpc1ZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCh2ZXJ0ZXgpIHtcbiAgICBjb25zdCB2ZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXggPSB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzLmluY2x1ZGVzKHZlcnRleCk7XG5cbiAgICByZXR1cm4gdmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4O1xuICB9XG5cbiAgaXNFZGdlUHJlc2VudEJ5U291cmNlVmVydGV4KHNvdXJjZVZlcnRleCkge1xuICAgIGNvbnN0IHNvdXJjZVZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ID0gdGhpcy5pc1ZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KHNvdXJjZVZlcnRleCksXG4gICAgICAgICAgZWRnZVByZXNlbnQgPSBzb3VyY2VWZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleDsgLy8vXG5cbiAgICByZXR1cm4gZWRnZVByZXNlbnQ7XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50QnlUYXJnZXRWZXJ0ZXgodGFyZ2V0VmVydGV4KSB7XG4gICAgY29uc3QgdGFyZ2V0VmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ID0gdGhpcy5pc1ZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCh0YXJnZXRWZXJ0ZXgpLFxuICAgICAgICAgIGVkZ2VQcmVzZW50ID0gdGFyZ2V0VmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4OyAvLy9cblxuICAgIHJldHVybiBlZGdlUHJlc2VudDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHNldFZpc2l0ZWQodmlzaXRlZCkge1xuICAgIHRoaXMudmlzaXRlZCA9IHZpc2l0ZWQ7XG4gIH1cblxuICBkZWNyZW1lbnRJbmRleCgpIHtcbiAgICB0aGlzLmluZGV4LS07XG4gIH1cblxuICByZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzLmluZGV4T2YoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpLFxuICAgICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cblxuICByZW1vdmVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzLmluZGV4T2YoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KSxcbiAgICAgICAgICBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcy5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbiAgfVxuICBcbiAgcmVtb3ZlSW5jb21pbmdFZGdlcygpIHtcbiAgICBjb25zdCBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXggPSB0aGlzOyAvLy9cbiAgICBcbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMuZm9yRWFjaCgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpID0+IGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4LnJlbW92ZUltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpKTtcblxuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcyA9IFtdO1xuICB9XG5cbiAgcmVtb3ZlT3V0Z29pbmdFZGdlcygpIHtcbiAgICBjb25zdCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCA9IHRoaXM7IC8vL1xuXG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcy5mb3JFYWNoKChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleC5yZW1vdmVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpKTtcblxuICAgIHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMgPSBbXTtcbiAgfVxuXG4gIGFkZEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KSB7XG4gICAgdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzLnB1c2goaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpO1xuICB9XG5cbiAgYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCkge1xuICAgIHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMucHVzaChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpO1xuICB9XG5cbiAgZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdmlzaXRlZFZlcnRpY2VzID0gW107XG5cbiAgICB0aGlzLnJldHJpZXZlRm9yd2FyZHNWaXNpdGVkVmVydGljZXMoKHZpc2l0ZWRWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0ZSA9IGNhbGxiYWNrKHZpc2l0ZWRWZXJ0ZXgpOyAgLy8vXG5cbiAgICAgIHZpc2l0ZWRWZXJ0aWNlcy5wdXNoKHZpc2l0ZWRWZXJ0ZXgpO1xuXG4gICAgICByZXR1cm4gdGVybWluYXRlO1xuICAgIH0pO1xuXG4gICAgdmlzaXRlZFZlcnRpY2VzLmZvckVhY2goKHZpc2l0ZWRWZXJ0ZXgpID0+IHZpc2l0ZWRWZXJ0ZXgucmVzZXRWaXNpdGVkKCkpO1xuXG4gICAgcmV0dXJuIHZpc2l0ZWRWZXJ0aWNlcztcbiAgfVxuXG4gIGJhY2t3YXJkc0RlcHRoRmlyc3RTZWFyY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCB2aXNpdGVkVmVydGljZXMgPSBbXTtcblxuICAgIHRoaXMucmV0cmlldmVCYWNrd2FyZHNWaXNpdGVkVmVydGljZXMoKHZpc2l0ZWRWZXJ0ZXgpID0+IHtcbiAgICAgIGNvbnN0IHRlcm1pbmF0ZSA9IGNhbGxiYWNrKHZpc2l0ZWRWZXJ0ZXgpOyAgLy8vXG5cbiAgICAgIHZpc2l0ZWRWZXJ0aWNlcy5wdXNoKHZpc2l0ZWRWZXJ0ZXgpO1xuXG4gICAgICByZXR1cm4gdGVybWluYXRlO1xuICAgIH0pO1xuXG4gICAgdmlzaXRlZFZlcnRpY2VzLmZvckVhY2goKHZpc2l0ZWRWZXJ0ZXgpID0+IHZpc2l0ZWRWZXJ0ZXgucmVzZXRWaXNpdGVkKCkpO1xuXG4gICAgcmV0dXJuIHZpc2l0ZWRWZXJ0aWNlcztcbiAgfVxuXG4gIHJldHJpZXZlRm9yd2FyZHNWaXNpdGVkVmVydGljZXMoY2FsbGJhY2spIHtcbiAgICBsZXQgdGVybWluYXRlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy52aXNpdGVkID09PSBmYWxzZSkge1xuICAgICAgdGhpcy52aXNpdGVkID0gdHJ1ZTtcblxuICAgICAgY29uc3QgdmlzaXRlZFZlcnRleCA9IHRoaXM7ICAvLy9cblxuICAgICAgdGVybWluYXRlID0gY2FsbGJhY2sodmlzaXRlZFZlcnRleCk7XG5cbiAgICAgIGlmICh0ZXJtaW5hdGUgIT09IHRydWUpIHtcbiAgICAgICAgdmlzaXRlZFZlcnRleC5zb21lSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgICB0ZXJtaW5hdGUgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgucmV0cmlldmVGb3J3YXJkc1Zpc2l0ZWRWZXJ0aWNlcyhjYWxsYmFjayk7XG5cbiAgICAgICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZXJtaW5hdGU7XG4gIH1cblxuICByZXRyaWV2ZUJhY2t3YXJkc1Zpc2l0ZWRWZXJ0aWNlcyhjYWxsYmFjaykge1xuICAgIGxldCB0ZXJtaW5hdGUgPSBmYWxzZTtcblxuICAgIGlmICh0aGlzLnZpc2l0ZWQgPT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnZpc2l0ZWQgPSB0cnVlO1xuXG4gICAgICBjb25zdCB2aXNpdGVkVmVydGV4ID0gdGhpczsgIC8vL1xuXG4gICAgICB0ZXJtaW5hdGUgPSBjYWxsYmFjayh2aXNpdGVkVmVydGV4KTtcblxuICAgICAgaWYgKHRlcm1pbmF0ZSAhPT0gdHJ1ZSkge1xuICAgICAgICB2aXNpdGVkVmVydGV4LnNvbWVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCgoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpID0+IHtcbiAgICAgICAgICB0ZXJtaW5hdGUgPSBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleC5yZXRyaWV2ZUJhY2t3YXJkc1Zpc2l0ZWRWZXJ0aWNlcyhjYWxsYmFjayk7XG5cbiAgICAgICAgICBpZiAodGVybWluYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZXJtaW5hdGU7XG4gIH1cblxuICBmb3JFYWNoSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgoY2FsbGJhY2spIHtcbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMuZm9yRWFjaChjYWxsYmFjayk7XG4gIH1cblxuICBmb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHNvbWVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChjYWxsYmFjaykge1xuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcy5zb21lKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHNvbWVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoY2FsbGJhY2spIHtcbiAgICB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRpY2VzLnNvbWUoY2FsbGJhY2spO1xuICB9XG5cbiAgcmVzZXRWaXNpdGVkKCkge1xuICAgIHRoaXMudmlzaXRlZCA9IGZhbHNlO1xuICB9XG5cbiAgc3RhdGljIGZyb21OYW1lQW5kSW5kZXgobmFtZSwgaW5kZXgpIHtcbiAgICBjb25zdCB2aXNpdGVkID0gZmFsc2UsICAvLy9cbiAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzID0gW10sXG4gICAgICAgICAgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMgPSBbXSxcbiAgICAgICAgICBkZXBlbmRlbmN5VmVydGV4ID0gbmV3IFZlcnRleChuYW1lLCBpbmRleCwgdmlzaXRlZCwgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0aWNlcywgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXMpO1xuXG4gICAgcmV0dXJuIGRlcGVuZGVuY3lWZXJ0ZXg7XG4gIH1cbn1cbiIsIlJlYWN0LmNyZWF0ZUVsZW1lbnQiXSwibmFtZXMiOlsiVmVydGV4IiwibmFtZSIsImluZGV4IiwidmlzaXRlZCIsImltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMiLCJpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcyIsImdldE5hbWUiLCJnZXRJbmRleCIsImlzVmlzaXRlZCIsImlzU3RyYW5kZWQiLCJpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRpY2VzTGVuZ3RoIiwibGVuZ3RoIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGljZXNMZW5ndGgiLCJzdHJhbmRlZCIsImdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWVzIiwibWFwIiwiaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleE5hbWUiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhOYW1lcyIsImltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4TmFtZSIsImdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGljZXMiLCJnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0aWNlcyIsImdldFByZWRlY2Vzc29yVmVydGV4TWFwIiwicHJlZGVjZXNzb3JWZXJ0ZXhNYXAiLCJmb3JFYWNoSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJwcmVkZWNlc3NvclZlcnRleCIsInByZWRlY2Vzc29yVmVydGV4TmFtZSIsImdldFN1Y2Nlc3NvclZlcnRleE1hcCIsInN1Y2Nlc3NvclZlcnRleE1hcCIsImZvckVhY2hJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJzdWNjZXNzb3JWZXJ0ZXgiLCJzdWNjZXNzb3JWZXJ0ZXhOYW1lIiwiZ2V0UHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsInByZWRlY2Vzc29yVmVydGljZXMiLCJnZXRQcmVkZWNlc3NvclZlcnRpY2VzIiwicHJlZGVjZXNzb3JWZXJ0ZXhOYW1lcyIsImdldFN1Y2Nlc3NvclZlcnRleE5hbWVzIiwic3VjY2Vzc29yVmVydGljZXMiLCJnZXRTdWNjZXNzb3JWZXJ0aWNlcyIsInN1Y2Nlc3NvclZlcnRleE5hbWVzIiwiT2JqZWN0Iiwia2V5cyIsImdldE9yZGVyZWRQcmVkZWNlc3NvclZlcnRleE5hbWVzIiwib3JkZXJWZXJ0aWNlcyIsIm9yZGVyZWRQcmVkZWNlc3NvclZlcnRpY2VzIiwib3JkZXJlZFByZWRlY2Vzc29yVmVydGV4TmFtZXMiLCJ2ZXJ0ZXhOYW1lc0Zyb21WZXJ0aWNlcyIsInJldHJpZXZlRm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzIiwic291cmNlVmVydGV4IiwiZm9yd2FyZHNBZmZlY3RlZFZlcnRpY2VzIiwiZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoIiwidmlzaXRlZFZlcnRleCIsInRlcm1pbmF0ZSIsInJldHJpZXZlQmFja3dhcmRzQWZmZWN0ZWRWZXJ0aWNlcyIsImJhY2t3YXJkc0FmZmVjdGVkVmVydGljZXMiLCJiYWNrd2FyZHNEZXB0aEZpcnN0U2VhcmNoIiwiaXNWZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsInZlcnRleCIsInZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiaW5jbHVkZXMiLCJpc1ZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCIsInZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCIsImlzRWRnZVByZXNlbnRCeVNvdXJjZVZlcnRleCIsInNvdXJjZVZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiZWRnZVByZXNlbnQiLCJpc0VkZ2VQcmVzZW50QnlUYXJnZXRWZXJ0ZXgiLCJ0YXJnZXRWZXJ0ZXgiLCJ0YXJnZXRWZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJzZXROYW1lIiwic2V0SW5kZXgiLCJzZXRWaXNpdGVkIiwiZGVjcmVtZW50SW5kZXgiLCJyZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsImluZGV4T2YiLCJzdGFydCIsImRlbGV0ZUNvdW50Iiwic3BsaWNlIiwicmVtb3ZlSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwicmVtb3ZlSW5jb21pbmdFZGdlcyIsImZvckVhY2giLCJyZW1vdmVPdXRnb2luZ0VkZ2VzIiwiYWRkSW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJwdXNoIiwiYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiY2FsbGJhY2siLCJ2aXNpdGVkVmVydGljZXMiLCJyZXRyaWV2ZUZvcndhcmRzVmlzaXRlZFZlcnRpY2VzIiwicmVzZXRWaXNpdGVkIiwicmV0cmlldmVCYWNrd2FyZHNWaXNpdGVkVmVydGljZXMiLCJzb21lSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4Iiwic29tZUltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4Iiwic29tZSIsImZyb21OYW1lQW5kSW5kZXgiLCJkZXBlbmRlbmN5VmVydGV4Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7OztlQUlxQkE7OztzQkFGa0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRXhDLElBQUEsQUFBTUEsdUJBQU47YUFBTUEsT0FDUEMsSUFBSSxFQUFFQyxLQUFLLEVBQUVDLE9BQU8sRUFBRUMsNEJBQTRCLEVBQUVDLDBCQUEwQjtnQ0FEdkVMO1FBRWpCLElBQUksQ0FBQ0MsT0FBT0E7UUFDWixJQUFJLENBQUNDLFFBQVFBO1FBQ2IsSUFBSSxDQUFDQyxVQUFVQTtRQUNmLElBQUksQ0FBQ0MsK0JBQStCQTtRQUNwQyxJQUFJLENBQUNDLDZCQUE2QkE7O2tCQU5qQkw7O1lBU25CTSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNMO1lBQ2Q7OztZQUVBTSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNMO1lBQ2Q7OztZQUVBTSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsT0FBTyxJQUFJLENBQUNMO1lBQ2Q7OztZQUVBTSxLQUFBQTttQkFBQUEsU0FBQUE7Z0JBQ0UsSUFBTUMscUNBQXFDLElBQUksQ0FBQ04sNkJBQTZCTyxRQUN2RUMsbUNBQW1DLElBQUksQ0FBQ1AsMkJBQTJCTSxRQUNuRUUsV0FBWSxBQUFDSCx1Q0FBdUMsS0FBT0UscUNBQXFDO2dCQUV0RyxPQUFPQztZQUNUOzs7WUFFQUMsS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNF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
|
|
242
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy92ZXJ0ZXguanMiLCI8PGpzeC1jb25maWctcHJhZ21hLmpzPj4iXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmltcG9ydCB7IGFycmF5VXRpbGl0aWVzIH0gZnJvbSBcIm5lY2Vzc2FyeVwiO1xuXG5pbXBvcnQgeyBmb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2gsIGJhY2t3YXJkc0RlcHRoRmlyc3RTZWFyY2ggfSBmcm9tIFwiLi91dGlsaXRpZXMvc2VhcmNoXCI7XG5cbmNvbnN0IHsgbGFzdCB9ID0gYXJyYXlVdGlsaXRpZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnRleCB7XG4gIGNvbnN0cnVjdG9yKG5hbWUsIGluZGV4LCBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcywgaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcykge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgIHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMgPSBpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcztcbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMgPSBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzO1xuICB9XG5cbiAgZ2V0TmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG5cbiAgZ2V0SW5kZXgoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5kZXg7XG4gIH1cblxuICBnZXRJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcygpIHtcbiAgICByZXR1cm4gdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcztcbiAgfVxuXG4gIGdldEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcztcbiAgfVxuXG4gIGlzU3RyYW5kZWQoKSB7XG4gICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXNMZW5ndGggPSB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzLmxlbmd0aCxcbiAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzTGVuZ3RoID0gdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzLmxlbmd0aCxcbiAgICAgICAgICBzdHJhbmRlZCA9ICgoaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXNMZW5ndGggPT09IDApICYmIChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzTGVuZ3RoID09PSAwKSk7XG5cbiAgICByZXR1cm4gc3RyYW5kZWQ7XG4gIH1cblxuICBpc1ZlcnRleFJlYWNoYWJsZSh2ZXJ0ZXgpIHtcbiAgICBjb25zdCBmb3J3YXJkc1Zpc2l0ZWRWZXJ0aWNlcyA9IHRoaXMucmV0cmlldmVGb3J3YXJkc1Zpc2l0ZWRWZXJ0ZXhlcyh2ZXJ0ZXgpLFxuICAgICAgICAgIGxhc3RGb3J3YXJkc1Zpc2l0ZWRWZXJ0ZXggPSBsYXN0KGZvcndhcmRzVmlzaXRlZFZlcnRpY2VzKSxcbiAgICAgICAgICB2ZXJ0ZXhSZWFjaGFibGUgPSAodmVydGV4ID09PSBsYXN0Rm9yd2FyZHNWaXNpdGVkVmVydGV4KTtcblxuICAgIHJldHVybiB2ZXJ0ZXhSZWFjaGFibGU7XG4gIH1cblxuICBpc0VkZ2VQcmVzZW50QnlTb3VyY2VWZXJ0ZXgoc291cmNlVmVydGV4KSB7XG4gICAgY29uc3Qgc291cmNlVmVydGV4SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXggPSB0aGlzLmlzVmVydGV4SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgoc291cmNlVmVydGV4KSxcbiAgICAgICAgICBlZGdlUHJlc2VudCA9IHNvdXJjZVZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4OyAvLy9cblxuICAgIHJldHVybiBlZGdlUHJlc2VudDtcbiAgfVxuXG4gIGlzRWRnZVByZXNlbnRCeVRhcmdldFZlcnRleCh0YXJnZXRWZXJ0ZXgpIHtcbiAgICBjb25zdCB0YXJnZXRWZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXggPSB0aGlzLmlzVmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KHRhcmdldFZlcnRleCksXG4gICAgICAgICAgZWRnZVByZXNlbnQgPSB0YXJnZXRWZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXg7IC8vL1xuXG4gICAgcmV0dXJuIGVkZ2VQcmVzZW50O1xuICB9XG5cbiAgcmV0cmlldmVGb3J3YXJkc1Zpc2l0ZWRWZXJ0ZXhlcyh2ZXJ0ZXggPSBudWxsKSB7XG4gICAgY29uc3QgdmVydGV4QSA9IHZlcnRleCwgLy8vXG4gICAgICAgICAgdmlzaXRlZFZlcnRleGVzID0gdGhpcy5mb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2goKHZlcnRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVydGV4QiA9IHZlcnRleCwgLy8vXG4gICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUgPSAodmVydGV4QSA9PT0gdmVydGV4Qik7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtaW5hdGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgZm9yd2FyZHNWaXNpdGVkVmVydGV4ZXMgPSB2aXNpdGVkVmVydGV4ZXM7ICAvLy9cblxuICAgIHJldHVybiBmb3J3YXJkc1Zpc2l0ZWRWZXJ0ZXhlcztcbiAgfVxuXG4gIHJldHJpZXZlQmFja3dhcmRzVmlzaXRlZFZlcnRleGVzKHZlcnRleCA9IG51bGwpIHtcbiAgICBjb25zdCB2ZXJ0ZXhBID0gdmVydGV4LCAvLy9cbiAgICAgICAgICB2aXNpdGVkVmVydGV4ZXMgPSB0aGlzLmJhY2t3YXJkc0RlcHRoRmlyc3RTZWFyY2goKHZlcnRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVydGV4QiA9IHZlcnRleCwgLy8vXG4gICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUgPSAodmVydGV4QSA9PT0gdmVydGV4Qik7XG5cbiAgICAgICAgICAgIGlmICh0ZXJtaW5hdGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSksXG4gICAgICAgICAgYmFja3dhcmRzVmlzaXRlZFZlcnRleGVzID0gdmlzaXRlZFZlcnRleGVzOyAgLy8vXG5cbiAgICByZXR1cm4gYmFja3dhcmRzVmlzaXRlZFZlcnRleGVzO1xuICB9XG5cbiAgaXNWZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgodmVydGV4KSB7XG4gICAgY29uc3QgdmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ID0gdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcy5pbmNsdWRlcyh2ZXJ0ZXgpO1xuXG4gICAgcmV0dXJuIHZlcnRleEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleDtcbiAgfVxuXG4gIGlzVmVydGV4SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgodmVydGV4KSB7XG4gICAgY29uc3QgdmVydGV4SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXggPSB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMuaW5jbHVkZXModmVydGV4KTtcblxuICAgIHJldHVybiB2ZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleDtcbiAgfVxuXG4gIHNldE5hbWUobmFtZSkge1xuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gIH1cblxuICBzZXRJbmRleChpbmRleCkge1xuICAgIHRoaXMuaW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHNldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzKGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcyA9IGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzO1xuICB9XG5cbiAgc2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcyhpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzID0gaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcztcbiAgfVxuXG4gIGRlY3JlbWVudEluZGV4KCkge1xuICAgIHRoaXMuaW5kZXgtLTtcbiAgfVxuXG4gIGFkZEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleChpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgpIHtcbiAgICB0aGlzLmltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzLnB1c2goaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KTtcbiAgfVxuXG4gIGFkZEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KGltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4KSB7XG4gICAgdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzLnB1c2goaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpO1xuICB9XG5cbiAgcmVtb3ZlSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcy5pbmRleE9mKGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleCksXG4gICAgICAgICAgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIHRoaXMuaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cblxuICByZW1vdmVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5pbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzLmluZGV4T2YoaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgpLFxuICAgICAgICAgIHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICBkZWxldGVDb3VudCA9IDE7XG5cbiAgICB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCk7XG4gIH1cblxuICBmb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2goY2FsbGJhY2spIHtcbiAgICBjb25zdCB2ZXJ0ZXggPSB0aGlzLCAgLy8vXG4gICAgICAgICAgdmlzaXRlZFZlcnRleGVzID0gW107XG5cbiAgICBmb3J3YXJkc0RlcHRoRmlyc3RTZWFyY2godmVydGV4LCBjYWxsYmFjaywgdmlzaXRlZFZlcnRleGVzKTtcblxuICAgIHJldHVybiB2aXNpdGVkVmVydGV4ZXM7XG4gIH1cblxuICBiYWNrd2FyZHNEZXB0aEZpcnN0U2VhcmNoKGNhbGxiYWNrKSB7XG4gICAgY29uc3QgdmVydGV4ID0gdGhpcywgIC8vL1xuICAgICAgICAgIHZpc2l0ZWRWZXJ0ZXhlcyA9IFtdO1xuXG4gICAgYmFja3dhcmRzRGVwdGhGaXJzdFNlYXJjaCh2ZXJ0ZXgsIGNhbGxiYWNrLCB2aXNpdGVkVmVydGV4ZXMpO1xuXG4gICAgcmV0dXJuIHZpc2l0ZWRWZXJ0ZXhlcztcbiAgfVxuXG4gIHNvbWVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcy5zb21lKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHNvbWVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChjYWxsYmFjaykge1xuICAgIHJldHVybiB0aGlzLmltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXMuc29tZShjYWxsYmFjayk7XG4gIH1cblxuICBmb3JFYWNoSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4KGNhbGxiYWNrKSB7XG4gICAgdGhpcy5pbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZvckVhY2hJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleChjYWxsYmFjaykge1xuICAgIHRoaXMuaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcy5mb3JFYWNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIHN0YXRpYyBmcm9tTmFtZUFuZEluZGV4KG5hbWUsIGluZGV4KSB7XG4gICAgY29uc3QgaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4ZXMgPSBbXSxcbiAgICAgICAgICBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzID0gW10sXG4gICAgICAgICAgZGVwZW5kZW5jeVZlcnRleCA9IG5ldyBWZXJ0ZXgobmFtZSwgaW5kZXgsIGltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzLCBpbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleGVzKTtcblxuICAgIHJldHVybiBkZXBlbmRlbmN5VmVydGV4O1xuICB9XG59XG4iLCJSZWFjdC5jcmVhdGVFbGVtZW50Il0sIm5hbWVzIjpbIlZlcnRleCIsImxhc3QiLCJhcnJheVV0aWxpdGllcyIsIm5hbWUiLCJpbmRleCIsImltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzIiwiaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcyIsImdldE5hbWUiLCJnZXRJbmRleCIsImdldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzIiwiZ2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcyIsImlzU3RyYW5kZWQiLCJpbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXhlc0xlbmd0aCIsImxlbmd0aCIsImltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4ZXNMZW5ndGgiLCJzdHJhbmRlZCIsImlzVmVydGV4UmVhY2hhYmxlIiwidmVydGV4IiwiZm9yd2FyZHNWaXNpdGVkVmVydGljZXMiLCJyZXRyaWV2ZUZvcndhcmRzVmlzaXRlZFZlcnRleGVzIiwibGFzdEZvcndhcmRzVmlzaXRlZFZlcnRleCIsInZlcnRleFJlYWNoYWJsZSIsImlzRWRnZVByZXNlbnRCeVNvdXJjZVZlcnRleCIsInNvdXJjZVZlcnRleCIsInNvdXJjZVZlcnRleEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiaXNWZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsImVkZ2VQcmVzZW50IiwiaXNFZGdlUHJlc2VudEJ5VGFyZ2V0VmVydGV4IiwidGFyZ2V0VmVydGV4IiwidGFyZ2V0VmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiaXNWZXJ0ZXhJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJ2ZXJ0ZXhBIiwidmlzaXRlZFZlcnRleGVzIiwiZm9yd2FyZHNEZXB0aEZpcnN0U2VhcmNoIiwidmVydGV4QiIsInRlcm1pbmF0ZSIsImZvcndhcmRzVmlzaXRlZFZlcnRleGVzIiwicmV0cmlldmVCYWNrd2FyZHNWaXNpdGVkVmVydGV4ZXMiLCJiYWNrd2FyZHNEZXB0aEZpcnN0U2VhcmNoIiwiYmFja3dhcmRzVmlzaXRlZFZlcnRleGVzIiwidmVydGV4SW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiaW5jbHVkZXMiLCJ2ZXJ0ZXhJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsInNldE5hbWUiLCJzZXRJbmRleCIsInNldEltbWVkaWF0ZVN1Y2Nlc3NvclZlcnRleGVzIiwic2V0SW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXhlcyIsImRlY3JlbWVudEluZGV4IiwiYWRkSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwiaW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4IiwicHVzaCIsImFkZEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiaW1tZWRpYXRlUHJlZGVjZXNzb3JWZXJ0ZXgiLCJyZW1vdmVJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJpbmRleE9mIiwic3RhcnQiLCJkZWxldGVDb3VudCIsInNwbGljZSIsInJlbW92ZUltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiY2FsbGJhY2siLCJzb21lSW1tZWRpYXRlU3VjY2Vzc29yVmVydGV4Iiwic29tZSIsInNvbWVJbW1lZGlhdGVQcmVkZWNlc3NvclZlcnRleCIsImZvckVhY2hJbW1lZGlhdGVTdWNjZXNzb3JWZXJ0ZXgiLCJmb3JFYWNoIiwiZm9yRWFjaEltbWVkaWF0ZVByZWRlY2Vzc29yVmVydGV4IiwiZnJvbU5hbWVBbmRJbmRleCIsImRlcGVuZGVuY3lWZXJ0ZXgiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7O2VBUXFCQTs7O3lCQU5VO3NCQUVxQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFFcEUsSUFBTSxBQUFFQyxPQUFTQywwQkFBVEQ7QUFFTyxJQUFBLEFBQU1ELHVCQUFOO2FBQU1BLE9BQ1BHLElBQUksRUFBRUMsS0FBSyxFQUFFQywwQkFBMEIsRUFBRUMsNEJBQTRCO2dDQUQ5RE47UUFFakIsSUFBSSxDQUFDRyxPQUFPQTtRQUNaLElBQUksQ0FBQ0MsUUFBUUE7UUFDYixJQUFJLENBQUNDLDZCQUE2QkE7UUFDbEMsSUFBSSxDQUFDQywrQkFBK0JBOztrQkFMbkJOOztZQVFuQk8sS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSjtZQUNkOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSjtZQUNkOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSjtZQUNkOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLE9BQU8sSUFBSSxDQUFDSjtZQUNkOzs7WUFFQUssS0FBQUE7bUJBQUFBLFNBQUFBO2dCQUNFLElBQU1DLG1DQUFtQyxJQUFJLENBQUNQLDJCQUEyQlEsUUFDbkVDLHFDQUFxQyxJQUFJLENBQUNSLDZCQUE2Qk8sUUFDdkVFLFdBQVksQUFBQ0gscUNBQXFDLEtBQU9FLHVDQUF1QztnQkFFdEcsT0FBT0M7WUFDVDs7O1lBRUFDLEtBQUFBO21CQUFBQSxTQUFBQSxrQkFBa0JDLE1BQU07Z0JBQ3RCLElBQU1DLDBCQUEwQixJQUFJLENBQUNDLGdDQUFnQ0YsU0FDL0RHLDRCQUE0Qm5CLEtBQUtpQiwwQkFDakNHLGtCQUFtQkosV0FBV0c7Z0JBRXBDLE9BQU9DO1lBQ1Q7OztZQUVBQyxLQUFBQTttQkFBQUEsU0FBQUEs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
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "occam-directed-graphs",
|
|
3
3
|
"author": "James Smith",
|
|
4
|
-
"version": "3.0.
|
|
4
|
+
"version": "3.0.41",
|
|
5
5
|
"license": "MIT, Anti-996",
|
|
6
6
|
"homepage": "https://github.com/djalbat/occam-directed-graphs",
|
|
7
|
-
"description": "
|
|
7
|
+
"description": "Occam's directed graphs.",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "https://github.com/djalbat/occam-directed-graphs"
|
|
@@ -14,15 +14,13 @@
|
|
|
14
14
|
},
|
|
15
15
|
"devDependencies": {
|
|
16
16
|
"@swc/core": "^1.2.50",
|
|
17
|
-
"
|
|
18
|
-
"
|
|
19
|
-
"lively-cli": "^2.0.34",
|
|
17
|
+
"chai": "^4.1.0",
|
|
18
|
+
"mocha": "^6.0.2",
|
|
20
19
|
"watchful-cli": "^1.7.19"
|
|
21
20
|
},
|
|
22
21
|
"scripts": {
|
|
23
|
-
"start": "node ./bin/main.js",
|
|
24
22
|
"clean": "rm -rf ./lib",
|
|
25
|
-
"watchful": "watchful -m --transpiler=swc --
|
|
23
|
+
"watchful": "watchful -m --transpiler=swc --source-directory=./src --lib-directory=./lib --pause=100",
|
|
26
24
|
"batch": "npm run watchful batch --",
|
|
27
25
|
"batch-debug": "npm run watchful batch -- --debug",
|
|
28
26
|
"incremental": "npm run watchful incremental --",
|
|
@@ -30,7 +28,8 @@
|
|
|
30
28
|
"build": "npm run clean && npm run batch",
|
|
31
29
|
"build-debug": "npm run clean && npm run batch-debug",
|
|
32
30
|
"watch": "npm run clean && npm run batch && npm run incremental",
|
|
33
|
-
"watch-debug": "npm run clean && npm run batch-debug && npm run incremental-debug"
|
|
31
|
+
"watch-debug": "npm run clean && npm run batch-debug && npm run incremental-debug",
|
|
32
|
+
"test": "mocha --recursive -R spec ./test"
|
|
34
33
|
},
|
|
35
34
|
"main": "./lib/index.js"
|
|
36
35
|
}
|
package/src/cycle.js
CHANGED
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
import { vertexNamesFromVertices } from "./utilities/vertex";
|
|
6
|
-
|
|
7
|
-
const { first } = arrayUtilities;
|
|
3
|
+
import { vertexNamesFromVertexes } from "./utilities/vertex";
|
|
8
4
|
|
|
9
5
|
export default class Cycle {
|
|
10
6
|
constructor(vertexNames) {
|
|
@@ -15,30 +11,14 @@ export default class Cycle {
|
|
|
15
11
|
return this.vertexNames;
|
|
16
12
|
}
|
|
17
13
|
|
|
18
|
-
static
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const firstSuccessorVertex = first(successorVertices),
|
|
25
|
-
firstSuccessorVertexName = firstSuccessorVertex.getName(),
|
|
26
|
-
cyclicEdgeTargetVertexName = partialCycle.getTargetVertexName();
|
|
27
|
-
|
|
28
|
-
if (firstSuccessorVertexName === cyclicEdgeTargetVertexName) {
|
|
29
|
-
successorVertices.shift();
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
const cyclicEdgeSourceVertexName = partialCycle.getCyclicEdgeSourceVertexName(),
|
|
34
|
-
cyclicEdgeTargetVertexName = partialCycle.getCyclicEdgeTargetVertexName(),
|
|
35
|
-
predecessorVertexNames = partialCycle.getPredecessorVertexNames(),
|
|
36
|
-
successorVertexNames = vertexNamesFromVertices(successorVertices),
|
|
37
|
-
vertexNames = (vertexName === cyclicEdgeTargetVertexName) ?
|
|
38
|
-
[].concat(cyclicEdgeTargetVertexName).concat(predecessorVertexNames).concat(cyclicEdgeSourceVertexName) :
|
|
39
|
-
[].concat(predecessorVertexNames).concat(cyclicEdgeSourceVertexName).concat(cyclicEdgeTargetVertexName).concat(successorVertexNames),
|
|
14
|
+
static fromSourceVertexAndPredecessorVertexes(sourceVertex, predecessorVertexes) {
|
|
15
|
+
const vertexes = [
|
|
16
|
+
...predecessorVertexes,
|
|
17
|
+
sourceVertex
|
|
18
|
+
],
|
|
19
|
+
vertexNames = vertexNamesFromVertexes(vertexes),
|
|
40
20
|
cycle = new Cycle(vertexNames);
|
|
41
|
-
|
|
21
|
+
|
|
42
22
|
return cycle;
|
|
43
23
|
}
|
|
44
24
|
}
|