occam-languages 3.0.40 → 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/lib/utilities/continuation.js +40 -31
- package/package.json +1 -1
- package/src/utilities/continuation.js +44 -42
|
@@ -156,7 +156,7 @@ function every(array, callback, ...initialArguments) {
|
|
|
156
156
|
return next(index, ...initialArguments, back);
|
|
157
157
|
}
|
|
158
158
|
function map(array, callback, ...initialArguments) {
|
|
159
|
-
const back = initialArguments.pop(), forward = initialArguments.pop(), arrayA = array,
|
|
159
|
+
const back = initialArguments.pop(), forward = initialArguments.pop(), arrayA = array, length = array.length;
|
|
160
160
|
function next(index, arrayB, ...nextArguments) {
|
|
161
161
|
const back = nextArguments.pop();
|
|
162
162
|
if (index === length) {
|
|
@@ -170,7 +170,7 @@ function map(array, callback, ...initialArguments) {
|
|
|
170
170
|
], ...forwardArguments);
|
|
171
171
|
}, back, index);
|
|
172
172
|
}
|
|
173
|
-
const index = 0;
|
|
173
|
+
const index = 0, arrayB = [];
|
|
174
174
|
return next(index, arrayB, ...initialArguments, back);
|
|
175
175
|
}
|
|
176
176
|
function reduce(array, initialValue, callback, ...initialArguments) {
|
|
@@ -204,76 +204,84 @@ function forEach(array, callback, ...initialArguments) {
|
|
|
204
204
|
return next(index, ...initialArguments, back);
|
|
205
205
|
}
|
|
206
206
|
function filter(array, callback, ...initialArguments) {
|
|
207
|
-
const back = initialArguments.pop(), forward = initialArguments.pop(),
|
|
208
|
-
function next(index, ...nextArguments) {
|
|
207
|
+
const back = initialArguments.pop(), forward = initialArguments.pop(), length = array.length;
|
|
208
|
+
function next(index, array, deletedElements, ...nextArguments) {
|
|
209
209
|
const back = nextArguments.pop();
|
|
210
210
|
if (index === -1) {
|
|
211
|
-
return forward(deletedElements, ...nextArguments, back);
|
|
211
|
+
return forward(array, deletedElements, ...nextArguments, back);
|
|
212
212
|
}
|
|
213
213
|
const element = array[index];
|
|
214
214
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
215
|
-
return next(index - 1, ...forwardArguments);
|
|
215
|
+
return next(index - 1, array, deletedElements, ...forwardArguments);
|
|
216
216
|
}, (exception)=>{
|
|
217
217
|
if (exception) {
|
|
218
218
|
return back(exception);
|
|
219
219
|
}
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
220
|
+
const deletedElement = element; ///
|
|
221
|
+
return next(index - 1, [
|
|
222
|
+
...array.slice(0, index),
|
|
223
|
+
...array.slice(index + 1)
|
|
224
|
+
], [
|
|
225
|
+
deletedElement,
|
|
226
|
+
...deletedElements
|
|
227
|
+
], ...nextArguments, back);
|
|
224
228
|
}, index);
|
|
225
229
|
}
|
|
226
|
-
const index = length - 1;
|
|
227
|
-
return next(index, ...initialArguments, back);
|
|
230
|
+
const index = length - 1, deletedElements = [];
|
|
231
|
+
return next(index, array, deletedElements, ...initialArguments, back);
|
|
228
232
|
}
|
|
229
233
|
function prune(array, callback, ...initialArguments) {
|
|
230
234
|
const back = initialArguments.pop(), forward = initialArguments.pop(), length = array.length;
|
|
231
|
-
function next(index, ...nextArguments) {
|
|
235
|
+
function next(index, array, ...nextArguments) {
|
|
232
236
|
const back = nextArguments.pop();
|
|
233
237
|
if (index === length) {
|
|
234
|
-
const deletedElement = undefined;
|
|
235
|
-
return forward(deletedElement, ...nextArguments, back);
|
|
238
|
+
const deletedElement = undefined; ///
|
|
239
|
+
return forward(array, deletedElement, ...nextArguments, back);
|
|
236
240
|
}
|
|
237
241
|
const element = array[index];
|
|
238
242
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
239
|
-
return next(index + 1, ...forwardArguments);
|
|
243
|
+
return next(index + 1, array, ...forwardArguments);
|
|
240
244
|
}, (exception)=>{
|
|
241
245
|
if (exception) {
|
|
242
246
|
return back(exception);
|
|
243
247
|
}
|
|
244
|
-
const
|
|
245
|
-
|
|
246
|
-
|
|
248
|
+
const deletedElement = element; ///
|
|
249
|
+
return forward([
|
|
250
|
+
...array.slice(0, index),
|
|
251
|
+
...array.slice(index + 1)
|
|
252
|
+
], deletedElement, ...nextArguments, back);
|
|
247
253
|
}, index);
|
|
248
254
|
}
|
|
249
255
|
const index = 0;
|
|
250
|
-
return next(index, ...initialArguments, back);
|
|
256
|
+
return next(index, array, ...initialArguments, back);
|
|
251
257
|
}
|
|
252
258
|
function extract(array, callback, ...initialArguments) {
|
|
253
259
|
const back = initialArguments.pop(), forward = initialArguments.pop(), length = array.length;
|
|
254
|
-
function next(index, ...nextArguments) {
|
|
260
|
+
function next(index, array, ...nextArguments) {
|
|
255
261
|
const back = nextArguments.pop();
|
|
256
262
|
if (index === length) {
|
|
257
263
|
const deletedElement = undefined;
|
|
258
|
-
return forward(deletedElement, ...nextArguments, back);
|
|
264
|
+
return forward(array, deletedElement, ...nextArguments, back);
|
|
259
265
|
}
|
|
260
266
|
const element = array[index];
|
|
261
267
|
return callback(element, ...nextArguments, (...forwardArguments)=>{
|
|
262
|
-
const
|
|
263
|
-
|
|
264
|
-
|
|
268
|
+
const deletedElement = element; ///
|
|
269
|
+
return forward([
|
|
270
|
+
...array.slice(0, index),
|
|
271
|
+
...array.slice(index + 1)
|
|
272
|
+
], deletedElement, ...forwardArguments);
|
|
265
273
|
}, (exception)=>{
|
|
266
274
|
if (exception) {
|
|
267
275
|
return back(exception);
|
|
268
276
|
}
|
|
269
|
-
return next(index + 1, ...nextArguments, back);
|
|
277
|
+
return next(index + 1, array, ...nextArguments, back);
|
|
270
278
|
}, index);
|
|
271
279
|
}
|
|
272
280
|
const index = 0;
|
|
273
|
-
return next(index, ...initialArguments, back);
|
|
281
|
+
return next(index, array, ...initialArguments, back);
|
|
274
282
|
}
|
|
275
283
|
function find(array, callback, ...initialArguments) {
|
|
276
|
-
const back = initialArguments.pop(), forward = initialArguments.pop(),
|
|
284
|
+
const back = initialArguments.pop(), forward = initialArguments.pop(), length = array.length;
|
|
277
285
|
function next(index, elements, ...nextArguments) {
|
|
278
286
|
const back = nextArguments.pop();
|
|
279
287
|
if (index === length) {
|
|
@@ -292,11 +300,11 @@ function find(array, callback, ...initialArguments) {
|
|
|
292
300
|
return next(index + 1, elements, ...nextArguments, back);
|
|
293
301
|
}, index);
|
|
294
302
|
}
|
|
295
|
-
const index = 0;
|
|
303
|
+
const index = 0, elements = [];
|
|
296
304
|
return next(index, elements, ...initialArguments, back);
|
|
297
305
|
}
|
|
298
306
|
function resolve(array, callback, ...initialArguments) {
|
|
299
|
-
const back = initialArguments.pop(), forward = initialArguments.pop()
|
|
307
|
+
const back = initialArguments.pop(), forward = initialArguments.pop();
|
|
300
308
|
function next(arrayA, arrayB, ...nextArguments) {
|
|
301
309
|
const back = nextArguments.pop(), length = arrayA.length;
|
|
302
310
|
if (length === 0) {
|
|
@@ -313,6 +321,7 @@ function resolve(array, callback, ...initialArguments) {
|
|
|
313
321
|
], ...forwardArguments);
|
|
314
322
|
}, back);
|
|
315
323
|
}
|
|
324
|
+
const arrayA = array, arrayB = [];
|
|
316
325
|
return next(arrayA, arrayB, ...initialArguments, back);
|
|
317
326
|
}
|
|
318
327
|
function match(arrayA, arrayB, callback, ...initialArguments) {
|
|
@@ -426,4 +435,4 @@ const _default = {
|
|
|
426
435
|
exists
|
|
427
436
|
};
|
|
428
437
|
|
|
429
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3V0KGZvcndhcmQsIGJhY2spIHtcbiAgcmV0dXJuICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTsgLy8vXG5cbiAgICByZXR1cm4gZm9yd2FyZCguLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgY291bnQsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4uaW5pdGlhbEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3J3YXJkQXJndW1lbnRzLnBvcCgpOyAvLy9cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGNvdW50ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgY291bnQgPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBjb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgZm9yd2FyZCxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGNvdW50ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgY291bnQgPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBjb3VudCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXAoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYXJyYXlBID0gYXJyYXksIC8vL1xuICAgICAgICBhcnJheUIgPSBbXSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5QiwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGFycmF5QiwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEEgPSBhcnJheUFbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudEEsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKGVsZW1lbnRCLCAuLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgWyAuLi5hcnJheUIsIGVsZW1lbnRCIF0sIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGFycmF5QiwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgdmFsdWUsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCh2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAodmFsdWUsIC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCB2YWx1ZSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgaW5pdGlhbFZhbHVlLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IFtdLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gaW5kZXgsIC8vL1xuICAgICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgYXJyYXkuc3BsaWNlKHN0YXJ0SW5kZXgsIGRlbGV0ZUNvdW50KTtcblxuICAgICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChkZWxldGVkRWxlbWVudCk7XG5cbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggLSAxLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICBjb25zdCBkZWxldGVkRWxlbWVudCA9IHVuZGVmaW5lZDtcblxuICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnQgPSBlbGVtZW50OyAvLy9cblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnRJbmRleCwgZGVsZXRlQ291bnQpO1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKGRlbGV0ZWRFbGVtZW50LCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChkZWxldGVkRWxlbWVudCwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3Qgc3RhcnRJbmRleCA9IGluZGV4LCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgICBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydEluZGV4LCBkZWxldGVDb3VudCk7XG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoZGVsZXRlZEVsZW1lbnQsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaW5kKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGVsZW1lbnRzID0gW10sXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBlbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIFsgLi4uZWxlbWVudHMsIGVsZW1lbnQgXSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgZWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgZWxlbWVudHMsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUEgPSBhcnJheSwgLy8vXG4gICAgICAgIGFycmF5QiA9IFtdO1xuXG4gIGZ1bmN0aW9uIG5leHQoYXJyYXlBLCBhcnJheUIsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgICBsZW5ndGggPSBhcnJheUEubGVuZ3RoO1xuXG4gICAgaWYgKGxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmluZChcbiAgICAgIGFycmF5QSxcbiAgICAgIGNhbGxiYWNrLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgIChlbGVtZW50cywgLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICBjb25zdCBlbGVtZW50c0xlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuICAgICAgICBpZiAoZWxlbWVudHNMZW5ndGggPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5leHQoXG4gICAgICAgICAgYXJyYXlBLmZpbHRlcigoZWxlbWVudCkgPT4gIWVsZW1lbnRzLmluY2x1ZGVzKGVsZW1lbnQpKSxcbiAgICAgICAgICBbIC4uLmFycmF5QiwgLi4uZWxlbWVudHMgXSxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgYmFja1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gbmV4dChhcnJheUEsIGFycmF5QiwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaChhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoLFxuICAgICAgICBsZW5ndGggPSBhcnJheUFMZW5ndGg7ICAvLy9cblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50QSxcbiAgICAgIGVsZW1lbnRCLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGwoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBldmVyeShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIHNvbWUoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3V0LFxuICBvbmUsXG4gIHNvbWUsXG4gIGVhY2gsXG4gIGV2ZXJ5LFxuICBtYXAsXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgZmluZCxcbiAgcmVzb2x2ZSxcbiAgbWF0Y2gsXG4gIGZvcndhcmRzRXZlcnksXG4gIGJhY2t3YXJkc0V2ZXJ5LFxuICBmb3J3YXJkc0ZvckVhY2gsXG4gIGJhY2t3YXJkc0ZvckVhY2gsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImN1dCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmaW5kIiwiZm9yRWFjaCIsImZvcndhcmRzRXZlcnkiLCJmb3J3YXJkc0ZvckVhY2giLCJtYXAiLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJmb3J3YXJkIiwiYmFjayIsImZvcndhcmRBcmd1bWVudHMiLCJwb3AiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImxlbmd0aCIsIm5leHQiLCJpbmRleCIsImNvdW50IiwibmV4dEFyZ3VtZW50cyIsImVsZW1lbnQiLCJleGNlcHRpb24iLCJhcnJheUEiLCJhcnJheUIiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJzdGFydEluZGV4IiwiZGVsZXRlQ291bnQiLCJkZWxldGVkRWxlbWVudCIsInNwbGljZSIsInVuc2hpZnQiLCJ1bmRlZmluZWQiLCJlbGVtZW50cyIsImVsZW1lbnRzTGVuZ3RoIiwiaW5jbHVkZXMiLCJhcnJheUFMZW5ndGgiLCJhcnJheUJMZW5ndGgiLCJjYWxsYmFja3MiLCJjYWxsYmFja0FyZ3VtZW50cyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O1FBbW1CZ0JBO2VBQUFBOztRQTFGQUM7ZUFBQUE7O1FBNERBQztlQUFBQTs7UUFua0JBQztlQUFBQTs7UUE2bUJoQjtlQUFBOztRQXhoQmdCQztlQUFBQTs7UUFtQ0FDO2VBQUFBOztRQStlQUM7ZUFBQUE7O1FBM1JBQztlQUFBQTs7UUF6RkFDO2VBQUFBOztRQXFJQUM7ZUFBQUE7O1FBbktBQztlQUFBQTs7UUFvUkFDO2VBQUFBOztRQTREQUM7ZUFBQUE7O1FBL1lBQztlQUFBQTs7UUE2U0FDO2VBQUFBOztRQTNiQUM7ZUFBQUE7O1FBd1JBQztlQUFBQTs7UUExR0FDO2VBQUFBOztRQXVPQUM7ZUFBQUE7O1FBeFdBQztlQUFBQTs7O0FBckRULFNBQVNoQixJQUFJaUIsT0FBTyxFQUFFQyxJQUFJO0lBQy9CLE9BQU8sQ0FBQyxHQUFHQztRQUNUQSxpQkFBaUJDLEdBQUcsSUFBSSxHQUFHO1FBRTNCLE9BQU9ILFdBQVdFLGtCQUFrQkQ7SUFDdEM7QUFDRjtBQUVPLFNBQVNOLElBQUlTLEtBQUssRUFBRUMsUUFBUSxFQUFFLEdBQUdDLGdCQUFnQjtJQUN0RCxNQUFNTCxPQUFPSyxpQkFBaUJILEdBQUcsSUFDM0JILFVBQVVNLGlCQUFpQkgsR0FBRyxJQUM5QkksU0FBU0gsTUFBTUcsTUFBTTtJQUUzQixTQUFTQyxLQUFLQyxLQUFLLEVBQUVDLEtBQUssRUFBRSxHQUFHQyxhQUFhO1FBQzFDLElBQUlGLFVBQVVGLFFBQVE7WUFDcEIsSUFBSUcsVUFBVSxHQUFHO2dCQUNmLE9BQU9UO1lBQ1Q7WUFFQSxPQUFPRCxXQUFXVyxlQUFlVjtRQUNuQztRQUVBLE1BQU1XLFVBQVVSLEtBQUssQ0FBQ0ssTUFBTTtRQUU1QixPQUFPSixTQUNMTyxZQUNHTixrQkFDSCxDQUFDLEdBQUdKO1lBQ0YsSUFBSVEsVUFBVSxHQUFHO2dCQUNmLE9BQU9UO1lBQ1Q7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
|
|
438
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvY29udGludWF0aW9uLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3V0KGZvcndhcmQsIGJhY2spIHtcbiAgcmV0dXJuICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgZm9yd2FyZEFyZ3VtZW50cy5wb3AoKTsgLy8vXG5cbiAgICByZXR1cm4gZm9yd2FyZCguLi5mb3J3YXJkQXJndW1lbnRzLCBiYWNrKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uZShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgY291bnQsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgaWYgKGNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4uaW5pdGlhbEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGlmIChjb3VudCA9PT0gMSkge1xuICAgICAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3J3YXJkQXJndW1lbnRzLnBvcCgpOyAvLy9cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGNvdW50ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgY291bnQsIC4uLm5leHRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgY291bnQgPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBjb3VudCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzb21lKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBiYWNrKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5pbml0aWFsQXJndW1lbnRzLFxuICAgICAgZm9yd2FyZCxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEpO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBlYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBjb3VudCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGlmIChjb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gYmFjaygpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGNvdW50ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgY291bnQgPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBjb3VudCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVyeShhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXAoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgYXJyYXlBID0gYXJyYXksIC8vL1xuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50QSA9IGFycmF5QVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50QSxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoZWxlbWVudEIsIC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCBbIC4uLmFycmF5QiwgZWxlbWVudEIgXSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMCxcbiAgICAgICAgYXJyYXlCID0gW107XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGFycmF5QiwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZWR1Y2UoYXJyYXksIGluaXRpYWxWYWx1ZSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgdmFsdWUsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCh2YWx1ZSwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICB2YWx1ZSxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAodmFsdWUsIC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCB2YWx1ZSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgaW5pdGlhbFZhbHVlLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDA7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBhcnJheSwgZGVsZXRlZEVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheSwgZGVsZXRlZEVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIGluZGV4IC0gMSxcbiAgICAgICAgICBbIC4uLmFycmF5LnNsaWNlKDAsIGluZGV4KSwgLi4uYXJyYXkuc2xpY2UoaW5kZXggKyAxKSBdLFxuICAgICAgICAgIFsgZGVsZXRlZEVsZW1lbnQsIC4uLmRlbGV0ZWRFbGVtZW50cyBdLFxuICAgICAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAgICAgYmFja1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMSxcbiAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gW107XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGFycmF5LCBkZWxldGVkRWxlbWVudHMsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIGFycmF5LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgY29uc3QgZGVsZXRlZEVsZW1lbnQgPSB1bmRlZmluZWQ7IC8vL1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheSwgZGVsZXRlZEVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgYXJyYXksIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkZWxldGVkRWxlbWVudCA9IGVsZW1lbnQ7IC8vL1xuXG4gICAgICAgIHJldHVybiBmb3J3YXJkKFxuICAgICAgICAgIFsgLi4uYXJyYXkuc2xpY2UoMCwgaW5kZXgpLCAuLi5hcnJheS5zbGljZShpbmRleCArIDEpIF0sXG4gICAgICAgICAgZGVsZXRlZEVsZW1lbnQsXG4gICAgICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICAgICBiYWNrXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCBhcnJheSwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCBhcnJheSwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuXG4gICAgICByZXR1cm4gZm9yd2FyZChhcnJheSwgZGVsZXRlZEVsZW1lbnQsIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlbGV0ZWRFbGVtZW50ID0gZWxlbWVudDsgLy8vXG5cbiAgICAgICAgcmV0dXJuIGZvcndhcmQoXG4gICAgICAgICAgWyAuLi5hcnJheS5zbGljZSgwLCBpbmRleCksIC4uLmFycmF5LnNsaWNlKGluZGV4ICsgMSkgXSxcbiAgICAgICAgICBkZWxldGVkRWxlbWVudCxcbiAgICAgICAgICAuLi5mb3J3YXJkQXJndW1lbnRzXG4gICAgICAgICk7XG4gICAgICB9LFxuICAgICAgKGV4Y2VwdGlvbikgPT4ge1xuICAgICAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soZXhjZXB0aW9uKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgYXJyYXksIC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgICAgfSxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgYXJyYXksIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgZWxlbWVudHMsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gbGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZChlbGVtZW50cywgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCBbIC4uLmVsZW1lbnRzLCBlbGVtZW50IF0sIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIChleGNlcHRpb24pID0+IHtcbiAgICAgICAgaWYgKGV4Y2VwdGlvbikge1xuICAgICAgICAgIHJldHVybiBiYWNrKGV4Y2VwdGlvbik7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV4dChpbmRleCArIDEsIGVsZW1lbnRzLCAuLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICAgIH0sXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IDAsXG4gICAgICAgIGVsZW1lbnRzID0gW107XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIGVsZW1lbnRzLCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmUoYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKTtcblxuICBmdW5jdGlvbiBuZXh0KGFycmF5QSwgYXJyYXlCLCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCksXG4gICAgICAgICAgbGVuZ3RoID0gYXJyYXlBLmxlbmd0aDtcblxuICAgIGlmIChsZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKGFycmF5QiwgLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpbmQoXG4gICAgICBhcnJheUEsXG4gICAgICBjYWxsYmFjayxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoZWxlbWVudHMsIC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgY29uc3QgZWxlbWVudHNMZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGVsZW1lbnRzTGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgcmV0dXJuIGJhY2soKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBuZXh0KFxuICAgICAgICAgIGFycmF5QS5maWx0ZXIoKGVsZW1lbnQpID0+ICFlbGVtZW50cy5pbmNsdWRlcyhlbGVtZW50KSksXG4gICAgICAgICAgWyAuLi5hcnJheUIsIC4uLmVsZW1lbnRzIF0sXG4gICAgICAgICAgLi4uZm9yd2FyZEFyZ3VtZW50c1xuICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGJhY2tcbiAgICApO1xuICB9XG5cbiAgY29uc3QgYXJyYXlBID0gYXJyYXksIC8vL1xuICAgICAgICBhcnJheUIgPSBbXTtcblxuICByZXR1cm4gbmV4dChhcnJheUEsIGFycmF5QiwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaChhcnJheUEsIGFycmF5QiwgY2FsbGJhY2ssIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgY29uc3QgYmFjayA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGZvcndhcmQgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBhcnJheUFMZW5ndGggPSBhcnJheUEubGVuZ3RoLFxuICAgICAgICBhcnJheUJMZW5ndGggPSBhcnJheUIubGVuZ3RoLFxuICAgICAgICBsZW5ndGggPSBhcnJheUFMZW5ndGg7ICAvLy9cblxuICBpZiAoYXJyYXlBTGVuZ3RoICE9PSBhcnJheUJMZW5ndGgpIHtcbiAgICByZXR1cm4gYmFjaygpO1xuICB9XG5cbiAgZnVuY3Rpb24gbmV4dChpbmRleCwgLi4ubmV4dEFyZ3VtZW50cykge1xuICAgIGNvbnN0IGJhY2sgPSBuZXh0QXJndW1lbnRzLnBvcCgpO1xuXG4gICAgaWYgKGluZGV4ID09PSBsZW5ndGgpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRBID0gYXJyYXlBW2luZGV4XSxcbiAgICAgICAgICBlbGVtZW50QiA9IGFycmF5QltpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50QSxcbiAgICAgIGVsZW1lbnRCLFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4ICsgMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gMDtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgICByZXR1cm4gZm9yd2FyZCguLi5uZXh0QXJndW1lbnRzLCBiYWNrKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgcmV0dXJuIGNhbGxiYWNrKFxuICAgICAgZWxlbWVudCxcbiAgICAgIC4uLm5leHRBcmd1bWVudHMsXG4gICAgICAoLi4uZm9yd2FyZEFyZ3VtZW50cykgPT4ge1xuICAgICAgICByZXR1cm4gbmV4dChpbmRleCAtIDEsIC4uLmZvcndhcmRBcmd1bWVudHMpO1xuICAgICAgfSxcbiAgICAgIGJhY2ssXG4gICAgICBpbmRleFxuICAgICk7XG4gIH1cblxuICBjb25zdCBpbmRleCA9IGxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIG5leHQoaW5kZXgsIC4uLmluaXRpYWxBcmd1bWVudHMsIGJhY2spO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaywgLi4uaW5pdGlhbEFyZ3VtZW50cykge1xuICBjb25zdCBiYWNrID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgZm9yd2FyZCA9IGluaXRpYWxBcmd1bWVudHMucG9wKCksXG4gICAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmdW5jdGlvbiBuZXh0KGluZGV4LCAuLi5uZXh0QXJndW1lbnRzKSB7XG4gICAgY29uc3QgYmFjayA9IG5leHRBcmd1bWVudHMucG9wKCk7XG5cbiAgICBpZiAoaW5kZXggPT09IGxlbmd0aCkge1xuICAgICAgcmV0dXJuIGZvcndhcmQoLi4ubmV4dEFyZ3VtZW50cywgYmFjayk7XG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHJldHVybiBjYWxsYmFjayhcbiAgICAgIGVsZW1lbnQsXG4gICAgICAuLi5uZXh0QXJndW1lbnRzLFxuICAgICAgKC4uLmZvcndhcmRBcmd1bWVudHMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5leHQoaW5kZXggKyAxLCAuLi5mb3J3YXJkQXJndW1lbnRzKTtcbiAgICAgIH0sXG4gICAgICBiYWNrLFxuICAgICAgaW5kZXhcbiAgICApO1xuICB9XG5cbiAgY29uc3QgaW5kZXggPSAwO1xuXG4gIHJldHVybiBuZXh0KGluZGV4LCAuLi5pbml0aWFsQXJndW1lbnRzLCBiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIGNhbGxiYWNrLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIGNvbnN0IGJhY2sgPSBpbml0aWFsQXJndW1lbnRzLnBvcCgpLFxuICAgICAgICBmb3J3YXJkID0gaW5pdGlhbEFyZ3VtZW50cy5wb3AoKSxcbiAgICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZ1bmN0aW9uIG5leHQoaW5kZXgsIC4uLm5leHRBcmd1bWVudHMpIHtcbiAgICBjb25zdCBiYWNrID0gbmV4dEFyZ3VtZW50cy5wb3AoKTtcblxuICAgIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICAgIHJldHVybiBmb3J3YXJkKC4uLm5leHRBcmd1bWVudHMsIGJhY2spO1xuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICByZXR1cm4gY2FsbGJhY2soXG4gICAgICBlbGVtZW50LFxuICAgICAgLi4ubmV4dEFyZ3VtZW50cyxcbiAgICAgICguLi5mb3J3YXJkQXJndW1lbnRzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXh0KGluZGV4IC0gMSwgLi4uZm9yd2FyZEFyZ3VtZW50cyk7XG4gICAgICB9LFxuICAgICAgYmFjayxcbiAgICAgIGluZGV4XG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gbGVuZ3RoIC0gMTtcblxuICByZXR1cm4gbmV4dChpbmRleCwgLi4uaW5pdGlhbEFyZ3VtZW50cywgYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbGwoY2FsbGJhY2tzLCAuLi5pbml0aWFsQXJndW1lbnRzKSB7XG4gIHJldHVybiBldmVyeShjYWxsYmFja3MsIChjYWxsYmFjaywgLi4uY2FsbGJhY2tBcmd1bWVudHMpID0+IHtcbiAgICByZXR1cm4gY2FsbGJhY2soLi4uY2FsbGJhY2tBcmd1bWVudHMpO1xuICB9LCAuLi5pbml0aWFsQXJndW1lbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXN0cyhjYWxsYmFja3MsIC4uLmluaXRpYWxBcmd1bWVudHMpIHtcbiAgcmV0dXJuIHNvbWUoY2FsbGJhY2tzLCAoY2FsbGJhY2ssIC4uLmNhbGxiYWNrQXJndW1lbnRzKSA9PiB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKC4uLmNhbGxiYWNrQXJndW1lbnRzKTtcbiAgfSwgLi4uaW5pdGlhbEFyZ3VtZW50cyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgY3V0LFxuICBvbmUsXG4gIHNvbWUsXG4gIGVhY2gsXG4gIGV2ZXJ5LFxuICBtYXAsXG4gIHJlZHVjZSxcbiAgZm9yRWFjaCxcbiAgZmlsdGVyLFxuICBwcnVuZSxcbiAgZXh0cmFjdCxcbiAgZmluZCxcbiAgcmVzb2x2ZSxcbiAgbWF0Y2gsXG4gIGZvcndhcmRzRXZlcnksXG4gIGJhY2t3YXJkc0V2ZXJ5LFxuICBmb3J3YXJkc0ZvckVhY2gsXG4gIGJhY2t3YXJkc0ZvckVhY2gsXG4gIGFsbCxcbiAgZXhpc3RzXG59O1xuIl0sIm5hbWVzIjpbImFsbCIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRm9yRWFjaCIsImN1dCIsImVhY2giLCJldmVyeSIsImV4aXN0cyIsImV4dHJhY3QiLCJmaWx0ZXIiLCJmaW5kIiwiZm9yRWFjaCIsImZvcndhcmRzRXZlcnkiLCJmb3J3YXJkc0ZvckVhY2giLCJtYXAiLCJtYXRjaCIsIm9uZSIsInBydW5lIiwicmVkdWNlIiwicmVzb2x2ZSIsInNvbWUiLCJmb3J3YXJkIiwiYmFjayIsImZvcndhcmRBcmd1bWVudHMiLCJwb3AiLCJhcnJheSIsImNhbGxiYWNrIiwiaW5pdGlhbEFyZ3VtZW50cyIsImxlbmd0aCIsIm5leHQiLCJpbmRleCIsImNvdW50IiwibmV4dEFyZ3VtZW50cyIsImVsZW1lbnQiLCJleGNlcHRpb24iLCJhcnJheUEiLCJhcnJheUIiLCJlbGVtZW50QSIsImVsZW1lbnRCIiwiaW5pdGlhbFZhbHVlIiwidmFsdWUiLCJkZWxldGVkRWxlbWVudHMiLCJkZWxldGVkRWxlbWVudCIsInNsaWNlIiwidW5kZWZpbmVkIiwiZWxlbWVudHMiLCJlbGVtZW50c0xlbmd0aCIsImluY2x1ZGVzIiwiYXJyYXlBTGVuZ3RoIiwiYXJyYXlCTGVuZ3RoIiwiY2FsbGJhY2tzIiwiY2FsbGJhY2tBcmd1bWVudHMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztRQXFtQmdCQTtlQUFBQTs7UUExRkFDO2VBQUFBOztRQTREQUM7ZUFBQUE7O1FBcmtCQUM7ZUFBQUE7O1FBK21CaEI7ZUFBQTs7UUExaEJnQkM7ZUFBQUE7O1FBbUNBQztlQUFBQTs7UUFpZkFDO2VBQUFBOztRQTVSQUM7ZUFBQUE7O1FBMUZBQztlQUFBQTs7UUFzSUFDO2VBQUFBOztRQXBLQUM7ZUFBQUE7O1FBc1JBQztlQUFBQTs7UUE0REFDO2VBQUFBOztRQWpaQUM7ZUFBQUE7O1FBK1NBQztlQUFBQTs7UUE3YkFDO2VBQUFBOztRQXdSQUM7ZUFBQUE7O1FBMUdBQztlQUFBQTs7UUF3T0FDO2VBQUFBOztRQXpXQUM7ZUFBQUE7OztBQXJEVCxTQUFTaEIsSUFBSWlCLE9BQU8sRUFBRUMsSUFBSTtJQUMvQixPQUFPLENBQUMsR0FBR0M7UUFDVEEsaUJBQWlCQyxHQUFHLElBQUksR0FBRztRQUUzQixPQUFPSCxXQUFXRSxrQkFBa0JEO0lBQ3RDO0FBQ0Y7QUFFTyxTQUFTTixJQUFJUyxLQUFLLEVBQUVDLFFBQVEsRUFBRSxHQUFHQyxnQkFBZ0I7SUFDdEQsTUFBTUwsT0FBT0ssaUJBQWlCSCxHQUFHLElBQzNCSCxVQUFVTSxpQkFBaUJILEdBQUcsSUFDOUJJLFNBQVNILE1BQU1HLE1BQU07SUFFM0IsU0FBU0MsS0FBS0MsS0FBSyxFQUFFQyxLQUFLLEVBQUUsR0FBR0MsYUFBYTtRQUMxQyxJQUFJRixVQUFVRixRQUFRO1lBQ3BCLElBQUlHLFVBQVUsR0FBRztnQkFDZixPQUFPVDtZQUNUO1lBRUEsT0FBT0QsV0FBV1csZUFBZVY7UUFDbkM7UUFFQSxNQUFNVyxVQUFVUixLQUFLLENBQUNLLE1BQU07UUFFNUIsT0FBT0osU0FD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
|
package/package.json
CHANGED
|
@@ -154,7 +154,6 @@ export function map(array, callback, ...initialArguments) {
|
|
|
154
154
|
const back = initialArguments.pop(),
|
|
155
155
|
forward = initialArguments.pop(),
|
|
156
156
|
arrayA = array, ///
|
|
157
|
-
arrayB = [],
|
|
158
157
|
length = array.length;
|
|
159
158
|
|
|
160
159
|
function next(index, arrayB, ...nextArguments) {
|
|
@@ -177,7 +176,8 @@ export function map(array, callback, ...initialArguments) {
|
|
|
177
176
|
);
|
|
178
177
|
}
|
|
179
178
|
|
|
180
|
-
const index = 0
|
|
179
|
+
const index = 0,
|
|
180
|
+
arrayB = [];
|
|
181
181
|
|
|
182
182
|
return next(index, arrayB, ...initialArguments, back);
|
|
183
183
|
}
|
|
@@ -246,14 +246,13 @@ export function forEach(array, callback, ...initialArguments) {
|
|
|
246
246
|
export function filter(array, callback, ...initialArguments) {
|
|
247
247
|
const back = initialArguments.pop(),
|
|
248
248
|
forward = initialArguments.pop(),
|
|
249
|
-
deletedElements = [],
|
|
250
249
|
length = array.length;
|
|
251
250
|
|
|
252
|
-
function next(index, ...nextArguments) {
|
|
251
|
+
function next(index, array, deletedElements, ...nextArguments) {
|
|
253
252
|
const back = nextArguments.pop();
|
|
254
253
|
|
|
255
254
|
if (index === -1) {
|
|
256
|
-
return forward(deletedElements, ...nextArguments, back);
|
|
255
|
+
return forward(array, deletedElements, ...nextArguments, back);
|
|
257
256
|
}
|
|
258
257
|
|
|
259
258
|
const element = array[index];
|
|
@@ -262,30 +261,31 @@ export function filter(array, callback, ...initialArguments) {
|
|
|
262
261
|
element,
|
|
263
262
|
...nextArguments,
|
|
264
263
|
(...forwardArguments) => {
|
|
265
|
-
return next(index - 1, ...forwardArguments);
|
|
264
|
+
return next(index - 1, array, deletedElements, ...forwardArguments);
|
|
266
265
|
},
|
|
267
266
|
(exception) => {
|
|
268
267
|
if (exception) {
|
|
269
268
|
return back(exception);
|
|
270
269
|
}
|
|
271
270
|
|
|
272
|
-
const
|
|
273
|
-
deleteCount = 1,
|
|
274
|
-
deletedElement = element; ///
|
|
275
|
-
|
|
276
|
-
array.splice(startIndex, deleteCount);
|
|
271
|
+
const deletedElement = element; ///
|
|
277
272
|
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
273
|
+
return next(
|
|
274
|
+
index - 1,
|
|
275
|
+
[ ...array.slice(0, index), ...array.slice(index + 1) ],
|
|
276
|
+
[ deletedElement, ...deletedElements ],
|
|
277
|
+
...nextArguments,
|
|
278
|
+
back
|
|
279
|
+
);
|
|
281
280
|
},
|
|
282
281
|
index
|
|
283
282
|
);
|
|
284
283
|
}
|
|
285
284
|
|
|
286
|
-
const index = length - 1
|
|
285
|
+
const index = length - 1,
|
|
286
|
+
deletedElements = [];
|
|
287
287
|
|
|
288
|
-
return next(index, ...initialArguments, back);
|
|
288
|
+
return next(index, array, deletedElements, ...initialArguments, back);
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
export function prune(array, callback, ...initialArguments) {
|
|
@@ -293,13 +293,13 @@ export function prune(array, callback, ...initialArguments) {
|
|
|
293
293
|
forward = initialArguments.pop(),
|
|
294
294
|
length = array.length;
|
|
295
295
|
|
|
296
|
-
function next(index, ...nextArguments) {
|
|
296
|
+
function next(index, array, ...nextArguments) {
|
|
297
297
|
const back = nextArguments.pop();
|
|
298
298
|
|
|
299
299
|
if (index === length) {
|
|
300
|
-
const deletedElement = undefined;
|
|
300
|
+
const deletedElement = undefined; ///
|
|
301
301
|
|
|
302
|
-
return forward(deletedElement, ...nextArguments, back);
|
|
302
|
+
return forward(array, deletedElement, ...nextArguments, back);
|
|
303
303
|
}
|
|
304
304
|
|
|
305
305
|
const element = array[index];
|
|
@@ -308,20 +308,21 @@ export function prune(array, callback, ...initialArguments) {
|
|
|
308
308
|
element,
|
|
309
309
|
...nextArguments,
|
|
310
310
|
(...forwardArguments) => {
|
|
311
|
-
return next(index + 1, ...forwardArguments);
|
|
311
|
+
return next(index + 1, array, ...forwardArguments);
|
|
312
312
|
},
|
|
313
313
|
(exception) => {
|
|
314
314
|
if (exception) {
|
|
315
315
|
return back(exception);
|
|
316
316
|
}
|
|
317
317
|
|
|
318
|
-
const
|
|
319
|
-
deleteCount = 1,
|
|
320
|
-
deletedElement = element; ///
|
|
321
|
-
|
|
322
|
-
array.splice(startIndex, deleteCount);
|
|
318
|
+
const deletedElement = element; ///
|
|
323
319
|
|
|
324
|
-
return forward(
|
|
320
|
+
return forward(
|
|
321
|
+
[ ...array.slice(0, index), ...array.slice(index + 1) ],
|
|
322
|
+
deletedElement,
|
|
323
|
+
...nextArguments,
|
|
324
|
+
back
|
|
325
|
+
);
|
|
325
326
|
},
|
|
326
327
|
index
|
|
327
328
|
);
|
|
@@ -329,7 +330,7 @@ export function prune(array, callback, ...initialArguments) {
|
|
|
329
330
|
|
|
330
331
|
const index = 0;
|
|
331
332
|
|
|
332
|
-
return next(index, ...initialArguments, back);
|
|
333
|
+
return next(index, array, ...initialArguments, back);
|
|
333
334
|
}
|
|
334
335
|
|
|
335
336
|
export function extract(array, callback, ...initialArguments) {
|
|
@@ -337,13 +338,13 @@ export function extract(array, callback, ...initialArguments) {
|
|
|
337
338
|
forward = initialArguments.pop(),
|
|
338
339
|
length = array.length;
|
|
339
340
|
|
|
340
|
-
function next(index, ...nextArguments) {
|
|
341
|
+
function next(index, array, ...nextArguments) {
|
|
341
342
|
const back = nextArguments.pop();
|
|
342
343
|
|
|
343
344
|
if (index === length) {
|
|
344
345
|
const deletedElement = undefined;
|
|
345
346
|
|
|
346
|
-
return forward(deletedElement, ...nextArguments, back);
|
|
347
|
+
return forward(array, deletedElement, ...nextArguments, back);
|
|
347
348
|
}
|
|
348
349
|
|
|
349
350
|
const element = array[index];
|
|
@@ -352,20 +353,20 @@ export function extract(array, callback, ...initialArguments) {
|
|
|
352
353
|
element,
|
|
353
354
|
...nextArguments,
|
|
354
355
|
(...forwardArguments) => {
|
|
355
|
-
const
|
|
356
|
-
deleteCount = 1,
|
|
357
|
-
deletedElement = element; ///
|
|
358
|
-
|
|
359
|
-
array.splice(startIndex, deleteCount);
|
|
356
|
+
const deletedElement = element; ///
|
|
360
357
|
|
|
361
|
-
return forward(
|
|
358
|
+
return forward(
|
|
359
|
+
[ ...array.slice(0, index), ...array.slice(index + 1) ],
|
|
360
|
+
deletedElement,
|
|
361
|
+
...forwardArguments
|
|
362
|
+
);
|
|
362
363
|
},
|
|
363
364
|
(exception) => {
|
|
364
365
|
if (exception) {
|
|
365
366
|
return back(exception);
|
|
366
367
|
}
|
|
367
368
|
|
|
368
|
-
return next(index + 1, ...nextArguments, back);
|
|
369
|
+
return next(index + 1, array, ...nextArguments, back);
|
|
369
370
|
},
|
|
370
371
|
index
|
|
371
372
|
);
|
|
@@ -373,13 +374,12 @@ export function extract(array, callback, ...initialArguments) {
|
|
|
373
374
|
|
|
374
375
|
const index = 0;
|
|
375
376
|
|
|
376
|
-
return next(index, ...initialArguments, back);
|
|
377
|
+
return next(index, array, ...initialArguments, back);
|
|
377
378
|
}
|
|
378
379
|
|
|
379
380
|
export function find(array, callback, ...initialArguments) {
|
|
380
381
|
const back = initialArguments.pop(),
|
|
381
382
|
forward = initialArguments.pop(),
|
|
382
|
-
elements = [],
|
|
383
383
|
length = array.length;
|
|
384
384
|
|
|
385
385
|
function next(index, elements, ...nextArguments) {
|
|
@@ -408,16 +408,15 @@ export function find(array, callback, ...initialArguments) {
|
|
|
408
408
|
);
|
|
409
409
|
}
|
|
410
410
|
|
|
411
|
-
const index = 0
|
|
411
|
+
const index = 0,
|
|
412
|
+
elements = [];
|
|
412
413
|
|
|
413
414
|
return next(index, elements, ...initialArguments, back);
|
|
414
415
|
}
|
|
415
416
|
|
|
416
417
|
export function resolve(array, callback, ...initialArguments) {
|
|
417
418
|
const back = initialArguments.pop(),
|
|
418
|
-
forward = initialArguments.pop()
|
|
419
|
-
arrayA = array, ///
|
|
420
|
-
arrayB = [];
|
|
419
|
+
forward = initialArguments.pop();
|
|
421
420
|
|
|
422
421
|
function next(arrayA, arrayB, ...nextArguments) {
|
|
423
422
|
const back = nextArguments.pop(),
|
|
@@ -448,6 +447,9 @@ export function resolve(array, callback, ...initialArguments) {
|
|
|
448
447
|
);
|
|
449
448
|
}
|
|
450
449
|
|
|
450
|
+
const arrayA = array, ///
|
|
451
|
+
arrayB = [];
|
|
452
|
+
|
|
451
453
|
return next(arrayA, arrayB, ...initialArguments, back);
|
|
452
454
|
}
|
|
453
455
|
|