@stemy/backend 4.0.4 → 4.0.5

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/esm2020/utils.mjs CHANGED
@@ -490,17 +490,6 @@ function copyRecursive(target, source, predicate) {
490
490
  }
491
491
  if (isBuffer(source))
492
492
  return Buffer.from(source);
493
- // Copy map entries
494
- if (target instanceof Map) {
495
- if (source instanceof Map) {
496
- for (let [key, value] of source.entries()) {
497
- if (!predicate(value, key, target, source))
498
- continue;
499
- target.set(key, copyRecursive(target.get(key), value, predicate));
500
- }
501
- }
502
- return target;
503
- }
504
493
  // If object defines __shouldCopy as false, then don't copy it
505
494
  if (source.__shouldCopy === false)
506
495
  return source;
@@ -520,6 +509,17 @@ function copyRecursive(target, source, predicate) {
520
509
  else {
521
510
  target = Object.assign({}, target || {});
522
511
  }
512
+ // Copy map entries
513
+ if (target instanceof Map) {
514
+ if (source instanceof Map) {
515
+ for (let [key, value] of source.entries()) {
516
+ if (!predicate(value, key, target, source))
517
+ continue;
518
+ target.set(key, !shouldCopy(key, value) ? value : copyRecursive(target.get(key), value, predicate));
519
+ }
520
+ }
521
+ return target;
522
+ }
523
523
  // Copy object members
524
524
  let keys = Object.keys(source);
525
525
  target = keys.reduce((result, key) => {
@@ -692,4 +692,4 @@ export async function fileTypeFromBuffer(buffer) {
692
692
  }
693
693
  return type;
694
694
  }
695
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLElBQUksV0FBVyxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFDbEMsT0FBTyxFQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBZSxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDL0MsT0FBTyxFQUFXLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBa0IsTUFBTSxRQUFRLENBQUM7QUFDOUQsT0FBTyxNQUFnQixNQUFNLE9BQU8sQ0FBQztBQUNyQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQVdyRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFNckIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFrQjtJQUN2QyxZQUFZLEVBQUUsSUFBSTtDQUNyQixDQUFDO0FBSUYsTUFBTSxVQUFVLGlC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QUFDLFNBQVMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4RSxPQUFPLEdBQUcsQ0FBQztLQUNkO0lBRUQsZUFBZTtJQUNmLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3JGLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMs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QUMsSUFBZSxFQUFFLE1BQWM7SUFDcEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNyQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQzNCLE9BQU8sRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxlQUFlLEVBQUMsQ0FBQztLQUM5QztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUM7QUFFRCxNQUFNLENBQUMsS0FBSyxVQUFVLGtCQUFrQixDQUFDLE1BQWM7SUFDbkQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLElBQUksRUFBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxZQUFZLEVBQUMsQ0FBYyxDQUFDO0lBQzlGLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDekIsT0FBTyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3hDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7bWtkaXIsIHJlYWRGaWxlIGFzIGZzUmVhZEZpbGUsIHVubGluaywgd3JpdGVGaWxlIGFzIGZzV3JpdGVGaWxlfSBmcm9tIFwiZnNcIjtcclxuaW1wb3J0IHtiYXNlbmFtZSwgZGlybmFtZX0gZnJvbSBcInBhdGhcIjtcclxuaW1wb3J0IHtmaWxlVVJMVG9QYXRofSBmcm9tIFwidXJsXCI7XHJcbmltcG9ydCB7ZXhlYyBhcyBleGVjQ2hpbGRQcm9jZXNzfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xyXG5pbXBvcnQge2NyZWF0ZUhhc2h9IGZyb20gXCJjcnlwdG9cIjtcclxuaW1wb3J0IHtEZXBlbmRlbmN5Q29udGFpbmVyfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtmcm9tLCBPYnNlcnZhYmxlLCBTdWJqZWN0LCBTdWJzY3JpcHRpb259IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7Y2FuUmVwb3J0RXJyb3J9IGZyb20gXCJyeGpzL2ludGVybmFsL3V0aWwvY2FuUmVwb3J0RXJyb3JcIjtcclxuaW1wb3J0IHtTZXJ2ZXJ9IGZyb20gXCJzb2NrZXQuaW9cIjtcclxuaW1wb3J0IHtHcmlkRlNCdWNrZXQsIE9iamVjdElkfSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge0RvY3VtZW50LCBUeXBlc30gZnJvbSBcIm1vbmdvb3NlXCI7XHJcbmltcG9ydCB7UGFzc1Rocm91Z2gsIFJlYWRhYmxlLCBSZWFkYWJsZU9wdGlvbnN9IGZyb20gXCJzdHJlYW1cIjtcclxuaW1wb3J0IHNoYXJwXywge1JlZ2lvbn0gZnJvbSBcInNoYXJwXCI7XHJcbmltcG9ydCB7SHR0cEVycm9yfSBmcm9tIFwicm91dGluZy1jb250cm9sbGVyc1wiO1xyXG5pbXBvcnQgYXhpb3MgZnJvbSBcImF4aW9zXCI7XHJcbmltcG9ydCB7ZmlsZVR5cGVGcm9tU3RyZWFtIGFzIGV4dHJhY3RGaWxlVHlwZX0gZnJvbSBcImZpbGUtdHlwZS9jb3JlXCI7XHJcbmltcG9ydCB7XHJcbiAgICBJQXNzZXRDcm9wSW5mbyxcclxuICAgIElBc3NldEltYWdlUGFyYW1zLFxyXG4gICAgSUFzc2V0TWV0YSxcclxuICAgIElDbGllbnRTb2NrZXQsXHJcbiAgICBJRmlsZVR5cGUsXHJcbiAgICBQYXJhbVJlc29sdmVyLFxyXG4gICAgVHlwZVxyXG59IGZyb20gXCIuL2NvbW1vbi10eXBlc1wiO1xyXG5cclxuY29uc3Qgc2hhcnAgPSBzaGFycF87XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElESUNvbnRhaW5lcnMge1xyXG4gICAgYXBwQ29udGFpbmVyOiBEZXBlbmRlbmN5Q29udGFpbmVyXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBkaUNvbnRhaW5lcnM6IElESUNvbnRhaW5lcnMgPSB7XHJcbiAgICBhcHBDb250YWluZXI6IG51bGxcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIEZpbHRlclByZWRpY2F0ZSA9ICh2YWx1ZTogYW55LCBrZXk/OiBhbnksIHRhcmdldD86IGFueSwgc291cmNlPzogYW55KSA9PiBib29sZWFuO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB2YWx1ZSA9PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSA9PSBcInVuZGVmaW5lZFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAhaXNOdWxsT3JVbmRlZmluZWQodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VHlwZShvYmo6IGFueSk6IHN0cmluZyB7XHJcbiAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCJcXFxccyhbYS16QS1aXSspXCIpO1xyXG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopLm1hdGNoKHJlZ2V4KVsxXS50b0xvd2VyQ2FzZSgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3QodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGdldFR5cGUodmFsdWUpID09IFwib2JqZWN0XCI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0FycmF5KHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBBcnJheTxhbnk+IHtcclxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQnVmZmVyKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBCdWZmZXIge1xyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgQnVmZmVyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNCb29sZWFuKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNEYXRlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBEYXRlIHtcclxuICAgIHJldHVybiAhIXZhbHVlICYmIHZhbHVlW1N5bWJvbC50b1ByaW1pdGl2ZV0gJiYgIWlzTmFOKHZhbHVlKSAmJiBcInVuZGVmaW5lZFwiICE9PSB0eXBlb2YgdmFsdWUuZ2V0RGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJpbWl0aXZlKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgdmFsdWU7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCAodHlwZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlICE9PSBcImZ1bmN0aW9uXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNTdHJpbmcodmFsdWU6IGFueSk6IHZhbHVlIGlzIHN0cmluZyB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZTogYW55KTogdmFsdWUgaXMgRnVuY3Rpb24ge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiICYmIHZhbHVlLnByb3RvdHlwZSAmJiB2YWx1ZS5wcm90b3R5cGUuY29uc3RydWN0b3IpID09PSB2YWx1ZSAmJiB2YWx1ZS5uYW1lICE9PSBcIk9iamVjdFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNUeXBlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBUeXBlPGFueT4ge1xyXG4gICAgcmV0dXJuIGlzQ29uc3RydWN0b3IodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNJbnRlcmZhY2Uob2JqOiBhbnksIGludGVyRmFjZU9iamVjdDogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gXCJvYmplY3RcIiB8fCBpc0FycmF5KG9iaikgfHwgIWlzT2JqZWN0KGludGVyRmFjZU9iamVjdCkpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbnRlckZhY2VPYmplY3QpO1xyXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgIGxldCB0eXBlID0gaW50ZXJGYWNlT2JqZWN0W2tleV0gfHwgXCJcIjtcclxuICAgICAgICBpZiAodHlwZS5zdGFydHNXaXRoKFwiKlwiKSkge1xyXG4gICAgICAgICAgICB0eXBlID0gdHlwZS5zdWJzdHIoMSk7XHJcbiAgICAgICAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoa2V5KSAmJiBnZXRUeXBlKG9ialtrZXldKSAhPT0gdHlwZSkgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpIHx8IGdldFR5cGUob2JqW2tleV0pICE9PSB0eXBlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVjRmlyc3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgIHJldHVybiB2YWx1ZVswXS50b1VwcGVyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGNGaXJzdCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGlmICghdmFsdWUpIHJldHVybiBcIlwiO1xyXG4gICAgcmV0dXJuIHZhbHVlWzBdLnRvTG93ZXJDYXNlKCkgKyB2YWx1ZS5zdWJzdHIoMSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdElkKGlkOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0eXBlb2YgaWQgPT09IFwic3RyaW5nXCIgJiYgaWQubGVuZ3RoID09IDI0ICYmICFpc05hTihOdW1iZXIoXCIweFwiICsgaWQpKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpcnN0SXRlbTxUPih2YWx1ZTogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gdmFsdWVbMF07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBsYXN0SXRlbTxUPih2YWx1ZTogVFtdKTogVCB7XHJcbiAgICByZXR1cm4gdmFsdWVbdmFsdWUubGVuZ3RoIC0gMV07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdyb3VwPFQ+KHZhbHVlOiBUW10sIGNvbXBhcmF0b3I6IChhOiBULCBiOiBUKSA9PiBib29sZWFuKTogQXJyYXk8VFtdPiB7XHJcbiAgICBjb25zdCByZXN1bHQ6IEFycmF5PFRbXT4gPSBbXTtcclxuICAgIGlmICghaXNBcnJheSh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoID09IDApIHJldHVybiByZXN1bHQ7XHJcbiAgICB2YWx1ZSA9IEFycmF5LmZyb20odmFsdWUpO1xyXG4gICAgcmVzdWx0LnB1c2goW3ZhbHVlLnNoaWZ0KCldKTtcclxuICAgIHZhbHVlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSByZXN1bHQuZmluZChnID0+IGcuc29tZShhID0+IGNvbXBhcmF0b3IoYSwgaXRlbSkpKTtcclxuICAgICAgICBpZiAoZ3JvdXApIHtcclxuICAgICAgICAgICAgZ3JvdXAucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXN1bHQucHVzaChbaXRlbV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSXRlbXM8VD4odmFsdWU6IFRbXSk6IFRbXSB7XHJcbiAgICByZXR1cm4gdmFsdWUuZmlsdGVyKCh2LCBpeCkgPT4gdmFsdWUuaW5kZXhPZih2KSA9PT0gaXgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWUob2JqOiBhbnksIGtleTogc3RyaW5nLCBkZWZhdWx0VmFsdWU/OiBhbnksIHRyZWVGYWxsYmFjazogYm9vbGVhbiA9IGZhbHNlKTogYW55IHtcclxuICAgIGtleSA9IGtleSB8fCBcIlwiO1xyXG4gICAgY29uc3Qga2V5cyA9IGtleS5zcGxpdChcIi5cIik7XHJcbiAgICBsZXQgY3VyS2V5ID0gXCJcIjtcclxuICAgIGRvIHtcclxuICAgICAgICBjdXJLZXkgKz0ga2V5cy5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChpc0RlZmluZWQob2JqKSAmJiBpc0RlZmluZWQob2JqW2N1cktleV0pICYmICh0eXBlb2Ygb2JqW2N1cktleV0gPT09IFwib2JqZWN0XCIgfHwgIWtleXMubGVuZ3RoKSkge1xyXG4gICAgICAgICAgICBvYmogPSBvYmpbY3VyS2V5XTtcclxuICAgICAgICAgICAgY3VyS2V5ID0gXCJcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKCFrZXlzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWUgPSB0eXBlb2YgZGVmYXVsdFZhbHVlID09IFwidW5kZWZpbmVkXCIgPyBrZXkucmVwbGFjZShuZXcgUmVnRXhwKGAke2N1cktleX0kYCksIGB7JHtjdXJLZXl9fWApIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICBvYmogPSB0cmVlRmFsbGJhY2sgPyBvYmogfHwgZGVmYXVsdFZhbHVlIDogZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1cktleSArPSBcIi5cIjtcclxuICAgICAgICB9XHJcbiAgICB9IHdoaWxlIChrZXlzLmxlbmd0aCk7XHJcbiAgICByZXR1cm4gb2JqO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ3JvdXBCeTxUPihpdGVtczogVFtdLCBjYjogKGl0ZW06IFQpID0+IHN0cmluZykge1xyXG4gICAgcmV0dXJuIGl0ZW1zLnJlZHVjZSgocmVzLCBpdGVtKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSBjYihpdGVtKTtcclxuICAgICAgICByZXNbZ3JvdXBdID0gcmVzW2dyb3VwXSB8fCBbXTtcclxuICAgICAgICByZXNbZ3JvdXBdLnB1c2goaXRlbSk7XHJcbiAgICAgICAgcmV0dXJuIHJlcztcclxuICAgIH0sIHt9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZTogYW55LCB0eXBlOiBzdHJpbmcpOiBhbnkge1xyXG4gICAgc3dpdGNoICh0eXBlKSB7XHJcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcclxuICAgICAgICAgICAgdmFsdWUgPSB0eXBlb2YgdmFsdWUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlLnRvTG93ZXJDYXNlKCkgOiB2YWx1ZTtcclxuICAgICAgICAgICAgcmV0dXJuICh2YWx1ZSA9PSBcIm5vXCIgfHwgdmFsdWUgPT0gXCJmYWxzZVwiIHx8IHZhbHVlID09IFwiMFwiKSA/IGZhbHNlIDogISF2YWx1ZTtcclxuICAgICAgICBjYXNlIFwibnVtYmVyXCI6XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gaXNOYU4odmFsKSA/IDAgOiB2YWw7XHJcbiAgICAgICAgY2FzZSBcImFycmF5XCI6XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgJHt2YWx1ZX1gLnNwbGl0KFwiLCBcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxufVxyXG5cclxuY29uc3QgY3JvcEludGVyZmFjZSA9IHtcclxuICAgIHg6IFwibnVtYmVyXCIsXHJcbiAgICB5OiBcIm51bWJlclwiLFxyXG4gICAgdzogXCJudW1iZXJcIixcclxuICAgIGg6IFwibnVtYmVyXCJcclxufTtcclxuXHJcbmZ1bmN0aW9uIHRvQ3JvcFJlZ2lvbihjcm9wSW5mbzogc3RyaW5nIHwgYm9vbGVhbiB8IElBc3NldENyb3BJbmZvKTogUmVnaW9uIHtcclxuICAgIGxldCBjcm9wID0gY3JvcEluZm8gYXMgSUFzc2V0Q3JvcEluZm87XHJcbiAgICBpZiAoaXNTdHJpbmcoY3JvcEluZm8pKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY3JvcCA9IEpTT04ucGFyc2UoY3JvcEluZm8gYXMgc3RyaW5nKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICghaXNJbnRlcmZhY2UoY3JvcCwgY3JvcEludGVyZmFjZSkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgICB3aWR0aDogTWF0aC5yb3VuZChjcm9wLncpLFxyXG4gICAgICAgIGhlaWdodDogTWF0aC5yb3VuZChjcm9wLmgpLFxyXG4gICAgICAgIHRvcDogTWF0aC5yb3VuZChjcm9wLnkpLFxyXG4gICAgICAgIGxlZnQ6IE1hdGgucm91bmQoY3JvcC54KVxyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRvSW1hZ2U8VCA9IEJ1ZmZlciB8IFJlYWRhYmxlPihzcmM6IFQsIHBhcmFtcz86IElBc3NldEltYWdlUGFyYW1zLCBtZXRhPzogSUFzc2V0TWV0YSk6IFByb21pc2U8VD4ge1xyXG5cclxuICAgIC8vIERlZmF1bHQgcGFyYW1zIGFuZCBtZXRhXHJcbiAgICBwYXJhbXMgPSBwYXJhbXMgfHwge307XHJcbiAgICBtZXRhID0gbWV0YSB8fCB7fTtcclxuXHJcbiAgICAvLyBHZXQgZGVmYXVsdCBjcm9wIGluZm9cclxuICAgIGNvbnN0IGNyb3AgPSB0b0Nyb3BSZWdpb24obWV0YS5jcm9wKTtcclxuXHJcbiAgICAvLyBSZXR1cm4gdGhlIHNyYyBpZiB0aGVyZSBhcmUgbm8gcGFyYW1zIGFuZCBubyBkZWZhdWx0IGNyb3AgZXhpc3RzXHJcbiAgICBpZiAobWV0YS5leHRlbnNpb24gPT09IFwic3ZnXCIgfHwgKE9iamVjdC5rZXlzKHBhcmFtcykubGVuZ3RoID09IDAgJiYgIWNyb3ApKSB7XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH1cclxuXHJcbiAgICAvLyBQYXJzZSBwYXJhbXNcclxuICAgIHBhcmFtcy5yb3RhdGlvbiA9IGlzTmFOKHBhcmFtcy5yb3RhdGlvbikgPyAwIDogTWF0aC5yb3VuZChwYXJhbXMucm90YXRpb24gLyA5MCkgKiA5MDtcclxuICAgIHBhcmFtcy5jYW52YXNTY2FsZVggPSBpc05hTihwYXJhbXMuY2FudmFzU2NhbGVYKSA/IDEgOiBOdW1iZXIocGFyYW1zLmNhbnZhc1NjYWxlWCk7XHJcbiAgICBwYXJhbXMuY2FudmFzU2NhbGVZID0gaXNOYU4ocGFyYW1zLmNhbnZhc1NjYWxlWSkgPyAxIDogTnVtYmVyKHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgcGFyYW1zLnNjYWxlWCA9IGlzTmFOKHBhcmFtcy5zY2FsZVgpID8gMSA6IE51bWJlcihwYXJhbXMuc2NhbGVYKTtcclxuICAgIHBhcmFtcy5zY2FsZVkgPSBpc05hTihwYXJhbXMuc2NhbGVZKSA/IDEgOiBOdW1iZXIocGFyYW1zLnNjYWxlWSk7XHJcbiAgICBwYXJhbXMuY3JvcCA9IGlzQm9vbGVhbihwYXJhbXMuY3JvcCkgPyBwYXJhbXMuY3JvcCA6IHBhcmFtcy5jcm9wID09IFwidHJ1ZVwiO1xyXG5cclxuICAgIGxldCBidWZmZXIgPSBzcmMgaW5zdGFuY2VvZiBSZWFkYWJsZSA/IGF3YWl0IHN0cmVhbVRvQnVmZmVyKHNyYykgOiBzcmMgYXMgYW55O1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvLyBHZXQgY3JvcCBpbmZvXHJcbiAgICAgICAgY29uc3QgY3JvcEJlZm9yZSA9IHRvQ3JvcFJlZ2lvbihwYXJhbXMuY3JvcEJlZm9yZSB8fCAocGFyYW1zLmNyb3AgPyBtZXRhLmNyb3BCZWZvcmUgOiBudWxsKSk7XHJcbiAgICAgICAgY29uc3QgY3JvcEFmdGVyID0gdG9Dcm9wUmVnaW9uKHBhcmFtcy5jcm9wQWZ0ZXIgfHwgKHBhcmFtcy5jcm9wID8gbWV0YS5jcm9wQWZ0ZXIgOiBudWxsKSk7XHJcbiAgICAgICAgLy8gR2V0IG1ldGFkYXRhXHJcbiAgICAgICAgbGV0IGltZyA9IHNoYXJwKGJ1ZmZlcik7XHJcbiAgICAgICAgbGV0IHt3aWR0aCwgaGVpZ2h0fSA9IGF3YWl0IGltZy5tZXRhZGF0YSgpO1xyXG4gICAgICAgIC8vIENyb3AgYmVmb3JlIHJlc2l6ZVxyXG4gICAgICAgIGlmIChjcm9wQmVmb3JlKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gY3JvcEJlZm9yZS53aWR0aDtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gY3JvcEJlZm9yZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3BCZWZvcmUpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY3JvcCkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGNyb3Aud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGNyb3AuaGVpZ2h0O1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcuZXh0cmFjdChjcm9wKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gUmVzaXplIGNhbnZhc1xyXG4gICAgICAgIGNvbnN0IGNhbnZhc1NjYWxlWCA9IG1ldGE/LmNhbnZhc1NjYWxlWCB8fCAxO1xyXG4gICAgICAgIGNvbnN0IGNhbnZhc1NjYWxlWSA9IG1ldGE/LmNhbnZhc1NjYWxlWSB8fCAxO1xyXG4gICAgICAgIGlmIChwYXJhbXMuY2FudmFzU2NhbGVYICE9PSBjYW52YXNTY2FsZVggfHwgcGFyYW1zLmNhbnZhc1NjYWxlWSAhPT0gY2FudmFzU2NhbGVZKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIHBhcmFtcy5jYW52YXNTY2FsZVgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5jYW52YXNTY2FsZVkpO1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcucmVzaXplKHt3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDAwMFwiLCBmaXQ6IFwiY29udGFpblwifSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlc2l6ZSBpbWFnZVxyXG4gICAgICAgIGlmIChwYXJhbXMuc2NhbGVYICE9PSAxIHx8IHBhcmFtcy5zY2FsZVkgIT09IDEpIHtcclxuICAgICAgICAgICAgd2lkdGggPSBNYXRoLnJvdW5kKHdpZHRoICogcGFyYW1zLnNjYWxlWCk7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IE1hdGgucm91bmQoaGVpZ2h0ICogcGFyYW1zLnNjYWxlWSk7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5yZXNpemUoe3dpZHRoLCBoZWlnaHQsIGJhY2tncm91bmQ6IFwiIzAwMDAwMDAwXCIsIGZpdDogXCJmaWxsXCJ9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ3JvcCBhZnRlciByZXNpemVcclxuICAgICAgICBpZiAoY3JvcEFmdGVyKSB7XHJcbiAgICAgICAgICAgIGltZyA9IGltZy5leHRyYWN0KGNyb3BBZnRlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJvdGF0ZVxyXG4gICAgICAgIGlmIChwYXJhbXMucm90YXRpb24gIT09IDApIHtcclxuICAgICAgICAgICAgYnVmZmVyID0gYXdhaXQgaW1nLnRvQnVmZmVyKCk7XHJcbiAgICAgICAgICAgIGltZyA9IHNoYXJwKGJ1ZmZlcikucm90YXRlKHBhcmFtcy5yb3RhdGlvbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJ1ZmZlciA9IGF3YWl0IGltZy50b0J1ZmZlcigpO1xyXG4gICAgICAgIHNyYyA9IHNyYyBpbnN0YW5jZW9mIFJlYWRhYmxlID8gYnVmZmVyVG9TdHJlYW0oYnVmZmVyKSA6IGJ1ZmZlcjtcclxuICAgICAgICByZXR1cm4gc3JjO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSW1hZ2UgY29udmVyc2lvbiBlcnJvclwiLCBlKTtcclxuICAgICAgICBzcmMgPSBzcmMgaW5zdGFuY2VvZiBSZWFkYWJsZSA/IGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcikgOiBidWZmZXI7XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcjogQnVmZmVyKTogUmVhZGFibGUge1xyXG4gICAgY29uc3QgcmVhZFN0cmVhbSA9IG5ldyBQYXNzVGhyb3VnaCgpO1xyXG4gICAgcmVhZFN0cmVhbS5lbmQoYnVmZmVyKTtcclxuICAgIHJldHVybiByZWFkU3RyZWFtXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1Ub0J1ZmZlcihzdHJlYW06IFJlYWRhYmxlKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBjb25jYXQgPSBbXTtcclxuICAgICAgICBzdHJlYW0ub24oXCJkYXRhXCIsIGRhdGEgPT4ge1xyXG4gICAgICAgICAgICBjb25jYXQucHVzaChkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCByZWplY3QpO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCAoKSA9PiByZXNvbHZlKEJ1ZmZlci5jb25jYXQoY29uY2F0KSkpO1xyXG4gICAgfSlcclxufVxyXG5cclxuY2xhc3MgUmVhZGFibGVTdHJlYW1DbG9uZSBleHRlbmRzIFJlYWRhYmxlIHtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkYWJsZVN0cmVhbTogUmVhZGFibGUsIG9wdHM/OiBSZWFkYWJsZU9wdGlvbnMpIHtcclxuICAgICAgICBzdXBlcihvcHRzKTtcclxuICAgICAgICByZWFkYWJsZVN0cmVhbT8ub24oXCJkYXRhXCIsIGNodW5rID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoKGNodW5rKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZWFkYWJsZVN0cmVhbT8ub24oXCJlbmRcIiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnB1c2gobnVsbCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZXJyb3JcIiwgZXJyID0+IHtcclxuICAgICAgICAgICAgdGhpcy5lbWl0KFwiZXJyb3JcIiwgZXJyKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBfcmVhZChzaXplOiBudW1iZXIpIHtcclxuXHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5U3RyZWFtKHN0cmVhbTogUmVhZGFibGUsIG9wdHM/OiBSZWFkYWJsZU9wdGlvbnMpOiBSZWFkYWJsZSB7XHJcbiAgICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtQ2xvbmUoc3RyZWFtLCBvcHRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG1rZGlyUmVjdXJzaXZlKHBhdGg6IHN0cmluZywgbW9kZTogbnVtYmVyID0gbnVsbCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBta2RpcihwYXRoLCB7bW9kZTogbW9kZSB8fCAwbzc3NywgcmVjdXJzaXZlOiB0cnVlfSwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICB1bmxpbmsocGF0aCwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWFkRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPEJ1ZmZlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgZnNSZWFkRmlsZShwYXRoLCAoZXJyLCBkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZEFuZERlbGV0ZUZpbGUocGF0aDogc3RyaW5nLCB0aW1lb3V0OiBudW1iZXIgPSA1MDAwKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZWFkRmlsZShwYXRoKTtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHVubGluayhwYXRoLCAoKSA9PiB7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LCB0aW1lb3V0KTtcclxuICAgIHJldHVybiBkYXRhO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVGaWxlKHBhdGg6IHN0cmluZywgZGF0YTogQnVmZmVyKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIGF3YWl0IG1rZGlyUmVjdXJzaXZlKGRpcm5hbWUocGF0aCkpO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEJ1ZmZlcj4oKHJlcywgcmVqKSA9PiB7XHJcbiAgICAgICAgZnNXcml0ZUZpbGUocGF0aCwgZGF0YSwgZXJyID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycikge1xyXG4gICAgICAgICAgICAgICAgcmVqKGVycik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzKGRhdGEpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWx1ZVRvUHJvbWlzZSh2YWx1ZTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFByb21pc2UgPyB2YWx1ZSA6IFByb21pc2UucmVzb2x2ZSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm9taXNlVGltZW91dCh0aW1lb3V0OiBudW1iZXIgPSAxMDAwLCBlcnJvcjogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICByZWplY3QoYFRpbWVvdXQgZXhjZWVkZWQ6ICR7dGltZW91dH1tc2ApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoYFRpbWVvdXQ6ICR7dGltZW91dH1tc2ApO1xyXG4gICAgICAgIH0sIHRpbWVvdXQpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDb25zdHJ1Y3Rvck5hbWUodHlwZTogVHlwZTxhbnk+KTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0eXBlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvci5uYW1lO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25QYXJhbXMoZnVuYzogRnVuY3Rpb24pOiBzdHJpbmdbXSB7XHJcbiAgICAvLyBSZW1vdmUgY29tbWVudHMgb2YgdGhlIGZvcm0gLyogLi4uICovXHJcbiAgICAvLyBSZW1vdmluZyBjb21tZW50cyBvZiB0aGUgZm9ybSAvL1xyXG4gICAgLy8gUmVtb3ZlIGJvZHkgb2YgdGhlIGZ1bmN0aW9uIHsgLi4uIH1cclxuICAgIC8vIHJlbW92aW5nIFwiPT5cIiBpZiBmdW5jIGlzIGFycm93IGZ1bmN0aW9uXHJcbiAgICBjb25zdCBzdHIgPSBmdW5jLnRvU3RyaW5nKClcclxuICAgICAgICAucmVwbGFjZSgvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC9cXC9cXC8oLikqL2csIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoL3tbXFxzXFxTXSp9LywgXCJcIilcclxuICAgICAgICAucmVwbGFjZSgvPT4vZywgXCJcIilcclxuICAgICAgICAudHJpbSgpO1xyXG5cclxuICAgIC8vIFN0YXJ0IHBhcmFtZXRlciBuYW1lcyBhZnRlciBmaXJzdCBcIihcIlxyXG4gICAgY29uc3Qgc3RhcnQgPSBzdHIuaW5kZXhPZihcIihcIikgKyAxO1xyXG5cclxuICAgIC8vIEVuZCBwYXJhbWV0ZXIgbmFtZXMgaXMganVzdCBiZWZvcmUgbGFzdCBcIilcIlxyXG4gICAgY29uc3QgZW5kID0gc3RyLmxlbmd0aCAtIDE7XHJcbiAgICBjb25zdCByZXN1bHQgPSBzdHIuc3Vic3RyaW5nKHN0YXJ0LCBlbmQpLnNwbGl0KFwiLCBcIik7XHJcbiAgICBjb25zdCBwYXJhbXMgPSBbXTtcclxuXHJcbiAgICByZXN1bHQuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuXHJcbiAgICAgICAgLy8gUmVtb3ZpbmcgYW55IGRlZmF1bHQgdmFsdWVcclxuICAgICAgICBlbGVtZW50ID0gZWxlbWVudC5yZXBsYWNlKC89W1xcc1xcU10qL2csIFwiXCIpLnRyaW0oKTtcclxuXHJcbiAgICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoID4gMClcclxuICAgICAgICAgICAgcGFyYW1zLnB1c2goZWxlbWVudCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gcGFyYW1zO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RmlsZU5hbWUocGF0aDogc3RyaW5nLCB3aXRoRXh0ZW5zaW9uOiBib29sZWFuID0gZmFsc2UpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgbmFtZSA9IGJhc2VuYW1lKHBhdGggfHwgXCJcIik7XHJcbiAgICByZXR1cm4gd2l0aEV4dGVuc2lvbiA/IG5hbWUgOiBuYW1lLnNwbGl0KFwiLlwiKS5zbGljZSgwLCAtMSkuam9pbihcIi5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRFeHRlbnNpb24ocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShwYXRoIHx8IFwiXCIpO1xyXG4gICAgcmV0dXJuIG5hbWUuc3BsaXQoXCIuXCIpLnBvcCgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSWRTdHJpbmcoKTogYW55IHtcclxuICAgIHJldHVybiBuZXcgT2JqZWN0SWQoKS50b0hleFN0cmluZygpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaWRUb1N0cmluZyh2YWx1ZTogYW55KTogYW55IHtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHJldHVybiB2YWx1ZS5tYXAoaWRUb1N0cmluZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBPYmplY3RJZCB8fCB2YWx1ZSBpbnN0YW5jZW9mIFR5cGVzLk9iamVjdElkXHJcbiAgICAgICAgPyB2YWx1ZS50b0hleFN0cmluZygpXHJcbiAgICAgICAgOiAoaXNTdHJpbmcodmFsdWUpID8gdmFsdWUgOiB2YWx1ZSB8fCBudWxsKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRyYW5zZm9ybWVyKHRyYW5zZm9ybT86IChkb2M6IERvY3VtZW50LCByZXQ6IGFueSwgb3B0aW9ucz86IGFueSkgPT4gYW55KSB7XHJcbiAgICByZXR1cm4gKGRvYzogRG9jdW1lbnQsIHJldDogYW55LCBvcHRpb25zPzogYW55KSA9PiB7XHJcbiAgICAgICAgcmV0LmlkID0gaWRUb1N0cmluZyhyZXQuaWQpIHx8IHJldC5pZDtcclxuICAgICAgICBpZiAoZG9jLl9pZCkge1xyXG4gICAgICAgICAgICByZXQuX2lkID0gaWRUb1N0cmluZyhkb2MuX2lkKTtcclxuICAgICAgICAgICAgcmV0LmlkID0gcmV0LmlkIHx8IHJldC5faWQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRlbGV0ZSByZXQuX192O1xyXG4gICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKHRyYW5zZm9ybSkgPyB0cmFuc2Zvcm0oZG9jLCByZXQsIG9wdGlvbnMpIHx8IHJldCA6IHJldDtcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBicm9hZGNhc3Qoc29ja2V0U2VydmVyOiBTZXJ2ZXIsIGNiOiAoY2xpZW50OiBJQ2xpZW50U29ja2V0KSA9PiB2b2lkKTogdm9pZCB7XHJcbiAgICBBcnJheS5mcm9tKE9iamVjdC52YWx1ZXMoc29ja2V0U2VydmVyLnNvY2tldHMuc29ja2V0cykpLmZvckVhY2goY2IpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmFuZChtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQocmFuZG9tKG1pbiwgbWF4KSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByYW5kb20obWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBtaW4gKyBNYXRoLnJhbmRvbSgpICogKG1heCAtIG1pbik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtdWx0aVN1YnNjcmlwdGlvbiguLi5zdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25bXSk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICByZXR1cm4gbmV3IFN1YnNjcmlwdGlvbigoKSA9PiB7XHJcbiAgICAgICAgc3Vic2NyaXB0aW9ucy5mb3JFYWNoKHMgPT4ge1xyXG4gICAgICAgICAgICBzLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmFibGVGcm9tRnVuY3Rpb24oY2FsbGJhY2tGdW5jOiAoKSA9PiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgbGV0IHN1YmplY3Q6IGFueTtcclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxhbnk+KChzdWJzY3JpYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKCFzdWJqZWN0KSB7XHJcbiAgICAgICAgICAgIHN1YmplY3QgPSBuZXcgU3ViamVjdCgpO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgc3ViamVjdCA9IGZyb20oY2FsbGJhY2tGdW5jKCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjYW5SZXBvcnRFcnJvcihzdWJqZWN0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHN1YmplY3QuZXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGVycik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN1YmplY3Quc3Vic2NyaWJlKHN1YnNjcmliZXIpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYWRMZWZ0KHZhbHVlOiBhbnksIGNvdW50OiBudW1iZXIgPSAzLCBwYWRXaXRoOiBzdHJpbmcgPSBcIjBcIik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7dmFsdWV9YC5wYWRTdGFydChjb3VudCwgcGFkV2l0aCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwYWRSaWdodCh2YWx1ZTogYW55LCBjb3VudDogbnVtYmVyID0gMywgcGFkV2l0aDogc3RyaW5nID0gXCIwXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfWAucGFkRW5kKGNvdW50LCBwYWRXaXRoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZVRvRGFzaChzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csIFwiJDEtJDJcIikudG9Mb3dlckNhc2UoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRlbGV0ZUZyb21CdWNrZXQoYnVja2V0OiBHcmlkRlNCdWNrZXQsIGZpbGVJZDogT2JqZWN0SWQpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHN0cmluZz4oKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBidWNrZXQuZGVsZXRlKGZpbGVJZCwgZXJyb3IgPT4ge1xyXG4gICAgICAgICAgICBsZXQgZXJyID0gZXJyb3IgYXMgYW55O1xyXG4gICAgICAgICAgICBpZiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgIGVyciA9IGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IgfHwgXCJcIjtcclxuICAgICAgICAgICAgICAgIGlmICghaXNTdHJpbmcoZXJyKSB8fCAhZXJyLnN0YXJ0c1dpdGgoXCJGaWxlTm90Rm91bmRcIikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShmaWxlSWQudG9IZXhTdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KSk7XHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRQcmVkaWNhdGU6IEZpbHRlclByZWRpY2F0ZSA9ICgpID0+IHRydWU7XHJcblxyXG5mdW5jdGlvbiBjb3B5UmVjdXJzaXZlKHRhcmdldDogYW55LCBzb3VyY2U6IGFueSwgcHJlZGljYXRlPzogRmlsdGVyUHJlZGljYXRlKTogYW55IHtcclxuICAgIHByZWRpY2F0ZSA9IHByZWRpY2F0ZSB8fCBkZWZhdWx0UHJlZGljYXRlO1xyXG4gICAgaWYgKGlzUHJpbWl0aXZlKHNvdXJjZSkgfHwgaXNEYXRlKHNvdXJjZSkgfHwgaXNGdW5jdGlvbihzb3VyY2UpKSByZXR1cm4gc291cmNlO1xyXG4gICAgaWYgKGlzQXJyYXkoc291cmNlKSkge1xyXG4gICAgICAgIHRhcmdldCA9IGlzQXJyYXkodGFyZ2V0KSA/IEFycmF5LmZyb20odGFyZ2V0KSA6IFtdO1xyXG4gICAgICAgIHNvdXJjZS5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXByZWRpY2F0ZShpdGVtLCBpbmRleCwgdGFyZ2V0LCBzb3VyY2UpKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmICh0YXJnZXQubGVuZ3RoID4gaW5kZXgpXHJcbiAgICAgICAgICAgICAgICB0YXJnZXRbaW5kZXhdID0gY29weVJlY3Vyc2l2ZSh0YXJnZXRbaW5kZXhdLCBpdGVtLCBwcmVkaWNhdGUpO1xyXG4gICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICB0YXJnZXQucHVzaChjb3B5UmVjdXJzaXZlKG51bGwsIGl0ZW0sIHByZWRpY2F0ZSkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcbiAgICBpZiAoaXNCdWZmZXIoc291cmNlKSkgcmV0dXJuIEJ1ZmZlci5mcm9tKHNvdXJjZSk7XHJcblxyXG4gICAgLy8gQ29weSBtYXAgZW50cmllc1xyXG4gICAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIE1hcCkge1xyXG4gICAgICAgIGlmIChzb3VyY2UgaW5zdGFuY2VvZiBNYXApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgW2tleSwgdmFsdWVdIG9mIHNvdXJjZS5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAgIGlmICghcHJlZGljYXRlKHZhbHVlLCBrZXksIHRhcmdldCwgc291cmNlKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB0YXJnZXQuc2V0KGtleSwgY29weVJlY3Vyc2l2ZSh0YXJnZXQuZ2V0KGtleSksIHZhbHVlLCBwcmVkaWNhdGUpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIC8vIElmIG9iamVjdCBkZWZpbmVzIF9fc2hvdWxkQ29weSBhcyBmYWxzZSwgdGhlbiBkb24ndCBjb3B5IGl0XHJcbiAgICBpZiAoc291cmNlLl9fc2hvdWxkQ29weSA9PT0gZmFsc2UpIHJldHVybiBzb3VyY2U7XHJcbiAgICAvLyBDb3B5IG9iamVjdFxyXG4gICAgY29uc3Qgc2hvdWxkQ29weSA9IGlzRnVuY3Rpb24oc291cmNlLl9fc2hvdWxkQ29weSkgPyBzb3VyY2UuX19zaG91bGRDb3B5IDogKCkgPT4gdHJ1ZTtcclxuICAgIGlmIChpc0NvbnN0cnVjdG9yKHNvdXJjZS5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IHNvdXJjZS5jb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm90byA9IHNvdXJjZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwgc291cmNlLnByb3RvdHlwZTtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0YXJnZXQgPSBPYmplY3QuYXNzaWduKHt9LCB0YXJnZXQgfHwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvcHkgb2JqZWN0IG1lbWJlcnNcclxuICAgIGxldCBrZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcclxuICAgIHRhcmdldCA9IGtleXMucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xyXG4gICAgICAgIGlmICghcHJlZGljYXRlKHNvdXJjZVtrZXldLCBrZXksIHJlc3VsdCwgc291cmNlKSkgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICByZXN1bHRba2V5XSA9ICFzaG91bGRDb3B5KGtleSwgc291cmNlW2tleV0pID8gc291cmNlW2tleV0gOiBjb3B5UmVjdXJzaXZlKHJlc3VsdFtrZXldLCBzb3VyY2Vba2V5XSwgcHJlZGljYXRlKTtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfSwgdGFyZ2V0KTtcclxuXHJcbiAgICAvLyBDb3B5IG9iamVjdCBwcm9wZXJ0aWVzXHJcbiAgICBjb25zdCBkZXNjcmlwdG9ycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSk7XHJcbiAgICBrZXlzID0gT2JqZWN0LmtleXMoZGVzY3JpcHRvcnMpLmZpbHRlcihrID0+IGtleXMuaW5kZXhPZihrKSA8IDApO1xyXG4gICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yc1trZXldKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHRhcmdldDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxUPihvYmo6IFQsIHByZWRpY2F0ZTogRmlsdGVyUHJlZGljYXRlKTogUGFydGlhbDxUPiB7XHJcbiAgICByZXR1cm4gY29weVJlY3Vyc2l2ZShudWxsLCBvYmosIHByZWRpY2F0ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb3B5PFQ+KG9iajogVCk6IFQge1xyXG4gICAgcmV0dXJuIGNvcHlSZWN1cnNpdmUobnVsbCwgb2JqKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbjxUPih0YXJnZXQ6IFQsIHNvdXJjZTogYW55LCBwcmVkaWNhdGU/OiBGaWx0ZXJQcmVkaWNhdGUpOiBUIHtcclxuICAgIHJldHVybiBjb3B5UmVjdXJzaXZlKHRhcmdldCwgc291cmNlLCBwcmVkaWNhdGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbWQ1KGRhdGE6IGFueSk6IHN0cmluZyB7XHJcbiAgICBpZiAoaXNPYmplY3QoZGF0YSkpIHtcclxuICAgICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzU3RyaW5nKGRhdGEpKSB7XHJcbiAgICAgICAgdGhyb3cgYENhbid0IG1kNSBvdGhlciB0aGF0IHJhdyBvYmplY3Qgb3Igc3RyaW5nYDtcclxuICAgIH1cclxuICAgIHJldHVybiBjcmVhdGVIYXNoKFwibWQ1XCIpLnVwZGF0ZShkYXRhKS5kaWdlc3QoXCJoZXhcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBydW5Db21tYW5kKHNjcmlwdFBhdGg6IHN0cmluZywgZXhwZWN0ZWRDb2RlOiBudW1iZXIgPSAwKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY3AgPSBleGVjQ2hpbGRQcm9jZXNzKHNjcmlwdFBhdGgsIChlcnJvciwgc3Rkb3V0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvciAmJiBleHBlY3RlZENvZGUgIT09IGVycm9yLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbGluZXMgPSAoc3Rkb3V0IHx8IFwiXCIpLnNwbGl0KFwiXFxuXCIpO1xyXG4gICAgICAgICAgICBsZXQgbGluZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHdoaWxlICghbGluZSAmJiBsaW5lcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBsaW5lID0gbGluZXMucG9wKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzb2x2ZShsaW5lKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjcC5zdGRvdXQub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY3Auc3RkZXJyLm9uKFwiZGF0YVwiLCBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGRhdGEudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ29uc29sZUNvbG9yIHtcclxuICAgIFJlc2V0ID0gXCJcXHgxYlswbVwiLFxyXG4gICAgQnJpZ2h0ID0gXCJcXHgxYlsxbVwiLFxyXG4gICAgRGltID0gXCJcXHgxYlsybVwiLFxyXG4gICAgVW5kZXJzY29yZSA9IFwiXFx4MWJbNG1cIixcclxuICAgIEJsaW5rID0gXCJcXHgxYls1bVwiLFxyXG4gICAgUmV2ZXJzZSA9IFwiXFx4MWJbN21cIixcclxuICAgIEhpZGRlbiA9IFwiXFx4MWJbOG1cIixcclxuXHJcbiAgICBGZ0JsYWNrID0gXCJcXHgxYlszMG1cIixcclxuICAgIEZnUmVkID0gXCJcXHgxYlszMW1cIixcclxuICAgIEZnR3JlZW4gPSBcIlxceDFiWzMybVwiLFxyXG4gICAgRmdZZWxsb3cgPSBcIlxceDFiWzMzbVwiLFxyXG4gICAgRmdCbHVlID0gXCJcXHgxYlszNG1cIixcclxuICAgIEZnTWFnZW50YSA9IFwiXFx4MWJbMzVtXCIsXHJcbiAgICBGZ0N5YW4gPSBcIlxceDFiWzM2bVwiLFxyXG4gICAgRmdXaGl0ZSA9IFwiXFx4MWJbMzdtXCIsXHJcbiAgICBGZ0RlZmF1bHQgPSBcIlxceDFiWzM4bVwiLFxyXG5cclxuICAgIEJnQmxhY2sgPSBcIlxceDFiWzQwbVwiLFxyXG4gICAgQmdSZWQgPSBcIlxceDFiWzQxbVwiLFxyXG4gICAgQmdHcmVlbiA9IFwiXFx4MWJbNDJtXCIsXHJcbiAgICBCZ1llbGxvdyA9IFwiXFx4MWJbNDNtXCIsXHJcbiAgICBCZ0JsdWUgPSBcIlxceDFiWzQ0bVwiLFxyXG4gICAgQmdNYWdlbnRhID0gXCJcXHgxYls0NW1cIixcclxuICAgIEJnQ3lhbiA9IFwiXFx4MWJbNDZtXCIsXHJcbiAgICBCZ1doaXRlID0gXCJcXHgxYls0N21cIixcclxuICAgIEJnRGVmYXVsdCA9IFwiXFx4MWJbNDhtXCJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJSnNvbkNvbG9ycyB7XHJcbiAgICBrZXlDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIG51bWJlckNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgc3RyaW5nQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICB0cnVlQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBmYWxzZUNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgbnVsbENvbG9yPzogQ29uc29sZUNvbG9yO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0Q29sb3JzOiBJSnNvbkNvbG9ycyA9IHtcclxuICAgIGtleUNvbG9yOiBDb25zb2xlQ29sb3IuRmdXaGl0ZSxcclxuICAgIG51bWJlckNvbG9yOiBDb25zb2xlQ29sb3IuRmdCbHVlLFxyXG4gICAgc3RyaW5nQ29sb3I6IENvbnNvbGVDb2xvci5GZ1llbGxvdyxcclxuICAgIHRydWVDb2xvcjogQ29uc29sZUNvbG9yLkZnR3JlZW4sXHJcbiAgICBmYWxzZUNvbG9yOiBDb25zb2xlQ29sb3IuRmdSZWQsXHJcbiAgICBudWxsQ29sb3I6IENvbnNvbGVDb2xvci5CZ01hZ2VudGFcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvbG9yaXplKGlucHV0OiBhbnksIGNvbG9yOiBDb25zb2xlQ29sb3IpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke2NvbG9yfSR7aW5wdXR9JHtDb25zb2xlQ29sb3IuUmVzZXR9YDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGpzb25IaWdobGlnaHQoaW5wdXQ6IHN0cmluZyB8IG9iamVjdCwgY29sb3JPcHRpb25zPzogSUpzb25Db2xvcnMpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgY29sb3JzID0gT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbG9ycywgY29sb3JPcHRpb25zKVxyXG4gICAgY29uc3QganNvbiA9IChpc1N0cmluZyhpbnB1dCkgPyBpbnB1dCA6IEpTT04uc3RyaW5naWZ5KGlucHV0LCBudWxsLCAyKSkucmVwbGFjZSgvJi9nLCAnJicpLnJlcGxhY2UoLzwvZywgJzwnKS5yZXBsYWNlKC8+L2csICc+JylcclxuICAgIHJldHVybiBqc29uLnJlcGxhY2UoLyhcIihcXFxcdVthLXpBLVowLTldezR9fFxcXFxbXnVdfFteXFxcXFwiXSkqXCIoXFxzKjopP3xcXGIodHJ1ZXxmYWxzZXxudWxsKVxcYnwtP1xcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWytdP1xcZCspPykvZywgKG1hdGNoKSA9PiB7XHJcbiAgICAgICAgbGV0IGNvbG9yID0gY29sb3JzLm51bWJlckNvbG9yXHJcbiAgICAgICAgaWYgKC9eXCIvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgIGlmICgvOiQvLnRlc3QobWF0Y2gpKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9ycy5rZXlDb2xvclxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29sb3IgPSBjb2xvcnMuc3RyaW5nQ29sb3I7XHJcbiAgICAgICAgICAgICAgICBtYXRjaCA9ICdcIicgKyBtYXRjaC5zdWJzdHIoMSwgbWF0Y2gubGVuZ3RoIC0gMikgKyAnXCInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29sb3IgPSAvdHJ1ZS8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgID8gY29sb3JzLnRydWVDb2xvclxyXG4gICAgICAgICAgICAgICAgOiAvZmFsc2UvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgPyBjb2xvcnMuZmFsc2VDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgIDogL251bGwvLnRlc3QobWF0Y2gpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gY29sb3JzLm51bGxDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6IGNvbG9yXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtjb2xvcn0ke21hdGNofSR7Q29uc29sZUNvbG9yLlJlc2V0fWBcclxuICAgIH0pXHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlU3BlY2lhbENoYXJzKHN0cjogc3RyaW5nLCB0bzogc3RyaW5nID0gXCItXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3N0cn1gLnJlcGxhY2UoL1smXFwvXFxcXCMsICsoKSR+JS5AJ1wiOio/PD57fV0vZywgdG8pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVnZXhFc2NhcGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3N0cn1gLnJlcGxhY2UoL1stXFwvXFxcXF4kKis/LigpfFtcXF17fV0vZywgJ1xcXFwkJicpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbihhcnI6IGFueVtdKTogYW55W10ge1xyXG4gICAgcmV0dXJuIGFyci5yZWR1Y2UoKGZsYXQsIHRvRmxhdHRlbikgPT4ge1xyXG4gICAgICAgIHJldHVybiBmbGF0LmNvbmNhdChpc0FycmF5KHRvRmxhdHRlbikgPyBmbGF0dGVuKHRvRmxhdHRlbikgOiB0b0ZsYXR0ZW4pO1xyXG4gICAgfSwgW10pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gd3JhcEVycm9yKGU6IGFueSwgbWVzc2FnZTogc3RyaW5nLCBodHRwQ29kZTogbnVtYmVyID0gNTAwKTogRXJyb3Ige1xyXG4gICAgaWYgKGF4aW9zLmlzQXhpb3NFcnJvcihlKSkge1xyXG4gICAgICAgIGUubWVzc2FnZSA9IG1lc3NhZ2U7XHJcbiAgICAgICAgcmV0dXJuIGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV3IEh0dHBFcnJvcihodHRwQ29kZSwgYCR7bWVzc2FnZX06ICR7ZX1gKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERpck5hbWUoKTogc3RyaW5nIHtcclxuICAgIGlmICh0eXBlb2YgX19kaXJuYW1lID09PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgY29uc3QgX19maWxlbmFtZSA9IGZpbGVVUkxUb1BhdGgoaW1wb3J0Lm1ldGEudXJsKTtcclxuICAgICAgICByZXR1cm4gZGlybmFtZShfX2ZpbGVuYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Rpcm5hbWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlVXJsKGVuZGluZzogc3RyaW5nID0gXCIvXCIpOiBQYXJhbVJlc29sdmVyIHtcclxuICAgIHJldHVybiB1cmwgPT4ge1xyXG4gICAgICAgIHJldHVybiB1cmwgPyBgJHt1cmwucmVwbGFjZSgvXFwvKyQvLCBcIlwiKX0ke2VuZGluZ31gIDogZW5kaW5nO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZVVybFNsYXNoID0gcHJlcGFyZVVybChcIi9cIik7XHJcblxyXG5leHBvcnQgY29uc3QgcHJlcGFyZVVybEVtcHR5ID0gcHJlcGFyZVVybChcIlwiKTtcclxuXHJcbmZ1bmN0aW9uIGNoZWNrVGV4dEZpbGVUeXBlKHR5cGU6IElGaWxlVHlwZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHR5cGUubWltZS5pbmRleE9mKFwidGV4dFwiKSA+PSAwIHx8IHR5cGUubWltZS5pbmRleE9mKFwieG1sXCIpID49IDA7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGZpeFRleHRGaWxlVHlwZSh0eXBlOiBJRmlsZVR5cGUsIGJ1ZmZlcjogQnVmZmVyKTogSUZpbGVUeXBlIHtcclxuICAgIGNvbnN0IHRleHQgPSBidWZmZXIudG9TdHJpbmcoXCJ1dGY4XCIpO1xyXG4gICAgaWYgKHRleHQuaW5kZXhPZihcIjxzdmdcIikgPj0gMCkge1xyXG4gICAgICAgIHJldHVybiB7ZXh0OiBcInN2Z1wiLCBtaW1lOiBcImltYWdlL3N2Zyt4bWxcIn07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZpbGVUeXBlRnJvbUJ1ZmZlcihidWZmZXI6IEJ1ZmZlcik6IFByb21pc2U8SUZpbGVUeXBlPiB7XHJcbiAgICBjb25zdCBzdHJlYW0gPSBidWZmZXJUb1N0cmVhbShidWZmZXIpO1xyXG4gICAgY29uc3QgdHlwZSA9IChhd2FpdCBleHRyYWN0RmlsZVR5cGUoc3RyZWFtKSA/PyB7ZXh0OiBcInR4dFwiLCBtaW1lOiBcInRleHQvcGxhaW5cIn0pIGFzIElGaWxlVHlwZTtcclxuICAgIGlmIChjaGVja1RleHRGaWxlVHlwZSh0eXBlKSkge1xyXG4gICAgICAgIHJldHVybiBmaXhUZXh0RmlsZVR5cGUodHlwZSwgYnVmZmVyKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0eXBlO1xyXG59XHJcbiJdfQ==
695
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBRSxRQUFRLElBQUksVUFBVSxFQUFFLE1BQU0sRUFBRSxTQUFTLElBQUksV0FBVyxFQUFDLE1BQU0sSUFBSSxDQUFDO0FBQ25GLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxLQUFLLENBQUM7QUFDbEMsT0FBTyxFQUFDLElBQUksSUFBSSxnQkFBZ0IsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sUUFBUSxDQUFDO0FBRWxDLE9BQU8sRUFBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDN0QsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBRWpFLE9BQU8sRUFBZSxRQUFRLEVBQUMsTUFBTSxTQUFTLENBQUM7QUFDL0MsT0FBTyxFQUFXLEtBQUssRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsV0FBVyxFQUFFLFFBQVEsRUFBa0IsTUFBTSxRQUFRLENBQUM7QUFDOUQsT0FBTyxNQUFnQixNQUFNLE9BQU8sQ0FBQztBQUNyQyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQzFCLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxlQUFlLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQVdyRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUM7QUFNckIsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFrQjtJQUN2QyxZQUFZLEVBQUUsSUFBSTtDQUNyQixDQUFDO0FBSUYsTUFBTSxVQUFVLGlC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QUFDLFNBQVMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUN4RSxPQUFPLEdBQUcsQ0FBQztLQUNkO0lBRUQsZUFBZTtJQUNmLE1BQU0sQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0lBQ3JGLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25GLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMs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SSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0UsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLElBQWUsRUFBRSxNQUFjO0lBQ3BELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRTtRQUMzQixPQUFPLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFDLENBQUM7S0FDOUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNoQixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxrQkFBa0IsQ0FBQyxNQUFjO0lBQ25ELE1BQU0sTUFBTSxHQUFHLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUN0QyxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFDLENBQWMsQ0FBQztJQUM5RixJQUFJLGlCQUFpQixDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3pCLE9BQU8sZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUN4QztJQUNELE9BQU8sSUFBSSxDQUFDO0FBQ2hCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge21rZGlyLCByZWFkRmlsZSBhcyBmc1JlYWRGaWxlLCB1bmxpbmssIHdyaXRlRmlsZSBhcyBmc1dyaXRlRmlsZX0gZnJvbSBcImZzXCI7XHJcbmltcG9ydCB7YmFzZW5hbWUsIGRpcm5hbWV9IGZyb20gXCJwYXRoXCI7XHJcbmltcG9ydCB7ZmlsZVVSTFRvUGF0aH0gZnJvbSBcInVybFwiO1xyXG5pbXBvcnQge2V4ZWMgYXMgZXhlY0NoaWxkUHJvY2Vzc30gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcclxuaW1wb3J0IHtjcmVhdGVIYXNofSBmcm9tIFwiY3J5cHRvXCI7XHJcbmltcG9ydCB7RGVwZW5kZW5jeUNvbnRhaW5lcn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7ZnJvbSwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2NhblJlcG9ydEVycm9yfSBmcm9tIFwicnhqcy9pbnRlcm5hbC91dGlsL2NhblJlcG9ydEVycm9yXCI7XHJcbmltcG9ydCB7U2VydmVyfSBmcm9tIFwic29ja2V0LmlvXCI7XHJcbmltcG9ydCB7R3JpZEZTQnVja2V0LCBPYmplY3RJZH0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtEb2N1bWVudCwgVHlwZXN9IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge1Bhc3NUaHJvdWdoLCBSZWFkYWJsZSwgUmVhZGFibGVPcHRpb25zfSBmcm9tIFwic3RyZWFtXCI7XHJcbmltcG9ydCBzaGFycF8sIHtSZWdpb259IGZyb20gXCJzaGFycFwiO1xyXG5pbXBvcnQge0h0dHBFcnJvcn0gZnJvbSBcInJvdXRpbmctY29udHJvbGxlcnNcIjtcclxuaW1wb3J0IGF4aW9zIGZyb20gXCJheGlvc1wiO1xyXG5pbXBvcnQge2ZpbGVUeXBlRnJvbVN0cmVhbSBhcyBleHRyYWN0RmlsZVR5cGV9IGZyb20gXCJmaWxlLXR5cGUvY29yZVwiO1xyXG5pbXBvcnQge1xyXG4gICAgSUFzc2V0Q3JvcEluZm8sXHJcbiAgICBJQXNzZXRJbWFnZVBhcmFtcyxcclxuICAgIElBc3NldE1ldGEsXHJcbiAgICBJQ2xpZW50U29ja2V0LFxyXG4gICAgSUZpbGVUeXBlLFxyXG4gICAgUGFyYW1SZXNvbHZlcixcclxuICAgIFR5cGVcclxufSBmcm9tIFwiLi9jb21tb24tdHlwZXNcIjtcclxuXHJcbmNvbnN0IHNoYXJwID0gc2hhcnBfO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRElDb250YWluZXJzIHtcclxuICAgIGFwcENvbnRhaW5lcjogRGVwZW5kZW5jeUNvbnRhaW5lclxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZGlDb250YWluZXJzOiBJRElDb250YWluZXJzID0ge1xyXG4gICAgYXBwQ29udGFpbmVyOiBudWxsXHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBGaWx0ZXJQcmVkaWNhdGUgPSAodmFsdWU6IGFueSwga2V5PzogYW55LCB0YXJnZXQ/OiBhbnksIHNvdXJjZT86IGFueSkgPT4gYm9vbGVhbjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc051bGxPclVuZGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdmFsdWUgPT0gbnVsbCB8fCB0eXBlb2YgdmFsdWUgPT0gXCJ1bmRlZmluZWRcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gIWlzTnVsbE9yVW5kZWZpbmVkKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGUob2JqOiBhbnkpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiXFxcXHMoW2EtekEtWl0rKVwiKTtcclxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKS5tYXRjaChyZWdleClbMV0udG9Mb3dlckNhc2UoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBnZXRUeXBlKHZhbHVlKSA9PSBcIm9iamVjdFwiO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNBcnJheSh2YWx1ZTogYW55KTogdmFsdWUgaXMgQXJyYXk8YW55PiB7XHJcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc0J1ZmZlcih2YWx1ZTogYW55KTogdmFsdWUgaXMgQnVmZmVyIHtcclxuICAgIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEJ1ZmZlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQm9vbGVhbih2YWx1ZTogYW55KTogdmFsdWUgaXMgYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRGF0ZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgRGF0ZSB7XHJcbiAgICByZXR1cm4gISF2YWx1ZSAmJiB2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdICYmICFpc05hTih2YWx1ZSkgJiYgXCJ1bmRlZmluZWRcIiAhPT0gdHlwZW9mIHZhbHVlLmdldERhdGU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpc1ByaW1pdGl2ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIHZhbHVlO1xyXG4gICAgcmV0dXJuIHZhbHVlID09IG51bGwgfHwgKHR5cGUgIT09IFwib2JqZWN0XCIgJiYgdHlwZSAhPT0gXCJmdW5jdGlvblwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzRnVuY3Rpb24odmFsdWU6IGFueSk6IHZhbHVlIGlzIEZ1bmN0aW9uIHtcclxuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uc3RydWN0b3IodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiAmJiB2YWx1ZS5wcm90b3R5cGUgJiYgdmFsdWUucHJvdG90eXBlLmNvbnN0cnVjdG9yKSA9PT0gdmFsdWUgJiYgdmFsdWUubmFtZSAhPT0gXCJPYmplY3RcIjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzVHlwZSh2YWx1ZTogYW55KTogdmFsdWUgaXMgVHlwZTxhbnk+IHtcclxuICAgIHJldHVybiBpc0NvbnN0cnVjdG9yKHZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlzSW50ZXJmYWNlKG9iajogYW55LCBpbnRlckZhY2VPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0pOiBib29sZWFuIHtcclxuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09IFwib2JqZWN0XCIgfHwgaXNBcnJheShvYmopIHx8ICFpc09iamVjdChpbnRlckZhY2VPYmplY3QpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW50ZXJGYWNlT2JqZWN0KTtcclxuICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcclxuICAgICAgICBsZXQgdHlwZSA9IGludGVyRmFjZU9iamVjdFtrZXldIHx8IFwiXCI7XHJcbiAgICAgICAgaWYgKHR5cGUuc3RhcnRzV2l0aChcIipcIikpIHtcclxuICAgICAgICAgICAgdHlwZSA9IHR5cGUuc3Vic3RyKDEpO1xyXG4gICAgICAgICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGtleSkgJiYgZ2V0VHlwZShvYmpba2V5XSkgIT09IHR5cGUpIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCFvYmouaGFzT3duUHJvcGVydHkoa2V5KSB8fCBnZXRUeXBlKG9ialtrZXldKSAhPT0gdHlwZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB1Y0ZpcnN0KHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF2YWx1ZSkgcmV0dXJuIFwiXCI7XHJcbiAgICByZXR1cm4gdmFsdWVbMF0udG9VcHBlckNhc2UoKSArIHZhbHVlLnN1YnN0cigxKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGxjRmlyc3QodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gXCJcIjtcclxuICAgIHJldHVybiB2YWx1ZVswXS50b0xvd2VyQ2FzZSgpICsgdmFsdWUuc3Vic3RyKDEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaXNPYmplY3RJZChpZDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGlkID09PSBcInN0cmluZ1wiICYmIGlkLmxlbmd0aCA9PSAyNCAmJiAhaXNOYU4oTnVtYmVyKFwiMHhcIiArIGlkKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmaXJzdEl0ZW08VD4odmFsdWU6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIHZhbHVlWzBdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbGFzdEl0ZW08VD4odmFsdWU6IFRbXSk6IFQge1xyXG4gICAgcmV0dXJuIHZhbHVlW3ZhbHVlLmxlbmd0aCAtIDFdO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVncm91cDxUPih2YWx1ZTogVFtdLCBjb21wYXJhdG9yOiAoYTogVCwgYjogVCkgPT4gYm9vbGVhbik6IEFycmF5PFRbXT4ge1xyXG4gICAgY29uc3QgcmVzdWx0OiBBcnJheTxUW10+ID0gW107XHJcbiAgICBpZiAoIWlzQXJyYXkodmFsdWUpIHx8IHZhbHVlLmxlbmd0aCA9PSAwKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgdmFsdWUgPSBBcnJheS5mcm9tKHZhbHVlKTtcclxuICAgIHJlc3VsdC5wdXNoKFt2YWx1ZS5zaGlmdCgpXSk7XHJcbiAgICB2YWx1ZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gcmVzdWx0LmZpbmQoZyA9PiBnLnNvbWUoYSA9PiBjb21wYXJhdG9yKGEsIGl0ZW0pKSk7XHJcbiAgICAgICAgaWYgKGdyb3VwKSB7XHJcbiAgICAgICAgICAgIGdyb3VwLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVzdWx0LnB1c2goW2l0ZW1dKTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHVuaXF1ZUl0ZW1zPFQ+KHZhbHVlOiBUW10pOiBUW10ge1xyXG4gICAgcmV0dXJuIHZhbHVlLmZpbHRlcigodiwgaXgpID0+IHZhbHVlLmluZGV4T2YodikgPT09IGl4KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlKG9iajogYW55LCBrZXk6IHN0cmluZywgZGVmYXVsdFZhbHVlPzogYW55LCB0cmVlRmFsbGJhY2s6IGJvb2xlYW4gPSBmYWxzZSk6IGFueSB7XHJcbiAgICBrZXkgPSBrZXkgfHwgXCJcIjtcclxuICAgIGNvbnN0IGtleXMgPSBrZXkuc3BsaXQoXCIuXCIpO1xyXG4gICAgbGV0IGN1cktleSA9IFwiXCI7XHJcbiAgICBkbyB7XHJcbiAgICAgICAgY3VyS2V5ICs9IGtleXMuc2hpZnQoKTtcclxuICAgICAgICBpZiAoaXNEZWZpbmVkKG9iaikgJiYgaXNEZWZpbmVkKG9ialtjdXJLZXldKSAmJiAodHlwZW9mIG9ialtjdXJLZXldID09PSBcIm9iamVjdFwiIHx8ICFrZXlzLmxlbmd0aCkpIHtcclxuICAgICAgICAgICAgb2JqID0gb2JqW2N1cktleV07XHJcbiAgICAgICAgICAgIGN1cktleSA9IFwiXCI7XHJcbiAgICAgICAgfSBlbHNlIGlmICgha2V5cy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlID0gdHlwZW9mIGRlZmF1bHRWYWx1ZSA9PSBcInVuZGVmaW5lZFwiID8ga2V5LnJlcGxhY2UobmV3IFJlZ0V4cChgJHtjdXJLZXl9JGApLCBgeyR7Y3VyS2V5fX1gKSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgb2JqID0gdHJlZUZhbGxiYWNrID8gb2JqIHx8IGRlZmF1bHRWYWx1ZSA6IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJLZXkgKz0gXCIuXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfSB3aGlsZSAoa2V5cy5sZW5ndGgpO1xyXG4gICAgcmV0dXJuIG9iajtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdyb3VwQnk8VD4oaXRlbXM6IFRbXSwgY2I6IChpdGVtOiBUKSA9PiBzdHJpbmcpIHtcclxuICAgIHJldHVybiBpdGVtcy5yZWR1Y2UoKHJlcywgaXRlbSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwID0gY2IoaXRlbSk7XHJcbiAgICAgICAgcmVzW2dyb3VwXSA9IHJlc1tncm91cF0gfHwgW107XHJcbiAgICAgICAgcmVzW2dyb3VwXS5wdXNoKGl0ZW0pO1xyXG4gICAgICAgIHJldHVybiByZXM7XHJcbiAgICB9LCB7fSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0VmFsdWUodmFsdWU6IGFueSwgdHlwZTogc3RyaW5nKTogYW55IHtcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XHJcbiAgICAgICAgICAgIHZhbHVlID0gdHlwZW9mIHZhbHVlID09IFwic3RyaW5nXCIgPyB2YWx1ZS50b0xvd2VyQ2FzZSgpIDogdmFsdWU7XHJcbiAgICAgICAgICAgIHJldHVybiAodmFsdWUgPT0gXCJub1wiIHx8IHZhbHVlID09IFwiZmFsc2VcIiB8fCB2YWx1ZSA9PSBcIjBcIikgPyBmYWxzZSA6ICEhdmFsdWU7XHJcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUZsb2F0KHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIGlzTmFOKHZhbCkgPyAwIDogdmFsO1xyXG4gICAgICAgIGNhc2UgXCJhcnJheVwiOlxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YC5zcGxpdChcIiwgXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbmNvbnN0IGNyb3BJbnRlcmZhY2UgPSB7XHJcbiAgICB4OiBcIm51bWJlclwiLFxyXG4gICAgeTogXCJudW1iZXJcIixcclxuICAgIHc6IFwibnVtYmVyXCIsXHJcbiAgICBoOiBcIm51bWJlclwiXHJcbn07XHJcblxyXG5mdW5jdGlvbiB0b0Nyb3BSZWdpb24oY3JvcEluZm86IHN0cmluZyB8IGJvb2xlYW4gfCBJQXNzZXRDcm9wSW5mbyk6IFJlZ2lvbiB7XHJcbiAgICBsZXQgY3JvcCA9IGNyb3BJbmZvIGFzIElBc3NldENyb3BJbmZvO1xyXG4gICAgaWYgKGlzU3RyaW5nKGNyb3BJbmZvKSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNyb3AgPSBKU09OLnBhcnNlKGNyb3BJbmZvIGFzIHN0cmluZyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoIWlzSW50ZXJmYWNlKGNyb3AsIGNyb3BJbnRlcmZhY2UpKSByZXR1cm4gbnVsbDtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICAgd2lkdGg6IE1hdGgucm91bmQoY3JvcC53KSxcclxuICAgICAgICBoZWlnaHQ6IE1hdGgucm91bmQoY3JvcC5oKSxcclxuICAgICAgICB0b3A6IE1hdGgucm91bmQoY3JvcC55KSxcclxuICAgICAgICBsZWZ0OiBNYXRoLnJvdW5kKGNyb3AueClcclxuICAgIH07XHJcbn1cclxuXHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0ltYWdlPFQgPSBCdWZmZXIgfCBSZWFkYWJsZT4oc3JjOiBULCBwYXJhbXM/OiBJQXNzZXRJbWFnZVBhcmFtcywgbWV0YT86IElBc3NldE1ldGEpOiBQcm9taXNlPFQ+IHtcclxuXHJcbiAgICAvLyBEZWZhdWx0IHBhcmFtcyBhbmQgbWV0YVxyXG4gICAgcGFyYW1zID0gcGFyYW1zIHx8IHt9O1xyXG4gICAgbWV0YSA9IG1ldGEgfHwge307XHJcblxyXG4gICAgLy8gR2V0IGRlZmF1bHQgY3JvcCBpbmZvXHJcbiAgICBjb25zdCBjcm9wID0gdG9Dcm9wUmVnaW9uKG1ldGEuY3JvcCk7XHJcblxyXG4gICAgLy8gUmV0dXJuIHRoZSBzcmMgaWYgdGhlcmUgYXJlIG5vIHBhcmFtcyBhbmQgbm8gZGVmYXVsdCBjcm9wIGV4aXN0c1xyXG4gICAgaWYgKG1ldGEuZXh0ZW5zaW9uID09PSBcInN2Z1wiIHx8IChPYmplY3Qua2V5cyhwYXJhbXMpLmxlbmd0aCA9PSAwICYmICFjcm9wKSkge1xyXG4gICAgICAgIHJldHVybiBzcmM7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUGFyc2UgcGFyYW1zXHJcbiAgICBwYXJhbXMucm90YXRpb24gPSBpc05hTihwYXJhbXMucm90YXRpb24pID8gMCA6IE1hdGgucm91bmQocGFyYW1zLnJvdGF0aW9uIC8gOTApICogOTA7XHJcbiAgICBwYXJhbXMuY2FudmFzU2NhbGVYID0gaXNOYU4ocGFyYW1zLmNhbnZhc1NjYWxlWCkgPyAxIDogTnVtYmVyKHBhcmFtcy5jYW52YXNTY2FsZVgpO1xyXG4gICAgcGFyYW1zLmNhbnZhc1NjYWxlWSA9IGlzTmFOKHBhcmFtcy5jYW52YXNTY2FsZVkpID8gMSA6IE51bWJlcihwYXJhbXMuY2FudmFzU2NhbGVZKTtcclxuICAgIHBhcmFtcy5zY2FsZVggPSBpc05hTihwYXJhbXMuc2NhbGVYKSA/IDEgOiBOdW1iZXIocGFyYW1zLnNjYWxlWCk7XHJcbiAgICBwYXJhbXMuc2NhbGVZID0gaXNOYU4ocGFyYW1zLnNjYWxlWSkgPyAxIDogTnVtYmVyKHBhcmFtcy5zY2FsZVkpO1xyXG4gICAgcGFyYW1zLmNyb3AgPSBpc0Jvb2xlYW4ocGFyYW1zLmNyb3ApID8gcGFyYW1zLmNyb3AgOiBwYXJhbXMuY3JvcCA9PSBcInRydWVcIjtcclxuXHJcbiAgICBsZXQgYnVmZmVyID0gc3JjIGluc3RhbmNlb2YgUmVhZGFibGUgPyBhd2FpdCBzdHJlYW1Ub0J1ZmZlcihzcmMpIDogc3JjIGFzIGFueTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgLy8gR2V0IGNyb3AgaW5mb1xyXG4gICAgICAgIGNvbnN0IGNyb3BCZWZvcmUgPSB0b0Nyb3BSZWdpb24ocGFyYW1zLmNyb3BCZWZvcmUgfHwgKHBhcmFtcy5jcm9wID8gbWV0YS5jcm9wQmVmb3JlIDogbnVsbCkpO1xyXG4gICAgICAgIGNvbnN0IGNyb3BBZnRlciA9IHRvQ3JvcFJlZ2lvbihwYXJhbXMuY3JvcEFmdGVyIHx8IChwYXJhbXMuY3JvcCA/IG1ldGEuY3JvcEFmdGVyIDogbnVsbCkpO1xyXG4gICAgICAgIC8vIEdldCBtZXRhZGF0YVxyXG4gICAgICAgIGxldCBpbWcgPSBzaGFycChidWZmZXIpO1xyXG4gICAgICAgIGxldCB7d2lkdGgsIGhlaWdodH0gPSBhd2FpdCBpbWcubWV0YWRhdGEoKTtcclxuICAgICAgICAvLyBDcm9wIGJlZm9yZSByZXNpemVcclxuICAgICAgICBpZiAoY3JvcEJlZm9yZSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IGNyb3BCZWZvcmUud2lkdGg7XHJcbiAgICAgICAgICAgIGhlaWdodCA9IGNyb3BCZWZvcmUuaGVpZ2h0O1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcuZXh0cmFjdChjcm9wQmVmb3JlKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNyb3ApIHtcclxuICAgICAgICAgICAgd2lkdGggPSBjcm9wLndpZHRoO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBjcm9wLmhlaWdodDtcclxuICAgICAgICAgICAgaW1nID0gaW1nLmV4dHJhY3QoY3JvcCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIFJlc2l6ZSBjYW52YXNcclxuICAgICAgICBjb25zdCBjYW52YXNTY2FsZVggPSBtZXRhPy5jYW52YXNTY2FsZVggfHwgMTtcclxuICAgICAgICBjb25zdCBjYW52YXNTY2FsZVkgPSBtZXRhPy5jYW52YXNTY2FsZVkgfHwgMTtcclxuICAgICAgICBpZiAocGFyYW1zLmNhbnZhc1NjYWxlWCAhPT0gY2FudmFzU2NhbGVYIHx8IHBhcmFtcy5jYW52YXNTY2FsZVkgIT09IGNhbnZhc1NjYWxlWSkge1xyXG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgucm91bmQod2lkdGggKiBwYXJhbXMuY2FudmFzU2NhbGVYKTtcclxuICAgICAgICAgICAgaGVpZ2h0ID0gTWF0aC5yb3VuZChoZWlnaHQgKiBwYXJhbXMuY2FudmFzU2NhbGVZKTtcclxuICAgICAgICAgICAgaW1nID0gaW1nLnJlc2l6ZSh7d2lkdGgsIGhlaWdodCwgYmFja2dyb3VuZDogXCIjMDAwMDAwMDBcIiwgZml0OiBcImNvbnRhaW5cIn0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSZXNpemUgaW1hZ2VcclxuICAgICAgICBpZiAocGFyYW1zLnNjYWxlWCAhPT0gMSB8fCBwYXJhbXMuc2NhbGVZICE9PSAxKSB7XHJcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5yb3VuZCh3aWR0aCAqIHBhcmFtcy5zY2FsZVgpO1xyXG4gICAgICAgICAgICBoZWlnaHQgPSBNYXRoLnJvdW5kKGhlaWdodCAqIHBhcmFtcy5zY2FsZVkpO1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcucmVzaXplKHt3aWR0aCwgaGVpZ2h0LCBiYWNrZ3JvdW5kOiBcIiMwMDAwMDAwMFwiLCBmaXQ6IFwiZmlsbFwifSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIENyb3AgYWZ0ZXIgcmVzaXplXHJcbiAgICAgICAgaWYgKGNyb3BBZnRlcikge1xyXG4gICAgICAgICAgICBpbWcgPSBpbWcuZXh0cmFjdChjcm9wQWZ0ZXIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBSb3RhdGVcclxuICAgICAgICBpZiAocGFyYW1zLnJvdGF0aW9uICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGJ1ZmZlciA9IGF3YWl0IGltZy50b0J1ZmZlcigpO1xyXG4gICAgICAgICAgICBpbWcgPSBzaGFycChidWZmZXIpLnJvdGF0ZShwYXJhbXMucm90YXRpb24pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBidWZmZXIgPSBhd2FpdCBpbWcudG9CdWZmZXIoKTtcclxuICAgICAgICBzcmMgPSBzcmMgaW5zdGFuY2VvZiBSZWFkYWJsZSA/IGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcikgOiBidWZmZXI7XHJcbiAgICAgICAgcmV0dXJuIHNyYztcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkltYWdlIGNvbnZlcnNpb24gZXJyb3JcIiwgZSk7XHJcbiAgICAgICAgc3JjID0gc3JjIGluc3RhbmNlb2YgUmVhZGFibGUgPyBidWZmZXJUb1N0cmVhbShidWZmZXIpIDogYnVmZmVyO1xyXG4gICAgICAgIHJldHVybiBzcmM7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWZmZXJUb1N0cmVhbShidWZmZXI6IEJ1ZmZlcik6IFJlYWRhYmxlIHtcclxuICAgIGNvbnN0IHJlYWRTdHJlYW0gPSBuZXcgUGFzc1Rocm91Z2goKTtcclxuICAgIHJlYWRTdHJlYW0uZW5kKGJ1ZmZlcik7XHJcbiAgICByZXR1cm4gcmVhZFN0cmVhbVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtVG9CdWZmZXIoc3RyZWFtOiBSZWFkYWJsZSk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8QnVmZmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgY29uc3QgY29uY2F0ID0gW107XHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZGF0YVwiLCBkYXRhID0+IHtcclxuICAgICAgICAgICAgY29uY2F0LnB1c2goZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcclxuICAgICAgICBzdHJlYW0ub24oXCJlbmRcIiwgKCkgPT4gcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNvbmNhdCkpKTtcclxuICAgIH0pXHJcbn1cclxuXHJcbmNsYXNzIFJlYWRhYmxlU3RyZWFtQ2xvbmUgZXh0ZW5kcyBSZWFkYWJsZSB7XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZGFibGVTdHJlYW06IFJlYWRhYmxlLCBvcHRzPzogUmVhZGFibGVPcHRpb25zKSB7XHJcbiAgICAgICAgc3VwZXIob3B0cyk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZGF0YVwiLCBjaHVuayA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucHVzaChjaHVuayk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmVhZGFibGVTdHJlYW0/Lm9uKFwiZW5kXCIsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5wdXNoKG51bGwpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtPy5vbihcImVycm9yXCIsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW1pdChcImVycm9yXCIsIGVycik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgX3JlYWQoc2l6ZTogbnVtYmVyKSB7XHJcblxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29weVN0cmVhbShzdHJlYW06IFJlYWRhYmxlLCBvcHRzPzogUmVhZGFibGVPcHRpb25zKTogUmVhZGFibGUge1xyXG4gICAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbUNsb25lKHN0cmVhbSwgb3B0cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBta2RpclJlY3Vyc2l2ZShwYXRoOiBzdHJpbmcsIG1vZGU6IG51bWJlciA9IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgbWtkaXIocGF0aCwge21vZGU6IG1vZGUgfHwgMG83NzcsIHJlY3Vyc2l2ZTogdHJ1ZX0sIGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZGVsZXRlRmlsZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgdW5saW5rKHBhdGgsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVhZEZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxCdWZmZXI+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXMsIHJlaikgPT4ge1xyXG4gICAgICAgIGZzUmVhZEZpbGUocGF0aCwgKGVyciwgZGF0YSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICByZWooZXJyKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXMoZGF0YSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRBbmREZWxldGVGaWxlKHBhdGg6IHN0cmluZywgdGltZW91dDogbnVtYmVyID0gNTAwMCk6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVhZEZpbGUocGF0aCk7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICB1bmxpbmsocGF0aCwgKCkgPT4ge1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSwgdGltZW91dCk7XHJcbiAgICByZXR1cm4gZGF0YTtcclxufVxyXG5cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlRmlsZShwYXRoOiBzdHJpbmcsIGRhdGE6IEJ1ZmZlcik6IFByb21pc2U8QnVmZmVyPiB7XHJcbiAgICBhd2FpdCBta2RpclJlY3Vyc2l2ZShkaXJuYW1lKHBhdGgpKTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxCdWZmZXI+KChyZXMsIHJlaikgPT4ge1xyXG4gICAgICAgIGZzV3JpdGVGaWxlKHBhdGgsIGRhdGEsIGVyciA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnIpIHtcclxuICAgICAgICAgICAgICAgIHJlaihlcnIpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlcyhkYXRhKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdmFsdWVUb1Byb21pc2UodmFsdWU6IGFueSk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlID8gdmFsdWUgOiBQcm9taXNlLnJlc29sdmUodmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcHJvbWlzZVRpbWVvdXQodGltZW91dDogbnVtYmVyID0gMTAwMCwgZXJyb3I6IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGBUaW1lb3V0IGV4Y2VlZGVkOiAke3RpbWVvdXR9bXNgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGBUaW1lb3V0OiAke3RpbWVvdXR9bXNgKTtcclxuICAgICAgICB9LCB0aW1lb3V0KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3JOYW1lKHR5cGU6IFR5cGU8YW55Pik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdHlwZS5wcm90b3R5cGUuY29uc3RydWN0b3IubmFtZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZ1bmN0aW9uUGFyYW1zKGZ1bmM6IEZ1bmN0aW9uKTogc3RyaW5nW10ge1xyXG4gICAgLy8gUmVtb3ZlIGNvbW1lbnRzIG9mIHRoZSBmb3JtIC8qIC4uLiAqL1xyXG4gICAgLy8gUmVtb3ZpbmcgY29tbWVudHMgb2YgdGhlIGZvcm0gLy9cclxuICAgIC8vIFJlbW92ZSBib2R5IG9mIHRoZSBmdW5jdGlvbiB7IC4uLiB9XHJcbiAgICAvLyByZW1vdmluZyBcIj0+XCIgaWYgZnVuYyBpcyBhcnJvdyBmdW5jdGlvblxyXG4gICAgY29uc3Qgc3RyID0gZnVuYy50b1N0cmluZygpXHJcbiAgICAgICAgLnJlcGxhY2UoL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vZywgXCJcIilcclxuICAgICAgICAucmVwbGFjZSgvXFwvXFwvKC4pKi9nLCBcIlwiKVxyXG4gICAgICAgIC5yZXBsYWNlKC97W1xcc1xcU10qfS8sIFwiXCIpXHJcbiAgICAgICAgLnJlcGxhY2UoLz0+L2csIFwiXCIpXHJcbiAgICAgICAgLnRyaW0oKTtcclxuXHJcbiAgICAvLyBTdGFydCBwYXJhbWV0ZXIgbmFtZXMgYWZ0ZXIgZmlyc3QgXCIoXCJcclxuICAgIGNvbnN0IHN0YXJ0ID0gc3RyLmluZGV4T2YoXCIoXCIpICsgMTtcclxuXHJcbiAgICAvLyBFbmQgcGFyYW1ldGVyIG5hbWVzIGlzIGp1c3QgYmVmb3JlIGxhc3QgXCIpXCJcclxuICAgIGNvbnN0IGVuZCA9IHN0ci5sZW5ndGggLSAxO1xyXG4gICAgY29uc3QgcmVzdWx0ID0gc3RyLnN1YnN0cmluZyhzdGFydCwgZW5kKS5zcGxpdChcIiwgXCIpO1xyXG4gICAgY29uc3QgcGFyYW1zID0gW107XHJcblxyXG4gICAgcmVzdWx0LmZvckVhY2goZWxlbWVudCA9PiB7XHJcblxyXG4gICAgICAgIC8vIFJlbW92aW5nIGFueSBkZWZhdWx0IHZhbHVlXHJcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucmVwbGFjZSgvPVtcXHNcXFNdKi9nLCBcIlwiKS50cmltKCk7XHJcblxyXG4gICAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHBhcmFtcy5wdXNoKGVsZW1lbnQpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHBhcmFtcztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldEZpbGVOYW1lKHBhdGg6IHN0cmluZywgd2l0aEV4dGVuc2lvbjogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IG5hbWUgPSBiYXNlbmFtZShwYXRoIHx8IFwiXCIpO1xyXG4gICAgcmV0dXJuIHdpdGhFeHRlbnNpb24gPyBuYW1lIDogbmFtZS5zcGxpdChcIi5cIikuc2xpY2UoMCwgLTEpLmpvaW4oXCIuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXh0ZW5zaW9uKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBuYW1lID0gYmFzZW5hbWUocGF0aCB8fCBcIlwiKTtcclxuICAgIHJldHVybiBuYW1lLnNwbGl0KFwiLlwiKS5wb3AoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUlkU3RyaW5nKCk6IGFueSB7XHJcbiAgICByZXR1cm4gbmV3IE9iamVjdElkKCkudG9IZXhTdHJpbmcoKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGlkVG9TdHJpbmcodmFsdWU6IGFueSk6IGFueSB7XHJcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcclxuICAgICAgICByZXR1cm4gdmFsdWUubWFwKGlkVG9TdHJpbmcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgT2JqZWN0SWQgfHwgdmFsdWUgaW5zdGFuY2VvZiBUeXBlcy5PYmplY3RJZFxyXG4gICAgICAgID8gdmFsdWUudG9IZXhTdHJpbmcoKVxyXG4gICAgICAgIDogKGlzU3RyaW5nKHZhbHVlKSA/IHZhbHVlIDogdmFsdWUgfHwgbnVsbCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1lcih0cmFuc2Zvcm0/OiAoZG9jOiBEb2N1bWVudCwgcmV0OiBhbnksIG9wdGlvbnM/OiBhbnkpID0+IGFueSkge1xyXG4gICAgcmV0dXJuIChkb2M6IERvY3VtZW50LCByZXQ6IGFueSwgb3B0aW9ucz86IGFueSkgPT4ge1xyXG4gICAgICAgIHJldC5pZCA9IGlkVG9TdHJpbmcocmV0LmlkKSB8fCByZXQuaWQ7XHJcbiAgICAgICAgaWYgKGRvYy5faWQpIHtcclxuICAgICAgICAgICAgcmV0Ll9pZCA9IGlkVG9TdHJpbmcoZG9jLl9pZCk7XHJcbiAgICAgICAgICAgIHJldC5pZCA9IHJldC5pZCB8fCByZXQuX2lkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkZWxldGUgcmV0Ll9fdjtcclxuICAgICAgICByZXR1cm4gaXNGdW5jdGlvbih0cmFuc2Zvcm0pID8gdHJhbnNmb3JtKGRvYywgcmV0LCBvcHRpb25zKSB8fCByZXQgOiByZXQ7XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnJvYWRjYXN0KHNvY2tldFNlcnZlcjogU2VydmVyLCBjYjogKGNsaWVudDogSUNsaWVudFNvY2tldCkgPT4gdm9pZCk6IHZvaWQge1xyXG4gICAgQXJyYXkuZnJvbShPYmplY3QudmFsdWVzKHNvY2tldFNlcnZlci5zb2NrZXRzLnNvY2tldHMpKS5mb3JFYWNoKGNiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJhbmQobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuICAgIHJldHVybiBNYXRoLnJvdW5kKHJhbmRvbShtaW4sIG1heCkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmFuZG9tKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcbiAgICByZXR1cm4gbWluICsgTWF0aC5yYW5kb20oKSAqIChtYXggLSBtaW4pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbXVsdGlTdWJzY3JpcHRpb24oLi4uc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9uW10pOiBTdWJzY3JpcHRpb24ge1xyXG4gICAgcmV0dXJuIG5ldyBTdWJzY3JpcHRpb24oKCkgPT4ge1xyXG4gICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaChzID0+IHtcclxuICAgICAgICAgICAgcy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBvYnNlcnZhYmxlRnJvbUZ1bmN0aW9uKGNhbGxiYWNrRnVuYzogKCkgPT4gYW55KTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIGxldCBzdWJqZWN0OiBhbnk7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8YW55Pigoc3Vic2NyaWJlcikgPT4ge1xyXG4gICAgICAgIGlmICghc3ViamVjdCkge1xyXG4gICAgICAgICAgICBzdWJqZWN0ID0gbmV3IFN1YmplY3QoKTtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIHN1YmplY3QgPSBmcm9tKGNhbGxiYWNrRnVuYygpKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FuUmVwb3J0RXJyb3Ioc3ViamVjdCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdWJqZWN0LmVycm9yKGVycik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihlcnIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzdWJqZWN0LnN1YnNjcmliZShzdWJzY3JpYmVyKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGFkTGVmdCh2YWx1ZTogYW55LCBjb3VudDogbnVtYmVyID0gMywgcGFkV2l0aDogc3RyaW5nID0gXCIwXCIpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIGAke3ZhbHVlfWAucGFkU3RhcnQoY291bnQsIHBhZFdpdGgpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcGFkUmlnaHQodmFsdWU6IGFueSwgY291bnQ6IG51bWJlciA9IDMsIHBhZFdpdGg6IHN0cmluZyA9IFwiMFwiKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBgJHt2YWx1ZX1gLnBhZEVuZChjb3VudCwgcGFkV2l0aCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjYW1lbENhc2VUb0Rhc2goc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCBcIiQxLSQyXCIpLnRvTG93ZXJDYXNlKCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBkZWxldGVGcm9tQnVja2V0KGJ1Y2tldDogR3JpZEZTQnVja2V0LCBmaWxlSWQ6IE9iamVjdElkKTogUHJvbWlzZTxzdHJpbmc+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxzdHJpbmc+KCgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgYnVja2V0LmRlbGV0ZShmaWxlSWQsIGVycm9yID0+IHtcclxuICAgICAgICAgICAgbGV0IGVyciA9IGVycm9yIGFzIGFueTtcclxuICAgICAgICAgICAgaWYgKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICBlcnIgPSBlcnJvci5tZXNzYWdlIHx8IGVycm9yIHx8IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlzU3RyaW5nKGVycikgfHwgIWVyci5zdGFydHNXaXRoKFwiRmlsZU5vdEZvdW5kXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc29sdmUoZmlsZUlkLnRvSGV4U3RyaW5nKCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSkpO1xyXG59XHJcblxyXG5jb25zdCBkZWZhdWx0UHJlZGljYXRlOiBGaWx0ZXJQcmVkaWNhdGUgPSAoKSA9PiB0cnVlO1xyXG5cclxuZnVuY3Rpb24gY29weVJlY3Vyc2l2ZSh0YXJnZXQ6IGFueSwgc291cmNlOiBhbnksIHByZWRpY2F0ZT86IEZpbHRlclByZWRpY2F0ZSk6IGFueSB7XHJcbiAgICBwcmVkaWNhdGUgPSBwcmVkaWNhdGUgfHwgZGVmYXVsdFByZWRpY2F0ZTtcclxuICAgIGlmIChpc1ByaW1pdGl2ZShzb3VyY2UpIHx8IGlzRGF0ZShzb3VyY2UpIHx8IGlzRnVuY3Rpb24oc291cmNlKSkgcmV0dXJuIHNvdXJjZTtcclxuICAgIGlmIChpc0FycmF5KHNvdXJjZSkpIHtcclxuICAgICAgICB0YXJnZXQgPSBpc0FycmF5KHRhcmdldCkgPyBBcnJheS5mcm9tKHRhcmdldCkgOiBbXTtcclxuICAgICAgICBzb3VyY2UuZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGUoaXRlbSwgaW5kZXgsIHRhcmdldCwgc291cmNlKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICBpZiAodGFyZ2V0Lmxlbmd0aCA+IGluZGV4KVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0W2luZGV4XSA9IGNvcHlSZWN1cnNpdmUodGFyZ2V0W2luZGV4XSwgaXRlbSwgcHJlZGljYXRlKTtcclxuICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnB1c2goY29weVJlY3Vyc2l2ZShudWxsLCBpdGVtLCBwcmVkaWNhdGUpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xyXG4gICAgfVxyXG4gICAgaWYgKGlzQnVmZmVyKHNvdXJjZSkpIHJldHVybiBCdWZmZXIuZnJvbShzb3VyY2UpO1xyXG5cclxuICAgIC8vIElmIG9iamVjdCBkZWZpbmVzIF9fc2hvdWxkQ29weSBhcyBmYWxzZSwgdGhlbiBkb24ndCBjb3B5IGl0XHJcbiAgICBpZiAoc291cmNlLl9fc2hvdWxkQ29weSA9PT0gZmFsc2UpIHJldHVybiBzb3VyY2U7XHJcbiAgICAvLyBDb3B5IG9iamVjdFxyXG4gICAgY29uc3Qgc2hvdWxkQ29weSA9IGlzRnVuY3Rpb24oc291cmNlLl9fc2hvdWxkQ29weSkgPyBzb3VyY2UuX19zaG91bGRDb3B5IDogKCkgPT4gdHJ1ZTtcclxuICAgIGlmIChpc0NvbnN0cnVjdG9yKHNvdXJjZS5jb25zdHJ1Y3RvcikpIHtcclxuICAgICAgICBpZiAoIXRhcmdldCkge1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0ID0gbmV3IHNvdXJjZS5jb25zdHJ1Y3RvcigpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwcm90byA9IHNvdXJjZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgfHwgc291cmNlLnByb3RvdHlwZTtcclxuICAgICAgICAgICAgICAgIHRhcmdldCA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICB0YXJnZXQgPSBPYmplY3QuYXNzaWduKHt9LCB0YXJnZXQgfHwge30pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIENvcHkgbWFwIGVudHJpZXNcclxuICAgIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBNYXApIHtcclxuICAgICAgICBpZiAoc291cmNlIGluc3RhbmNlb2YgTWFwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IFtrZXksIHZhbHVlXSBvZiBzb3VyY2UuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZSh2YWx1ZSwga2V5LCB0YXJnZXQsIHNvdXJjZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgdGFyZ2V0LnNldChrZXksICFzaG91bGRDb3B5KGtleSwgdmFsdWUpID8gdmFsdWUgOiBjb3B5UmVjdXJzaXZlKHRhcmdldC5nZXQoa2V5KSwgdmFsdWUsIHByZWRpY2F0ZSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQ29weSBvYmplY3QgbWVtYmVyc1xyXG4gICAgbGV0IGtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xyXG4gICAgdGFyZ2V0ID0ga2V5cy5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XHJcbiAgICAgICAgaWYgKCFwcmVkaWNhdGUoc291cmNlW2tleV0sIGtleSwgcmVzdWx0LCBzb3VyY2UpKSByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIHJlc3VsdFtrZXldID0gIXNob3VsZENvcHkoa2V5LCBzb3VyY2Vba2V5XSkgPyBzb3VyY2Vba2V5XSA6IGNvcHlSZWN1cnNpdmUocmVzdWx0W2tleV0sIHNvdXJjZVtrZXldLCBwcmVkaWNhdGUpO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9LCB0YXJnZXQpO1xyXG5cclxuICAgIC8vIENvcHkgb2JqZWN0IHByb3BlcnRpZXNcclxuICAgIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKTtcclxuICAgIGtleXMgPSBPYmplY3Qua2V5cyhkZXNjcmlwdG9ycykuZmlsdGVyKGsgPT4ga2V5cy5pbmRleE9mKGspIDwgMCk7XHJcbiAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGRlc2NyaXB0b3JzW2tleV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gdGFyZ2V0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyPFQ+KG9iajogVCwgcHJlZGljYXRlOiBGaWx0ZXJQcmVkaWNhdGUpOiBQYXJ0aWFsPFQ+IHtcclxuICAgIHJldHVybiBjb3B5UmVjdXJzaXZlKG51bGwsIG9iaiwgcHJlZGljYXRlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNvcHk8VD4ob2JqOiBUKTogVCB7XHJcbiAgICByZXR1cm4gY29weVJlY3Vyc2l2ZShudWxsLCBvYmopO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduPFQ+KHRhcmdldDogVCwgc291cmNlOiBhbnksIHByZWRpY2F0ZT86IEZpbHRlclByZWRpY2F0ZSk6IFQge1xyXG4gICAgcmV0dXJuIGNvcHlSZWN1cnNpdmUodGFyZ2V0LCBzb3VyY2UsIHByZWRpY2F0ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtZDUoZGF0YTogYW55KTogc3RyaW5nIHtcclxuICAgIGlmIChpc09iamVjdChkYXRhKSkge1xyXG4gICAgICAgIGRhdGEgPSBKU09OLnN0cmluZ2lmeShkYXRhKTtcclxuICAgIH1cclxuICAgIGlmICghaXNTdHJpbmcoZGF0YSkpIHtcclxuICAgICAgICB0aHJvdyBgQ2FuJ3QgbWQ1IG90aGVyIHRoYXQgcmF3IG9iamVjdCBvciBzdHJpbmdgO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGNyZWF0ZUhhc2goXCJtZDVcIikudXBkYXRlKGRhdGEpLmRpZ2VzdChcImhleFwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJ1bkNvbW1hbmQoc2NyaXB0UGF0aDogc3RyaW5nLCBleHBlY3RlZENvZGU6IG51bWJlciA9IDApOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBjb25zdCBjcCA9IGV4ZWNDaGlsZFByb2Nlc3Moc2NyaXB0UGF0aCwgKGVycm9yLCBzdGRvdXQpID0+IHtcclxuICAgICAgICAgICAgaWYgKGVycm9yICYmIGV4cGVjdGVkQ29kZSAhPT0gZXJyb3IuY29kZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IChzdGRvdXQgfHwgXCJcIikuc3BsaXQoXCJcXG5cIik7XHJcbiAgICAgICAgICAgIGxldCBsaW5lID0gbnVsbDtcclxuICAgICAgICAgICAgd2hpbGUgKCFsaW5lICYmIGxpbmVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lcy5wb3AoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXNvbHZlKGxpbmUpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNwLnN0ZG91dC5vbihcImRhdGFcIiwgZnVuY3Rpb24gKGRhdGEpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YS50b1N0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBjcC5zdGRlcnIub24oXCJkYXRhXCIsIGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZGF0YS50b1N0cmluZygpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZW51bSBDb25zb2xlQ29sb3Ige1xyXG4gICAgUmVzZXQgPSBcIlxceDFiWzBtXCIsXHJcbiAgICBCcmlnaHQgPSBcIlxceDFiWzFtXCIsXHJcbiAgICBEaW0gPSBcIlxceDFiWzJtXCIsXHJcbiAgICBVbmRlcnNjb3JlID0gXCJcXHgxYls0bVwiLFxyXG4gICAgQmxpbmsgPSBcIlxceDFiWzVtXCIsXHJcbiAgICBSZXZlcnNlID0gXCJcXHgxYls3bVwiLFxyXG4gICAgSGlkZGVuID0gXCJcXHgxYls4bVwiLFxyXG5cclxuICAgIEZnQmxhY2sgPSBcIlxceDFiWzMwbVwiLFxyXG4gICAgRmdSZWQgPSBcIlxceDFiWzMxbVwiLFxyXG4gICAgRmdHcmVlbiA9IFwiXFx4MWJbMzJtXCIsXHJcbiAgICBGZ1llbGxvdyA9IFwiXFx4MWJbMzNtXCIsXHJcbiAgICBGZ0JsdWUgPSBcIlxceDFiWzM0bVwiLFxyXG4gICAgRmdNYWdlbnRhID0gXCJcXHgxYlszNW1cIixcclxuICAgIEZnQ3lhbiA9IFwiXFx4MWJbMzZtXCIsXHJcbiAgICBGZ1doaXRlID0gXCJcXHgxYlszN21cIixcclxuICAgIEZnRGVmYXVsdCA9IFwiXFx4MWJbMzhtXCIsXHJcblxyXG4gICAgQmdCbGFjayA9IFwiXFx4MWJbNDBtXCIsXHJcbiAgICBCZ1JlZCA9IFwiXFx4MWJbNDFtXCIsXHJcbiAgICBCZ0dyZWVuID0gXCJcXHgxYls0Mm1cIixcclxuICAgIEJnWWVsbG93ID0gXCJcXHgxYls0M21cIixcclxuICAgIEJnQmx1ZSA9IFwiXFx4MWJbNDRtXCIsXHJcbiAgICBCZ01hZ2VudGEgPSBcIlxceDFiWzQ1bVwiLFxyXG4gICAgQmdDeWFuID0gXCJcXHgxYls0Nm1cIixcclxuICAgIEJnV2hpdGUgPSBcIlxceDFiWzQ3bVwiLFxyXG4gICAgQmdEZWZhdWx0ID0gXCJcXHgxYls0OG1cIlxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElKc29uQ29sb3JzIHtcclxuICAgIGtleUNvbG9yPzogQ29uc29sZUNvbG9yO1xyXG4gICAgbnVtYmVyQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBzdHJpbmdDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIHRydWVDb2xvcj86IENvbnNvbGVDb2xvcjtcclxuICAgIGZhbHNlQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbiAgICBudWxsQ29sb3I/OiBDb25zb2xlQ29sb3I7XHJcbn1cclxuXHJcbmNvbnN0IGRlZmF1bHRDb2xvcnM6IElKc29uQ29sb3JzID0ge1xyXG4gICAga2V5Q29sb3I6IENvbnNvbGVDb2xvci5GZ1doaXRlLFxyXG4gICAgbnVtYmVyQ29sb3I6IENvbnNvbGVDb2xvci5GZ0JsdWUsXHJcbiAgICBzdHJpbmdDb2xvcjogQ29uc29sZUNvbG9yLkZnWWVsbG93LFxyXG4gICAgdHJ1ZUNvbG9yOiBDb25zb2xlQ29sb3IuRmdHcmVlbixcclxuICAgIGZhbHNlQ29sb3I6IENvbnNvbGVDb2xvci5GZ1JlZCxcclxuICAgIG51bGxDb2xvcjogQ29uc29sZUNvbG9yLkJnTWFnZW50YVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY29sb3JpemUoaW5wdXQ6IGFueSwgY29sb3I6IENvbnNvbGVDb2xvcik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7Y29sb3J9JHtpbnB1dH0ke0NvbnNvbGVDb2xvci5SZXNldH1gO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24ganNvbkhpZ2hsaWdodChpbnB1dDogc3RyaW5nIHwgb2JqZWN0LCBjb2xvck9wdGlvbnM/OiBJSnNvbkNvbG9ycyk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBjb2xvcnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0Q29sb3JzLCBjb2xvck9wdGlvbnMpXHJcbiAgICBjb25zdCBqc29uID0gKGlzU3RyaW5nKGlucHV0KSA/IGlucHV0IDogSlNPTi5zdHJpbmdpZnkoaW5wdXQsIG51bGwsIDIpKS5yZXBsYWNlKC8mL2csICcmJykucmVwbGFjZSgvPC9nLCAnPCcpLnJlcGxhY2UoLz4vZywgJz4nKVxyXG4gICAgcmV0dXJuIGpzb24ucmVwbGFjZSgvKFwiKFxcXFx1W2EtekEtWjAtOV17NH18XFxcXFtedV18W15cXFxcXCJdKSpcIihcXHMqOik/fFxcYih0cnVlfGZhbHNlfG51bGwpXFxifC0/XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bK10/XFxkKyk/KS9nLCAobWF0Y2gpID0+IHtcclxuICAgICAgICBsZXQgY29sb3IgPSBjb2xvcnMubnVtYmVyQ29sb3JcclxuICAgICAgICBpZiAoL15cIi8udGVzdChtYXRjaCkpIHtcclxuICAgICAgICAgICAgaWYgKC86JC8udGVzdChtYXRjaCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gY29sb3JzLmtleUNvbG9yXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xvciA9IGNvbG9ycy5zdHJpbmdDb2xvcjtcclxuICAgICAgICAgICAgICAgIG1hdGNoID0gJ1wiJyArIG1hdGNoLnN1YnN0cigxLCBtYXRjaC5sZW5ndGggLSAyKSArICdcIic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjb2xvciA9IC90cnVlLy50ZXN0KG1hdGNoKVxyXG4gICAgICAgICAgICAgICAgPyBjb2xvcnMudHJ1ZUNvbG9yXHJcbiAgICAgICAgICAgICAgICA6IC9mYWxzZS8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgICAgICA/IGNvbG9ycy5mYWxzZUNvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgOiAvbnVsbC8udGVzdChtYXRjaClcclxuICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2xvcnMubnVsbENvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogY29sb3JcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke2NvbG9yfSR7bWF0Y2h9JHtDb25zb2xlQ29sb3IuUmVzZXR9YFxyXG4gICAgfSlcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VTcGVjaWFsQ2hhcnMoc3RyOiBzdHJpbmcsIHRvOiBzdHJpbmcgPSBcIi1cIik6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7c3RyfWAucmVwbGFjZSgvWyZcXC9cXFxcIywgKygpJH4lLkAnXCI6Kj88Pnt9XS9nLCB0byk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZWdleEVzY2FwZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gYCR7c3RyfWAucmVwbGFjZSgvWy1cXC9cXFxcXiQqKz8uKCl8W1xcXXt9XS9nLCAnXFxcXCQmJyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBmbGF0dGVuKGFycjogYW55W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gYXJyLnJlZHVjZSgoZmxhdCwgdG9GbGF0dGVuKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGZsYXQuY29uY2F0KGlzQXJyYXkodG9GbGF0dGVuKSA/IGZsYXR0ZW4odG9GbGF0dGVuKSA6IHRvRmxhdHRlbik7XHJcbiAgICB9LCBbXSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3cmFwRXJyb3IoZTogYW55LCBtZXNzYWdlOiBzdHJpbmcsIGh0dHBDb2RlOiBudW1iZXIgPSA1MDApOiBFcnJvciB7XHJcbiAgICBpZiAoYXhpb3MuaXNBeGlvc0Vycm9yKGUpKSB7XHJcbiAgICAgICAgZS5tZXNzYWdlID0gbWVzc2FnZTtcclxuICAgICAgICByZXR1cm4gZTtcclxuICAgIH1cclxuICAgIHJldHVybiBuZXcgSHR0cEVycm9yKGh0dHBDb2RlLCBgJHttZXNzYWdlfTogJHtlfWApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGlyTmFtZSgpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiBfX2Rpcm5hbWUgPT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICBjb25zdCBfX2ZpbGVuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xyXG4gICAgICAgIHJldHVybiBkaXJuYW1lKF9fZmlsZW5hbWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fZGlybmFtZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVVcmwoZW5kaW5nOiBzdHJpbmcgPSBcIi9cIik6IFBhcmFtUmVzb2x2ZXIge1xyXG4gICAgcmV0dXJuIHVybCA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHVybCA/IGAke3VybC5yZXBsYWNlKC9cXC8rJC8sIFwiXCIpfSR7ZW5kaW5nfWAgOiBlbmRpbmc7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBwcmVwYXJlVXJsU2xhc2ggPSBwcmVwYXJlVXJsKFwiL1wiKTtcclxuXHJcbmV4cG9ydCBjb25zdCBwcmVwYXJlVXJsRW1wdHkgPSBwcmVwYXJlVXJsKFwiXCIpO1xyXG5cclxuZnVuY3Rpb24gY2hlY2tUZXh0RmlsZVR5cGUodHlwZTogSUZpbGVUeXBlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZS5taW1lLmluZGV4T2YoXCJ0ZXh0XCIpID49IDAgfHwgdHlwZS5taW1lLmluZGV4T2YoXCJ4bWxcIikgPj0gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gZml4VGV4dEZpbGVUeXBlKHR5cGU6IElGaWxlVHlwZSwgYnVmZmVyOiBCdWZmZXIpOiBJRmlsZVR5cGUge1xyXG4gICAgY29uc3QgdGV4dCA9IGJ1ZmZlci50b1N0cmluZyhcInV0ZjhcIik7XHJcbiAgICBpZiAodGV4dC5pbmRleE9mKFwiPHN2Z1wiKSA+PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIHtleHQ6IFwic3ZnXCIsIG1pbWU6IFwiaW1hZ2Uvc3ZnK3htbFwifTtcclxuICAgIH1cclxuICAgIHJldHVybiB0eXBlO1xyXG59XHJcblxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmlsZVR5cGVGcm9tQnVmZmVyKGJ1ZmZlcjogQnVmZmVyKTogUHJvbWlzZTxJRmlsZVR5cGU+IHtcclxuICAgIGNvbnN0IHN0cmVhbSA9IGJ1ZmZlclRvU3RyZWFtKGJ1ZmZlcik7XHJcbiAgICBjb25zdCB0eXBlID0gKGF3YWl0IGV4dHJhY3RGaWxlVHlwZShzdHJlYW0pID8/IHtleHQ6IFwidHh0XCIsIG1pbWU6IFwidGV4dC9wbGFpblwifSkgYXMgSUZpbGVUeXBlO1xyXG4gICAgaWYgKGNoZWNrVGV4dEZpbGVUeXBlKHR5cGUpKSB7XHJcbiAgICAgICAgcmV0dXJuIGZpeFRleHRGaWxlVHlwZSh0eXBlLCBidWZmZXIpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHR5cGU7XHJcbn1cclxuIl19
@@ -632,17 +632,6 @@ function copyRecursive(target, source, predicate) {
632
632
  }
633
633
  if (isBuffer(source))
634
634
  return Buffer.from(source);
635
- // Copy map entries
636
- if (target instanceof Map) {
637
- if (source instanceof Map) {
638
- for (let [key, value] of source.entries()) {
639
- if (!predicate(value, key, target, source))
640
- continue;
641
- target.set(key, copyRecursive(target.get(key), value, predicate));
642
- }
643
- }
644
- return target;
645
- }
646
635
  // If object defines __shouldCopy as false, then don't copy it
647
636
  if (source.__shouldCopy === false)
648
637
  return source;
@@ -662,6 +651,17 @@ function copyRecursive(target, source, predicate) {
662
651
  else {
663
652
  target = Object.assign({}, target || {});
664
653
  }
654
+ // Copy map entries
655
+ if (target instanceof Map) {
656
+ if (source instanceof Map) {
657
+ for (let [key, value] of source.entries()) {
658
+ if (!predicate(value, key, target, source))
659
+ continue;
660
+ target.set(key, !shouldCopy(key, value) ? value : copyRecursive(target.get(key), value, predicate));
661
+ }
662
+ }
663
+ return target;
664
+ }
665
665
  // Copy object members
666
666
  let keys = Object.keys(source);
667
667
  target = keys.reduce((result, key) => {